<?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>An aggregated feed of all of my posts Archive</title>
  <id>https://pype.dev/all/archive/atom.xml</id>
  <updated>2026-10-06T21:30:00Z</updated>
  <subtitle>My thoughts and streams of consciousness organized into barely coherent posts about things</subtitle>
  <link href="https://pype.dev/all/" rel="alternate" type="text/html"></link>
  <link href="https://pype.dev/all/archive/atom.xml" rel="self" type="application/atom+xml"></link>
  <link href="https://pype.dev/all/atom.xml" rel="current" type="application/atom+xml"></link>
  <author>
    <name>Nic Payne</name>
  </author>
  <generator uri="https://github.com/WaylonWalker/markata-go">markata-go</generator>
  <fh:complete></fh:complete>
  <entry>
    <title>The Faulted Disk: harbor Replacement Writeup</title>
    <id>https://pype.dev/harbor-faulted-disk-replacement/</id>
    <updated>2026-10-06T21:30:00Z</updated>
    <published>2026-10-06T21:30:00Z</published>
    <link href="https://pype.dev/harbor-faulted-disk-replacement/" rel="alternate" type="text/html"></link>
    <summary type="text">The sequel to panicking-led-to-losing-my-desktop — this time the monitoring actually caught the disk dying, and nothing was lost.</summary>
    <content type="html">&lt;p&gt;The sequel to &lt;a href=&#34;/panicking-led-to-losing-my-desktop&#34;&gt;panicking-led-to-losing-my-desktop&lt;/a&gt; — this time the monitoring actually caught the disk dying, and nothing was lost.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-happened&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What happened&lt;/span&gt; &lt;a href=&#34;#what-happened&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;harbor&lt;/code&gt; is my replica pool — a 10.9T mirror (2x 12TB) that receives syncoid snapshots from &lt;code&gt;tank&lt;/code&gt;. One side of the mirror, a Seagate Exos &lt;code&gt;ST12000NM0127&lt;/code&gt; (serial &lt;code&gt;ZJV4QFLB&lt;/code&gt;, &lt;code&gt;/dev/sdb&lt;/code&gt;), went &lt;strong&gt;FAULTED&lt;/strong&gt; with 14 read + 22 checksum errors.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mirror-0                              DEGRADED     0     0     0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ata-ST12000VN0008-2PH103_ZTM0NFDW  ONLINE       0     0     0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ata-ST12000NM0127_ZJV4QFLB         FAULTED     14     0    22  too many errors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The IronWolf mirror side carried the pool — &lt;code&gt;No known data errors&lt;/code&gt;. ZFS redundancy did exactly its job.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-difference-from-last-time&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The difference from last time&lt;/span&gt; &lt;a href=&#34;#the-difference-from-last-time&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Last failure: no monitoring, found out by accident months later, desktop died.&lt;/p&gt;&#xA;&lt;p&gt;This failure: SigNoz + node-exporter&amp;rsquo;s ZFS collector → &lt;code&gt;node_zfs_zpool_state{state=&amp;quot;degraded&amp;quot;}&lt;/code&gt; → alert rule → Gotify → my phone. The gotify notification fired &lt;em&gt;before&lt;/em&gt; I knew anything was wrong.&lt;/p&gt;&#xA;&lt;h2 id=&#34;diagnosis&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Diagnosis&lt;/span&gt; &lt;a href=&#34;#diagnosis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before &lt;code&gt;zpool clear&lt;/code&gt; or replace — check SMART. &lt;code&gt;smartctl-exporter&lt;/code&gt; already scrapes all disks into SigNoz, so I didn&amp;rsquo;t even need sudo:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Reallocated_Sector_Ct&lt;/code&gt; raw = &lt;strong&gt;3024&lt;/strong&gt; and counting&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Offline_Uncorrectable&lt;/code&gt; value/worst still 100 but raw errors climbing&lt;/li&gt;&#xA;&lt;li&gt;SMART overall: still PASS (SMART&amp;rsquo;s overall bit is conservative until threshold)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;3k+ remapped sectors is a platter going bad — not a cable blip. Verdict: replace, don&amp;rsquo;t clear.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-swap-the-annoying-part&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The swap (the annoying part)&lt;/span&gt; &lt;a href=&#34;#the-swap-the-annoying-part&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hot-plug is never as smooth as it should be:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;zpool offline harbor &amp;lt;old&amp;gt;&lt;/code&gt; to stop writes to the dead drive — actually skipped; drive fell off the bus on its own&lt;/li&gt;&#xA;&lt;li&gt;New IronWolf &lt;code&gt;ZTN1CQ07&lt;/code&gt; in hand → plugged into ghost&amp;rsquo;s SATA → &lt;strong&gt;didn&amp;rsquo;t enumerate&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Forced rescan (&lt;code&gt;echo &amp;quot;- - -&amp;quot; | sudo tee /sys/class/scsi_host/host*/scan&lt;/code&gt;) → nothing&lt;/li&gt;&#xA;&lt;li&gt;Moved it to the &lt;em&gt;old drive&amp;rsquo;s port&lt;/em&gt; → nothing&lt;/li&gt;&#xA;&lt;li&gt;Sabrent USB dock on aurora → dock enumerated as &lt;code&gt;0B&lt;/code&gt; device, no disk behind it → reseated + replugged → &lt;strong&gt;drive spun up and appeared&lt;/strong&gt;: &lt;code&gt;/dev/sdd&lt;/code&gt;, 10.9T, old ZFS partition table on it (used drive — &lt;code&gt;part1&lt;/code&gt;/&lt;code&gt;part9&lt;/code&gt; layout)&lt;/li&gt;&#xA;&lt;li&gt;Back to ghost, direct SATA → enumerated as &lt;code&gt;sdb&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Lesson: &amp;ldquo;spins up but doesn&amp;rsquo;t enumerate&amp;rdquo; on direct SATA + dock-shows-0B = seating/power problem, not DOA. The drive was fine all along.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-replace&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The replace&lt;/span&gt; &lt;a href=&#34;#the-replace&#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 zpool replace harbor &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;  ata-ST12000NM0127_ZJV4QFLB &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;  ata-ST12000VN0008-2PH103_ZTN1CQ07&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Resilver: &lt;strong&gt;8.80T in 18h38m, 0 errors&lt;/strong&gt; (~154M/s). Pool stayed online and usable the whole time.&lt;/p&gt;&#xA;&lt;p&gt;One gotcha: after resilver, &lt;code&gt;zpool status&lt;/code&gt; showed &lt;code&gt;errors: 1 data errors&lt;/code&gt; — but &lt;code&gt;zpool status -v&lt;/code&gt; showed an &lt;strong&gt;empty error list&lt;/strong&gt;. The corrupted data was already repaired; the counter was just stale. &lt;code&gt;sudo zpool clear harbor&lt;/code&gt; → clean.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-monitoring-that-made-this-possible&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The monitoring that made this possible&lt;/span&gt; &lt;a href=&#34;#the-monitoring-that-made-this-possible&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wired during this session (all now in SigNoz):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;node_zfs_zpool_state&lt;/code&gt; — pool health (node-exporter zfs collector)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;smartctl-exporter&lt;/code&gt; — SMART attributes incl. reallocated sectors (the early-death signal)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;zfs-metrics.sh&lt;/code&gt; textfile bridge — sanoid &lt;code&gt;--monitor-*&lt;/code&gt; exit codes, zpool error counters, scrub ages, resilver %, syncoid last-success&lt;/li&gt;&#xA;&lt;li&gt;Alert rules → Gotify → phone&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The replication alerting even proved itself live: syncoid failed twice during the resilver window and I got paged on both. Turned out to be send-time contention — self-healed once resilver finished — but the notification path works end to end.&lt;/p&gt;&#xA;&lt;h2 id=&#34;remaining-homework&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Remaining homework&lt;/span&gt; &lt;a href=&#34;#remaining-homework&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Buy the replacement spare (the shelf&amp;rsquo;s empty now)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;10Fold&lt;/code&gt; datasets are garbage + have zero snapshots — destroy&lt;/li&gt;&#xA;&lt;li&gt;Every scheduled job emits &lt;code&gt;cron_last_success_epoch&lt;/code&gt; now — if a job dies silently again, I&amp;rsquo;ll know&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Same failure as April, opposite outcome. Redundancy did the protection; monitoring did the &lt;em&gt;detection&lt;/em&gt;. You need both.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;Co-authored with Devin, who ran the monitoring stack, the SMART diagnosis, and the alerting loop.&lt;/em&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FWBG - Genesis - 4.3</title>
    <id>https://pype.dev/fwbg-genesis-4-3/</id>
    <updated>2026-09-30T06:55:25Z</updated>
    <published>2026-09-30T06:55:25Z</published>
    <link href="https://pype.dev/fwbg-genesis-4-3/" rel="alternate" type="text/html"></link>
    <summary type="text">beware the growth of sin... harboring it leads to worse consequences for us and others. Cain&#39;s initial sin is left ambiguous but his response to his sin...</summary>
    <content type="html">&lt;p&gt;beware the growth of sin&amp;hellip; harboring it leads to worse consequences for us and others. Cain&amp;rsquo;s initial sin is left ambiguous but his response to his sin being called out by the Lord shows the trajectory of his life&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FWBG - Genesis - 4.2</title>
    <id>https://pype.dev/fwbg-genesis-4-2/</id>
    <updated>2026-09-28T06:35:28Z</updated>
    <published>2026-09-28T06:35:28Z</published>
    <link href="https://pype.dev/fwbg-genesis-4-2/" rel="alternate" type="text/html"></link>
    <summary type="text">Marvel at God&#39;s patience. Cain could&#39;ve heeded the Lord&#39;s warnings, it would&#39;ve been right.</summary>
    <content type="html">&lt;p&gt;Marvel at God&amp;rsquo;s patience. Cain could&amp;rsquo;ve heeded the Lord&amp;rsquo;s warnings, it would&amp;rsquo;ve been right.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Men’s Group - Week 36</title>
    <id>https://pype.dev/olivet-mens-group-2026-week-36/</id>
    <updated>2026-09-25T06:00:00Z</updated>
    <published>2026-09-25T06:00:00Z</published>
    <link href="https://pype.dev/olivet-mens-group-2026-week-36/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! quote &#34;Psalm 119:9, 11&#34;</summary>
    <content type="html">&lt;h1 id=&#34;week-36-september-20-26-2026&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Week 36 — September 20 – 26, 2026&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h3 id=&#34;meeting-friday-september-25-october-5&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meeting: Friday, &lt;/span&gt;&lt;del&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;September 25&lt;/span&gt;&lt;/del&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt; October 5&lt;/span&gt; &lt;a href=&#34;#meeting-friday-september-25-october-5&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;memory-verse-psalm-119-9-11&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Memory Verse: Psalm 119:9, 11&lt;/span&gt; &lt;a href=&#34;#memory-verse-psalm-119-9-11&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 119:9, 11&lt;/p&gt;&#xA;&lt;ol start=&#34;9&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;How can a young man keep his way pure?&#xA;By guarding it with Your word.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I have hidden Your word in my heart,&#xA;that I might not sin against You.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;readings&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Readings&lt;/span&gt; &lt;a href=&#34;#readings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 1: Matthew 24:32-51 &amp;amp; John 17&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 2: Matthew 26:35-27:31&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 3: Matthew 27:32-66&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 4: Luke 23:26-56&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 5: John 19&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;day-1-matthew-24-32-51-john-17&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 1 — Matthew 24:32-51 &amp;amp; John 17&lt;/span&gt; &lt;a href=&#34;#day-1-matthew-24-32-51-john-17&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Matthew 24:32-51&lt;/summary&gt;&#xA;&lt;ol start=&#34;32&#34;&gt;&#xA;&lt;li&gt;Now learn this lesson from the fig tree: As soon as its branches become tender and sprout leaves, you know that summer is near.&lt;/li&gt;&#xA;&lt;li&gt;So also, when you see all these things, you will know that He is near, right at the door.&lt;/li&gt;&#xA;&lt;li&gt;Truly I tell you, this generation will not pass away until all these things have happened.&lt;/li&gt;&#xA;&lt;li&gt;Heaven and earth will pass away, but My words will never pass away.&lt;/li&gt;&#xA;&lt;li&gt;But about that day and hour no one knows, not even the angels in heaven, nor the Son, but only the Father.&lt;/li&gt;&#xA;&lt;li&gt;As it was in the days of Noah, so will it be at the coming of the Son of Man.&lt;/li&gt;&#xA;&lt;li&gt;For in the days before the flood, people were eating and drinking, marrying and giving in marriage, up to the day Noah entered the ark.&lt;/li&gt;&#xA;&lt;li&gt;And they were oblivious, until the flood came and swept them all away. So will it be at the coming of the Son of Man.&lt;/li&gt;&#xA;&lt;li&gt;Two men will be in the field: one will be taken and the other left.&lt;/li&gt;&#xA;&lt;li&gt;Two women will be grinding at the mill: one will be taken and the other left.&lt;/li&gt;&#xA;&lt;li&gt;Therefore keep watch, because you do not know the day on which your Lord will come.&lt;/li&gt;&#xA;&lt;li&gt;But understand this: If the homeowner had known in which watch of the night the thief was coming, he would have kept watch and would not have let his house be broken into.&lt;/li&gt;&#xA;&lt;li&gt;For this reason, you also must be ready, because the Son of Man will come at an hour you do not expect.&lt;/li&gt;&#xA;&lt;li&gt;Who then is the faithful and wise servant, whom the master has put in charge of his household, to give the others their food at the proper time?&lt;/li&gt;&#xA;&lt;li&gt;Blessed is that servant whose master finds him doing so when he returns.&lt;/li&gt;&#xA;&lt;li&gt;Truly I tell you, he will put him in charge of all his possessions.&lt;/li&gt;&#xA;&lt;li&gt;But suppose that servant is wicked and says in his heart, &amp;lsquo;My master will be away a long time.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;And he begins to beat his fellow servants and to eat and drink with drunkards.&lt;/li&gt;&#xA;&lt;li&gt;The master of that servant will come on a day he does not expect and at an hour he does not anticipate.&lt;/li&gt;&#xA;&lt;li&gt;Then he will cut him to pieces and assign him a place with the hypocrites, where there will be weeping and gnashing of teeth.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 17&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;After Jesus had spoken these words, He looked up to heaven and said, “Father, the hour has come. Glorify Your Son, that Your Son may glorify You.&lt;/li&gt;&#xA;&lt;li&gt;For You granted Him authority over all people, so that He may give eternal life to all those You have given Him.&lt;/li&gt;&#xA;&lt;li&gt;Now this is eternal life, that they may know You, the only true God, and Jesus Christ, whom You have sent.&lt;/li&gt;&#xA;&lt;li&gt;I have glorified You on earth by accomplishing the work You gave Me to do.&lt;/li&gt;&#xA;&lt;li&gt;And now, Father, glorify Me in Your presence with the glory I had with You before the world existed.&lt;/li&gt;&#xA;&lt;li&gt;I have revealed Your name to those whom You have given Me out of the world. They were Yours; You gave them to Me, and they have kept Your word.&lt;/li&gt;&#xA;&lt;li&gt;Now they know that everything You have given Me comes from You.&lt;/li&gt;&#xA;&lt;li&gt;For I have given them the words You gave Me, and they have received them. They knew with certainty that I came from You, and they believed that You sent Me.&lt;/li&gt;&#xA;&lt;li&gt;I ask on their behalf. I do not ask on behalf of the world, but on behalf of those You have given Me; for they are Yours.&lt;/li&gt;&#xA;&lt;li&gt;All I have is Yours, and all You have is Mine; and in them I have been glorified.&lt;/li&gt;&#xA;&lt;li&gt;I will no longer be in the world, but they are in the world, and I am coming to You. Holy Father, protect them by Your name, the name You gave Me, so that they may be one as We are one.&lt;/li&gt;&#xA;&lt;li&gt;While I was with them, I protected them and kept them safe by that name You gave Me. Not one of them has been lost, except the son of destruction, so that the Scripture would be fulfilled.&lt;/li&gt;&#xA;&lt;li&gt;But now I am coming to You, and I am saying these things while I am in the world, so that they may have My joy fulfilled within them.&lt;/li&gt;&#xA;&lt;li&gt;I have given them Your word and the world has hated them, for they are not of the world any more than I am of the world.&lt;/li&gt;&#xA;&lt;li&gt;I do not ask that You take them out of the world, but that You keep them from the evil one.&lt;/li&gt;&#xA;&lt;li&gt;They are not of the world, just as I am not of the world.&lt;/li&gt;&#xA;&lt;li&gt;Sanctify them by the truth; Your word is truth.&lt;/li&gt;&#xA;&lt;li&gt;As You sent Me into the world, I have also sent them into the world.&lt;/li&gt;&#xA;&lt;li&gt;For them I sanctify Myself, so that they too may be sanctified by the truth.&lt;/li&gt;&#xA;&lt;li&gt;I am not asking on behalf of them alone, but also on behalf of those who will believe in Me through their message,&lt;/li&gt;&#xA;&lt;li&gt;that all of them may be one, as You, Father, are in Me, and I am in You. May they also be in Us, so that the world may believe that You sent Me.&lt;/li&gt;&#xA;&lt;li&gt;I have given them the glory You gave Me, so that they may be one as We are one—&lt;/li&gt;&#xA;&lt;li&gt;I in them and You in Me—that they may be perfectly united, so that the world may know that You sent Me and have loved them just as You have loved Me.&lt;/li&gt;&#xA;&lt;li&gt;Father, I want those You have given Me to be with Me where I am, that they may see My glory, the glory You have given Me because You loved Me before the foundation of the world.&lt;/li&gt;&#xA;&lt;li&gt;Righteous Father, although the world has not known You, I know You, and they know that You sent Me.&lt;/li&gt;&#xA;&lt;li&gt;And I have made Your name known to them and will continue to make it known, so that the love You have for Me may be in them, and I in them.”&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;36. But about that day and hour no one knows, not even the angels in heaven, nor the Son, but only the Father.&#xA;37. As it was in the days of Noah, so will it be at the coming of the Son of Man.&#xA;38. For in the days before the flood, people were eating and drinking, marrying and giving in marriage, up to the day Noah entered the ark.&#xA;39. And they were oblivious, until the flood came and swept them all away. So will it be at the coming of the Son of Man.&#xA;&#xA;---&#xA;&#xA;44. For this reason, you also must be ready, because the Son of Man will come at an hour you do not expect.&#xA;45. Who then is the faithful and wise servant, whom the master has put in charge of his household, to give the others their food at the proper time?&#xA;46. Blessed is that servant whose master finds him doing so when he returns.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;means&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;every day, daily disciplined life, is what it looks like to wait upon the Lord. Not wishing I took advantage of a moment of debauchery, because the prize isn&amp;rsquo;t the discipline, it isn&amp;rsquo;t NOT doing the debauchery, the prize IS the King, and he can come and call at any moment&lt;/p&gt;&#xA;&lt;h3 id=&#34;for-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;dovetails with &amp;ldquo;work&amp;rdquo; from men&amp;rsquo;s group - work and jobs are different, and we are called to work, I should be working all the time:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;kids&lt;/li&gt;&#xA;&lt;li&gt;house&lt;/li&gt;&#xA;&lt;li&gt;wife&lt;/li&gt;&#xA;&lt;li&gt;self-discipline&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I need to recover holy work in my life&lt;/p&gt;&#xA;&lt;h3 id=&#34;prayer&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-2-matthew-26-35-27-31&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 2 — Matthew 26:35-27:31&lt;/span&gt; &lt;a href=&#34;#day-2-matthew-26-35-27-31&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Matthew 26:35-27:31&lt;/summary&gt;&#xA;&lt;ol start=&#34;35&#34;&gt;&#xA;&lt;li&gt;Peter replied, “Even if I have to die with You, I will never deny You.” And all the other disciples said the same thing.&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus went with His disciples to a place called Gethsemane, and He told them, “Sit here while I go over there and pray.”&lt;/li&gt;&#xA;&lt;li&gt;He took with Him Peter and the two sons of Zebedee and began to be sorrowful and deeply distressed.&lt;/li&gt;&#xA;&lt;li&gt;Then He said to them, “My soul is consumed with sorrow to the point of death. Stay here and keep watch with Me.”&lt;/li&gt;&#xA;&lt;li&gt;Going a little farther, He fell face down and prayed, “My Father, if it is possible, let this cup pass from Me. Yet not as I will, but as You will.”&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus returned to the disciples and found them sleeping. “Were you not able to keep watch with Me for one hour?” He asked Peter.&lt;/li&gt;&#xA;&lt;li&gt;“Watch and pray so that you will not enter into temptation. For the spirit is willing, but the body is weak.”&lt;/li&gt;&#xA;&lt;li&gt;A second time He went away and prayed, “My Father, if this cup cannot pass unless I drink it, may Your will be done.”&lt;/li&gt;&#xA;&lt;li&gt;And again Jesus returned and found them sleeping—for their eyes were heavy.&lt;/li&gt;&#xA;&lt;li&gt;So He left them and went away once more and prayed a third time, saying the same thing.&lt;/li&gt;&#xA;&lt;li&gt;Then He returned to the disciples and said, “Are you still sleeping and resting? Look, the hour is near, and the Son of Man is betrayed into the hands of sinners.&lt;/li&gt;&#xA;&lt;li&gt;Get up! Let us go. See, My betrayer is approaching.”&lt;/li&gt;&#xA;&lt;li&gt;While Jesus was still speaking, Judas, one of the Twelve, arrived, accompanied by a large crowd armed with swords and clubs, sent from the chief priests and elders of the people.&lt;/li&gt;&#xA;&lt;li&gt;Now the betrayer had arranged a signal with them: “The One I kiss is the Man; arrest Him.”&lt;/li&gt;&#xA;&lt;li&gt;Going directly to Jesus, he said, “Greetings, Rabbi!” and kissed Him.&lt;/li&gt;&#xA;&lt;li&gt;“Friend,” Jesus replied, “do what you have come for.” Then the men stepped forward, seized Jesus, and arrested Him.&lt;/li&gt;&#xA;&lt;li&gt;At this, one of Jesus’ companions drew his sword and struck the servant of the high priest, cutting off his ear.&lt;/li&gt;&#xA;&lt;li&gt;“Put your sword back in its place,” Jesus said to him. “For all who draw the sword will die by the sword.&lt;/li&gt;&#xA;&lt;li&gt;Are you not aware that I can call on My Father, and He will at once put at My disposal more than twelve legions of angels?&lt;/li&gt;&#xA;&lt;li&gt;But how then would the Scriptures be fulfilled that say it must happen this way?”&lt;/li&gt;&#xA;&lt;li&gt;At that time Jesus said to the crowd, “Have you come out with swords and clubs to arrest Me as you would an outlaw? Every day I sat teaching in the temple courts, and you did not arrest Me.&lt;/li&gt;&#xA;&lt;li&gt;But this has all happened so that the writings of the prophets would be fulfilled.” Then all the disciples deserted Him and fled.&lt;/li&gt;&#xA;&lt;li&gt;Those who had arrested Jesus led Him away to Caiaphas the high priest, where the scribes and elders had gathered.&lt;/li&gt;&#xA;&lt;li&gt;But Peter followed Him at a distance, right up to the courtyard of the high priest. And going inside, he sat down with the guards to see the outcome.&lt;/li&gt;&#xA;&lt;li&gt;The chief priests and the whole Sanhedrin were searching for false testimony against Jesus so they could put Him to death.&lt;/li&gt;&#xA;&lt;li&gt;But they did not find any, though many false witnesses came forward. Finally two witnesses came forward&lt;/li&gt;&#xA;&lt;li&gt;and declared, “This man said, ‘I am able to destroy the temple of God and rebuild it in three days.’”&lt;/li&gt;&#xA;&lt;li&gt;So the high priest stood up and asked Him, “Have You no answer? What are these men testifying against You?”&lt;/li&gt;&#xA;&lt;li&gt;But Jesus remained silent. So the high priest said to Him, “I charge You under oath by the living God: Tell us if You are the Christ, the Son of God.”&lt;/li&gt;&#xA;&lt;li&gt;“You have said it yourself,” Jesus answered. “But I say to all of you, from now on you will see the Son of Man sitting at the right hand of Power and coming on the clouds of heaven.”&lt;/li&gt;&#xA;&lt;li&gt;At this, the high priest tore his clothes and declared, “He has blasphemed! Why do we need any more witnesses? Look, now you have heard the blasphemy.&lt;/li&gt;&#xA;&lt;li&gt;What is your verdict?” “He deserves death,” they answered.&lt;/li&gt;&#xA;&lt;li&gt;Then they spit in His face and struck Him. Others slapped Him&lt;/li&gt;&#xA;&lt;li&gt;and said, “Prophesy to us, Christ! Who hit You?”&lt;/li&gt;&#xA;&lt;li&gt;Meanwhile, Peter was sitting out in the courtyard, and a servant girl came up to him. “You were also with Jesus the Galilean,” she said.&lt;/li&gt;&#xA;&lt;li&gt;But he denied it before them all: “I do not know what you are talking about.”&lt;/li&gt;&#xA;&lt;li&gt;When he had gone out to the gateway, another servant girl saw him and said to the people there, “This man was with Jesus of Nazareth.”&lt;/li&gt;&#xA;&lt;li&gt;And again he denied it with an oath: “I do not know the man!”&lt;/li&gt;&#xA;&lt;li&gt;After a little while, those standing nearby came up to Peter. “Surely you are one of them,” they said. “For even your accent gives you away.”&lt;/li&gt;&#xA;&lt;li&gt;Then he began to curse and swear, “I do not know the man!” And immediately a rooster crowed.&lt;/li&gt;&#xA;&lt;li&gt;Then Peter remembered the word that Jesus had spoken: “Before the rooster crows, you will deny Me three times.” And he went outside and wept bitterly.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Matthew 27:1-31&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When morning came, all the chief priests and elders of the people conspired against Jesus to put Him to death.&lt;/li&gt;&#xA;&lt;li&gt;They bound Him, led Him away, and handed Him over to Pilate the governor.&lt;/li&gt;&#xA;&lt;li&gt;When Judas, who had betrayed Him, saw that Jesus was condemned, he was filled with remorse and returned the thirty pieces of silver to the chief priests and elders.&lt;/li&gt;&#xA;&lt;li&gt;“I have sinned by betraying innocent blood,” he said. “What is that to us?” they replied. “You bear the responsibility.”&lt;/li&gt;&#xA;&lt;li&gt;So Judas threw the silver into the temple and left. Then he went away and hanged himself.&lt;/li&gt;&#xA;&lt;li&gt;The chief priests picked up the pieces of silver and said, “It is unlawful to put this into the treasury, since it is blood money.”&lt;/li&gt;&#xA;&lt;li&gt;After conferring together, they used the money to buy the potter’s field as a burial place for foreigners.&lt;/li&gt;&#xA;&lt;li&gt;That is why it has been called the Field of Blood to this day.&lt;/li&gt;&#xA;&lt;li&gt;Then what was spoken through Jeremiah the prophet was fulfilled: “They took the thirty pieces of silver, the price set on Him by the people of Israel,&lt;/li&gt;&#xA;&lt;li&gt;and they gave them for the potter’s field, as the Lord had commanded me.”&lt;/li&gt;&#xA;&lt;li&gt;Meanwhile Jesus stood before the governor, and the governor questioned Him: “Are You the King of the Jews?” “You have said so,” Jesus replied.&lt;/li&gt;&#xA;&lt;li&gt;And when He was accused by the chief priests and elders, He gave no answer.&lt;/li&gt;&#xA;&lt;li&gt;Then Pilate asked Him, “Do You not hear how many charges they are bringing against You?”&lt;/li&gt;&#xA;&lt;li&gt;But Jesus gave no answer, not even to a single charge, much to the governor’s amazement.&lt;/li&gt;&#xA;&lt;li&gt;At the feast, the governor was accustomed to releasing one prisoner to the crowd, whomever they wanted.&lt;/li&gt;&#xA;&lt;li&gt;At that time they were holding a notorious prisoner named Barabbas.&lt;/li&gt;&#xA;&lt;li&gt;So when the crowd had gathered, Pilate asked them, “Whom do you want me to release to you: Barabbas, or Jesus who is called Christ?”&lt;/li&gt;&#xA;&lt;li&gt;For he knew it was out of envy that they had handed Jesus over to him.&lt;/li&gt;&#xA;&lt;li&gt;While Pilate was sitting on the judgment seat, his wife sent him this message: “Have nothing to do with that righteous man, for I have suffered much in a dream today because of Him.”&lt;/li&gt;&#xA;&lt;li&gt;But the chief priests and elders persuaded the crowds to ask for Barabbas and to have Jesus put to death.&lt;/li&gt;&#xA;&lt;li&gt;“Which of the two do you want me to release to you?” asked the governor. “Barabbas,” they answered.&lt;/li&gt;&#xA;&lt;li&gt;“What then shall I do with Jesus who is called Christ?” Pilate asked. They all answered, “Crucify Him!”&lt;/li&gt;&#xA;&lt;li&gt;“Why? What evil has He done?” Pilate asked. But they shouted all the louder, “Crucify Him!”&lt;/li&gt;&#xA;&lt;li&gt;When Pilate saw that he was accomplishing nothing, but that a riot was breaking out instead, he took water and washed his hands before the crowd. “I am innocent of this man’s blood,” he said. “You bear the responsibility.”&lt;/li&gt;&#xA;&lt;li&gt;All the people answered, “His blood be on us and on our children!”&lt;/li&gt;&#xA;&lt;li&gt;Then Pilate released Barabbas to them. But he had Jesus flogged, and handed Him over to be crucified.&lt;/li&gt;&#xA;&lt;li&gt;Then the governor’s soldiers took Jesus into the Praetorium and gathered the whole company of soldiers around Him.&lt;/li&gt;&#xA;&lt;li&gt;They stripped Him and put a scarlet robe on Him.&lt;/li&gt;&#xA;&lt;li&gt;And they twisted together a crown of thorns and set it on His head. They put a staff in His right hand and knelt down before Him to mock Him, saying, “Hail, King of the Jews!”&lt;/li&gt;&#xA;&lt;li&gt;Then they spit on Him, and took the staff and struck Him on the head again and again.&lt;/li&gt;&#xA;&lt;li&gt;After they had mocked Him, they stripped Him of the robe, put His own clothes back on Him, and led Him away to crucify Him.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;35. Peter replied, “Even if I have to die with You, I will never deny You.” And all the other disciples said the same thing.&#xA;&#xA;&amp;gt; but I deny him with my actions every day&#xA;&#xA;&#xA;53. Are you not aware that I can call on My Father, and He will at once put at My disposal more than twelve legions of angels?&#xA;54. But how then would the Scriptures be fulfilled that say it must happen this way?”&#xA;&#xA;&amp;gt; there&#39;s a tension in reality... Jesus _can_ do whatever he wants and submits himself to prophecy anyways, it&#39;s circular to me sort of. but it also means that I need to stop questioning every aspect of reality in my &amp;quot;if this then that&amp;quot; processing. sometimes we&#39;re just bound by reality - even the Lord was.&#xA;&#xA;&#xA;74. Then he began to curse and swear, “I do not know the man!” And immediately a rooster crowed.&#xA;75. Then Peter remembered the word that Jesus had spoken: “Before the rooster crows, you will deny Me three times.” And he went outside and wept bitterly.&#xA;&#xA;&amp;gt; is Jesus also just waiting for me to deny him? if I think he is I must also remember he was ready to forgive Peter&#xA;&#xA;Jews tell Judas he bears the responsibility, then Pilate tells the Jews they do, then the Jews put it on their kids... interesting&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;means-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-3-matthew-27-32-66&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 3 — Matthew 27:32-66&lt;/span&gt; &lt;a href=&#34;#day-3-matthew-27-32-66&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Matthew 27:32-66&lt;/summary&gt;&#xA;&lt;ol start=&#34;32&#34;&gt;&#xA;&lt;li&gt;Along the way they found a man from Cyrene named Simon, and they forced him to carry the cross of Jesus.&lt;/li&gt;&#xA;&lt;li&gt;When they came to a place called Golgotha, which means “The Place of the Skull,”&lt;/li&gt;&#xA;&lt;li&gt;they offered Him wine to drink, mixed with gall; but after tasting it, He refused to drink it.&lt;/li&gt;&#xA;&lt;li&gt;When they had crucified Him, they divided His garments by casting lots, to fulfill what was spoken through the prophet: “They divided My garments among them and cast lots for My clothing.”&lt;/li&gt;&#xA;&lt;li&gt;And sitting down, they kept watch over Him there.&lt;/li&gt;&#xA;&lt;li&gt;Above His head they posted the written charge against Him: “This is Jesus, the King of the Jews.”&lt;/li&gt;&#xA;&lt;li&gt;Two robbers were crucified with Him, one on His right hand and one on His left.&lt;/li&gt;&#xA;&lt;li&gt;And those who passed by heaped abuse on Him, shaking their heads&lt;/li&gt;&#xA;&lt;li&gt;and saying, “You who would destroy the temple and rebuild it in three days, save Yourself! If You are the Son of God, come down from the cross!”&lt;/li&gt;&#xA;&lt;li&gt;In the same way, the chief priests, scribes, and elders mocked Him,&lt;/li&gt;&#xA;&lt;li&gt;saying, “He saved others, but He cannot save Himself. He is the King of Israel! Let Him come down now from the cross, and we will believe in Him.&lt;/li&gt;&#xA;&lt;li&gt;He trusts in God. Let God deliver Him now if He wants Him. For He said, ‘I am the Son of God.’”&lt;/li&gt;&#xA;&lt;li&gt;In the same way, even the robbers who were crucified with Him heaped abuse on Him.&lt;/li&gt;&#xA;&lt;li&gt;From the sixth hour until the ninth hour darkness came over all the land.&lt;/li&gt;&#xA;&lt;li&gt;About the ninth hour Jesus cried out in a loud voice, “Eli, Eli, lema sabachthani?” which means, “My God, My God, why have You forsaken Me?”&lt;/li&gt;&#xA;&lt;li&gt;When some of those standing there heard this, they said, “He is calling Elijah.”&lt;/li&gt;&#xA;&lt;li&gt;Immediately one of them ran and got a sponge. He filled it with wine vinegar, put it on a reed, and held it up for Jesus to drink.&lt;/li&gt;&#xA;&lt;li&gt;But the others said, “Leave Him alone. Let us see if Elijah comes to save Him.”&lt;/li&gt;&#xA;&lt;li&gt;When Jesus had cried out again in a loud voice, He yielded up His spirit.&lt;/li&gt;&#xA;&lt;li&gt;At that moment the veil of the temple was torn in two from top to bottom. The earth quaked and the rocks were split.&lt;/li&gt;&#xA;&lt;li&gt;The tombs broke open, and the bodies of many saints who had fallen asleep were raised.&lt;/li&gt;&#xA;&lt;li&gt;After Jesus’ resurrection, when they had come out of the tombs, they entered the holy city and appeared to many people.&lt;/li&gt;&#xA;&lt;li&gt;When the centurion and those with him who were guarding Jesus saw the earthquake and all that had happened, they were terrified and said, “Truly this was the Son of God.”&lt;/li&gt;&#xA;&lt;li&gt;And many women were there, watching from a distance. They had followed Jesus from Galilee to minister to Him.&lt;/li&gt;&#xA;&lt;li&gt;Among them were Mary Magdalene, Mary the mother of James and Joseph, and the mother of Zebedee’s sons.&lt;/li&gt;&#xA;&lt;li&gt;When it was evening, a rich man from Arimathea named Joseph came, who himself was also a disciple of Jesus.&lt;/li&gt;&#xA;&lt;li&gt;He went to Pilate to ask for the body of Jesus, and Pilate ordered that it be given to him.&lt;/li&gt;&#xA;&lt;li&gt;So Joseph took the body, wrapped it in a clean linen cloth,&lt;/li&gt;&#xA;&lt;li&gt;and placed it in his own new tomb that he had cut out of the rock. Then he rolled a great stone against the entrance to the tomb and went away.&lt;/li&gt;&#xA;&lt;li&gt;Mary Magdalene and the other Mary were sitting there opposite the tomb.&lt;/li&gt;&#xA;&lt;li&gt;The next day, which is the day after Preparation Day, the chief priests and Pharisees assembled before Pilate&lt;/li&gt;&#xA;&lt;li&gt;and said, “Sir, we remember that while He was alive that deceiver said, ‘After three days I will rise again.’&lt;/li&gt;&#xA;&lt;li&gt;So give the order that the tomb be secured until the third day. Otherwise, His disciples may come and steal Him away and tell the people He has risen from the dead, and the last deception will be worse than the first.”&lt;/li&gt;&#xA;&lt;li&gt;“Go and make the tomb as secure as you know how,” Pilate answered.&lt;/li&gt;&#xA;&lt;li&gt;And they went and made the tomb secure by sealing the stone and posting a guard.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;means-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-4-luke-23-26-56&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 4 — Luke 23:26-56&lt;/span&gt; &lt;a href=&#34;#day-4-luke-23-26-56&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Luke 23:26-56&lt;/summary&gt;&#xA;&lt;ol start=&#34;26&#34;&gt;&#xA;&lt;li&gt;As the soldiers led Him away, they seized Simon of Cyrene on his way in from the country, and put the cross on him to carry behind Jesus.&lt;/li&gt;&#xA;&lt;li&gt;A great number of people followed Him, along with women who were mourning and wailing for Him.&lt;/li&gt;&#xA;&lt;li&gt;But Jesus turned to them and said, “Daughters of Jerusalem, do not weep for Me, but weep for yourselves and for your children.&lt;/li&gt;&#xA;&lt;li&gt;Look, the days are coming when people will say, ‘Blessed are the barren women, the wombs that never bore, and the breasts that never nursed!’&lt;/li&gt;&#xA;&lt;li&gt;At that time they will say to the mountains, ‘Fall on us!’ and to the hills, ‘Cover us!’&lt;/li&gt;&#xA;&lt;li&gt;For if men do these things while the tree is green, what will happen when it is dry?”&lt;/li&gt;&#xA;&lt;li&gt;Two others, who were criminals, were also led away to be executed with Jesus.&lt;/li&gt;&#xA;&lt;li&gt;When they came to the place called The Skull, they crucified Him there, along with the criminals, one on His right hand and the other on His left.&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus said, “Father, forgive them, for they do not know what they are doing.” And they divided up His garments by casting lots.&lt;/li&gt;&#xA;&lt;li&gt;The people stood watching, and the rulers sneered at Him, saying, “He saved others; let Him save Himself if He is the Christ of God, the Chosen One.”&lt;/li&gt;&#xA;&lt;li&gt;The soldiers also mocked Him and came up to offer Him sour wine.&lt;/li&gt;&#xA;&lt;li&gt;“If You are the King of the Jews,” they said, “save Yourself!”&lt;/li&gt;&#xA;&lt;li&gt;Above Him was posted an inscription: “THIS IS THE KING OF THE JEWS.”&lt;/li&gt;&#xA;&lt;li&gt;One of the criminals who hung there heaped abuse on Him: “Are You not the Christ? Save Yourself and us!”&lt;/li&gt;&#xA;&lt;li&gt;But the other criminal rebuked him. “Do you not even fear God,” he said, “since you are under the same judgment?&lt;/li&gt;&#xA;&lt;li&gt;We are punished justly, for we are receiving what our actions deserve. But this man has done nothing wrong.”&lt;/li&gt;&#xA;&lt;li&gt;Then he said, “Jesus, remember me when You come into Your kingdom!”&lt;/li&gt;&#xA;&lt;li&gt;And Jesus said to him, “Truly I tell you, today you will be with Me in Paradise.”&lt;/li&gt;&#xA;&lt;li&gt;It was now about the sixth hour, and darkness came over all the land until the ninth hour.&lt;/li&gt;&#xA;&lt;li&gt;The sun was darkened, and the veil of the temple was torn down the middle.&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus called out in a loud voice, “Father, into Your hands I commit My Spirit.” And when He had said this, He breathed His last.&lt;/li&gt;&#xA;&lt;li&gt;When the centurion saw what had happened, he gave glory to God and said, “Surely this was a righteous man.”&lt;/li&gt;&#xA;&lt;li&gt;When all the people who had gathered to witness this sight saw what had taken place, they returned home, beating their breasts.&lt;/li&gt;&#xA;&lt;li&gt;But all those who knew Jesus, including the women who had followed Him from Galilee, stood at a distance watching these things.&lt;/li&gt;&#xA;&lt;li&gt;Now there was a righteous and devout man named Joseph, who was a member of the Council,&lt;/li&gt;&#xA;&lt;li&gt;who had not consented to their plan and action. He was from the Judean town of Arimathea, and he was waiting for the kingdom of God.&lt;/li&gt;&#xA;&lt;li&gt;He went to Pilate to ask for the body of Jesus.&lt;/li&gt;&#xA;&lt;li&gt;Then he brought it down, wrapped it in a linen cloth, and placed it in a tomb cut out of the rock, where no one had yet been laid.&lt;/li&gt;&#xA;&lt;li&gt;It was Preparation Day, and the Sabbath was about to begin.&lt;/li&gt;&#xA;&lt;li&gt;The women who had come with Jesus from Galilee followed, and they saw the tomb and how His body was placed.&lt;/li&gt;&#xA;&lt;li&gt;Then they returned to prepare spices and perfumes. And they rested on the Sabbath, according to the commandment.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;means-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-5-john-19&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 5 — John 19&lt;/span&gt; &lt;a href=&#34;#day-5-john-19&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 19&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Then Pilate took Jesus and had Him flogged.&lt;/li&gt;&#xA;&lt;li&gt;The soldiers twisted together a crown of thorns, put it on His head, and dressed Him in a purple robe.&lt;/li&gt;&#xA;&lt;li&gt;And they went up to Him again and again, saying, “Hail, King of the Jews!” and slapping Him in the face.&lt;/li&gt;&#xA;&lt;li&gt;Once more Pilate came out and said to the Jews, “Look, I am bringing Him out to you to let you know that I find no basis for a charge against Him.”&lt;/li&gt;&#xA;&lt;li&gt;So Jesus came out wearing the crown of thorns and the purple robe. And Pilate said to them, “Here is the man!”&lt;/li&gt;&#xA;&lt;li&gt;As soon as the chief priests and officers saw Him, they shouted, “Crucify Him! Crucify Him!” Pilate told them, “You take Him and crucify Him. As for me, I find no basis for a charge against Him.”&lt;/li&gt;&#xA;&lt;li&gt;“We have a law,” answered the Jews, “and according to that law He must die, because He declared Himself to be the Son of God.”&lt;/li&gt;&#xA;&lt;li&gt;When Pilate heard this statement, he was even more afraid.&lt;/li&gt;&#xA;&lt;li&gt;He went back into the Praetorium and asked Jesus, “Where are You from?” But Jesus gave no answer.&lt;/li&gt;&#xA;&lt;li&gt;So Pilate said to Him, “Do You refuse to speak to me? Do You not know that I have authority to release You and authority to crucify You?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus answered, “You would have no authority over Me if it were not given to you from above. Therefore the one who handed Me over to you is guilty of greater sin.”&lt;/li&gt;&#xA;&lt;li&gt;From then on, Pilate tried to release Him, but the Jews kept shouting, “If you release this man, you are no friend of Caesar. Anyone who declares himself a king is defying Caesar.”&lt;/li&gt;&#xA;&lt;li&gt;When Pilate heard these words, he brought Jesus out and sat down on the judgment seat at a place called the Stone Pavement, which in Hebrew is Gabbatha.&lt;/li&gt;&#xA;&lt;li&gt;It was the day of Preparation for the Passover, about the sixth hour. And Pilate said to the Jews, “Here is your King!”&lt;/li&gt;&#xA;&lt;li&gt;At this, they shouted, “Away with Him! Away with Him! Crucify Him!” Pilate asked, “Shall I crucify your King?” “We have no king but Caesar,” replied the chief priests.&lt;/li&gt;&#xA;&lt;li&gt;Then Pilate handed Him over to be crucified, and the soldiers took Him away.&lt;/li&gt;&#xA;&lt;li&gt;Carrying His own cross, He went out to the place of the Skull, which in Hebrew is called Golgotha.&lt;/li&gt;&#xA;&lt;li&gt;There they crucified Him, and with Him two others, one on each side, with Jesus in the middle.&lt;/li&gt;&#xA;&lt;li&gt;Pilate also had a notice posted on the cross. It read: “JESUS OF NAZARETH, THE KING OF THE JEWS.”&lt;/li&gt;&#xA;&lt;li&gt;Many of the Jews read this sign, because the place where Jesus was crucified was near the city, and it was written in Aramaic, Latin, and Greek.&lt;/li&gt;&#xA;&lt;li&gt;So the chief priests of the Jews said to Pilate, “Do not write, ‘The King of the Jews,’ but, ‘This man said, I am the King of the Jews.’”&lt;/li&gt;&#xA;&lt;li&gt;Pilate answered, “What I have written, I have written.”&lt;/li&gt;&#xA;&lt;li&gt;When the soldiers had crucified Jesus, they divided His garments into four parts, a part for each soldier, and the tunic remained. It was seamless, woven in one piece from top to bottom.&lt;/li&gt;&#xA;&lt;li&gt;So they said to one another, “Let us not tear it; instead, let us cast lots to see who will get it.” This was to fulfill the Scripture: “They divided My garments among them, and for My clothing they cast lots.” So that is what the soldiers did.&lt;/li&gt;&#xA;&lt;li&gt;Near the cross of Jesus stood His mother and His mother’s sister, Mary the wife of Clopas, and Mary Magdalene.&lt;/li&gt;&#xA;&lt;li&gt;When Jesus saw His mother and the disciple whom He loved standing nearby, He said to His mother, “Woman, here is your son.”&lt;/li&gt;&#xA;&lt;li&gt;Then He said to the disciple, “Here is your mother.” So from that hour, the disciple took her into his home.&lt;/li&gt;&#xA;&lt;li&gt;After this, knowing that everything had now been accomplished, and to fulfill the Scripture, Jesus said, “I am thirsty.”&lt;/li&gt;&#xA;&lt;li&gt;A jar of sour wine was sitting there. So they soaked a sponge in the wine, put it on a hyssop stalk, and lifted it to His mouth.&lt;/li&gt;&#xA;&lt;li&gt;When Jesus had received the sour wine, He said, “It is finished.” And bowing His head, He yielded up His spirit.&lt;/li&gt;&#xA;&lt;li&gt;It was the day of Preparation, and the next day was a special Sabbath. In order to avoid leaving the bodies on the cross during the Sabbath, the Jews asked Pilate to have the legs broken and the bodies removed.&lt;/li&gt;&#xA;&lt;li&gt;So the soldiers came and broke the legs of the first man who had been crucified with Jesus, and those of the other.&lt;/li&gt;&#xA;&lt;li&gt;But when they came to Jesus and saw that He was already dead, they did not break His legs.&lt;/li&gt;&#xA;&lt;li&gt;Instead, one of the soldiers pierced His side with a spear, and immediately blood and water flowed out.&lt;/li&gt;&#xA;&lt;li&gt;The one who saw it has testified, and his testimony is true. He knows that he is telling the truth, so that you also may believe.&lt;/li&gt;&#xA;&lt;li&gt;Now these things happened so that the Scripture would be fulfilled: “Not one of His bones will be broken.”&lt;/li&gt;&#xA;&lt;li&gt;And, as another Scripture says: “They will look on the One they have pierced.”&lt;/li&gt;&#xA;&lt;li&gt;After these things, Joseph of Arimathea, who was a disciple of Jesus (but secretly for fear of the Jews), asked Pilate to let him remove the body of Jesus. Pilate gave him permission, so he came and removed His body.&lt;/li&gt;&#xA;&lt;li&gt;Nicodemus, who had previously come to Jesus at night, also brought a mixture of myrrh and aloes, about seventy-five pounds.&lt;/li&gt;&#xA;&lt;li&gt;So they took the body of Jesus and wrapped it in linen cloths with the spices, according to the Jewish burial custom.&lt;/li&gt;&#xA;&lt;li&gt;Now there was a garden in the place where Jesus was crucified, and in the garden a new tomb in which no one had yet been laid.&lt;/li&gt;&#xA;&lt;li&gt;And because it was the Jewish day of Preparation and the tomb was nearby, they laid Jesus there.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;means-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;prayer-requests&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer Requests&lt;/span&gt; &lt;a href=&#34;#prayer-requests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;name&gt; — &lt;request&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;answered-updates&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Answered / Updates&lt;/span&gt; &lt;a href=&#34;#answered-updates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;follow-ups from previous weeks&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;meeting-notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meeting Notes&lt;/span&gt; &lt;a href=&#34;#meeting-notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&amp;lt;what the group discussed, insights from others&amp;gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Men’s Group - Week 35</title>
    <id>https://pype.dev/olivet-mens-group-2026-week-35/</id>
    <updated>2026-09-18T06:00:00Z</updated>
    <published>2026-09-18T06:00:00Z</published>
    <link href="https://pype.dev/olivet-mens-group-2026-week-35/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! quote &#34;Hebrews 2:18&#34;</summary>
    <content type="html">&lt;h1 id=&#34;week-35-september-13-19-2026&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Week 35 — September 13 – 19, 2026&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h3 id=&#34;meeting-friday-september-18&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meeting: Friday, September 18&lt;/span&gt; &lt;a href=&#34;#meeting-friday-september-18&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;memory-verse-hebrews-2-18&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Memory Verse: Hebrews 2:18&lt;/span&gt; &lt;a href=&#34;#memory-verse-hebrews-2-18&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Hebrews 2:18&lt;/p&gt;&#xA;&lt;ol start=&#34;18&#34;&gt;&#xA;&lt;li&gt;Because He Himself suffered when He was tempted, He is able to help those who are being tempted.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;readings&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Readings&lt;/span&gt; &lt;a href=&#34;#readings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 1: John 11&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 2: Matthew 21:1-13&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 3: John 13&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 4: John 14-15&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 5: John 16, Matthew 24:1-31&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;day-1-john-11&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 1 — John 11&lt;/span&gt; &lt;a href=&#34;#day-1-john-11&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 11&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;At this time a man named Lazarus was sick. He lived in Bethany, the village of Mary and her sister Martha.&lt;/li&gt;&#xA;&lt;li&gt;(Mary, whose brother Lazarus was sick, was to anoint the Lord with perfume and wipe His feet with her hair.)&lt;/li&gt;&#xA;&lt;li&gt;So the sisters sent word to Jesus, “Lord, the one You love is sick.”&lt;/li&gt;&#xA;&lt;li&gt;When Jesus heard this, He said, “This sickness will not end in death. No, it is for the glory of God, so that the Son of God may be glorified through it.”&lt;/li&gt;&#xA;&lt;li&gt;Now Jesus loved Martha and her sister and Lazarus.&lt;/li&gt;&#xA;&lt;li&gt;So on hearing that Lazarus was sick, He stayed where He was for two days,&lt;/li&gt;&#xA;&lt;li&gt;and then He said to the disciples, “Let us go back to Judea.”&lt;/li&gt;&#xA;&lt;li&gt;“Rabbi,” they replied, “the Jews just tried to stone You, and You are going back there?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus answered, “Are there not twelve hours of daylight? If anyone walks in the daytime, he will not stumble, because he sees by the light of this world.&lt;/li&gt;&#xA;&lt;li&gt;But if anyone walks at night, he will stumble, because he has no light.”&lt;/li&gt;&#xA;&lt;li&gt;After He had said this, He told them, “Our friend Lazarus has fallen asleep, but I am going there to wake him up.”&lt;/li&gt;&#xA;&lt;li&gt;His disciples replied, “Lord, if he is sleeping, he will get better.”&lt;/li&gt;&#xA;&lt;li&gt;They thought that Jesus was talking about actual sleep, but He was speaking about the death of Lazarus.&lt;/li&gt;&#xA;&lt;li&gt;So Jesus told them plainly, “Lazarus is dead,&lt;/li&gt;&#xA;&lt;li&gt;and for your sake I am glad I was not there, so that you may believe. But let us go to him.”&lt;/li&gt;&#xA;&lt;li&gt;Then Thomas called Didymus said to his fellow disciples, “Let us also go, so that we may die with Him.”&lt;/li&gt;&#xA;&lt;li&gt;When Jesus arrived, He found that Lazarus had already spent four days in the tomb.&lt;/li&gt;&#xA;&lt;li&gt;Now Bethany was near Jerusalem, a little less than two miles away,&lt;/li&gt;&#xA;&lt;li&gt;and many of the Jews had come to Martha and Mary to console them in the loss of their brother.&lt;/li&gt;&#xA;&lt;li&gt;So when Martha heard that Jesus was coming, she went out to meet Him, but Mary stayed at home.&lt;/li&gt;&#xA;&lt;li&gt;Martha said to Jesus, “Lord, if You had been here, my brother would not have died.&lt;/li&gt;&#xA;&lt;li&gt;But even now I know that God will give You whatever You ask of Him.”&lt;/li&gt;&#xA;&lt;li&gt;“Your brother will rise again,” Jesus told her.&lt;/li&gt;&#xA;&lt;li&gt;Martha replied, “I know that he will rise again in the resurrection at the last day.”&lt;/li&gt;&#xA;&lt;li&gt;Jesus said to her, “I am the resurrection and the life. Whoever believes in Me will live, even though he dies.&lt;/li&gt;&#xA;&lt;li&gt;And everyone who lives and believes in Me will never die. Do you believe this?”&lt;/li&gt;&#xA;&lt;li&gt;“Yes, Lord,” she answered, “I believe that You are the Christ, the Son of God, who was to come into the world.”&lt;/li&gt;&#xA;&lt;li&gt;After Martha had said this, she went back and called her sister Mary aside to tell her, “The Teacher is here and is asking for you.”&lt;/li&gt;&#xA;&lt;li&gt;And when Mary heard this, she got up quickly and went to Him.&lt;/li&gt;&#xA;&lt;li&gt;Now Jesus had not yet entered the village, but was still at the place where Martha had met Him.&lt;/li&gt;&#xA;&lt;li&gt;When the Jews who were in the house consoling Mary saw how quickly she got up and went out, they followed her, supposing she was going to the tomb to mourn there.&lt;/li&gt;&#xA;&lt;li&gt;When Mary came to Jesus and saw Him, she fell at His feet and said, “Lord, if You had been here, my brother would not have died.”&lt;/li&gt;&#xA;&lt;li&gt;When Jesus saw her weeping, and the Jews who had come with her also weeping, He was deeply moved in spirit and troubled.&lt;/li&gt;&#xA;&lt;li&gt;“Where have you put him?” He asked.&#xA;“Come and see, Lord,” they answered.&lt;/li&gt;&#xA;&lt;li&gt;Jesus wept.&lt;/li&gt;&#xA;&lt;li&gt;Then the Jews said, “See how He loved him!”&lt;/li&gt;&#xA;&lt;li&gt;But some of them asked, “Could not this man who opened the eyes of the blind also have kept Lazarus from dying?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus, once again deeply moved, came to the tomb. It was a cave with a stone laid across the entrance.&lt;/li&gt;&#xA;&lt;li&gt;“Take away the stone,” Jesus said.&#xA;“Lord, by now he stinks,” said Martha, the sister of the dead man. “It has already been four days.”&lt;/li&gt;&#xA;&lt;li&gt;Jesus replied, “Did I not tell you that if you believed, you would see the glory of God?”&lt;/li&gt;&#xA;&lt;li&gt;So they took away the stone. Then Jesus lifted His eyes upward and said, “Father, I thank You that You have heard Me.&lt;/li&gt;&#xA;&lt;li&gt;I knew that You always hear Me, but I say this for the benefit of the people standing here, so they may believe that You sent Me.”&lt;/li&gt;&#xA;&lt;li&gt;After Jesus had said this, He called out in a loud voice, “Lazarus, come out!”&lt;/li&gt;&#xA;&lt;li&gt;The man who had been dead came out with his hands and feet bound in strips of linen, and his face wrapped in a cloth.&#xA;“Unwrap him and let him go,” Jesus told them.&lt;/li&gt;&#xA;&lt;li&gt;Therefore many of the Jews who had come to Mary, and had seen what Jesus did, believed in Him.&lt;/li&gt;&#xA;&lt;li&gt;But some of them went to the Pharisees and told them what Jesus had done.&lt;/li&gt;&#xA;&lt;li&gt;Then the chief priests and Pharisees convened the Sanhedrin and said, “What are we to do? This man is performing many signs.&lt;/li&gt;&#xA;&lt;li&gt;If we let Him go on like this, everyone will believe in Him, and then the Romans will come and take away both our place and our nation.”&lt;/li&gt;&#xA;&lt;li&gt;But one of them, named Caiaphas, who was high priest that year, said to them, “You know nothing at all!&lt;/li&gt;&#xA;&lt;li&gt;You do not realize that it is better for you that one man die for the people than that the whole nation perish.”&lt;/li&gt;&#xA;&lt;li&gt;Caiaphas did not say this on his own. Instead, as high priest that year, he was prophesying that Jesus would die for the nation,&lt;/li&gt;&#xA;&lt;li&gt;and not only for the nation, but also for the scattered children of God, to gather them together into one.&lt;/li&gt;&#xA;&lt;li&gt;So from that day on they plotted to kill Him.&lt;/li&gt;&#xA;&lt;li&gt;As a result, Jesus no longer went about publicly among the Jews, but He withdrew to a town called Ephraim in an area near the wilderness. And He stayed there with the disciples.&lt;/li&gt;&#xA;&lt;li&gt;Now the Jewish Passover was near, and many people went up from the country to Jerusalem to purify themselves before the Passover.&lt;/li&gt;&#xA;&lt;li&gt;They kept looking for Jesus and asking one another as they stood in the temple courts, “What do you think? Will He come to the feast at all?”&lt;/li&gt;&#xA;&lt;li&gt;But the chief priests and Pharisees had given orders that anyone who knew where He was must report it, so that they could arrest Him.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Martha said to Jesus, “Lord, if You had been here, my brother would not have died.&lt;/li&gt;&#xA;&lt;li&gt;When Mary came to Jesus and saw Him, she fell at His feet and said, “Lord, if You had been here, my brother would not have died.”&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;means&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;We think we know what would have happened&lt;/p&gt;&#xA;&lt;h3 id=&#34;for-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;My ebenezeer page feels relevant when thinking about waiting on the Lord&lt;/p&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Psalm 40:1–2 (LEB)&lt;/summary&gt;&#xA;&lt;p&gt;1 I waited patiently for Yahweh,  And he inclined to me  and heard my cry for help.&#xA;2 And so he brought me up from the roaring pit,  from the miry clay.  And he put my feet upon a rock;  he made my steps steady.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;prayer&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-2-matthew-21-1-13&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 2 — Matthew 21:1-13&lt;/span&gt; &lt;a href=&#34;#day-2-matthew-21-1-13&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Matthew 21:1-13&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As they approached Jerusalem and came to Bethphage on the Mount of Olives, Jesus sent out two disciples,&lt;/li&gt;&#xA;&lt;li&gt;saying to them, “Go into the village ahead of you, and at once you will find a donkey tied there, with her colt beside her. Untie them and bring them to Me.&lt;/li&gt;&#xA;&lt;li&gt;If anyone questions you, tell him that the Lord needs them, and he will send them right away.”&lt;/li&gt;&#xA;&lt;li&gt;This took place to fulfill what was spoken through the prophet:&lt;/li&gt;&#xA;&lt;li&gt;“Say to the Daughter of Zion,&#xA;‘See, your King comes to you,&#xA;gentle and riding on a donkey,&#xA;on a colt, the foal of a donkey.’”&lt;/li&gt;&#xA;&lt;li&gt;So the disciples went and did as Jesus had directed them.&lt;/li&gt;&#xA;&lt;li&gt;They brought the donkey and the colt and laid their cloaks on them, and Jesus sat on them.&lt;/li&gt;&#xA;&lt;li&gt;A massive crowd spread their cloaks on the road, while others cut branches from the trees and spread them on the road.&lt;/li&gt;&#xA;&lt;li&gt;The crowds that went ahead of Him and those that followed were shouting:&#xA;“Hosanna to the Son of David!”&#xA;“Blessed is He who comes in the name of the Lord!”&#xA;“Hosanna in the highest!”&lt;/li&gt;&#xA;&lt;li&gt;When Jesus had entered Jerusalem, the whole city was stirred and asked, “Who is this?”&lt;/li&gt;&#xA;&lt;li&gt;The crowds replied, “This is Jesus, the prophet from Nazareth in Galilee.”&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus entered the temple courts and drove out all who were buying and selling there. He overturned the tables of the money changers and the seats of those selling doves.&lt;/li&gt;&#xA;&lt;li&gt;And He declared to them, “It is written: ‘My house will be called a house of prayer.’ But you are making it ‘a den of robbers.’ ”&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;means-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-3-john-13&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 3 — John 13&lt;/span&gt; &lt;a href=&#34;#day-3-john-13&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 13&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It was now just before the Passover Feast, and Jesus knew that His hour had come to leave this world and return to the Father. Having loved His own who were in the world, He loved them to the very end.&lt;/li&gt;&#xA;&lt;li&gt;The evening meal was underway, and the devil had already put into the heart of Judas, the son of Simon Iscariot, to betray Jesus.&lt;/li&gt;&#xA;&lt;li&gt;Jesus knew that the Father had delivered all things into His hands, and that He had come from God and was returning to God.&lt;/li&gt;&#xA;&lt;li&gt;So He got up from the supper, laid aside His outer garments, and wrapped a towel around His waist.&lt;/li&gt;&#xA;&lt;li&gt;After that, He poured water into a basin and began to wash the disciples’ feet and dry them with the towel that was around Him.&lt;/li&gt;&#xA;&lt;li&gt;He came to Simon Peter, who asked Him, “Lord, are You going to wash my feet?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus replied, “You do not realize now what I am doing, but later you will understand.”&lt;/li&gt;&#xA;&lt;li&gt;“Never shall You wash my feet!” Peter told Him.&#xA;Jesus answered, “Unless I wash you, you have no part with Me.”&lt;/li&gt;&#xA;&lt;li&gt;“Then, Lord,” Simon Peter replied, “not only my feet, but my hands and my head as well!”&lt;/li&gt;&#xA;&lt;li&gt;Jesus told him, “Whoever has already bathed needs only to wash his feet, and he will be completely clean. And you are clean, though not all of you.”&lt;/li&gt;&#xA;&lt;li&gt;For He knew who would betray Him. That is why He said, “Not all of you are clean.”&lt;/li&gt;&#xA;&lt;li&gt;When Jesus had washed their feet and put on His outer garments, He reclined with them again and asked, “Do you know what I have done for you?&lt;/li&gt;&#xA;&lt;li&gt;You call Me Teacher and Lord, and rightly so, because I am.&lt;/li&gt;&#xA;&lt;li&gt;So if I, your Lord and Teacher, have washed your feet, you also should wash one another’s feet.&lt;/li&gt;&#xA;&lt;li&gt;I have set you an example so that you should do as I have done for you.&lt;/li&gt;&#xA;&lt;li&gt;Truly, truly, I tell you, no servant is greater than his master, nor is a messenger greater than the one who sent him.&lt;/li&gt;&#xA;&lt;li&gt;If you know these things, you will be blessed if you do them.&lt;/li&gt;&#xA;&lt;li&gt;I am not speaking about all of you; I know whom I have chosen. But this is to fulfill the Scripture: ‘The one who shares My bread has lifted up his heel against Me.’&lt;/li&gt;&#xA;&lt;li&gt;I am telling you now before it happens, so that when it comes to pass, you will believe that I am He.&lt;/li&gt;&#xA;&lt;li&gt;Truly, truly, I tell you, whoever receives the one I send receives Me, and whoever receives Me receives the One who sent Me.”&lt;/li&gt;&#xA;&lt;li&gt;After Jesus had said this, He became troubled in spirit and testified, “Truly, truly, I tell you, one of you will betray Me.”&lt;/li&gt;&#xA;&lt;li&gt;The disciples looked at one another, perplexed as to which of them He meant.&lt;/li&gt;&#xA;&lt;li&gt;One of His disciples, the one whom Jesus loved, was reclining at His side.&lt;/li&gt;&#xA;&lt;li&gt;So Simon Peter motioned to him to ask Jesus which one He was talking about.&lt;/li&gt;&#xA;&lt;li&gt;Leaning back against Jesus, he asked, “Lord, who is it?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus answered, “It is the one to whom I give this morsel after I have dipped it.” Then He dipped the morsel and gave it to Judas son of Simon Iscariot.&lt;/li&gt;&#xA;&lt;li&gt;And when Judas had taken the morsel, Satan entered into him.&#xA;Then Jesus said to Judas, “What you are about to do, do quickly.”&lt;/li&gt;&#xA;&lt;li&gt;But no one at the table knew why Jesus had said this to him.&lt;/li&gt;&#xA;&lt;li&gt;Since Judas kept the money bag, some thought that Jesus was telling him to buy what was needed for the feast, or to give something to the poor.&lt;/li&gt;&#xA;&lt;li&gt;As soon as he had received the morsel, Judas went out into the night.&lt;/li&gt;&#xA;&lt;li&gt;When Judas had gone out, Jesus said, “Now the Son of Man is glorified, and God is glorified in Him.&lt;/li&gt;&#xA;&lt;li&gt;If God is glorified in Him, God will also glorify the Son in Himself—and will glorify Him at once.&lt;/li&gt;&#xA;&lt;li&gt;Little children, I am with you only a little while longer. You will look for Me, and as I said to the Jews, so now I say to you: ‘Where I am going, you cannot come.’&lt;/li&gt;&#xA;&lt;li&gt;A new commandment I give you: Love one another. As I have loved you, so you also must love one another.&lt;/li&gt;&#xA;&lt;li&gt;By this everyone will know that you are My disciples, if you love one another.”&lt;/li&gt;&#xA;&lt;li&gt;“Lord, where are You going?” Simon Peter asked.&#xA;Jesus answered, “Where I am going, you cannot follow Me now, but you will follow later.”&lt;/li&gt;&#xA;&lt;li&gt;“Lord,” said Peter, “why can’t I follow You now? I will lay down my life for You.”&lt;/li&gt;&#xA;&lt;li&gt;“Will you lay down your life for Me?” Jesus replied. “Truly, truly, I tell you, before the rooster crows, you will deny Me three times.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;6. He came to Simon Peter, who asked Him, “Lord, are You going to wash my feet?”&#xA;7. Jesus replied, “You do not realize now what I am doing, but later you will understand.”&#xA;8. “Never shall You wash my feet!” Peter told Him.&#xA;Jesus answered, “Unless I wash you, you have no part with Me.”&#xA;9. “Then, Lord,” Simon Peter replied, “not only my feet, but my hands and my head as well!”&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;means-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-4-john-14-15&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 4 — John 14-15&lt;/span&gt; &lt;a href=&#34;#day-4-john-14-15&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 14&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;“Do not let your hearts be troubled. You believe in God; believe in Me as well.&lt;/li&gt;&#xA;&lt;li&gt;In My Father’s house are many rooms. If it were not so, would I have told you that I am going there to prepare a place for you?&lt;/li&gt;&#xA;&lt;li&gt;And if I go and prepare a place for you, I will come back and welcome you into My presence, so that you also may be where I am.&lt;/li&gt;&#xA;&lt;li&gt;You know the way to the place where I am going. ”&lt;/li&gt;&#xA;&lt;li&gt;“Lord,” said Thomas, “we do not know where You are going, so how can we know the way?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus answered, “I am the way and the truth and the life. No one comes to the Father except through Me.&lt;/li&gt;&#xA;&lt;li&gt;If you had known Me, you would know My Father as well. From now on you do know Him and have seen Him.”&lt;/li&gt;&#xA;&lt;li&gt;Philip said to Him, “Lord, show us the Father, and that will be enough for us.”&lt;/li&gt;&#xA;&lt;li&gt;Jesus replied, “Philip, I have been with you all this time, and still you do not know Me? Anyone who has seen Me has seen the Father. How can you say, ‘Show us the Father’?&lt;/li&gt;&#xA;&lt;li&gt;Do you not believe that I am in the Father and the Father is in Me? The words I say to you, I do not speak on My own. Instead, it is the Father dwelling in Me, performing His works.&lt;/li&gt;&#xA;&lt;li&gt;Believe Me that I am in the Father and the Father is in Me—or at least believe on account of the works themselves.&lt;/li&gt;&#xA;&lt;li&gt;Truly, truly, I tell you, whoever believes in Me will also do the works that I am doing. He will do even greater things than these, because I am going to the Father.&lt;/li&gt;&#xA;&lt;li&gt;And I will do whatever you ask in My name, so that the Father may be glorified in the Son.&lt;/li&gt;&#xA;&lt;li&gt;If you ask Me for anything in My name, I will do it.&lt;/li&gt;&#xA;&lt;li&gt;If you love Me, you will keep My commandments.&lt;/li&gt;&#xA;&lt;li&gt;And I will ask the Father, and He will give you another Advocate to be with you forever—&lt;/li&gt;&#xA;&lt;li&gt;the Spirit of truth. The world cannot receive Him, because it neither sees Him nor knows Him. But you do know Him, for He abides with you and will be in you.&lt;/li&gt;&#xA;&lt;li&gt;I will not leave you as orphans; I will come to you.&lt;/li&gt;&#xA;&lt;li&gt;In a little while the world will see Me no more, but you will see Me. Because I live, you also will live.&lt;/li&gt;&#xA;&lt;li&gt;On that day you will know that I am in My Father, and you are in Me, and I am in you.&lt;/li&gt;&#xA;&lt;li&gt;Whoever has My commandments and keeps them is the one who loves Me. The one who loves Me will be loved by My Father, and I will love him and reveal Myself to him.”&lt;/li&gt;&#xA;&lt;li&gt;Judas (not Iscariot) asked Him, “Lord, why are You going to reveal Yourself to us and not to the world?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus replied, “If anyone loves Me, he will keep My word. My Father will love him, and We will come to him and make Our home with him.&lt;/li&gt;&#xA;&lt;li&gt;Whoever does not love Me does not keep My words. The word that you hear is not My own, but it is from the Father who sent Me.&lt;/li&gt;&#xA;&lt;li&gt;All this I have spoken to you while I am still with you.&lt;/li&gt;&#xA;&lt;li&gt;But the Advocate, the Holy Spirit, whom the Father will send in My name, will teach you all things and will remind you of everything I have told you.&lt;/li&gt;&#xA;&lt;li&gt;Peace I leave with you; My peace I give to you. I do not give to you as the world gives. Do not let your hearts be troubled; do not be afraid.&lt;/li&gt;&#xA;&lt;li&gt;You heard Me say, ‘I am going away, and I am coming back to you.’ If you loved Me, you would rejoice that I am going to the Father, because the Father is greater than I.&lt;/li&gt;&#xA;&lt;li&gt;And now I have told you before it happens, so that when it does happen, you will believe.&lt;/li&gt;&#xA;&lt;li&gt;I will not speak with you much longer, for the prince of this world is coming, and he has no claim on Me.&lt;/li&gt;&#xA;&lt;li&gt;But I do exactly what the Father has commanded Me, so that the world may know that I love the Father.&#xA;Get up! Let us go on from here.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 15&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;“I am the true vine, and My Father is the keeper of the vineyard.&lt;/li&gt;&#xA;&lt;li&gt;He cuts off every branch in Me that bears no fruit, and every branch that does bear fruit, He prunes to make it even more fruitful.&lt;/li&gt;&#xA;&lt;li&gt;You are already clean because of the word I have spoken to you.&lt;/li&gt;&#xA;&lt;li&gt;Remain in Me, and I will remain in you. Just as no branch can bear fruit by itself unless it remains in the vine, neither can you bear fruit unless you remain in Me.&lt;/li&gt;&#xA;&lt;li&gt;I am the vine and you are the branches. The one who remains in Me, and I in him, will bear much fruit. For apart from Me you can do nothing.&lt;/li&gt;&#xA;&lt;li&gt;If anyone does not remain in Me, he is like a branch that is thrown away and withers. Such branches are gathered up, thrown into the fire, and burned.&lt;/li&gt;&#xA;&lt;li&gt;If you remain in Me and My words remain in you, ask whatever you wish, and it will be done for you.&lt;/li&gt;&#xA;&lt;li&gt;This is to My Father’s glory, that you bear much fruit, proving yourselves to be My disciples.&lt;/li&gt;&#xA;&lt;li&gt;As the Father has loved Me, so have I loved you. Remain in My love.&lt;/li&gt;&#xA;&lt;li&gt;If you keep My commandments, you will remain in My love, just as I have kept My Father’s commandments and remain in His love.&lt;/li&gt;&#xA;&lt;li&gt;I have told you these things so that My joy may be in you and your joy may be complete.&lt;/li&gt;&#xA;&lt;li&gt;This is My commandment, that you love one another as I have loved you.&lt;/li&gt;&#xA;&lt;li&gt;Greater love has no one than this, that he lay down his life for his friends.&lt;/li&gt;&#xA;&lt;li&gt;You are My friends if you do what I command you.&lt;/li&gt;&#xA;&lt;li&gt;No longer do I call you servants, for a servant does not understand what his master is doing. But I have called you friends, because everything I have learned from My Father I have made known to you.&lt;/li&gt;&#xA;&lt;li&gt;You did not choose Me, but I chose you. And I appointed you to go and bear fruit—fruit that will remain—so that whatever you ask the Father in My name, He will give you.&lt;/li&gt;&#xA;&lt;li&gt;This is My command to you: Love one another.&lt;/li&gt;&#xA;&lt;li&gt;If the world hates you, understand that it hated Me first.&lt;/li&gt;&#xA;&lt;li&gt;If you were of the world, it would love you as its own. Instead, the world hates you, because you are not of the world, but I have chosen you out of the world.&lt;/li&gt;&#xA;&lt;li&gt;Remember the word that I spoke to you: ‘No servant is greater than his master.’ If they persecuted Me, they will persecute you as well; if they kept My word, they will keep yours as well.&lt;/li&gt;&#xA;&lt;li&gt;But they will treat you like this because of My name, since they do not know the One who sent Me.&lt;/li&gt;&#xA;&lt;li&gt;If I had not come and spoken to them, they would not be guilty of sin. Now, however, they have no excuse for their sin.&lt;/li&gt;&#xA;&lt;li&gt;Whoever hates Me hates My Father as well.&lt;/li&gt;&#xA;&lt;li&gt;If I had not done among them the works that no one else did, they would not be guilty of sin; but now they have seen and hated both Me and My Father.&lt;/li&gt;&#xA;&lt;li&gt;But this is to fulfill what is written in their Law: ‘They hated Me without reason.’&lt;/li&gt;&#xA;&lt;li&gt;When the Advocate comes, whom I will send to you from the Father—the Spirit of truth who proceeds from the Father—He will testify about Me.&lt;/li&gt;&#xA;&lt;li&gt;And you also must testify, because you have been with Me from the beginning.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;means-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;day-5-john-16-matthew-24-1-31&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 5 — John 16 &amp;amp; Matthew 24:1-31&lt;/span&gt; &lt;a href=&#34;#day-5-john-16-matthew-24-1-31&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 16&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;“I have told you these things so that you will not fall away.&lt;/li&gt;&#xA;&lt;li&gt;They will put you out of the synagogues. In fact, a time is coming when anyone who kills you will think he is offering a service to God.&lt;/li&gt;&#xA;&lt;li&gt;They will do these things because they have not known the Father or Me.&lt;/li&gt;&#xA;&lt;li&gt;But I have told you these things so that when their hour comes, you will remember that I told you about them. I did not tell you these things from the beginning, because I was with you.&lt;/li&gt;&#xA;&lt;li&gt;Now, however, I am going to Him who sent Me; yet none of you asks Me, ‘Where are You going?’&lt;/li&gt;&#xA;&lt;li&gt;Instead, your hearts are filled with sorrow because I have told you these things.&lt;/li&gt;&#xA;&lt;li&gt;But I tell you the truth, it is for your benefit that I am going away. Unless I go away, the Advocate will not come to you; but if I go, I will send Him to you.&lt;/li&gt;&#xA;&lt;li&gt;And when He comes, He will convict the world in regard to sin and righteousness and judgment:&lt;/li&gt;&#xA;&lt;li&gt;in regard to sin, because they do not believe in Me;&lt;/li&gt;&#xA;&lt;li&gt;in regard to righteousness, because I am going to the Father and you will no longer see Me;&lt;/li&gt;&#xA;&lt;li&gt;and in regard to judgment, because the prince of this world has been condemned.&lt;/li&gt;&#xA;&lt;li&gt;I still have much to tell you, but you cannot yet bear to hear it.&lt;/li&gt;&#xA;&lt;li&gt;However, when the Spirit of truth comes, He will guide you into all truth. For He will not speak on His own, but He will speak what He hears, and He will declare to you what is to come.&lt;/li&gt;&#xA;&lt;li&gt;He will glorify Me by taking from what is Mine and disclosing it to you.&lt;/li&gt;&#xA;&lt;li&gt;Everything that belongs to the Father is Mine. That is why I said that the Spirit will take from what is Mine and disclose it to you.&lt;/li&gt;&#xA;&lt;li&gt;In a little while you will see Me no more, and then after a little while you will see Me. ”&lt;/li&gt;&#xA;&lt;li&gt;Then some of His disciples asked one another, “Why is He telling us, ‘In a little while you will not see Me, and then after a little while you will see Me’ and ‘Because I am going to the Father’?”&lt;/li&gt;&#xA;&lt;li&gt;They kept asking, “Why is He saying, ‘a little while’? We do not understand what He is saying.”&lt;/li&gt;&#xA;&lt;li&gt;Aware that they wanted to question Him, Jesus said to them, “Are you asking one another why I said, ‘In a little while you will not see Me, and then after a little while you will see Me’?&lt;/li&gt;&#xA;&lt;li&gt;Truly, truly, I tell you, you will weep and wail while the world rejoices. You will grieve, but your grief will turn to joy.&lt;/li&gt;&#xA;&lt;li&gt;A woman has pain in childbirth because her time has come; but when she brings forth her child, she forgets her anguish because of her joy that a child has been born into the world.&lt;/li&gt;&#xA;&lt;li&gt;So also you have sorrow now, but I will see you again and your hearts will rejoice, and no one will take away your joy.&lt;/li&gt;&#xA;&lt;li&gt;In that day you will no longer ask Me anything. Truly, truly, I tell you, whatever you ask the Father in My name, He will give you.&lt;/li&gt;&#xA;&lt;li&gt;Until now you have not asked for anything in My name. Ask and you will receive, so that your joy may be complete.&lt;/li&gt;&#xA;&lt;li&gt;I have spoken these things to you in figures of speech. An hour is coming when I will no longer speak to you this way, but will tell you plainly about the Father.&lt;/li&gt;&#xA;&lt;li&gt;In that day you will ask in My name. I am not saying that I will ask the Father on your behalf.&lt;/li&gt;&#xA;&lt;li&gt;For the Father Himself loves you, because you have loved Me and have believed that I came from God.&lt;/li&gt;&#xA;&lt;li&gt;I came from the Father and entered the world. In turn, I will leave the world and go to the Father.”&lt;/li&gt;&#xA;&lt;li&gt;His disciples said, “See, now You are speaking plainly and without figures of speech.&lt;/li&gt;&#xA;&lt;li&gt;Now we understand that You know all things and that You have no need for anyone to question You. Because of this, we believe that You came from God.”&lt;/li&gt;&#xA;&lt;li&gt;“Do you finally believe?” Jesus replied.&lt;/li&gt;&#xA;&lt;li&gt;“Look, an hour is coming and has already come when you will be scattered, each to his own home, and you will leave Me all alone. Yet I am not alone, because the Father is with Me.&lt;/li&gt;&#xA;&lt;li&gt;I have told you these things so that in Me you may have peace. In the world you will have tribulation. But take courage; I have overcome the world!”&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Matthew 24:1-31&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As Jesus left the temple and was walking away, His disciples came up to Him to point out its buildings.&lt;/li&gt;&#xA;&lt;li&gt;“Do you see all these things?” He replied. “Truly I tell you, not one stone here will be left on another; every one will be thrown down.”&lt;/li&gt;&#xA;&lt;li&gt;While Jesus was sitting on the Mount of Olives, the disciples came to Him privately. “Tell us,” they said, “when will these things happen, and what will be the sign of Your coming and of the end of the age?”&lt;/li&gt;&#xA;&lt;li&gt;Jesus answered, “See to it that no one deceives you.&lt;/li&gt;&#xA;&lt;li&gt;For many will come in My name, claiming, ‘I am the Christ,’ and will deceive many.&lt;/li&gt;&#xA;&lt;li&gt;You will hear of wars and rumors of wars, but see to it that you are not alarmed. These things must happen, but the end is still to come.&lt;/li&gt;&#xA;&lt;li&gt;Nation will rise against nation, and kingdom against kingdom. There will be famines and earthquakes in various places.&lt;/li&gt;&#xA;&lt;li&gt;All these are the beginning of birth pains.&lt;/li&gt;&#xA;&lt;li&gt;Then they will deliver you over to be persecuted and killed, and you will be hated by all nations because of My name.&lt;/li&gt;&#xA;&lt;li&gt;At that time many will fall away and will betray and hate one another,&lt;/li&gt;&#xA;&lt;li&gt;and many false prophets will arise and deceive many.&lt;/li&gt;&#xA;&lt;li&gt;Because of the multiplication of wickedness, the love of most will grow cold.&lt;/li&gt;&#xA;&lt;li&gt;But the one who perseveres to the end will be saved.&lt;/li&gt;&#xA;&lt;li&gt;And this gospel of the kingdom will be preached in all the world as a testimony to all nations, and then the end will come.&lt;/li&gt;&#xA;&lt;li&gt;So when you see standing in the holy place ‘the abomination of desolation,’ spoken of by the prophet Daniel (let the reader understand),&lt;/li&gt;&#xA;&lt;li&gt;then let those who are in Judea flee to the mountains.&lt;/li&gt;&#xA;&lt;li&gt;Let no one on the housetop come down to retrieve anything from his house.&lt;/li&gt;&#xA;&lt;li&gt;And let no one in the field return for his cloak.&lt;/li&gt;&#xA;&lt;li&gt;How miserable those days will be for pregnant and nursing mothers!&lt;/li&gt;&#xA;&lt;li&gt;Pray that your flight will not occur in the winter or on the Sabbath.&lt;/li&gt;&#xA;&lt;li&gt;For at that time there will be great tribulation, unseen from the beginning of the world until now, and never to be seen again.&lt;/li&gt;&#xA;&lt;li&gt;If those days had not been cut short, nobody would be saved. But for the sake of the elect, those days will be cut short.&lt;/li&gt;&#xA;&lt;li&gt;At that time, if anyone says to you, ‘Look, here is the Christ!’ or ‘There He is!’ do not believe it.&lt;/li&gt;&#xA;&lt;li&gt;For false Christs and false prophets will appear and perform great signs and wonders to deceive even the elect, if that were possible.&lt;/li&gt;&#xA;&lt;li&gt;See, I have told you in advance.&lt;/li&gt;&#xA;&lt;li&gt;So if they tell you, ‘There He is, in the wilderness,’ do not go out, or, ‘Here He is, in the inner rooms,’ do not believe it.&lt;/li&gt;&#xA;&lt;li&gt;For just as the lightning comes from the east and flashes as far as the west, so will be the coming of the Son of Man.&lt;/li&gt;&#xA;&lt;li&gt;Wherever there is a carcass, there the vultures will gather.&lt;/li&gt;&#xA;&lt;li&gt;Immediately after the tribulation of those days:&#xA;‘The sun will be darkened,&#xA;and the moon will not give its light;&#xA;the stars will fall from the sky,&#xA;and the powers of the heavens will be shaken.&#xA;’&lt;/li&gt;&#xA;&lt;li&gt;At that time the sign of the Son of Man will appear in heaven, and all the tribes of the earth will mourn. They will see the Son of Man coming on the clouds of heaven with power and great glory.&lt;/li&gt;&#xA;&lt;li&gt;And He will send out His angels with a loud trumpet call, and they will gather His elect from the four winds, from one end of the heavens to the other.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h3 id=&#34;stands-out-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;means-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;for-me-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;prayer-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;prayer-requests&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer Requests&lt;/span&gt; &lt;a href=&#34;#prayer-requests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;name&gt; — &lt;request&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;answered-updates&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Answered / Updates&lt;/span&gt; &lt;a href=&#34;#answered-updates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;follow-ups from previous weeks&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;meeting-notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meeting Notes&lt;/span&gt; &lt;a href=&#34;#meeting-notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I read some of John 12 the morning of the meeting, not on our list but Judas&amp;rsquo; posture towards the espensive nard that Mary used to annoint is hilarious to me - very commie &amp;ldquo;why wasn&amp;rsquo;t this thing of mine used for someone else NOT sold and the money given to me to distribute to others as I see fit&amp;rdquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Men’s Group - Week 34</title>
    <id>https://pype.dev/olivet-mens-group-2026-week-34/</id>
    <updated>2026-09-07T06:00:00Z</updated>
    <published>2026-09-07T06:00:00Z</published>
    <link href="https://pype.dev/olivet-mens-group-2026-week-34/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! quote &#34;Philippians 4:19&#34;</summary>
    <content type="html">&lt;h1 id=&#34;week-34-september-6-12-2026&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Week 34 — September 6 – 12, 2026&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h3 id=&#34;meeting-friday-september-11&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meeting: Friday, September 11&lt;/span&gt; &lt;a href=&#34;#meeting-friday-september-11&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;memory-verse-philippians-4-19&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Memory Verse: Philippians 4:19&lt;/span&gt; &lt;a href=&#34;#memory-verse-philippians-4-19&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Philippians 4:19&lt;/p&gt;&#xA;&lt;ol start=&#34;19&#34;&gt;&#xA;&lt;li&gt;And my God will supply all your needs according to His glorious riches in Christ Jesus.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;readings&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Readings&lt;/span&gt; &lt;a href=&#34;#readings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 1: John 6&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 2: Matthew 19:16-30&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 3: Luke 15-16&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 4: Luke 17:11-37&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Day 5: Mark 10&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;day-1-john-6&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 1 — John 6&lt;/span&gt; &lt;a href=&#34;#day-1-john-6&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;John 6&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;After this, Jesus crossed to the other side of the Sea of Galilee (that is, the Sea of Tiberias).&lt;/li&gt;&#xA;&lt;li&gt;A large crowd followed Him because they saw the signs He was performing on the sick.&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus went up on the mountain and sat down with His disciples.&lt;/li&gt;&#xA;&lt;li&gt;Now the Jewish Feast of the Passover was near.&lt;/li&gt;&#xA;&lt;li&gt;When Jesus looked up and saw a large crowd coming toward Him, He said to Philip, &amp;ldquo;Where can we buy bread for these people to eat?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;But He was asking this to test him, for He knew what He was about to do.&lt;/li&gt;&#xA;&lt;li&gt;Philip answered, &amp;ldquo;Two hundred denarii would not buy enough bread for each of them to have a small piece.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;One of His disciples, Andrew, Simon Peter&amp;rsquo;s brother, said to Him,&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Here is a boy with five barley loaves and two small fish. But what difference will these make among so many?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Have the people sit down,&amp;rdquo; Jesus said. Now there was plenty of grass in that place, so the men sat down, about five thousand of them.&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus took the loaves and the fish, gave thanks, and distributed to those who were seated as much as they wanted.&lt;/li&gt;&#xA;&lt;li&gt;And when everyone was full, He said to His disciples, &amp;ldquo;Gather the pieces that are left over, so that nothing will be wasted.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;So they collected them and filled twelve baskets with the pieces of the five barley loaves left over by those who had eaten.&lt;/li&gt;&#xA;&lt;li&gt;When the people saw the sign that Jesus had performed, they began to say, &amp;ldquo;Truly this is the Prophet who is to come into the world.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus, realizing that they were about to come and make Him king by force, withdrew again to a mountain by Himself.&lt;/li&gt;&#xA;&lt;li&gt;When evening came, His disciples went down to the sea,&lt;/li&gt;&#xA;&lt;li&gt;got into a boat, and started across the sea to Capernaum. It was already dark, and Jesus had not yet gone out to them.&lt;/li&gt;&#xA;&lt;li&gt;A strong wind was blowing, and the sea grew agitated.&lt;/li&gt;&#xA;&lt;li&gt;When they had rowed about three or four miles, they saw Jesus approaching the boat, walking on the sea—and they were terrified.&lt;/li&gt;&#xA;&lt;li&gt;But Jesus spoke up: &amp;ldquo;It is I; do not be afraid.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then they were willing to take Him into the boat, and at once the boat reached the shore where they were heading.&lt;/li&gt;&#xA;&lt;li&gt;The next day, the crowd that had remained on the other side of the sea realized that only one boat had been there, and that Jesus had not boarded it with His disciples, but they had gone away alone.&lt;/li&gt;&#xA;&lt;li&gt;However, some boats from Tiberias landed near the place where the people had eaten the bread after the Lord had given thanks.&lt;/li&gt;&#xA;&lt;li&gt;So when the crowd saw that neither Jesus nor His disciples were there, they got into the boats and went to Capernaum to look for Him.&lt;/li&gt;&#xA;&lt;li&gt;When they found Him on the other side of the sea, they asked Him, &amp;ldquo;Rabbi, when did You get here?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus replied, &amp;ldquo;Truly, truly, I tell you, it is not because you saw these signs that you are looking for Me, but because you ate the loaves and had your fill.&lt;/li&gt;&#xA;&lt;li&gt;Do not work for food that perishes, but for food that endures to eternal life, which the Son of Man will give you. For on Him God the Father has placed His seal of approval.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then they inquired, &amp;ldquo;What must we do to perform the works of God?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus replied, &amp;ldquo;The work of God is this: to believe in the One He has sent.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;So they asked Him, &amp;ldquo;What sign then will You perform, so that we may see it and believe You? What will You do?&lt;/li&gt;&#xA;&lt;li&gt;Our fathers ate the manna in the wilderness, as it is written: &amp;lsquo;He gave them bread from heaven to eat.&amp;rsquo;&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus said to them, &amp;ldquo;Truly, truly, I tell you, it was not Moses who gave you the bread from heaven, but it is My Father who gives you the true bread from heaven.&lt;/li&gt;&#xA;&lt;li&gt;For the bread of God is He who comes down from heaven and gives life to the world.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Sir,&amp;rdquo; they said, &amp;ldquo;give us this bread at all times.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus answered, &amp;ldquo;I am the bread of life. Whoever comes to Me will never hunger, and whoever believes in Me will never thirst.&lt;/li&gt;&#xA;&lt;li&gt;But as I stated, you have seen Me and still you do not believe.&lt;/li&gt;&#xA;&lt;li&gt;Everyone the Father gives Me will come to Me, and the one who comes to Me I will never drive away.&lt;/li&gt;&#xA;&lt;li&gt;For I have come down from heaven, not to do My own will, but to do the will of Him who sent Me.&lt;/li&gt;&#xA;&lt;li&gt;And this is the will of Him who sent Me, that I shall lose none of those He has given Me, but raise them up at the last day.&lt;/li&gt;&#xA;&lt;li&gt;For it is My Father&amp;rsquo;s will that everyone who looks to the Son and believes in Him shall have eternal life, and I will raise him up at the last day.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;At this, the Jews began to grumble about Jesus because He had said, &amp;ldquo;I am the bread that came down from heaven.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;They were asking, &amp;ldquo;Is this not Jesus, the son of Joseph, whose father and mother we know? How then can He say, &amp;lsquo;I have come down from heaven?&amp;rsquo;&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Stop grumbling among yourselves,&amp;rdquo; Jesus replied.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;No one can come to Me unless the Father who sent Me draws him, and I will raise him up at the last day.&lt;/li&gt;&#xA;&lt;li&gt;It is written in the Prophets: &amp;lsquo;And they will all be taught by God.&amp;rsquo; Everyone who has heard the Father and learned from Him comes to Me—&lt;/li&gt;&#xA;&lt;li&gt;not that anyone has seen the Father except the One who is from God; only He has seen the Father.&lt;/li&gt;&#xA;&lt;li&gt;Truly, truly, I tell you, he who believes has eternal life.&lt;/li&gt;&#xA;&lt;li&gt;I am the bread of life.&lt;/li&gt;&#xA;&lt;li&gt;Your fathers ate the manna in the wilderness, yet they died.&lt;/li&gt;&#xA;&lt;li&gt;This is the bread that comes down from heaven, so that anyone may eat of it and not die.&lt;/li&gt;&#xA;&lt;li&gt;I am the living bread that came down from heaven. If anyone eats of this bread, he will live forever. And this bread, which I will give for the life of the world, is My flesh.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;At this, the Jews began to argue among themselves, &amp;ldquo;How can this man give us His flesh to eat?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;So Jesus said to them, &amp;ldquo;Truly, truly, I tell you, unless you eat the flesh and drink the blood of the Son of Man, you have no life in you.&lt;/li&gt;&#xA;&lt;li&gt;Whoever eats My flesh and drinks My blood has eternal life, and I will raise him up at the last day.&lt;/li&gt;&#xA;&lt;li&gt;For My flesh is real food, and My blood is real drink.&lt;/li&gt;&#xA;&lt;li&gt;Whoever eats My flesh and drinks My blood remains in Me, and I in him.&lt;/li&gt;&#xA;&lt;li&gt;Just as the living Father sent Me and I live because of the Father, so also the one who feeds on Me will live because of Me.&lt;/li&gt;&#xA;&lt;li&gt;This is the bread that came down from heaven. Unlike your fathers, who ate the manna and died, the one who eats this bread will live forever.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus said this while teaching in the synagogue in Capernaum.&lt;/li&gt;&#xA;&lt;li&gt;On hearing it, many of His disciples said, &amp;ldquo;This is a difficult teaching. Who can accept it?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Aware that His disciples were grumbling about this teaching, Jesus asked them, &amp;ldquo;Does this offend you?&lt;/li&gt;&#xA;&lt;li&gt;Then what will happen if you see the Son of Man ascend to where He was before?&lt;/li&gt;&#xA;&lt;li&gt;The Spirit gives life; the flesh profits nothing. The words I have spoken to you are spirit and they are life.&lt;/li&gt;&#xA;&lt;li&gt;However, there are some of you who do not believe.&amp;rdquo; (For Jesus had known from the beginning which of them did not believe and who would betray Him.)&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus said, &amp;ldquo;This is why I told you that no one can come to Me unless the Father has granted it to him.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;From that time on many of His disciples turned back and no longer walked with Him.&lt;/li&gt;&#xA;&lt;li&gt;So Jesus asked the Twelve, &amp;ldquo;Do you want to leave too?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Simon Peter replied, &amp;ldquo;Lord, to whom would we go? You have the words of eternal life.&lt;/li&gt;&#xA;&lt;li&gt;We believe and know that You are the Holy One of God.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus answered them, &amp;ldquo;Have I not chosen you, the Twelve? Yet one of you is a devil!&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;He was speaking about Judas, the son of Simon Iscariot. For although Judas was one of the Twelve, he was later to betray Jesus.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;day-2-matthew-19-16-30&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 2 — Matthew 19:16-30&lt;/span&gt; &lt;a href=&#34;#day-2-matthew-19-16-30&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Matthew 19:16-30&lt;/summary&gt;&#xA;&lt;ol start=&#34;16&#34;&gt;&#xA;&lt;li&gt;Just then a man came up to Jesus and inquired, &amp;ldquo;Teacher, what good thing must I do to obtain eternal life?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Why do you ask Me about what is good?&amp;rdquo; Jesus replied. &amp;ldquo;There is only One who is good. If you want to enter life, keep the commandments.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Which ones?&amp;rdquo; the man asked.&#xA;Jesus answered, &amp;ldquo;&amp;lsquo;Do not murder, do not commit adultery, do not steal, do not bear false witness,&lt;/li&gt;&#xA;&lt;li&gt;honor your father and mother, and love your neighbor as yourself.&amp;rsquo;&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;All these I have kept,&amp;rdquo; said the young man. &amp;ldquo;What do I still lack?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus told him, &amp;ldquo;If you want to be perfect, go, sell your possessions and give to the poor, and you will have treasure in heaven. Then come, follow Me.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;When the young man heard this, he went away in sorrow, because he had great wealth.&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus said to His disciples, &amp;ldquo;Truly I tell you, it is hard for a rich man to enter the kingdom of heaven.&lt;/li&gt;&#xA;&lt;li&gt;Again I tell you, it is easier for a camel to pass through the eye of a needle than for a rich man to enter the kingdom of God.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;When the disciples heard this, they were greatly astonished and asked, &amp;ldquo;Who then can be saved?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus looked at them and said, &amp;ldquo;With man this is impossible, but with God all things are possible.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Look,&amp;rdquo; Peter replied, &amp;ldquo;we have left everything to follow You. What then will there be for us?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus said to them, &amp;ldquo;Truly I tell you, in the renewal of all things, when the Son of Man sits on His glorious throne, you who have followed Me will also sit on twelve thrones, judging the twelve tribes of Israel.&lt;/li&gt;&#xA;&lt;li&gt;And everyone who has left houses or brothers or sisters or father or mother or wife or children or fields for the sake of My name will receive a hundredfold and will inherit eternal life.&lt;/li&gt;&#xA;&lt;li&gt;But many who are first will be last, and the last will be first.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;day-3-luke-15-16&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 3 — Luke 15-16&lt;/span&gt; &lt;a href=&#34;#day-3-luke-15-16&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Luke 15&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Now all the tax collectors and sinners were gathering around to listen to Jesus.&lt;/li&gt;&#xA;&lt;li&gt;So the Pharisees and scribes began to grumble: &amp;ldquo;This man welcomes sinners and eats with them.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus told them this parable:&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;What man among you, if he has a hundred sheep and loses one of them, does not leave the ninety-nine in the pasture and go after the one that is lost, until he finds it?&lt;/li&gt;&#xA;&lt;li&gt;And when he finds it, he joyfully puts it on his shoulders,&lt;/li&gt;&#xA;&lt;li&gt;comes home, and calls together his friends and neighbors to tell them, &amp;lsquo;Rejoice with me, for I have found my lost sheep!&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;I tell you that in the same way there will be more joy in heaven over one sinner who repents than over ninety-nine righteous ones who do not need to repent.&lt;/li&gt;&#xA;&lt;li&gt;Or what woman who has ten silver coins and loses one of them does not light a lamp, sweep her house, and search carefully until she finds it?&lt;/li&gt;&#xA;&lt;li&gt;And when she finds it, she calls together her friends and neighbors to say, &amp;lsquo;Rejoice with me, for I have found my lost coin.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;In the same way, I tell you, there is joy in the presence of God&amp;rsquo;s angels over one sinner who repents.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus said, &amp;ldquo;There was a man who had two sons.&lt;/li&gt;&#xA;&lt;li&gt;The younger son said to him, &amp;lsquo;Father, give me my share of the estate.&amp;rsquo; So he divided his property between them.&lt;/li&gt;&#xA;&lt;li&gt;After a few days, the younger son got everything together and journeyed to a distant country, where he squandered his wealth in wild living.&lt;/li&gt;&#xA;&lt;li&gt;After he had spent all he had, a severe famine swept through that country, and he began to be in need.&lt;/li&gt;&#xA;&lt;li&gt;So he went and hired himself out to a citizen of that country, who sent him into his fields to feed the pigs.&lt;/li&gt;&#xA;&lt;li&gt;He longed to fill his belly with the pods the pigs were eating, but no one would give him a thing.&lt;/li&gt;&#xA;&lt;li&gt;Finally he came to his senses and said, &amp;lsquo;How many of my father&amp;rsquo;s hired servants have plenty of food, but here I am, starving to death!&lt;/li&gt;&#xA;&lt;li&gt;I will get up and go back to my father and say to him, &amp;ldquo;Father, I have sinned against heaven and against you.&lt;/li&gt;&#xA;&lt;li&gt;I am no longer worthy to be called your son. Make me like one of your hired servants.&amp;rdquo;&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;So he got up and went to his father. But while he was still in the distance, his father saw him and was filled with compassion. He ran to his son, embraced him, and kissed him.&lt;/li&gt;&#xA;&lt;li&gt;The son declared, &amp;lsquo;Father, I have sinned against heaven and against you. I am no longer worthy to be called your son.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;But the father said to his servants, &amp;lsquo;Quick! Bring the best robe and put it on him. Put a ring on his finger and sandals on his feet.&lt;/li&gt;&#xA;&lt;li&gt;Bring the fattened calf and kill it. Let us feast and celebrate.&lt;/li&gt;&#xA;&lt;li&gt;For this son of mine was dead and is alive again! He was lost and is found!&amp;rsquo; So they began to celebrate.&lt;/li&gt;&#xA;&lt;li&gt;Meanwhile the older son was in the field, and as he approached the house, he heard music and dancing.&lt;/li&gt;&#xA;&lt;li&gt;So he called one of the servants and asked what was going on.&lt;/li&gt;&#xA;&lt;li&gt;&amp;lsquo;Your brother has returned,&amp;rsquo; he said, &amp;lsquo;and your father has killed the fattened calf, because he has him back safe and sound.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;The older son became angry and refused to go in. So his father came out and pleaded with him.&lt;/li&gt;&#xA;&lt;li&gt;But he answered his father, &amp;lsquo;Look, all these years I have served you and never disobeyed a commandment of yours. Yet you never gave me even a young goat so I could celebrate with my friends.&lt;/li&gt;&#xA;&lt;li&gt;But when this son of yours returns from squandering your wealth with prostitutes, you kill the fattened calf for him!&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lsquo;Son, you are always with me,&amp;rsquo; the father said, &amp;lsquo;and all that is mine is yours.&lt;/li&gt;&#xA;&lt;li&gt;But it was fitting to celebrate and be glad, because this brother of yours was dead and is alive again; he was lost and is found.&amp;rsquo;&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Luke 16&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Jesus also said to His disciples, &amp;ldquo;There was a rich man whose manager was accused of wasting his possessions.&lt;/li&gt;&#xA;&lt;li&gt;So he called him in to ask, &amp;lsquo;What is this I hear about you? Turn in an account of your management, for you cannot be manager any longer.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;The manager said to himself, &amp;lsquo;What shall I do, now that my master is taking away my position? I am too weak to dig and too ashamed to beg.&lt;/li&gt;&#xA;&lt;li&gt;I know what I will do so that after my removal from management, people will welcome me into their homes.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;And he called in each one of his master&amp;rsquo;s debtors. &amp;lsquo;How much do you owe my master?&amp;rsquo; he asked the first.&lt;/li&gt;&#xA;&lt;li&gt;&amp;lsquo;A hundred measures of olive oil,&amp;rsquo; he answered.&#xA;&amp;lsquo;Take your bill,&amp;rsquo; said the manager, &amp;lsquo;sit down quickly, and write fifty.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;Then he asked another, &amp;lsquo;And how much do you owe?&amp;rsquo;&#xA;&amp;lsquo;A hundred measures of wheat,&amp;rsquo; he replied.&#xA;&amp;lsquo;Take your bill and write eighty,&amp;rsquo; he told him.&lt;/li&gt;&#xA;&lt;li&gt;The master commended the dishonest manager because he had acted shrewdly. For the sons of this age are more shrewd in dealing with their own kind than are the sons of light.&lt;/li&gt;&#xA;&lt;li&gt;I tell you, use worldly wealth to make friends for yourselves so that when it is gone, they will welcome you into eternal dwellings.&lt;/li&gt;&#xA;&lt;li&gt;Whoever is faithful with very little will also be faithful with much, and whoever is dishonest with very little will also be dishonest with much.&lt;/li&gt;&#xA;&lt;li&gt;So if you have not been faithful with worldly wealth, who will entrust you with true riches?&lt;/li&gt;&#xA;&lt;li&gt;And if you have not been faithful with the belongings of another, who will give you belongings of your own?&lt;/li&gt;&#xA;&lt;li&gt;No servant can serve two masters. Either he will hate the one and love the other, or he will be devoted to the one and despise the other. You cannot serve both God and money.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;The Pharisees, who were lovers of money, heard all of this and were scoffing at Jesus.&lt;/li&gt;&#xA;&lt;li&gt;So He said to them, &amp;ldquo;You are the ones who justify yourselves before men, but God knows your hearts. For what is prized among men is detestable before God.&lt;/li&gt;&#xA;&lt;li&gt;The Law and the Prophets were proclaimed until John. Since that time, the gospel of the kingdom of God is being preached, and everyone is forcing his way into it.&lt;/li&gt;&#xA;&lt;li&gt;But it is easier for heaven and earth to pass away than for a single stroke of a pen to drop out of the Law.&lt;/li&gt;&#xA;&lt;li&gt;Anyone who divorces his wife and marries another woman commits adultery, and he who marries a divorced woman commits adultery.&lt;/li&gt;&#xA;&lt;li&gt;Now there was a rich man dressed in purple and fine linen, who lived each day in joyous splendor.&lt;/li&gt;&#xA;&lt;li&gt;And a beggar named Lazarus lay at his gate, covered with sores&lt;/li&gt;&#xA;&lt;li&gt;and longing to be fed with the crumbs that fell from the rich man&amp;rsquo;s table. Even the dogs came and licked his sores.&lt;/li&gt;&#xA;&lt;li&gt;One day the beggar died and was carried by the angels to Abraham&amp;rsquo;s side. And the rich man also died and was buried.&lt;/li&gt;&#xA;&lt;li&gt;In Hades, where he was in torment, he looked up and saw Abraham from afar, with Lazarus by his side.&lt;/li&gt;&#xA;&lt;li&gt;So he cried out, &amp;lsquo;Father Abraham, have mercy on me and send Lazarus to dip the tip of his finger in water and cool my tongue. For I am in agony in this fire.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;But Abraham answered, &amp;lsquo;Child, remember that during your lifetime you received your good things, while Lazarus received bad things. But now he is comforted here, while you are in agony.&lt;/li&gt;&#xA;&lt;li&gt;And besides all this, a great chasm has been fixed between us and you, so that even those who wish cannot cross from here to you, nor can anyone cross from there to us.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lsquo;Then I beg you, father,&amp;rsquo; he said, &amp;lsquo;send Lazarus to my father&amp;rsquo;&amp;rsquo;s house,&lt;/li&gt;&#xA;&lt;li&gt;for I have five brothers. Let him warn them, so that they will not also end up in this place of torment.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;But Abraham replied, &amp;lsquo;They have Moses and the Prophets; let your brothers listen to them.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lsquo;No, father Abraham,&amp;rsquo; he said, &amp;lsquo;but if someone is sent to them from the dead, they will repent.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;Then Abraham said to him, &amp;lsquo;If they do not listen to Moses and the Prophets, they will not be persuaded even if someone rises from the dead.&amp;rsquo;&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;day-4-luke-17-11-37&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 4 — Luke 17:11-37&lt;/span&gt; &lt;a href=&#34;#day-4-luke-17-11-37&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Luke 17:11-37&lt;/summary&gt;&#xA;&lt;ol start=&#34;11&#34;&gt;&#xA;&lt;li&gt;While Jesus was on His way to Jerusalem, He was passing between Samaria and Galilee.&lt;/li&gt;&#xA;&lt;li&gt;As He entered one of the villages, He was met by ten lepers. They stood at a distance&lt;/li&gt;&#xA;&lt;li&gt;and raised their voices, shouting, &amp;ldquo;Jesus, Master, have mercy on us!&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;When Jesus saw them, He said, &amp;ldquo;Go, show yourselves to the priests.&amp;rdquo; And as they were on their way, they were cleansed.&lt;/li&gt;&#xA;&lt;li&gt;When one of them saw that he was healed, he came back, praising God in a loud voice.&lt;/li&gt;&#xA;&lt;li&gt;He fell facedown at Jesus&amp;rsquo; feet in thanksgiving to Him—and he was a Samaritan.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Were not all ten cleansed?&amp;rdquo; Jesus asked. &amp;ldquo;Where then are the other nine?&lt;/li&gt;&#xA;&lt;li&gt;Was no one found except this foreigner to return and give glory to God?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus said to him, &amp;ldquo;Rise and go; your faith has made you well!&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;When asked by the Pharisees when the kingdom of God would come, Jesus replied, &amp;ldquo;The kingdom of God will not come with observable signs.&lt;/li&gt;&#xA;&lt;li&gt;Nor will people say, &amp;lsquo;Look, here it is,&amp;rsquo; or &amp;lsquo;There it is.&amp;rsquo; For you see, the kingdom of God is in your midst.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then He said to the disciples, &amp;ldquo;The time is coming when you will long to see one of the days of the Son of Man, but you will not see it.&lt;/li&gt;&#xA;&lt;li&gt;People will tell you, &amp;lsquo;Look, there He is!&amp;rsquo; or &amp;lsquo;Look, here He is!&amp;rsquo; Do not go out or chase after them.&lt;/li&gt;&#xA;&lt;li&gt;For just as the lightning flashes and lights up the sky from one end to the other, so will be the Son of Man in His day.&lt;/li&gt;&#xA;&lt;li&gt;But first He must suffer many things and be rejected by this generation.&lt;/li&gt;&#xA;&lt;li&gt;Just as it was in the days of Noah, so also will it be in the days of the Son of Man:&lt;/li&gt;&#xA;&lt;li&gt;People were eating and drinking, marrying and being given in marriage, up to the day Noah entered the ark. Then the flood came and destroyed them all.&lt;/li&gt;&#xA;&lt;li&gt;It was the same in the days of Lot: People were eating and drinking, buying and selling, planting and building.&lt;/li&gt;&#xA;&lt;li&gt;But on the day Lot left Sodom, fire and sulfur rained down from heaven and destroyed them all.&lt;/li&gt;&#xA;&lt;li&gt;It will be just like that on the day the Son of Man is revealed.&lt;/li&gt;&#xA;&lt;li&gt;On that day, let no one on the housetop come down to retrieve his possessions. Likewise, let no one in the field return for anything he has left behind.&lt;/li&gt;&#xA;&lt;li&gt;Remember Lot&amp;rsquo;s wife!&lt;/li&gt;&#xA;&lt;li&gt;Whoever tries to save his life will lose it, but whoever loses his life will preserve it.&lt;/li&gt;&#xA;&lt;li&gt;I tell you, on that night two people will be in one bed: one will be taken and the other left.&lt;/li&gt;&#xA;&lt;li&gt;Two women will be grinding grain together: one will be taken and the other left.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Where, Lord?&amp;rdquo; they asked.&#xA;Jesus answered, &amp;ldquo;Wherever there is a carcass, there the vultures will gather.&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;day-5-mark-10&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 5 — Mark 10&lt;/span&gt; &lt;a href=&#34;#day-5-mark-10&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;details class=&#34;admonition quote&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Mark 10&lt;/summary&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Then Jesus left that place and went into the region of Judea, beyond the Jordan. Again the crowds came to Him and He taught them, as was His custom.&lt;/li&gt;&#xA;&lt;li&gt;Some Pharisees came to test Him. &amp;ldquo;Is it lawful for a man to divorce his wife?&amp;rdquo; they inquired.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;What did Moses command you?&amp;rdquo; He replied.&lt;/li&gt;&#xA;&lt;li&gt;They answered, &amp;ldquo;Moses permitted a man to write his wife a certificate of divorce and send her away.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;But Jesus told them, &amp;ldquo;Moses wrote this commandment for you because of your hardness of heart.&lt;/li&gt;&#xA;&lt;li&gt;However, from the beginning of creation, &amp;lsquo;God made them male and female.&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;lsquo;For this reason a man will leave his father and mother and be united to his wife,&lt;/li&gt;&#xA;&lt;li&gt;and the two will become one flesh.&amp;rsquo; So they are no longer two, but one flesh.&lt;/li&gt;&#xA;&lt;li&gt;Therefore what God has joined together, let man not separate.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;When they were back inside the house, the disciples asked Jesus about this matter.&lt;/li&gt;&#xA;&lt;li&gt;So He told them, &amp;ldquo;Whoever divorces his wife and marries another woman commits adultery against her.&lt;/li&gt;&#xA;&lt;li&gt;And if a woman divorces her husband and marries another man, she commits adultery.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Now people were bringing the little children to Jesus for Him to place His hands on them, and the disciples rebuked those who brought them.&lt;/li&gt;&#xA;&lt;li&gt;But when Jesus saw this, He was indignant and told them, &amp;ldquo;Let the little children come to Me, and do not hinder them! For the kingdom of God belongs to such as these.&lt;/li&gt;&#xA;&lt;li&gt;Truly I tell you, anyone who does not receive the kingdom of God like a little child will never enter it.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;And He took the children in His arms, placed His hands on them, and blessed them.&lt;/li&gt;&#xA;&lt;li&gt;As Jesus started on His way, a man ran up and knelt before Him. &amp;ldquo;Good Teacher,&amp;rdquo; he asked, &amp;ldquo;what must I do to inherit eternal life?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Why do you call Me good?&amp;rdquo; Jesus replied. &amp;ldquo;No one is good except God alone.&lt;/li&gt;&#xA;&lt;li&gt;You know the commandments: &amp;lsquo;Do not murder, do not commit adultery, do not steal, do not bear false witness, do not cheat others, honor your father and mother.&amp;rsquo;&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Teacher,&amp;rdquo; he replied, &amp;ldquo;all these I have kept from my youth.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus looked at him, loved him, and said to him, &amp;ldquo;There is one thing you lack: Go, sell everything you own and give to the poor, and you will have treasure in heaven. Then come, follow Me.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;But the man was saddened by these words and went away in sorrow, because he had great wealth.&lt;/li&gt;&#xA;&lt;li&gt;Then Jesus looked around and said to His disciples, &amp;ldquo;How hard it is for the rich to enter the kingdom of God!&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;And the disciples were amazed at His words.&#xA;But Jesus said to them again, &amp;ldquo;Children, how hard it is to enter the kingdom of God!&lt;/li&gt;&#xA;&lt;li&gt;It is easier for a camel to pass through the eye of a needle than for a rich man to enter the kingdom of God.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;They were even more astonished and said to one another, &amp;ldquo;Who then can be saved?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus looked at them and said, &amp;ldquo;With man this is impossible, but not with God. For all things are possible with God.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Peter began to say to Him, &amp;ldquo;Look, we have left everything and followed You.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Truly I tell you,&amp;rdquo; Jesus replied, &amp;ldquo;no one who has left home or brothers or sisters or mother or father or children or fields for My sake and for the gospel&lt;/li&gt;&#xA;&lt;li&gt;will fail to receive a hundredfold in the present age—houses and brothers and sisters and mothers and children and fields, along with persecutions—and in the age to come, eternal life.&lt;/li&gt;&#xA;&lt;li&gt;But many who are first will be last, and the last will be first.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;As they were going up the road to Jerusalem, Jesus was walking ahead of them. The disciples were amazed, but those who followed were afraid. Again Jesus took the Twelve aside and began to tell them what was going to happen to Him:&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Look, we are going up to Jerusalem, and the Son of Man will be delivered over to the chief priests and scribes. They will condemn Him to death and will deliver Him over to the Gentiles,&lt;/li&gt;&#xA;&lt;li&gt;who will mock Him and spit on Him and flog Him and kill Him. And after three days He will rise again.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Then James and John, the sons of Zebedee, came to Jesus and declared, &amp;ldquo;Teacher, we want You to do for us whatever we ask.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;What do you want Me to do for you?&amp;rdquo; He inquired.&lt;/li&gt;&#xA;&lt;li&gt;They answered, &amp;ldquo;Grant that one of us may sit at Your right hand and the other at Your left in Your glory.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;You do not know what you are asking,&amp;rdquo; Jesus replied. &amp;ldquo;Can you drink the cup I will drink, or be baptized with the baptism I will undergo?&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;We can,&amp;rdquo; the brothers answered.&#xA;&amp;ldquo;You will drink the cup that I drink,&amp;rdquo; Jesus said, &amp;ldquo;and you will be baptized with the baptism that I undergo.&lt;/li&gt;&#xA;&lt;li&gt;But to sit at My right or left is not Mine to grant. These seats belong to those for whom they have been prepared.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;When the ten heard about this, they became indignant with James and John.&lt;/li&gt;&#xA;&lt;li&gt;So Jesus called them together and said, &amp;ldquo;You know that those regarded as rulers of the Gentiles lord it over them, and their superiors exercise authority over them.&lt;/li&gt;&#xA;&lt;li&gt;But it shall not be this way among you. Instead, whoever wants to become great among you must be your servant,&lt;/li&gt;&#xA;&lt;li&gt;and whoever wants to be first must be the slave of all.&lt;/li&gt;&#xA;&lt;li&gt;For even the Son of Man did not come to be served, but to serve, and to give His life as a ransom for many.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Next, they came to Jericho. And as Jesus and His disciples were leaving Jericho with a large crowd, a blind beggar named Bartimaeus, the son of Timaeus, was sitting beside the road.&lt;/li&gt;&#xA;&lt;li&gt;When he heard that it was Jesus of Nazareth, he began to cry out, &amp;ldquo;Jesus, Son of David, have mercy on me!&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Many people admonished him to be silent, but he cried out all the louder, &amp;ldquo;Son of David, have mercy on me!&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Jesus stopped and said, &amp;ldquo;Call him.&amp;rdquo;&#xA;So they called the blind man. &amp;ldquo;Take courage!&amp;rdquo; they said. &amp;ldquo;Get up! He is calling for you.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Throwing off his cloak, Bartimaeus jumped up and came to Jesus.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;What do you want Me to do for you?&amp;rdquo; Jesus asked.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Rabboni,&amp;rdquo; said the blind man, &amp;ldquo;let me see again.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Go,&amp;rdquo; said Jesus, &amp;ldquo;your faith has healed you.&amp;rdquo; And immediately he received his sight and followed Jesus along the road.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/details&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;weekly-journal&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Weekly Journal&lt;/span&gt; &lt;a href=&#34;#weekly-journal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;stands-out&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stands out&lt;/span&gt; &lt;a href=&#34;#stands-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;day-1-john-6-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 1 — John 6&lt;/span&gt; &lt;a href=&#34;#day-1-john-6-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code&gt;9. &amp;quot;Here is a boy with five barley loaves and two small fish. But what difference will these make among so many?&amp;quot;&#xA;&#xA;29. Jesus replied, &amp;quot;The work of God is this: to believe in the One He has sent.&amp;quot;&#xA;&#xA;37. Everyone the Father gives Me will come to Me, and the one who comes to Me I will never drive away.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;day-4-luke-17-11-37-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 4 — Luke 17:11-37&lt;/span&gt; &lt;a href=&#34;#day-4-luke-17-11-37-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code&gt;14. When Jesus saw them, He said, &amp;quot;Go, show yourselves to the priests.&amp;quot; And as they were on their way, they were cleansed.&#xA;15. When one of them saw that he was healed, he came back, praising God in a loud voice.&#xA;16. He fell facedown at Jesus&#39; feet in thanksgiving to Him—and he was a Samaritan.&#xA;17. &amp;quot;Were not all ten cleansed?&amp;quot; Jesus asked. &amp;quot;Where then are the other nine?&#xA;18. Was no one found except this foreigner to return and give glory to God?&amp;quot;&#xA;19. Then Jesus said to him, &amp;quot;Rise and go; your faith has made you well!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;means&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Means&lt;/span&gt; &lt;a href=&#34;#means&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;day-1-john-6-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 1 — John 6&lt;/span&gt; &lt;a href=&#34;#day-1-john-6-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;everything comes from the Lord - God gives every single sgood thing in his own way.&lt;/p&gt;&#xA;&lt;h4 id=&#34;day-4-luke-17-11-37-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 4 — Luke 17:11-37&lt;/span&gt; &lt;a href=&#34;#day-4-luke-17-11-37-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;Obedience is a gift of faith - and a medium by which God works&lt;/p&gt;&#xA;&lt;h3 id=&#34;for-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;For me&lt;/span&gt; &lt;a href=&#34;#for-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;day-4-luke-17-11-37-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 4 — Luke 17:11-37&lt;/span&gt; &lt;a href=&#34;#day-4-luke-17-11-37-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;God&amp;rsquo;s blessing is within his sovereign will to pour out. He has clearly had so much favor on me&amp;hellip; why would I squandor it?&lt;/p&gt;&#xA;&lt;h3 id=&#34;prayer&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;prayer-requests&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer Requests&lt;/span&gt; &lt;a href=&#34;#prayer-requests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;name&gt; — &lt;request&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;name&gt; — &lt;request&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;answered-updates&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Answered / Updates&lt;/span&gt; &lt;a href=&#34;#answered-updates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;follow-ups from previous weeks&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;meeting-notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meeting Notes&lt;/span&gt; &lt;a href=&#34;#meeting-notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&amp;lt;what the group discussed, insights from others&amp;gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FWBG - Genesis - 4.1</title>
    <id>https://pype.dev/fwbg-genesis-4-1/</id>
    <updated>2026-06-18T06:31:23Z</updated>
    <published>2026-06-18T06:31:23Z</published>
    <link href="https://pype.dev/fwbg-genesis-4-1/" rel="alternate" type="text/html"></link>
    <summary type="text">The Fall is worthy of grieving. The story in the Bible explains the state of humanity, and I think we can grieve humanity&#39;s state just via observation today....</summary>
    <content type="html">&lt;p&gt;The Fall is worthy of grieving. The story in the Bible explains the state of&#xA;humanity, and I think we can grieve humanity&amp;rsquo;s state just via observation&#xA;today. But the beauty of the Gospel of Jesus Christ is that with grieving and&#xA;mourning there is hope and redemption&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Silliness and Wrecklessness</title>
    <id>https://pype.dev/silliness-and-wrecklessness/</id>
    <updated>2026-06-07T18:39:57Z</updated>
    <published>2026-06-07T18:39:57Z</published>
    <link href="https://pype.dev/silliness-and-wrecklessness/" rel="alternate" type="text/html"></link>
    <summary type="text">I talked with my oldest daughter about silliness and wrecklessness today. She and her sister were playing too rough at bedtime and the younger slapped the...</summary>
    <content type="html">&lt;p&gt;I talked with my oldest daughter about silliness and wrecklessness today. She&#xA;and her sister were playing too rough at bedtime and the younger slapped the&#xA;older one pretty hard. It wasn&amp;rsquo;t malicious, they&amp;rsquo;re 4 and 6, they were just&#xA;being silly but without respect for reality, they were tired, and have been&#xA;tired for a while (thus the bedtime) and in their silliness and tiredness their&#xA;actions became wrekless. This is what I explained to her, and she paused and said&#xA;&amp;ldquo;Dad, what is wreckless?&amp;rdquo; and oh man did my heart melt&amp;hellip; I&amp;rsquo;m so proud of her&#xA;for asking that question, and feeling comfortable to do so in the middle of our&#xA;conversation made me feel good as her dad.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-06-01 Notes</title>
    <id>https://pype.dev/2026-06-01-notes/</id>
    <updated>2026-06-01T07:51:47Z</updated>
    <published>2026-06-01T07:51:47Z</published>
    <link href="https://pype.dev/2026-06-01-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-05-27-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-05-27-notes]]&#xA;&#xA;- bookorbit for kassia&#xA;- nextcloud was eating up resources this morning&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FWBG - Genesis - 3.3</title>
    <id>https://pype.dev/fwbg-genesis-3-3/</id>
    <updated>2026-05-31T07:12:49Z</updated>
    <published>2026-05-31T07:12:49Z</published>
    <link href="https://pype.dev/fwbg-genesis-3-3/" rel="alternate" type="text/html"></link>
    <summary type="text">The consequences of the fall were immediate and great:</summary>
    <content type="html">&lt;h2 id=&#34;on-the-fall&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;On the Fall&lt;/span&gt; &lt;a href=&#34;#on-the-fall&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The consequences of the fall were immediate and great:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;shame (humans recognize their nakedness and cover up)&lt;/li&gt;&#xA;&lt;li&gt;separation (humans are banished from Paradise/Eden)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When I have nothing to hide, and I&amp;rsquo;m completing my work both at home and my job&#xA;to a degree that I&amp;rsquo;m satisfied with results, then shame and anxiety seem so&#xA;small.&lt;/p&gt;&#xA;&lt;p&gt;God gives grace to people, and he offered grace in the beginning as one of his&#xA;responses to sin.&lt;/p&gt;&#xA;&lt;p&gt;I can&amp;rsquo;t help but recognize the wrestle with the reality of the Fall, and I&#xA;don&amp;rsquo;t mean the state of human today - I think we&amp;rsquo;re clearly fallen. But I mean&#xA;the record in Genesis 3&amp;hellip; I think Genesis 1-11 tells a story to explain human&#xA;history but doesn&amp;rsquo;t necessarily give us a play-by-play transcription of that&#xA;history. So I need to personally be careful in how much analysis I do of the&#xA;physical reality of Genesis 3 and be sure to filter my perception of it through&#xA;the lens of the rest of the Bible.&lt;/p&gt;&#xA;&lt;p&gt;Jesus is the snake-crusher promised in 3:9, and he offers grace every day for&#xA;sin to those he loves.&lt;/p&gt;&#xA;&lt;p&gt;May Jesus today grant me grace to work hard but have the right perspective. The&#xA;things I stress about in my life, I&amp;rsquo;m afraid are less important, less weighty&#xA;than the weight of anxiety they cause. Perhaps the anxiety I am dealing with is&#xA;a direct result of the Fall, and it continues as I hide away or try to give&#xA;time and energy to the wrong things.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>God’s Zeal for Justice Amont Men Displayed in the Divine Counsel</title>
    <id>https://pype.dev/gods-zeal-for-justice-amont-men-displayed-in-the-divine-counsel/</id>
    <updated>2026-05-31T07:12:40Z</updated>
    <published>2026-05-31T07:12:40Z</published>
    <link href="https://pype.dev/gods-zeal-for-justice-amont-men-displayed-in-the-divine-counsel/" rel="alternate" type="text/html"></link>
    <summary type="text">link to sermon</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=edlishFtHHE&#34;&gt;link to sermon&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 82&lt;/p&gt;&#xA;&lt;p&gt;1 God stands in the divine assembly;  he administers judgment in the midst of&#xA;the gods.&#xA;2 “How long will you judge unjustly  and show favoritism to the&#xA;wicked?&#xA;Selah&#xA;3 Judge on behalf of the helpless and the orphan;  provide&#xA;justice to the afflicted and the poor.&#xA;4 Rescue the helpless and the needy;&#xA;deliver them from the hand of the wicked.”&#xA;5 They do not know or consider. They go about in the darkness,  so that all&#xA;the foundations of the earth are&#xA;shaken.&#xA;6 I have said, “You are gods,  and sons of the Most High, all of you.&#xA;7 However, you will die like men,  and you will fall like one of the princes.”&#xA;8 Rise up, O God, judge the earth,  because you shall inherit all the nations.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ephesians 1:15-22&lt;/p&gt;&#xA;&lt;p&gt;15 Because of this I also, hearing of your faith in the Lord Jesus and your&#xA;love for all the saints, 16 do not cease giving thanks for you, making mention&#xA;in my prayers, 17 that the God of our Lord Jesus Christ, the glorious Father,&#xA;may give you a spirit of wisdom and revelation in the knowledge of him 18 (the&#xA;eyes of your hearts having been enlightened), so that you may know what is the&#xA;hope of his calling, what are the riches of the glory of his inheritance among&#xA;the saints, 19 and what is the surpassing greatness of his power toward us who&#xA;believe, according to the working of his mighty strength 20 which he has worked&#xA;in Christ, raising him from the dead and seating him at his right hand in the&#xA;heavenly places, 21 above all rule and authority and power and lordship and&#xA;every name named, not only in this age but also in the coming one, 22 and he&#xA;subjected all things under his feet and gave him as head over all things to the&#xA;church, 23 which is his body, the fullness of the one who fills all things in&#xA;every way.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ephesians 2:4-7&lt;/p&gt;&#xA;&lt;p&gt;4 But God, being rich in mercy, because of his great love with which he&#xA;loved us, 5 and we being dead in trespasses, he made us alive together with&#xA;Christ (by grace you are saved), 6 and raised us together and seated us&#xA;together in the heavenly places in Christ Jesus, 7 in order that he might show&#xA;in the coming ages the surpassing riches of his grace in kindness upon us in&#xA;Christ Jesus.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;running-thoughts&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Running thoughts&lt;/span&gt; &lt;a href=&#34;#running-thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;seated-in-the-heavently-places-with-christ-jesus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Seated in the Heavently Places with Christ Jesus&lt;/span&gt; &lt;a href=&#34;#seated-in-the-heavently-places-with-christ-jesus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;We are aware of the idea of resurrection, and Christ&amp;rsquo;s resurrection. We know for those born-again that we&amp;rsquo;ll be raised heavenward.&lt;/p&gt;&#xA;&lt;p&gt;What about &amp;ldquo;seated&amp;rdquo;? We are seated with Christ, this is royalty language - describes the right to rule, reign, and judge.&lt;/p&gt;&#xA;&lt;p&gt;So when Paul tells the Ephesian saints that they&amp;rsquo;ve been seated with Christ in the heavenly places&amp;hellip;. what does it mean right now?&lt;/p&gt;&#xA;&lt;p&gt;We are &amp;ldquo;there&amp;rdquo; with him (Jesus), right now - seated, ruling with Christ.&lt;/p&gt;&#xA;&lt;h3 id=&#34;founding-of-the-divine-council&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Founding of the Divine Council&lt;/span&gt; &lt;a href=&#34;#founding-of-the-divine-council&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Job 38:4-7&lt;/p&gt;&#xA;&lt;p&gt;4 “Where were you at my laying the foundation of the earth?  Tell me, if&#xA;you possess understanding.  5 Who determined its measurement? Yes, you do know.&#xA;Or who stretched the measuring line upon it?  6 On what were its bases sunk?&#xA;Or who laid its cornerstone,  7 when the morning stars were singing together&#xA;and all the sons of God shouted for joy?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;When the morning stars were singing together and all the sons of God shouted for joy&amp;hellip; divine language, beings already in existence when the foundations of the earth were laid.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Job 1:6&lt;/p&gt;&#xA;&lt;p&gt;And it happened one day that the sons of God came to present themselves before Yahweh, and Satan also came into their midst.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Job 2:1&lt;/p&gt;&#xA;&lt;p&gt;And then one day the sons of God came to present themselves before Yahweh, and Satan also came into their midst to present himself before Yahweh.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The &amp;ldquo;sons of God&amp;rdquo;. They present themselves before God, and they&amp;rsquo;re different&#xA;than other spiritual beings like Cherubim. These beings have some function&#xA;apart from God&amp;rsquo;s immediate presence, thus they gather to present themselves&#xA;(not that they were/are always there like the throne guardians)&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Deuteronomy 32:7-9&lt;/p&gt;&#xA;&lt;p&gt;7 Remember the old days, the years long past;  ask your father, and he will&#xA;inform you,  your elders and they will tell you.  8 When the Most High&#xA;apportioned the nations,  at his dividing up of the sons of humankind,  he&#xA;fixed the boundaries of the peoples,  according to the number of the sons of&#xA;God.  9 For Yahweh’s portion was his people,  Jacob the share of his&#xA;inheritance.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Moses is referencing Genesis 10/11, The Tower of Babel. There was 1 language,&#xA;but humans decided to build a name for themselves rather than obey God&amp;rsquo;s&#xA;commands, so Yahweh confused their language and scattered them. Moses adds the&#xA;commentary that the &amp;ldquo;borders of the people&amp;rdquo; were fixed &amp;ldquo;according to the number&#xA;of the sons of God&amp;rdquo;. The Divine Council was given the job of ruling over the&#xA;scattered people, to lead them back to Yahweh.&lt;/p&gt;&#xA;&lt;p&gt;Yahweh creates a new inheritance for himself through Jacob (Abram -&amp;gt; Israel)&lt;/p&gt;&#xA;&lt;p&gt;A note about Yahweh&amp;rsquo;s character - he freely delegates to his creation (human&#xA;and divine) responsiblities as it pertains to ruling creation. No one forced&#xA;Yahweh to do this delegation, he has every right to rule as an authoritative&#xA;dictator since he is the creator of all things, but he partners with his&#xA;creation, even in their failures.&lt;/p&gt;&#xA;&lt;h3 id=&#34;failing-of-the-divine-council&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Failing of the Divine Council&lt;/span&gt; &lt;a href=&#34;#failing-of-the-divine-council&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Now to the spiritual gods over the nations, he says:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 82:2&lt;/p&gt;&#xA;&lt;p&gt;“How long will you judge unjustly  and show favoritism to the wicked? Selah&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;They were supposed to govern righteously&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 82:3-4&lt;/p&gt;&#xA;&lt;p&gt;3 Judge on behalf of the helpless and the orphan;  provide justice to the&#xA;afflicted and the poor.  4 Rescue the helpless and the needy;  deliver them&#xA;from the hand of the wicked.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;There are appropriate penalties for judgement. The duty was to protect the weak&#xA;and provide justice. The goal was for the vulnerable to be delievered from the&#xA;hands of the wicked.&lt;/p&gt;&#xA;&lt;p&gt;Bob summarizes with some modern language: crime prevention and crime&#xA;punishnment. These are the mechanisms by which the wicked are kept in check,&#xA;and it&amp;rsquo;s through no other means (re: the history of every civilization ever)&lt;/p&gt;&#xA;&lt;p&gt;Verse 5, the Psalmist continues and the &amp;ldquo;they&amp;rdquo; are the subordinates - the&#xA;people of the world placed under the ruling of the gods.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 82:5&lt;/p&gt;&#xA;&lt;p&gt;They do not know or consider.  They go about in the darkness,  so that all&#xA;the foundations of the earth are shaken.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;God is saying to his council, &amp;ldquo;They (the humans) do not know. They don&amp;rsquo;t know&#xA;how to rules or judge, look at them and you have ruled poorly, you have allowed&#xA;injustice to reign rather than rule and reign yourself and the victims in this&#xA;are the helpless humans and rest of creation&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;ie. the sons of God in the divine council are partly to blame for the people&amp;rsquo;s&#xA;moral ignorance. If the people aren&amp;rsquo;t ruled in a way that leads to morality,&#xA;corruption takes over. Because it has, the judgement of the divine council&#xA;comes next:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 82:6-7&lt;/p&gt;&#xA;&lt;p&gt;6 I have said, “You are gods,  and sons of the Most High, all of you.&#xA;7 However, you will die like men,  and you will fall like one of the princes.”&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;God&#39;s zeal for justice is clear&lt;/p&gt;&#xA;&lt;p&gt;He will judge his own council to death for their failures.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;fulfilling-of-the-divine-council&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Fulfilling of the Divine Council&lt;/span&gt; &lt;a href=&#34;#fulfilling-of-the-divine-council&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The fulfilment of the divine council is found in Jesus. Yahweh comes himself to govern rightly.&lt;/p&gt;&#xA;&lt;p&gt;The fulfilment happens at Jesus&amp;rsquo; Ascension - Matthew 28.&lt;/p&gt;&#xA;&lt;p&gt;The Ascension from Heaven&amp;rsquo;s perspective is in Daniel 7.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Daniel 7:13-14&lt;/p&gt;&#xA;&lt;p&gt;13 “I continued watching in the visions of the night, and look, with the&#xA;clouds of heaven one like a son of man was coming, and he came to the Ancient&#xA;of Days, and was presented before him. 14 And to him was given dominion and&#xA;glory and kingship that all the peoples, the nations, and languages would serve&#xA;him; his dominion is a dominion without end that will not cease, and his&#xA;kingdom is one that will not be destroyed.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Confirmed agin in Ephesians 1&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ephesians 1:20-23&lt;/p&gt;&#xA;&lt;p&gt;20 which he has worked in Christ, raising him from the dead and seating him&#xA;at his right hand in the heavenly places, 21 above all rule and authority and&#xA;power and lordship and every name named, not only in this age but also in the&#xA;coming one, 22 and he subjected all things under his feet and gave him as head&#xA;over all things to the church, 23 which is his body, the fullness of the one&#xA;who fills all things in every way.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Jesus&amp;rsquo; seat is &lt;code&gt;above all rule and authority and power and lordship and every name named&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Through Jesus we, believers, are &amp;lsquo;sons of God&amp;rsquo;. The Divine Council&amp;rsquo;s failure to&#xA;govern the nations well should be somewhat of a warning to us, and an&#xA;affirmation of our calling to rule the earth well. Those who love Jesus, in the&#xA;same way the 70 sons of God were &lt;strong&gt;supposed&lt;/strong&gt; to lead the nations back to the&#xA;Lord, are to be agents of rescue for the weak and the needy. Jesus gives us&#xA;this ministry.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sancity-of-life&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Sancity of Life&lt;/span&gt; &lt;a href=&#34;#sancity-of-life&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;No one is weaker than the unborn. The fallen sons of God were given a harsh&#xA;judgement for their failure to govern justly. Christians are the &amp;ldquo;new&amp;rdquo; sons of&#xA;God, we are the ones with the charge and authority to govern well. What do I do&#xA;with the authority and responsibility God has given me to protect the weak?&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;meditate on God&amp;rsquo;s zeal for justice&lt;/li&gt;&#xA;&lt;li&gt;do not forget the unborn in prayer (I need to pray more in general anyways)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FWBG - Genesis - 3.2</title>
    <id>https://pype.dev/fwbg-genesis-3-2/</id>
    <updated>2026-05-27T07:02:50Z</updated>
    <published>2026-05-27T07:02:50Z</published>
    <link href="https://pype.dev/fwbg-genesis-3-2/" rel="alternate" type="text/html"></link>
    <summary type="text">Eve was tempted by sin by litening to the great deceiver. But it wasn&#39;t just that she ** the serpent, she participated in the conversation, she entertained...</summary>
    <content type="html">&lt;h2 id=&#34;resist-temptation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Resist Temptation&lt;/span&gt; &lt;a href=&#34;#resist-temptation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Eve was tempted by sin by litening to the great deceiver. But it wasn&amp;rsquo;t just&#xA;that she &lt;strong&gt;heard&lt;/strong&gt; the serpent, she participated in the conversation, she&#xA;entertained the snake, and she meditated/directed her thoughts and eyes towards&#xA;the objects of desire and the serpent rather than her God.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The woman &lt;strong&gt;saw&lt;/strong&gt; that the tree was good for food and it was a delight to the&#xA;&lt;strong&gt;eyes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2 Corinthians 10:3-5&lt;/p&gt;&#xA;&lt;p&gt;3 For although we are living in the flesh, we do not wage war according to&#xA;the flesh, 4 for the weapons of our warfare are not merely human, but powerful&#xA;to God for the tearing down of fortresses, tearing down arguments 5 and all&#xA;pride that is raised up against the knowledge of God, and taking every thought&#xA;captive to the obedience of Christ.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The woman did not resist, she gave in. She entertained the thought of the&#xA;fruit, gazed at it with her eyes, and decided to listen to the serpent and&#xA;ultimately herself, rather than God&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Sin is a matter of the heart, of looking inward into our own experiences and&#xA;what we see with our own eyes, rather than what we heard from the Lord.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We will all see things with our eyes that are pleasing to us, and good for one thing or another.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Judges 21:25&lt;/p&gt;&#xA;&lt;p&gt;In those days there was no king in Israel; each one did what was right in&#xA;his own eyes.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Scariest Bible verse - &lt;strong&gt;everyone did what was right in his own eyes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Goodness comes from doing what&amp;rsquo;s right in God&amp;rsquo;s eyes, not our own&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-05-27 Notes</title>
    <id>https://pype.dev/2026-05-27-notes/</id>
    <updated>2026-05-27T07:00:17Z</updated>
    <published>2026-05-27T07:00:17Z</published>
    <link href="https://pype.dev/2026-05-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-05-22-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-05-22-notes]]&#xA;&#xA;- [[fwbg-genesis-3-2]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FWBG - Genesis - 1.2</title>
    <id>https://pype.dev/fwbg-genesis-1-2/</id>
    <updated>2026-05-24T07:05:23Z</updated>
    <published>2026-05-24T07:05:23Z</published>
    <link href="https://pype.dev/fwbg-genesis-1-2/" rel="alternate" type="text/html"></link>
    <summary type="text">&#34;Let there be...&#34; God&#39;s Word is the agency of creation</summary>
    <content type="html">&lt;h2 id=&#34;theological-implicationf-of-creation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Theological Implicationf of Creation&lt;/span&gt; &lt;a href=&#34;#theological-implicationf-of-creation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&amp;ldquo;Let there be&amp;hellip;&amp;rdquo; God&amp;rsquo;s Word is the agency of creation&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Jesus commanded Lazarus to come out of the grave&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 11:41–44&lt;/p&gt;&#xA;&lt;p&gt;41 So they took away the stone. And Jesus lifted up his eyes above and&#xA;said, “Father, I give thanks to you that you hear me. 42 And I know that you&#xA;always hear me, but for the sake of the crowd standing around I said it, so&#xA;that they may believe that you sent me.” 43 And when he had said these things,&#xA;he cried out with a loud voice, “Lazarus, come out!” 44 The one who had died&#xA;came out, his feet and his hands bound with strips of cloth, and his face&#xA;wrapped with a facecloth. Jesus said to them, “Untie him and let him go.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Jesus calmed the storm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Mark 4:35–40&lt;/p&gt;&#xA;&lt;p&gt;35 And on that day, when it was evening, he said to them, “Let us cross over to&#xA;the other side.” 36 And leaving the crowd, they took him along, as he was, in&#xA;the boat. And other boats were with him. 37 And a great storm of wind&#xA;developed, and the waves were breaking into the boat, so that the boat was&#xA;already being filled with water. 38 And he was in the stern sleeping on the&#xA;cushion, and they woke him up and said to him, “Teacher, is it not a concern to&#xA;you that we are perishing?” 39 And he woke up and rebuked the wind, and said to&#xA;the sea, “Be quiet! Be silent!” And the wind abated and there was a great calm.&#xA;40 And he said to them, “Why are you fearful? Do you not yet have faith?”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;God created - the implication is that creation belongs to him, and if he wishes then creation is accountable to him&lt;/li&gt;&#xA;&lt;li&gt;Man is in cluded in creation, Man is accountable to God, and Man has a way to God through Jesus&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>It Will Be Hard To Do More</title>
    <id>https://pype.dev/it-will-be-hard-to-do-more/</id>
    <updated>2026-05-22T06:23:20Z</updated>
    <published>2026-05-22T06:23:20Z</published>
    <link href="https://pype.dev/it-will-be-hard-to-do-more/" rel="alternate" type="text/html"></link>
    <summary type="text">Recently I was given a raise at work after I broached the subject with my manager. I wasn&#39;t sure what the outcome would be but I have learned two things in...</summary>
    <content type="html">&lt;p&gt;Recently I was given a raise at work after I broached the subject with my&#xA;manager. I wasn&amp;rsquo;t sure what the outcome would be but I have learned two things&#xA;in nearly a decade in corporate America:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;No one will fight for you harder than yourself&lt;/li&gt;&#xA;&lt;li&gt;The worst they can say is no&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;the-raise&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Raise&lt;/span&gt; &lt;a href=&#34;#the-raise&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So I talked with my manager about my workload and compensation, and to my&#xA;surprise he took me seriously. He went up the chain with some accomplishments&#xA;of the year that I wrote up for him (it&amp;rsquo;s his job to advocate for me, but it&amp;rsquo;s&#xA;certainly my job to give him the ammunition to take into battle). Before much&#xA;time had passed, a big wig put some time on my calendar. I had a good&#xA;relationship with my (then) manager, and even with the big wig, so there was&#xA;always some amount of personal connection amidst the money-talk.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-reorg&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Reorg&lt;/span&gt; &lt;a href=&#34;#the-reorg&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Cue a managerial change and reorganization of the team. The dust settled, and&#xA;my manager wasn&amp;rsquo;t my manager and the big wig wasn&amp;rsquo;t a big wig over my team&#xA;anymore. The details aren&amp;rsquo;t that relevant, but the outcome was that my &lt;em&gt;now&lt;/em&gt;&#xA;manager is someone I don&amp;rsquo;t know personally — back to square one of&#xA;professional-relationship-building.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-conversation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Conversation&lt;/span&gt; &lt;a href=&#34;#the-conversation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Due to the timing of it all, when my raise became official it was this new&#xA;manager who signed off on it. It was their happy-responsibility to have a quick&#xA;chat to tell me it was official. But that conversation was the most&#xA;awkward of the three.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does this raise of X% close the gap with the other competing opportunities&#xA;you mentioned to (previous manager)? Because it&amp;rsquo;ll be hard to do more than&#xA;this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;???&lt;/p&gt;&#xA;&lt;p&gt;Hard to do more?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I was taken aback initially. It felt almost threatening.&lt;/p&gt;&#xA;&lt;p&gt;I really wasn&amp;rsquo;t sure how to respond. I think I was grateful and cordial,&#xA;talked about how I really do believe in the mission of our work and I&amp;rsquo;m&#xA;thankful that I can receive a raise. This lady is nice but she doesn&amp;rsquo;t know&#xA;what my &amp;ldquo;other opportunities&amp;rdquo; are, so there&amp;rsquo;s no honest answer for me to give.&#xA;I wanted to be sarcastic, crack a joke about record profits, make light of her&#xA;describing me as a &amp;ldquo;critical player in enterprise deliverables,&amp;rdquo; but I&amp;rsquo;m not&#xA;trying to make enemies.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-reframe&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Reframe&lt;/span&gt; &lt;a href=&#34;#the-reframe&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So I called a friend to vent, of course, and he gave me some good advice.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It was a threat.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But not in the way I took it at first. My friend has been at the same company&#xA;longer than me, and he expounded on her words: &amp;ldquo;it will be hard to do more.&amp;rdquo;&#xA;I felt like she was annoyed with me for fighting for a raise, but my friend&#xA;said she was probably just trying to give me a realistic view of my position&#xA;in the company. &amp;ldquo;It will be hard to do more&amp;rdquo; means there are processes in&#xA;place at such a large enterprise. Rewarding start-up-like behavior and&#xA;contribution just isn&amp;rsquo;t well-supported. It&amp;rsquo;s much easier to let someone quit&#xA;who&amp;rsquo;s been with the company a decade and replace them for 20% more than it is&#xA;to just pay them 20% more. If someone (like me) isn&amp;rsquo;t satisfied, that&amp;rsquo;s not the&#xA;only thing in the conversation - time at the company, time in position, time&#xA;under specific manager, etc. all are hurdles to more compensation, and I&amp;rsquo;m&#xA;referring to salary anyways, equity feels like it&amp;rsquo;s out of my grasp. But if I&amp;rsquo;m&#xA;gone and market conditions dictate that my position and responsibilities are&#xA;worth 20% more than what I was being paid, that&amp;rsquo;s what the position will be&#xA;posted at. My previous manager and the big wig were the types to say&#xA;policy-be-damned when it would get in the way - it might be how I got this&#xA;raise in the first place. But no shade to my new manager, they&amp;rsquo;re just doing their job.&lt;/p&gt;&#xA;&lt;p&gt;In the end, they were just being honest, and I should appreciate that.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-05-22 Notes</title>
    <id>https://pype.dev/2026-05-22-notes/</id>
    <updated>2026-05-22T06:22:57Z</updated>
    <published>2026-05-22T06:22:57Z</published>
    <link href="https://pype.dev/2026-05-22-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-05-13-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-05-13-notes]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FWBG - Genesis - 1.1</title>
    <id>https://pype.dev/fwbg-genesis-1-1/</id>
    <updated>2026-05-17T07:26:23Z</updated>
    <published>2026-05-17T07:26:23Z</published>
    <link href="https://pype.dev/fwbg-genesis-1-1/" rel="alternate" type="text/html"></link>
    <summary type="text">The stars are the work of God&#39;s fingers:</summary>
    <content type="html">&lt;p&gt;The stars are the work of God&amp;rsquo;s fingers:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 8:3&lt;/p&gt;&#xA;&lt;p&gt;When I look at your heavens, the work of your fingers,  the moon and the stars which you set in place—&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;But salvation is the work of his right hand:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 98:1&lt;/p&gt;&#xA;&lt;p&gt;Sing to Yahweh a new song, for he has done wonders.  His right hand and his holy arm have secured his victory.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;In Genesis 1, God created the Heavens and the earth. He brings &lt;code&gt;order to chaos&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-can-we-bring-order-to-chaos&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;How can we bring order to chaos?&lt;/span&gt; &lt;a href=&#34;#how-can-we-bring-order-to-chaos&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cleaning the playroom&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-can-we-rest&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;How can we rest?&lt;/span&gt; &lt;a href=&#34;#how-can-we-rest&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;enjoy the creation God has given us&lt;/li&gt;&#xA;&lt;li&gt;rejoice in salvation, rejoicing brings refreshment to the soul&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Panicking Led to Losing My Desktop</title>
    <id>https://pype.dev/panicking-led-to-losing-my-desktop/</id>
    <updated>2026-05-13T08:24:00Z</updated>
    <published>2026-05-13T08:24:00Z</published>
    <link href="https://pype.dev/panicking-led-to-losing-my-desktop/" rel="alternate" type="text/html"></link>
    <summary type="text">I thought I had backups handled... can you imagine how the rest of this post is going to go with that intro?</summary>
    <content type="text">&#xA;## False Sense of Security&#xA;&#xA;I thought I had backups handled... can you imagine how the rest of this post is&#xA;going to go with that intro?&#xA;&#xA;To be fair, I do have backups figured out on my NAS - simple ZFS +&#xA;sanoid/syncoid + replica pool + off-site backup with simple restore pathways.&#xA;However, my desktop has been another story entirely. My desktop OS didn&#39;t&#xA;support ZFS when I started checking it out, and I spent weeks thinking through&#xA;how I would backup my HOME directory and projects mostly. I landed on a&#xA;solution that I did validate once, but it fell off my radar and lo&#39; and behold&#xA;that was problematic...&#xA;&#xA;So that backup was based on restic for my home directory, but it was lazy. I&#xA;verified it one time but I had built it with ai, thought I understood the&#xA;restic repo part, and then promptly moved on with my life never buttoning it&#xA;all up. That home directory backup got too big for where I was going to end up&#xA;restoring it. My desktop system was installed on a 4 TB NVMe drive and due to&#xA;the circumstances spawning this blog post I was gonna have to drop to a 500 GB&#xA;boot drive with some extra disks as the storage layer. Overall it looked like:&#xA;&#xA;- A 4 TB SSD that was going bad - old OS&#xA;- A 500 GB SSD, that was going to be my new operating system boot disk&#xA;- A 2 TB SSD that was originally going to be this external storage volume&#xA;  anyways but I never set it up because the version of Aurora I was running&#xA;  didn&#39;t have ZFS, I was married to the idea of using ZFS, so I never ended up&#xA;  taking advantage of the space. However it was moot to me because my boot drive&#xA;  was 4 TB, high quality drive, so I was &#34;just sure&#34; I didn&#39;t need it.&#xA;- AND a 4 TB rust disk as well, which was already a ZFS pool, left over from a&#xA;  previous desktop configuration, and admittedly I had forgotten it was even in the system.&#xA;&#xA;## The Storm&#xA;&#xA;If it wasn&#39;t clear the problem is that my super-nice high-speed 4TB NVMe drive&#xA;was going bad, like really bad. Eventually my OS stopped booting, it was even&#xA;difficult to live-boot from any other ISO due to, I think ultimately, that disk&#xA;causing such extreme latency in the start-up processes that they just failed.&#xA;So I quickly found myself with little-to-no access to my primary desktop&#39;s&#xA;data...&#xA;&#xA;## Where It Went Wrong&#xA;&#xA;What I did is I live booted into an Ubuntu server environment (which took blood&#xA;sweat and tears to successfully get into), mounted my home directory from the 4 TB SSD, and&#xA;tried to continue my restic backup to my NAS, like an idiot. But at the same&#xA;time I also tried to prune it by only backing up a few projects because I&#xA;was getting worried about time. This was the first primary mistake - trying to&#xA;muck with my backup script under duress.&#xA;&#xA;Then over the course of the whole thing it ended up taking over a week to solve&#xA;this when it could&#39;ve been 2-3 days. So say it with me kids - &#34;Don&#39;t make&#xA;decisions under duress&#34;&#xA;&#xA;## Climbing Out&#xA;&#xA;I downloaded opencode and had it help me write the right excludes syntax in my&#xA;restic backup script and got it back up going. That went ok but opencode agents&#xA;had no historical context for why anything was the way it was, and frankly an&#xA;agent would&#39;ve been misled thinking the backup solution was much more solid&#xA;than it was due to how I documented it.&#xA;&#xA;Agents also miss things... in my chat sessions it knew about the other 2&#xA;available disks on the desktop system, I could have done a fresh backup to the 4 TB&#xA;spinning rust disk no problem: install zfs, mount the pool, change target of&#xA;restic, run full... that would&#39;ve been beautifully simple. But instead I&#xA;trimmed it down and backed not-everything up to the NAS over the network, and&#xA;to a different backup target nonetheless... SMH.&#xA;&#xA;As I started to consider which OS I was going to go with next I failed to&#xA;install Pop_OS! or Ubuntu onto the new disc... Then I tried Omarchy and the&#xA;install script just looped. So, I reinstalled Aurora onto the new 500 GB disk&#xA;and then quickly realized I don&#39;t have Firefox tabs, my SSH keys are in that&#xA;restic backup, my ssh config, api keys in hidden files.... Everything is in&#xA;that restic backup... The backup that&#39;s too big to restore to my new boot drive.&#xA;&#xA;But you know what I have? That 2 terabyte disk mounted just fine as a&#xA;ZFS dataset. And I could mount the 4 TB rust disk with zfs as well because this&#xA;version of Aurora has zfs working flawlessly!&#xA;&#xA;## Hindsight&#xA;&#xA;What I should&#39;ve done is so simple... While in that ubuntu live environment I&#xA;should&#39;ve just either updated restic to be a local backup to the 4 TB rust&#xA;disk, or rsync&#39;d my home directory to it plain and simple... I got all in my&#xA;head about not backing up python venvs, node_modules, etc. that I didn&#39;t think&#xA;to just basically carbon copy it all to a healthy disk and then prune it later.&#xA;Then I could&#39;ve synced everything back over that I needed to the new Desktop&#39;s&#xA;$HOME and then scheduled the rsync or restic again to that locally mounted disk.&#xA;&#xA;## The Detail I Left Out&#xA;&#xA;The keen reader might stop to think... why not just mount the old 4TB disk and&#xA;copy what you need to your new desktop? And that&#39;s a prudent question...&#xA;However, in order to get anything installed I had to physically remove the 4TB&#xA;SSD from the motherboard, which was basically a full PC tear-down. From there I&#xA;was able to at least boot in and out of iso&#39;s like you&#39;d otherwise expect, and&#xA;I have a USB/NVMe adapter so I planned to mount the old drive and copy things over from&#xA;there... But sadly... it won&#39;t mount. it&#39;s dead-dead and it appears that&#xA;anything I didn&#39;t save in my days-long-panicked-state is just. gone.&#xA;&#xA;I feel pretty stupid to have not taken advantage of the 2 available disks local&#xA;to the machine, to have naively copied stuff over and dealt with the&#xA;organization later once my OS was back up. I tried to be smart and efficient&#xA;and ended up wasting so much time and losing quite a lot of &#34;stuff&#34;... ideas,&#xA;blog posts that I never committed, etc.&#xA;&#xA;## Current Status&#xA;&#xA;So a few lessons...&#xA;&#xA;1. untested backups are not backups&#xA;2. false backups might be worse than none, although I did at least save a few things so maybe the jury is out here&#xA;3. making decisions while stressed out will lead to missing obviously better pathways... slow down, talk it out&#xA;&#xA;As for my current status - I&#39;m working on [[desktop-setup-2026]] and recovering what I can from my haphazard&#39;d rsyncs in the live ubuntu env I got into. I&#39;m also setting up a new Linux laptop at work at the same time so maybe I&#39;ll hve some workflow changes to write about in the future. For now, it&#39;s nice to be forced to accept that not every idea was that important, the good stuff will come back around, and ultimately computers and shit are just things, they&#39;re not life.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Psalm 30:5</title>
    <id>https://pype.dev/reflection-psalm-30-5/</id>
    <updated>2026-05-13T08:11:22Z</updated>
    <published>2026-05-13T08:11:22Z</published>
    <link href="https://pype.dev/reflection-psalm-30-5/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Psalm 30:5&#34;</summary>
    <content type="html">&lt;h2 id=&#34;meditation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meditation&lt;/span&gt; &lt;a href=&#34;#meditation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 30:5&lt;/p&gt;&#xA;&lt;p&gt;For there is a moment in his anger;  there is a lifetime in his favor.  Weeping lodges for the evening,  but in the morning comes rejoicing.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not sure how to feel about the thoughts in my head over this verse and&#xA;meditation this morning, only because I am so tempted to read my present-life&#xA;situation into it. Lately work has been the worst, I&amp;rsquo;ve written a few notes&#xA;about it and I&amp;rsquo;m not even sure what I&amp;rsquo;ve published on my own blog over the last&#xA;couple months because my brain has been in such chaos. Well, a few things&#xA;changed in regards to leadership, goals, etc. and the anxiety-inducing&#xA;situation I was thrust into I was kind of thrust out of. Now, there&amp;rsquo;s some&#xA;lingering work and support but the weight that was lifted from my shoulder the&#xA;other day, and the further relief I actually expect to feel as the corporate&#xA;roadmaps get serialized into dozens of PowerPoint presentations to be lost in&#xA;Outlook mailboxes, is very timely with the notion that &amp;ldquo;joy comes in the morning&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;I found myself wishing for joy the other day&amp;hellip; I was watching a YouTube video&#xA;and the clip used the phrase &amp;ldquo;operationalize joy&amp;rdquo;. It was a guy talking about&#xA;how he tries to live each day doing what makes him happy - overall nothing too&#xA;sinister. However, the step I took for a few minutes in my head was a step in&#xA;the direction of trying to maximize joy in my life, rather than trying to&#xA;maximize Jesus - the one who gives the joy. By God&amp;rsquo;s grace conviction seized my&#xA;heart, and frankly I&amp;rsquo;m still not sure what to do day-to-day as I wrestle with&#xA;my own &amp;ldquo;stuff&amp;rdquo; but the objective truth that our reality is fundamentally held&#xA;together by is simply Jesus Christ. Jesus loves me, joy does come in the&#xA;morning, and this Psalm wasn&amp;rsquo;t written to me about my work situation in 2026,&#xA;but God&amp;rsquo;s peace is given to his people through his everlasting word. Praise the&#xA;Lord for the Word this morning, for encouragement, for relief both&#xA;temporary/today and eternal/tomorrow. By God&amp;rsquo;s grace alone does weeping spend&#xA;the night, but his gracious joy comes with the morning.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Blog and LLM Knowledge Base</title>
    <id>https://pype.dev/blog-and-llm-knowledge-base/</id>
    <updated>2026-05-13T06:23:42Z</updated>
    <published>2026-05-13T06:23:42Z</published>
    <link href="https://pype.dev/blog-and-llm-knowledge-base/" rel="alternate" type="text/html"></link>
    <summary type="text">Thinking about this tweet from Andrej Karpathy about LLM knowledge bases. I maintain a blog like this one at work, which is fairly well structured markdown...</summary>
    <content type="html">&lt;h2 id=&#34;dev&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Dev&lt;/span&gt; &lt;a href=&#34;#dev&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Thinking about &lt;a href=&#34;https://x.com/i/status/2039805659525644595&#34;&gt;this tweet from Andrej Karpathy&lt;/a&gt; about LLM knowledge bases. I maintain a blog like this one at work, which is fairly well structured markdown files and I use markdown lsp for linking docs conceptually. It makes it easy for me to trace thoughts and search what I&amp;rsquo;ve written about. However I find that there&amp;rsquo;s a limit to what I am able to organize by myself&amp;hellip; The hardest part of of a zettlekasten to me is breaking down a thought into the smallest most atomic unit so that I don&amp;rsquo;t end up duplicating thoughts in files and lose the real traceability. In my head I think there&amp;rsquo;s a mathematical way to solve this, some kine of embedding setup that&amp;rsquo;s beyond my actual comprehension. But I think I&amp;rsquo;m overlookking that agents are probably just good enough with raw markdown, at the scale that I keep notes, that I should start to move in the direction, at least at work, of making my working notse blog repo more agentically friendly: AGENTS.md file, using an agent with its own dumping ground for files, some pruning sessions, and maybe a simple chat interface where I open an agent with a skill for using myrepo as a knowledge base and see if that gives me any super powers for organization or problem solving.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;&lt;code&gt;LLM Knowledge Bases&#xA;&#xA;Something I&#39;m finding very useful recently: using LLMs to build personal knowledge bases for various topics of research interest. In this way, a large fraction of my recent token throughput is going less into manipulating code, and more into manipulating knowledge (stored as markdown and images). The latest LLMs are quite good at it. So:&#xA;&#xA;Data ingest:&#xA;I index source documents (articles, papers, repos, datasets, images, etc.) into a raw/ directory, then I use an LLM to incrementally &amp;quot;compile&amp;quot; a wiki, which is just a collection of .md files in a directory structure. The wiki includes summaries of all the data in raw/, backlinks, and then it categorizes data into concepts, writes articles for them, and links them all. To convert web articles into .md files I like to use the Obsidian Web Clipper extension, and then I also use a hotkey to download all the related images to local so that my LLM can easily reference them.&#xA;&#xA;IDE:&#xA;I use Obsidian as the IDE &amp;quot;frontend&amp;quot; where I can view the raw data, the the compiled wiki, and the derived visualizations. Important to note that the LLM writes and maintains all of the data of the wiki, I rarely touch it directly. I&#39;ve played with a few Obsidian plugins to render and view data in other ways (e.g. Marp for slides).&#xA;&#xA;Q&amp;amp;A:&#xA;Where things get interesting is that once your wiki is big enough (e.g. mine on some recent research is ~100 articles and ~400K words), you can ask your LLM agent all kinds of complex questions against the wiki, and it will go off, research the answers, etc. I thought I had to reach for fancy RAG, but the LLM has been pretty good about auto-maintaining index files and brief summaries of all the documents and it reads all the important related data fairly easily at this ~small scale.&#xA;&#xA;Output:&#xA;Instead of getting answers in text/terminal, I like to have it render markdown files for me, or slide shows (Marp format), or matplotlib images, all of which I then view again in Obsidian. You can imagine many other visual output formats depending on the query. Often, I end up &amp;quot;filing&amp;quot; the outputs back into the wiki to enhance it for further queries. So my own explorations and queries always &amp;quot;add up&amp;quot; in the knowledge base.&#xA;&#xA;Linting:&#xA;I&#39;ve run some LLM &amp;quot;health checks&amp;quot; over the wiki to e.g. find inconsistent data, impute missing data (with web searchers), find interesting connections for new article candidates, etc., to incrementally clean up the wiki and enhance its overall data integrity. The LLMs are quite good at suggesting further questions to ask and look into.&#xA;&#xA;Extra tools:&#xA;I find myself developing additional tools to process the data, e.g. I vibe coded a small and naive search engine over the wiki, which I both use directly (in a web ui), but more often I want to hand it off to an LLM via CLI as a tool for larger queries.&#xA;&#xA;Further explorations:&#xA;As the repo grows, the natural desire is to also think about synthetic data generation + finetuning to have your LLM &amp;quot;know&amp;quot; the data in its weights instead of just context windows.&#xA;&#xA;TLDR: raw data from a given number of sources is collected, then compiled by an LLM into a .md wiki, then operated on by various CLIs by the LLM to do Q&amp;amp;A and to incrementally enhance the wiki, and all of it viewable in Obsidian. You rarely ever write or edit the wiki manually, it&#39;s the domain of the LLM. I think there is room here for an incredible new product instead of a hacky collection of scripts.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - John 14:21</title>
    <id>https://pype.dev/reflection-john-14-21/</id>
    <updated>2026-05-13T06:22:40Z</updated>
    <published>2026-05-13T06:22:40Z</published>
    <link href="https://pype.dev/reflection-john-14-21/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;John 14:21&#34;</summary>
    <content type="html">&lt;h2 id=&#34;meditation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meditation&lt;/span&gt; &lt;a href=&#34;#meditation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 14:21&lt;/p&gt;&#xA;&lt;p&gt;The one who has my commandments and keeps them—that one is the one who loves me. And the one who loves me will be loved by my Father, and I will love him and will reveal myself to him.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The Lord reveals himself&amp;hellip; it&amp;rsquo;s not more complicated than that. I&amp;rsquo;ve spent years in apologetics (defending the faith), learning and regurgitating argument after logical argument for God&amp;rsquo;s existence, historical defense for the resurrection of Jesus, etc. I think Christianity is objectively difficult to reject with all the data in front of you. At the same time, Jesus and the Bible are clear that God&amp;rsquo;s wisdom is folly to man, and no man can understand without being born again (John 10:6). So, I think there&amp;rsquo;s real biblical wisdom and truth that says the opposite of what I think about the evidence for Jesus as Lord. That&amp;rsquo;s OK, because I my thoughts are for and about myself, I am born again and the story, at least the story of my salvation, is clear to me, by God&amp;rsquo;s grace. It&amp;rsquo;s through that studying and those experiences that he has revealed himself to me. I know of others who never read the Bible but Jesus came to them in a dream - perhaps this is even more compelling than historical data&amp;hellip; Jesus reveals himself to his own people in a way that reveals salvation to each of them/us. The Father gives his inheritance to Jesus (us, believers) and none will be lost. Praise God for saving me, and praise the Lord for all the different mechanisms by which he ushers his people unto himself, through the only door to heaven (John 10).&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-05-13 Notes</title>
    <id>https://pype.dev/2026-05-13-notes/</id>
    <updated>2026-05-13T05:58:54Z</updated>
    <published>2026-05-13T05:58:54Z</published>
    <link href="https://pype.dev/2026-05-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-05-12-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-05-12-notes]]&#xA;&#xA;- [[reflection-psalm-305]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-05-12 Notes</title>
    <id>https://pype.dev/2026-05-12-notes/</id>
    <updated>2026-05-12T06:10:54Z</updated>
    <published>2026-05-12T06:10:54Z</published>
    <link href="https://pype.dev/2026-05-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-05-08-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-05-08-notes]]&#xA;&#xA;- [[reflection-john-1421]]&#xA;&#xA;- [[blog-and-llm-knowledge-base]]&#xA;&#xA;## Wins&#xA;&#xA;- making progress in [[dataops]]&#xA;  - zfs setup for projects and what I had been building is moved over&#xA;  - now I can recover the rest&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Relief of Earning</title>
    <id>https://pype.dev/the-relief-of-earning/</id>
    <updated>2026-05-08T05:43:39Z</updated>
    <published>2026-05-08T05:43:39Z</published>
    <link href="https://pype.dev/the-relief-of-earning/" rel="alternate" type="text/html"></link>
    <summary type="text">Work has been crazy for months, and I haven&#39;t written too much about it, a few notes here and there but nothing substantial. The craziness is sourced in a...</summary>
    <content type="html">&lt;h2 id=&#34;the-setup&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Setup&lt;/span&gt; &lt;a href=&#34;#the-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Work has been crazy for months, and I haven&amp;rsquo;t written too much about it, a few&#xA;notes here and there but nothing substantial. The craziness is sourced in a&#xA;pretty cliched-scenario where we have lofty goals and important things to build&#xA;but the foundation on which we are building, like architectural decisions, is&#xA;basically wet sand. So as I&amp;rsquo;ve been trying to find my footing in the mud I feel&#xA;like I end up spinning my wheels moreso than making any progress. The chaos led&#xA;me eventually to approach my manager about my compensation - I make a nice&#xA;living but for the stress I&amp;rsquo;d been feeling I could certainly go make more. My&#xA;manager successfully fought for me up the chain and I was given a slightly bigger&#xA;carrot, but that&amp;rsquo;s not the point of this post. I started to feel even more&#xA;anxiety after I was told about the raise because, just like with AI and agentic&#xA;coding, now I was sure the expectations would be even higher. I didn&amp;rsquo;t think&#xA;anything would actually come from me asking my boss about a raise, but now that&#xA;it did I was afraid the ceiling of expectations was just going up up up.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-carrot-and-the-anxiety&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Carrot and the Anxiety&lt;/span&gt; &lt;a href=&#34;#the-carrot-and-the-anxiety&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;That&amp;rsquo;s where the relief of earning comes in&amp;hellip; I mentioned this to my project&#xA;manager, and we have candid conversations regularly, and he told me something&#xA;that I think some people might have been offended by but I was genuinely&#xA;relieved to hear it. He said he&amp;rsquo;s glad I got a raise, and that he told our boss&#xA;to &lt;em&gt;not&lt;/em&gt; really pursue it for me until I had actually delivered something. So even&#xA;though I feel like I&amp;rsquo;m spinning my wheels a lot, my direct leadership sees real&#xA;value - and the relief is that I can rest in confirmation that the carrot is a&#xA;response to work I already did, not a quiet elevation of expectations.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-05-08 Notes</title>
    <id>https://pype.dev/2026-05-08-notes/</id>
    <updated>2026-05-08T05:31:46Z</updated>
    <published>2026-05-08T05:31:46Z</published>
    <link href="https://pype.dev/2026-05-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-05-04-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-05-04-notes]]&#xA;&#xA;- [[the-relief-of-earning]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-05-04 Notes</title>
    <id>https://pype.dev/2026-05-04-notes/</id>
    <updated>2026-05-04T07:48:48Z</updated>
    <published>2026-05-04T07:48:48Z</published>
    <link href="https://pype.dev/2026-05-04-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-30-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-04-30-notes]]&#xA;&#xA;- [[reflection-john-16-33]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - John 16:33</title>
    <id>https://pype.dev/reflection-john-16-33/</id>
    <updated>2026-05-03T07:43:54Z</updated>
    <published>2026-05-03T07:43:54Z</published>
    <link href="https://pype.dev/reflection-john-16-33/" rel="alternate" type="text/html"></link>
    <summary type="text">related: advent-john-16-33</summary>
    <content type="text">&#xA;related: [[advent-john-16-33]]&#xA;&#xA;I re-read my advent reflection and by God&#39;s grace I was in a different frame of&#xA;mind then. The loss of mindset is certainly on me and me alone for letting&#xA;things of the world crush me so much lately. The affliction Jesus mentions in&#xA;John I don&#39;t think is the affliction I currently feel over work and chaotic&#xA;circumstances. It feels so silly to even put my stupid computer job in the same&#xA;thought as Jesus talking about his victory over the grave but at the same time&#xA;perhaps there&#39;s pastoral wisdom to challenge _that_ thought... why isn&#39;t the&#xA;stress and anxiety I feel over anything in my life _exactly_ what Jesus is&#xA;referring to?&#xA;&#xA;Sure, the immediate context is his crucifixion and Peter&#39;s denial of him. But&#xA;as I drop my thoughts into this magic computer box, what&#39;s so different about&#xA;me? Right now the thing that I can&#39;t get away from is work, and it&#39;s not even a&#xA;volume thing it&#39;s just a constant stressful unknown - I could list off all the&#xA;reasons but do they matter? I think they matter in-so-far as I am dealing with&#xA;them, but ultimately work is just a job and even in light of doing objectively&#xA;good things for the world nothing is so good as what Jesus has done for me. So&#xA;the specifics of the stress of my work just cannot be the thing to focus on -&#xA;every moment that I&#39;m more torn up about lack of requirements, or a deadline,&#xA;or something I don&#39;t understand is a moment where I&#39;m giving up myself to&#xA;another master and that is nothing but idolotry... I do not worship my work, I&#xA;don&#39;t ascribe a ton of worth to the things I do for Caterpillar, but I&#xA;certainly give myself over to constant fretting over it, and I struggle to do&#xA;some of my work in a meaningful way. Honestly, the affliction in my life today&#xA;feels very self-inflicted and if I can make the choice to give myself over to&#xA;the stress of my job, in a reality where Jesus has saved me from everything,&#xA;why do I not make the choice to give myself over to him? He has made it so&#xA;clear that victory over the world is his and his to give and share with his&#xA;people.&#xA;&#xA;This post is almost just a hope that Jesus guides my thoughts into this digital&#xA;paper for my own benefit, for my own affirmation of his victory of the world,&#xA;and that the stress of my job is included in the world he&#39;s victorious over.&#xA;&#xA;I find that in seasons of my life where there isn&#39;t a super active regular&#xA;consistent ball of stress sitting in my chest, that it&#39;s easy to think about&#xA;when I used to be stressed and to say &#34;praise God for bringing me through that&#34;&#xA;or to look back on it with perspective and think &#34;it wasn&#39;t so bad as I thought&#xA;and Jesus sustained me&#34;... and no doubt about it, Jesus is the only one&#xA;sustaining me now, but if I ever come back to this post let me not undersell&#xA;the anxiety I&#39;ve felt plaguing me. And in not-underselling it may Jesus&#39;&#xA;victory be even greater in my heart, and when the Day Of The Lord arrives, I&#xA;pray it&#39;s at that moment I can echo Paul and say that every trial pales in&#xA;comparison to the glory of my king. Because on earth today, I want to recognize&#xA;that truth, but I&#39;d be lying if I said the anxiety in my chest pales in&#xA;comparison to anything I have experienced - it feels very real, very heavy,&#xA;very authoritative. And in this moment what I have is trust, by God&#39;s grace -&#xA;faith, in Jesus&#39; victory, but this is a conscious affirmation, it&#39;s not one I&#xA;feel escaping from me but rather one I am forcing myself out into the open out&#xA;of respect for the objective reality that is bigger than me. I know in my head&#xA;that Jesus is victorious, and I know he has kept and will keep my heart. Today&#xA;though I feel the internal battle over it, a war within, and I need Jesus to&#xA;help me make the right choices today and not just look forward to being on the&#xA;other side of a hard time later.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>reflection - Jeremiah 17:17</title>
    <id>https://pype.dev/reflection-jeremiah-17-17/</id>
    <updated>2026-04-30T08:12:36Z</updated>
    <published>2026-04-30T08:12:36Z</published>
    <link href="https://pype.dev/reflection-jeremiah-17-17/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Jeremiah 17:17&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Jeremiah 17:17&lt;/p&gt;&#xA;&lt;p&gt;You must not become to me a terror,  you are my refuge in the day of disaster.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Spurgeon&amp;rsquo;s reflection on this verse this morning hits hard&amp;hellip;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The path of the Christian is not always bright with sunshine; he has his seasons of darkness and of storm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;My whole life has not been easy, my story has ups and downs like anyone&amp;rsquo;s. God&#xA;has been faithful to me, to bring me through trial - both when I feel and&#xA;believe I am undergoing it, and before I knew what trial was but nonetheless&#xA;was in an imperfect situation. For several years it was too easy for me say&#xA;&amp;ldquo;blessed be the name of the Lord&amp;rdquo;. Even today, it should be too easy, but I&#xA;feel the sunshine has been missing for some time, weeks or months. In this&#xA;season I&amp;rsquo;ve been bogged down, mostly with work. That bleeds into family stuff,&#xA;the stress and chaos of my job makes it easy to be impatient with my kids. In&#xA;that moment of impatience, God is good to remind me of how patient he is with&#xA;me, but that doesn&amp;rsquo;t fix my parenting&amp;hellip; It opens the door to internal tension&#xA;because on the one-hand I&amp;rsquo;m drawn to worship Jesus for his grace unto me, and&#xA;on the other hand I&amp;rsquo;m actively in a moment witholding grace from my own kids.&#xA;It&amp;rsquo;s certainly not fair to them that the storms of my life affect them, and I&amp;rsquo;m&#xA;sure the solution isn&amp;rsquo;t to never weather a storm, but to more immediately run&#xA;to the Lord myself in the midst of it&amp;hellip; something I&amp;rsquo;ve not been doing - as&#xA;evidenced by a lack of reflections in the last couple months.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The best of God’s saints must drink the wormwood; the dearest of his children must bear the cross. No Christian has enjoyed perpetual prosperity; no believer can always keep his harp from the willows.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No believer can always keep his harp from the willows&amp;hellip; I often find myself&#xA;daydreaming about 1 decision or 1 stroke of luck, that would allow me to &amp;ldquo;keep&#xA;my harp from the willows&amp;rdquo; but in writing this out I realize this is plain&#xA;idolotry. The Lord has said I will experience trial in my life, so why would I&#xA;fantasize about escaping it forever? Why feed my own starving soul a lie when&#xA;the giver of life and truth has told me otherwise. Not only otherwise, but he&amp;rsquo;s&#xA;given me a promise that the troubles of this age are ephemeral concerns, and&#xA;the ultimate glory is him alone.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We need winds and tempests to exercise our faith, to tear off the rotten bough of self-dependence, and to root us more firmly in Christ. The day of evil reveals to us the value of our glorious hope.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It&amp;rsquo;s felt quite windy&amp;hellip; But by comparison to others, even others I know&#xA;closely, what appears like a raging storm in my life is a mildly windy day in&#xA;theirs. Perspective is a helpful tool but the ultimate perspective comes from&#xA;the Love of my Lord. When I am unfaithful, when I wallow, when I&amp;rsquo;m so far in my&#xA;own head I don&amp;rsquo;t know up from down, he is patient with me&amp;hellip; I am longing for a&#xA;season of life God allowed me to enjoy, and perhaps that season will return. In&#xA;the winter I feel like I&amp;rsquo;m in right now, I pray it&amp;rsquo;s not wasted and that&#xA;day-by-day, with his power enabling me to even just reflect on thoughts like&#xA;this, I pray my own focus turns to the season-maker and not the season itself.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-30 Notes</title>
    <id>https://pype.dev/2026-04-30-notes/</id>
    <updated>2026-04-30T06:32:15Z</updated>
    <published>2026-04-30T06:32:15Z</published>
    <link href="https://pype.dev/2026-04-30-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-27-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-04-27-notes]]&#xA;&#xA;- [[reflection-jeremiah-17-17]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-27 Notes</title>
    <id>https://pype.dev/2026-04-27-notes/</id>
    <updated>2026-04-27T09:25:43Z</updated>
    <published>2026-04-27T09:25:43Z</published>
    <link href="https://pype.dev/2026-04-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-26-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-04-26-notes]]&#xA;&#xA;## Wins&#xA;&#xA;- updated Nextcloud from 30.x to 32.x today&#xA;  - NOTE: after every upgrade, go to /settings/admin/overview and perform any of the `occ` commands in the nextcloud container that it says are relevant. Typically these are DB updates and are relatively easy to run. It&#39;s fine to run them in the container because they typically affect the DB, not the container state itself, the nextcloud container is just the runtime&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-26 Notes</title>
    <id>https://pype.dev/2026-04-26-notes/</id>
    <updated>2026-04-26T07:09:22Z</updated>
    <published>2026-04-26T07:09:22Z</published>
    <link href="https://pype.dev/2026-04-26-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-25-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2026-04-25-notes ]]&#xA;&#xA;&#xA;- [[logos-webapp-dark-theme]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Logos Webapp Dark Theme</title>
    <id>https://pype.dev/logos-webapp-dark-theme/</id>
    <updated>2026-04-26T07:08:15Z</updated>
    <published>2026-04-26T07:08:15Z</published>
    <link href="https://pype.dev/logos-webapp-dark-theme/" rel="alternate" type="text/html"></link>
    <summary type="text">stylus-for-custom-webpage-themes</summary>
    <content type="text">&#xA;[[stylus-for-custom-webpage-themes]]&#xA;&#xA;1. install [stylus](https://addons.mozilla.org/en-US/firefox/addon/styl-us/)&#xA;2. get [logos theme](moz-extension://74e88bf4-4a5e-47ba-b9bc-ba202907c4db/install-usercss.html?updateUrl=https%3A%2F%2Fuserstyles.world%2Fapi%2Fstyle%2F18547.user.css)&#xA;3. go to https://app.logos.com and profit&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>KDE Shortcuts for Desktop and Window Navigation</title>
    <id>https://pype.dev/kde-shortcuts-for-desktop-and-window-navigation/</id>
    <updated>2026-04-25T13:44:48Z</updated>
    <published>2026-04-25T13:44:48Z</published>
    <link href="https://pype.dev/kde-shortcuts-for-desktop-and-window-navigation/" rel="alternate" type="text/html"></link>
    <summary type="text">This isn&#39;t my entire /home/nic/.config/kglobalshortcutsrc, just the sections that I customized as I&#39;m setting up my desktop from the great...</summary>
    <content type="text">&#xA;&#xA;This isn&#39;t my entire /home/nic/.config/kglobalshortcutsrc, just the sections that I customized as I&#39;m setting up my desktop from the great [[desktop-crash-2026]]. Putting here to find on the web, will also be updating dotfiles&#xA;&#xA;```&#xA;Switch to Desktop 1=Meta+1,Meta+F1\tCtrl+F1,Switch to Desktop 1&#xA;Switch to Desktop 2=Meta+2,Meta+F2\tCtrl+F2,Switch to Desktop 2&#xA;Switch to Desktop 3=Meta+3,Meta+F3\tCtrl+F3,Switch to Desktop 3&#xA;Switch to Desktop 4=Meta+4,Meta+F4\tCtrl+F4,Switch to Desktop 4&#xA;Switch to Desktop 5=Meta+5,,Switch to Desktop 5&#xA;Switch to Desktop 6=Meta+6,,Switch to Desktop 6&#xA;Switch to Desktop 7=Meta+7,,Switch to Desktop 7&#xA;Switch to Desktop 8=Meta+8,,Switch to Desktop 8&#xA;Switch to Desktop 9=Meta+9,,Switch to Desktop 9&#xA;```&#xA;&#xA;```&#xA;My minimum requirements lately are super+{1,2...} to bring me to a numbered desktop (for which I have mental conventions to organize apps), and super+shift+{1,2,...} to send a window to that desktop.&#xA;Window to Desktop 1=Meta+!,,Window to Desktop 1&#xA;Window to Desktop 2=Meta+@,,Window to Desktop 2&#xA;Window to Desktop 3=Meta+#,,Window to Desktop 3&#xA;Window to Desktop 4=Meta+$,,Window to Desktop 4&#xA;Window to Desktop 5=Meta+%,,Window to Desktop 5&#xA;Window to Desktop 6=Meta+^,,Window to Desktop 6&#xA;Window to Desktop 7=Meta+&amp;,,Window to Desktop 7&#xA;Window to Desktop 8=Meta+*,,Window to Desktop 8&#xA;Window to Desktop 9=Meta+(,,Window to Desktop 9&#xA;```&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-25 Notes</title>
    <id>https://pype.dev/2026-04-25-notes/</id>
    <updated>2026-04-25T09:36:16Z</updated>
    <published>2026-04-25T09:36:16Z</published>
    <link href="https://pype.dev/2026-04-25-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-22-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2026-04-22-notes ]]&#xA;&#xA;- [[aurora-and-kde-window-managment-with-kzones]]&#xA;- [[kde-shortcuts-for-desktop-and-window-navigation]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Aurora and KDE Window Managment with KZones</title>
    <id>https://pype.dev/aurora-and-kde-window-managment-with-kzones/</id>
    <updated>2026-04-25T06:51:20Z</updated>
    <published>2026-04-25T06:51:20Z</published>
    <link href="https://pype.dev/aurora-and-kde-window-managment-with-kzones/" rel="alternate" type="text/html"></link>
    <summary type="text">I have used a variety of window managers on a variety of distros and OS&#39;s over the last several years and because my hardware usage feels regularly in flux I...</summary>
    <content type="html">&lt;p&gt;I have used a variety of window managers on a variety of distros and OS&amp;rsquo;s over the last several years and because my hardware usage feels regularly in flux I don&amp;rsquo;t have an air-tight common setup for any given environment. On my desktop the way I give myself some nice easy window management is with KZones and this 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;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;Side by Side&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;padding&amp;#34;&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;nt&#34;&gt;&amp;#34;zones&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;x&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;&#xA;&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;y&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;&#xA;&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;height&amp;#34;&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;nt&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;&#xA;&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;y&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;&#xA;&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;height&amp;#34;&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;nt&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;Split Top&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;padding&amp;#34;&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;nt&#34;&gt;&amp;#34;zones&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;x&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;&#xA;&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;y&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;&#xA;&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;height&amp;#34;&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;&#xA;&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;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#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;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;x&amp;#34;&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;&#xA;&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;y&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;&#xA;&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;height&amp;#34;&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;&#xA;&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;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#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;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;x&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;&#xA;&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;y&amp;#34;&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;&#xA;&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;height&amp;#34;&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;&#xA;&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;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;Full Screen&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;padding&amp;#34;&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;nt&#34;&gt;&amp;#34;zones&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;x&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;&#xA;&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;y&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;&#xA;&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;height&amp;#34;&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;nt&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;Stacked&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;padding&amp;#34;&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;nt&#34;&gt;&amp;#34;zones&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;x&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;&#xA;&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;y&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;&#xA;&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;height&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;70&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;x&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;&#xA;&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;y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;70&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;height&amp;#34;&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;&#xA;&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;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;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>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-22 Notes</title>
    <id>https://pype.dev/2026-04-22-notes/</id>
    <updated>2026-04-22T06:43:40Z</updated>
    <published>2026-04-22T06:43:40Z</published>
    <link href="https://pype.dev/2026-04-22-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-18-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2026-04-18-notes ]]&#xA;&#xA;- [[work-compensation-note]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-18 Notes</title>
    <id>https://pype.dev/2026-04-18-notes/</id>
    <updated>2026-04-18T20:00:38Z</updated>
    <published>2026-04-18T20:00:38Z</published>
    <link href="https://pype.dev/2026-04-18-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-05-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-04-05-notes]]&#xA;&#xA;## PC Crash&#xA;&#xA;Desktop crashed days ago, apparently my primary drive has been going bad for a while and eventually it just died.&#xA;&#xA;- live-booted to ubuntu server&#xA;- found restic backup script to NAS&#xA;- edited to be smaller, but did the backup to the NAS&#xA;- rsync&#39;d docker volumes to BX500 SSD which is a zfs pool&#xA;&#xA;- captured what I did on ghost at /home/nic/aurora-recovery-report.md and /home/nic/aurora-crash-disk-health-report.md&#xA;&#xA;### PLAN&#xA;&#xA;- install ubunto on 500 GB Samsung&#xA;- create zfs dataset for projects /tank/volumes/projects&#xA;- mount zfs dataset /tank/volumes/projects to /home/nic/projects&#xA;- zfs for home? probably not, keep home on ext4&#xA;- mount old home and sync directly&#xA;&#xA;### Outcome&#xA;&#xA;This is going terribly... blog post coming on what I should&#39;ve done. What&#39;s&#xA;actually happening is that I basically just lost everything on that desktop&#xA;except my homelab repo thank God... &#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Data Loading is a Huge Deal</title>
    <id>https://pype.dev/data-loading-is-a-huge-deal/</id>
    <updated>2026-04-08T07:40:14Z</updated>
    <published>2026-04-08T07:40:14Z</published>
    <link href="https://pype.dev/data-loading-is-a-huge-deal/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been thinking about the work I am doing and have to do in my role at Cat, in Cat Autonomy, building Forge (see forge-ahead). I feel like I have little...</summary>
    <content type="text">&#xA;I&#39;ve been thinking about the work I am doing and have to do in my role at Cat,&#xA;in Cat Autonomy, building Forge (see [[forge-ahead]]). I feel like I have&#xA;little revelations almost every day now, not that it means I&#39;m writing&#xA;something amazing and producing it really fast but there&#39;s just a whole suite&#xA;of problems that different technologies solve at different levels and the more&#xA;I become aware of the problems that exist, the more the existence of some&#xA;solutions makes sense.&#xA;&#xA;!!! note &#34;The Problem Perspective&#34;&#xA;&#xA;    I don&#39;t know if this is a real thinking technique or if I&#39;m onto something&#xA;    novel(doubt) but I think a lot in terms of problems - &#34;what problem needs&#xA;    solving?&#34; and that&#39;s how I&#39;ve come to prioritize my work, it&#39;s only been very&#xA;    recently that I&#39;ve realized I do this and I think I should highlight it&#39;s very&#xA;    important to document the problem, otherwise every day you might try to solve a&#xA;    different problem but be working on the same code&#xA;&#xA;!!! note &#34;Problem Space&#34;&#xA;&#xA;    Kedro solves a lot of these problems, so when making rada in Reman the problem&#xA;    space was already more contained and narrow, Forge&#39;s problem-space is much more&#xA;    vast&#xA;&#xA;The one problem I&#39;m really fixated on right now is data loading, the problem I&#xA;need to solve is accessing data from a wide-variety of scripts/tools, without a&#xA;framework or standard method/library of accessing data in the first place. I&#39;ve&#xA;seen lots of projects on GitHub claim to make data loading easier and I didn&#39;t&#xA;quite understand what problem they were solving... one example to name is [Data&#xA;Load Tool](https://dlthub.com/). I&#39;ve seen similar ones I don&#39;t have the name&#xA;for right now that claim to make it easy/fast to load data from s3, or ways to&#xA;make s3 and a database both abstract in the user-experience for loading data.&#xA;But I hadn&#39;t really understood why these tools existed. I have a lot of&#xA;experience with [Kedro](https://dlthub.com/) and their&#xA;[DataCatalog](https://docs.kedro.org/en/latest/catalog-data/introduction/)&#xA;which provides a python object over a set of yamlfiles that makes it pretty&#xA;simple to load and save data in a way that isolates I/O from the business&#xA;logic. But what I didn&#39;t realize at the time how powerful that catalog was, the&#xA;power of standard patterns and shared libraries. Now that I don&#39;t have it&#xA;available to me, I&#39;m quite aware of the absence.&#xA;&#xA;In my new role something I&#39;m realizing is that for all the developers my team&#xA;now supports, there isn&#39;t a canonical way to access data. When I was in Reman&#xA;and working with kedro, the DataCatalog was the access pattern and so when I&#xA;was developing a platform I never really had to think about it - it was an&#xA;established pattern that I treated as a constraint and then built processes&#xA;around it. I&#39;ve been battling some mental block for weeks on Forge because of&#xA;the lack of that canonical pattern, and as I&#39;ve talked with other engineers it&#xA;seems like the baseline assumption is that data is just available on a&#xA;filesystem, but everyone&#39;s code loads data in different ways. On my small Reman&#xA;team, with common patterns to build on, it was easy to make things cloud-native&#xA;or shim in some devops to improve people&#39;s lives. But when everyone&#39;s doing&#xA;their own thing, and everyone&#39;s &#34;own thing&#34; is very much built-on some rigid tribal&#xA;patterns then it&#39;s hard to really move fast cause everyone isn&#39;t already moving&#xA;in the same direction.&#xA;&#xA;That made me realize that the first problem Forge needed to solve was in&#xA;providing a way for engineers to have filesystem-native data access in the&#xA;Cloud, where we are S3-first in our storage philosophy. I didn&#39;t need to figure&#xA;out a way for everyone to name a dataset, define the dataset in the first&#xA;place, and give a nice `my_dataset.load` that worked in python, bash, cpp, and&#xA;who knows what else.... I reframed the problem from &#34;how do engineers load up&#xA;the data&#34; to &#34;how do engineers have access to the data&#34;. The requirements of&#xA;the Cat Autonomy group was pretty simple: POSIX-compliant storage.&#xA;&#xA;My pathway to solving this problem is initially underway, I can&#39;t imagine it&#39;ll&#xA;be too difficult to setup for FSx instances for teams and give them an api to&#xA;run a Batch Job with the FSx mounted. From there, their code can load data from&#xA;`/mnt/fsx/&lt;whatever&gt;` just like they otherwise could be doing locally. Or maybe&#xA;FSx will let us setup mounts to very flexible mount points and their local&#xA;scripts will &#34;just work&#34; :shrugs:. I don&#39;t know the exact shape, but after&#xA;realizing the loading data is a big deal, I&#39;m thankful I have a narrower&#xA;problem to solve first.&#xA;&#xA;!!! note &#34;S3 Files&#34;&#xA;&#xA;    Literally yesterday, AWS launched &#34;S3 Files&#34; offering an NFS filesystem service over buckets. I&#39;m not sure if NFS is going to be a viable filesystem protocol for all of our use cases, but looks like we&#39;re not the only people who need the filesystem access patterns over S3.&#xA;&#xA;!!! warning &#34;A Future Problem - Canonical Reference&#34;&#xA;&#xA;    Another high-value thing Forge needs to solve is &#34;what is data&#34;. The data&#xA;    formats we have are not super simple, it&#39;s not just a set of SQL tables. We&#xA;    have files that relate to each other based on hard-filepath patterns, and those&#xA;    patterns are full of tribal knowledge and distributed processes. So a simple&#xA;    question like &#34;How do I use forge to access my data&#34; is hard. In Reman a data&#xA;    scientist would ask &#34;how do I use rada to access my data?&#34; and the answer is&#xA;    &#34;We use Kedro, and Kedro solved that problem for us via the Catalog&#34; but&#xA;    without Kedro, without 100% being in python (devs are also in embedded systems,&#xA;    cpp code, and more), without even consistent practices in the existing &#34;how do&#xA;    I access my data&#34; workflows, it&#39;s really impossible to systemetize and codify&#xA;    it. It is my next challenge to tackle though...&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-05 Notes</title>
    <id>https://pype.dev/2026-04-05-notes/</id>
    <updated>2026-04-05T05:38:05Z</updated>
    <published>2026-04-05T05:38:05Z</published>
    <link href="https://pype.dev/2026-04-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-03-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-04-03-notes]]&#xA;&#xA;- [[easter-2026]]&#xA;- [[data-loading-is-a-huge-deal]]&#xA;&#xA;- I have several competing streams of thought about Easter this year, I want to&#xA;  focus some reflection and energy in the appropriate direction, of what Easter&#xA;  is as a holiday in the Christian calendar, the day my Lord and King defeated&#xA;  Death in his physical body and resurrected himself from the grave -&#xA;  [[easter-2026]]. It is in how holy and significant that this day is that my&#xA;  second stream of thought begins to compete... we profane it so much in America,&#xA;  maybe throughout the world, but I&#39;m really thinking about my family-experience&#xA;  with Easter and other holidays... So I&#39;ve got thoughts for the world there too&#xA;&#xA;## Stream 2&#xA;&#xA;I want my wife and daughters to participate with me in celebrating Lent, Holy&#xA;Week, and Easter with more reverance, but the problem is our own parents&#xA;treating Easter and other High Church holidays that have been Americanized, as&#xA;though they own those days for &#34;family time&#34;. The point isn&#39;t to spend time&#xA;with family, it is to observe a holy day and after this year I am about ready&#xA;to reserve all holidays for ourselves. If grandparents want to come see their&#xA;grandkids, they&#39;re welcome anytime - heck we live 15 minutes away in on case&#xA;and still the competition happens over a few select holidays. Well, perhaps no&#xA;more. I think I&#39;m going to block Easter and Christmas out for my family and we&#xA;will participate in traditions that are more meaningful than sharing social&#xA;media links while we all sit on our phones in the living room.&#xA;&#xA;## Dev&#xA;&#xA;- Resurrected my OpenRouter API key for opencode after seeing a note aout&#xA;  [Qwen3.6 Plus](https://qwen.ai/blog?id=qwen3.6) being free so I figured I&#39;d&#xA;  give it a go. I think with some pushing I can use [[nexus]] to get a lot done&#xA;  with free models as they change and get better. Maybe even self-hosted models&#xA;  in the coming years!&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Easter 2026</title>
    <id>https://pype.dev/easter-2026/</id>
    <updated>2026-04-05T05:24:02Z</updated>
    <published>2026-04-05T05:24:02Z</published>
    <link href="https://pype.dev/easter-2026/" rel="alternate" type="text/html"></link>
    <summary type="text">What does it mean that &#34;He is risen&#34;? What does it mean to me? for me? for the world? I think the question matters to everyone, Jesus did and said a lot of...</summary>
    <content type="text">&#xA;## He Is Risen&#xA;&#xA;What does it mean that &#34;He is risen&#34;? What does it mean to me? for me? for the&#xA;world? I think the question matters to everyone, Jesus did and said a lot of&#xA;things in real history. And a lot of what he said and did, and what others&#xA;claimed he did, is pretty insane. And if he&#39;s just a liar or a crazy person,&#xA;then it&#39;s all inconsequential. But if he was actually telling the truth, then&#xA;his life is literally the lynchpin of anyone and everyone else&#39;s life. If he&#xA;really did resurrect from the grave by the power of Yahweh then every single&#xA;person needs to reckon with a real truth - that a King was killed and defeated&#xA;death in his own death, and he said he will come again. Every single human will&#xA;stand before the reigning resurrected King Jesus face to face, for judgement or&#xA;forgiveness and it is inescapable.&#xA;&#xA;So to me, today, Easter on April 5 2026, how will I treat my King? What is my&#xA;posture towards him and good things? I know where my head is - it&#39;s at work, I&#xA;know where my heart is - it&#39;s frustrated with my own sin and lack of attention&#xA;to the holy seasons the Lord permits me to pass though, it&#39;s frustrated with&#xA;external pressures that affect my life as I mention in&#xA;[[2026-04-05-notes#Stream 2]]. My head and heart are not fully focused on the&#xA;Lord, haven&#39;t been fully focused on his suffering, on him carrying the cross up&#xA;to the place of the skull, on his side being pierced, blood and water hitting&#xA;the ground, his final breath, the tearing of the veil, the silence on Saturday,&#xA;nor his resurrection we remember today.... I have been so consumed with myself,&#xA;with work and pressure, with disappointment and mistakes that I almost feel&#xA;like a foreigner to approach a meditation about Easter and to write abut it at&#xA;all, even this which is just a journal entry pretty much.&#xA;&#xA;But the Lord is sweet in his victory. Today is about his victory over death.&#xA;It&#39;s a victory he shares with all those whom he has called. The pressures of&#xA;work will fade away, the disappointment over my own sin may never leave me (and&#xA;actually I hope it never will, Jesus frees me to live and love, he frees me&#xA;from my sin but not from my sorrow or remorse over it). Praise the Lord for the&#xA;victory he gives his people, to me.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Agents can miss obvious things too</title>
    <id>https://pype.dev/agents-can-miss-obvious-things-too/</id>
    <updated>2026-04-03T14:39:51Z</updated>
    <published>2026-04-03T14:39:51Z</published>
    <link href="https://pype.dev/agents-can-miss-obvious-things-too/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working with MiniMax M.2 to vibe up some webapp ideas for Nexus and I just spent many minutes not having the app render correctly because the agent...</summary>
    <content type="text">&#xA;I am working with MiniMax M.2 to vibe up some webapp ideas for [[Nexus]] and I&#xA;just spent many minutes not having the app render correctly because the agent&#xA;mounted the wrong directory into the docker compose stack. I noticed it about 5&#xA;seconds after opening the file, but wasted nearly a half hour thinking it was a&#xA;docker issue in distrobox...&#xA;&#xA;!!! danger &#34;&#34;&#xA;&#xA;    Clankers are still just clankers man&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-03 Notes</title>
    <id>https://pype.dev/2026-04-03-notes/</id>
    <updated>2026-04-03T05:40:17Z</updated>
    <published>2026-04-03T05:40:17Z</published>
    <link href="https://pype.dev/2026-04-03-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-04-01-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-04-01-notes]]&#xA;&#xA;## Good Friday&#xA;&#xA;It&#39;s Good Friday for the Christians in the world, a day named not for what&#xA;happened but for a person. Jesus went to the cross some-2000 years ago out of&#xA;his love for his people. If you are chosen by the Lord, today is a good day&#xA;because his love was demonstrated for you in spilling his blood as the&#xA;atonement for your and my sins. That blood covers us just like the sacrifice of&#xA;Leviticus 16&#39;s blood was sprinkled on the holy things. Jesus&#39; blood is&#xA;sprinkled on us, as the temple, protecting the sacred space so that the Holy&#xA;Spirit can indwell. It&#39;s Ancient Near Eastern theology 101: wherever a god dwells&#xA;must be cleansed, but the manner of the cleansing in Christianity is unique -&#xA;God became man and died to provide the cleansing, his requirement of you and me&#xA;is to answer his call, not work to cleanse the space. Praise the Lord the work&#xA;is out of my hands.&#xA;&#xA;### One of my favorite comics&#xA;&#xA;![20260403104405_d759f687.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260403104405_d759f687.png)&#xA;&#xA;## Other Stuff&#xA;&#xA;- had MiniMax help me craft a project page for [[nexus]] finally. I&#39;ll probably use AI to keep it up to date. It&#39;s really biting at a boundary I was setting for having AI &#34;produce&#34; any writing on my website, but it feels appropriate as long as I&#39;m reviewing those updates for consistency and ensuring it isn&#39;t slop. The point isn&#39;t a blog post there, it&#39;s keying into an idea I have for my blog of having project-specific pages that just introduce why I built something and what it is - might end up being very close to just the READMEs of those projects.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pulled Pork Notes</title>
    <id>https://pype.dev/pulled-pork-notes/</id>
    <updated>2026-04-02T05:56:12Z</updated>
    <published>2026-04-02T05:56:12Z</published>
    <link href="https://pype.dev/pulled-pork-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Threw 2 shoulders in the Traegar this morning. This time I didn&#39;t put much thought into the seasonings, we&#39;ll see how they turn out.</summary>
    <content type="html">&lt;h1 id=&#34;april-2026&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;April 2026&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Threw 2 shoulders in the Traegar this morning. This time I didn&amp;rsquo;t put much thought into the seasonings, we&amp;rsquo;ll see how they turn out.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hot Honey Ham + Perfect Pork (festival) + Jack Daniels on both but was light on the Hot Honey Ham&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260402112348_6ba0b7f3.png&#34; alt=&#34;20260402112348_6ba0b7f3.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260403104854_2120eed6.png&#34; alt=&#34;20260403104854_2120eed6.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Pellets: Signature again&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Prediction: this will be just like the June note that I didn&amp;rsquo;t read before&#xA;prepping the meat but sounds like I by default did the same thing with the&#xA;seasonings I had and now I have high expectations for dinner!&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Results: as expected, a little dry due to my laziness, but the rubs came out&#xA;great! Missing my Holy Gospel from Meat Church though&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;june-26-2025&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;June 26 2025&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I smoked 2 pork shoulders&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Heavy application of Jack Daniels default pork rub + Meat Church&amp;rsquo;s the Holy Gospel&lt;/li&gt;&#xA;&lt;li&gt;Hot Honey Ham + Perfect Pork (festival)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;They smoked with Traegar&amp;rsquo;s Signature pellets at 250 until internal temp of 205,&#xA;then they rest covered for a few hours, then tear apart&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;overall rating:&lt;/p&gt;&#xA;&lt;p&gt;The Hot Honey Ham + Perfect Pork tasted great. It was not that spicy at all,&#xA;good flavor. It ended up being a little dry but this was certainly cause of my&#xA;utter lack of attention while the meat is smoking&lt;/p&gt;&#xA;&lt;h1 id=&#34;july-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;July 4&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;We ate the pulled pork today and it was a little dry, though very edible&#xA;nonetheless. I think I need to tend to the pork more with something like an&#xA;apple juice spray and then covering it in the latter part of the smoke&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;As for quantity - 2 pork shoulders (and 1 beef arm roast that I smoked today)&#xA;easily fed 4 families (8 adults + 9 kids) and we have plenty left over&amp;hellip; like&#xA;probably a full pork shoulder&amp;rsquo;s worth, between all 3 meats.&lt;/p&gt;&#xA;&lt;h2 id=&#34;notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Notes&lt;/span&gt; &lt;a href=&#34;#notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;spicy pickles were a good addition&lt;/li&gt;&#xA;&lt;li&gt;seriously need to tend to the pork more during the smoking, after a second re-heat it&amp;rsquo;s getting pretty dry&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-04-01 Notes</title>
    <id>https://pype.dev/2026-04-01-notes/</id>
    <updated>2026-04-01T05:30:40Z</updated>
    <published>2026-04-01T05:30:40Z</published>
    <link href="https://pype.dev/2026-04-01-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-03-31-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-03-31-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;It&#39;s the middle of holy week and my note from yesterday feels like it was&#xA;months ago... The days are getting long again, and filled with some panic about&#xA;work. I think I&#39;ll find it silly how stressed I am eventually, I was just&#xA;thinking &#34;when I get to Heaven, Jesus sure will think how much I got worked up&#xA;about work is silly&#34;, but if he&#39;ll think it then he thinks it now, if the&#xA;perspective would be true in however many years I have left or before his&#xA;second-coming, then the perspective is true today.&#xA;&#xA;I&#39;m not sure how to have the right perspective when the tightness in my chest&#xA;is out of my control. I can breath deep and recognize a truth - my job is&#xA;fleeting and the irony that my job is taking so much of my mental energy&#xA;through today &#34;Silent Wednesday&#34; (a day also known as &#34;Spy Wednesday&#34; for&#xA;reflecting on Judas&#39;s betrayal) is in the betrayal of my thoughts about my&#xA;savior, or lack-there-of. Judas sold the Lord for some silver, I&#39;m sure as a&#xA;man he had his reasons like any junkie rationalizing their behavior... But am I&#xA;different? I&#39;m so consumed with panic and worry about things happening at work&#xA;that my mind is not on who my Savior is, just like Judas I&#39;m fretting about the&#xA;wrong things and whether it&#39;s like Judas or not, I can&#39;t seem to &#34;just let it&#xA;go&#34;.&#xA;&#xA;What if Judas had just let go of his greed? Would he have been saved? In&#xA;the sovereignty of God it never was the case that Jesus wouldn&#39;t be betrayed,&#xA;that was apart of a plan known before time, but from the perspective of a man&#xA;bound by time I can&#39;t help but ask it - could Judas have relinquished his sin&#xA;to Jesus and is my anxiety over my job a modern-day betrayal whose irony is&#xA;simply made more clear by struggling with it on Silent Wednesday.&#xA;&#xA;## Post Day&#xA;&#xA;Ending the day OK... I&#39;m taking a machete through Forge, my project at work, and&#xA;that feels great. Something happened today where a lot more things fell into&#xA;place about my role and what I&#39;m supposed to be doing and how I will end up&#xA;doing it. After sitting in the context for a few months, I&#39;m seeing a bigger&#xA;picture unfold about what Forge will be, but today I realized it was going in&#xA;the wrong direction and so even with other people on this project I ripped out&#xA;about 10k lines of code and will force push to master in the morning. Copilot&#xA;was very useful in fully removing concepts and even service deployments&#xA;(LakeFS this time around) to help me minimize the code and logic surface that&#xA;Forge takes up. It&#39;s calming me down a bit and I expect will make it easy to&#xA;move fast and solve problems in silly ways while we figure out the better ways&#xA;to solve them. So some peace feels like it&#39;s on the horizon.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-03-31 Notes</title>
    <id>https://pype.dev/2026-03-31-notes/</id>
    <updated>2026-03-31T05:31:13Z</updated>
    <published>2026-03-31T05:31:13Z</published>
    <link href="https://pype.dev/2026-03-31-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-03-27-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-03-27-notes]]&#xA;&#xA;- tried to make a little progress on [[spring-cleaning-2026-homelab-edition]]&#xA;&#xA;- Also having M.2 MiniMax do something about a consistent neovim issue... if it&#xA;  fails this morning I&#39;ll resort to real Opus later for the fix&#xA;&#xA;- It&#39;s holy week and I barely know about it cause work is just taking up so&#xA;  much time... I really hate this but I don&#39;t think I can just blame work. I am&#xA;  to blame, I have so many short comings and I&#39;m not actively doing a lot about&#xA;  them, I&#39;m just trying to mitigate them with AI. I&#39;m trying to learn the problem&#xA;  space and solve problems how I used to: only faster, but there&#39;s a lot of&#xA;  other people, competing priorities, limited hardware to test out ideas, and&#xA;  it&#39;s a very heavy cognitive burden... Unfortunately I&#39;m giving in and letting&#xA;  it take over, perhaps today the Lord will soften my mind towards work and give&#xA;  me an more appropriate level of care and help me to meditate on things that are&#xA;  true, pure, noble, and worthy of my full attention.&#xA;&#xA;!!! note &#34;&#34;&#xA;&#xA;    “See how the patient Jesus stands,&#xA;    Insulted in his lowest case!&#xA;    Sinners have bound the Almighty’s hands,&#xA;    And spit in their Creator’s face.&#xA;&#xA;    With thorns his temples gor’d and gash’d&#xA;    Send streams of blood from every part;&#xA;    His back’s with knotted scourges lash’d.&#xA;    But sharper scourges tear his heart.”&#xA;&#xA;    Spurgeon, C. H. (1896). Morning and evening: Daily readings. Passmore &amp; Alabaster.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-03-27 Notes</title>
    <id>https://pype.dev/2026-03-27-notes/</id>
    <updated>2026-03-27T19:35:02Z</updated>
    <published>2026-03-27T19:35:02Z</published>
    <link href="https://pype.dev/2026-03-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-03-22-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-03-22-notes]]&#xA;&#xA;Might&#39;ve had a breakthrough with a data modeling issue at work today... If you want it make it so strikes again. I can&#39;t write about it here really, but I blew my own mind by remembering that I have quite a lot of say in what my work becomes as long as I&#39;m solving problems, and some of the problem just really slid into place today. I love when that happens, it preceeds a butt-ton of work usually that I enjoy doing, but I hate when it happens late on a Friday&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Clankers</title>
    <id>https://pype.dev/clankers/</id>
    <updated>2026-03-26T06:15:10Z</updated>
    <published>2026-03-26T06:15:10Z</published>
    <link href="https://pype.dev/clankers/" rel="alternate" type="text/html"></link>
    <summary type="text">An appropriately derogatory reference to AI agents</summary>
    <content type="html">&lt;p&gt;An appropriately derogatory reference to AI agents&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Irony of 10x</title>
    <id>https://pype.dev/the-irony-of-10x/</id>
    <updated>2026-03-26T06:00:50Z</updated>
    <published>2026-03-26T06:00:50Z</published>
    <link href="https://pype.dev/the-irony-of-10x/" rel="alternate" type="text/html"></link>
    <summary type="text">Agentic coding has been an exciting change to me over the last couple of months specifically. I&#39;ve been using AI tools for a few years now but something...</summary>
    <content type="text">&#xA;## Opener&#xA;&#xA;Agentic coding has been an exciting change to me over the last couple of months&#xA;specifically. I&#39;ve been using AI tools for a few years now but something really&#xA;shifted with Opus 4.5 as well as the tools/harnesses getting better and more&#xA;useful around the same time. I&#39;ve been influenced by people like Simon Willison&#xA;and Steve Yegge who have been on the forefront of agentic coding and [vibe&#xA;engineering](https://simonwillison.net/2025/Oct/7/vibe-engineering/) since the&#xA;dawn of ChatGPT and in my small circles of work I&#39;m definitely on the bloodiest&#xA;bleeding edge of the adoption of these practices. Are they the future? I don&#39;t&#xA;know - I tried to maintain a skeptical posture but until the bubble pops it&#39;s&#xA;looking like this is at least a direction the future of my line of work is&#xA;going.&#xA;&#xA;!!! danger &#34;&#34;&#xA;&#xA;    The tough part is mixing the new world of agentic coding with&#xA;    developers on wildly different points in the spectrum of adoption and maturity.&#xA;&#xA;Here&#39;s a short anecdote about what I mean...&#xA;&#xA;In a new project that I&#39;m on, I&#39;ve refactored/reimplemented a lot of legacy&#xA;code, producing about 140k lines of code, configuration, and&#xA;docs in about 2 months. It&#39;s an insane amount of &#34;product&#34; and I&#39;ve done it&#xA;entirely with agents. But I didn&#39;t do it with a handful of vanilla chat&#xA;sessions like &#34;Hey Copilot, reimplement this API, no mistakes&#34;. I&#39;ve been building&#xA;out my own process for using LLMs effectively. I have no actual idea besides my&#xA;own experience if what I&#39;m building is useful, but it feels pretty good -&#xA;agents for planning, building, reviewing, testing, etc. My &#34;harness&#34; includes&#xA;specialized agents and opinionated development workflows&#xA;to try to ensure that code is never one-shotted into production.&#xA;&#xA;The catch though is that I&#39;m working with a handful of developers and they are not&#xA;early-adopters or aggressive experimenters with these new agentic tools. Most&#xA;of them are still in Steve Yegge&#39;s stage 2 or 3 of AI coding as he&#39;s outlined&#xA;[in this medium&#xA;article introducing&#xA;GasTown](https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04). They&#xA;open a chat session, and say yes or no to Opus. I&#39;ve been in-between stages&#xA;6 and 7 for a while now - managing multiple agentic sessions that themselves&#xA;run specialized subagents primarily for context management, although I don&#39;t&#xA;feel quite ready for full blown stage 8 (agents running agents running agents).&#xA;So this isn&#39;t me saying that I&#39;m&#xA;&#34;better&#34; than the guys I&#39;m working with, just the project we&#39;re on&#xA;together is now being touched by people on wildly different ends of the agentic&#xA;coding spectrum, and the project itself is an experiment to me of living in the &#34;New World&#34;.&#xA;&#xA;Finally the anecdote - I&#39;m getting PRs from guys in stages 2 and 3,&#xA;thousands of lines of code and config, that I know they are not necessarily&#xA;experts in, but they&#39;re producing that code with fairly vanilla practices. How&#xA;do I verify it? I know my own prompts, I know what agents generated my code, I know&#xA;the direction and prodding I gave as they&#39;re building, but all&#xA;I know in a PR review from someone else is the diff - not how they tested it&#xA;(unless of course there&#39;s tests, and there must be, but tests are only as good&#xA;as the tests are...), not the steering they gave, not the manual UAT validation&#xA;they did, or even the full intent... And ultimately I own the code they merge&#xA;because chances are I outlast their contract with the team. It&#39;s kind of a&#xA;scary thing to review and accept... do I trust my&#xA;agentic practices to validate their work? Cause I certainly don&#39;t trust myself&#xA;to validate it perfectly.&#xA;&#xA;!!! note &#34;a note about contractors&#34;&#xA;&#xA;    I&#39;m not implying anything about anyone who works contract, I think the facts is that contractors are typically dis-incentivized to really &#34;own&#34; something - an unfortunate consequence of the world.&#xA;&#xA;## This is about me, not everyone&#xA;&#xA;I want to make sure to reiterate the context of this post and my thoughts -&#xA;it&#39;s really about me. I&#39;m not saying anything here is true for anyone else, I&#39;m&#xA;not making predictions about tomorrow, and I&#39;m not a prominent FOSS developer or a&#xA;high-profile ex-FAANG engineer. I&#39;m not talking about every project under the sun.&#xA;I work at a big company, not a fast-paced startup. I work on internal tooling,&#xA;nothing that should even be seen outside our network. I&#39;m also a self-taught&#xA;developer, not a trained software engineer.&#xA;&#xA;As far as AI goes, lately I&#39;m mostly all in on Github Copilot&#xA;CLI with a sprinkling of Opencode. I&#39;m not using Claude Code or Codex which&#xA;seem to have their own communities around plugins and usage.&#xA;&#xA;And since we&#39;re so focused on me right now, the important thing to keep as the&#xA;backdrop for this post is my temperament and make-up. I&#39;m definitely made a&#xA;certain kind of way, not different than every single person necessarily, but&#xA;different enough, from enough people, to not blend in with the 9-5 guy who can&#xA;log out and not think about work until the morning (I&#39;m not saying that&#39;s a&#xA;strength either, my boundary problems are for another time).&#xA;&#xA;I feel an aggressive burden to solve problems and own those solutions, call it&#xA;white-knighting or a savior complex if you want, but I&#39;ve got enough of a&#xA;reputation at Caterpillar now (and anywhere else I&#39;ve worked) to become a go-to&#xA;person for more than I think is necessarily appropriate. And with that burden&#xA;I&#39;ll bring results - if a problem hooks into my brain it. will. be. solved. I&#xA;probably won&#39;t do the best most clean-code solution right out of the gate, but&#xA;I&#39;ll do whatever I can to find a solution.&#xA;&#xA;## Who I was before agents&#xA;&#xA;That is who I was before agents made code easy to produce. My first boss at&#xA;Caterpillar used the phrase &#34;tenacious learner&#34; to describe me in several&#xA;reviews. I kind of rejected the description because I basically refused to&#xA;believe that I was really any different, any harder of a worker, than my peers.&#xA;&#xA;But with almost a decade of experience in the corporate world, and some adult&#xA;perspective on my life, I think it&#39;s accurate... I am a harder worker, to my&#xA;detriment sometimes, than a fair number of people I&#39;ve worked with\*\*.&#xA;&#xA;I&#39;m not brilliant but I can focus for a long time in the right circumstances.&#xA;The gift of perseverance (or the curse of not being able to let something go,&#xA;depending on how you look at it) has led to blessing in my life in both reward&#xA;and skill.&#xA;&#xA;!!! note &#34;\*\*&#34;&#xA;&#xA;    There&#39;s nothing wrong with it either, Cat&#39;s somewhat noticed that work in my EOY reviews and I&#39;m certainly not against &#34;just doing your job&#34;.&#xA;&#xA;And then AI came along and with another set of the right circumstances&#xA;catalyzed a new way to work.&#xA;&#xA;## Leaning into &#34;Agentic Engineering&#34;&#xA;&#xA;I jumped onto experimenting with AI coding tools as soon as they became&#xA;available, but mostly I just tried vibe coding rather than using tools for real&#xA;engineering work. I vibed up an API at one of my jobs that went into production&#xA;way too early, with far too little validation, and it was scary to support it&#xA;from then on out. I also did the meme, vibe-coded a TODO app, and threw that&#xA;puppy into the internet without locking down my API endpoints... That was&#xA;before agents were quite as useful as they can be&#xA;now, but that experience along with a handful of other stepping stones (like&#xA;learning some real actual fundamentals about security) began to&#xA;give me confidence in using the AI as a tool, like my IDE is a tool, for&#xA;producing **solutions** that take the form of code.&#xA;&#xA;!!! note &#34;&#34;&#xA;&#xA;    As one-shot apps got better and better, and as I learned about scoping work&#xA;    more appropriately for agentic tools my confidence in them grew.&#xA;&#xA;There&#39;s quite a difference between &#34;Claude make me a todo app, no mistakes&#34; and&#xA;scoping out a solution in natural language, with some technical guardrails, and&#xA;having agents tackle the implementation methodically.&#xA;&#xA;## What actually changed&#xA;&#xA;What&#39;s actually changed for me is quite a lot... I haven&#39;t opened my IDE to&#xA;seriously write code for months now. I&#39;ve oscillated between Opencode and&#xA;Copilot CLI, leaning moreso into Copilot since it&#39;s an approved tool at work&#xA;and as of mid-February is quite good. Mentally I&#39;m approaching problems with a&#xA;little more thought on the front-end than before because prior to agents I&#xA;would think as I implemented. At the scale of work that I do, this was really&#xA;fine - working on CLI utilities to solve simple problems, developing an&#xA;iterative testing cycle for each problem that allowed me to move fast, and once&#xA;I found a groove I was cooking. But now I don&#39;t even need to find it, I open&#xA;Opencode or Copilot CLI with my Planner agent, describe what I want to happen and have&#xA;Opus or GPT scope out a plan for me. Usually there&#39;s some back and forth on&#xA;feature scoping, then I review a markdown file it produces, and once it looks&#xA;decent enough to me I say &#34;go&#34; and it goes.&#xA;&#xA;That works a lot better than I even care to admit because at the same time as&#xA;I&#39;ve been leaning harder into agents, I&#39;ve been building my own harness of&#xA;sorts - not a replacement for Copilot CLI or a competitor to Opencode, but&#xA;moreso an opinionated workflow spine that I force agents into to give strict&#xA;gates to the SDLC (software development lifecycle).&#xA;&#xA;!!! warning &#34;Problem Solving Workflows&#34;&#xA;&#xA;    Plan and implement is fine for a lot of things, and I do think it&#39;s only getting better. My harness,&#xA;    mentioned a few times around here before, called Nexus, is a set of agents and&#xA;    rules that I want the code I&#39;ll be responsible for to go through before it&#xA;    lands in production. That cycle isn&#39;t too complex, and there&#39;s only about&#xA;    10,000 similar tools to Nexus on Github trending right now. I&#39;ve thought about dropping my idea and picking up&#xA;    something more popular, like&#xA;    [superpowers](https://www.github.com/obra/superpowers) but at the moment I&#39;m&#xA;    continuing to develop on and lean into my own idea here.&#xA;&#xA;!!! note &#34;Mini post on Nexus&#34;&#xA;&#xA;    I keep saying a blog post is coming, but the high level of Nexus is that it&#39;s a task&#xA;    tracker with a CLI that agents use to advance a ticket through a plan -&gt; build&#xA;    -&gt; test -&gt; review -&gt; verify -&gt; merge lifecycle that is almost exactly how I&#xA;    would otherwise have solved a problem by hand. I think it needs work, I need to&#xA;    be harder on TDD methodlogies with agents, and work on verification gating a&#xA;    bit more (shoutout to [showboat](https://github.com/simonw/showboat) by Simon&#xA;    Willison) but overall it&#39;s a system of thinking that I already participate in&#xA;    so I&#39;m doing my best to farm out specific parts of my workflow to agents rather&#xA;    than trying to one-shot enterprise problems and solutions.&#xA;&#xA;!!! danger &#34;Who&#39;s doing the thinking?&#34;&#xA;&#xA;    I&#39;ve noticed that as I&#39;ve developed Nexus out though, I lean on the agents for&#xA;    more and more of my own thinking, and am trusting my problem solving&#xA;    **process** moreso than my actual problem solving abilities.&#xA;&#xA;## Hidden costs&#xA;&#xA;The cost of this increase in speed is a lack of familiarity - and the fallout&#xA;of lack of familiarity is hard to express. There&#39;s also many facets to it.&#xA;For me, the first facet is that Nexus helps me move fast, but as I&#39;ve leaned&#xA;into it for more and more of the planning, I&#39;m less and less familiar with the&#xA;state of the code. I find myself asking my reviewer agents in fresh sessions&#xA;often to explain it to me, and thankfully they&#39;re usually consistent, but&#xA;nonetheless I&#39;m still not intimately familiar with the code. And on Nexus it&#39;s&#xA;not a big deal, that&#39;s low stakes, it&#39;s just me and my workflow.&#xA;&#xA;I&#39;m using Nexus + Copilot at work and that feels like higher&#xA;stakes... I have my agents explain the status of our project and although they&#39;re&#xA;also somewhat consistent the thing that&#39;s scary is that other people are&#xA;working on that repo with me, and that&#39;s where another layer of complexity&#xA;manifests itself. If it&#39;s just me and my [[clankers]], let&#39;s go all day long,&#xA;rebuild, ask questions, etc... but I have other developers I rub shoulders with&#xA;now, and if they ask me a question what am I going to say? &#34;Hold on, let me prompt&#xA;my agent for you&#34; - it&#39;s LMGTFY on steroids. And the burden becomes if I&#xA;feel like I can own and support what those other developers push into the repo.&#xA;&#xA;## Murky responsibility boundaries&#xA;&#xA;Why do I own their work? Well for the third time, this post is pretty&#xA;self-centered and all about me, and my situation is that the other developers I&#xA;work with presently are all contractors. Their work agreement with Cat could&#xA;end at any second, for practically any reason. The incentive structure isn&#39;t&#xA;there for these guys who technically work for an agency... Their bonuses aren&#39;t&#xA;bigger (or even exist) if Cat performs well, there&#39;s no extra vacation days in&#xA;it for em (aye, contractors don&#39;t get vacation days anyways), and not that it&#39;s&#xA;a problem, moreso just the nature of the world we&#39;re in - but they&#39;re basically&#xA;mercenaries out to the highest bidder and I happen to know of **multiple times&#xA;where Cat lost a good person to a higher bidder**.&#xA;&#xA;So this isn&#39;t really me trying to be negative about contractors at all, I&#39;m&#xA;here for a pay-check as well but Cat at least gives me SOME incentive to work&#xA;hard with the goal of compensation regardless of how altruistic I feel in my&#xA;own circumstances.&#xA;&#xA;!!! note &#34;Incentive&#34;&#xA;&#xA;    Better ratings mean marginally better end-of-year salary increases, and I&#39;ve received some other awards that certainly give me pause about jumping ship to another long-term place even when things can be crazy at Cat.&#xA;&#xA;It&#39;s more than just the contrator-ownership dilema, I&#39;ve dug myself quite a&#xA;hole over the last 8-10 years, gaining a reputation that I think many would&#xA;appreciate, but for me only lately increases the stress. I don&#39;t need to parrot&#xA;every accolade I&#39;ve ever received, that&#39;s not the point, but to make the point&#xA;as clear as I can - I have a lot of respect from quite a few people at&#xA;Caterpillar. I&#39;m blessed to have that reputation, and it&#39;s not like I haven&#39;t&#xA;worked hard for it - but people talk about me in a way so flattering I feel&#xA;like the main character in a fictional story sometimes.&#xA;&#xA;In a fictional story I can check out the ending, hit up spark notes, or ask AI&#xA;how it ends... but there isn&#39;t an &#34;end&#34; in my real world scenario, there&#39;s only&#xA;tomorrow and I feel the pressure of not knowing what tomorrow holds now more&#xA;than ever.&#xA;&#xA;!!! danger &#34;&#34;&#xA;&#xA;    Being noticed is starting to feel more costly than rewarding...&#xA;&#xA;## Financial irony&#xA;&#xA;What&#39;s the cost? It&#39;s hard to get specific without writing a novel but here&#39;s&#xA;the TLDR - because I&#39;ve been pretty good at what I do I&#39;ve been able to do this&#xA;type of work outside my normal 9-5 responsibilities and with that extra work&#xA;has been some pretty great financial benefits. However with Cat changes,&#xA;responsibility increases, and now owning code that others (and their clankers)&#xA;write, the extra time I gained for myself is eaten-up and has been reclaimed by&#xA;the mega-corp... &#34;Exceeding expectations&#34; every year just meant the bar is&#xA;raised, the expectations are higher, the time-commitment requirement is higher,&#xA;and as I&#39;ve had to meet the requirements of both the new world and the curse of&#xA;being noticed, I&#39;ve lost the time for the extra work... For years I&#39;ve realized&#xA;the benefit of my own skills and drive, but the irony of agents (and a handful&#xA;of other things) is that with the dramatic increase in expectations, not only&#xA;on me but on those I work with and therefore their output, I don&#39;t get to&#xA;realize the benefits of my own gifts anymore.&#xA;&#xA;## Meaning and fatigue&#xA;&#xA;I feel very torn because the work I&#39;ve been called into with Cat is good, I&#xA;said in [[cat-autonomy-2-0]] that autonomy will save people&#39;s lives. I love&#xA;getting to participate in that mission, it&#39;s the primary reason I didn&#39;t jump&#xA;ship to try to maintain the levels, and type, of work I was doing before... But&#xA;in a few short months the mission is being drowned out by expectations and&#xA;requirements that are so high I&#39;m losing the grip on my own life.&#xA;&#xA;## Open questions&#xA;&#xA;That leads me to questions that I can&#39;t answer, the question I ask daily now of&#xA;&#34;What about tomorrow?&#34;. What will agents do for us tomorrow, what problems will&#xA;be solved, what bugs will I create (by agents of course because I&#39;ve never&#xA;written a bug by hand in my whole life \s). If I stopped using agents would&#xA;people still be impressed? Would it even matter?&#xA;&#xA;## Fin&#xA;&#xA;I&#39;m certainly not anti-AI, it&#39;s typing all my code. I&#39;m not anti-collaboration,&#xA;although I do wish I could work alone with just my clanker-army to worry about.&#xA;I&#39;m not sure what I am anymore though... AI has changed how I work, what I work&#xA;on, and who I work with... Everything has changed in such a short period of&#xA;time and like the ending of this post, it&#39;s pretty jarring.&#xA;&#xA;!!! danger &#34;&#34;&#xA;&#xA;    Death comes to us all - James Acaster.&#xA;&#xA;Thanks for reading.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Luke 22:48</title>
    <id>https://pype.dev/reflection-luke-22-48/</id>
    <updated>2026-03-25T06:13:55Z</updated>
    <published>2026-03-25T06:13:55Z</published>
    <link href="https://pype.dev/reflection-luke-22-48/" rel="alternate" type="text/html"></link>
    <summary type="text">Spurgeon&#39;s ** today I almost skipped, not that I&#39;m diligent to sit down every day anyways, but because I&#39;m struggling with stress and work and I was hoping...</summary>
    <content type="html">&lt;p&gt;Spurgeon&amp;rsquo;s &lt;strong&gt;Morning and Evening&lt;/strong&gt; today I almost skipped, not that I&amp;rsquo;m&#xA;diligent to sit down every day anyways, but because I&amp;rsquo;m struggling with stress&#xA;and work and I was hoping for some divine moment where the meditation of the&#xA;day would just speak directly to my worries. But by God&amp;rsquo;s grace, I feel it&#xA;speaking to parts of me I&amp;rsquo;d rather ignore, and that alone is enough&#xA;confirmation to spend an extra minute on it&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 22:48&lt;/p&gt;&#xA;&lt;p&gt;But Jesus said to him, “Judas, are you betraying the Son of Man with a kiss?”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Spurgeon says first thing &amp;ldquo;The kisses of an enemy are deceitful&amp;rdquo;, not that he&amp;rsquo;s&#xA;the first one to say it&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Proverbs 27:6&lt;/p&gt;&#xA;&lt;p&gt;The wounds of a friend mean well,  but the kisses of an enemy are profane.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Our pastor delivered a great sermon on Sunday that is dove-tailing in my heart&#xA;with this&amp;hellip; He said the most dangerous place to be was in the presence of the&#xA;Lord Jesus, and to remain unchanged by him. Jesus has words for me which do not&#xA;feel good in the moment - words I don&amp;rsquo;t even disagree with&amp;hellip; but do I fully&#xA;agree? When he calls out the sin of lust or greed in my heart, do I take his&#xA;rebuke into the depths of my soul and respond in kind with a contrite heart? Or&#xA;do I parrot agreement on the surface, but in the darkest depths continue to&#xA;hold on to the sins that I love?&lt;/p&gt;&#xA;&lt;p&gt;I have felt so much stress from work and AI recently that I&amp;rsquo;ve just been&#xA;neglecting the rest of my life, and frankly a sharp word from the Lord about&#xA;orienting my life around the right things is welcome. It stings but I&amp;rsquo;m smart&#xA;enough to see how stupid I can be. In my own way I have been betraying the&#xA;Lord: talking sweetly about him to my family and friends yet daily, for the&#xA;last couple weeks at least, deprioritizing my time with him and giving into the&#xA;temptation to always be working and producing something. In the cleanest irony&#xA;I think I&amp;rsquo;ve only made more work and mess for myself in not taking the time&#xA;each day to slow down and reflect - both personally and in work.&lt;/p&gt;&#xA;&lt;p&gt;Praise the Lord for friends who speak truth to me, for my wife who cares for me&#xA;and sees the error I&amp;rsquo;m leaning into, and ultimately for Jesus himself who has&#xA;never abandoned me even when I turn 2 blind-eyes away from him.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Remote Terraform State Requires Working Traefik… DUH!</title>
    <id>https://pype.dev/remote-terraform-state-requires-working-traefik-duh/</id>
    <updated>2026-03-23T08:12:25Z</updated>
    <published>2026-03-23T08:12:25Z</published>
    <link href="https://pype.dev/remote-terraform-state-requires-working-traefik-duh/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m working on some spring cleaning in my homelab and backed myself into a hilarious corner yesterday. I use Open Tofu for any of my Terraform needs now, and...</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;m working on some spring cleaning in my homelab and backed myself into a&#xA;hilarious corner yesterday. I use Open Tofu for any of my Terraform needs now,&#xA;and although I don&amp;rsquo;t manage a ton with terraform, I do manage all my cloudflare&#xA;stuff with it. I decided I wanted to use my own minio instance as the s3 remote&#xA;state backend for my workspaces so I could rely on my typical NAS data&#xA;backup/retention workflow for the buckets in case anything went wrong, as&#xA;opposed to a local state file that I&amp;rsquo;m not taking a lot of precautions with.&#xA;Well during my Spring Cleaning I was working towards replacing ingress into my&#xA;home network with Cloudflare tunnels and in the midst of that update I took&#xA;down traefik, no matter a simple &amp;rsquo;tofu apply&amp;rsquo; should get me right back to&#xA;working order&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;&#xA;&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;k&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;Error&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;inspecting&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;states&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;backend&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;k&#34;&gt;operation&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;error&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;S3&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;ListObjectsV2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;https&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;error&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;StatusCode&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;404&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;RequestID&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;k&#34;&gt;HostID&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;k&#34;&gt;api&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;error&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;NotFound&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;Not&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;Found&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Hilarious problem with thankfully an easy fix&amp;hellip; downloading the state file&#xA;from Minio wasn&amp;rsquo;t a big deal since the container was still running without&#xA;issue, and placing the state file in the folder to use as the local state&#xA;solution for the interim went totally smooth, but this highlights the set of&#xA;interdependencies I&amp;rsquo;m creating for myself and as I take the next few days/weeks&#xA;to do some spring cleaning I&amp;rsquo;m hoping I can separate out the external ingress&#xA;from internal with a bit more clear boundaries so that I never lock myself out&#xA;of a workflow I only execute on my LAN in the first place!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>To Live In A World Without AI</title>
    <id>https://pype.dev/to-live-in-a-world-without-ai/</id>
    <updated>2026-03-22T14:50:38Z</updated>
    <published>2026-03-22T14:50:38Z</published>
    <link href="https://pype.dev/to-live-in-a-world-without-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m finding lately that I wish we could go back to pre-ChatGPT... A world without a code-gen easy button, where &#34;easy&#34; was LSP autocomplete, where tools were...</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;m finding lately that I wish we could go back to pre-ChatGPT&amp;hellip; A world&#xA;without a code-gen easy button, where &amp;ldquo;easy&amp;rdquo; was LSP autocomplete, where tools&#xA;were at my fingertips rather than remote inference endpoints, and where I and&#xA;everyone I worked with, was paid and judged based on what we could produce with&#xA;our own 2 hands, even if &lt;code&gt;ctrl + c&lt;/code&gt; and &lt;code&gt;ctrl + v&lt;/code&gt; was sometimes a common set of keys&amp;hellip; it&#xA;sure beat answering &amp;ldquo;yes&amp;rdquo; to a robot every 38 seconds.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-03-22 Notes</title>
    <id>https://pype.dev/2026-03-22-notes/</id>
    <updated>2026-03-22T07:09:33Z</updated>
    <published>2026-03-22T07:09:33Z</published>
    <link href="https://pype.dev/2026-03-22-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-03-07-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-03-07-notes]]&#xA;&#xA;## Back to normal life&#xA;&#xA;We&#39;re back from vacation, Florida was nice but a few thorns on the rose of vacation include:&#xA;&#xA;- several days of rain (but we got a blizzard up north, so beggars can&#39;t be choosers)&#xA;- I was so pre-occupied with work the entire time that I barely got a few minutes of relaxation the entire time&#xA;&#xA;In dev news, it&#39;s time to get a few things done today for the homelab, I&#39;m&#xA;going to audit my docker compose setup and work towards upgrading things that&#xA;are horribly out of date and cleaning up my scattered stacks with the goal of&#xA;hopefully eventaully migrating some things to kubernetes and using cloudflare&#xA;tunnels in place of keeping 80/443 open on my firewall for traefik ingress.&#xA;&#xA;[[spring-cleaning-2026-homelab-edition]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>paynepride dot com outage on vacation</title>
    <id>https://pype.dev/paynepride-dot-com-outage-on-vacation/</id>
    <updated>2026-03-16T13:21:31Z</updated>
    <published>2026-03-16T13:21:31Z</published>
    <link href="https://pype.dev/paynepride-dot-com-outage-on-vacation/" rel="alternate" type="text/html"></link>
    <summary type="text">The day after I leave for vacation I start getting SSL errors on every homelab service I host for myself and others. The culprit was my Cloudflare API token...</summary>
    <content type="html">&lt;p&gt;The day after I leave for vacation I start getting SSL errors on every homelab&#xA;service I host for myself and others. The culprit was my Cloudflare API token&#xA;expiring. It was easy to find the 403s in the logs for Traefik (thank goodness&#xA;for Tailscale getting me into the lab from afar). The solution was to rotate the&#xA;API token, replace the value in Traefik&amp;rsquo;s .env file, and hit it with the &amp;ldquo;just&#xA;deploy&amp;rdquo; button. Now I don&amp;rsquo;t know why this expired - the key looks like it has&#xA;no expiration to me - and I&amp;rsquo;m too tired from the beach to dig in further.&#xA;Until next time, I expect this error to come back March 16 2027 I suppose.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-03-07 Notes</title>
    <id>https://pype.dev/2026-03-07-notes/</id>
    <updated>2026-03-04T05:06:36Z</updated>
    <published>2026-03-04T05:06:36Z</published>
    <link href="https://pype.dev/2026-03-07-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-03-03-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-03-03-notes]]&#xA;&#xA;Happy Saturday, we&#39;re at the GWL and I figured I&#39;d take a few minutes this&#xA;morning to reflect on the last few weeks&#xA;&#xA;## Work&#xA;&#xA;Cat Autonomy is going well for me, my team seems relatively pleased with the&#xA;work and ideas I&#39;ve brought to the table, and I&#39;ve played a role in some pretty&#xA;instrumntal changes. I have been piecing together more and more of a story, I&#39;m&#xA;not sure about Caterpillar specifically but maybe, about technical leadership&#xA;and how a lack of it at the top level (C-suite, Execs, etc.) leads to&#xA;long-lasting frustration and repetitive pain points at lower levels (ie. where&#xA;I am). The **reasons** that I needed to make, or propose, all the changes I&#xA;have is that a lack of leadreship has culminated over years into a sprawling&#xA;mess of responsibilities, requests, deliverables, and a lack of a cohesive&#xA;&#34;thing&#34; which was the original vision for the project I&#39;m on now (I know this&#xA;cause I was here when it started).&#xA;&#xA;### Agents&#xA;&#xA;Agents are making it possible for me to to produce the amount of work I have&#xA;been for the last 2 months. It feels like the future in many ways, a lot is&#xA;unknown still but I need a write a follow-up on [[learning-how-to-agent]]. I&#39;m&#xA;not sure where I sit in agentic coding skills in the scope of the world, but at&#xA;Caterpillar I am within episolon of 100% confident that I&#39;m one of the most&#xA;active and proficient agentic-tool-users (Specifically GitHub Copilot, but I am&#xA;including peripheral things here - knowledge of context management, custom&#xA;agents, [harness engineering](https://openai.com/index/harness-engineering/),&#xA;etc). [[nexus]] has been serving me really well and that is about to warrant&#xA;its own post too - I have had a few Caterpillar peeps reach out about using&#xA;Nexus for themselves and although it&#39;s not there yet, it is coming together&#xA;nicely.&#xA;&#xA;Over the last 6 weeks I&#39;ve come up with a platform idea, and stitched&#xA;together/upgraded several existing solutions from the past 5 years, into a&#xA;platform I&#39;m calling &#34;Forge&#34;. For the past 2 years there&#39;s been an internal&#xA;effort to rebuild what I just recently consolidated, but that project has no&#xA;users and is unstable AF... Just this week our leadership decided to ax taht&#xA;project and put those developers on my thing. I&#39;ve been struggling with this a&#xA;little because I don&#39;t like to think that I have so much weight at Cat now as&#xA;to meaningfully affect the work othe rpeople are doing. I like to build tools&#xA;to affect **how** people work, but in this case I effecitvely killed a 2 year&#xA;old project and there&#39;s more than 0 emotions to deal wtih. Overall the team&#xA;doesn&#39;t seem too bent out of shape about it, but nonetheless the influence I&#xA;see that I have, and it&#39;s continuing to increase, is somewhat daunting&#xA;&#xA;## Misc&#xA;&#xA;At the Great Wold Lodge and having a blast, minus kids not sleeping great&#xA;(which unfortunately makes having fun sometimes a near-breakdown-experience).&#xA;We&#39;re hanging out with tbe BFFs and my best mate has recently become a Lead in&#xA;his engineering firm. Proud of him for sure. I also am feeling acutely aware of&#xA;a fact - that things change over time, and influence has lasting impacts.&#xA;&#xA;Kids are up, time to sign off.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>For My Own Sake I Do It</title>
    <id>https://pype.dev/for-my-own-sake-i-do-it/</id>
    <updated>2026-03-03T06:11:46Z</updated>
    <published>2026-03-03T06:11:46Z</published>
    <link href="https://pype.dev/for-my-own-sake-i-do-it/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Isaiah 48:9-11&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 48:9-11&lt;/p&gt;&#xA;&lt;p&gt;9 For the sake of my name I ⌊refrain from⌋ my anger,&#xA;and for my praise I restrain it for you&#xA;so as not to cut you off.&#xA;10 Look! I have refined you, but not like silver;&#xA;I have chosen you in the furnace of misery.&#xA;11 For my own sake, for my own sake I do it;&#xA;for why should it be defiled?&#xA;And I will not give my glory to another.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;My thoughts here feel hard to put together - it&amp;rsquo;s a comforting thing to me to&#xA;hear God say he restrains his anger for the sake of his name. God&amp;rsquo;s Name is a&#xA;holy thing, he is a holy thing. In his sovereignty and power he chooses people,&#xA;he chose me and loves me. Because his choices are &lt;strong&gt;his choices&lt;/strong&gt; and they have&#xA;nothing to do with me, it is comforting to me to hear that God prioritizes his&#xA;own character over anything else. He doesn&amp;rsquo;t bless me or help me at the expense&#xA;of anyone else or for my own sake - every blessing I have is for the sake of&#xA;his own Name.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s also objectively and morally good and right for him to make these choices&#xA;for his own Name&amp;rsquo;s sake. Why? Because he is the creator&amp;hellip; if Yahweh was&#xA;created, a creature, then his Name, Himself, would not be the most fundamental&#xA;goodness, would not be the most important thing to appeal to. But because he is&#xA;the uncaused-causer, the first, the Big Banger, who ultimately loves his&#xA;creation and redeems a people for himself&amp;hellip; Because he is a loving father then&#xA;it is good and right for him to to make choices based on himself, not based on&#xA;me or creation. It&amp;rsquo;s comforting because the fundamental reality is that reality&#xA;is outside my control, and the one who controls it behaves in a way that&#xA;prioritizes his own good Name.&lt;/p&gt;&#xA;&lt;p&gt;Praise God for a benevolent King who rules well for the sake of himself,&#xA;because any other reason falls short.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-03-03 Notes</title>
    <id>https://pype.dev/2026-03-03-notes/</id>
    <updated>2026-03-03T05:25:57Z</updated>
    <published>2026-03-03T05:25:57Z</published>
    <link href="https://pype.dev/2026-03-03-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-26-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-26-notes]]&#xA;&#xA;- note on [[my-thoughts-on-beads]]&#xA;  - Nexus post/page coming eventually&#xA;- [[for-my-own-sake-i-do-it]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>My Thoughts on Beads</title>
    <id>https://pype.dev/my-thoughts-on-beads/</id>
    <updated>2026-03-03T05:00:47Z</updated>
    <published>2026-03-03T05:00:47Z</published>
    <link href="https://pype.dev/my-thoughts-on-beads/" rel="alternate" type="text/html"></link>
    <summary type="text">Steve Yegge is a pretty well-known individual in the tech field, having been around for a long time at some of the larger companies. He&#39;s making quite a...</summary>
    <content type="text">&#xA;[Steve Yegge](https://en.wikipedia.org/wiki/Steve_Yegge) is a pretty well-known individual in the tech field, having been&#xA;around for a long time at some of the larger companies. He&#39;s making quite a&#xA;splash in the agentic coding world as well. I&#39;ve appreciated Steve&#39;s posts and&#xA;projects lately and wanted to put some thoughts on one called&#xA;[beads](https://github.com/steveyegge/beads).&#xA;&#xA;## Beads&#xA;&#xA;Beads is an issue tracker with links - issues relate to and block each other,&#xA;but agents use beads to keep track of information and dependencies without&#xA;storing it in their context 100% of the time. It seems like a very popular and&#xA;useful tool - but I am not using it, and that&#39;s what I wanted to capture... why&#xA;not?&#xA;&#xA;The answer for me is about **where** the organization layer is for the&#xA;developer. Beads exists in a single repo - it&#39;s a system-wide CLI but you &#39;bd&#xA;init&#39; in a git repo, and beads uses the `.git/` folder, worktrees, [dolt](https://docs.dolthub.com/), and some&#xA;git hooks to operate within that git repo. Outside the repo, it takes another&#xA;tool to tie together all the beads databases you might have.&#xA;&#xA;For me, I&#39;m hardly &#34;in&#34; a git repo anymore. My workflow is that when I have&#xA;something to work on, I create a &#34;workspace&#34; ([self-defined concept](https://pypeaday.github.io/dotfiles/terminal/workspaces/#installation)) which is&#xA;just a folder on my filesystem where I check-out git worktrees from any of the&#xA;repos related to the work I&#39;m doing. Sometimes it&#39;s 1 worktree from 6 repos,&#xA;sometimes it&#39;s 6 worktrees from 1 repo for parallel work...&#xA;&#xA;So because I like to organize myself in this way, beads is already &#34;out&#34; for&#xA;me. That&#39;s the main reason - I don&#39;t have any real technical issues with beads&#xA;or any criticism, it just is designed for a workflow that is not how I work.&#xA;&#xA;This is why I&#39;m building [[nexus]], something I hope to be able to put out&#xA;there &#34;soon&#34;. It won&#39;t be as general-purpose as beads, but my goal with it is&#xA;to be plug-and-play for any agentic harness (copilot cli, claude code,&#xA;opencode, etc.). It&#39;s a challenge thinking about it as a personal tool but also&#xA;as a tool to share someday, but agentic coding is making it possible to make&#xA;some cool shareable stuff and I&#39;m excited for my own workflow-task-manager to&#xA;mature and at least become something useful to me (it already is, but building&#xA;the plane in the air makes it kind of hard to enjoy the plane).&#xA;&#xA;### Credit&#xA;&#xA;- banner image from ChatGPT&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-26 Notes</title>
    <id>https://pype.dev/2026-02-26-notes/</id>
    <updated>2026-02-26T06:07:08Z</updated>
    <published>2026-02-26T06:07:08Z</published>
    <link href="https://pype.dev/2026-02-26-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-25-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-25-notes]]&#xA;&#xA;- [[the-wrath-to-come]]&#xA;- started [[the-wrath-to-come-pt-2]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Wrath to Come pt 2</title>
    <id>https://pype.dev/the-wrath-to-come-pt-2/</id>
    <updated>2026-02-26T06:06:53Z</updated>
    <published>2026-02-26T06:06:53Z</published>
    <link href="https://pype.dev/the-wrath-to-come-pt-2/" rel="alternate" type="text/html"></link>
    <summary type="text">the-wrath-to-come is only the beginning, because for the true son or daughter of the King, the wrath directed at the enemy, at the threat, is a **. The...</summary>
    <content type="text">&#xA;## The Beginning&#xA;&#xA;[[the-wrath-to-come]] is only the beginning, because for the true son or&#xA;daughter of the King, the wrath directed at the enemy, at the threat, is a&#xA;**divine grace**. The general understanding I see people have is to take the&#xA;position that we&#39;re all God&#39;s kids, so any anger/wrath he exhibits against&#xA;anyone is somehow a contradiction to his loving nature.&#xA;&#xA;His demonstration of wrath towards his enemies is a great proof of the love he&#xA;has for his children though. If everyone erroneously takes a view that we&#39;re all&#xA;God&#39;s children then there&#39;s not any room to talk about the enemies of God. YOU&#xA;are the enemy! As was I... and it&#39;s by God&#39;s divine love and sovereignty that I&#xA;have been adopted into his family. It&#39;s by nothing more than love and&#xA;sovereignty that **anyone** is adopted.&#xA;&#xA;If you are a child of the King, then wrath is only the beginning,&#xA;because the rest of that story is of protection and love. Humanity gets hung up&#xA;on wrath thinking we&#39;re the good guys and God owes us one, but this isn&#39;t a&#xA;Biblical worldview.&#xA;&#xA;When people talk about god, god&#39;s wrath, god&#39;s love, etc...&#xA;I like to ask &#34;which god?&#34; because a lot of people aren&#39;t talking about my&#xA;God, the True God-King, when they make claims about love and wrath... Most&#xA;people want a grandpa in the sky too senile to recognize when they&#39;ve done&#xA;something wrong - but my King is the farthest thing from that caricature and his&#xA;grand love for his people will be shown in many ways. Watching his wrath from&#xA;behind the angelic armies will look much more like grace and love than hatred&#xA;and anger, but for the enemies of God facing him at the front I&#39;m sure &#39;wrath&#39;&#xA;will be all they see.&#xA;&#xA;## Choices&#xA;&#xA;Life is made up of choices, and I don&#39;t think making a choice based on fear is&#xA;ideal. I do not think that anyone can **will themselves**, by fear or&#xA;not, to &#34;accept Jesus&#34; - ie. saving faith in the Lord isn&#39;t something anyone&#xA;can arrive at on their own, it is a gift.&#xA;&#xA;So the question is, when the gift is sat in front of you, the gift of adoption&#xA;and eternal life, divine and eternal grace, do you accept it? Or let it pass&#xA;by... Because that choice dictates a lot about how God looks at you. He&#39;s&#xA;either protecting you from his enemies, or you are his enemy. And to be honest,&#xA;when the enemies of God try to slander his name by calling him hateful and&#xA;referring to wrath as though it should change the reality of who he is - all I&#xA;see are enemies and propaganda. I know my God loves me, it&#39;s been proven over&#xA;and over.&#xA;&#xA;Yahweh is not a senile old man in the sky, he is the conquering King and he&#xA;will protect his own. So thank God for love and wrath.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Wrath to Come</title>
    <id>https://pype.dev/the-wrath-to-come/</id>
    <updated>2026-02-25T06:09:15Z</updated>
    <published>2026-02-25T06:09:15Z</published>
    <link href="https://pype.dev/the-wrath-to-come/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Matthew 3:7&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Matthew 3:7&#34;&#xA;&#xA;    But when he saw many of the Pharisees and Sadducees coming to his baptism,&#xA;    he said to them, “Offspring of vipers! Who warned you to flee from the coming&#xA;    wrath?&#xA;&#xA;`The coming wrath`... This is a tough one to think about, and I&#39;m not sure I&#xA;have a ton of hard opinions about that coming wrath anymore. I used to cling to&#xA;a few Bible verses that I thought painted a &#34;complete&#34; picture, or complete&#xA;enough, of what this coming wrath will be like. But anymore, after walking with&#xA;the Lord, becoming a dad, learning that ancient literature is quite a bit&#xA;harder to read than your average 21st century novel... well I&#39;m just not sure&#xA;what I know anymore beyond a few things:&#xA;&#xA;1. Yahweh created all things (Genesis 1)&#xA;2. In Jesus all things are held together (Colossians 1:17)&#xA;3. \*No one comes to Father except through Jesus, and only those whom the Father gives to him (John 6)&#xA;4. By God&#39;s grace alone is anyone chosen (Ephesians 2:8-9)&#xA;&#xA;\*See [[helkyo-what-is-it-for-god-to-draw-man-to-him]]&#xA;&#xA;So what can I say about anything outside those 4 points? Not a lot that&#39;s&#xA;concrete, but definitely some anecdotes, and those might be helpful.&#xA;&#xA;It&#39;s uncomfortable to think about God&#39;s wrath I think because a lot of people,&#xA;Christian or not, have this idea that &#34;we are all God&#39;s children&#34; and so we&#xA;analyze that statement from the position of a son or daughter. **But biblically,&#xA;this is just not even close to accurate**... Yahweh disinherited the nations at&#xA;Babel (Genesis 10-11, Deuteronomy 32) and created a new inheritance for&#xA;himself. NOT all people are God&#39;s children... I don&#39;t know where this preschool&#xA;theology came from but it&#39;s been a disaster to the general public&#39;s view of&#xA;legitimate Christianity. John says in this Matthew passage that God can make&#xA;children from stones - so just being born a human doesn&#39;t grant you the&#xA;status of child of God.&#xA;&#xA;!!! note &#34;Matthew 3:9&#34;&#xA;&#xA;    And do not think to say to yourselves, ‘We have Abraham as father.’ For I&#xA;    say to you that God is able to raise up children for Abraham from these stones!&#xA;&#xA;I think people would generally do well to imagine themselves, not as God&#39;s&#xA;children, but as an offender of God&#39;s children... Now let&#39;s think about wrath&#xA;for a second. If anyone hurt my daughters, especially someone not already in my&#xA;good graces, you had best believe that &#34;wrath&#34; will be an accurate word to use&#xA;to describe my response. If you come for my family, for my children, that&#39;ll&#xA;simply be the end of you. With that minimal perspective in mind... God&#39;s wrath&#xA;kind of is a bit more palletable I think.&#xA;&#xA;!!! danger &#34;&#34;&#xA;&#xA;    What makes it hard is the wrong view of ourselves from the beginning...&#xA;&#xA;How would it be, if someone I didn&#39;t know walked into my house and declared&#xA;themselves my son, my friend, etc. No one gets to declare themselves apart of&#xA;my family, there&#39;s a process to joining a family... Yahweh, as the creator of&#xA;all things, is the one with the authority to declare these things. He has&#xA;simply NOT said that all people are his children - what he has done is sent an&#xA;invitation out that anyone can hear, and those whom he does choose are given&#xA;the ability to respond to it. The hearts of the men and women who hear the call&#xA;and are changed are the ones who can refer themselves as a son or daughter of&#xA;the King.&#xA;&#xA;So, if someone who is not God&#39;s child thinks that God has no right to&#xA;exhibit wrath against the ones harming his kids... well... I&#39;m not sure what&#xA;argument anyone can have there... if you break into my house and harm my family&#xA;you&#39;re in for a rough time - if you harm the kids of the creator of EVERYTHING,&#xA;I can only imagine &#34;wrath&#34; would be just the beginning.&#xA;&#xA;Follow-up post coming: [[the-wrath-to-come-pt-2]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>clocks</title>
    <id>https://pype.dev/clocks/</id>
    <updated>2026-02-25T05:53:01Z</updated>
    <published>2026-02-25T05:53:01Z</published>
    <link href="https://pype.dev/clocks/" rel="alternate" type="text/html"></link>
    <summary type="text">One of the best things I&#39;ve vibe-coded</summary>
    <content type="html">&lt;p&gt;One of the best things I&amp;rsquo;ve vibe-coded&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260225115333_35a70833.png&#34; alt=&#34;20260225115333_35a70833.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-25 Notes</title>
    <id>https://pype.dev/2026-02-25-notes/</id>
    <updated>2026-02-25T05:29:14Z</updated>
    <published>2026-02-25T05:29:14Z</published>
    <link href="https://pype.dev/2026-02-25-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-24-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-24-notes]]&#xA;&#xA;## Tech&#xA;&#xA;- Added some timezones to [[clocks]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-24 Notes</title>
    <id>https://pype.dev/2026-02-24-notes/</id>
    <updated>2026-02-24T04:29:35Z</updated>
    <published>2026-02-24T04:29:35Z</published>
    <link href="https://pype.dev/2026-02-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-23-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-23-notes]]&#xA;&#xA;## Today&#xA;&#xA;- Wrote a Compassion letter to Noemi&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Hebrews 13:5</title>
    <id>https://pype.dev/reflection-hebrews-13-5/</id>
    <updated>2026-02-21T05:19:39Z</updated>
    <published>2026-02-21T05:19:39Z</published>
    <link href="https://pype.dev/reflection-hebrews-13-5/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Hebrews 13:5&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Hebrews 13:5&#34;&#xA;&#xA;    Your lifestyle must be free from the love of money, being content with what you have. For he himself has said, “I will never desert you, and I will never abandon you.”&#xA;&#xA;Hebrews is a long sermon and near the end of that sermon are some imperatives&#xA;for God&#39;s people. The Bible is anything but Basic Instructions Before Leaving&#xA;Earth, but Hebrews 13 has some pretty basic instructions that are wise to&#xA;remember. There are 2 in this verse to encourage me this morning:&#xA;&#xA;1. Your lifestyle must be free from the love of money&#xA;2. For he himself has said&#xA;&#xA;## Reflect&#xA;&#xA;The lifestyle comment just such a particularly relevant thing to me right now&#xA;as God has brought changes to my work/career. In many ways my lifestyle is very&#xA;free from the **love of money** - we live below our means, give money away,&#xA;etc. But I know my heart is fickle, and if there&#39;s not as much money as I think&#xA;there should be in our account I feel something in me that is most certainly&#xA;sinful. I know what having more than we need is like, and to be honest with&#xA;anyone - I do love that... I don&#39;t love money but I really enjoy the simplicity&#xA;that having too much money affords you in daily life. What will the next&#xA;several years look like? I do not know exactly, I have no reason to have any&#xA;actual concerns, and so my hope for myself is that God fills me with&#xA;contentment as I processed some the other day in&#xA;[[reflection-contentment-and-work]].&#xA;&#xA;The work changes are welcome but it doesn&#39;t feel **natural** to me to welcome&#xA;them. I think I can only call them welcome because of the second part of the&#xA;verse that jumped out at me - &#34;For he himself has said&#34;.&#xA;&#xA;The Word of the Lord ought to be a heavy thing to the Christian - to me. God&#39;s&#xA;Word is objectively more valuable than gold, and &#34;he himself has said, &#39;I will&#xA;never desert you, and I will never abandon you&#39;&#34;. My heavenly father has given&#xA;me assurance through his own word, which he is bound by his own nature to be&#xA;true to, that I am cared for. My life is evidence of this - so many examples of&#xA;God&#39;s faithfulness to me and my family. He&#39;s been so materially faithful that&#xA;I&#39;m not sure I can ever say I&#39;ve learned any secret to contentment - God has&#xA;simply been so good to me has blessed me greatly. Between his word that&#xA;he&#39;ll never forsake me and the record of faithfulness to me in my own life I&#39;d&#xA;have to make a choice that flys in the face of data to not be content... What&#xA;is there for me to not be content over? Absolutely nothing!&#xA;&#xA;Contentment has been on my mind a lot this week, there&#39;s no reason for me to&#xA;lack contentment, and no secret to lean into. I am, simply put, still a sinner&#xA;and the love of money is the sin crouching at the door, waiting for me. By&#xA;God&#39;s grace he continues to protect me, and I can calmly, with contentment and&#xA;satisfaction, walk through the next season of my life knowing that he himself&#xA;has said, he will never abandon me.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-23 Notes</title>
    <id>https://pype.dev/2026-02-23-notes/</id>
    <updated>2026-02-21T05:08:59Z</updated>
    <published>2026-02-21T05:08:59Z</published>
    <link href="https://pype.dev/2026-02-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-20-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-20-notes]]&#xA;&#xA;## Tech&#xA;&#xA;- some progress on [[nexus]] webapp&#xA;&#xA;## Daily&#xA;&#xA;- re-[[reflection-hebrews-13-5]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Cat Stock at 760</title>
    <id>https://pype.dev/cat-stock-at-760/</id>
    <updated>2026-02-20T05:09:08Z</updated>
    <published>2026-02-20T05:09:08Z</published>
    <link href="https://pype.dev/cat-stock-at-760/" rel="alternate" type="text/html"></link>
    <summary type="text">Cat stock is ridiculous... I remember 6 years ago or so someone at a volleyball meetup freaking out about 197, he couldn&#39;t wait to sell at 200...</summary>
    <content type="html">&lt;p&gt;Cat stock is ridiculous&amp;hellip; I remember 6 years ago or so someone at a volleyball&#xA;meetup freaking out about 197, he couldn&amp;rsquo;t wait to sell at 200&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - 2 Corinthians 7:6</title>
    <id>https://pype.dev/reflection-2-corinthians-7-6/</id>
    <updated>2026-02-20T04:54:11Z</updated>
    <published>2026-02-20T04:54:11Z</published>
    <link href="https://pype.dev/reflection-2-corinthians-7-6/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;2 Corinthians 7:6&#34;</summary>
    <content type="text">&#xA;!!! note &#34;2 Corinthians 7:6&#34;&#xA;&#xA;    But God, who comforts the humble, comforted us by the coming of Titus,...&#xA;&#xA;Paul didn&#39;t have to credit God as one &#34;who comforts the humble&#34; - he could&#39;ve&#xA;just praised God for the comfort brought through Titus showing up. But instead,&#xA;Paul just tosses the nugget in there.&#xA;&#xA;At a glance, maybe it looks like Paul is building himself, or his group, up by&#xA;self-referencing as &#34;humble&#34;. But calling yourself humble isn&#39;t the proud and&#xA;arrogant claim that it sounds like today...&#xA;&#xA;![20260220105727_535201a2.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260220105727_535201a2.png)&#xA;&#xA;In reality - humility is an honest view of oneself, not in inflated **or&#xA;deflated** view - but I won&#39;t digress farther than that...&#xA;&#xA;Paul isn&#39;t bragging about his own humility, or claiming that **because he&#39;s&#xA;humble** then God comforts him. No, the sense of the word ταπεινός (tapeinos)&#xA;is downcast... ie. someone in need of comfort.&#xA;&#xA;Paul is giving God praise, just naturally in his own language, as the one who&#xA;comforts people who need it. By God&#39;s grace on my life, I believe I have seen a&#xA;similar pattern - I even outlined in [[by-gods-grace]] regarding why I say &#34;by&#xA;God&#39;s grace&#34; so often... It&#39;s just become apart of how I talk because the&#xA;overflow of God&#39;s love for me is made manifest in my language.&#xA;&#xA;Thank God for Paul, and for the work God does in his people to recognize his&#xA;own Glory. And thank God that I can look back over 10 and 20 years and&#xA;recognize the work God has done in me that I might recognize his Glory as well.&#xA;&#xA;God most certainly does comfort the downcast, no word is sweeter than his in my&#xA;ear when things aren&#39;t going my way. But why? It&#39;s because his word to me is&#xA;built on a foundation (a decades old foundation at this point, by his grace) of&#xA;love. I have come to believe and know beyond any shadow of a doubt of God&#39;s&#xA;love for me, and by his love I know that when I am downcast I am not forsaken,&#xA;I&#39;m just... downcast. And God comforts me in those times. I don&#39;t think it can&#xA;make sense without personal intimate knowledge of the Lord - no one could read&#xA;this and take seriously that the often silent comfort God brings is so&#xA;powerful. Or, to be more related to the verse, that when we are comforted&#xA;through each other, it is still then an act of grace by the Lord to bring that&#xA;comfort through another person. Without the adoption papers signed by Yahweh&#xA;signifying your sonship to the King, I do not believe that this comfort can&#xA;even begin to make sense.&#xA;&#xA;But by God&#39;s grace, it makes sense to me, and praise the Name of the Lord for&#xA;it.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-20 Notes</title>
    <id>https://pype.dev/2026-02-20-notes/</id>
    <updated>2026-02-20T04:43:59Z</updated>
    <published>2026-02-20T04:43:59Z</published>
    <link href="https://pype.dev/2026-02-20-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-18-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-18-notes]]&#xA;&#xA;- [[reflection-2-corinthians-7-6]]&#xA;&#xA;## Tech&#xA;&#xA;- Need to spend some time on zfs-ops&#xA;- Started stubbing out k8s ideas for homelab with windsurf - lots generated in homelab-mono&#xA;- Having Gemini 3.1 pro take a stab at vamping up Nexus website&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Trials Reveal Faith (short)</title>
    <id>https://pype.dev/trials-reveal-faith-short/</id>
    <updated>2026-02-18T06:19:07Z</updated>
    <published>2026-02-18T06:19:07Z</published>
    <link href="https://pype.dev/trials-reveal-faith-short/" rel="alternate" type="text/html"></link>
    <summary type="text">Spurgeon&#39;s &#34;Morning and Evening&#34; today ended with a poem:</summary>
    <content type="html">&lt;p&gt;Spurgeon&amp;rsquo;s &amp;ldquo;Morning and Evening&amp;rdquo; today ended with a poem:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Trials make the promise sweet;&#xA;Trials give new life to prayer;&#xA;Trials bring me to his feet,&#xA;Lay me low, and keep me there.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Trials forge and reveal faith in our lives - faith in something that is&amp;hellip;&#xA;Yahweh uses trials as a megaphone to his people though. For those called into&#xA;his family, the trials of temporary life should, and for the true believer&#xA;&amp;lsquo;do&amp;rsquo;, bring us closer to the King&amp;rsquo;s throne. The trial highlights a larger&#xA;reality of existential need of a savior. Trials have severity because there are&#xA;different kinds, but the need for a King is of one kind. It is the highest and&#xA;most necessary need of us all, but not everyone knows it. Trials can reveal it.&lt;/p&gt;&#xA;&lt;p&gt;Praise the Lord for trials that bring us closer to him, for no trial of earth&#xA;can compare to the Glory of the King.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-18 Notes</title>
    <id>https://pype.dev/2026-02-18-notes/</id>
    <updated>2026-02-18T05:43:57Z</updated>
    <published>2026-02-18T05:43:57Z</published>
    <link href="https://pype.dev/2026-02-18-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-17-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-17-notes]]&#xA;&#xA;## Tech&#xA;&#xA;- upgraded pihole for the first time in forever&#xA;- using my windsurf credits to try and close some gaps in my backup logic&#xA;  - [ ] zfs-ops repo -&gt; data-ops&#xA;  - [ ] introduce zerobyte as a frontend to my backups?&#xA;  - [ ] get a good diagram built&#xA;&#xA;## Personal&#xA;&#xA;- next GWL trip!&#xA;- [[trials-reveal-faith-short]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Forge Ahead</title>
    <id>https://pype.dev/forge-ahead/</id>
    <updated>2026-02-17T05:14:15Z</updated>
    <published>2026-02-17T05:14:15Z</published>
    <link href="https://pype.dev/forge-ahead/" rel="alternate" type="text/html"></link>
    <summary type="text">Yesterday&#39;s reflection-contentment-and-work has a second-part this morning. As I was wrapping up a project I didn&#39;t realize the closed-off-ness of leaving......</summary>
    <content type="text">&#xA;Yesterday&#39;s [[reflection-contentment-and-work]] has a second-part this morning.&#xA;As I was wrapping up a project I didn&#39;t realize the closed-off-ness of&#xA;leaving... I handed in some notes, and mid-message to someone the clock struck&#xA;midnight and I was locked out. It&#39;s fitting to be honest, and now in the wake&#xA;of yesterday&#39;s contentment post, experiencing some more loss than I expected,&#xA;today we forge ahead.&#xA;&#xA;My main focus for work now is a project I will refer to as `forge`. It is what&#xA;I will bring to Caterpillar Autonomy but I can only build it thanks to the&#xA;gifts and experience God has given me. The thing I want to put on paper is a&#xA;short list of experiences I think God in his sovereignty, gave me over the last&#xA;few years and what they provide for me for Forge.&#xA;&#xA;## Cat Reman Platform&#xA;&#xA;One of the first things that comes to mind is another project I was sad to&#xA;lose: a platform I started for an analytics team in Cat Reman. That began as a&#xA;simple python cli to automate some developer operations that was otherwise a&#xA;dozen clicks through the AWS console. Using [boto3] and some simple python I&#xA;gave that team the start of some real velocity gains. Eventually that grew into&#xA;a larger kubernetes-based service where the data science operations: code quality,&#xA;deployment, updates, webapps, etc. were all handled by our platform. It wasn&#39;t&#xA;perfect, it wasn&#39;t self-contained, it was a set of things kind of glued&#xA;together with systems and scripts, but it worked, it works today and is under&#xA;fantastic ownership.&#xA;&#xA;What I learned just from starting that cli was to be passionate about solving&#xA;problems. No one asked me to make it, but it needed made, and the team is in&#xA;such a better place for me having started it.&#xA;&#xA;## Kedro and OpenShift&#xA;&#xA;Another short project I was able to participate in a few years ago was leading&#xA;a data-syncronization task into a fiery horrific crash that lasted weeks -&#xA;neigh months longer - than was necessary or appropriate... The details aren&#39;t&#xA;relevant - I was the lead dev in a new place tasks with syncing up data between&#xA;2 applications. Ultimately, could&#39;ve been a python script but I over-designed a&#xA;kedro-based solution because of some requirements I misunderstood. Part of that&#xA;misunderstanding was not knowing how to get the requirements I needed, but they&#xA;weren&#39;t provided in full, I didn&#39;t know any better, so for weeks we were a&#xA;corporate meme trying to use python to update a database that no one on our&#xA;team understood if we were allowed to write to.... It was very confusing.&#xA;&#xA;But what I learned was a lot about gathering requirements, questioning&#xA;assumptions, and the importance of understanding your constraints as fully as&#xA;possible as early as possible.&#xA;&#xA;## A Real Platform&#xA;&#xA;Then one of the biggest blessings I see for Forge, is the experience I&#39;ve&#xA;gotten recently with AWS at scale... Not 1 or 2 services created with&#xA;Medium.com copy pasta tutorials from docs... but experience working in a large&#xA;project across many accounts, supporting several teams, using a wide variety of&#xA;technologies from Terraform to Kubernetes.&#xA;&#xA;On this project I learned about practical system design and gained a lot of&#xA;confidence in supporting systems that are complicated... I&#39;m not the smartest&#xA;guy in the world but I&#39;m no dummy, and even while lacking fluency in the system&#xA;I was supporting on this project I learned a lot of troubleshooting skills and&#xA;gained confidence in my ability to troubleshoot complex systems.&#xA;&#xA;I&#39;ll need this for Forge - which will break certainly, but I&#39;ll be there to fix&#xA;it and I&#39;m sure I can because I&#39;ve done these other things.&#xA;&#xA;## Fin&#xA;&#xA;The Lord has been with me through these projects - he has certainly blessed me&#xA;with a skillset and personality that lends itself to being really useful in the&#xA;Tech world I&#39;ve landed in (which is a whole &#39;nother story of God&#39;s sovereignty&#xA;and provision). I am very grateful for the swath of experience I&#39;ve gotten over&#xA;the last 8 years or so, and this season I&#39;m in of change is rocking me a little&#xA;more than I anticipated but by God&#39;s grace I think I see the purpose, or at&#xA;least **a** purpose, and I pray I am making the choices for work he wants me to&#xA;make.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-17 Notes</title>
    <id>https://pype.dev/2026-02-17-notes/</id>
    <updated>2026-02-17T04:52:51Z</updated>
    <published>2026-02-17T04:52:51Z</published>
    <link href="https://pype.dev/2026-02-17-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-16-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-16-notes]]&#xA;&#xA;- started [[someday]]&#xA;  - used opencode to go through my posts for technologies I said I&#39;d write about but haven&#39;t yet&#xA;- [[forge-ahead]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Contentment and Work</title>
    <id>https://pype.dev/reflection-contentment-and-work/</id>
    <updated>2026-02-16T05:42:13Z</updated>
    <published>2026-02-16T05:42:13Z</published>
    <link href="https://pype.dev/reflection-contentment-and-work/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Philippians 4:11&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Philippians 4:11&#34;&#xA;&#xA;    Not that I speak from need, for I have learned to be content in whatever circumstances I am.&#xA;&#xA;## Context&#xA;&#xA;This verse showing up in Spurgeon&#39;s **Morning and Evening** is a divine&#xA;grace to me. Today is a significant day in a journey God has had me on towards&#xA;contentment. The circumstances of that journey, the specifics, are known to&#xA;some but I can still speak generally enough about it in this reflection because&#xA;the generalities are not unique to me - anymore than the requirement to&#xA;**learn** contentment, for it&#39;s not a natural state for a man.&#xA;&#xA;For me, like a lot of others, it&#39;s about money right now. Over the last few&#xA;years I&#39;ve been able to make a pretty significant income and God has blessed me&#xA;through the work I&#39;ve done, but something I have noticed is the work itself has&#xA;felt less and less blessed, and more like a burden as the goal became money. I want&#xA;to be a billionaire and never concern myself with a financial struggle - but&#xA;this is childish thinking. The last few years have shown me that I can work, a&#xA;lot, and make money, also a lot (relatively speaking). I don&#39;t feel as though&#xA;I&#39;ve wasted time necessarily, the _amount_ of work and the _time_ the work&#xA;takes are different things. But where I may have recovered some of the time in&#xA;overworking, I certainly gave up other things: fulfilment and excellence to&#xA;name the top 2. As I&#39;ve not been content, and have striven for more it&#39;s become&#xA;clear that **wanting more** is itself a burden.&#xA;&#xA;Today marks the end of some income that I&#39;ve been able to work for - not all of&#xA;it, I&#39;m extremely blessed in [[cat-autonomy-2-0]]. The facts are though that&#xA;through the circumstances God has brought me recently, I&#39;ll be making less than&#xA;50% of what I&#39;ve been able to make over the last couple years... By God&#39;s grace&#xA;we still have more than enough, and by his grace again today is a significant&#xA;day for me to step through a doorway of contentment and officially realign my&#xA;work priorities with the worldview Jesus has called me into.&#xA;&#xA;## Contentment and Work&#xA;&#xA;I have been sort of fighting off a belief that I&#39;m on a literal mission from&#xA;God in Caterpillar Autonomy... If someone could see my inner-monologue play out&#xA;they&#39;d certainly get Blues Brothers vibes...&#xA;&#xA;![On A Mission From God.mp4](https://cdn.statically.io/gh/pypeaday/images.pype.dev@main/blog-media/On%20A%20Mission%20From%20God%20%5BMKZSqd5Y8nA%5D.gif)&#xA;&#xA;I hope I&#39;m not just reaching for some grand facetious meaning for the work I&#39;m&#xA;now doing to distract myself from the changes coming to my paycheck. It really&#xA;feels to me like God has prepared me in many ways for the work that&#39;s in front&#xA;me. I&#39;m thankful for that preparation and now it seems like it&#39;s time to give&#xA;up the desires for riches and focus on doing something more than closing&#xA;tickets and supporting a small team of people.&#xA;&#xA;As God calls me to contentment in my personal life, I think he&#39;s also planning&#xA;on blessing the work I&#39;m doing. Earlier I said I have been very blessed by the&#xA;work I have been able to do, but I don&#39;t know that God has blessed&#xA;the work itself - much of what I&#39;ve done was filled with mistakes you only&#xA;learn by doing something the first time... Certainly in some ways he has&#xA;blessed those things, but I see something &#34;just bigger&#34; in Cat Autonomy, and I&#xA;think I&#39;m here to play a real role in it&#xA;&#xA;!!! danger &#34;maybe like Joseph in Egypt&#34;&#xA;&#xA;    like I said - literal mission from God&#xA;&#xA;I&#39;ve had to give-up some pay to play that role, but the Lord has taught (and is&#xA;teaching) me that there&#39;s much more to work than a paycheck, more to life than money.&#xA;&#xA;It is easy, very easy, for me to roll out of this line-of-thinking, I&#39;ve done&#xA;it several times even while writing this... but I am sure contentment is&#xA;something the Lord has for me. Today&#39;s significance is just a temporal&#xA;milestone, a date that was approaching at a constant rate of change... The day&#xA;is here, today&#39;s meditation is on contentment, and the Lord is doing a work in&#xA;and through me. Amen.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-16 Notes</title>
    <id>https://pype.dev/2026-02-16-notes/</id>
    <updated>2026-02-16T05:40:52Z</updated>
    <published>2026-02-16T05:40:52Z</published>
    <link href="https://pype.dev/2026-02-16-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-15-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-15-notes]]&#xA;&#xA;- [[reflection-contentment-and-work]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-15 Notes</title>
    <id>https://pype.dev/2026-02-15-notes/</id>
    <updated>2026-02-15T05:12:31Z</updated>
    <published>2026-02-15T05:12:31Z</published>
    <link href="https://pype.dev/2026-02-15-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-13-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-13-notes]]&#xA;&#xA;## Daily&#xA;&#xA;- Went to BJJ yesterday for the first time since late December... you definitely feel 6 weeks off not only in the cardio, but also in the everything-else... body is **sore** today&#xA;&#xA;## Reflection&#xA;&#xA;- Spent some time meditating on 2 Peter 3:18 - &#34;... To [Jesus] be the glory, both now and to the day of eternity&#34;&#xA;  - It&#39;s the **now** that&#39;s on my heart, I am bordering on feeling like I&#39;m on a mission from God himself at work, and to do that mission for the glory of the Lord **today** sure brings motivation and passion to the problem solving&#xA;&#xA;## Tech&#xA;&#xA;- [MinIO Archived](https://github.com/minio/minio)&#xA;  - Time to look at [Garage](https://git.deuxfleurs.fr/Deuxfleurs/garage)&#xA;  - or [RustFS](https://github.com/rustfs/rustfs)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Consequences, Discipline, and Punishment</title>
    <id>https://pype.dev/consequences-discipline-and-punishment/</id>
    <updated>2026-02-13T04:31:49Z</updated>
    <published>2026-02-13T04:31:49Z</published>
    <link href="https://pype.dev/consequences-discipline-and-punishment/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m a dad and I have 2 beautiful daughters in my house right now. As they&#39;ve grown up just a little from new-born to toddler to child, my wife and I have...</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;m a dad and I have 2 beautiful daughters in my house right now. As they&amp;rsquo;ve&#xA;grown up just a little from new-born to toddler to child, my wife and I have&#xA;worked hard to have the right posture and attitude towards &amp;ldquo;discipline&amp;rdquo;. I have&#xA;noticed that 3 words seem to kind of meld into each other and I prefer they&#xA;have clear boundaries, because in our household we&amp;rsquo;re very intentional to not&#xA;punish&amp;hellip; Punishment is a heavy and weighty thing and we don&amp;rsquo;t want our kids to&#xA;grow up thinking they get punished for messing up.&lt;/p&gt;&#xA;&lt;p&gt;Kids certainly &lt;strong&gt;know&lt;/strong&gt; right and wrong to some degree, and even when they&#xA;knowingly do something &amp;ldquo;bad&amp;rdquo; it&amp;rsquo;s not necessarily that there was malicious&#xA;intent behind it&amp;hellip; In my mind - &amp;lsquo;punishment&amp;rsquo; is for malpractice, but erroring&#xA;and making an unwise choice to &amp;ldquo;do something bad&amp;rdquo; is a lack of judgement and&#xA;that doesn&amp;rsquo;t require punishment, it should illicit discipline.&lt;/p&gt;&#xA;&lt;p&gt;Why be so pedantic about these 2 words in particular? Well because I don&amp;rsquo;t&#xA;think it&amp;rsquo;s appropriate for my daughters to believe they get punished for&#xA;singing at the table&amp;hellip; There&amp;rsquo;s nothing morally wrong with that, but we do need&#xA;them to focus on meals at meal time, so we practice being disciplined at the&#xA;table. If they continue to sing, we utilitze consequences but they are never&#xA;penal. What I mean is that if my kids are singing, being loud, etc. at the&#xA;table, we have them run laps outside or do jumping jacks. Why? Because getting&#xA;that excess energy out is a way for them to discipline their bodies, and learn&#xA;to be self-controlled. There&amp;rsquo;s no element of fear or of losing something&#xA;because they&amp;rsquo;re struggling to contain themselves while we eat.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;punishment vs discipline&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s the key difference and it&amp;rsquo;s taken several years for me to really drive a&#xA;wedge between &amp;ldquo;punishment&amp;rdquo; and &amp;ldquo;discipline&amp;rdquo; even in my own worldview as a&#xA;parent. So our language with our kids is &amp;ldquo;obey the rules or we will do some&#xA;discipline&amp;rdquo; - never &amp;ldquo;or you will be punished&amp;rdquo;.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Do you see the difference in how that frames even the obedience and the rule&#xA;itself? It&amp;rsquo;s not a thing to follow out of fear, rules are to be followed&#xA;&lt;strong&gt;because it&amp;rsquo;s right&lt;/strong&gt; and to do what is right requires discipline and&#xA;self-control. There is no need (actually there&amp;rsquo;s not even an appropriate place)&#xA;for &lt;strong&gt;punishment&lt;/strong&gt; in this context.&lt;/p&gt;&#xA;&lt;p&gt;So what of consequences? Well, sometimes punishment is a consequence, sometimes&#xA;running laps is a consequence, sometimes getting hurt from falling out of a&#xA;tree you weren&amp;rsquo;t supposed to be climbing that high in is a consequence&amp;hellip;&#xA;Consequences are amoral things that happen after something else. But&#xA;consequences presented without a framework for understanding them can sort of&#xA;make them meaningless.&lt;/p&gt;&#xA;&lt;p&gt;For a while I would tell my girls that &amp;ldquo;there will be consequences for&#xA;disobeying&amp;rdquo;, but this isn&amp;rsquo;t enough - this doesn&amp;rsquo;t explain &lt;em&gt;why&lt;/em&gt; there are&#xA;consequenes, it only encoruages obedience to avoid &lt;strong&gt;punishment&lt;/strong&gt; rather than&#xA;obedience &lt;strong&gt;because it is right&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So that&amp;rsquo;s a short parenting note that I&amp;rsquo;ve been musing on - kids need to grow&#xA;up learning how to be disciplined and how to be self-controlled. Raising them&#xA;to avoid punishment teaches nothing about the socieatal expectation of&#xA;appropriate behavior but rather puts them in a position of just trying to avoid&#xA;something uncomfortable. That doesn&amp;rsquo;t raise them towards something good, it&#xA;only teaches them to avoid something else.&lt;/p&gt;&#xA;&lt;p&gt;If instead my children understand &lt;strong&gt;that it is important&lt;/strong&gt; to be a disciplined&#xA;human, it fosters a relatonship of help and love between us. My job isn&amp;rsquo;t to&#xA;punish my kids for misbehaving, it&amp;rsquo;s to raise them to be disciplined,&#xA;honorable, well-meaning people in a society. If I&amp;rsquo;m their teacher and guide&#xA;then that journey is filled with learning and love. If I only arbitrate justice&#xA;through negative consequences and punishment, then what room is there in their&#xA;hearts to love me as their dad if they&amp;rsquo;re always afraid I&amp;rsquo;m going to punish&#xA;them for something?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-13 Notes</title>
    <id>https://pype.dev/2026-02-13-notes/</id>
    <updated>2026-02-13T04:27:04Z</updated>
    <published>2026-02-13T04:27:04Z</published>
    <link href="https://pype.dev/2026-02-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-12-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-12-notes]]&#xA;&#xA;- [[consequences-discipline-and-punishment]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Ridiculous Blessing of the Lord</title>
    <id>https://pype.dev/the-ridiculous-blessing-of-the-lord/</id>
    <updated>2026-02-12T04:25:38Z</updated>
    <published>2026-02-12T04:25:38Z</published>
    <link href="https://pype.dev/the-ridiculous-blessing-of-the-lord/" rel="alternate" type="text/html"></link>
    <summary type="text">I went to sit down this morning with a cup of coffee and do a meditation like I try to do at least a few times a week. I meditate on the Bible, on God&#39;s word...</summary>
    <content type="text">&#xA;I went to sit down this morning with a cup of coffee and do a meditation like I&#xA;try to do at least a few times a week. I meditate on the Bible, on God&#39;s word&#xA;because I believe it is God&#39;s word - and what a shallow belief it&#39;d be if I&#xA;knew nothing about the Word. For the last few years this has been the normal&#xA;way I spend time with Jesus, and he has brought comfort and guidance to me, not&#xA;through new knowledge necessarily, but through perspective and wisdom.&#xA;&#xA;This feels almost like a lazy way out of hardened theological study, a practice&#xA;I hope to come back to before too long, but through semi-regular reflection,&#xA;meditation, and writing Jesus has done a lot of good to my heart.&#xA;&#xA;I hope it wouldn&#39;t take years of the Lord&#39;s work on my heart to recognize the&#xA;blessing in my life, but left to my own devices I certainly look at what he&#39;s&#xA;given me and still desire more. So, that wish is certainly nothing more than a&#xA;fancy - and praise God for that, because it only further shows my need for him.&#xA;He works on me every day and by God&#39;s grace the blessings in my life are pretty&#xA;flipping clear.&#xA;&#xA;The passage I was going to meditate on this morning was 2 Corinthians 1:5&#xA;&#xA;!!! note &#34;2 Corinthians 1:5&#34;&#xA;&#xA;    For just as the sufferings of Christ overflow to us, thus through Christ our comfort overflows also.&#xA;&#xA;By God&#39;s grace, &#34;suffering&#34;&#34; isn&#39;t something I feel very &#34;connected to&#34; - it&#39;s&#xA;not something I feel a deep current need to meditate on (right now). I have been&#xA;brought through many trials, just like a lot of people, and my story isn&#39;t full&#xA;of only stupendous highs, but I do feel like it&#39;s a bit easier for me today to&#xA;resonate with Paul&#39;s words in Romans 8.&#xA;&#xA;!!! note &#34;Romans 8:18&#34;&#xA;&#xA;    For I consider that the sufferings of the present time are not worthy to be compared with the glory that is about to be revealed to us.&#xA;&#xA;In God&#39;s good grace on my life he is showing me day by day the glory that will&#xA;be revealed. He shows me through daily blessing of work - where my family is&#xA;more-than-provided for via gifts and talents he&#39;s given me. He shows me through&#xA;my family, who love me in my mistakes and celebrate my wins. He shows me&#xA;through my wife specifically, who wants my holiness more than my happiness but&#xA;in that support she often increases both.&#xA;&#xA;There are sufferings in my life that Jesus has used as a means to bring comfort&#xA;to others - I think that&#39;s one of the points of the larger 2 Corinthians&#xA;passage. However, in that same breath in the quietness of my office with this&#xA;cup of mushroom-coffee, I can say that the sufferings he&#39;s brought me through&#xA;pale in comparison to just the glory he has already revealed to me, and that&#xA;means the glory &#34;that is about to be revealed&#34; can be only greater.&#xA;&#xA;The blessing of the Lord on my life and family is beyond insane. And my prayer&#xA;is just that I (and my family) would see it. This is on my mind because of a&#xA;simple event the other day - an interview and job-offer. I didn&#39;t take this&#xA;job, if you&#39;re new here I&#39;m in [[cat-autonomy-2-0]] (a story of its own filled&#xA;with divine grace and provision). However, getting a job isn&#39;t exactly an easy&#xA;thing right now - and in the Lord&#39;s blessing on my life I&#39;ve had multiple&#xA;opportunities. I mentioned the offer to my wife and her only response was &#34;The&#xA;Lord is too good to us&#34;. And she&#39;s right - he is.&#xA;&#xA;Praise God for blessings, and praise him for sufferings. I pray today for&#xA;myself he keeps my eyes and heart focused on what I can do with excellence and&#xA;for his glory. I also pray for continued blessing and favor - it isn&#39;t a sin to&#xA;want things to be going well... May God bring peace and favor to anyone reading&#xA;this - favor through adoption and peace through the strength and power of the&#xA;creator-God.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-12 Notes</title>
    <id>https://pype.dev/2026-02-12-notes/</id>
    <updated>2026-02-12T04:19:24Z</updated>
    <published>2026-02-12T04:19:24Z</published>
    <link href="https://pype.dev/2026-02-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-10-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-10-notes]]&#xA;&#xA;- [[the-ridiculous-blessing-of-the-lord]]&#xA;- updated [[kubernetes-external-secrets-operator]] a little bit - it&#39;s not a&#xA;  tutorial, it&#39;s just a high level demo but it needed some more comments to keep&#xA;  the expectations of the post in check&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-10 Notes</title>
    <id>https://pype.dev/2026-02-10-notes/</id>
    <updated>2026-02-10T20:00:16Z</updated>
    <published>2026-02-10T20:00:16Z</published>
    <link href="https://pype.dev/2026-02-10-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-07-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-07-notes]]&#xA;&#xA;- [x] [[cat-autonomy-2-0]]&#xA;- [x] [[kubernetes-external-secrets-operator]]&#xA;  - [github repo](https://github.com/pypeaday/blog-kubernetes-external-secrets-operator-demo)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>docker</title>
    <id>https://pype.dev/docker/</id>
    <updated>2026-02-10T07:50:30Z</updated>
    <published>2026-02-10T07:50:30Z</published>
    <link href="https://pype.dev/docker/" rel="alternate" type="text/html"></link>
    <summary type="text">docker - container runtime</summary>
    <content type="html">&lt;p&gt;docker - container runtime&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>helm</title>
    <id>https://pype.dev/helm/</id>
    <updated>2026-02-10T07:50:03Z</updated>
    <published>2026-02-10T07:50:03Z</published>
    <link href="https://pype.dev/helm/" rel="alternate" type="text/html"></link>
    <summary type="text">helm - package manager for k8s</summary>
    <content type="html">&lt;p&gt;helm - package manager for k8s&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>kubectl</title>
    <id>https://pype.dev/kubectl/</id>
    <updated>2026-02-10T07:49:52Z</updated>
    <published>2026-02-10T07:49:52Z</published>
    <link href="https://pype.dev/kubectl/" rel="alternate" type="text/html"></link>
    <summary type="text">kubectl - canonically pronouned kube-control</summary>
    <content type="html">&lt;p&gt;kubectl - canonically pronouned kube-control&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>kind</title>
    <id>https://pype.dev/kind/</id>
    <updated>2026-02-10T07:49:21Z</updated>
    <published>2026-02-10T07:49:21Z</published>
    <link href="https://pype.dev/kind/" rel="alternate" type="text/html"></link>
    <summary type="text">kind - kubernetes in docker</summary>
    <content type="html">&lt;p&gt;kind - kubernetes in docker&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Kubernetes External Secrets Operator</title>
    <id>https://pype.dev/kubernetes-external-secrets-operator/</id>
    <updated>2026-02-10T07:48:34Z</updated>
    <published>2026-02-10T07:48:34Z</published>
    <link href="https://pype.dev/kubernetes-external-secrets-operator/" rel="alternate" type="text/html"></link>
    <summary type="text">I wanted to put a short demo together of using External Secrets Operator (ESO) to expose secrets from a vault (like Hashicorp Vault, AWS Secrets Manager,...</summary>
    <content type="text">&#xA;I wanted to put a short demo together of using External Secrets Operator (ESO)&#xA;to expose secrets from a vault (like Hashicorp Vault, AWS Secrets Manager, etc)&#xA;to services running in kubernetes&#xA;&#xA;Demo code is [here in this github repo](https://github.com/pypeaday/blog-kubernetes-external-secrets-operator-demo)&#xA;&#xA;This post is a high level overview of the components, see the repo for the full example.&#xA;&#xA;## Setup&#xA;&#xA;- [[docker]] for containerized development&#xA;- [[kind]] for setting up a quick cluster&#xA;- [[kubectl]] for accessing the cluster&#xA;- [[helm]] for installing ArgoCD and ESO&#xA;&#xA;- and then [justfile](https://github.com/casey/just) is there to wrap the commands to easier execution&#xA;&#xA;## Step 0 - Vault&#xA;&#xA;- for the demo we&#39;ll setup Hashicorp Vault in docker compose to easily bring it&#xA;  up and down&#xA;- and the init-script is in the repo - it uses curl to make some secrets in&#xA;  vault that we&#39;ll reference later&#xA;&#xA;```yml&#xA;services:&#xA;  vault:&#xA;    image: hashicorp/vault:1.18&#xA;    container_name: vault&#xA;    ports:&#xA;      - &#34;58200:8200&#xA;    environment:&#xA;      VAULT_DEV_ROOT_TOKEN_ID: root&#xA;      VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8200&#xA;    volumes:&#xA;      - vault-data:/vault/file&#xA;    cap_add:&#xA;      - IPC_LOCK&#xA;    command: server -dev -dev-root-token-id=root&#xA;&#xA;volumes:&#xA;  vault-data:&#xA;```&#xA;&#xA;- bringing up the vault instance is a simple `docker compose up` (use the just recipes which some `curl` commands for checking status etc.)&#xA;&#xA;```bash&#xA;curl -s http://localhost:58200/v1/sys/health | jq .  # or just vault-status&#xA;{&#xA;  &#34;initialized&#34;: true,&#xA;  &#34;sealed&#34;: false,&#xA;  &#34;standby&#34;: false,&#xA;  &#34;performance_standby&#34;: false,&#xA;  &#34;replication_performance_mode&#34;: &#34;disabled&#34;,&#xA;  &#34;replication_dr_mode&#34;: &#34;disabled&#34;,&#xA;  &#34;server_time_utc&#34;: 1770893657,&#xA;  &#34;version&#34;: &#34;1.18.5&#34;,&#xA;  &#34;enterprise&#34;: false,&#xA;  &#34;cluster_name&#34;: &#34;vault-cluster-acfb9930&#34;,&#xA;  &#34;cluster_id&#34;: &#34;4d9162f4-e501-371b-7f94-bd60052b40a3&#34;,&#xA;  &#34;echo_duration_ms&#34;: 0,&#xA;  &#34;clock_skew_ms&#34;: 0,&#xA;  &#34;replication_primary_canary_age_ms&#34;: 0&#xA;}&#xA;```&#xA;&#xA;## Step 1 - App&#xA;&#xA;- We need an app that requires secrets&#xA;- app code in repo, essentially it&#39;s a python webserver to show the vault&#xA;  values (obviously this would expose real secrets so it&#39;s just a demo)&#xA;- Below is one of the endpoints in the vibe-coded app, just to illustrate that&#xA;  we&#39;re going to give secrets to the app as environment variables (or as mounted&#xA;  files!)&#xA;- In the repo, the app is included and there&#39;s a `just build` which builds the docker image&#xA;- There is also `just deploy` which handles loading the image into `kind`&#39;s image cache&#xA;&#xA;```py&#xA;&#xA;# example route from demo-app - see git repo&#xA;@app.get(&#34;/env&#34;, response_class=HTMLResponse)&#xA;def show_env():&#xA;    # ESO brings Vault secrets into environment variables&#xA;    env_vars = dict(os.environ)&#xA;&#xA;    # Sort by category, then by key&#xA;    sorted_items = sorted(env_vars.items(), key=lambda x: (classify_env(x[0]), x[0]))&#xA;&#xA;    cards = &#34;&#34;.join(create_card(k, v) for k, v in sorted_items)&#xA;&#xA;    secret_count = sum(1 for k in env_vars if k in SECRET_KEYS)&#xA;    config_count = sum(1 for k in env_vars if k in CONFIG_KEYS)&#xA;    system_count = len(env_vars) - secret_count - config_count&#xA;&#xA;    html = HTML_TEMPLATE.format(&#xA;        cards=cards,&#xA;        secret_count=secret_count,&#xA;        config_count=config_count,&#xA;        system_count=system_count,&#xA;    )&#xA;&#xA;    return HTMLResponse(content=html)&#xA;&#xA;def read_mounted_files(directory: str) -&gt; dict:&#xA;    &#34;&#34;&#34;Read all files from a mounted directory.&#34;&#34;&#34;&#xA;    files_data = {}&#xA;    if os.path.exists(directory) and os.path.isdir(directory):&#xA;        for filename in os.listdir(directory):&#xA;            filepath = os.path.join(directory, filename)&#xA;            if os.path.isfile(filepath):&#xA;                try:&#xA;                    with open(filepath, &#34;r&#34;) as f:&#xA;                        files_data[filename] = f.read().strip()&#xA;                except Exception as e:&#xA;                    files_data[filename] = f&#34;&lt;Error reading file: {e}&gt;&#34;&#xA;    return files_data&#xA;&#xA;```&#xA;&#xA;## Step 2 - Cluster&#xA;&#xA;- use `kind` to bring up a cluster&#xA;- this will start a few docker containers to act as your control-plane and workers&#xA;&#xA;```yml&#xA;# kind-config.yml&#xA;kind: Cluster&#xA;apiVersion: kind.x-k8s.io/v1alpha4&#xA;name: eso-demo&#xA;nodes:&#xA;  - role: control-plane&#xA;    extraPortMappings:&#xA;      - containerPort: 30080&#xA;        hostPort: 58080&#xA;        protocol: TCP&#xA;  - role: worker&#xA;```&#xA;&#xA;```&#xA;kind create cluster --config kind-config.yaml --name eso-demo&#xA;```&#xA;&#xA;## Step 3 - External Secrets Operator&#xA;&#xA;- installed with [[helm]] from the official helm chart&#xA;- NOTE: this is the Operator, not the secrets... this is the thing which goes&#xA;  to the secrets backend and creates kubernetes secrets&#xA;&#xA;```&#xA;helm repo add external-secrets https://charts.external-secrets.io 2&gt;/dev/null || true&#xA;helm repo update&#xA;helm install external-secrets external-secrets/external-secrets \&#xA;  --namespace external-secrets \&#xA;  --create-namespace \&#xA;  --wait&#xA;```&#xA;&#xA;In the repo this is mostly `just eso-install`&#xA;&#xA;## Step 3.5 - Secretstore&#xA;&#xA;- You need a `clustersecretstore` to be the place that ESO puts secrets&#xA;&#xA;```&#xA;apiVersion: external-secrets.io/v1&#xA;kind: ClusterSecretStore&#xA;metadata:&#xA;  name: vault-backend&#xA;spec:&#xA;  provider:&#xA;    vault:&#xA;      server: &#34;http://10.10.0.1:58200&#34;&#xA;      path: &#34;secret&#34;&#xA;      version: &#34;v2&#34;&#xA;      auth:&#xA;        tokenSecretRef:&#xA;          name: vault-token&#xA;          key: token&#xA;          namespace: external-secrets&#xA;&#xA;```&#xA;&#xA;## Step 4 - Secrets&#xA;&#xA;- Secrets go in the `clustersecretstore`&#xA;  - in this example it&#39;s called &#39;vault-backend&#39;&#xA;- In the demo we can just `kubectl apply -f &lt;manifest&gt;` to deploy the secret to&#xA;  the cluster&#xA;- In practice this should be handled by something more mature than raw-doggin&#xA;  kubectl commands&#xA;&#xA;```yml&#xA;# manifests/external-secrets.yml&#xA;---&#xA;apiVersion: external-secrets.io/v1&#xA;kind: ExternalSecret&#xA;metadata:&#xA;  name: demo-app-secrets&#xA;  namespace: default&#xA;spec:&#xA;  refreshInterval: &#34;10s&#34;&#xA;  secretStoreRef:&#xA;    kind: ClusterSecretStore&#xA;    name: vault-backend&#xA;  target:&#xA;    name: demo-app-secrets&#xA;    creationPolicy: Owner&#xA;  data:&#xA;    - secretKey: DATABASE_PASSWORD&#xA;      remoteRef:&#xA;        key: secret/data/demo-app/secrets&#xA;        property: database_password&#xA;    - secretKey: API_KEY&#xA;      remoteRef:&#xA;        key: secret/data/demo-app/secrets&#xA;        property: api_key&#xA;```&#xA;&#xA;## Step 4.1 - Files&#xA;&#xA;- ESO supports mounting files to containers as well through special `ExternalSecret` resources&#xA;- One of the example seecrets is a TLS certificate&#xA;&#xA;```yml&#xA;# manifests/external-secrets-files.yml&#xA;---&#xA;# File-based ExternalSecret for TLS certificates&#xA;# These will be mounted as files in /etc/secrets/&#xA;apiVersion: external-secrets.io/v1&#xA;kind: ExternalSecret&#xA;metadata:&#xA;  name: demo-app-tls-files&#xA;  namespace: default&#xA;spec:&#xA;  refreshInterval: &#34;10s&#34;&#xA;  secretStoreRef:&#xA;    kind: ClusterSecretStore&#xA;    name: vault-backend&#xA;  target:&#xA;    name: demo-app-tls-files&#xA;    creationPolicy: Owner&#xA;    # Template to ensure proper file formatting&#xA;    template:&#xA;      type: Opaque&#xA;      data:&#xA;        tls.crt: &#34;{{ .tls_crt }}&#34;&#xA;        tls.key: &#34;{{ .tls_key }}&#34;&#xA;  data:&#xA;    - secretKey: tls_crt&#xA;      remoteRef:&#xA;        key: secret/data/demo-app/tls-files&#xA;        property: tls.crt&#xA;    - secretKey: tls_key&#xA;      remoteRef:&#xA;        key: secret/data/demo-app/tls-files&#xA;        property: tls.key&#xA;```&#xA;&#xA;- Notice how there&#39;s a `spec.target.template` which templates out the file&#xA;  contents from the secret contents&#xA;&#xA;## Step 5 - Helm Chart&#xA;&#xA;- This isn&#39;t about setting up a helm chart so I&#39;m not going to explain a lot&#xA;  but the working example is simple, not secure, and in the repo&#xA;- The helm chart renders manifests - I&#39;ve paired one down and added comments to&#xA;  the relevant things&#xA;- The thing to just take note of is the reference of the secrets in the `envFrom` section&#xA;&#xA;```yml&#xA;# deployment.yml&#xA;apiVersion: apps/v1&#xA;kind: Deployment&#xA;metadata:&#xA;  annotations:&#xA;    meta.helm.sh/release-name: demo-app&#xA;    meta.helm.sh/release-namespace: default&#xA;  name: demo-app&#xA;  namespace: default&#xA;spec:&#xA;  replicas: 1&#xA;  template:&#xA;    metadata:&#xA;      labels:&#xA;        app.kubernetes.io/instance: demo-app&#xA;        app.kubernetes.io/name: demo-app&#xA;    spec:&#xA;      containers:&#xA;        - envFrom:&#xA;            - secretRef:&#xA;                name: demo-app-secrets # name of example secret from section 4&#xA;            - secretRef:&#xA;                name: demo-app-config # another example in the repo&#xA;          image: demo-app:latest # the image you built and loaded into kind - simple &#39;just&#39; recipe in the repo&#xA;          imagePullPolicy: Never&#xA;          name: demo-app&#xA;          volumeMounts:&#xA;            - mountPath: /etc/secrets&#xA;              name: secrets-volume&#xA;              readOnly: true&#xA;            - mountPath: /etc/config&#xA;              name: configs-volume&#xA;              readOnly: true&#xA;      volumes:&#xA;        - name: secrets-volume&#xA;          secret:&#xA;            defaultMode: 420&#xA;            secretName: demo-app-tls-files # example secret file from section 4.1&#xA;        - name: configs-volume&#xA;          secret:&#xA;            defaultMode: 420&#xA;            secretName: demo-app-config-files&#xA;```&#xA;&#xA;## Step 5.1 - Deploy&#xA;&#xA;- We can deploy the demo-app from the git repo to the cluster&#xA;- For a local demo a few things happen&#xA;  - local image build&#xA;  - loading that image into [[kind]] (`kind` doesn&#39;t have access to your host&#39;s docker image cache, so images need to be loaded into the cluster cache)&#xA;- `just deploy` takes care of this for you, read the recipe in the repo if&#xA;  you&#39;re interested in more there, the focus of this post and example are to&#xA;  briefly show how to use ESO though&#xA;&#xA;## Step 6 - Profit&#xA;&#xA;The example app just displays things that are mounted in - totally vibe-coded&#xA;to illustrate the secrets mounting, not the appropriate way to leak secrets.&#xA;&#xA;![20260210233804_614254b7.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260210233804_614254b7.png)&#xA;&#xA;![20260210233828_19852225.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260210233828_19852225.png)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Cat Autonomy 2.0</title>
    <id>https://pype.dev/cat-autonomy-2-0/</id>
    <updated>2026-02-09T06:07:12Z</updated>
    <published>2026-02-09T06:07:12Z</published>
    <link href="https://pype.dev/cat-autonomy-2-0/" rel="alternate" type="text/html"></link>
    <summary type="text">I wrote about my new role new-job-caterpillar-autonomy a bit a couple weeks ago during an insanely busy time - having just started the role and wrapping up...</summary>
    <content type="text">&#xA;I wrote about my new role [[new-job-caterpillar-autonomy]] a bit a couple weeks&#xA;ago during an insanely busy time - having just started the role and wrapping up&#xA;what ended up being side-work, paired with some sleep-deprived ADHD hyperfocus&#xA;on my new responsibilities and [[nexus]], that post is less of an update and&#xA;more of a mind-dump. This post is meant to be a calmer update about my upcoming&#xA;time with Caterpillar Autonomy.&#xA;&#xA;It starts, like all good stories, with Caterpillar&#39;s RTO (return to office)&#xA;mandate and how it has affected a lot of people negatively (in my opinion). I&#xA;haven&#39;t seen one positive remark about it fromanyone making less than $250k a&#xA;year + Bonus + Equity if you catch my drift...&#xA;&#xA;I know of people who really did lose their jobs at the end of 2025 for refusing&#xA;to move. My story with RTO is covered elsewhere, I&#39;d been blessed with remote&#xA;work and was even secure in a remote position in the face of Caterpillar being&#xA;willing to fire me [[after-exceeding-expectations-for-4-years]].&#xA;&#xA;But time passes and life happens, and the sovereign Lord brought me to this current&#xA;circumstance: where I&#39;m fully committed to Caterpillar Autonomy, and it&#xA;feels weird to say it. I&#39;m going to skip the RTO details, if you know you know.&#xA;Where I&#39;m at right now is on the other side (or very nearly on the other side)&#xA;of a choice I didn&#39;t feel freedom to make because it came from a conviction.&#xA;&#xA;The manager of the group I&#39;m in told me a story about working for another&#xA;mining company, where he was managing mines in the Congo. These mines can be in&#xA;the most remote of remote places on earth - in cultures where human life is&#xA;definitely treated differently than in the first-world midwest USA. Operators of&#xA;these huge mining trucks in these parts of the world can be smoking meth in the&#xA;cabs - which obviously leads to unsafe operation. Safety of the mines&#xA;themselves can be a second-thought as well, they collapse and then the people&#xA;inside have to be excavated out. Sean told me he had come back to work after a&#xA;weekend just to be told, as if it was no big deal, that &#34;Motombu died&#34; and to&#xA;find another operator. Very crass attitude towards human life...&#xA;&#xA;I&#39;m still pretty frustrated at Caterpillar for how they&#39;ve handled RTO (and&#xA;corporitisms like &#34;Caterpillar family&#34; and &#34;we bleed Cat yellow&#34; are&#xA;distracting nonsense), and part of me wants to leave still over the personal&#xA;offence, but Caterpillar will make the safest mining equipment, without a&#xA;doubt. And given that Cat will make the safest equipment then the story I was told and&#xA;the mission I couldn&#39;t help but believe in is that rolling out good autonomy&#xA;software and solutions to these remote mines will save lives.&#xA;&#xA;!!! warning &#34;&#34;&#xA;&#xA;    I&#39;m obviously not like superman or anything, but something feels better about enabling good autonomy rather than supporting an online sales platform, or working for a bank...&#xA;&#xA;I was invited (coerced?) into that mission - and my role in it is enabling the&#xA;Autonomy group to manage data for their software stack. I get to help these&#xA;engineers be experts in the things they&#39;re experts in by offloading some&#xA;operational overhead (data movement, pipelineing, infrastructure and devops,&#xA;etc.) so that they can produce the best autonomy software on the planet.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Arise and Depart</title>
    <id>https://pype.dev/reflection-arise-and-depart/</id>
    <updated>2026-02-07T04:37:12Z</updated>
    <published>2026-02-07T04:37:12Z</published>
    <link href="https://pype.dev/reflection-arise-and-depart/" rel="alternate" type="text/html"></link>
    <summary type="text">Spurgeon&#39;s ** reflection for this morning is Micah 2:10 &#34;Arise, and depart&#34;.</summary>
    <content type="html">&lt;p&gt;Spurgeon&amp;rsquo;s &lt;strong&gt;Morning and Evening&lt;/strong&gt; reflection for this morning is Micah 2:10 &amp;ldquo;Arise, and depart&amp;rdquo;.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;context&lt;/p&gt;&#xA;&lt;p&gt;Typical note about reflections not being deep study. Also noting that Spurgeon&amp;rsquo;s meditations are often about what comes to mind from the words of a verse (or part of it) as opposed to the context of the verse.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Micah 2:10&lt;/p&gt;&#xA;&lt;p&gt;Arise and go,  for this is no resting place,  on account of uncleanness that destroys  with painful destruction.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;So the context of the rest of the verse isn&amp;rsquo;t that consistent with the&#xA;direction of Spurgon&amp;rsquo;s meditation but nonetheless his springboard is good to&#xA;think about&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Someday everyone of us will answer the call to &amp;ldquo;arise and go&amp;rdquo; - death comes for&#xA;us all but death isn&amp;rsquo;t itself an existential end, it is the time to obey the&#xA;Lord. At his word, I will leave the world and go to where he calls me. This is&#xA;true for everyone, it&amp;rsquo;s an inescapable part of the reality that Yahweh has&#xA;created for all Creation.&lt;/p&gt;&#xA;&lt;p&gt;Death fills some with dread, but for the Christian it&amp;rsquo;s the passage to&#xA;eternity. We live (or &amp;ldquo;are to live&amp;rdquo;) in Heaven today - Jesus brought Heaven to&#xA;earth. But his life, death, and resurrection did not &lt;strong&gt;fully&lt;/strong&gt; bring Heaven to&#xA;earth - the melding is happening, the reunification of Heaven and earth as it&#xA;was in Eden is taking place, and when he comes again the kingdom will be&#xA;consummated.&lt;/p&gt;&#xA;&lt;p&gt;So we live unto his Name and glory, because it&amp;rsquo;s the best thing&#xA;for humanity. And at the end of our living on this present earth, God calls&#xA;everyone to the next phase of reality. What awaits those who do not believe?&#xA;and who haven&amp;rsquo;t been chosen? I really wouldn&amp;rsquo;t claim to know concrete facts&#xA;beyond the truth that &amp;ldquo;they are not citizens of heaven, and so they do not live with&#xA;the Lord&amp;rdquo;. But what awaits the Christian? That&amp;rsquo;s a much easier answer to take a&#xA;stand on - those loved by Jesus are not left dead in the cold dark underground,&#xA;we are called to the skies - to glory and to the kingdom.&lt;/p&gt;&#xA;&lt;p&gt;I think this thought of future unification with the Lord, in a newly&#xA;consummated kingdom, when Death is dead and there is no more competition&#xA;amongst the gods, when all Creation is in right relationship with the King -&#xA;this thought should bring joy and anticipation to the Christian, to me.&lt;/p&gt;&#xA;&lt;p&gt;Let me work for the glory of God today, with the right perspective that at any&#xA;moment I could be called away from this work (my family, my home, my job, etc.)&#xA;and to the next thing Jesus would have me do. I look forward to the call to&#xA;&amp;ldquo;Arise and go&amp;rdquo; and I pray that the future hope of the Kingdom fills me today&#xA;with joy and motivation to live a godly life and that death never looks like&#xA;anything other than a river to cross with new life on the other side.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-07 Notes</title>
    <id>https://pype.dev/2026-02-07-notes/</id>
    <updated>2026-02-07T04:29:07Z</updated>
    <published>2026-02-07T04:29:07Z</published>
    <link href="https://pype.dev/2026-02-07-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-06-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-06-notes]]&#xA;&#xA;- [[reflection-arise-and-depart]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-06 Notes</title>
    <id>https://pype.dev/2026-02-06-notes/</id>
    <updated>2026-02-06T20:23:20Z</updated>
    <published>2026-02-06T20:23:20Z</published>
    <link href="https://pype.dev/2026-02-06-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-05-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-05-notes]]&#xA;&#xA;- [[nexus]] updates are that I&#39;m rebuilding now to drop kanboard - it gave me&#xA;  the framework for what I need but it&#39;s too slow&#xA;- my backups have been failing... which means I&#39;ve been failing at&#xA;  observability[ not sure what to do here, but I need to do something&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>AI</title>
    <id>https://pype.dev/ai/</id>
    <updated>2026-02-05T20:58:00Z</updated>
    <published>2026-02-05T20:58:00Z</published>
    <link href="https://pype.dev/ai/" rel="alternate" type="text/html"></link>
    <summary type="text">How do I use AI for my site?</summary>
    <content type="text">&#xA;How do I use AI for my site?&#xA;&#xA;1. Cover images - I generate these with Stable Diffusion running on my desktop, the prompts sometimes comes from basically dropping my blog post into Ollama/Open-WebUI and getting a prompt back to make an image that fits the vibe&#xA;2. Breaking up raw blog posts by heading - AI never writes my posts for me, but sometimes with longer ramblings I will have an agent just break up by new lines with headings to help me group the thoughts together&#xA;3. Site asthetic - my site is built with [markata](https://markata.dev) but the templates (jinja, html, css) I have given almost fully over to AI because web-design isn&#39;t something I&#39;m deeply interested in, but I like to write and the agents have helped me make my blog look more personal (I recognize some people might take offense to this - we can happily fight about it over a drink sometime :p)&#xA;&#xA;My main thing to say is that I don&#39;t ever intend to put AI words in front of another human without full transparency like in [[the-importance-of-nostr-according-to-chatgpt]], but I am using AI to craft my blog and help me organize myself&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Nexus</title>
    <id>https://pype.dev/nexus/</id>
    <updated>2026-02-05T05:31:53Z</updated>
    <published>2026-02-05T05:31:53Z</published>
    <link href="https://pype.dev/nexus/" rel="alternate" type="text/html"></link>
    <summary type="text">Nexus is a task tracker and second-brain for collaborating with AI agents on software development. It keeps project boards, task details, subtasks, daily...</summary>
    <content type="html">&lt;p&gt;Nexus is a task tracker and second-brain for collaborating with AI agents on software development. It keeps project boards, task details, subtasks, daily notes, and Git worktree context together in one system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-nexus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Why Nexus&lt;/span&gt; &lt;a href=&#34;#why-nexus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I built Nexus because I work with AI agents across multiple parallel work streams and need a way to:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Track what agents are working on and have them check-in regularly&lt;/li&gt;&#xA;&lt;li&gt;Capture lightweight memories without forcing everything to become executable work immediately&lt;/li&gt;&#xA;&lt;li&gt;Keep task-to-branch context when starting work&lt;/li&gt;&#xA;&lt;li&gt;Use daily notes inside the same system&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;architecture&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Architecture&lt;/span&gt; &lt;a href=&#34;#architecture&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;Human&#xA;  |&#xA;  +-- Agent Harness (GitHub Copilot CLI)&#xA;  |     +-- Agents (orchestrator + specialists)&#xA;  |     +-- Platform hooks / commands&#xA;  |&#xA;  +-- nexus CLI (PEP 723 single-file script)&#xA;  |     |&#xA;  |     +-- Nexus API (FastAPI, port 8090)&#xA;  |           +-- Nexus DB (Postgres 16 + pgvector)&#xA;  |&#xA;  +-- Go TUI (primary interface)&#xA;  +-- Git (worktrees, branches)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;components&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Components&lt;/span&gt; &lt;a href=&#34;#components&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;core-stack&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Core Stack&lt;/span&gt; &lt;a href=&#34;#core-stack&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nexus API&lt;/strong&gt; — FastAPI REST backend. Projects, tasks, tags, dependencies, comments, and global discoveries. Tasks flow through &lt;code&gt;backlog&lt;/code&gt; → &lt;code&gt;wip&lt;/code&gt; → &lt;code&gt;done&lt;/code&gt; with first-class readiness (&lt;code&gt;is_ready&lt;/code&gt;) and blocking (&lt;code&gt;is_blocked&lt;/code&gt;) markers.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nexus DB&lt;/strong&gt; — Postgres 16 with pgvector for vector storage (future AI memory features).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;nexus CLI&lt;/strong&gt; — PEP 723 single-file Python script. All agent-to-Nexus communication goes through this. JSON output for agents, human-readable for humans.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Go TUI&lt;/strong&gt; — Terminal UI, the primary interface for dayFalse-to-day task management.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;agent-integration&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Agent Integration&lt;/span&gt; &lt;a href=&#34;#agent-integration&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Copilot CLI plugin&lt;/strong&gt; (&lt;code&gt;copilot/&lt;/code&gt;) — GitHub Copilot integration with custom skills:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus&lt;/code&gt; — Core task and lifecycle commands&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus-specialist&lt;/code&gt; — Task-specific expertise&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus-delegation&lt;/code&gt; — Delegation patterns&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;daily-summary&lt;/code&gt; — Daily progress summaries&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hooks&lt;/strong&gt; — Session lifecycle hooks that sync state between Nexus and agent sessions:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;session-start.sh&lt;/code&gt; — Initialize worktree metadata&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;session-end.sh&lt;/code&gt; — Archive session state&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;session-sync.sh&lt;/code&gt; — Periodic checkpoint&lt;/li&gt;&#xA;&lt;li&gt;Liveness probes for agent monitoring&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;task-lifecycle&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Task Lifecycle&lt;/span&gt; &lt;a href=&#34;#task-lifecycle&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;start → implement → review → merge → done → finish&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus start &amp;lt;id&amp;gt;&lt;/code&gt; — Creates &lt;code&gt;nx-&amp;lt;id&amp;gt;&lt;/code&gt; worktree from base branch&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus review &amp;lt;id&amp;gt; --verdict PASS&lt;/code&gt; — Authoritative merge gate&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus merge &amp;lt;id&amp;gt;&lt;/code&gt; — Rebases and merges &lt;code&gt;--no-ff&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus done &amp;lt;id&amp;gt;&lt;/code&gt; — Marks task complete&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus finish &amp;lt;id&amp;gt;&lt;/code&gt; — Removes worktree and deletes branch&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;discoveries-second-brain&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Discoveries (Second Brain)&lt;/span&gt; &lt;a href=&#34;#discoveries-second-brain&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Discoveries are durable memory captures that may be global, project-linked, or task-linked. They&amp;rsquo;re &lt;strong&gt;not&lt;/strong&gt; executable work — they don&amp;rsquo;t get branches, worktrees, or the full task lifecycle. When ready, they can be promoted into tasks.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus discovery inbox&lt;/code&gt; — Triage view for new/promotable/stale discoveries&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus discovery list&lt;/code&gt; — Browse all discoveries&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus remember &amp;quot;...&amp;quot;&lt;/code&gt; — Lightweight capture&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nexus discovery promote &amp;lt;id&amp;gt;&lt;/code&gt; — Convert to executable task&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;key-features&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Key Features&lt;/span&gt; &lt;a href=&#34;#key-features&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Task tracking&lt;/strong&gt; — Projects, tasks, subtasks, tags, dependencies, comments&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Readiness tracking&lt;/strong&gt; — Explicit &lt;code&gt;is_ready&lt;/code&gt; marker for backlog refinement&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;First-class blocking&lt;/strong&gt; — &lt;code&gt;is_blocked&lt;/code&gt; + &lt;code&gt;blocked_reason&lt;/code&gt; with DB-enforced invariants&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Discoveries&lt;/strong&gt; — Lightweight memory that doesn&amp;rsquo;t force work creation&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Typed memory links&lt;/strong&gt; — Graph-style relationships between discoveries, tasks, projects, and Copilot sessions&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Worktree management&lt;/strong&gt; — Automatic branch/worktree creation and cleanup&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Session persistence&lt;/strong&gt; — Agents can persist state to DB for cross-session continuity&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Archive + restore&lt;/strong&gt; — Hygiene mechanism for discoveries (archived items stay durable but hidden from active views)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multi-timezone&lt;/strong&gt; — Daily notes default to &lt;code&gt;America/Chicago&lt;/code&gt;, configurable via &lt;code&gt;NEXUS_TIMEZONE&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;scope&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Scope&lt;/span&gt; &lt;a href=&#34;#scope&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Nexus is scoped to &lt;strong&gt;one machine&lt;/strong&gt; per deployment. No remote centralization planned. The client runs per-machine against a local Postgres instance.&lt;/p&gt;&#xA;&lt;p&gt;Rationale: If you need cross-team collaboration and centralized tracking, existing solutions (GitHub Issues, Jira, Azure DevOps + MCP servers) already solve this well. Nexus focuses on the individual developer working with AI agents on a single workstation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;future-wants&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Future Wants&lt;/span&gt; &lt;a href=&#34;#future-wants&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Daemon agent&lt;/strong&gt; — Watch task tracker for new issues, spawn agent sessions in appropriate worktrees&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Daily reporting&lt;/strong&gt; — Ask an agent what all the other agents did today using Nexus as source of truth&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;EOY goal tracking&lt;/strong&gt; — Agent summarization by Quarter or smart goal category&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;EKS deployment&lt;/strong&gt; — Deploy API + Postgres to EKS to run more parallel agent stacks (work use case)&lt;/li&gt;&#xA;&lt;li&gt;A canvas-style front-end that allows me to better visualize and plan out task-dependencies&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-05 Notes</title>
    <id>https://pype.dev/2026-02-05-notes/</id>
    <updated>2026-02-05T05:31:31Z</updated>
    <published>2026-02-05T05:31:31Z</published>
    <link href="https://pype.dev/2026-02-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-02-03-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-02-03-notes]]&#xA;&#xA;- I&#39;m continuing to think about [[nexus]]&#xA;&#xA;  - it&#39;s for me, not thinking about other people collaborating on issues&#xA;  - it has many purposes now, or could have many depending on how I decide to use it&#xA;&#xA;- With AI continuing to improve, I don&#39;t think there&#39;s going to be room for Notifiq to really take off as any kind of paid-for service, so as work might slow down from starting my new job I&#39;ll probably revisit it some, rip out the SaaSy parts (stripe, etc.) and put it on github... maybe not github... I&#39;m not sure - I think it&#39;s cool but I don&#39;t necessarily want to feed training data with my ideas for free, ya know?&#xA;&#xA;- added [[ai]] slash page to mention some of my AI usage for the blog&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Learning How To Agent</title>
    <id>https://pype.dev/learning-how-to-agent/</id>
    <updated>2026-02-03T05:50:33Z</updated>
    <published>2026-02-03T05:50:33Z</published>
    <link href="https://pype.dev/learning-how-to-agent/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using AI tools for codegen for a few years now, but not super heavily. I either use the in-line copilot stuff, which is like LSP on seteroids, or I...</summary>
    <content type="text">&#xA;## Introduction &amp; Background&#xA;&#xA;I&#39;ve been using AI tools for codegen for a few years now, but not super&#xA;heavily. I either use the in-line copilot stuff, which is like LSP on&#xA;seteroids, or I have gone all the way to the other side of full on vibecoding&#xA;with Windsurf. That&#39;s been fun enough, but not super fulfilling and at the end&#xA;of that I either have a simple webapp that does what I want but I don&#39;t&#xA;understand, or else a half-broken thing I tried to understand but couldn&#39;t&#xA;prompt in the right direction.&#xA;&#xA;!!! note &#34;One Caveat&#34;&#xA;&#xA;    My one caveat with Windsurf, which is a full IDE that I don&#39;t have a lot of comfortable navigation in due to all the Cascade keybindings clobbaring my own keymaps - is that with a HEAVY spec, it&#39;s done will with the Claude models at implementing a real idea I have. It&#39;s closer to vibe-engineering than vibe-coding, but that&#39;s my only instance, the rest of my Windsurf usage is &#34;make me a cool app - no mistakes&#34;&#xA;&#xA;This year it feels like some tools exploded and&#xA;I mentioned this in [[new-job-caterpillar-autonomy]]. I&#39;ve been using&#xA;[opencode](https://opencode.ai) a lot over the last few weeks and have iterated&#xA;many times already on a system of work that I&#39;m trying to lean into for&#xA;improving my efficiency.&#xA;&#xA;## The Problem Space&#xA;&#xA;My desire for a great Developer Experience is years old now, shout out to&#xA;ThePrimeagen for his [FEM&#xA;course](https://frontendmasters.com/courses/developer-productivity-v2/) and&#xA;[Waylon Walker](https://waylonwalker.com) for being a constant source of&#xA;encouragement to be the best developer I can be. I sometimes (often) get&#xA;tunnel-visioned on developer-productivity initiatives and lose the forest&#xA;through the trees when ironing out a workflow - generally to find out I way&#xA;over complicated the solution OR worse, started solving a problem I don&#39;t even&#xA;have.&#xA;&#xA;## First Attempt: Local Progress Tracker&#xA;&#xA;Well that&#39;s where I&#39;ve been for a few weeks... I&#39;m building Nexus, my&#xA;second-brain at work to collaborate with agents on the truckload of stuff I&#39;m&#xA;expected to get done. For a while now I&#39;ve had a &#34;working-notes&#34; repo, which is&#xA;basically a blog, built with markata and navigated via markdown-lsp, where I do&#xA;like what I do here - take daily notes, track projects and status, and it gets&#xA;built into a nice little website I can reference with my boss.&#xA;&#xA;Now that we have copilot in full-swing, I&#39;m trying to integrate agents a bit&#xA;more. Opencode has made this so nice - so many tools and modes of interaction,&#xA;highly customizable interface but also an amazing default experience... So I&#xA;was trying to lean into using agents and subagents for more work I started down&#xA;the path of building out a progress tracker. I started with a simple &#34;skill&#34;&#xA;that told the agent to put some info into a sqlite file, and even create the&#xA;file and schema based on the work. This worked fine, but was specific to each&#xA;repo (and actually each worktree I was in) and it was hard for me to get&#xA;visibility into all the work my fleet of agents was doing. Now that&#39;s actually&#xA;problem 1 - I don&#39;t have a fleet of agents, I had some terminal sessions going&#xA;with opencode, but I got it in my head that I was going to have an army of&#xA;Claude&#39;s on my computer, constantly and autonomously knocking out tickets and I&#xA;needed to know who was doing what, where, when, and why..&#xA;&#xA;## Nexus V1 &amp; V2: The Over-Engineering Phase&#xA;&#xA;So, I dropped the local &#34;progress tracker&#34; and jumped into a huge FastAPI&#xA;project that I called Nexus. It was a python cli + api, with a server for&#xA;centralized management. It presented a kanban board, had policy gates on&#xA;&#34;plans&#34; being approved before work could start on an Epic (and therefore any&#xA;child tickets). It has worktree tracking and automation, etc. It had a lot...&#xA;it didn&#39;t all work, and it was hard to build the autonomous system... I wanted&#xA;agentic feedback loops where `voidshaper` and I made epic plans for Epics (see the pun?) and then once the Plan was approved `star-commander` comes on the scene and makes tickets or checks tickets, depending on what&#39;s already ready to go it farmed out the work to `starsmith` (and variants for complexity) to build and then automatically calls in `recon-officer` and `qa-engineer` and at the end of it `gatekeeper` came in and&#xA;approved or denied the changes. If denied - automatically start the loop again,&#xA;tracking the work in Nexus, if approved - rebase and merge the branch, clean up&#xA;the worktree, update the ticket, close it, and get working on the next thing&#xA;that opens up. Ticket dependencies were in there, tracking stale agent&#xA;sessions, clever routing of tasks to smaller models where appropriate.... you&#xA;can see that I went too far too fast too hard.&#xA;&#xA;![20260203124603_d5948740.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20260203124603_d5948740.png)&#xA;&#xA;Nexus went through 2 or 3 iterations of this feature set. I was building it with several constraints in mind - specifically at work. 1. rate-limiting on large models (so not just using opus for everything), 2. good stewardship (not burning down cities for docstrings - farm out that work to haiku or a -mini model), 3. Copilot support - even though I like to use opencode, I wanted to supper copilot cli and in vscode as a means to share this with my coworkers who were mostly using vscode, 4. agent sessions were dying so I needed some kind of liveness probe for manual intervention in sessions where maybe the vpn died and the agent lost network... stuff like this was on my mind - but you know what wasn&#39;t? actually doing some work... I was solving problems I don&#39;t have, but were fun to think about.&#xA;&#xA;## The Reality Check&#xA;&#xA;So, what are my problems? I boiled them down to a few things...&#xA;&#xA;1. I want to manage my workstreams in workspaces - folders on my computer where I put git worktrees&#xA;2. I want varying levels of ai automation in my workflows... some things could be handled by an agent fully autonmously, but most things I&#39;m at least paired up, reviewing diffs still, doing research while working, etc.&#xA;3. In those varying levels of automation, I wanted the same amount of task tracking to a centralized location&#xA;&#xA;And after 2 weeks of ADHD-driven hyper focus, and many iterations on Nexus,&#xA;then Nexus V2.... what happened is that Nexus V2 died, and we say long live&#xA;Nexus V3!&#xA;&#xA;## Nexus V3: The Pragmatic Pivot&#xA;&#xA;Nexus V3 is the same idea, but different approach... I&#39;m leaning into opencode&#xA;tooling specifically, dropping my care to support copilot given the lack of&#xA;features. I&#39;m using a few opencode [plugins](https://opencode.ai/docs/plugins/)&#xA;([opencode-notify](https://github.com/kdcokenny/opencode-notify) and&#xA;[opencode-background-agents](https://github.com/kdcokenny/opencode-background-agents)&#xA;and a few [commands](https://opencode.ai/docs/commands/). Instead of building&#xA;my own tracker, I&#39;m using [kanboard](https://kanboard.org/) because it&#39;s&#xA;basically a feature-complete agile/sprint/kanban board that I use at home, has&#xA;a simple plugin ecosystem for light customization, and solves practically every&#xA;status-tracking problem I tried to build from the ground up initially - ticket&#xA;dependencies/linkages, actions to change ticket colors for a simple intuitive&#xA;UI based on state, easy columns and tagging configuration, a simple API and&#xA;there&#39;s even an [mcp server](https://github.com/bivex/kanboard-mcp).&#xA;&#xA;So, I&#39;ve given up on the full automation for now, although&#xA;[opencode-pilot](https://github.com/athal7/opencode-pilot) looks VERY PROMISING&#xA;for this in the future. Today though, through some simple commands to give to&#xA;agents for updating kanboard, I manually put them in worktrees, and they get to&#xA;work - the tracking and human-in-the-loop model is going well for the work I&#xA;need done.&#xA;&#xA;## Lessons Learned&#xA;&#xA;I learned and relearned plenty of lessons on this over the last 2 weeks... Data&#xA;models matter more than almost anything, well-defined workflows are required if&#xA;you want agents to help you iterate, and not everything has to be a product...&#xA;That last one&#39;s personal, but every time I have an idea I **think** is good,&#xA;I&#39;m sure it&#39;ll be something to share, but a good lesson for me is to just build&#xA;the things I need for me, and **eventually** maybe it can be cleaned up to&#xA;share, but when I start building something with anyone other than **me** in&#xA;mind, I&#39;m in for a long hard journey&#xA;&#xA;## Current State &amp; Future&#xA;&#xA;So what&#39;s the summary? I don&#39;t think I know how to agent super well yet - but&#xA;I&#39;m trying to get better to stay on the forefront of my co-workers who I see&#xA;using AI in simple and sometimes scary ways&#xA;&#xA;!!! danger &#34;Copilot x sudo&#34;&#xA;&#xA;    Do not give copilot `sudo` on your CI server and say &#34;fix my problem&#34;... are you retarded???&#xA;&#xA;I am not going hardcore with [ralph&#xA;wiggum](https://awesomeclaude.ai/ralph-wiggum) or&#xA;[gastown](https://github.com/steveyegge/gastown) - although those inspired&#xA;Nexus v1 and v2, but I am dialing in my agentic workflow with some simple&#xA;specialized agents, farming out work to subagents for context management,&#xA;planning ahead of time to put appropriate context in a ticket, and getting&#xA;close to having agents check out tickets, make worktrees, and do simple work by&#xA;themselves (this was working in Nexus V2 but only intermittenly).&#xA;&#xA;Someday I&#39;ll open-source Nexus and share the configuration and workflow, for&#xA;now it&#39;s private as I&#39;m actually using it to build out what I want rather than&#xA;trying to recreate gastown with a cool space theme.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-02-03 Notes</title>
    <id>https://pype.dev/2026-02-03-notes/</id>
    <updated>2026-02-03T05:47:11Z</updated>
    <published>2026-02-03T05:47:11Z</published>
    <link href="https://pype.dev/2026-02-03-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-01-31-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-01-31-notes]]&#xA;&#xA;- I am working a lot... 3 hours today and it&#39;s 545 AM... probably 23 hours into the week already since Sunday. Hoping this cools off very very soon&#xA;- In the meantime I keep meaning to write some more but I just start working right away, so I&#39;ll put some thoughts together on how I&#39;ve been working&#xA;&#xA;- [[learning-how-to-agent]]&#xA;- [handy](https://github.com/cjpais/Handy) - I started using this to do STT on my work Mac - let&#39;s me talk to neovim and opencode nearly perfectly... worked right away, excited to explore vocally conversing with my agents now!&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Revel in imparted righteousness</title>
    <id>https://pype.dev/revel-in-imparted-righteousness/</id>
    <updated>2026-01-31T05:45:42Z</updated>
    <published>2026-01-31T05:45:42Z</published>
    <link href="https://pype.dev/revel-in-imparted-righteousness/" rel="alternate" type="text/html"></link>
    <summary type="text">Spurgeon&#39;s Morning and Evening today is from Jeremiah 23:6.</summary>
    <content type="html">&lt;p&gt;Spurgeon&amp;rsquo;s Morning and Evening today is from Jeremiah 23:6.&lt;/p&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;p&gt;Again with these reflections, I&amp;quot;m not an OT scholar and I don&amp;rsquo;t know, or&#xA;didn&amp;rsquo;t do a lot of search on, the context of the passage. This isn&amp;rsquo;t&#xA;educational, this if a reflection on what God brings to mind through his Word&#xA;and my time with him, not teaching about the historical context of where the&#xA;words in Jeremiah 23 actually affect the story&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Jeremiah 23:6&lt;/p&gt;&#xA;&lt;p&gt;In his days Judah will be saved, and Israel will dwell securely. And this&#xA;is the name by which he will be called: ‘The Lord is our righteousness.’&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-lord-is-our-righteousness&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Lord is our righteousness&lt;/span&gt; &lt;a href=&#34;#the-lord-is-our-righteousness&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a lot of tension in the details of the story of the world in how humans&#xA;and God relate to each other. On one hand, God created everything, and he&#xA;created humans with a unique purpose to be his seen-imagers in the physical&#xA;world who carry out his will. On the other hand, humans take that position of&#xA;privilege and often destroy the world in our sin and dismay. The theology&#xA;surrounding this tension is the thing that can affect the Christian&amp;rsquo;s daily&#xA;life&amp;hellip; As I walk through the world, am I more aware of my position as God&amp;rsquo;s&#xA;child, with responsibility to bear his Name and steward the earth, or am I more&#xA;aware of my sin and the fact that I often make choices Jesus wouldn&amp;rsquo;t be proud&#xA;of? Both things are true, but where I put my mind and heart drives if I have a&#xA;contented smile on my face or if my brow is sweaty and scunched up in&#xA;frustration.&lt;/p&gt;&#xA;&lt;p&gt;I think that if we somehow filtered our view to all &amp;ldquo;true Christians&amp;rdquo; we&amp;rsquo;d see&#xA;that a majority of them lean in on emphasizing their sin because it is the&#xA;thing that makes Jesus&amp;rsquo; work necessary - it is the un-overcomable thing that we&#xA;have to be saved from and Glory to God! for saving us. But on the daily, not&#xA;putting equal emphasis on the next step of the story, which is that in God&amp;rsquo;s&#xA;saving he imparts the righteousness of Jesus right onto us, is a disservice to&#xA;us as God&amp;rsquo;s children.&lt;/p&gt;&#xA;&lt;p&gt;I want my kids to be proud and secure in their name and place as my kids. I&#xA;don&amp;rsquo;t want them to spend their energy focusing on where they have contributed&#xA;chaos and disorder to my life, I want them to focus on the things they do worth&#xA;being proud of, and there&amp;rsquo;s grace for the rest. I think this must be true of&#xA;the Lord as well - without a doubt I am a sinner and a wretch who, left to my&#xA;own devices, would end up a drunken addict lying in the street somewhere&amp;hellip; but&#xA;why would I &lt;strong&gt;focus&lt;/strong&gt; on that when Yahweh chooses me, imparts Jesus&#39;&#xA;righteousness to me, adopts me as his own! The reality of my sin is reality,&#xA;but the reality of Jesus&amp;rsquo; grace on my life is no less true. Christians&#xA;shouldn&amp;rsquo;t be ignorant of the sin they carry and the choices they make which&#xA;dishonor God, but we also shouldn&amp;rsquo;t be ignorant of the grace God shows to us!&lt;/p&gt;&#xA;&lt;p&gt;I have noticed in my life, as the scales have tipped somewhat in favor of&#xA;focusing &lt;strong&gt;more&lt;/strong&gt; on Yahweh adopting me as opposed to focusing on where I fall&#xA;short of the glory of God, that&amp;rsquo;s it&amp;rsquo;s more natural for me to be joyful about&#xA;almost anything in the world (worth experiencing joy over)&lt;/p&gt;&#xA;&lt;p&gt;May Jesus call you today if you&amp;rsquo;re reading this and he hasnt&amp;rsquo; yet, and if he&#xA;has may joy follow your acknowledgement of your adoption rather than sorrow&#xA;over your previous state. Glory to God in the highest!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-01-31 Notes</title>
    <id>https://pype.dev/2026-01-31-notes/</id>
    <updated>2026-01-31T05:27:34Z</updated>
    <published>2026-01-31T05:27:34Z</published>
    <link href="https://pype.dev/2026-01-31-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-01-23-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-01-23-notes]]&#xA;&#xA;It&#39;s been too long since I&#39;ve written anything or done any reflection. Work has&#xA;been all-consuming. It&#39;s been a whirlwind of a couple weeks, but I&#39;m fully&#xA;recovered from the flu, have a grip on what&#39;s going on at work, and hopefully&#xA;now I can get back into some daily reflections and blogging, while still&#xA;attempting to 10x engineer my way through the issues I&#39;m helping solve at Cat&#xA;&#xA;- [[revel-in-imparted-righteousness]]&#xA;&#xA;- updated [clocks](https://clocks.paynepride.com) for some user-customization&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>New Job - Caterpillar Autonomy</title>
    <id>https://pype.dev/new-job-caterpillar-autonomy/</id>
    <updated>2026-01-26T10:24:54Z</updated>
    <published>2026-01-26T10:24:54Z</published>
    <link href="https://pype.dev/new-job-caterpillar-autonomy/" rel="alternate" type="text/html"></link>
    <summary type="text">In im-back-from-the-dead I mentioned my new role that started this year - it&#39;s a return to Caterpillar Autonomy. I built some data pipelines and junior-grade...</summary>
    <content type="text">&#xA;In [[im-back-from-the-dead]] I mentioned my new role that started this year -&#xA;it&#39;s a return to Caterpillar Autonomy. I built some data pipelines and&#xA;junior-grade infrastructure 5 years ago but left over burn-out at the prospect of&#xA;a job with smaller scoped work and more technical guidance. That was a good&#xA;move, and in God&#39;s sovereignty he&#39;s brought me back. Now I&#39;m looking at code,&#xA;thankfully not that I wrote, but that the guy after me wrote - it accomplished&#xA;a job, like my original work did, but also like what I built back then -&#xA;there&#39;s better ways today. The amount of things in front of me is absolutely&#xA;daunting, and the people on the team have been seeded with a very high opinion&#xA;of me... I don&#39;t know how much is valid and how much is hype, but I&#39;m gonna try&#xA;to live up to it.&#xA;&#xA;One way I&#39;m striving to do that is to maximize my efficiency with the AI coding&#xA;tools available to me. We have Github Copilot and I&#39;ve picked up a lot over the&#xA;course of the last few years (and especially more recently) in using agents,&#xA;planning out work, documenting plans for agents to follow, splitting up work&#xA;via worktrees, etc. I feel pretty good about where I&#39;m going and someday I&#xA;might even release Nexus. Nexus is serving as my second-brain at work, the hub&#xA;where I collaborate with my fleet of agents on the work that must get done.&#xA;Details to come on this, but the thing that matters is that in ironing out&#xA;workflow I&#39;ve moved from prompt + chat to really managing a long-lived stream&#xA;of work. AI has been changing the world, and there&#39;s been developer hype for&#xA;years now. But &#34;make me a cool app, no mistakes&#34; isn&#39;t going to cut it. Even&#xA;&#34;make an app but generate a plan first&#34; isn&#39;t going to cut it... Developers&#xA;have to adopt a higher level role, a systems-oriented and architecture-driven&#xA;worldview must become primary in order to keep up. Code-gen and syntax writing&#xA;are not what developers were **ever** paid to do, although many believed so.&#xA;Our jobs have been to solve problems and deliver code that solves the problem.&#xA;The code is cheap now, but solving problems still is a human task.&#xA;&#xA;In the Autonomy group - there&#39;s problems all up and down the stack. My focus is&#xA;on infrastructure and developer operations - it&#39;s become my bread and butter&#xA;over the last several years. I&#39;m excited to help the team grow, and I&#39;m excited&#xA;to grow personally/technically as I lean into the agentic workflow to produce&#xA;code that I&#39;m actually proud of, that has my name on the commit, and that&#xA;solves real problems.&#xA;&#xA;## Example - Local Development&#xA;&#xA;One of the first things I&#39;m tackling is a developer-pain-point of working on&#xA;their laptop. I&#39;ve been in this space for years, mostly with python programmer&#xA;who are writing data science code. They don&#39;t know about virtual environments,&#xA;checking $PATH, assuming bad state in their terminal session, how to configure&#xA;VS Code, etc. Often they just want to write some scripts and somehow test it.&#xA;The solution I see most often is for devs to write code in JupyterLab/Notebooks&#xA;in AWS or some environment close to their data - this is fine I guess, but it&#39;s&#xA;not developing good pipelines, and it&#39;s tedious as hell. In my last job I&#xA;helped set developers up with workflows that allowed them to run their IDE of&#xA;choice locally (getting all the goodies of syntax highlighting, LSP, etc) and a&#xA;CLI that took their code and ran it in the cloud, right next to data, in the&#xA;same way that prod runs. It was a hit. After that I introduced some tools to&#xA;help them manage python environments - we had strict templating requirements in&#xA;our projects, so making tools to automate those things wasn&#39;t too hard - it&#39;s&#xA;much easier than trying to make something flexible for every use case. The&#xA;opinions made the automation and tooling easy to make and distribute.&#xA;&#xA;Well I&#39;m up against a similar task now, but oh so much worse... Larger team,&#xA;larger environment sprawl, larger infrastructure mismanagement, the whole&#xA;gambit. And I&#39;m here for it... Here&#39;s the first problem I&#39;m addressing - local&#xA;development for Airflow DAGs that run in an Airflow deployment on Kubernetes.&#xA;The deployment itself is a little odd, Airflow is an orchestrator, all the&#xA;pipelines run in external AWS Batch jobs - so a DAG hits the Batch API to run&#xA;the code. The design there is actually nice, but how are devs testing code?&#xA;&#xA;Oh that&#39;s easy... they SSH into the prod server, which is a 5 year old desktop&#xA;THAT I BUILT WITH A CO-WORKER BEFORE I WAS IN AUTONOMY THE FIRST TIME... hold&#xA;on, WHAT!? Yes, it&#39;s true.. so they SSH into the prod server, run some bash&#xA;scripts in their userspace that setup airflow and a few db utilities in a&#xA;docker compose stack, authenticate with AWS themselves from that server, and&#xA;then they run DAGs against real data to test it... I am beyond shook.&#xA;&#xA;Here&#39;s what I&#39;ve put together - a bootstrap process (I like `just` + PEP 723&#xA;python scripts as opposed to bash, but to each their own, and bash of course&#xA;has its place) that spins up a [kind](https://kind.sigs.k8s.io/) cluster on&#xA;their laptop, the process pulls some private images and loads them into the&#xA;kind cluster, it installs airflow from a helm chart (the same helm chart we&#39;ll&#xA;use in dev and prod... no more docker compose over here, kubectl over there),&#xA;and everything just. comes. up. No SSH into ancient server, no touching cloud&#xA;infra (they get MinIO and a DB container to emulate S3 and RDS in our AWS&#xA;accounts), no sweat on testing DAGs. They stage some data in MinIO (`just open&#xA;minio` handles the port-forward and opens the browser), then `just open&#xA;airflow` (their DAGs are hot-reloaded via hostPath mounting), and they can run&#xA;DAGs locally until they&#39;re satisfied with the results.&#xA;&#xA;It&#39;s taken me about a week of split-focused effort (I mentioned Nexus and I&#39;ve&#xA;been co-building and dogfooding that at the same time) but I&#39;m proud of that&#xA;local setup now. I am a bit shocked they&#39;ve dealt with a brittle, hacky, often&#xA;broken development workflow for the last 4 years or so, but that development I&#xA;suppose.&#xA;&#xA;## The Point&#xA;&#xA;This post wasn&#39;t meant to be me glazing myself for awesome local development&#xA;practices, I am simply excited about this new chapter. I love solving problems,&#xA;and I love owning those solutions. There&#39;s a whole mess of things to address,&#xA;my mind is buzzing, and I feel like God has blessed me with renewed passion&#xA;(again see [[im-back-from-the-dead]]). I&#39;ve given up some pay and some freedom&#xA;to take this role, but I think it&#39;ll pay dividends.&#xA;&#xA;Life happens to all of us - this role change affected a lot for me, it&#39;s been&#xA;hard to digest some of those changes, but the work is good, the development is&#xA;fun, the new world of using agents to fly through things you&#39;re fluent in is&#xA;exciting, and I&#39;m here to help a team that desperately needs it to improve&#xA;their lives and the work we do for Cat Autonomy.&#xA;&#xA;I&#39;m still pissed at Caterpillar Executives for RTO ruining parts of my life,&#xA;but in God&#39;s sovereignty their idiocy has led to non-trivial blessing, so I can&#xA;say &#34;Praise the Lord&#34;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-01-23 Notes</title>
    <id>https://pype.dev/2026-01-23-notes/</id>
    <updated>2026-01-23T05:47:03Z</updated>
    <published>2026-01-23T05:47:03Z</published>
    <link href="https://pype.dev/2026-01-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2026-01-01-notes</summary>
    <content type="text">&#xA;yesterday: [[2026-01-01-notes]]&#xA;&#xA;- [[im-back-from-the-dead]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>I’m back from the dead</title>
    <id>https://pype.dev/im-back-from-the-dead/</id>
    <updated>2026-01-23T05:38:29Z</updated>
    <published>2026-01-23T05:38:29Z</published>
    <link href="https://pype.dev/im-back-from-the-dead/" rel="alternate" type="text/html"></link>
    <summary type="text">The flu hit me like a freight train right at the start of the year, along with the most stress I&#39;ve ever felt at work dropping on me at the same time, I&#39;ve...</summary>
    <content type="html">&lt;p&gt;The flu hit me like a freight train right at the start of the year, along with&#xA;the most stress I&amp;rsquo;ve ever felt at work dropping on me at the same time, I&amp;rsquo;ve&#xA;been out of commission for what feels like forever. But this week I&amp;rsquo;ve been&#xA;bouncing back and I feel like a million bucks now&amp;hellip; and a lot has happened&lt;/p&gt;&#xA;&lt;p&gt;This post isn&amp;rsquo;t a review, it&amp;rsquo;s a note for me to come back and build on with&#xA;some more posts probably. My life has been a bit chaotic but in God&amp;rsquo;s good&#xA;grace on my life, that chaos hasn&amp;rsquo;t ruined anything (I am still wrestling with&#xA;one aspect of it) but something&amp;rsquo;s changed this year&amp;hellip; I&amp;rsquo;m not only back from&#xA;the flu over the last several weeks, I feel like I&amp;rsquo;ve been resurrected as a&#xA;developer. I&amp;rsquo;d written a few times last summer, feeling like I was in a rut,&#xA;and I felt good coming out of that low season, but as I&amp;rsquo;ve reflected it&amp;rsquo;s&#xA;really the last couple of years have been a slow descent into, not into&#xA;depression, but something akin to it&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Not only is that season either over or on pause, cause I&amp;rsquo;ve been buzzin on&#xA;building things for a week now like I can hardly remember, but I&amp;rsquo;ve had some&#xA;significant work changes. Longer reflection post to come - but after much toil&#xA;I am actually back in Caterpillar Autonomy, a group I left from burn-out 5&#xA;years ago. In fact, I&amp;rsquo;m on the same project, but with new eyes, new passion,&#xA;new knowledge and experience, and the fun part for me now is new tools. AI&#xA;hasn&amp;rsquo;t been my friend the whole time, I&amp;rsquo;ve vibe-coded some disasters,&#xA;pseudo-vibe-coded some cool stuff, but ultimately it&amp;rsquo;s not been a net positive&#xA;for me until this week. Getting a workflow ironed out in order to keep up with&#xA;the group&amp;rsquo;s pace, or the pace I want us to be at, has been exciting and I swear&#xA;I&amp;rsquo;ve done a month&amp;rsquo;s work of work since Monday&amp;hellip; no hype, no selling, just&#xA;letting you know that AI can&amp;rsquo;t do it all, but with good design it sure can&#xA;generate some code that doesn&amp;rsquo;t suck.&lt;/p&gt;&#xA;&lt;p&gt;So&amp;hellip; I&amp;rsquo;m back, almost from the dead, and it&amp;rsquo;s January 23 but let&amp;rsquo;s kick 2026&#xA;right in the cajones!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2026-01-01 Notes</title>
    <id>https://pype.dev/2026-01-01-notes/</id>
    <updated>2026-01-01T05:53:10Z</updated>
    <published>2026-01-01T05:53:10Z</published>
    <link href="https://pype.dev/2026-01-01-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-31-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-31-notes]]&#xA;&#xA;## TIL&#xA;&#xA;- The 12 days of Christmas is supposed to start on Christmas Eve/Christmas Day&#xA;  and ends the eve of Epiphany (January 6th or thereabouts depending on the&#xA;  calendar)&#xA;&#xA;- merging compose files... oh boy [check this out - need to get this pattern into my homelab repo?](https://docs.docker.com/compose/how-tos/multiple-compose-files/merge/)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - John 7:37</title>
    <id>https://pype.dev/reflection-john-7-37/</id>
    <updated>2025-12-31T05:05:36Z</updated>
    <published>2025-12-31T05:05:36Z</published>
    <link href="https://pype.dev/reflection-john-7-37/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;John 7:37&#34;</summary>
    <content type="text">&#xA;!!! note &#34;John 7:37&#34;&#xA;&#xA;    Now on the last day of the feast—the great day—Jesus stood and cried out,&#xA;    saying, “If anyone is thirsty, let him come to me, and let him drink,&#xA;&#xA;## The Last Day&#xA;&#xA;So, today obviously isn&#39;t the last day of a feast Jesus is speaking at, I don&#39;t&#xA;mean to impose anything beyond a trivial relationship between &#34;the last day&#34;&#xA;and today being New Year&#39;s Eve. The reflection is for reflecting, not education&#xA;and so today I pray the Lord be good to me in meditating on this text this&#xA;morning.&#xA;&#xA;## Jesus Cried Out&#xA;&#xA;Yahweh longs for all people to be reconciled to him. It&#39;s a fact that that&#xA;won&#39;t be the case because of the degrees of wills that can coexist even though&#xA;the mechanism of their relationship is hidden from us -&#xA;[[the-hidden-things-belong-to-yahweh]].&#xA;&#xA;However, a clear truth here is that &#34;Jesus cried out&#34;. His voice goes out, loud&#xA;and all around, to all people within ear-shot - &#34;If anyone is thirsty, let him&#xA;come to me&#34;.&#xA;&#xA;!!! warning &#34;&#34;&#xA;&#xA;    If anyone is thirsty&#xA;&#xA;Jesus gives no qualifiers on who his message goes out to - it&#39;s the dad of 6&#xA;kids nailing it, the wife of of a businessman maintaining her home, the harlot&#xA;trying to wreck that home, the prostitute on the corner, the corrupt politician&#xA;(even Paul was called)... Jesus&#39; voice goes out to &#34;anyone&#34;... So who am I to&#xA;think that my standing as a righteous person before God by the grace of the&#xA;blood of Jesus has anything to do with who I am? His call goes out to&#xA;**anyone**.&#xA;&#xA;So what is for me today? or for the person who is reading this? I don&#39;t know...&#xA;Jesus has been so good to me, and I also want all people to know him. I want&#xA;every person to experience being freed from their sinful master, freed from&#xA;themselves. I believe that if all people gave their lives to Jesus the world&#xA;would be healed over night. That fantasy land doesnt&#39; exist though, and Jesus&#39;&#xA;call has gone out to anyone and everyone - but the time for that call is coming&#xA;to a close and when he comes back it&#39;ll be to redeem his own.&#xA;&#xA;It&#39;s one thing to be invited to a wedding feast. The invitation has gone out.&#xA;&#xA;It&#39;s another thing stand between a loving husband and his captive bride, or a&#xA;warrior father and his oppressed child. That is the position of every person&#xA;when the Lord comes back whose knee is not already bowed.&#xA;&#xA;The New Year brings a time of reflection about life, what to start, what to&#xA;stop. Jesus has been good to my heart in this year - creating a genuine&#xA;desire for all people to experience him. I hope that anyone reading this or any&#xA;of my posts might hear God&#39;s calling through what he&#39;s done in my life.&#xA;&#xA;His call went out to **anyone** but he redeems **his own**, may you accept&#xA;adoption today.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-31 Notes</title>
    <id>https://pype.dev/2025-12-31-notes/</id>
    <updated>2025-12-31T04:34:20Z</updated>
    <published>2025-12-31T04:34:20Z</published>
    <link href="https://pype.dev/2025-12-31-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-30-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-30-notes]]&#xA;&#xA;## Ideas&#xA;&#xA;- I want to start writing about some parenting concepts&#xA;&#xA;  - discipline vs consequences vs punishment is one concept&#xA;  - love and the &#34;greater will&#34; for your child&#xA;    - goes hand-in-hand with something like &#34;it&#39;s good for your child to suffer&#34;&#xA;&#xA;- [[reflection-john-7-37]]&#xA;&#xA;## Dev&#xA;&#xA;- fixed issue with dad-can-i-wear-this&#xA;&#xA;  - the ollama_host was set to be the actual ollama url running on my desktop,&#xA;    which makes sense from the var name but is wrong. I have OLLAMA_HOST actually&#xA;    assumed to be open-webui&#39;s api endpiont, so the API spec is a touch different&#xA;    but I did this to use open-webui for agent customization and such&#xA;  - change host:11343 (ollama&#39;s host and port) to host:3002 (open-webui&#39;s host&#xA;    and port) and we&#39;re golden&#xA;&#xA;- need to compare OpenAgents with &lt;https://github.com/code-yeongyu/oh-my-opencode&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Increase inotify limit in your CI workers</title>
    <id>https://pype.dev/increase-inotify-limit-in-your-ci-workers/</id>
    <updated>2025-12-30T06:11:49Z</updated>
    <published>2025-12-30T06:11:49Z</published>
    <link href="https://pype.dev/increase-inotify-limit-in-your-ci-workers/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I tripped over a CI failure that I had to think about for a while.</summary>
    <content type="html">&lt;p&gt;Today I tripped over a CI failure that I had to think about for a while.&lt;/p&gt;&#xA;&lt;p&gt;I build &lt;a href=&#34;https://github.com/zensical/zensical&#34;&gt;zensical&lt;/a&gt; static sites in CI on&#xA;my Forgejo instance. These builds had been working fine, then suddenly started&#xA;failing with no code changes. Naturally, I assumed something upstream broke —&#xA;maybe a new uv release, maybe zensical.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I pinned versions.&lt;/li&gt;&#xA;&lt;li&gt;I tested older versions.&lt;/li&gt;&#xA;&lt;li&gt;Same failure every time.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That ruled out regressions and pushed me toward the environment.&lt;/p&gt;&#xA;&lt;p&gt;I pulled the runner and worker images locally and built the sites just fine&amp;hellip;&#xA;But that doesn&amp;rsquo;t perfectly emulate the CI setup - my forgejo runner relies on&#xA;docker-in-docker and so we aren&amp;rsquo;t &lt;strong&gt;just&lt;/strong&gt; running a container on a host, we have&#xA;this middle layer to consider&amp;hellip; I wasn&amp;rsquo;t sure how to really test this out&#xA;locally so I succomed to AI and here&amp;rsquo;s where Jipity got me in about 5&#xA;minutes&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-failure&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The failure&lt;/span&gt; &lt;a href=&#34;#the-failure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The builds blew up with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;thread &#39;zrx/monitor&#39; panicked at .../zensical-watch/src/agent/monitor.rs:154:49:&#xA;called `Result::unwrap()` on an `Err` value:&#xA;Error { kind: Io(Os { code: 24, message: &amp;quot;Too many open files&amp;quot; }) }&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;At first glance it means nothing to me but Jipity says this screams ulimit.&lt;/p&gt;&#xA;&lt;p&gt;So following the AI overlords I checked:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ulimit -n&lt;/code&gt; was already very high&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;/proc/sys/fs/inotify/max_user_watches&lt;/code&gt; was also very high&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;PID limits&lt;/code&gt; were not constrained&lt;/p&gt;&#xA;&lt;p&gt;Everything looked fine according to Jipity.&lt;/p&gt;&#xA;&lt;p&gt;Yet the panic persisted.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-real-culprit&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The real culprit&lt;/span&gt; &lt;a href=&#34;#the-real-culprit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The actual limit being hit was:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;/proc/sys/fs/inotify/max_user_instances&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;In my Forgejo runner container, it was set to 128.&lt;/p&gt;&#xA;&lt;p&gt;That turns out to be far too low for zensical.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what ChatGPT said:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Even during a normal zensical build, the tool spins up its watch subsystem,&#xA;which creates many inotify instances. Once it crosses the kernel limit,&#xA;inotify_init() fails with EMFILE, and the process panics because the error is&#xA;unwrapped.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The fix&lt;/span&gt; &lt;a href=&#34;#the-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Raising the inotify instance limit fixed it immediately:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;echo 1024 &amp;gt; /proc/sys/fs/inotify/max_user_instances&#xA;RUST_BACKTRACE=full uvx zensical build --clean&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After that, the build succeeded consistently.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-30 Notes</title>
    <id>https://pype.dev/2025-12-30-notes/</id>
    <updated>2025-12-30T05:33:02Z</updated>
    <published>2025-12-30T05:33:02Z</published>
    <link href="https://pype.dev/2025-12-30-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-27-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-27-notes]]&#xA;&#xA;## Dev&#xA;&#xA;- taking a look at the zensical docs builds broken in my homelab&#xA;&#xA;  - I pulled the forgejo runner image to build locally - but that image isn&#39;t used for building, just orchestrating the CI runs&#xA;  - so I docker pull ghcr.io/catthehacker/ubuntu:act-latest&#xA;&#xA;    - installed just&#xA;    - cloned repo&#xA;    - just build-site works... wtf...&#xA;&#xA;  !!! note &#34;TLDR&#34;&#xA;&#xA;      The build was failing because Linux only allowed 128 inotify instances, and zensical starts its file-watcher even during a normal build. The watcher creates more than 128 inotify instances, hits the kernel limit, gets EMFILE (Too many open files), and then panics due to an unwrap().&#xA;      This had nothing to do with:&#xA;      ulimit -n (already high)&#xA;      max_user_watches (already high)&#xA;      PID limits&#xA;      Raising:&#xA;      /proc/sys/fs/inotify/max_user_instances&#xA;      fixed it immediately.&#xA;      In short: CI environment had a low inotify instance limit, and zensical’s watcher is not CI-safe.&#xA;&#xA;- [[increase-inotify-limit-in-your-ci-workers]]&#xA;&#xA;- Also got my blog build and push to GH much closer to my shared devops one...&#xA;  - using just in ci now, so the nostr well-known gets in there via just recipe&#xA;  - need to configure markout vs site for markata vs zensical repos&#xA;    - pype.dev&#xA;    - homelab-mono(-mirror)&#xA;    - dotfiles&#xA;    - DigitalHarbor? (this would imply I&#39;m bringing in these custom things built with npm/astro/etc... probably out of scope)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Hidden Things Belong To Yahweh</title>
    <id>https://pype.dev/the-hidden-things-belong-to-yahweh/</id>
    <updated>2025-12-29T05:47:22Z</updated>
    <published>2025-12-29T05:47:22Z</published>
    <link href="https://pype.dev/the-hidden-things-belong-to-yahweh/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Deuteronomy 29:29&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Deuteronomy 29:29&#34;&#xA;&#xA;    The hidden things belong to Yahweh our God, but the revealed things belong to us to know and to our children forever, in order to do all the words of this law.&#xA;&#xA;Here is a truth every Christian should meditate on and remember whenever they&#xA;find themselves so sure of a biblical teaching. There are things not meant for&#xA;us to know - not that we cannot enjoy the musings, but we need to rightly&#xA;understand that there are mechanisms in the world that are only known to&#xA;Yahweh. Just like my daughters have no actual understanding of how they became&#xA;my daughters, or how money shows up in our account every month, or how water&#xA;comes to our house... These things are beyond their scope of existence to be&#xA;honest, and there are analogous things that we fully-grown mature adults need&#xA;to recognize are beyond us and are for the Lord, only.&#xA;&#xA;This is not an excuse or encouragement though to never be sure of a&#xA;conviction... there most certainly are &#34;revealed things \[that\] belong to us&#xA;to know&#34;. So the Christian needs to graciously approach the things we can&#39;t run&#xA;away from, but also recognize that our understanding is, by nature of our&#xA;existence, limited.&#xA;&#xA;The truth a lot of us wrestle with, and probably not very well, is&#xA;**Soteriology** - the theology of salvation. There are a number of things that&#xA;go into the mechanism of receiving salvation from the Lord: a regenerated&#xA;heart, faith in Jesus alone, confession, and the process of becomming more like&#xA;Jesus (sanctification). However, the **order by which** these things happen has&#xA;been a long-debated issue in the Church and has led to a lot of&#xA;Christian-division.&#xA;&#xA;I&#39;m not going to claim to understnad the [orto salutis] but what I can do is&#xA;recognize a reality in my life, perhaps even somewhat contradictory realties,&#xA;and given that objective truth of those realities I&#39;ll have to eventually&#xA;recognize that the intimate understanding and knowledge of the inner-workings&#xA;of those realities is hidden from me.&#xA;&#xA;It goes like this - no one can choose Yahweh on their own. We are born into death and decay:&#xA;&#xA;!!! note &#34;Ephesians 2:1&#34;&#xA;&#xA;    And you, although you were dead in your trespasses and sins,&#xA;&#xA;!!! note &#34;Romans 3:23&#34;&#xA;&#xA;    for all have sinned and fall short of the glory of God,&#xA;&#xA;So inconvenient truth number 1: you are dead, dead people can&#39;t make choices or&#xA;do anything... but surely &#34;dead in your tresspasses&#34; and &#34;fall short of the&#xA;glory of God&#34; are just indicators that we can&#39;t live a perfectly &#34;good&#34; life...&#xA;no?&#xA;&#xA;Well, it won&#39;t really matter and here&#39;s why:&#xA;&#xA;!!! note &#34;John 14:6&#34;&#xA;&#xA;    Jesus said to him, “I am the way, and the truth, and the life. No one comes to the Father except through me.&#xA;&#xA;So here&#39;s the thing - either Jesus is the son of God or he isn&#39;t... Simple&#xA;binary truth. If he&#39;s **not** the son of God, then half of this blog is&#xA;worthless and Paul&#39;s words that Christians should lbe pitied above all people&#xA;would never be more true... But if Jesus **is the son of God** and his words&#xA;**are actual truth** then you really need to wrestle with it, if only for a&#xA;second... He&#39;s either a crazy liar, or literally God. This truth, or the option&#xA;of which of these things are true, are 100% unavoidable for every person to&#xA;deal with. Like, you have to make a choice - either accept what Jesus says, or&#xA;don&#39;t.&#xA;&#xA;But that actually brings up the tension - you can&#39;t accept it unless Yahweh&#xA;gives you over to Jesus.&#xA;&#xA;!!! note &#34;John 6:37–40&#34;&#xA;&#xA;    Everyone whom the Father gives to me will come to me, and the one who comes&#xA;    to me I will never throw out, 38 because I have come down from heaven not that&#xA;    I should do my will, but the will of the one who sent me. 39 Now this is the&#xA;    will of the one who sent me: that everyone whom he has given me, I would not&#xA;    lose any of them, but raise them up on the last day. 40 For this is the will of&#xA;    my Father, that everyone who looks at the Son and believes in him would have&#xA;    eternal life, and I will raise him up on the last day.”&#xA;&#xA;So... is the one born destined to not believe simply destined for hell? What&#xA;kind of loving God is that?&#xA;&#xA;The answer there is actually pretty simple - he&#39;s a loving father. I wrote a&#xA;little bit about this via analogies to my own life as a parent in&#xA;[[advent-2025---love]]. Essentially as a dad, I take my own kids home from the&#xA;playground every day, not your kids. Likewise, God will redeem his own... It&#39;s&#xA;literally a perfectly reasonable expectation of a dad.&#xA;&#xA;## Hidden vs. Revealed&#xA;&#xA;What is for us and what is for God alone then (as we discuss Soteriology)? A&#xA;lot. And in this case I&#39;m not even sure where to draw the line but here is a&#xA;simple list of truths that **are true** even though I couldn&#39;t explain with&#xA;every nuance - how?&#xA;&#xA;1. I hated God - every unregenerate person does, it is **only natural** to hate&#xA;   what you&#39;re opposed to. Being born into sin and death necessarily means you&#xA;   are are opposed to life and godliness.&#xA;2. I now love God - my personal story here is a picture of God&#39;s providence -&#xA;   see [[helkyo-what-is-it-for-god-to-draw-man-to-him]]&#xA;3. Yahweh desires for all people to be reconciled (1 Peter)&#xA;4. Not everyone believes in Jesus - which means there are people destined for&#xA;   hell&#xA;&#xA;Here&#39;s what I think is hidden...&#xA;&#xA;1. The reasons which God chooses some and not others - thank the Lord this is&#xA;   not for me to know&#xA;2. The mechanism by which my heart is able to make a **free** choice, out of my&#xA;   own agency, not to initially believe in Jesus, but every day to lay my life&#xA;   down before him (as I do or do not live faithfully to him)&#xA;3. What reality of &#34;hell&#34; there is to be predestined to... I cannot deny at all&#xA;   that not all people are chosen by God, not all people will enter the&#xA;   Celestial City... But what of the others? I genuinely do not know, but I have a&#xA;   lot of confidence that the fire and torture crowd are missing some stuff.&#xA;&#xA;## Fin&#xA;&#xA;Praise the Lord that there are things beyond us to know... It is comforting to&#xA;know that Jesus loves me, and I don&#39;t need to know much more beyond that. Just&#xA;like one of my biggest desires is for my daughters to trust me because of my&#xA;love for them, in the same way is how I find and am comforted by the Lord. If&#xA;you&#39;re reading this and haven&#39;t heard him call your name, maybe sit and listen.&#xA;When Jesus called Lazarus from the grave, he might&#39;ve had the choice whether to&#xA;walk out or not, but he didn&#39;t have the choice to not wake-up. If the Lord&#xA;awakens your heart today, may you make the choice to walk out of the grave and&#xA;into new life.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Prettier Docker ‘ps’ Command</title>
    <id>https://pype.dev/prettier-docker-ps-command/</id>
    <updated>2025-12-29T05:33:05Z</updated>
    <published>2025-12-29T05:33:05Z</published>
    <link href="https://pype.dev/prettier-docker-ps-command/" rel="alternate" type="text/html"></link>
    <summary type="text">The command is very useful, but I hate reading the output. Turns out, you can make it prettier:</summary>
    <content type="html">&lt;p&gt;The &lt;code&gt;docker ps&lt;/code&gt; command is very useful, but I hate reading the output. Turns&#xA;out, you can make it prettier:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ndash;format &amp;ldquo;table&amp;rdquo; is implied with the command.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;❯ docker ps --format &amp;quot;table&amp;quot; | grep can&#xA;9b716a7d1ab0   postgres:17                                               &amp;quot;docker-entrypoint.s…&amp;quot;   13 hours ago    Up 13 hours (healthy)            0.0.0.0:5432-&amp;gt;5432/tcp, [::]:5432-&amp;gt;5432/tcp                                                cannalyzer-db-1&#xA;f7708ea0c112   adminer                                                   &amp;quot;entrypoint.sh docke…&amp;quot;   13 hours ago    Up 13 hours                      0.0.0.0:8081-&amp;gt;8080/tcp, [::]:8081-&amp;gt;8080/tcp                                                cannalyzer-adminer-1&#xA;93cd67719ed4   frontend:latest                                           &amp;quot;/docker-entrypoint.…&amp;quot;   13 hours ago    Up 13 hours                      0.0.0.0:5173-&amp;gt;80/tcp, [::]:5173-&amp;gt;80/tcp                                                    cannalyzer-frontend-1&#xA;f517625fca98   traefik:3.0                                               &amp;quot;/entrypoint.sh --pr…&amp;quot;   13 hours ago    Up 13 hours                      0.0.0.0:80-&amp;gt;80/tcp, [::]:80-&amp;gt;80/tcp, 0.0.0.0:8090-&amp;gt;8080/tcp, [::]:8090-&amp;gt;8080/tcp           cannalyzer-proxy-1&#xA;f4daa036216e   schickling/mailcatcher                                    &amp;quot;sh -c &#39;mailcatcher …&amp;quot;   13 hours ago    Up 13 hours                      0.0.0.0:1025-&amp;gt;1025/tcp, [::]:1025-&amp;gt;1025/tcp, 0.0.0.0:1080-&amp;gt;1080/tcp, [::]:1080-&amp;gt;1080/tcp   cannalyzer-mailcatcher-1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But you can pass a template string to the &lt;code&gt;--format&lt;/code&gt; option, like so:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;docker ps --format &amp;quot;table {{.Names}}&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;✗ docker ps --format &amp;quot;table {{.Names}}&amp;quot; | grep can&#xA;cannalyzer-db-1&#xA;cannalyzer-adminer-1&#xA;cannalyzer-frontend-1&#xA;cannalyzer-proxy-1&#xA;cannalyzer-mailcatcher-1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;docker ps --format &amp;quot;table {{.Names}}\t{{.Status}}\t{{.Ports}}&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;❯ docker ps --format &amp;quot;table {{.Names}}\t{{.Ports}}&amp;quot; | grep can&#xA;cannalyzer-db-1             0.0.0.0:5432-&amp;gt;5432/tcp, [::]:5432-&amp;gt;5432/tcp&#xA;cannalyzer-adminer-1        0.0.0.0:8081-&amp;gt;8080/tcp, [::]:8081-&amp;gt;8080/tcp&#xA;cannalyzer-frontend-1       0.0.0.0:5173-&amp;gt;80/tcp, [::]:5173-&amp;gt;80/tcp&#xA;cannalyzer-proxy-1          0.0.0.0:80-&amp;gt;80/tcp, [::]:80-&amp;gt;80/tcp, 0.0.0.0:8090-&amp;gt;8080/tcp, [::]:8090-&amp;gt;8080/tcp&#xA;cannalyzer-mailcatcher-1    0.0.0.0:1025-&amp;gt;1025/tcp, [::]:1025-&amp;gt;1025/tcp, 0.0.0.0:1080-&amp;gt;1080/tcp, [::]:1080-&amp;gt;1080/tcp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;picture&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Picture&lt;/span&gt; &lt;a href=&#34;#picture&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I noticed my template isn&amp;rsquo;t folding the codeblocks in a way that actually makes this post look like I&amp;rsquo;m lying!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251229122717_67e76a67.png&#34; alt=&#34;20251229122717_67e76a67.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Galatians 2:19-20</title>
    <id>https://pype.dev/reflection-galatians-2-19-20/</id>
    <updated>2025-12-28T06:18:57Z</updated>
    <published>2025-12-28T06:18:57Z</published>
    <link href="https://pype.dev/reflection-galatians-2-19-20/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Galatians 2:19-20&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Galatians 2:19-20&lt;/p&gt;&#xA;&lt;p&gt;19 For through the law I died to the law, in order that I might live to&#xA;God. I have been crucified with Christ, 20 and I no longer live, but Christ&#xA;lives in me, and that life I now live in the flesh, I live by faith in the Son&#xA;of God, who loved me and gave himself for me.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is one of the most common verse-memory verses I think. Probably there&amp;rsquo;s&#xA;good reason for that - Paul has a lot to say to the Galatians, and these 2&#xA;verses summarize one of the simple truths of the Gospel - the life a Christian&#xA;is given is &lt;strong&gt;freed from&lt;/strong&gt; the law of death and make alive to Jesus. The gospel&#xA;truth is that the law is no longer the thing we answer to - everyone will,&#xA;certainly. There&amp;rsquo;s no mistake to be made that every human has accountability&#xA;for their own agency. In our &amp;ldquo;free&amp;rdquo; will, bound to sin and death and to the law&#xA;for approval, we aren&amp;rsquo;t free at all but slaves to an oppressive overlord. Jesus&#xA;frees the Christian to live a life free from that oppression, in the&#xA;life-giving security of God&amp;rsquo;s adoption.&lt;/p&gt;&#xA;&lt;h2 id=&#34;who-love-me-and-gave-himself-for-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Who love me and gave himself for me&lt;/span&gt; &lt;a href=&#34;#who-love-me-and-gave-himself-for-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;God adopts whoever he chooses. And the ones he chooses are then freely able to&#xA;choose him in return. Through the life-giving power of God&amp;rsquo;s sovereignty my&#xA;life can be fundamentally altered, my make-up changed, my family line updated.&#xA;I am free to live my life by faith in Jesus, because he loved me and gave&#xA;himself for me.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-27 Notes</title>
    <id>https://pype.dev/2025-12-27-notes/</id>
    <updated>2025-12-27T06:43:57Z</updated>
    <published>2025-12-27T06:43:57Z</published>
    <link href="https://pype.dev/2025-12-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-26-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-26-notes]]&#xA;&#xA;## Dev&#xA;&#xA;- cool it on cannalyze and qr-harbor. focus on data model and then use the fastapi-template&#xA;- focus on [[soonish]] and [[mindful]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-26 Notes</title>
    <id>https://pype.dev/2025-12-26-notes/</id>
    <updated>2025-12-26T09:52:38Z</updated>
    <published>2025-12-26T09:52:38Z</published>
    <link href="https://pype.dev/2025-12-26-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-24-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-24-notes]]&#xA;&#xA;## Dev&#xA;&#xA;- Working on [[cannalyze]] again&#xA;  - opencode with grok is on this&#xA;- QR Harbor!&#xA;  - dynamic qr code hosting&#xA;  - opencode with Opus 4.1 on this&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - 1 John 4:17</title>
    <id>https://pype.dev/advent-1-john-4-17/</id>
    <updated>2025-12-25T05:36:08Z</updated>
    <published>2025-12-25T05:36:08Z</published>
    <link href="https://pype.dev/advent-1-john-4-17/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;1 John 4:17&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1 John 4:17&lt;/p&gt;&#xA;&lt;p&gt;By this love is perfected with us, so that we may have confidence in the day of judgment, because just as that one is, so also are we in this world.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;confidence&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Confidence&lt;/span&gt; &lt;a href=&#34;#confidence&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve definitely written about confidence before outside this blog, it&amp;rsquo;s a key&#xA;Christian theme. John mentions here in the middle of a bunch of stuff about&#xA;love as he is wrapping up this letter.&lt;/p&gt;&#xA;&lt;p&gt;Love is beautiful, and over this Advent season I&amp;rsquo;ve reflected a lot on verse 19&#xA;&amp;ldquo;We love, because he first loved us&amp;rdquo;. Because of God, his original love for you&#xA;and me, his own power and majesty, his own right to rule and reign - because of&#xA;all of that I am to &amp;ldquo;have confidence in the day of judgement&amp;rdquo;. Christmas isn&amp;rsquo;t&#xA;so much about looking forward to a future time, it&amp;rsquo;s remembering that the time&#xA;we look forward to is already here in part. Jesus has already come, once. He&#xA;brought heaven to earth and undid much of the curse of separation placed on&#xA;humans at Eden. It&amp;rsquo;s because he&amp;rsquo;s already done it, because he loved me first,&#xA;that confidence can follow. No Christian should find themselves concerned about&#xA;their position in front of the Lord any more than my daughter should ever be&#xA;concerned about her status as my daughter. There&amp;rsquo;s nothing she could do to&#xA;separate herself from my love for her, and there is nothing I can do to&#xA;separate myself from God&amp;rsquo;s love. In the binding of that love, is confidence for&#xA;security in the future. Not that all my bills are paid and I have a happy life&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;but that in the ultimate sense, my purpose as an image-bearing Human will be&#xA;fully realized, God&amp;rsquo;s plan fully carried out, in the end. And I don&amp;rsquo;t have to&#xA;worry, because in his love I am secure, just like I hope that in my love my&#xA;daughters are secure.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Christians struggle with doubt, and that&amp;rsquo;s not a sin. John would encourage you&#xA;to take hold of being God&amp;rsquo;s child, live that way, and in living like his child,&#xA;his love is revealed, and as it is revealed and perfected, confidence naturally&#xA;follows.&lt;/p&gt;&#xA;&lt;p&gt;We aren&amp;rsquo;t guaranteed much about life, but I have zero valid reasons to doubt&#xA;the King who saved me and will continue to save me. May Jesus&amp;rsquo; name be great,&#xA;he is King, amen.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-24 Notes</title>
    <id>https://pype.dev/2025-12-24-notes/</id>
    <updated>2025-12-24T06:08:16Z</updated>
    <published>2025-12-24T06:08:16Z</published>
    <link href="https://pype.dev/2025-12-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-23-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-23-notes]]&#xA;&#xA;## Continued work&#xA;&#xA;- sermon editing&#xA;  - thinking about a temporal workflow&#xA;  - how to have an agent work in that workflow?&#xA;- focusing on soonish and mindful for now&#xA;- digital harbor blog section&#xA;&#xA;## Wins&#xA;&#xA;- Update shotput a little bit with an easier copy button for the link&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Luke 6:35</title>
    <id>https://pype.dev/advent-luke-6-35/</id>
    <updated>2025-12-23T05:17:05Z</updated>
    <published>2025-12-23T05:17:05Z</published>
    <link href="https://pype.dev/advent-luke-6-35/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Luke 6:35&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 6:35&lt;/p&gt;&#xA;&lt;p&gt;But love your enemies, and do good, and lend expecting back nothing, and your reward will be great, and you will be sons of the Most High, because he is kind to the ungrateful and wicked.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;love-your-enemies&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Love Your Enemies&lt;/span&gt; &lt;a href=&#34;#love-your-enemies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was once an enemy of God, and even today still make choices that highlight&#xA;enmity in my heart towards him. It&amp;rsquo;s what&amp;rsquo;s left-over, what will continue to&#xA;persist (though I hope be minimized as much as possible) while waiting for&#xA;Heaven to come to earth. Knowing and recognizing my own position - as a former&#xA;enemy, makes it somewhat easy to read these words to &amp;ldquo;do good&amp;rdquo; and &amp;ldquo;expect nothing&#xA;in return&amp;rdquo; from my enemies because God was good to me, and continues to be. So,&#xA;I am the ungrateful and the wicked that he is kind to.&lt;/p&gt;&#xA;&lt;p&gt;How do I feel about that? Honestly, grateful but also a little ashamed. I&#xA;&lt;strong&gt;know&lt;/strong&gt; who I am, and sometimes I choose to be who I was before. But God still&#xA;loves me and my heart is glad to be in his favor.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-23 Notes</title>
    <id>https://pype.dev/2025-12-23-notes/</id>
    <updated>2025-12-23T05:15:21Z</updated>
    <published>2025-12-23T05:15:21Z</published>
    <link href="https://pype.dev/2025-12-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-20-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-20-notes]]&#xA;&#xA;## Continued work&#xA;&#xA;- mcp server for sermon editing&#xA;- quadtask v2 is in the notifiq repo&#xA;- focusing on soonish and mindful for now&#xA;- digital harbor blog section&#xA;&#xA;## Wins&#xA;&#xA;- Update shotput a little bit with an easier copy button for the link&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Mark 12:29-30</title>
    <id>https://pype.dev/advent-mark-12-29-30/</id>
    <updated>2025-12-21T05:41:55Z</updated>
    <published>2025-12-21T05:41:55Z</published>
    <link href="https://pype.dev/advent-mark-12-29-30/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Mark 12:29-30&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Mark 12:29-30&lt;/p&gt;&#xA;&lt;p&gt;29 Jesus answered, “The most important is, ‘Listen, Israel! The Lord our God, the Lord is one. 30 And you shall love the Lord your God from your whole heart and from your whole soul and from your whole mind and from your whole strength.’&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-most-important-commandment&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Most Important Commandment&lt;/span&gt; &lt;a href=&#34;#the-most-important-commandment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Deuteronomy 6:4-5&lt;/p&gt;&#xA;&lt;p&gt;4 “Hear, Israel, Yahweh our God, Yahweh is unique. 5 And you shall love Yahweh your God with all of your heart and with all of your soul and with all of your might.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Jesus quotes the Shema as the most important commandment - not really&#xA;surprising&amp;hellip; Yahweh&amp;rsquo;s authority and divine kingship is the most important&#xA;reality to affirm. Along with recognizing the authority and Oneness of Yahweh&#xA;is the command the love him. ie. Not loving him is &lt;strong&gt;not&lt;/strong&gt; recognizing his&#xA;authority&amp;hellip; Again, not a surprising thing to hear a king say.&lt;/p&gt;&#xA;&lt;p&gt;So he says the most important thing is to love Yahweh Elohim (the Lord your&#xA;God) with everything. This calls Paul&amp;rsquo;s words about transformation to mind -&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Romans 12:1-2&lt;/p&gt;&#xA;&lt;p&gt;Therefore I exhort you, brothers, through the mercies of God, to present your bodies as a living sacrifice, holy and pleasing to God, which is your reasonable service. 2 And do not be conformed to this age, but be transformed by the renewal of your mind, so that you may approve what is the good and well-pleasing and perfect will of God.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Paul says that to offer ourselves as a &lt;strong&gt;living sacraifice&lt;/strong&gt; (strong language, no?)&#xA;is our &lt;strong&gt;reasonable service&lt;/strong&gt;&amp;hellip; If we think about Jesus&amp;rsquo; words that the &lt;strong&gt;most&#xA;important commandment&lt;/strong&gt; is to love God with everything, then Paul&amp;rsquo;s words here&#xA;in Romans are honestly just a natural outpouring of that priority - that we are&#xA;to offer &lt;strong&gt;everything&lt;/strong&gt; back to him.&lt;/p&gt;&#xA;&lt;p&gt;One lens through which to view this is simply gratitude&amp;hellip; If you are given&#xA;everything by someone, of course you&amp;rsquo;d seek to show your thanks. Part of the&#xA;human experience for the Christian, I think anyways, is the maturing and&#xA;realization of &lt;strong&gt;how much&lt;/strong&gt; God has given, and how much he has saved me from. This&#xA;maturity leads me to love God more deeply&amp;hellip; It&amp;rsquo;s as if my perspective on what&#xA;he&amp;rsquo;s done for me grows, so too my love for him grows.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;The &amp;ldquo;everything&amp;rdquo; I have to offer increases as I become more aware of everything he&amp;rsquo;s given.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Praise God for the mercies on my life, the greatest of which is the freedom to&#xA;offer myself to him. In the bonds of sin and shame I&amp;rsquo;m not free to crawl up&#xA;onto the altar as a living sacrifice. But God, in his grace, brought me to&#xA;life. He animated my body, makes it sacred space, and in the life-giving power&#xA;of Jesus&amp;rsquo; resurrection and the Holy Spirit I should walk myself to the altar&#xA;and lay myself down. The most important command for me is to love him with&#xA;everything, and praise the Lord I am free to do so.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Romans 15:13</title>
    <id>https://pype.dev/advent-romans-15-13/</id>
    <updated>2025-12-20T05:36:26Z</updated>
    <published>2025-12-20T05:36:26Z</published>
    <link href="https://pype.dev/advent-romans-15-13/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Romans 15:13&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Romans 15:13&lt;/p&gt;&#xA;&lt;p&gt;Now may the God of hope fill you with all joy and peace in believing, so that you may abound in hope by the power of the Holy Spirit.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The last 3 weeks of Advent are summarized right here in verse 13. Yahweh is the&#xA;God of hope, of expectation, he brings Joy through redemption, and Peace to the&#xA;believer through faith. That Joy and Peace lead us to &amp;ldquo;abound in hope&amp;rdquo;&#xA;ourselves, by the power of the Holy Spirit.&lt;/p&gt;&#xA;&lt;p&gt;What a dense sentence&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;The last several days and months have been heavy, and praise God for Christmas&#xA;and Advent right now, which is daily reorienting my eyes to Jesus. I&amp;rsquo;m waking&#xA;up everyday thinking about work, the next thing to do, my next project,&#xA;retirement, why am I so sweaty in the morning?&amp;hellip; But after a few deep breaths,&#xA;eventually making my way to my desk with a cup of coffee and a sense of&#xA;direction to start my day, I&amp;rsquo;ve been sitting down and reflecting not just on&#xA;some random passage from a devotional, but through this Advent season&#xA;regularly, daily, reflecting on the core themes. By God&amp;rsquo;s grace this has been a&#xA;great gift to me, and without this daily (or mostly daily) reorientation, I am&#xA;sure the stress I do still feel would be multiplied by orders of magnitude.&lt;/p&gt;&#xA;&lt;p&gt;We light the Love candle tomorrow, but today is good for me to wrap up the last&#xA;3 weeks with this simple verse. I know God loves me, this next week of&#xA;reflection I look forward to what he shares with me. And today the Word of God&#xA;reminds me that hope, joy, and peace are apart of God&amp;rsquo;s design for our lives.&#xA;Those things are found and fulfilled in the Person and Work of Jesus. He then&#xA;left us the helper, the Holy Spirit, to carry us forward while we wait for his&#xA;return. Today, it&amp;rsquo;s in the Spirit&amp;rsquo;s power that God&amp;rsquo;s hope may overflow our&#xA;hearts, and if we&amp;hellip; if I am overflowing with hope and love and peace in Jesus,&#xA;then I sure hope more that the &amp;ldquo;Christmas Cheer&amp;rdquo; God gives to me does a&#xA;partnering work in bringing Heaven to earth while we expectantly wait for the&#xA;return of the King.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-20 Notes</title>
    <id>https://pype.dev/2025-12-20-notes/</id>
    <updated>2025-12-20T05:34:47Z</updated>
    <published>2025-12-20T05:34:47Z</published>
    <link href="https://pype.dev/2025-12-20-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-19-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-19-notes]]&#xA;&#xA;## Today&#xA;&#xA;- started another mcp server with opencode for sermon editing with church... feels so simple that an agent should be able to do it&#xA;- opencode also implementing quadtask v2 as a notifiq app&#xA;&#xA;## Bugs&#xA;&#xA;- zensical builds are broken in forgejo, maybe it&#39;s the runner image I&#39;m using so might need to update it?&#xA;  - having an image at home with just, zensical, uv, etc. built in already would be appropriate&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-19 Notes</title>
    <id>https://pype.dev/2025-12-19-notes/</id>
    <updated>2025-12-19T08:03:54Z</updated>
    <published>2025-12-19T08:03:54Z</published>
    <link href="https://pype.dev/2025-12-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-18-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-18-notes]]&#xA;&#xA;## TODO&#xA;&#xA;- santa tracker in home assistant&#xA;  - [github repo](https://github.com/chrisefrost/HomeAssistant-Santa-Tracker)&#xA;- Consider the [Pushover Docs](https://support.pushover.net/i8-how-much-does-pushover-cost-is-there-a-subscription) for inspiration on notifiq docs as well&#xA;&#xA;Progress on notifiq today in the ways of adding more notification channel&#xA;providers. Also working on user onboarding docs - there are many perspectives&#xA;to consider.&#xA;&#xA;Opencode absolutely nailing my cloudflare-terraform stuff today, these modules&#xA;are getting clean and I&#39;ll plan to blog about it once it&#39;s done.&#xA;&#xA;- it got stuck with worker proxy stuff, understandable since it requires cloudflare domain knowledge&#xA;- josh&#39;s site redirects still, it isn&#39;t his url so I still need to fix that&#xA;&#xA;- put together a [santa tracker](https://git.paynepride.com/nic/santa-tracker) today&#xA;&#xA;## BUGS&#xA;&#xA;- repoflow bug... when my library is set to private, I can login and push from forgejo with my bot account. if I make the library public, then the push fails from forgejo with 401&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Matthew 5:11-12</title>
    <id>https://pype.dev/advent-matthew-5-11-12/</id>
    <updated>2025-12-18T05:08:56Z</updated>
    <published>2025-12-18T05:08:56Z</published>
    <link href="https://pype.dev/advent-matthew-5-11-12/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Matthew 5:11-12&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Matthew 5:11-12&lt;/p&gt;&#xA;&lt;p&gt;11 Blessed are you  when they insult you and persecute you and say all kinds of evil things against you, lying on account of me. 12 Rejoice and be glad, because your reward is great in heaven, for in the same way they persecuted the prophets before you.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;context&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Context&lt;/span&gt; &lt;a href=&#34;#context&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To drop some context that I&amp;rsquo;m familiar with, this is from a famous section of&#xA;Jesus&amp;rsquo; &amp;ldquo;Sermon on the Mount&amp;rdquo; called &amp;ldquo;The Beatitudes&amp;rdquo;. A little unknown fact in&#xA;a lot of Christian circles is that these phrases from Matthew 5:3-12 are&#xA;derived from some ancient Jewish wisdom (esus didn&amp;rsquo;t come up with these on the&#xA;fly). Most of these saying come from something called &amp;ldquo;The Book of Wisdom&amp;rdquo;&#xA;and they had a history of being used as a way of defining who was close to God&#xA;and who wasn&amp;rsquo;t. Jesus takes the ancient and perverted pseudo-wisdom here and&#xA;turns it on its head. He&amp;rsquo;s not giving instructions, he&amp;rsquo;s giving correction to&#xA;people who have been abused by civic and religious powers at be.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt; &lt;a href=&#34;#reflection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So I know Jesus is not saying I should go out and pursue persecution and&#xA;slander. Nor is he saying that just because someone might be mean to me for my&#xA;faith, that I&amp;rsquo;m practicing my faith in an appropriate way.&lt;/p&gt;&#xA;&lt;p&gt;But what Jesus is doing is acknowledging that the world fundamentally does&#xA;reject him. Ultimately, at a level more foundational than the atoms that make&#xA;up the universe, creation is broken right now. It&amp;rsquo;s being redeemed, but it&amp;rsquo;s&#xA;also broken. In its broken state, like a body that is sick, it might reject&#xA;things that are good for it.&lt;/p&gt;&#xA;&lt;p&gt;Humans are apart of creation, humans are apart of what is broken, and humans,&#xA;in our brokenness, reject ultimate goodness by our very broken nature. Jesus&#xA;says that when the world persecutes us because of him, it&amp;rsquo;s a simple truth made&#xA;manifest&amp;hellip; The broken world continues to reject Jesus, and as you or I are&#xA;brought further into the fold of God&amp;rsquo;s family, then those outside, those still under&#xA;the crushing, oppressive thumb of sin and death, can not&#xA;help but carry out their natural inclination against that which is good. It is&#xA;quite literally only natural.&lt;/p&gt;&#xA;&lt;p&gt;So should I find myself offended when someone naturally rejects me on account&#xA;of Jesus&amp;rsquo; presence in my life? I think I should instead almost pity them, and&#xA;pray that Jesus calls their name too.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-18 Notes</title>
    <id>https://pype.dev/2025-12-18-notes/</id>
    <updated>2025-12-18T05:07:45Z</updated>
    <published>2025-12-18T05:07:45Z</published>
    <link href="https://pype.dev/2025-12-18-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-15-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-15-notes]]&#xA;&#xA;- trying opencode today to generate a Linux MCP server so I can get some simple LLM-driven insights into a few things on my servers&#xA;&#xA;## WINS&#xA;&#xA;Today was huge for personal stuff, opencode is a beast even in the free `Big Pickle` + `Zen` offering. Windsurf with Opus-4-5 is doing well also&#xA;&#xA;- Revamped the theme of [pype.dev](https://pype.dev)&#xA;- Rebuilt [Digital Harbor](https://mydigitalharbor.com)&#xA;  - including link pages&#xA;- Cleaned up and modularized a ton of terraform for my domains:&#xA;  - paynepride.com&#xA;  - pype.dev&#xA;  - 1man1.band and 1man1band.com&#xA;  - notifiq.net&#xA;&#xA;## For Tomorrow&#xA;&#xA;- josh&#39;s page needs his picture fixed&#xA;- josh&#39;s domains are broken... need to figure out a cloudflare solution or else a duplicate build&#xA;- notifiq docs and user onboarding should be focus - try gpt 5.2&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - John 15:10-11</title>
    <id>https://pype.dev/advent-john-15-10-11/</id>
    <updated>2025-12-17T05:39:34Z</updated>
    <published>2025-12-17T05:39:34Z</published>
    <link href="https://pype.dev/advent-john-15-10-11/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;John 15:10-11&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 15:10-11&lt;/p&gt;&#xA;&lt;p&gt;10 If you keep my commandments, you will remain in my love, just as I have kept my Father’s commandments and remain in his love. 11 I have spoken these things to you in order that my joy may be in you, and your joy may be made complete.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is a beautiful couple verses about love that have only made more and more&#xA;sense to me as I get older and I have become a dad.&lt;/p&gt;&#xA;&lt;p&gt;Commandments are not necessarily about &lt;em&gt;control&lt;/em&gt;. I see this illogical line of thinking&#xA;EVERYWHERE - that advocating for rules and boundaries in life can quickly get&#xA;conflated with &amp;ldquo;you want to control me/them!&amp;rdquo;. I think the general population really&#xA;fails to understand that the lack of boundaries doesn&amp;rsquo;t make you free, it turns&#xA;you into a slave of your most powerful desire. It is literally in the human-nature.&lt;/p&gt;&#xA;&lt;p&gt;Random boundaries though are not helpful or loving&amp;hellip; Restriction without&#xA;purpose, or for &lt;em&gt;the wrong&lt;/em&gt; reason, can put you into a situation you weren&amp;rsquo;t&#xA;designed to be in. I believe humans were created according to a design, and&#xA;like anything else with a purpose there are appropriate ways and places to&#xA;live, be, act, etc. as well as inappropriate ways and places. The&#xA;appropriatedness can only be determined by the one who knows the design&#xA;though&amp;hellip;. otherwise someone is just guessing what the purposeful boundary or&#xA;restriction is.&lt;/p&gt;&#xA;&lt;p&gt;In the case of our own reality, the architect of the universe is Jesus himself,&#xA;and in his divine knowledge of all of Creation he gives commandments&#xA;(boundaries and regulations) that are in &lt;strong&gt;perfect alignment with our design&#xA;and purpose&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;From here it sounds so simple&amp;hellip; The commandments from the Lord come from an&#xA;understanding of what is &lt;strong&gt;actually best for the human life&lt;/strong&gt;. Because Jesus&#xA;&lt;strong&gt;actually knows better than you or me&lt;/strong&gt; when we are in line with his&#xA;commandments, when we &amp;ldquo;remain in [his] love&amp;rdquo;, we are more in-line with our&#xA;created purpose than when we think we know better for ourselves. It&amp;rsquo;s&#xA;practically a law of nature that things work best when used for their created&#xA;purpose, and in the human-design I think it&amp;rsquo;s no different. Jesus offers the&#xA;framework for the fulfilled human life - it&amp;rsquo;s not attainable without the&#xA;freedom to love him, but for the chosen - his joy follows love and freedom.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;For who?&lt;/p&gt;&#xA;&lt;p&gt;The life of freedom is only fully possible for whoever Jesus picks. Without&#xA;him awakening your heart to love what is truely lovely and hate what is truely&#xA;despicable then you&amp;rsquo;ll never want anything that he offers. The&#xA;understanding of &amp;ldquo;his way is better&amp;rdquo; is only possible in the mind and heart of&#xA;the person whom Jesus raises to life out of the chaotic ocean of death.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Today God gives me the freedom to keep his commandments. I&amp;rsquo;ll make my choice&#xA;moment by moment and pray continuously that he sustains my trust in him - to&#xA;ignore my dead-self&amp;rsquo;s desires and instead to keep the commandments of the Lord&#xA;so that my joy may be made complete&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Luke 2:10-11</title>
    <id>https://pype.dev/advent-luke-2-10-11/</id>
    <updated>2025-12-16T04:55:33Z</updated>
    <published>2025-12-16T04:55:33Z</published>
    <link href="https://pype.dev/advent-luke-2-10-11/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Luke 2:10-11&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 2:10-11&lt;/p&gt;&#xA;&lt;p&gt;10 And the angel said to them, “Do not be afraid, for behold, I bring good news to you of great joy which will be for all the people: 11 that today a Savior, who is Christ the Lord, was born for you in the city of David.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-15 Notes</title>
    <id>https://pype.dev/2025-12-15-notes/</id>
    <updated>2025-12-15T05:43:57Z</updated>
    <published>2025-12-15T05:43:57Z</published>
    <link href="https://pype.dev/2025-12-15-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-14-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-14-notes]]&#xA;&#xA;## Printing Today&#xA;&#xA;- shelf/bracket for basement camera (1 hr)&#xA;- GB pieces (9 hrs)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Isaiah 51:3</title>
    <id>https://pype.dev/advent-isaiah-51-3/</id>
    <updated>2025-12-15T05:40:47Z</updated>
    <published>2025-12-15T05:40:47Z</published>
    <link href="https://pype.dev/advent-isaiah-51-3/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Isaiah 51:1-3&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 51:1-3&lt;/p&gt;&#xA;&lt;p&gt;1 “Listen to me, you who pursue righteousness,  who seek Yahweh.  Look to&#xA;the rock from which you were hewn,  and to the excavation of the pit from which&#xA;you were quarried.&#xA;2 Look to Abraham your father,  and to Sarah; she brought&#xA;you forth.  For I called him alone,  but I blessed him and made him numerous.”&#xA;3 For Yahweh will comfort Zion;  he will comfort all its sites of ruins.  And&#xA;he will make its wilderness like Eden,  and its desert like the garden of&#xA;Yahweh.  Joy and gladness will be found in it,  thanksgiving and the sound of&#xA;song.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;joy-in-the-father&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Joy in the Father&lt;/span&gt; &lt;a href=&#34;#joy-in-the-father&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On the heels of yesterday, I&amp;rsquo;m still struggling with Joy, but here in Isaiah&#xA;some context aligns Joy with Gladness (which feels very much in-line with my&#xA;association of Gratitude with Happiness).&lt;/p&gt;&#xA;&lt;p&gt;So where will joy and gladness be found? It sounds to me like &amp;ldquo;Zion&amp;rdquo;. Zion is&#xA;the Mountain of God. In the ANE gods lived on high mountain tops with lush&#xA;gardens. Think of the cartoon example of Hercules with the pantheon up on&#xA;Olympus.&lt;/p&gt;&#xA;&lt;p&gt;Zion is also the people of God - even today we sometimes use national or ethnic&#xA;titles to refer to the people of that area. National leaders may address the&#xA;citizens of America by saying &amp;ldquo;Listen to me, America&amp;rdquo; or something like that -&#xA;I think my point is that we&amp;rsquo;d all &amp;ldquo;get it&amp;rdquo; in that moment. In a similar way,&#xA;that communication shouldn&amp;rsquo;t be lost on us here.&lt;/p&gt;&#xA;&lt;p&gt;The prophet is speaking to &amp;ldquo;you who pursue righteousness, who seek Yahweh&amp;hellip;&#xA;Yahweh will comfort Zion (you)&amp;hellip;&amp;rdquo;. In that comfort is 2 things from this&#xA;passage: Election and Legacy.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Election&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Look to the rock from which you were hewn&amp;hellip;&amp;rdquo;. Does the rock decide which&#xA;pieces are chiseled away and which pieces remain? Of course not, the sculptor&#xA;or foreman does that. In, honestly, the same way - who am I to have chosen God&#xA;on my own&amp;hellip; Without his hand coming to the rock to separate me (any anyone&#xA;else in the Lord) I would forever remain stagnant in my cold, hard, dead state.&#xA;But Yahweh chooses - and what can follow his choice to hewn me from the rock?&#xA;Why, it&amp;rsquo;s nothing but Joy and Gladness!&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Legacy&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Look to Abraham your father, and to Sarah; she brought you forth&amp;rdquo;. God&amp;rsquo;s&#xA;people have a long legacy, a real legacy, to look back on and be encouraged by&#xA;God&amp;rsquo;s faithfulness in his election. The legacy isn&amp;rsquo;t just back to &amp;ldquo;Father&#xA;Abraham&amp;rdquo;, my mind goes to my own life and now that I have some years under my&#xA;belt I can look back and see time and time again where God showed his love for&#xA;me in extraordinary ways. I do hope it isn&amp;rsquo;t the physical blessings that he&#xA;gives that bring me joy, but rather that it is the unending history of&#xA;faithfulness to me as his child.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Joy is found in Zion because it is where Yahweh lives, and joy and gladness are&#xA;found in fullness in him alone. His comfort today is realized in his word and&#xA;legacy of faithfulness, and his comfort tomorrow will be realized by Jesus&#39;&#xA;return and the consummation of the Kingdom of God.&lt;/p&gt;&#xA;&lt;p&gt;Work is hard, life is unfair, sickness will continue but at the appointed time,&#xA;when Yahweh &amp;ldquo;make[s] [Zion&amp;rsquo;s] wilderness like Eden&amp;rdquo; there will be joy,&#xA;gladness, thanksgiving, and the sound of song.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-14 Notes</title>
    <id>https://pype.dev/2025-12-14-notes/</id>
    <updated>2025-12-14T19:23:33Z</updated>
    <published>2025-12-14T19:23:33Z</published>
    <link href="https://pype.dev/2025-12-14-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-12-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-12-notes]]&#xA;&#xA;- Been a rough couple days with sick wife, sick me, young kids, and life doesn&#39;t stop...&#xA;- I am cleaning up Digital Harbor infrastructure&#xA;  - there was stuff in spacelift, mostly gone&#xA;  - wrangler was in GH Actions, going to build the site in forgejo and push to GH and let Cloudflrae do it from there just like pype.dev&#xA;  - I need to dedicate an hour or 2 to the terraform stuff...&#xA;    - cloudflare pages + config&#xA;    - namecheap DNS&#xA;    - cloudflare tunnel&#xA;    - cloudflare DNS&#xA;    - I&#39;ve had a couple bespoke modules that are hot garbage, I think I can have one stack instead of one per domain... need to explore that&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Psalm 105:43</title>
    <id>https://pype.dev/advent-psalm-105-43/</id>
    <updated>2025-12-14T09:48:03Z</updated>
    <published>2025-12-14T09:48:03Z</published>
    <link href="https://pype.dev/advent-psalm-105-43/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Psalm 105:43&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 105:43&lt;/p&gt;&#xA;&lt;p&gt;And so he brought out his people with joy,  his chosen ones with rejoicing.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Joy is a toughy right now if I&amp;rsquo;m honest&amp;hellip; Today marks the 3rd week of Advent,&#xA;today we light the Joy candle. But honestly, joy is one that&amp;rsquo;s not just tough&#xA;now, it&amp;rsquo;s a hard thing for me in general&amp;hellip; &amp;ldquo;Hope&amp;rdquo; I feel like I get, I long for&#xA;the consummation of Heaven. &amp;ldquo;Peace&amp;rdquo; is another one that I can&amp;rsquo;t say I experience&#xA;all the time, but I know what it is, and I have felt, and do feel, &amp;ldquo;peace&amp;rdquo; to&#xA;divine degrees at times. Joy though&amp;hellip; I&amp;rsquo;m an excitable person, I&amp;rsquo;m passionate&#xA;about the things I&amp;rsquo;m passionate about, but &amp;ldquo;joy&amp;rdquo; isn&amp;rsquo;t an emotion or&#xA;state-of-being that I feel very familiar with.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s probably not correct to use the word &amp;ldquo;emotion&amp;rdquo; for the Advent-pillar of&#xA;&lt;code&gt;Joy&lt;/code&gt;, but it doesn&amp;rsquo;t feel wholly inappropriate either&amp;hellip; I think of &amp;lsquo;joy&amp;rsquo; as&#xA;an outward response to a thing, and if I were to be pressed to think about what&#xA;&amp;ldquo;inward-joy&amp;rdquo; might be, I think I&amp;rsquo;d default to how I understand &amp;ldquo;peace&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Joy, though, can&amp;rsquo;t only be outward, there must be something internal&amp;hellip; &amp;ldquo;Peace&amp;rdquo;&#xA;reminds me of feelings like calm and serenity to me, but &amp;ldquo;joy&amp;rdquo; reminds me of&#xA;feelings of happiness and gratitude&amp;hellip; Maybe that&amp;rsquo;s where joy becomes almost a&#xA;virtue - happiness accompanied with gratitude.&lt;/p&gt;&#xA;&lt;p&gt;I suppose with that springboard, I feel great joy when I&amp;rsquo;m with close friends,&#xA;experiencing community with people who really know me. I don&amp;rsquo;t know what it&#xA;says about me that the most recent time of excessive &amp;ldquo;joy&amp;rdquo; I can remember was&#xA;from a weekend-getaway trip to the Dells with our best friends back in&#xA;January&amp;hellip; We don&amp;rsquo;t get to see Michael and Kathryn (+ the kiddos!) very often.&#xA;By God&amp;rsquo;s grace on their lives, we are 1 of many close family-friends to&#xA;them. By God&amp;rsquo;s same grace on our lives, they are 1 of a &lt;strong&gt;very few&lt;/strong&gt; close&#xA;family-friends to us, and so when we do get to see them and plan a few days&#xA;together every couple of years, it warms my heart so much that if we booked the&#xA;next trip this morning I&amp;rsquo;d forget about being sick and how cold it is outside&#xA;(wind chill -29F).&lt;/p&gt;&#xA;&lt;p&gt;Things for me right this very second are not incredibly joyful, but all things&#xA;considered it&amp;rsquo;s impossible to not find peace in the provision of Yahweh in my&#xA;life. I&amp;rsquo;m thankful for when joy enters my being and I get to experience it, I&#xA;pray Jesus broadens my heart and mind this week during the reflections on Joy&#xA;for the sake my own righteousness.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Ephesians 4:3</title>
    <id>https://pype.dev/advent-ephesians-4-3/</id>
    <updated>2025-12-13T05:05:56Z</updated>
    <published>2025-12-13T05:05:56Z</published>
    <link href="https://pype.dev/advent-ephesians-4-3/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Ephesians 4:1-6&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ephesians 4:1-6&lt;/p&gt;&#xA;&lt;p&gt;4Therefore I, the prisoner in the Lord, exhort you to live in a manner&#xA;worthy of the calling with which you were called: 2 with all humility and&#xA;gentleness, with patience, putting up with one another in love, 3 being eager&#xA;to keep the unity of the Spirit in the bond of peace; 4 one body and one Spirit&#xA;(just as also you were called with one hope of your calling), 5 one Lord, one&#xA;faith, one baptism, 6 one God and Father of all, who is over all, and through&#xA;all, and in all.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;unity-and-peace&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Unity and Peace&lt;/span&gt; &lt;a href=&#34;#unity-and-peace&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once again I say &amp;ldquo;Praise God&amp;rdquo; this morning for more words of Scripture that&#xA;succinctly highlight the beauty of the Gospel.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&amp;ldquo;I, the prisoner in the Lord&amp;hellip;&amp;rdquo; No one knows better than Paul that if Jesus&#xA;says &amp;ldquo;Come to me&amp;rdquo; you have no choice but to obey.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;with humility, gentleness, and patience put up with one another in love, be&#xA;eager to keep the unity of the Spirit in the bond of peace&amp;rdquo;. Christian&#xA;community was literally the talk of the town in the early church - it was so&#xA;odd that historians have written about &amp;ldquo;The Way&amp;rdquo; (the early early name of the&#xA;Christian movement). Acts says believers &amp;ldquo;had all things in common&amp;rdquo;. Jesus&#xA;brings unity that transcends any differences between us.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;one&amp;hellip;one&amp;hellip;one&amp;hellip;&amp;rdquo; Paul is saying so clearly that we are one family in&#xA;Christa. Later in the same letter he says &amp;ldquo;be eager to do good to all, and&#xA;especially to those in the household of faith&amp;rdquo;. Christians should be meeting&#xA;the needs of those around them, but even more so meeting the needs of our&#xA;brothers and sisters in Christ.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I really strive for unity&amp;hellip; My whole life people have accused me of loving an&#xA;argument (which is true) but I am not pugnacious. I do not enjoy fighting - I&#xA;do enjoy rhetoric and debate, but by God&amp;rsquo;s grace I hate division. There are&#xA;several examples I can point to in my life where unity and &amp;ldquo;team spirit&amp;rdquo; was&#xA;important to me.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Simple Example&lt;/p&gt;&#xA;&lt;p&gt;I worked for Summit Ministries for several summers, eventually serving on&#xA;some leadership positions. While in those positions I wanted to do &amp;ldquo;extra&amp;rdquo;&#xA;things to unify our counselors, and one was that every year I&amp;rsquo;d design a&#xA;sweatshirt that we&amp;rsquo;d all (or most of us) would buy. I just love the idea of&#xA;being united for a common and GOOD goal.o&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Christians should be the most unified and loving people on the planet&amp;hellip;&#xA;unfortunately that isn&amp;rsquo;t the case, and I know a lot of people in and out of the&#xA;Church who have experienced great disunity and division. That really is&#xA;unfortunate, but I think the only thing I can do is march forward to the beat&#xA;of the drum Jesus has for me. And one of those beats is to strive for unity&#xA;&amp;ldquo;putting up with one another in love, being eager to keep the unity of the&#xA;Spirit in the bond of peace&amp;rdquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Setup A Cloudflare Tunnel With Terraform</title>
    <id>https://pype.dev/setup-a-cloudflare-tunnel-with-terraform/</id>
    <updated>2025-12-12T21:06:59Z</updated>
    <published>2025-12-12T21:06:59Z</published>
    <link href="https://pype.dev/setup-a-cloudflare-tunnel-with-terraform/" rel="alternate" type="text/html"></link>
    <summary type="text">I am cooking up some stuff at home and want to put it on the interwebs, but I don&#39;t want it on the same infra as my homelab. Now... I only have a server or...</summary>
    <content type="html">&lt;p&gt;I am cooking up some stuff at home and want to put it on the interwebs, but I&#xA;don&amp;rsquo;t want it on the same infra as my homelab. Now&amp;hellip; I only have a server or&#xA;2, so to some degree it will be, but networking-wise I didn&amp;rsquo;t want to funnel&#xA;extra traffic through my reverse proxy.&lt;/p&gt;&#xA;&lt;p&gt;So, I&amp;rsquo;d heard about Cloudflare Tunnels - they sound like P2P VPN to me, but I&#xA;know there&amp;rsquo;s layers of the networking stack I&amp;rsquo;m blatantly ignoring. &amp;ldquo;What the&#xA;tunnel is&amp;rdquo; isn&amp;rsquo;t much the point - I&amp;rsquo;m here to show you how to set one up and&#xA;get yourself a fancy &lt;a href=&#34;https://app.mydomain.com&#34;&gt;https://app.mydomain.com&lt;/a&gt; for your web app running&#xA;kind of wherever you want&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Example Repo linked at the bottom&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;requirements&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Requirements&lt;/span&gt; &lt;a href=&#34;#requirements&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol start=&#34;0&#34;&gt;&#xA;&lt;li&gt;Terraform or open-tofu. I currently use open-tofu but either would be fine.&#xA;&lt;code&gt;brew install open-tofu&lt;/code&gt; is a simple way to get going&lt;/li&gt;&#xA;&lt;li&gt;Cloudflare account with a domain&lt;/li&gt;&#xA;&lt;li&gt;API token with permissions:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Account:Cloudflare Tunnel:Edit&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Zone:DNS:Edit&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cloudflared&lt;/code&gt; (the example repo runs cloudflared in a docker compose stack)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;tunnel&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Tunnel&lt;/span&gt; &lt;a href=&#34;#tunnel&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The module is simple and has just a few resources:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tofu state list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;module.tunnel.cloudflare_record.tunnel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;module.tunnel.cloudflare_tunnel_config.this&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;module.tunnel.cloudflare_zero_trust_tunnel_cloudflared.this&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;module.tunnel.random_id.tunnel_secret&#xA;&lt;/span&gt;&lt;/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;We see there will be the a DNS record that tofu references by the key &amp;ldquo;tunnel&amp;rdquo;.&#xA;There is a tunnel configuration resource, the tunnel resource itself, and&#xA;finally the associated secret required for the cloudflared daemon that will run&#xA;alongside your webapp.&lt;/p&gt;&#xA;&lt;p&gt;To get started you&amp;rsquo;ll need to fill out the example &lt;code&gt;terraform.tfvars&lt;/code&gt; file with&#xA;your info:&lt;/p&gt;&#xA;&lt;pre class=&#34;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;# Copy to terraform.tfvars and fill in values&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DO NOT commit terraform.tfvars to git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cloudflare_api_token&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;your-api-token-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;n&#34;&gt;cloudflare_account_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;your-account-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;n&#34;&gt;cloudflare_zone_id&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;your-zone-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;n&#34;&gt;domain&lt;/span&gt;                &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;example.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;n&#34;&gt;subdomain&lt;/span&gt;             &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;app&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tunnel_name&lt;/span&gt;           &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;my-tunnel&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_service&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:8000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can grab your account id and zone id from Cloudflare&amp;rsquo;s dashboard for your&#xA;domain. It&amp;rsquo;s near the bottom of the Overview page&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251213113332_0e0f09b8.png&#34; alt=&#34;20251213113332_0e0f09b8.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Then I presume you have a domain already, but if not hop over to namecheap to&#xA;snag one and then register it with cloudflare so they can manage your DNS. I&#xA;have terraform for this as well, a future blog post will combine this with a&#xA;fuller terraform&amp;rsquo;d cloudflare setup for simple domain use cases&lt;/p&gt;&#xA;&lt;p&gt;Once you fill those out, hit it with the &lt;code&gt;tofu init&lt;/code&gt; and &lt;code&gt;tofu plan&lt;/code&gt; to see what&amp;rsquo;s up&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;NOTE: &lt;code&gt;terraform.tfvars&lt;/code&gt; is automatically sourced by terraform/tofu, you can name the file differently and then pass &lt;code&gt;-var-file=myvars.tfvars&lt;/code&gt; to the commands&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The initial plan should 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenTofu used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  + create&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenTofu will perform the following actions:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# module.tunnel.cloudflare_record.tunnel will be 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;  + resource &lt;span class=&#34;s2&#34;&gt;&amp;#34;cloudflare_record&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tunnel&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;allow_overwrite&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;nv&#34;&gt;comment&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Managed by Terraform - soonish-tunnel&amp;#34;&lt;/span&gt;&#xA;&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;content&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;created_on&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;hostname&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;id&lt;/span&gt;              &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;metadata&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;modified_on&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;name&lt;/span&gt;            &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;app&amp;#34;&lt;/span&gt;&#xA;&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;proxiable&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;proxied&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;nv&#34;&gt;ttl&lt;/span&gt;             &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;            &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;CNAME&amp;#34;&lt;/span&gt;&#xA;&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;value&lt;/span&gt;           &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;zone_id&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;REDACTED&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;c1&#34;&gt;# module.tunnel.cloudflare_tunnel_config.this will be 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;  + resource &lt;span class=&#34;s2&#34;&gt;&amp;#34;cloudflare_tunnel_config&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;this&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;account_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;REDACTED&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;nv&#34;&gt;id&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;tunnel_id&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      + config &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          + ingress_rule &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&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;hostname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;app.notifiq.net&amp;#34;&lt;/span&gt;&#xA;&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;service&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost: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;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          + ingress_rule &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&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;service&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http_status:404&amp;#34;&lt;/span&gt;&#xA;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# module.tunnel.cloudflare_zero_trust_tunnel_cloudflared.this will be 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;  + resource &lt;span class=&#34;s2&#34;&gt;&amp;#34;cloudflare_zero_trust_tunnel_cloudflared&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;this&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;account_id&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;REDACTED&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;nv&#34;&gt;cname&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;id&lt;/span&gt;           &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;name&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;soonish-tunnel&amp;#34;&lt;/span&gt;&#xA;&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;secret&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sensitive value&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;tunnel_token&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sensitive value&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;c1&#34;&gt;# module.tunnel.random_id.tunnel_secret will be 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;  + resource &lt;span class=&#34;s2&#34;&gt;&amp;#34;random_id&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tunnel_secret&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;b64_std&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;b64_url&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;byte_length&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;32&lt;/span&gt;&#xA;&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;dec&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;hex&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;id&lt;/span&gt;          &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;known after apply&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;Plan: &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; to add, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; to change, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; to destroy.&#xA;&lt;/span&gt;&lt;/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;As long as that looks good you to, then we &lt;code&gt;tofu apply&lt;/code&gt; next (type &lt;code&gt;yes&lt;/code&gt; when&#xA;asked or pass &lt;code&gt;-auto-approve&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Afterwards &lt;code&gt;tofu state list&lt;/code&gt; should show you the 4 resources, and if you go to&#xA;your cloudflare zone&amp;rsquo;s dashboard you should see the CNAME associated with the&#xA;tunnel address&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251213120004_d199e5fd.png&#34; alt=&#34;20251213120004_d199e5fd.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;daemon&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Daemon&lt;/span&gt; &lt;a href=&#34;#daemon&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Run the compose stack or the binary itself. Get the token from terraform state with &lt;code&gt;tofu output -raw tunnel_token&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;TUNNEL_TOKEN=$(tofu output -raw tunnel_token) docker compose up -d&lt;/code&gt; will do you nicely&lt;/p&gt;&#xA;&lt;p&gt;Enjoy your tunnel!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday/example-terraform-cloudflare-tunnel&#34;&gt;example repo&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Ephesians 2:14-16</title>
    <id>https://pype.dev/advent-ephesians-2-14-16/</id>
    <updated>2025-12-12T04:57:12Z</updated>
    <published>2025-12-12T04:57:12Z</published>
    <link href="https://pype.dev/advent-ephesians-2-14-16/" rel="alternate" type="text/html"></link>
    <summary type="text">The reflection in the BP calendar for today was only verses 14-15 but they made no sense to me without some more context</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;The reflection in the BP calendar for today was only verses 14-15 but they made no sense to me without some more context&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ephesians 2:11-22&lt;/p&gt;&#xA;&lt;p&gt;11 Therefore remember that formerly you, the Gentiles in the flesh, the&#xA;so-called uncircumcision by the so-called circumcision in the flesh, made by&#xA;hands, 12 that you were at that time apart from Christ, alienated from the&#xA;citizenship of Israel, and strangers to the covenants of promise, not having&#xA;hope, and without God in the world. 13 But now in Christ Jesus you, the ones&#xA;who once were far away, have become near by the blood of Christ. 14 For he&#xA;himself is our peace, who made both one and broke down the dividing wall of the&#xA;partition, the enmity, in his flesh, 15 invalidating the law of commandments in&#xA;ordinances, in order that he might create the two in himself into one new man,&#xA;thus making peace, 16 and might reconcile both in one body to God through the&#xA;cross, killing the enmity in himself. 17 And coming, he proclaimed the good&#xA;news of peace to you who were far away and peace to the ones who were near,&#xA;18 because through him we both have access in one Spirit to the Father.&#xA;19 Consequently, therefore, you are no longer strangers and foreigners, but you&#xA;are fellow citizens of the saints and members of the household of God, 20 built&#xA;on the foundation of the apostles and prophets, Christ Jesus himself being the&#xA;cornerstone, 21 in whom the whole building, joined together, grows into a holy&#xA;temple in the Lord, 22 in whom you also are built up together into a dwelling&#xA;place of God in the Spirit.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Summary&lt;/span&gt; &lt;a href=&#34;#summary&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a dense section, like a lot of Paul&amp;rsquo;s letters, so no surprise. I think the&#xA;simplest truth from this passage is that to be a &amp;ldquo;citizen of heaven&amp;rdquo; requires&#xA;nothing more than to be chosen by Jesus. For much of the Bible, and the history&#xA;of Israel, the first requirement was being in the physical nation of Israel -&#xA;God&amp;rsquo;s chosen people. Jesus comes to unleash the blessing of adoption and&#xA;reconiciliiation onto the whole world, not just one imperfect white-washed&#xA;nation.&lt;/p&gt;&#xA;&lt;p&gt;TLDR: Jesus brings peace through unity of faith in his saving power - there is&#xA;nothing that can separate God&amp;rsquo;s own from himself, including who your ancestors&#xA;are.&lt;/p&gt;&#xA;&lt;h2 id=&#34;peace&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Peace&lt;/span&gt; &lt;a href=&#34;#peace&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&amp;ldquo;For he himself is our peace&amp;rdquo;&amp;hellip; Amen and amen. My reflections during and prior&#xA;to Advent this year have strong running themes of freedom and peace because by&#xA;God&amp;rsquo;s grace he&amp;rsquo;s impressing these blessings into my heart. In the stillness of&#xA;the morning or the chaos of the afternoon, I can thankfully say that the name&#xA;of Jesus never fails to ground my feet in the reality of his kingdom, and at the&#xA;very least - draw my eyes above the trial to the horizon - where just like I&#xA;can see nothing without the sun&amp;rsquo;s light, the world is clearer and more peaceful&#xA;in the light of the Son of God.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-12 Notes</title>
    <id>https://pype.dev/2025-12-12-notes/</id>
    <updated>2025-12-12T04:56:48Z</updated>
    <published>2025-12-12T04:56:48Z</published>
    <link href="https://pype.dev/2025-12-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-11-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-11-notes]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Colossians 1:19-20</title>
    <id>https://pype.dev/advent-colossians-1-19-20/</id>
    <updated>2025-12-11T05:38:49Z</updated>
    <published>2025-12-11T05:38:49Z</published>
    <link href="https://pype.dev/advent-colossians-1-19-20/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Colossians 1:19-20&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Colossians 1:19-20&lt;/p&gt;&#xA;&lt;p&gt;19 For God was pleased to have  all his fullness dwell in him,  20 and through him to reconcile  everything to himself,  whether things on earth or things in heaven,  by making peace  through his blood, shed on the cross.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I feel like there&amp;rsquo;s so much that could be unpacked here&amp;hellip;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;all his fullness dwell him in&amp;rdquo; - so besides the entire Gospel of John how&#xA;can anyone deny that Jesus is God? I don&amp;rsquo;t understand anyone who claims to take&#xA;the Bible as an authority and then deny Jesus&amp;rsquo; divinity.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;through him to reconcile everything to himself&amp;rdquo; - not all people are saved,&#xA;it&amp;rsquo;s a clear reality. So what does it mean for &lt;strong&gt;all things&lt;/strong&gt; to be&#xA;reconciled to God? Feels like that could go a lot of places.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;making peace through his blood&amp;rdquo; - before the cross there was an absence of&#xA;&amp;ldquo;peace&amp;rdquo;, and through Jesus&amp;rsquo; blood peace has been made. Moreso than just that,&#xA;the &amp;ldquo;make&amp;rdquo; (eirenopoieo: εἰρηνοποιέω) is in the aorist which I understand to be&#xA;a tense that means a thing &amp;ldquo;has happened&amp;rdquo; and &amp;ldquo;is done happening&amp;rdquo;. ie. it&amp;rsquo;s a&#xA;completed action in the past.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;kiss&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;KISS&lt;/span&gt; &lt;a href=&#34;#kiss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m going to keep-it-simple-silly here&amp;hellip; I don&amp;rsquo;t have the energy for arguments&#xA;or unpacking some of these theological ideas that I genuinely do love. I found&#xA;some old notes on this exact passage in Logos about reconiliation of angels and&#xA;some grammar questions. However, for this Advent reflection I think there&amp;rsquo;s&#xA;just a simple truth to see, and it&amp;rsquo;s one of the biggest points of the Story of&#xA;the Bible - Jesus makes peace, and he made peace through hard work, death.&lt;/p&gt;&#xA;&lt;p&gt;The glory of the peace Jesus made is lost on anyone who doesn&amp;rsquo;t recognize that&#xA;the world is broken. Jesus brings a new reality by unleashing Heaven to earth&#xA;through his victory on the cross. We live in an interim &amp;ldquo;already but not yet&amp;rdquo;&#xA;where the King Jesus is the rightful ruler over all creation, but he has yet to&#xA;come back and fully claim his own. The peace he made is a gift to all of&#xA;creation, for all of creation is his to reconcile.&lt;/p&gt;&#xA;&lt;p&gt;If Jesus calls your name, what are you going to do? What can you do? He&#xA;defeated death and holds the universe together&amp;hellip; you think you can say &amp;ldquo;no&amp;rdquo;?&#xA;What about Jesus &lt;em&gt;not&lt;/em&gt; calling the name of someone in your life? Is peace not&#xA;afforded to them? The Biblical truth is that it&amp;rsquo;s fully and totally up to Yahweh&#xA;to give his own to the Lord Jesus, and to keep each one without losing a hair&#xA;on their head. Those who are not of his kingdom will get what they naturally&#xA;want in the end. What that &lt;strong&gt;actually is&lt;/strong&gt; I do not know, but it is not&#xA;eternity in the presence of a Good King because if God hasn&amp;rsquo;t chosen you, you&#xA;can&amp;rsquo;t love the Good King. If God hasn&amp;rsquo;t chosen you - you can&amp;rsquo;t &lt;strong&gt;want&lt;/strong&gt; the&#xA;Good King. In the end, we all get what we want - the benefit of&#xA;those chosen by Yahweh is that we are freed to want what is actually good for&#xA;us. We are freed to love and live according to the purposes of our design.&lt;/p&gt;&#xA;&lt;p&gt;Today I pray Jesus impresses the reality of peace, and the freedom to want the&#xA;peace he made, deeper into my heart, amen.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-11 Notes</title>
    <id>https://pype.dev/2025-12-11-notes/</id>
    <updated>2025-12-11T05:38:33Z</updated>
    <published>2025-12-11T05:38:33Z</published>
    <link href="https://pype.dev/2025-12-11-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-09-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-09-notes]]&#xA;&#xA;- Linux Matters mentioned some song visualizers and one of the hosts even wrote&#xA;  one... I&#39;ve recently been lamenting that I&#39;m not very good at doing something&#xA;  &#34;just for me&#34;, I always need an angle and this is a pretty annoying mental&#xA;  battle that I&#39;m in the middle of practically all the time. But I loved&#xA;  visualizers as a kid, Windows Media Player + Limewire was a match made in&#xA;  heaven. So, I&#39;m gonna toss [this visualizer]() onto a screen today with my&#xA;  tunes&#xA;&#xA;- Messed around with Cloudflare Tunnels today finally. Sweet little piece of&#xA;  tech. I&#39;m going to use it for hosting notifiq. I got my tunnel setup with&#xA;  terraform which is awesome - I will bring that into my homelab infrastructure&#xA;  module and clean it all up since I took a look tonight after several months and&#xA;  oh boy have I learned a thing or 2 about terraform in that time...&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - John 16:33</title>
    <id>https://pype.dev/advent-john-16-33/</id>
    <updated>2025-12-10T05:03:04Z</updated>
    <published>2025-12-10T05:03:04Z</published>
    <link href="https://pype.dev/advent-john-16-33/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;John 16:33&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 16:33&lt;/p&gt;&#xA;&lt;p&gt;I have said these things to you so that in me you may have peace. In the world you have affliction, but have courage! I have conquered the world.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It&amp;rsquo;s interesting to read a little context around this morning&amp;rsquo;s Advent&#xA;reflection passage/verse&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 16:31-33&lt;/p&gt;&#xA;&lt;p&gt;31 Jesus replied to them, “Now do you believe? 32 Behold, an hour is coming—and has come—that you will be scattered each one to his own home, and you will leave me alone. And I am not alone, because the Father is with me. 33 I have said these things to you so that in me you may have peace. In the world you have affliction, but have courage! I have conquered the world.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It sounds to me like right on the heels of Jesus saying &amp;ldquo;hey, you&amp;rsquo;re gonna&#xA;leave me alone for a minute out of fear&amp;rdquo; he says &amp;ldquo;I still love you, have peace,&#xA;I am victorious&amp;rdquo;&amp;hellip; I think he&amp;rsquo;s saying that the important thing isn&amp;rsquo;t the&#xA;natural human response to pain and affliction to be to recede. Instead he&amp;rsquo;s&#xA;saying that in his victory, by his love for us, the affliction will be a&#xA;distant memory and Jesus is speaking in the reality of affliction being in the&#xA;past, because he has &lt;strong&gt;conquered the world&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When my daughter&amp;rsquo;s have to do something they are a little scared to do, or&#xA;something they don&amp;rsquo;t understand, my response to them is &amp;ldquo;I am your dad, I love&#xA;you, you don&amp;rsquo;t have to understand why I&amp;rsquo;m asking you to do this right now but&#xA;do you trust me?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;I try to drive home with my daughters (and my wife for that matter) that in any&#xA;single thing I do - they are my priority. I don&amp;rsquo;t always do the thing&#xA;appropriately, I&amp;rsquo;m not saying I&amp;rsquo;m infallible. But I think I get what Jesus is&#xA;saying here - he is the focus, he is the thing that matter, his victory is more&#xA;meaningful than my affliction and honestly the comfort from that affliction is&#xA;found in nothing more than trusting Jesus because I know he loves me. Just like&#xA;I ask my daughters to trust me, and I hope that trust calms their anxiety about&#xA;whatever I&amp;rsquo;ve asked of them, Jesus says &amp;ldquo;trust me - I have &lt;strong&gt;conquered the world&lt;/strong&gt;&amp;rdquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Zechariah 9:9-10</title>
    <id>https://pype.dev/advent-zechariah-9-9-10/</id>
    <updated>2025-12-09T05:06:22Z</updated>
    <published>2025-12-09T05:06:22Z</published>
    <link href="https://pype.dev/advent-zechariah-9-9-10/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Zechariah 9:9-10&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Zechariah 9:9-10&lt;/p&gt;&#xA;&lt;p&gt;9 Rejoice greatly, O daughter of Zion!  Shout aloud, O daughter of Jerusalem!  Look! Your king comes to you;  he is righteous and victorious,  humble and riding on a donkey,  and on a male donkey, the foal of a female donkey!  10 And I will cut off the chariot from Ephraim,  and the horse from Jerusalem;  the battle bow will be cut down,  and he will announce peace to the nations.  His dominion will be from sea to sea,  and from the River to the ends of the earth.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;My king is indeed coming, and has already come. He is humble and he is&#xA;victorious. Jesus can &amp;ldquo;announce peace&amp;rdquo; because the Kingdom is his - over which to&#xA;announce whatever he wills. The rulers of this world fight for peace - they&#xA;make announcements that reality is under no obligation to adhere to. &amp;ldquo;Peace&#xA;through strength&amp;rdquo; is not a bad mentality from one nation to another, but within&#xA;the nation the citizens are ruled by one king whose word either has weight or&#xA;not. Often the weight of the word of the king is in the form of brutal&#xA;enforcement of the king&amp;rsquo;s will. In the case of King Jesus though, there is&#xA;nothing brutal. He doesn&amp;rsquo;t own the world by conquest, he owns it by right.&#xA;Reality itself &lt;em&gt;is under an obligation to obey the architect of the universe&lt;/em&gt;.&#xA;So when King Jesus announces peace&amp;hellip; what else can happen besides the word of&#xA;the Lord?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-09 Notes</title>
    <id>https://pype.dev/2025-12-09-notes/</id>
    <updated>2025-12-09T05:05:57Z</updated>
    <published>2025-12-09T05:05:57Z</published>
    <link href="https://pype.dev/2025-12-09-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-08-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-08-notes]]&#xA;&#xA;## Dev&#xA;&#xA;Stood up [Domain Locker](https://github.com/lissy93/domain-locker) today and it looks dope, we&#39;ll see how it fits into the lab over the next year or so&#xA;&#xA;Decided to see if I can get GPU acceleration in K3s and if so then probably just jump ship to it&#xA;&#xA;- got stuck on the install... `sudo k3sup --local` for the win&#xA;- appears to be some issues with sharing the GPU between the host an pod, working through some of that tonight&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-08 Notes</title>
    <id>https://pype.dev/2025-12-08-notes/</id>
    <updated>2025-12-08T05:46:04Z</updated>
    <published>2025-12-08T05:46:04Z</published>
    <link href="https://pype.dev/2025-12-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-06-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-06-notes]]&#xA;&#xA;## Today&#xA;&#xA;- [[advent-isaiah-9-6-7]]&#xA;- Thought about [[uv-run-pep-723-is-a-match-made-in-heaven]]&#xA;- [[columns-env-var-for-nicer-screenshots]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>COLUMNS Env Var For Nicer Screenshots</title>
    <id>https://pype.dev/columns-env-var-for-nicer-screenshots/</id>
    <updated>2025-12-08T05:16:55Z</updated>
    <published>2025-12-08T05:16:55Z</published>
    <link href="https://pype.dev/columns-env-var-for-nicer-screenshots/" rel="alternate" type="text/html"></link>
    <summary type="text">I was working on uv-run-pep-723-is-a-match-made-in-heaven and I wanted to grab a screenshot of a TUI, but my terminal is full screen and the TUI was then...</summary>
    <content type="text">&#xA;I was working on [[uv-run-pep-723-is-a-match-made-in-heaven]] and I wanted to grab a screenshot of a TUI, but my terminal is full screen and the TUI was then super stretched... Nice for working and using it, but not nice for a screenshot going into a blog post... see the difference `export COLUMNS=120` does here!&#xA;&#xA;```&#xA;COLUMNS=120 mytui.py&#xA;```&#xA;&#xA;![20251208111709_aa06bd03.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251208111709_aa06bd03.png)&#xA;&#xA;```&#xA;mytui.py&#xA;```&#xA;&#xA;![20251208111820_a209638f.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251208111820_a209638f.png)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>UV</title>
    <id>https://pype.dev/uv/</id>
    <updated>2025-12-08T05:02:54Z</updated>
    <published>2025-12-08T05:02:54Z</published>
    <link href="https://pype.dev/uv/" rel="alternate" type="text/html"></link>
    <summary type="text">uv by Astral.sh is one of the dopest python toolchain tools to ever exist</summary>
    <content type="html">&lt;p&gt;uv by &lt;a href=&#34;https://astral.sh&#34;&gt;Astral.sh&lt;/a&gt; is one of the dopest python toolchain tools to ever exist&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>UV Run + PEP 723 Is A Match Made In Heaven</title>
    <id>https://pype.dev/uv-run-pep-723-is-a-match-made-in-heaven/</id>
    <updated>2025-12-08T04:59:10Z</updated>
    <published>2025-12-08T04:59:10Z</published>
    <link href="https://pype.dev/uv-run-pep-723-is-a-match-made-in-heaven/" rel="alternate" type="text/html"></link>
    <summary type="text">This post will be short but hopefully be a dense few paragraphs about how using along with PEP 723 is life-changing.</summary>
    <content type="text">&#xA;This post will be short but hopefully be a dense few paragraphs about how using&#xA;`uv run foo.py` along with [PEP 723](https://peps.python.org/pep-0723/) is&#xA;life-changing.&#xA;&#xA;## PEP 723&#xA;&#xA;Python Enhancement Proposals (PEP) are the community&#39;s way of improving the&#xA;python language and ecosystem and PEP 723 is one of my favorites. It permits&#xA;adding python metadata right to your script which allows `python` to setup the&#xA;script&#39;s dependencies at runtime.&#xA;&#xA;## UV&#xA;&#xA;[[uv]] makes it even better with it&#39;s super fast resolution and environment&#xA;setup. I don&#39;t have any posts about uv yet, but here&#39;s the&#xA;[docs](https://docs.astral.sh/uv/getting-started/installation/), installing&#xA;`uv` is now apart of my dev-machine setup because I need it everywhere!&#xA;&#xA;## The Magic&#xA;&#xA;I&#39;m experiencing the power of `uv run myscript.py` as I&#39;ve integrated a python&#xA;script into my tmux workflow for managing sessions as well as groups of&#xA;git-worktrees to keep development-ideas contained, easy to find, and easy to&#xA;manage.&#xA;&#xA;!!! warning &#34;The Series&#34;&#xA;&#xA;    This post is in my &#34;If You Want It Make It So&#34; series because of the workspaces thing generally, not the dbztui example below, but for me - having &#39;uv run&#39; as a pretty powerful Bash replacement makes my development workflow easier to build on and manage&#xA;&#xA;My [workspaces docs](https://pypeaday.github.io/dotfiles/terminal/workspaces/)&#xA;explain the setup a bit, and that script is in my&#xA;[dotfiles](https://github.com/pypeaday/dotfiles/blob/main/workspaces/.local/bin/ws.py)&#xA;&#xA;For a shorter example, here&#39;s an example that has regular `pip` style&#xA;dependencies, a `git+https` dependency, and is a tui - not just a top to bottom&#xA;script&#xA;&#xA;!!! note &#34;What is it?&#34;&#xA;&#xA;    This is my DBZTUI script - it uses a beta package from Waylon called&#xA;    ninesui and calls the dragonball-api to give you a handy way to explore the&#xA;    Dragon Ball Universe from the glorious comfort of your terminal&#xA;&#xA;Copy this code into `dbztui.py`&#xA;&#xA;!!! note &#34;Execution&#34;&#xA;&#xA;    You can `chmod +x` this script with the shebang to tell your shell to use uv to run it or just `uv run dbztui.py` will also work just fine&#xA;&#xA;```python&#xA;#!/usr/bin/env -S uv run --quiet --script&#xA;# /// script&#xA;# requires-python = &#34;&gt;=3.10&#34;&#xA;# dependencies = [&#xA;#     &#34;ninesui @ git+https://github.com/waylonwalker/ninesui.git&#34;,&#xA;#     &#34;httpx&#34;,&#xA;#     &#34;deep-translator&#34;,&#xA;# ]&#xA;# ///&#xA;from typing import Optional, List, TypeVar, ClassVar, Any, Dict&#xA;from pydantic import BaseModel, Field, HttpUrl&#xA;import httpx&#xA;from textual import log&#xA;from ninesui import CommandSet, Command, NinesUI&#xA;from functools import lru_cache&#xA;from deep_translator import GoogleTranslator&#xA;import json&#xA;import os&#xA;&#xA;BASE_URL = &#34;https://dragonball-api.com/api/&#34;&#xA;&#xA;# Translation cache file&#xA;CACHE_DIR = os.path.expanduser(&#34;~/.cache/dbztui&#34;)&#xA;CACHE_FILE = os.path.join(CACHE_DIR, &#34;translation_cache.json&#34;)&#xA;&#xA;# Create cache directory if it doesn&#39;t exist&#xA;os.makedirs(CACHE_DIR, exist_ok=True)&#xA;&#xA;# Load translation cache from file&#xA;translation_cache: Dict[str, str] = {}&#xA;if os.path.exists(CACHE_FILE):&#xA;    try:&#xA;        with open(CACHE_FILE, &#34;r&#34;, encoding=&#34;utf-8&#34;) as f:&#xA;            translation_cache = json.load(f)&#xA;    except Exception as e:&#xA;        log(f&#34;Error loading translation cache: {e}&#34;)&#xA;&#xA;# Initialize translator&#xA;translator = GoogleTranslator(source=&#39;es&#39;, target=&#39;en&#39;)&#xA;&#xA;T = TypeVar(&#34;T&#34;, bound=&#34;DBZResource&#34;)&#xA;&#xA;@lru_cache(maxsize=1000)&#xA;def translate_text(text: str) -&gt; str:&#xA;    &#34;&#34;&#34;Translate text from Spanish to English with caching&#34;&#34;&#34;&#xA;    if not text or len(text) &lt; 5:  # Don&#39;t translate very short texts&#xA;        return text&#xA;&#xA;    # Check if translation is in cache&#xA;    if text in translation_cache:&#xA;        return translation_cache[text]&#xA;&#xA;    try:&#xA;        # Translate text&#xA;        translated = translator.translate(text)&#xA;&#xA;        # Save to cache&#xA;        translation_cache[text] = translated&#xA;&#xA;        # Periodically save cache to file&#xA;        if len(translation_cache) % 10 == 0:  # Save every 10 new translations&#xA;            try:&#xA;                with open(CACHE_FILE, &#34;w&#34;, encoding=&#34;utf-8&#34;) as f:&#xA;                    json.dump(translation_cache, f, ensure_ascii=False, indent=2)&#xA;            except Exception as e:&#xA;                log(f&#34;Error saving translation cache: {e}&#34;)&#xA;&#xA;        return translated&#xA;    except Exception as e:&#xA;        log(f&#34;Translation error: {e}&#34;)&#xA;        return text  # Return original text if translation fails&#xA;&#xA;&#xA;class DBZResource(BaseModel):&#xA;    id: int&#xA;&#xA;    nines_config: ClassVar[dict] = {&#34;bindings&#34;: {}}&#xA;&#xA;    @classmethod&#xA;    def fetch(cls, ctx=None):&#xA;        endpoint = cls.__name__.lower() + &#34;s&#34;&#xA;&#xA;        client = httpx.Client()&#xA;        log(f&#34;Fetching {endpoint}&#34;)&#xA;&#xA;        if ctx:&#xA;            if hasattr(ctx, endpoint):&#xA;                result = []&#xA;                for url in getattr(ctx, endpoint):&#xA;                    res = client.get(str(url)).json()&#xA;                    result.append(cls(**res))&#xA;                return result&#xA;&#xA;        url = f&#34;{BASE_URL}{endpoint}&#34;&#xA;&#xA;        results: List[T] = []&#xA;        response = client.get(url)&#xA;        response.raise_for_status()&#xA;        data = response.json()&#xA;&#xA;        # Handle pagination structure from Dragon Ball API&#xA;        if &#34;items&#34; in data:&#xA;            results.extend(cls(**item) for item in data.get(&#34;items&#34;, []))&#xA;&#xA;            # Fetch all pages if needed&#xA;            while data.get(&#34;links&#34;, {}).get(&#34;next&#34;):&#xA;                next_url = data[&#34;links&#34;][&#34;next&#34;]&#xA;                response = client.get(next_url)&#xA;                response.raise_for_status()&#xA;                data = response.json()&#xA;                results.extend(cls(**item) for item in data.get(&#34;items&#34;, []))&#xA;        else:&#xA;            # Direct list of items&#xA;            results.extend(cls(**item) for item in data)&#xA;&#xA;        return results&#xA;&#xA;    def hover(self):&#xA;        return self&#xA;&#xA;    def get_details(self):&#xA;        &#34;&#34;&#34;Get detailed information about this resource&#34;&#34;&#34;&#xA;        client = httpx.Client()&#xA;        endpoint = self.__class__.__name__.lower() + &#34;s&#34;&#xA;        url = f&#34;{BASE_URL}{endpoint}/{self.id}&#34;&#xA;        response = client.get(url)&#xA;        response.raise_for_status()&#xA;        data = response.json()&#xA;&#xA;        # Translate description if present&#xA;        if &#34;description&#34; in data and data[&#34;description&#34;]:&#xA;            data[&#34;description&#34;] = translate_text(data[&#34;description&#34;])&#xA;&#xA;        return self.__class__(**data)&#xA;&#xA;&#xA;class Character(DBZResource):&#xA;    name: str&#xA;    ki: str&#xA;    maxKi: str&#xA;    race: str&#xA;    gender: str&#xA;    description: str&#xA;    image: Optional[HttpUrl] = None&#xA;    affiliation: str&#xA;    deletedAt: Optional[str] = None&#xA;&#xA;    def __init__(self, **data):&#xA;        # Translate description before initializing&#xA;        if &#34;description&#34; in data and data[&#34;description&#34;]:&#xA;            data[&#34;description&#34;] = translate_text(data[&#34;description&#34;])&#xA;        super().__init__(**data)&#xA;&#xA;    nines_config: ClassVar[dict] = {&#34;bindings&#34;: {&#34;t&#34;: &#34;get_transformations&#34;}}&#xA;&#xA;    def get_transformations(self):&#xA;        &#34;&#34;&#34;Get all transformations for this character&#34;&#34;&#34;&#xA;        client = httpx.Client()&#xA;        url = f&#34;{BASE_URL}characters/{self.id}/transformations&#34;&#xA;        try:&#xA;            response = client.get(url)&#xA;            response.raise_for_status()&#xA;            data = response.json()&#xA;            if &#34;items&#34; in data:&#xA;                return [Transformation(**item) for item in data.get(&#34;items&#34;, [])]&#xA;            return [Transformation(**item) for item in data]&#xA;        except Exception as e:&#xA;            log(f&#34;Error fetching transformations: {e}&#34;)&#xA;            return []&#xA;&#xA;&#xA;class Transformation(DBZResource):&#xA;    name: str&#xA;    image: Optional[HttpUrl] = None&#xA;    ki: str&#xA;    characterId: int&#xA;    deletedAt: Optional[str] = None&#xA;&#xA;    # Note: This is not a direct API endpoint, but accessed through character transformations&#xA;&#xA;&#xA;class Planet(DBZResource):&#xA;    name: str&#xA;    description: str&#xA;    image: Optional[HttpUrl] = None&#xA;    deletedAt: Optional[str] = None&#xA;&#xA;    def __init__(self, **data):&#xA;        # Translate description before initializing&#xA;        if &#34;description&#34; in data and data[&#34;description&#34;]:&#xA;            data[&#34;description&#34;] = translate_text(data[&#34;description&#34;])&#xA;        super().__init__(**data)&#xA;&#xA;&#xA;# Note: Saga and Episode models removed as they are not supported by the API&#xA;&#xA;&#xA;commands = CommandSet(&#xA;    [&#xA;        Command(&#xA;            name=&#34;character&#34;,&#xA;            aliases=[&#34;c&#34;],&#xA;            model=Character,&#xA;            is_default=True,&#xA;        ),&#xA;        Command(&#xA;            name=&#34;planet&#34;,&#xA;            aliases=[&#34;p&#34;],&#xA;            model=Planet,&#xA;        ),&#xA;        # Note: Transformation is not a direct API endpoint, but can be accessed through characters&#xA;    ]&#xA;)&#xA;&#xA;metadata = {&#xA;    &#34;title&#34;: &#34;Dragon Ball Z Explorer&#34;,&#xA;    &#34;subtitle&#34;: &#34;Use :character or :planet to explore. Enter to drill in. Escape to go back/quit.&#34;,&#xA;}&#xA;&#xA;&#xA;if __name__ == &#34;__main__&#34;:&#xA;    ui = NinesUI(metadata=metadata, commands=commands)&#xA;    try:&#xA;        ui.run()&#xA;    finally:&#xA;        # Save translation cache when exiting&#xA;        try:&#xA;            with open(CACHE_FILE, &#34;w&#34;, encoding=&#34;utf-8&#34;) as f:&#xA;                json.dump(translation_cache, f, ensure_ascii=False, indent=2)&#xA;        except Exception as e:&#xA;            log(f&#34;Error saving translation cache on exit: {e}&#34;)&#xA;```&#xA;&#xA;![20251208111354_0ae058e5.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251208111354_0ae058e5.png)&#xA;&#xA;&gt; See [[columns-env-var-for-nicer-screenshots]] about making terminal screenshots a bit nicer&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Isaiah 9:6-7</title>
    <id>https://pype.dev/advent-isaiah-9-6-7/</id>
    <updated>2025-12-08T04:39:09Z</updated>
    <published>2025-12-08T04:39:09Z</published>
    <link href="https://pype.dev/advent-isaiah-9-6-7/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Isaiah 9:6-7&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Isaiah 9:6-7&#34;&#xA;&#xA;    6 For a child has been born for us;  a son has been given to us.  And the dominion will be on his shoulder,  and his name is called Wonderful Counselor, Mighty God,  Everlasting Father, Prince of Peace.  7 His dominion will grow continually,  and to peace there will be no end  on the throne of David and over his kingdom,  to establish it and sustain it  with justice and righteousness  now and forever.  The zeal of Yahweh of hosts will do this.&#xA;&#xA;## To Peace There Will Be No End&#xA;&#xA;What a fantastic promise about what the King will do - to bring unending peace.&#xA;I wrote about peace during Advent last year - [[advent-2024-peace]]&#xA;&#xA;&gt; Things are as they are supposed to be&#xA;&#xA;What King Jesus will bring is a kingdom where every relationship is _as it is&#xA;supposed to be_.&#xA;&#xA;There is something amazing and relieving about reconciling with a friend.&#xA;Brokenness is everywhere, and that affects our relationship with everyone, from&#xA;the best friend to the 3rd cousin of your boss&#39;s secretary. The closer you are,&#xA;the more impactful the brokenness can be, the worse the pain in the&#xA;relationship can feel, but also the more glorious and cheerful it is when&#xA;things go from bad to _as they should be_&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent 2025 - Love</title>
    <id>https://pype.dev/advent-2025-love/</id>
    <updated>2025-12-07T05:51:43Z</updated>
    <published>2025-12-07T05:51:43Z</published>
    <link href="https://pype.dev/advent-2025-love/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;1 John 4:7–10 (CSB)&#34;</summary>
    <content type="html">&lt;h1 id=&#34;advent-address&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Advent Address&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;love&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Love&lt;/span&gt; &lt;a href=&#34;#love&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1 John 4:7–10 (CSB)&lt;/p&gt;&#xA;&lt;p&gt;7 Dear friends, let us love one another, because love is from God, and everyone who loves has been born of God and knows God. 8 The one who does not love does not know God, because God is love. 9 God’s love was revealed among us in this way: God sent his one and only Son into the world so that we might live through him. 10 Love consists in this: not that we loved God, but that he loved us and sent his Son to be the atoning sacrifice for our sins.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&amp;ldquo;not that we loved God, but that he loved us&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Can a newborn love? When a baby enters the world they are at the mercy of the,&#xA;hopefully, loving mom and dad God gave to them. But, whatever circumstances&#xA;surround them - they didn&amp;rsquo;t choose any of it. As the child is loved then&#xA;out of that love they develop an affection and love of their own toward Mom and&#xA;Dad.&lt;/p&gt;&#xA;&lt;p&gt;So, to love God is only possible out of the love he shows you and me, just like&#xA;a child will develop love for Mom and Dad as they are shown love.&lt;/p&gt;&#xA;&lt;p&gt;Not all people love God, but He does show grace to all.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Palm 145:9&lt;/p&gt;&#xA;&lt;p&gt;Yahweh is good to all,  and his mercies are over all his works.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;And just like Yahweh is good to all, I will show grace to anyone else&amp;rsquo;s kid -&#xA;but God redeems his own just like at the end of the day I take my own kids&#xA;home: my kids, who I loved before they could love me. Only my children can love&#xA;me as their Dad, and anyone who is not a child of God cannot love God - John&#xA;says as much in what we just read together.&lt;/p&gt;&#xA;&lt;p&gt;But love is more than affection, and even security. It is those things of&#xA;course, but it&amp;rsquo;s also more. Something else that love brings to the human life,&#xA;is freedom.&lt;/p&gt;&#xA;&lt;p&gt;My kids don&amp;rsquo;t get to do just whatever they want - but they&amp;rsquo;re never more free&#xA;than when they are enjoying life within the boundaries I have set for them. My&#xA;love for my kids enables them to be as free as reasonably possible&amp;hellip; The&#xA;epitome of freedom for the human is not &amp;ldquo;doing whatever I want&amp;rdquo;, that is&#xA;slavery to myself. If I treat myself as my own&#xA;Master, then I will be my own slave.&lt;/p&gt;&#xA;&lt;p&gt;True freedom is the gift of loving the Lord because loving him is the reason we&#xA;were created - it&amp;rsquo;s what we were made to do. His love for me frees me to want&#xA;what he wants, love what he loves, hate what he hates, and ultimately to enjoy&#xA;him forever.&lt;/p&gt;&#xA;&lt;p&gt;I hope my kids love what I love, and hate what I hate because I hope that what&#xA;I love and what I hate are in line with God&amp;rsquo;s heart. And as God sent his own&#xA;son into the world out of his love for you and me, may we go forward freed from&#xA;the bondage of sin and death, into the glorious, true, and loving freedom that&#xA;Jesus brings.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prayer&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prayer&lt;/span&gt; &lt;a href=&#34;#prayer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Good morning, Father. Thank you for Love, thank you for Christmas. For those&#xA;here who have been freed to love you I pray this week and through Christmas we&#xA;are drawn to consider the freedom we have in your love, the freedom to love&#xA;you, the freedom to choose what is pleasing to you and not what our&#xA;sinful-selves demand. For those here still dead in their sins, unable to love&#xA;you, I pray you speak their name and call them to life and to freedom. We long&#xA;for your return as we celebrate your incarnation. Thank you for loving us&#xA;before we could love you, now may we love you and others this week, in Jesus&#39;&#xA;name. Amen.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Isaiah 26:3</title>
    <id>https://pype.dev/advent-isaiah-26-3/</id>
    <updated>2025-12-07T05:49:32Z</updated>
    <published>2025-12-07T05:49:32Z</published>
    <link href="https://pype.dev/advent-isaiah-26-3/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Isaiah 26:3&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Isaiah 26:3&#34;&#xA;&#xA;    You will protect a firm inclination in peace,  in peace because he trusts in you.&#xA;&#xA;This is reminding me of a blog post I&#39;ve had in the queue for months&#xA;[[autism-and-steadfast-faith]] which may never see the light of day but it ties&#xA;in with this verse too well to not influence my reflection on it&#xA;&#xA;## A Firm Inclination&#xA;&#xA;What is this? I had to open another translation to get the idea, consider the ESV:&#xA;&#xA;!!! note &#34;Isaiah 26:3&#34;&#xA;&#xA;    You keep him in perfect peace  whose mind is stayed on you,  because he trusts in you.&#xA;&#xA;I&#39;m not going to attempt to explain any Hebrew in this one, I&#39;m not fluent in&#xA;it and this looks like more than a 1 word translation to me&#xA;&#xA;![20251207120101_3ded911b.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251207120101_3ded911b.png)&#xA;&#xA;So in observation &#34;sa-muk ye-ser&#34; is the man &#34;whose mind is stayed on (Yahweh)&#34;&#xA;is &#34;_the man with_ a firm inclination&#34;&#xA;&#xA;So it&#39;s an `attitude` - an _inclincation_ to trust in the Lord... I definitely&#xA;want to avoid going down any theological paths about the order of salvation,&#xA;but personally this is resonating deeply as I describe myself (as do others&#xA;probably) as a man with a firm inclination to worship and follow Jesus.&#xA;&#xA;For me, obviously the source of the &#34;sa-muk ye-ser&#34; is Yahweh himself, but the&#xA;outpouring of his blessing of &#34;a firm inclination&#34; in me is in the form of&#xA;autism I think... Through my make-up as a human, the traits that got me labeled&#xA;_autistic_ are also many of the ones that have led me to study and lay the&#xA;foundation of my faith in Jesus by nothing other than his grace.&#xA;&#xA;For a long time, biblical theology was my &#34;special interest of autistic&#xA;degrees&#34;, and although I&#39;m not drowning in technical papers about Divine&#xA;Council Theology at the moment, the seasons and experiences that were&#xA;enabled/affected by being autistic have given me, by God&#39;s grace, a history of&#xA;life to look back on and be encouraged through and have my present-day-faith&#xA;strengthened by.&#xA;&#xA;## Advent&#xA;&#xA;Today marks the second week of Advent - Peace.&#xA;&#xA;Praise God for Isaiah 26:3 and honestly praise God for autism in my life.&#xA;Through it he has protected and kept me. It&#39;s odd to think about but through&#xA;the anxiety and turmoil of growing up undiagnosed (actually misdiagnosed -&#xA;[[autism-adhd-and-the-doshas]]) autistic, to wrestle with how and why I seemed&#xA;to experience reality differently than most of my friends and community, God&#xA;brought me to a point of mostly steady peace about the things that happen in my&#xA;life.&#xA;&#xA;I&#39;ve mentioned it in a few writings but right now I feel quite stressed out&#xA;about some work-related situations that are outside my control... God&#39;s been,&#xA;and is being, good. I both sense the peace of knowing that I don&#39;t have to&#xA;worry about my life, as well as the anxiety present (somewhat rightfully) to&#xA;make the decisions that bring the most glory to God.&#xA;&#xA;I don&#39;t think &#34;peace&#34; means you can&#39;t feel anxiety, we live in the &#34;already but&#xA;not yet&#34; so the dual-reality is completely expected. I feel blessed that even&#xA;though I&#39;m no stranger to the level of anxiety that can make you physically&#xA;sick, I am also no stranger to an ever-present and quiet corner of my heart&#xA;that God tends and keeps, strengthens and refreshes, and protects for the sake&#xA;of his own glory. Amen.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>GitHub Stopped Me From Messing With The Bots</title>
    <id>https://pype.dev/github-stopped-me-from-messing-with-the-bots/</id>
    <updated>2025-12-06T06:24:51Z</updated>
    <published>2025-12-06T06:24:51Z</published>
    <link href="https://pype.dev/github-stopped-me-from-messing-with-the-bots/" rel="alternate" type="text/html"></link>
    <summary type="text">After some cheeky small-steps-towards-handling-malicious-traffic-on-static-sites it turns out GH has been blocking me from publishing my site because the...</summary>
    <content type="text">&#xA;After some cheeky&#xA;[[small-steps-towards-handling-malicious-traffic-on-static-sites]] it turns out&#xA;GH has been blocking me from publishing my site because the fodder I put in&#xA;there for the bots was recognized as actual secrets by their scanning...&#xA;&#xA;![20251206122602_8b1635bf.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251206122602_8b1635bf.png)&#xA;&#xA;I had to tell github that each of these secrets in the commits was fine...&#xA;after all, they&#39;re good bait&#xA;&#xA;[Github&#xA;Docs](https://docs.github.com/en/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-command-line#resolving-a-blocked-push)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Romans 8:24-25</title>
    <id>https://pype.dev/advent-romans-8-24-25/</id>
    <updated>2025-12-06T05:37:21Z</updated>
    <published>2025-12-06T05:37:21Z</published>
    <link href="https://pype.dev/advent-romans-8-24-25/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Romans 8:24-25&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Romans 8:24-25&lt;/p&gt;&#xA;&lt;p&gt;24 For in hope we were saved, but hope that is seen is not hope, for who hopes for what he sees? 25 But if we hope for what we do not see, we await it eagerly with patient endurance.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Q: What does it look like for you to actively but patiently wait for God right now?&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;What does it look like&amp;rdquo; often causes me to think about hwo someone else might&#xA;observe my life in relation to the question. This comes up a lot in&#xA;theology/fellowship discussions &amp;ldquo;what does it look like for&amp;hellip;&amp;rdquo; and then we&#xA;talk about practical things that humans can do that we can see with our eyes.&lt;/p&gt;&#xA;&lt;p&gt;But in my faith journey, as I have seen God&amp;rsquo;s faithfulness to me and my family,&#xA;my mind is not immediately going to outward looking things&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;For example &amp;ldquo;What does it look like for Christians to live differently than&#xA;others?&amp;rdquo; and the answers are always the same &amp;ldquo;we love our enemies&amp;rdquo;, &amp;ldquo;protestant&#xA;work ethic - Christians should work harder since we work for an audience of&#xA;One&amp;rdquo;, &amp;ldquo;We don&amp;rsquo;t cuss&amp;rdquo;&amp;hellip; etc. Things that someone could conceivably witness and&#xA;then potentially draw the conclusion of the question (which is that Christians&#xA;ought to live differently than non-Christians)&lt;/p&gt;&#xA;&lt;p&gt;So I see these 2 ways of thinking about the &amp;ldquo;what does it look like&amp;rdquo; question -&#xA;the outward observable perspective, but then an inward one&lt;/p&gt;&#xA;&lt;p&gt;I guess outwardly, there are some answers where someone might&#xA;observe it and then conclude that I am waiting actively and patiently for the&#xA;Lord&amp;hellip; Here are some examples:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Our Advent wreath on the dining table, anyone who enters out home will see&#xA;it (as do I every day which reminds me of the active waiting)&lt;/li&gt;&#xA;&lt;li&gt;This blog - anyone who finds my posts should no doubt observe that my life&#xA;has been claimed by Jesus and I&amp;rsquo;m living my life to that end by his grace&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;But inwardly, in the secret&amp;hellip; I think some reality is continuing to sink in&#xA;that is a byproduct of witnessing God&amp;rsquo;s faithfulness to me&amp;hellip; The way it looks&#xA;for me to actively but patiently wait on the Lord is to just walk day by day in&#xA;the life he&amp;rsquo;s given me&amp;hellip; It&amp;rsquo;s a great life - beautiful family, decent work,&#xA;beyond decent compensation - in a lot of ways I&amp;rsquo;m living the American Dream and&#xA;God has been so good to me. My patience and activity I hope are not so much&#xA;manifested by my will but moreso may they be acts of trust in a God who has shown&#xA;himself worth trusting.&lt;/p&gt;&#xA;&lt;p&gt;So, for me, &amp;ldquo;what does it look like?&amp;rdquo; is it looks like&#xA;trusting when I&amp;rsquo;m frustrated, it looks like breathing when circumstances aren&amp;rsquo;t&#xA;what I wanted, and it looks like putting one foot in front of the other in&#xA;daily faithful life to Jesus&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-06 Notes</title>
    <id>https://pype.dev/2025-12-06-notes/</id>
    <updated>2025-12-06T05:36:49Z</updated>
    <published>2025-12-06T05:36:49Z</published>
    <link href="https://pype.dev/2025-12-06-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-05-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-05-notes]]&#xA;&#xA;- [[advent-romans-8-24-25]]&#xA;&#xA;- Ran into many issues installing `just` in my CI runner at buildtime... so maybe need my own image, but got it working for now and am trying to consolidate my docs builds&#xA;  - blog, uses markata and has 1 or 2 extra steps outside markata, wrapped in just&#xA;  - homelab-mono, uses zensical, wrapped in just&#xA;  - dotfiles, uses zensical, needs to be wrapped in just&#xA;- 2 workflows&#xA;  - 1 is a simple mirror&#xA;  - 1 builds and pushes the site branch... should this just be a mirror with &#34;docs_enabled: true&#34;?&#xA;- builds&#xA;  - markout and site dirs should be configurable in the action or the same&#xA;  - pages config and the root being `.` or `./markout` should be something I do maybe with terraform?&#xA;    - it is 2 clicks and 3 repos... why tf would I try to terraform that up?&#xA;      - .... for funsies&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Romans 8:20-21</title>
    <id>https://pype.dev/advent-romans-8-20-21/</id>
    <updated>2025-12-05T05:00:42Z</updated>
    <published>2025-12-05T05:00:42Z</published>
    <link href="https://pype.dev/advent-romans-8-20-21/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Romans 8:20-21&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Romans 8:20-21&lt;/p&gt;&#xA;&lt;p&gt;20 For the creation has been subjected to futility, not willingly, but because of the one who subjected it, in hope 21 that the creation itself also will be set free from its servility to decay, into the glorious freedom of the children of God.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre&gt;&lt;code&gt;What will life be like in God&#39;s fully liberated and healed&#xA;world? What will be the best part of that world?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I honestly do not spend a lot of time thinking about the specifics of god&amp;rsquo;s&#xA;fully liberated and healed world&amp;hellip; I do get emotional pretty much every time&#xA;this passage and related ideas come up - freedom from sin and death certainly&#xA;has specific consequenes for what daily life will look like. But I don&amp;rsquo;t&#xA;actually want to think too much about what that life will be and here&amp;rsquo;s why&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s like the &amp;ldquo;don&amp;rsquo;t meet your heros&amp;rdquo; mentality&amp;hellip; It&amp;rsquo;s not that they&amp;rsquo;re&#xA;actually a let-down, but we build up heros in our head only to realize that&#xA;they&amp;rsquo;re just people too&amp;hellip; Seems like this is a pretty common Canon event for a&#xA;child in one way or another&amp;hellip; Well let&amp;rsquo;s swap out my thoughts about my&#xA;childhood hero with my thoughts about Heaven&amp;hellip; What do I reasonably &lt;strong&gt;know&lt;/strong&gt;&#xA;today to look forward to in the life-everlasting?&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I will no longer be my own master - today in my heart a war rages daily&amp;hellip; I&#xA;wake up every morning acutely aware of the pieces of me that are hostile to&#xA;God - they ache but they&amp;rsquo;re also comfortable&amp;hellip; I cannot wait to be fully freed&#xA;from this&lt;/li&gt;&#xA;&lt;li&gt;The whole earth will praise the name of the Lord and to be in community with&#xA;people of common mind and faith sounds (again) - freeing.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Beyond these 2 high-level truths, which we certainly could unpack a bit more, I&#xA;would uncomfortable to make any assertions about what the future kingdom will&#xA;look like, but I know I look forward to it&lt;/p&gt;&#xA;&lt;p&gt;How? How to look forward to something you can&amp;rsquo;t concretely describe in physical&#xA;terms? Because my God, the Truth-Teller, is the one who tells us about it&amp;hellip; I&#xA;don&amp;rsquo;t have to understand everything behing the Word of God - because I trust&#xA;the Person of God and therefore his word&lt;/p&gt;&#xA;&lt;h2 id=&#34;notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Notes&lt;/span&gt; &lt;a href=&#34;#notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Certainly there isn&amp;rsquo;t actually a Chaiasism here&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;A: 18 For I consider that the sufferings of the present time&#xA;&amp;ndash;B: are not worthy to be compared with the glory that is&#xA;&amp;mdash;-C: about to be revealed to us.o&#xA;&amp;mdash;&amp;mdash;D: 19 For the eagerly expecting creation&#xA;&amp;mdash;&amp;mdash;D&amp;rsquo;: awaits eagerly&#xA;&amp;mdash;-C&amp;rsquo;: the revelation of the sons of God.&#xA;&amp;ndash;B&amp;rsquo;: 20 For the creation has been subjected to futility,&#xA;A&amp;rsquo;: not willingly, but because of the one who subjected it,&#xA;&lt;code&gt;not sure about &amp;quot;in hope&amp;quot; and into 21&lt;/code&gt;&#xA;in hope 21 that the creation itself also will be set free from its servility to decay, into the glorious freedom of the children of God. 22 For we know that the whole creation groans together and suffers agony together until now.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-05 Notes</title>
    <id>https://pype.dev/2025-12-05-notes/</id>
    <updated>2025-12-05T05:00:11Z</updated>
    <published>2025-12-05T05:00:11Z</published>
    <link href="https://pype.dev/2025-12-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-04-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-04-notes]]&#xA;&#xA;- [[advent---romans-8-20-21]]&#xA;&#xA;## Misc&#xA;&#xA;My blog has had a ton of 404s from an old image/media workflow. Today I finally&#xA;just commented out the `cover:` frontmatter in the posts with legacy images&#xA;that I never migrated to my new flow... now at least the console isn&#39;t flooded&#xA;on the feed page with 404s&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Small Steps Towards Handling Malicious Traffic on Static Sites</title>
    <id>https://pype.dev/small-steps-towards-handling-malicious-traffic-on-static-sites/</id>
    <updated>2025-12-04T21:17:24Z</updated>
    <published>2025-12-04T21:17:24Z</published>
    <link href="https://pype.dev/small-steps-towards-handling-malicious-traffic-on-static-sites/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I saw a random IP hitting an app server I had open via and it got me thinking that I need to take some precautions against these real world threats. So...</summary>
    <content type="html">&lt;p&gt;Today I saw a random IP hitting an app server I had open via &lt;code&gt;tailscale funnel&lt;/code&gt;&#xA;and it got me thinking that I need to take some precautions against these real&#xA;world threats. So I&amp;rsquo;m starting with my blog&amp;hellip; basically you can reference &lt;a href=&#34;https://blog.jim-nielsen.com/2025/malicious-traffic-on-static-sites/&#34;&gt;Jim&#xA;Nielson&amp;rsquo;s Blog on Malicious&#xA;Traffic&lt;/a&gt;&#xA;and then I more or less put similar files in similar places on this site to&#xA;waste malicious actors&amp;rsquo; time&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-files&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Files&lt;/span&gt; &lt;a href=&#34;#the-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Note that some are empty, we just need them to exist since this is all for a bit of fun and low-effort internet tomfoolery&lt;/p&gt;&#xA;&lt;p&gt;These get shipped with my site at &lt;code&gt;/public/...&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; backup/config-backup.zip.txt&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     !!This is not a real ZIP file!!&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     But bots will try to download it anyway&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     Wasting bandwidth and CPU cycles...&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     Here are some fake credentials to keep you busy:&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     FTP_HOST=ftp.example.com&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     FTP_USER=admin&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     FTP_PASS=P@ssw0rd123!&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     SSH_HOST=192.168.1.100&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     SSH_USER=root&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     SSH_KEY=-----BEGIN RSA PRIVATE KEY-----&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     MIIEpAIBAAKCAQEA1234567890FAKE&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     -----END RSA PRIVATE KEY-----&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     MYSQL_HOST=localhost&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     MYSQL_USER=root&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     MYSQL_PASS=rootpassword123&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     MYSQL_DB=production_db&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     REDIS_HOST=127.0.0.1:6379&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     REDIS_PASS=redis_secret_2024&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     JWT_SECRET=super_secret_jwt_key_do_not_share&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     ENCRYPTION_KEY=AES256_ENCRYPTION_KEY_HERE&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     STRIPE_PUBLISHABLE=pk_live_FAKE123456789&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     STRIPE_SECRET=sk_live_FAKE987654321&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     SENDGRID_API_KEY=SG.FAKE_API_KEY_HERE&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK&#xA;PK     This file is intentionally malformed to waste bot parsing time&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;PK     PK     PK     PK     PK     PK     PK     PK&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; backup/database-backup-2024-12-01.sql&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;-- MySQL Database Backup&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;-- Host: localhost&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;-- Database: wordpress_prod&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;-- Generated: 2024-12-01 03:14:15&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;-- WARNING: This file contains sensitive data&#xA;&#xA;SET NAMES utf8mb4;&#xA;SET FOREIGN_KEY_CHECKS = 0;&#xA;&#xA;-- Table structure for wp_users&#xA;DROP TABLE IF EXISTS `wp_users`;&#xA;CREATE TABLE `wp_users` (&#xA;  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,&#xA;  `user_login` varchar(60) NOT NULL DEFAULT &#39;&#39;,&#xA;  `user_pass` varchar(255) NOT NULL DEFAULT &#39;&#39;,&#xA;  `user_email` varchar(100) NOT NULL DEFAULT &#39;&#39;,&#xA;  PRIMARY KEY (`ID`)&#xA;) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;&#xA;&#xA;-- Dumping data for table wp_users&#xA;INSERT INTO `wp_users` VALUES&#xA;(1,&#39;admin&#39;,&#39;$P$BZlPX7NIx8MYpXokBW2AGsN7i.aUOt0&#39;,&#39;admin@example.com&#39;),&#xA;(2,&#39;webmaster&#39;,&#39;$P$B4RKwF8zqRnNu9cV5fGg7wgT2sY9Pl1&#39;,&#39;webmaster@example.com&#39;);&#xA;&#xA;-- API Keys and Secrets&#xA;-- AWS_ACCESS_KEY: AKIAIOSFODNN7EXAMPLE&#xA;-- AWS_SECRET_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&#xA;-- STRIPE_SECRET: sk_test_4eC39HqLyjWDarjtT1zdp7dc&#xA;-- DATABASE_PASSWORD: MyS3cr3tP@ssw0rd!2024&#xA;&#xA;-- Infinite loop to waste bot resources&#xA;DELIMITER $$&#xA;CREATE PROCEDURE infinite_loop()&#xA;BEGIN&#xA;  DECLARE i INT DEFAULT 0;&#xA;  WHILE i &amp;lt; 999999999 DO&#xA;    SET i = i + 1;&#xA;    SELECT CONCAT(&#39;Processing row &#39;, i, &#39; of 999999999...&#39;) AS status;&#xA;  END WHILE;&#xA;END$$&#xA;DELIMITER ;&#xA;&#xA;-- More fake sensitive data&#xA;INSERT INTO wp_options VALUES&#xA;(1,&#39;siteurl&#39;,&#39;http://localhost&#39;,&#39;yes&#39;),&#xA;(2,&#39;admin_email&#39;,&#39;admin@localhost.local&#39;,&#39;yes&#39;),&#xA;(3,&#39;secret_api_key&#39;,&#39;sk_live_51HqLyjWDarjtT1zdp7dcEXAMPLE&#39;,&#39;yes&#39;);&#xA;&#xA;-- This backup continues for 50MB... [TRUNCATED FOR DISPLAY]&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; backup/db_dump_final.2023.zip&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; backup/site.sql&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; backup/wp_backup.tar.gz&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; private/admin-credentials.txt&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;CONFIDENTIAL - ADMIN CREDENTIALS&#xA;==================================&#xA;&#xA;Production Server Access:&#xA;-------------------------&#xA;Server: prod-server-01.example.com&#xA;Username: administrator&#xA;Password: Admin2024!Secure&#xA;SSH Port: 22&#xA;&#xA;Database Credentials:&#xA;--------------------&#xA;Host: db.internal.example.com&#xA;Port: 3306&#xA;Username: db_admin&#xA;Password: DbP@ssw0rd!2024&#xA;Database: production_main&#xA;&#xA;API Keys:&#xA;---------&#xA;OpenAI API Key: sk-proj-FAKE1234567890abcdefghijklmnopqrstuvwxyz&#xA;Stripe Secret: sk_live_FAKE_51HqLyjWDarjtT1zdp7dc&#xA;AWS Access Key: AKIAFAKEEXAMPLE123456&#xA;AWS Secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYFAKEKEY&#xA;SendGrid API: SG.FAKE_SENDGRID_KEY_HERE_123456789&#xA;&#xA;WordPress Admin:&#xA;---------------&#xA;URL: https://example.com/wp-admin&#xA;Username: admin&#xA;Password: WP_Admin_2024!&#xA;Security Key: put your unique phrase here&#xA;&#xA;FTP Access:&#xA;-----------&#xA;Host: ftp.example.com&#xA;Username: ftpuser&#xA;Password: FtpP@ss123!&#xA;Port: 21&#xA;&#xA;IMPORTANT: Keep this file secure!&#xA;Last Updated: 2024-12-01&#xA;Next Password Rotation: 2025-01-01&#xA;&#xA;&amp;lt;!-- Hidden comment: This is a honeypot. All credentials are fake. --&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; private/config.php&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;?php&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;// Database Configuration&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;define(&#39;DB_HOST&#39;, &#39;localhost&#39;);&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;define(&#39;DB_NAME&#39;, &#39;wordpress_production&#39;);&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;define(&#39;DB_USER&#39;, &#39;wp_admin&#39;);&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;define(&#39;DB_PASSWORD&#39;, &#39;MyS3cr3tP@ssw0rd!2024&#39;);&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;define(&#39;DB_CHARSET&#39;, &#39;utf8mb4&#39;);&#xA;&#xA;// Security Keys - DO NOT SHARE&#xA;define(&#39;AUTH_KEY&#39;,         &#39;put your unique phrase here - this is fake&#39;);&#xA;define(&#39;SECURE_AUTH_KEY&#39;,  &#39;put your unique phrase here - this is fake&#39;);&#xA;define(&#39;LOGGED_IN_KEY&#39;,    &#39;put your unique phrase here - this is fake&#39;);&#xA;define(&#39;NONCE_KEY&#39;,        &#39;put your unique phrase here - this is fake&#39;);&#xA;define(&#39;AUTH_SALT&#39;,        &#39;put your unique phrase here - this is fake&#39;);&#xA;define(&#39;SECURE_AUTH_SALT&#39;, &#39;put your unique phrase here - this is fake&#39;);&#xA;define(&#39;LOGGED_IN_SALT&#39;,   &#39;put your unique phrase here - this is fake&#39;);&#xA;define(&#39;NONCE_SALT&#39;,       &#39;put your unique phrase here - this is fake&#39;);&#xA;&#xA;// API Keys&#xA;define(&#39;STRIPE_SECRET_KEY&#39;, &#39;sk_live_FAKE123456789abcdefghijklmnop&#39;);&#xA;define(&#39;STRIPE_PUBLIC_KEY&#39;, &#39;pk_live_FAKE987654321zyxwvutsrqponml&#39;);&#xA;define(&#39;SENDGRID_API_KEY&#39;, &#39;SG.FAKE_API_KEY_1234567890&#39;);&#xA;define(&#39;AWS_ACCESS_KEY&#39;, &#39;AKIAIOSFODNN7EXAMPLE&#39;);&#xA;define(&#39;AWS_SECRET_KEY&#39;, &#39;wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&#39;);&#xA;&#xA;// Admin Settings&#xA;define(&#39;ADMIN_EMAIL&#39;, &#39;admin@example.com&#39;);&#xA;define(&#39;SITE_URL&#39;, &#39;https://example.com&#39;);&#xA;define(&#39;WP_DEBUG&#39;, false);&#xA;define(&#39;WP_DEBUG_LOG&#39;, true);&#xA;&#xA;// FTP Credentials&#xA;define(&#39;FTP_HOST&#39;, &#39;ftp.example.com&#39;);&#xA;define(&#39;FTP_USER&#39;, &#39;ftpadmin&#39;);&#xA;define(&#39;FTP_PASS&#39;, &#39;FtpS3cur3P@ss!&#39;);&#xA;&#xA;// Redis Cache&#xA;define(&#39;REDIS_HOST&#39;, &#39;127.0.0.1&#39;);&#xA;define(&#39;REDIS_PORT&#39;, 6379);&#xA;define(&#39;REDIS_PASSWORD&#39;, &#39;redis_secret_password_2024&#39;);&#xA;&#xA;// JWT Secret&#xA;define(&#39;JWT_SECRET&#39;, &#39;super_secret_jwt_key_for_authentication&#39;);&#xA;&#xA;// Infinite loop to waste bot CPU&#xA;while(true) {&#xA;    $random = bin2hex(random_bytes(1024));&#xA;    usleep(1000);&#xA;}&#xA;?&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; private/index.html&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;!doctype html&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;html&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;  &amp;lt;body&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;h1&amp;gt;Private Area&amp;lt;/h1&amp;gt;&#xA;&#xA;    &amp;lt;pre&amp;gt;&#xA;&amp;lt;!-- ~1MB lorem ipsum for bandwidth drain --&amp;gt;&#xA;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&#xA;&amp;lt;!-- repeat this block until ~1MB --&amp;gt;&#xA;&amp;lt;/pre&amp;gt;&#xA;  &amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; private/ssh_keys.txt&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;SSH PRIVATE KEYS - PRODUCTION SERVERS&#xA;======================================&#xA;&#xA;Server: prod-web-01.example.com&#xA;--------------------------------&#xA;-----BEGIN RSA PRIVATE KEY-----&#xA;MIIEpAIBAAKCAQEA1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm&#xA;nopqrstuvwxyz0123456789+/FAKE_KEY_DATA_HERE_NOT_REAL_AT_ALL_JUST_WASTING&#xA;BOT_TIME_AND_RESOURCES_HAHAHAHA_THIS_IS_A_HONEYPOT_TRAP_FOR_SCRAPERS_12345&#xA;67890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&#xA;FAKE_KEY_DATA_CONTINUES_FOR_MANY_LINES_TO_WASTE_BANDWIDTH_AND_STORAGE_SPACE&#xA;MIIEpAIBAAKCAQEA1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm&#xA;nopqrstuvwxyz0123456789+/MORE_FAKE_DATA_HERE_BOTS_LOVE_SSH_KEYS_RIGHT&#xA;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/END&#xA;-----END RSA PRIVATE KEY-----&#xA;&#xA;Server: prod-db-01.example.com&#xA;-------------------------------&#xA;-----BEGIN OPENSSH PRIVATE KEY-----&#xA;b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn&#xA;NhAAAAAwEAAQAAAQEA1234567890FAKE_OPENSSH_KEY_DATA_HERE_NOT_REAL_JUST_A&#xA;_TRAP_FOR_BOTS_AND_SCRAPERS_WASTING_THEIR_TIME_AND_RESOURCES_HAHA_12345678&#xA;90ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789FAKE&#xA;DATA_CONTINUES_HERE_TO_MAKE_IT_LOOK_LEGITIMATE_BUT_ITS_ALL_GARBAGE_123456&#xA;-----END OPENSSH PRIVATE KEY-----&#xA;&#xA;Server: prod-app-01.example.com&#xA;--------------------------------&#xA;-----BEGIN EC PRIVATE KEY-----&#xA;MHcCAQEEIFAKE0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop&#xA;qrstuvwxyz0123456789FAKE_EC_KEY_DATA_HERE_ELLIPTIC_CURVE_KEYS_ARE_COOL&#xA;BUT_THIS_ONE_IS_FAKE_JUST_WASTING_BOT_RESOURCES_HAHAHAHA_123456789ABC&#xA;-----END EC PRIVATE KEY-----&#xA;&#xA;IMPORTANT NOTES:&#xA;- These keys provide root access to production servers&#xA;- Never commit to version control&#xA;- Rotate every 90 days&#xA;- Last rotation: 2024-11-01&#xA;- Next rotation: 2025-02-01&#xA;&#xA;Contact: security@example.com for key rotation&#xA;&#xA;&amp;lt;!-- This is a honeypot. All keys are fake and invalid. --&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; robots.txt&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;User-agent: *&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;Disallow: /private/&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;Disallow: /admin/&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;Disallow: /backup/&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;Disallow: /.env&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;Disallow: /wp-admin/&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;Disallow: /wp-login.php&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; sitemap.xml&#xA;&#xA;&amp;lt;urlset&amp;gt;&#xA;  &amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;/debug/alpha&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&#xA;  &amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;/debug/beta&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&#xA;  &amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;/admin/backup-2024.zip&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&#xA;  &amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;/.env&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&#xA;  &amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;/wp-admin/install.php&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&#xA;  &amp;lt;url&amp;gt;&amp;lt;loc&amp;gt;/wp-content/plugins/wp-super-cache/readme.txt&amp;lt;/loc&amp;gt;&amp;lt;/url&amp;gt;&#xA;&amp;lt;/urlset&amp;gt;&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; trap/a/index.html&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot; content=&amp;quot;0; url=/trap/b/&amp;quot; /&amp;gt;&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; trap/api.php&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;?php&#xA;/**&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * Fake API Endpoint&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * Designed to trap and waste bot resources&#xA; */&#xA;&#xA;header(&#39;Content-Type: application/json&#39;);&#xA;header(&#39;X-Powered-By: PHP/8.2.0&#39;);&#xA;header(&#39;X-Debug-Mode: enabled&#39;);&#xA;&#xA;// Fake API response with sensitive data&#xA;$api_response = [&#xA;    &#39;success&#39; =&amp;gt; true,&#xA;    &#39;api_version&#39; =&amp;gt; &#39;2.1.0&#39;,&#xA;    &#39;endpoints&#39; =&amp;gt; [&#xA;        &#39;/api/users&#39; =&amp;gt; &#39;GET, POST&#39;,&#xA;        &#39;/api/auth&#39; =&amp;gt; &#39;POST&#39;,&#xA;        &#39;/api/admin&#39; =&amp;gt; &#39;GET, POST, DELETE&#39;,&#xA;        &#39;/api/database&#39; =&amp;gt; &#39;GET&#39;,&#xA;        &#39;/api/backup&#39; =&amp;gt; &#39;POST&#39;&#xA;    ],&#xA;    &#39;authentication&#39; =&amp;gt; [&#xA;        &#39;type&#39; =&amp;gt; &#39;Bearer Token&#39;,&#xA;        &#39;example_token&#39; =&amp;gt; &#39;Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.FAKE_JWT_TOKEN&#39;,&#xA;        &#39;api_key&#39; =&amp;gt; &#39;sk_live_FAKE123456789abcdefghijklmnop&#39;,&#xA;        &#39;api_secret&#39; =&amp;gt; &#39;secret_FAKE987654321zyxwvutsrqponmlk&#39;&#xA;    ],&#xA;    &#39;database_config&#39; =&amp;gt; [&#xA;        &#39;host&#39; =&amp;gt; &#39;localhost&#39;,&#xA;        &#39;port&#39; =&amp;gt; 3306,&#xA;        &#39;username&#39; =&amp;gt; &#39;api_user&#39;,&#xA;        &#39;password&#39; =&amp;gt; &#39;ApiP@ssw0rd!2024&#39;,&#xA;        &#39;database&#39; =&amp;gt; &#39;api_production&#39;&#xA;    ],&#xA;    &#39;admin_credentials&#39; =&amp;gt; [&#xA;        &#39;username&#39; =&amp;gt; &#39;api_admin&#39;,&#xA;        &#39;password&#39; =&amp;gt; &#39;Admin2024!Secure&#39;,&#xA;        &#39;email&#39; =&amp;gt; &#39;admin@api.example.com&#39;,&#xA;        &#39;role&#39; =&amp;gt; &#39;superadmin&#39;&#xA;    ],&#xA;    &#39;external_services&#39; =&amp;gt; [&#xA;        &#39;stripe&#39; =&amp;gt; [&#xA;            &#39;public_key&#39; =&amp;gt; &#39;pk_live_FAKE123&#39;,&#xA;            &#39;secret_key&#39; =&amp;gt; &#39;sk_live_FAKE456&#39;&#xA;        ],&#xA;        &#39;aws&#39; =&amp;gt; [&#xA;            &#39;access_key&#39; =&amp;gt; &#39;AKIAIOSFODNN7EXAMPLE&#39;,&#xA;            &#39;secret_key&#39; =&amp;gt; &#39;wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&#39;&#xA;        ],&#xA;        &#39;sendgrid&#39; =&amp;gt; [&#xA;            &#39;api_key&#39; =&amp;gt; &#39;SG.FAKE_SENDGRID_KEY&#39;&#xA;        ]&#xA;    ],&#xA;    &#39;debug_info&#39; =&amp;gt; [&#xA;        &#39;server_ip&#39; =&amp;gt; &#39;192.168.1.100&#39;,&#xA;        &#39;php_version&#39; =&amp;gt; &#39;8.2.0&#39;,&#xA;        &#39;mysql_version&#39; =&amp;gt; &#39;8.0.35&#39;,&#xA;        &#39;redis_host&#39; =&amp;gt; &#39;127.0.0.1:6379&#39;,&#xA;        &#39;redis_password&#39; =&amp;gt; &#39;redis_secret_2024&#39;&#xA;    ]&#xA;];&#xA;&#xA;// Waste CPU cycles&#xA;for ($i = 0; $i &amp;lt; 50000; $i++) {&#xA;    $temp = json_encode($api_response);&#xA;    $decoded = json_decode($temp, true);&#xA;    $hash = hash(&#39;sha256&#39;, $temp);&#xA;}&#xA;&#xA;// Output response&#xA;echo json_encode($api_response, JSON_PRETTY_PRINT);&#xA;&#xA;// Infinite loop trap&#xA;set_time_limit(0);&#xA;while(true) {&#xA;    $waste = [];&#xA;    for ($i = 0; $i &amp;lt; 10000; $i++) {&#xA;        $waste[] = random_bytes(1024);&#xA;    }&#xA;    usleep(1000);&#xA;}&#xA;?&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; trap/b/index.html&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot; content=&amp;quot;0; url=/trap/c/&amp;quot; /&amp;gt;&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; trap/c/index.html&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot; content=&amp;quot;0; url=/trap/a/&amp;quot; /&amp;gt;&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; trap/data.json&#xA;{&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;  &amp;quot;status&amp;quot;: &amp;quot;success&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;  &amp;quot;message&amp;quot;: &amp;quot;API endpoint active&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;  &amp;quot;data&amp;quot;: {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;credentials&amp;quot;: {&#xA;      &amp;quot;api_key&amp;quot;: &amp;quot;sk_live_FAKE123456789abcdefghijklmnopqrstuvwxyz&amp;quot;,&#xA;      &amp;quot;api_secret&amp;quot;: &amp;quot;secret_FAKE987654321zyxwvutsrqponmlkjihgfedcba&amp;quot;,&#xA;      &amp;quot;jwt_token&amp;quot;: &amp;quot;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.FAKE_TOKEN_DATA_HERE.SIGNATURE&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;oauth_token&amp;quot;: &amp;quot;ya29.FAKE_OAUTH_TOKEN_1234567890&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;refresh_token&amp;quot;: &amp;quot;1//FAKE_REFRESH_TOKEN_ABCDEFGHIJKLMNOP&amp;quot;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    },&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;database&amp;quot;: {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;host&amp;quot;: &amp;quot;db.internal.example.com&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;port&amp;quot;: 3306,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;username&amp;quot;: &amp;quot;db_admin&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;password&amp;quot;: &amp;quot;DbP@ssw0rd!2024&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;database&amp;quot;: &amp;quot;production_db&amp;quot;,&#xA;      &amp;quot;connection_string&amp;quot;: &amp;quot;mysql://db_admin:DbP@ssw0rd!2024@db.internal.example.com:3306/production_db&amp;quot;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    },&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;aws&amp;quot;: {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;access_key_id&amp;quot;: &amp;quot;AKIAIOSFODNN7EXAMPLE&amp;quot;,&#xA;      &amp;quot;secret_access_key&amp;quot;: &amp;quot;wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;region&amp;quot;: &amp;quot;us-east-1&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;bucket&amp;quot;: &amp;quot;production-backups-2024&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;cloudfront_id&amp;quot;: &amp;quot;E1234FAKE567890&amp;quot;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    },&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;stripe&amp;quot;: {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;publishable_key&amp;quot;: &amp;quot;pk_live_FAKE123456789&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;secret_key&amp;quot;: &amp;quot;sk_live_FAKE987654321&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;webhook_secret&amp;quot;: &amp;quot;whsec_FAKE_webhook_secret_here&amp;quot;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    },&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;email&amp;quot;: {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;sendgrid_api_key&amp;quot;: &amp;quot;SG.FAKE_SENDGRID_KEY_1234567890&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;smtp_host&amp;quot;: &amp;quot;smtp.example.com&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;smtp_port&amp;quot;: 587,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;smtp_user&amp;quot;: &amp;quot;noreply@example.com&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;smtp_pass&amp;quot;: &amp;quot;SmtpP@ss2024!&amp;quot;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    },&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;servers&amp;quot;: [&#xA;      {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;quot;name&amp;quot;: &amp;quot;prod-web-01&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;quot;ip&amp;quot;: &amp;quot;192.168.1.100&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;quot;ssh_user&amp;quot;: &amp;quot;root&amp;quot;,&#xA;        &amp;quot;ssh_key&amp;quot;: &amp;quot;-----BEGIN RSA PRIVATE KEY-----\nFAKE_KEY_DATA_HERE\n-----END RSA PRIVATE KEY-----&amp;quot;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      },&#xA;      {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;quot;name&amp;quot;: &amp;quot;prod-db-01&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;quot;ip&amp;quot;: &amp;quot;192.168.1.101&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;quot;ssh_user&amp;quot;: &amp;quot;admin&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;quot;ssh_pass&amp;quot;: &amp;quot;SshP@ssw0rd!2024&amp;quot;&#xA;      }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    ],&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;internal_urls&amp;quot;: [&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;http://admin.internal.example.com&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;http://api.internal.example.com&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;http://db.internal.example.com&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;http://cache.internal.example.com&amp;quot;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    ],&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;waste_bot_resources&amp;quot;: {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;large_array&amp;quot;: [],&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;      &amp;quot;nested_data&amp;quot;: {}&#xA;    }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;  },&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;  &amp;quot;metadata&amp;quot;: {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;generated_at&amp;quot;: &amp;quot;2024-12-01T12:00:00Z&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;expires_at&amp;quot;: &amp;quot;2025-12-01T12:00:00Z&amp;quot;,&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;&#xA;  }&#xA;}&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; trap/index.html&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;head&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&#xA;    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;noindex, nofollow&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;title&amp;gt;Loading...&amp;lt;/title&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;style&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        body {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            font-family: monospace;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            background: #000;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            color: #0f0;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            padding: 20px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            overflow: hidden;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .matrix {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            position: fixed;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            top: 0;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            left: 0;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            width: 100%;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            height: 100%;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            z-index: -1;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .message {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            text-align: center;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            margin-top: 20%;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            font-size: 24px;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .spinner {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            border: 4px solid #0f0;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            border-top: 4px solid transparent;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            border-radius: 50%;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            width: 40px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            height: 40px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            animation: spin 1s linear infinite;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            margin: 20px auto;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        @keyframes spin {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            0% { transform: rotate(0deg); }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            100% { transform: rotate(360deg); }&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;/style&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;/head&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;canvas class=&amp;quot;matrix&amp;quot;&amp;gt;&amp;lt;/canvas&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;div class=&amp;quot;message&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;lt;div class=&amp;quot;spinner&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;lt;p&amp;gt;Initializing secure connection...&amp;lt;/p&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;lt;p id=&amp;quot;status&amp;quot;&amp;gt;Processing...&amp;lt;/p&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;/div&amp;gt;&#xA;&#xA;    &amp;lt;script&amp;gt;&#xA;        // Matrix rain effect to waste GPU&#xA;        const canvas = document.querySelector(&#39;.matrix&#39;);&#xA;        const ctx = canvas.getContext(&#39;2d&#39;);&#xA;&#xA;        canvas.width = window.innerWidth;&#xA;        canvas.height = window.innerHeight;&#xA;&#xA;        const chars = &#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&amp;amp;*()&#39;;&#xA;        const fontSize = 14;&#xA;        const columns = canvas.width / fontSize;&#xA;        const drops = Array(Math.floor(columns)).fill(1);&#xA;&#xA;        function drawMatrix() {&#xA;            ctx.fillStyle = &#39;rgba(0, 0, 0, 0.05)&#39;;&#xA;            ctx.fillRect(0, 0, canvas.width, canvas.height);&#xA;&#xA;            ctx.fillStyle = &#39;#0f0&#39;;&#xA;            ctx.font = fontSize + &#39;px monospace&#39;;&#xA;&#xA;            for (let i = 0; i &amp;lt; drops.length; i++) {&#xA;                const text = chars[Math.floor(Math.random() * chars.length)];&#xA;                ctx.fillText(text, i * fontSize, drops[i] * fontSize);&#xA;&#xA;                if (drops[i] * fontSize &amp;gt; canvas.height &amp;amp;&amp;amp; Math.random() &amp;gt; 0.975) {&#xA;                    drops[i] = 0;&#xA;                }&#xA;                drops[i]++;&#xA;            }&#xA;        }&#xA;&#xA;        setInterval(drawMatrix, 33);&#xA;&#xA;        // CPU tarpit - massive computation&#xA;        console.log(&amp;quot;Initializing bot trap...&amp;quot;);&#xA;&#xA;        let trapData = &amp;quot;&amp;quot;;&#xA;        let iteration = 0;&#xA;&#xA;        function wasteResources() {&#xA;            for (let i = 0; i &amp;lt; 10_000_000; i++) {&#xA;                trapData += Math.random().toString(36).substring(2, 15);&#xA;&#xA;                if (i % 1000000 === 0) {&#xA;                    document.getElementById(&#39;status&#39;).textContent =&#xA;                        `Processing: ${Math.floor(i / 100000)}%`;&#xA;                }&#xA;            }&#xA;&#xA;            // Recursive waste&#xA;            iteration++;&#xA;            if (iteration &amp;lt; 100) {&#xA;                setTimeout(wasteResources, 100);&#xA;            }&#xA;        }&#xA;&#xA;        wasteResources();&#xA;&#xA;        // Memory leak&#xA;        let memoryLeak = [];&#xA;        setInterval(() =&amp;gt; {&#xA;            for (let i = 0; i &amp;lt; 10000; i++) {&#xA;                memoryLeak.push(new Array(1000).fill(Math.random()));&#xA;            }&#xA;        }, 100);&#xA;&#xA;        // Fake network requests&#xA;        setInterval(() =&amp;gt; {&#xA;            fetch(&#39;/trap/data.json?t=&#39; + Date.now())&#xA;                .catch(() =&amp;gt; {});&#xA;        }, 50);&#xA;&#xA;        console.log(&amp;quot;You&#39;ve been trapped! This page wastes bot resources.&amp;quot;);&#xA;    &amp;lt;/script&amp;gt;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wp-admin/admin-ajax.php&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;?php&#xA;/**&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * WordPress AJAX Handler&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * Handles all AJAX requests for WordPress admin&#xA; */&#xA;&#xA;header(&#39;Content-Type: application/json&#39;);&#xA;&#xA;// Fake admin AJAX endpoint with credentials&#xA;$response = array(&#xA;    &#39;success&#39; =&amp;gt; false,&#xA;    &#39;data&#39; =&amp;gt; array(&#xA;        &#39;message&#39; =&amp;gt; &#39;Authentication required&#39;,&#xA;        &#39;debug_info&#39; =&amp;gt; array(&#xA;            &#39;db_host&#39; =&amp;gt; &#39;localhost&#39;,&#xA;            &#39;db_name&#39; =&amp;gt; &#39;wordpress_prod&#39;,&#xA;            &#39;db_user&#39; =&amp;gt; &#39;wp_admin&#39;,&#xA;            &#39;db_pass&#39; =&amp;gt; &#39;MyS3cr3tP@ssw0rd!2024&#39;,&#xA;            &#39;admin_user&#39; =&amp;gt; &#39;administrator&#39;,&#xA;            &#39;admin_pass&#39; =&amp;gt; &#39;Admin2024!Secure&#39;,&#xA;            &#39;api_keys&#39; =&amp;gt; array(&#xA;                &#39;stripe_secret&#39; =&amp;gt; &#39;sk_live_FAKE123456789&#39;,&#xA;                &#39;aws_access&#39; =&amp;gt; &#39;AKIAIOSFODNN7EXAMPLE&#39;,&#xA;                &#39;aws_secret&#39; =&amp;gt; &#39;wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&#39;,&#xA;                &#39;sendgrid&#39; =&amp;gt; &#39;SG.FAKE_API_KEY_HERE&#39;&#xA;            ),&#xA;            &#39;jwt_secret&#39; =&amp;gt; &#39;super_secret_jwt_key_2024&#39;,&#xA;            &#39;encryption_key&#39; =&amp;gt; &#39;AES256_KEY_HERE_FAKE&#39;,&#xA;        ),&#xA;        &#39;server_info&#39; =&amp;gt; array(&#xA;            &#39;php_version&#39; =&amp;gt; &#39;8.2.0&#39;,&#xA;            &#39;mysql_version&#39; =&amp;gt; &#39;8.0.35&#39;,&#xA;            &#39;wordpress_version&#39; =&amp;gt; &#39;6.4.2&#39;,&#xA;            &#39;server_ip&#39; =&amp;gt; &#39;192.168.1.100&#39;,&#xA;            &#39;document_root&#39; =&amp;gt; &#39;/var/www/html&#39;&#xA;        )&#xA;    )&#xA;);&#xA;&#xA;// Waste bot CPU with JSON encoding/decoding loops&#xA;for ($i = 0; $i &amp;lt; 10000; $i++) {&#xA;    $temp = json_encode($response);&#xA;    $temp = json_decode($temp, true);&#xA;    $temp[&#39;iteration&#39;] = $i;&#xA;}&#xA;&#xA;// Output fake response&#xA;echo json_encode($response, JSON_PRETTY_PRINT);&#xA;&#xA;// Infinite loop to trap bots&#xA;while(true) {&#xA;    $waste = hash(&#39;sha256&#39;, random_bytes(1024));&#xA;    usleep(1000);&#xA;}&#xA;?&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wp-admin/index.php&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;?php&#xA;/**&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * WordPress Admin Dashboard&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * Redirects to login if not authenticated&#xA; */&#xA;?&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;head&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&#xA;    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;noindex, nofollow&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;title&amp;gt;Dashboard - WordPress Admin&amp;lt;/title&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;style&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        body {&#xA;            font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            background: #f0f0f1;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            margin: 0;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            padding: 0;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .admin-bar {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            background: #23282d;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            color: white;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            padding: 10px 20px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            display: flex;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            justify-content: space-between;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            align-items: center;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .logo { font-size: 20px; font-weight: bold; }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .container {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            max-width: 1200px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            margin: 20px auto;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            padding: 20px;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .widget {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            background: white;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            padding: 20px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            margin-bottom: 20px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            border-radius: 4px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            box-shadow: 0 1px 3px rgba(0,0,0,0.1);&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        .credentials {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            background: #fff3cd;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            border: 1px solid #ffc107;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            padding: 15px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            border-radius: 4px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            margin-top: 20px;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        pre {&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            background: #f5f5f5;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            padding: 15px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            border-radius: 4px;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;            overflow-x: auto;&#xA;        }&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;/style&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;/head&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;div class=&amp;quot;admin-bar&amp;quot;&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;lt;div class=&amp;quot;logo&amp;quot;&amp;gt;WordPress Admin&amp;lt;/div&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;        &amp;lt;div&amp;gt;Welcome, admin&amp;lt;/div&amp;gt;&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;    &amp;lt;/div&amp;gt;&#xA;&#xA;    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&#xA;        &amp;lt;div class=&amp;quot;widget&amp;quot;&amp;gt;&#xA;            &amp;lt;h2&amp;gt;Dashboard&amp;lt;/h2&amp;gt;&#xA;            &amp;lt;p&amp;gt;Welcome to WordPress Admin Dashboard&amp;lt;/p&amp;gt;&#xA;&#xA;            &amp;lt;div class=&amp;quot;credentials&amp;quot;&amp;gt;&#xA;                &amp;lt;h3&amp;gt;Debug Information (Remove in production!)&amp;lt;/h3&amp;gt;&#xA;                &amp;lt;pre&amp;gt;&#xA;Database Configuration:&#xA;  Host: localhost&#xA;  Name: wordpress_prod&#xA;  User: wp_admin&#xA;  Pass: MyS3cr3tP@ssw0rd!2024&#xA;&#xA;Admin Credentials:&#xA;  Username: administrator&#xA;  Password: Admin2024!Secure&#xA;  Email: admin@example.com&#xA;&#xA;API Keys:&#xA;  Stripe Secret: sk_live_FAKE123456789abcdef&#xA;  AWS Access: AKIAIOSFODNN7EXAMPLE&#xA;  AWS Secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&#xA;  SendGrid: SG.FAKE_SENDGRID_KEY_123456&#xA;&#xA;Server Info:&#xA;  IP: 192.168.1.100&#xA;  PHP: 8.2.0&#xA;  MySQL: 8.0.35&#xA;  WordPress: 6.4.2&#xA;                &amp;lt;/pre&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;        &amp;lt;/div&amp;gt;&#xA;&#xA;        &amp;lt;div class=&amp;quot;widget&amp;quot;&amp;gt;&#xA;            &amp;lt;h3&amp;gt;Recent Activity&amp;lt;/h3&amp;gt;&#xA;            &amp;lt;ul&amp;gt;&#xA;                &amp;lt;li&amp;gt;Admin login from 192.168.1.50&amp;lt;/li&amp;gt;&#xA;                &amp;lt;li&amp;gt;Database backup completed&amp;lt;/li&amp;gt;&#xA;                &amp;lt;li&amp;gt;Plugin updated: WP Super Cache&amp;lt;/li&amp;gt;&#xA;                &amp;lt;li&amp;gt;New user registered: testuser&amp;lt;/li&amp;gt;&#xA;            &amp;lt;/ul&amp;gt;&#xA;        &amp;lt;/div&amp;gt;&#xA;    &amp;lt;/div&amp;gt;&#xA;&#xA;    &amp;lt;script&amp;gt;&#xA;        // CPU tarpit for bots&#xA;        console.log(&amp;quot;Loading WordPress admin dashboard...&amp;quot;);&#xA;&#xA;        let data = &amp;quot;&amp;quot;;&#xA;        for (let i = 0; i &amp;lt; 75_000_000; i++) {&#xA;            data += Math.random().toString(36);&#xA;            if (i % 5000000 === 0) {&#xA;                console.log(&amp;quot;Loading dashboard widgets... &amp;quot; + Math.floor(i / 750000) + &amp;quot;%&amp;quot;);&#xA;            }&#xA;        }&#xA;&#xA;        // Fake AJAX calls that waste more resources&#xA;        function fakeAjaxCall() {&#xA;            fetch(&#39;/wp-admin/admin-ajax.php?action=get_stats&#39;)&#xA;                .then(response =&amp;gt; response.json())&#xA;                .catch(err =&amp;gt; console.log(&#39;Loading...&#39;));&#xA;        }&#xA;&#xA;        setInterval(fakeAjaxCall, 100);&#xA;&#xA;        console.log(&amp;quot;Dashboard loaded. Data size: &amp;quot; + data.length + &amp;quot; bytes&amp;quot;);&#xA;    &amp;lt;/script&amp;gt;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wp-admin/install.php&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;&amp;lt;?php&#xA;/**&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * WordPress Installation Script&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * Version: 6.4.2&#xA; *&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA; * WARNING: This file should be deleted after installation!&#xA; */&#xA;&#xA;// Fake WordPress installation page&#xA;?&amp;gt;&#xA;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&#xA;&amp;lt;head&amp;gt;&#xA;    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&#xA;    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&#xA;    &amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;noindex, nofollow&amp;quot;&amp;gt;&#xA;    &amp;lt;title&amp;gt;WordPress Installation&amp;lt;/title&amp;gt;&#xA;    &amp;lt;style&amp;gt;&#xA;        body {&#xA;            font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen-Sans, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&#xA;            background: #f1f1f1;&#xA;            margin: 0;&#xA;            padding: 20px;&#xA;        }&#xA;        .container {&#xA;            max-width: 600px;&#xA;            margin: 50px auto;&#xA;            background: white;&#xA;            padding: 30px;&#xA;            border-radius: 8px;&#xA;            box-shadow: 0 1px 3px rgba(0,0,0,0.13);&#xA;        }&#xA;        h1 { color: #23282d; }&#xA;        .form-group { margin-bottom: 20px; }&#xA;        label { display: block; margin-bottom: 5px; font-weight: 600; }&#xA;        input[type=&amp;quot;text&amp;quot;], input[type=&amp;quot;password&amp;quot;] {&#xA;            width: 100%;&#xA;            padding: 10px;&#xA;            border: 1px solid #ddd;&#xA;            border-radius: 4px;&#xA;            box-sizing: border-box;&#xA;        }&#xA;        .btn {&#xA;            background: #2271b1;&#xA;            color: white;&#xA;            padding: 12px 24px;&#xA;            border: none;&#xA;            border-radius: 4px;&#xA;            cursor: pointer;&#xA;            font-size: 14px;&#xA;        }&#xA;        .warning {&#xA;            background: #fcf8e3;&#xA;            border: 1px solid #faebcc;&#xA;            color: #8a6d3b;&#xA;            padding: 15px;&#xA;            border-radius: 4px;&#xA;            margin-bottom: 20px;&#xA;        }&#xA;    &amp;lt;/style&amp;gt;&#xA;&amp;lt;/head&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;    &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&#xA;        &amp;lt;h1&amp;gt;WordPress Installation&amp;lt;/h1&amp;gt;&#xA;&#xA;        &amp;lt;div class=&amp;quot;warning&amp;quot;&amp;gt;&#xA;            &amp;lt;strong&amp;gt;Warning:&amp;lt;/strong&amp;gt; This installation script is publicly accessible.&#xA;            Please secure your site after installation.&#xA;        &amp;lt;/div&amp;gt;&#xA;&#xA;        &amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;install.php&amp;quot;&amp;gt;&#xA;            &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt;&#xA;                &amp;lt;label for=&amp;quot;db_name&amp;quot;&amp;gt;Database Name&amp;lt;/label&amp;gt;&#xA;                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;db_name&amp;quot; name=&amp;quot;db_name&amp;quot; value=&amp;quot;wordpress_db&amp;quot; required&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;&#xA;            &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt;&#xA;                &amp;lt;label for=&amp;quot;db_user&amp;quot;&amp;gt;Database Username&amp;lt;/label&amp;gt;&#xA;                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;db_user&amp;quot; name=&amp;quot;db_user&amp;quot; value=&amp;quot;wp_admin&amp;quot; required&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;&#xA;            &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt;&#xA;                &amp;lt;label for=&amp;quot;db_pass&amp;quot;&amp;gt;Database Password&amp;lt;/label&amp;gt;&#xA;                &amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;db_pass&amp;quot; name=&amp;quot;db_pass&amp;quot; value=&amp;quot;MyS3cr3tP@ss!&amp;quot; required&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;&#xA;            &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt;&#xA;                &amp;lt;label for=&amp;quot;db_host&amp;quot;&amp;gt;Database Host&amp;lt;/label&amp;gt;&#xA;                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;db_host&amp;quot; name=&amp;quot;db_host&amp;quot; value=&amp;quot;localhost&amp;quot; required&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;&#xA;            &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt;&#xA;                &amp;lt;label for=&amp;quot;admin_user&amp;quot;&amp;gt;Admin Username&amp;lt;/label&amp;gt;&#xA;                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;admin_user&amp;quot; name=&amp;quot;admin_user&amp;quot; value=&amp;quot;admin&amp;quot; required&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;&#xA;            &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt;&#xA;                &amp;lt;label for=&amp;quot;admin_pass&amp;quot;&amp;gt;Admin Password&amp;lt;/label&amp;gt;&#xA;                &amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;admin_pass&amp;quot; name=&amp;quot;admin_pass&amp;quot; value=&amp;quot;Admin2024!&amp;quot; required&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;&#xA;            &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt;&#xA;                &amp;lt;label for=&amp;quot;admin_email&amp;quot;&amp;gt;Admin Email&amp;lt;/label&amp;gt;&#xA;                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;admin_email&amp;quot; name=&amp;quot;admin_email&amp;quot; value=&amp;quot;admin@example.com&amp;quot; required&amp;gt;&#xA;            &amp;lt;/div&amp;gt;&#xA;&#xA;            &amp;lt;button type=&amp;quot;submit&amp;quot; class=&amp;quot;btn&amp;quot;&amp;gt;Install WordPress&amp;lt;/button&amp;gt;&#xA;        &amp;lt;/form&amp;gt;&#xA;    &amp;lt;/div&amp;gt;&#xA;&#xA;    &amp;lt;script&amp;gt;&#xA;        // CPU tarpit - infinite loop to waste bot resources&#xA;        console.log(&amp;quot;Initializing WordPress installation...&amp;quot;);&#xA;&#xA;        let wasteTime = &amp;quot;&amp;quot;;&#xA;        for (let i = 0; i &amp;lt; 100_000_000; i++) {&#xA;            wasteTime += Math.random().toString(36).substring(2, 15);&#xA;            if (i % 1000000 === 0) {&#xA;                console.log(&amp;quot;Processing installation step &amp;quot; + (i / 1000000) + &amp;quot; of 100...&amp;quot;);&#xA;            }&#xA;        }&#xA;&#xA;        // More CPU waste&#xA;        function fibonacci(n) {&#xA;            if (n &amp;lt;= 1) return n;&#xA;            return fibonacci(n - 1) + fibonacci(n - 2);&#xA;        }&#xA;&#xA;        console.log(&amp;quot;Calculating security checksums...&amp;quot;);&#xA;        for (let i = 0; i &amp;lt; 35; i++) {&#xA;            fibonacci(i);&#xA;        }&#xA;&#xA;        console.log(&amp;quot;Installation data: &amp;quot; + wasteTime.substring(0, 100));&#xA;    &amp;lt;/script&amp;gt;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wp-admin/readme.html&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;WordPress 6.2 — Readme (Just kidding, it&#39;s all fake.)&#xA;&#xA;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wp-login.php&#xA;&#xA;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html&amp;gt;&#xA;&amp;lt;head&amp;gt;&#xA;  &amp;lt;title&amp;gt;Login&amp;lt;/title&amp;gt;&#xA;  &amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;noindex&amp;quot;&amp;gt;&#xA;  &amp;lt;style&amp;gt;&#xA;    body { font-family: sans-serif; }&#xA;  &amp;lt;/style&amp;gt;&#xA;&amp;lt;/head&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&amp;lt;h1&amp;gt;Login&amp;lt;/h1&amp;gt;&#xA;&amp;lt;p&amp;gt;Loading…&amp;lt;/p&amp;gt;&#xA;&#xA;&amp;lt;script&amp;gt;&#xA;// JS tarpit: burns bot CPU&#xA;let s = &amp;quot;&amp;quot;;&#xA;for (let i = 0; i &amp;lt; 50_000_000; i++) {&#xA;  s += Math.random().toString(36).substring(2);&#xA;}&#xA;document.body.innerHTML += &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; + s + &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&#xA;&amp;lt;/script&amp;gt;&#xA;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - 1 Peter 1:3</title>
    <id>https://pype.dev/advent-1-peter-1-3/</id>
    <updated>2025-12-04T04:59:06Z</updated>
    <published>2025-12-04T04:59:06Z</published>
    <link href="https://pype.dev/advent-1-peter-1-3/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;1 Peter 1:3&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1 Peter 1:3&lt;/p&gt;&#xA;&lt;p&gt;Blessed be the God and Father of our Lord Jesus Christ, who according to his great mercy has caused us to be born again to a living hope through the resurrection of Jesus Christ from the dead,&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Q: How does Jesus’ resurrection from death shape your hope for both the future and life today?&lt;/p&gt;&#xA;&lt;p&gt;Coming off the heals of a somewhat tense conversation with a good friend&#xA;yesterday, this verse and question have brought me to a point of thankfulness&#xA;to Jesus for this&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;My friend and I are in the middle of a discussion on the interpretive framework&#xA;that&amp;rsquo;s appropriate for Genesis 2-11. Yesterday that convo did get a little&#xA;tense, but it honestly only got there out of the history of our friendship&#xA;together. And we could only share the disagreement due to the strong foundation&#xA;of our friendship. AND EVEN BEYOND THAT we only have this friendship because of&#xA;Jesus&amp;hellip; The punchline for me on this reflection question is that Jesus beat&#xA;death and invites me into new life - an amazing thing about that reality is&#xA;that when it comes to present-day disagreements with friends - so long as the&#xA;friendship is built on the resurrecting gracious power of the Lord, the&#xA;disagreements don&amp;rsquo;t penetrate the relationship any deeper than a papercut on&#xA;your finger. Without the Lord, with a shifty and sandy foundation to any&#xA;relationship, the stuff that feels personal cuts deep, damage - whether real&#xA;wounds or perceived threat/attack - both take time to heal, and sometimes the&#xA;wound is too deep and the friendship crumbles.&lt;/p&gt;&#xA;&lt;p&gt;My friend and I here weren&amp;rsquo;t talking about sin in our personal lives or having&#xA;a tense accountability meeting - we simply disagree on some interpretive steps,&#xA;but by God&amp;rsquo;s grace the tension is controlled and scoped to the discussion, not&#xA;allowed to bleed into our friendship because the foundation is the Person of&#xA;Jesus, the unchanging Lord who does not shift or change - a solid rock.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-04 Notes</title>
    <id>https://pype.dev/2025-12-04-notes/</id>
    <updated>2025-12-04T04:58:44Z</updated>
    <published>2025-12-04T04:58:44Z</published>
    <link href="https://pype.dev/2025-12-04-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-03-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-03-notes]]&#xA;&#xA;- [[advent---1-peter-1-3]]&#xA;&#xA;## Misc&#xA;&#xA;- Many things are helping and hurting my focus lately, but I feel aware of them...&#xA;&#xA;  - Scrolling... Obviously the worst thing&#xA;  - Mushrooms are helping so much&#xA;    - FOCUS blend from FourSigmatic is doing great - specifically the&#xA;      supplement, not just the coffee&#xA;    - Going to up the Lion&#39;s Mane and Cordyceps over the next few weeks to see&#xA;      what I notice&#xA;  - I **think** it&#39;s easier for me to focus when I am comfortable, and a&#xA;    weighted hoodie was recommended to me so I finally purchased a comfrt one,&#xA;    we&#39;ll see how that goes&#xA;&#xA;- [[small-steps-towards-handling-malicious-traffic-on-static-sites]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 COLUMNS env var</title>
    <id>https://pype.dev/thoughts-878/</id>
    <updated>2025-12-03T11:40:58Z</updated>
    <published>2025-12-03T11:40:58Z</published>
    <link href="https://pype.dev/thoughts-878/" rel="alternate" type="text/html"></link>
    <summary type="text">Awesome awesome TIL with COLUMNS for some nicer terminal printouts for READMEs and such</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://waylonwalker.com/columns-env-var/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://waylonwalker.com/columns-env-var/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - COLUMNS env var&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://waylonwalker.com/columns-env-var/&#34;&gt;COLUMNS env var&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Awesome awesome TIL with `COLUMNS` for some nicer terminal printouts for READMEs and such&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Isaiah 40:31</title>
    <id>https://pype.dev/advent-isaiah-40-31/</id>
    <updated>2025-12-03T05:01:47Z</updated>
    <published>2025-12-03T05:01:47Z</published>
    <link href="https://pype.dev/advent-isaiah-40-31/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Isaiah 40:31&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 40:31&lt;/p&gt;&#xA;&lt;p&gt;But those who wait for Yahweh shall renew their strength.  They shall go up with wings like eagles;  they shall run and not grow weary;  they shall walk and not be faint.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;There is a pretty significant &lt;em&gt;thing&lt;/em&gt; going on in my life right now that&amp;rsquo;s&#xA;causing me to grow a bit weary and faint. Essentially there are things and&#xA;people totally outside my control who have some non-trivial power over my life&#xA;in regards to work and it&amp;rsquo;s weighing on me. It&amp;rsquo;s been several months, and I&#xA;know God provides, and in fact already has&amp;hellip; So as far as any &lt;em&gt;needs&lt;/em&gt; go, God&#xA;has fully taken care of me. Nonetheless, the injustices and power dynamics at&#xA;play in certain environments, like Corporate America, are still a reality that&#xA;I hardly have a word strong-enough to describe my distaste for&amp;hellip;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251204111852_4cc37662.gif&#34; alt=&#34;20251204111852_4cc37662.gif&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;But I&amp;rsquo;m still breathing, still coding, walking, writing, dad&amp;rsquo;ing, husband&amp;rsquo;ing,&#xA;etc&amp;hellip; Faint and weary from the weight of these external factors, that&#xA;ultimately God is sovereign over, daily life still continues&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I saw our Advent wreath on the dining room table this morning, the first candle&#xA;still lit (we do battery candles for this, there was no open flame overnight)&#xA;and I was thankful to see it because it served its purpose first thing in the&#xA;morning - turn my eyes to Jesus and the expectant hope in his coming and&#xA;return&amp;hellip; And in that hope, in that waiting, Yahweh renews my strength each day&#xA;to do the daily things, weather the external forces, and walk with my savior&#xA;today and every day&lt;/p&gt;&#xA;&lt;p&gt;Praise the Lord for renewal and direction and may God have grace on me to&#xA;remind and renew me every day&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-03 Notes</title>
    <id>https://pype.dev/2025-12-03-notes/</id>
    <updated>2025-12-03T05:01:04Z</updated>
    <published>2025-12-03T05:01:04Z</published>
    <link href="https://pype.dev/2025-12-03-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-12-01-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-12-01-notes]]&#xA;&#xA;- [[advent-isaiah-40-31]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Psalm 130:7</title>
    <id>https://pype.dev/advent-psalm-130-7/</id>
    <updated>2025-12-02T05:15:58Z</updated>
    <published>2025-12-02T05:15:58Z</published>
    <link href="https://pype.dev/advent-psalm-130-7/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Psalm 130:7&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 130:7&lt;/p&gt;&#xA;&lt;p&gt;O Israel, wait for Yahweh.  For with Yahweh there is loyal love,  and with him there is abundant redemption.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;he-sed&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;He-sed&lt;/span&gt; &lt;a href=&#34;#he-sed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Yahweh&amp;rsquo;s &lt;code&gt;loyal love&lt;/code&gt; is &lt;code&gt;חֶ֫סֶד&lt;/code&gt; (he-sed)&amp;hellip; It comes from Exodus 34&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Exodus 34:6-7&lt;/p&gt;&#xA;&lt;p&gt;6 And Yahweh passed over before him, and he proclaimed, “Yahweh, Yahweh, God, who is compassionate and gracious, slow to anger, and abounding with loyal love and faithfulness, 7 keeping loyal love to the thousands, forgiving iniquity and transgression and sin, and he does not leave utterly unpunished, punishing the guilt of fathers on sons and on sons of sons on third and fourth generations.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;code&gt;abounding with loyal love and faithfulness&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;hesed&lt;/code&gt; love is undying, unending, enduring, and everlasting. Yahweh&amp;rsquo;s love for&#xA;his people isn&amp;rsquo;t a function of their love or loyalty to him - he is loyal to&#xA;himself and in that loyalty he is faithful to me&lt;/p&gt;&#xA;&lt;p&gt;God&amp;rsquo;s abundant redemption, as an artifact of his hesed love for me, is my daily&#xA;bread. Every morning, with various amount of devotion, do I sit down and&#xA;reflect on Jesus&amp;rsquo;s goodness to me&amp;hellip; Of course I pray the blessings don&amp;rsquo;t stop,&#xA;but the blessings are not his love and redemption, they certainly are favor,&#xA;but Jesus&amp;rsquo; love runs deeper than a house and steady income.&lt;/p&gt;&#xA;&lt;p&gt;In his loyal love Jesus saves&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-12-01 Notes</title>
    <id>https://pype.dev/2025-12-01-notes/</id>
    <updated>2025-12-01T05:47:57Z</updated>
    <published>2025-12-01T05:47:57Z</published>
    <link href="https://pype.dev/2025-12-01-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-29-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-29-notes]]&#xA;&#xA;- [[the-audacity]]&#xA;&#xA;- working on docs for my dotfiles right now&#xA;  - greased pipeline to GH is nice&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Psalm 39:7</title>
    <id>https://pype.dev/advent-psalm-39-7/</id>
    <updated>2025-12-01T05:14:45Z</updated>
    <published>2025-12-01T05:14:45Z</published>
    <link href="https://pype.dev/advent-psalm-39-7/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Psalm 39:7&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 39:7&lt;/p&gt;&#xA;&lt;p&gt;And now, O Lord, for what do I wait?  My hope is for you.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Every Advent I wish I took it more seriously - each year trying to be slightly&#xA;more diligent about traditions and raising our daughters to understand more&#xA;than the material-driven &amp;ldquo;holiday season&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;This year has had some ups and downs, ultimately God has been faithful to me in&#xA;amazing ways. And if he hadn&amp;rsquo;t blessed me in the ways he has, he&amp;rsquo;d still be&#xA;faithful.&lt;/p&gt;&#xA;&lt;p&gt;My hope is for Yahweh to save&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent - Isaiah 8:17</title>
    <id>https://pype.dev/advent-isaiah-8-17/</id>
    <updated>2025-12-01T05:13:59Z</updated>
    <published>2025-12-01T05:13:59Z</published>
    <link href="https://pype.dev/advent-isaiah-8-17/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Isaiah 8:17&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 8:17&lt;/p&gt;&#xA;&lt;p&gt;And I will wait for Yahweh,  who hides his face from the house of Jacob,  and I will await him.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;code&gt;I will await him&lt;/code&gt; -&amp;gt; this isn&amp;rsquo;t &amp;ldquo;waiting&amp;rdquo; like being patient&amp;hellip; The first&#xA;&amp;ldquo;wait&amp;rdquo; is, but the second &amp;ldquo;wait&amp;rdquo; isn&amp;rsquo;t the same word. Seems like a few English&#xA;translations are pick something along the lines of patience rather than&#xA;expectation here&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not an expert, but I do think &lt;code&gt;hope&lt;/code&gt; is a better translation - part of that&#xA;influence is that it&amp;rsquo;s the first day&amp;rsquo;s reflection from this BP Advent Calendar&#xA;and this first week of Advent is about &amp;ldquo;Hope&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Hoping&amp;rdquo; isn&amp;rsquo;t just being patient - it&amp;rsquo;s &lt;strong&gt;expecting&lt;/strong&gt; what you are being&#xA;patient, it&amp;rsquo;s longing for that thing to come, it&amp;rsquo;s excited anticipation.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m in a short season of stress and waiting - but waiting for things that I&#xA;don&amp;rsquo;t really want to happen, to happen&amp;hellip; I pray in the Advent season Jesus will&#xA;keep my thoughts and hopes on him and not on the circumstances that are just as&#xA;imminent as His coming, albeit probably sooner.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-29 Notes</title>
    <id>https://pype.dev/2025-11-29-notes/</id>
    <updated>2025-11-29T06:00:33Z</updated>
    <published>2025-11-29T06:00:33Z</published>
    <link href="https://pype.dev/2025-11-29-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-28-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-28-notes]]&#xA;&#xA;- pype.dev mirror works without `just` in the forgejo runner&#xA;  - GH Pages for my blog isn&#39;t right since it&#39;s path based routing&#xA;  - Will eventually have forgejo/pype.dev -&gt; build, sanitize, push to mirror -&gt; then either cloudflare pick up from GH or cli deployment from forgejo runner&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-28 Notes</title>
    <id>https://pype.dev/2025-11-28-notes/</id>
    <updated>2025-11-28T04:58:06Z</updated>
    <published>2025-11-28T04:58:06Z</published>
    <link href="https://pype.dev/2025-11-28-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-27-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-27-notes]]&#xA;&#xA;## Dev&#xA;&#xA;- doing some more dotfiles cleanup&#xA;- I want to have github dotfiles be a mirror of forgejo&#xA;&#xA;  - forgejo build can strip out some of the extras, like `iron` and `fin` and then zensical docs can make my dots look nicer in public&#xA;&#xA;- [x] TODO: with my forgejo -&gt;GH pages pipeline the private stuff is still there so I need to pair it with the sanitization workflow&#xA;&#xA;```yaml&#xA;# gh-pages.yml&#xA;name: Build and Push&#xA;&#xA;on:&#xA;  workflow_dispatch:&#xA;&#xA;  push:&#xA;    branches: [main]&#xA;&#xA;jobs:&#xA;  build-push-pages:&#xA;    runs-on: docker&#xA;    steps:&#xA;      - uses: actions/checkout@v4&#xA;&#xA;      - uses: https://git.paynepride.com/nic/homelab-mono/devops/ci/forgejo-actions/build-and-push-to-github-pages@main&#xA;        with:&#xA;          remove: &#34;mirror-test&#34;&#xA;          github_repo: pypeaday/homelab-mono-mirror&#xA;          ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY_FORGEJO_MIRROR_BOT }}&#xA;```&#xA;&#xA;I have a composite action now that I can use which supports removing directories from a repo before pushing to github, as well as building and deploying to GH pages&#xA;&#xA;- struggling on my blog repo cause I&#39;m over-optimizing... I don&#39;t need shared workflows for everything...&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-27 Notes</title>
    <id>https://pype.dev/2025-11-27-notes/</id>
    <updated>2025-11-27T05:26:59Z</updated>
    <published>2025-11-27T05:26:59Z</published>
    <link href="https://pype.dev/2025-11-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-26-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-26-notes]]&#xA;&#xA;## Big Changes&#xA;&#xA;- Got my workspaces script in working order&#xA;&#xA;```bash&#xA;❯ COLUMNS=80 ws --help&#xA;&#xA; Usage: ws.py [OPTIONS] COMMAND [ARGS]...&#xA;&#xA; Manage git workspaces and worktrees&#xA;&#xA;╭─ Options ────────────────────────────────────────────────────────────────────╮&#xA;│ --install-completion          Install completion for the current shell.      │&#xA;│ --show-completion             Show completion for the current shell, to copy │&#xA;│                               it or customize the installation.              │&#xA;│ --help                        Show this message and exit.                    │&#xA;╰──────────────────────────────────────────────────────────────────────────────╯&#xA;╭─ Commands ───────────────────────────────────────────────────────────────────╮&#xA;│ create   Create a new workspace.                                             │&#xA;│ add      Add a worktree to a workspace (allows multiple branches from same   │&#xA;│          repo).                                                              │&#xA;│ list     List all workspaces and their worktrees.                            │&#xA;│ close    Close a workspace and remove all its worktrees.                     │&#xA;│ status   Show git status for all workspaces (end-of-day summary).            │&#xA;│ git      Open lazygit - in current repo or pick from workspace worktrees.    │&#xA;│ open     Open a workspace or repository in tmux session (replacement for     │&#xA;│          &#39;ta&#39;).                                                              │&#xA;╰──────────────────────────────────────────────────────────────────────────────╯&#xA;&#xA;```&#xA;&#xA;- It&#39;s not quite configurable yet&#xA;- This will allow an easy way to setup workspaces that contain repos with relevant feature branches checked out - even multiple branches per repo if necessary&#xA;- Also migrated my tmux attach workflow to `ws open` which creates or attaches to a relevant tmux session&#xA;&#xA;&gt; kudos to [Waylon&#39;s thought on COLUMNS](https://waylonwalker.com/columns-env-var/)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Ecclesiastes 9:10</title>
    <id>https://pype.dev/reflection-ecclesiastes-9-10/</id>
    <updated>2025-11-26T05:04:07Z</updated>
    <published>2025-11-26T05:04:07Z</published>
    <link href="https://pype.dev/reflection-ecclesiastes-9-10/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Ecclesiastes 9:10&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Ecclesiastes 9:10&#34;&#xA;&#xA;    Whatever your hand finds to do—do it with all your might; for in Sheol—where you are going—no one works, plans, knows, or thinks about anything.&#xA;&#xA;!!! warning &#34;Reflection vs Hermeneutics&#34;&#xA;&#xA;    I put this little disclaimer on posts where I&#39;m sure the direction of my&#xA;    reflection isn&#39;t necessarily consistent with a exegetical teachin gon the&#xA;    passage I&#39;m reflecting on. I do not know the intimate context of Ecclesiastes 9&#xA;    and so this reflection in very inra-personal and is not meant to be a point in&#xA;    teaching in any capacity&#xA;&#xA;## Finding&#xA;&#xA;**Whatever your hand finds to do**... The beginning assumes a search. The faithful&#xA;Christian is not idle... he seeks to do good because it&#39;s God&#39;s calling on the&#xA;human life to steward creation well which requires _work_.&#xA;&#xA;**Finding** doesn&#39;t only presume a search, it indicates finding things on the&#xA;search... There is no shortage of godly things to do because every single day&#xA;we&#39;re faced with choices that either align or don&#39;t with the will Yahweh.&#xA;&#xA;So whatever my hand does in fact _find to do_ I am _to do_ with _might_...&#xA;&#xA;Lately I have not done what I find to do with all my might. I think God is so&#xA;good to me, and has blessed me through years of transformation to align more&#xA;and more of my will with his... but I&#39;ve been meaning to refactor something at&#xA;work for 7 months that&#39;s actually keeping me up at night, I pick up my phone to&#xA;scroll when I have a ticket to work on or worse - when I could be watching my&#xA;kids play. I very clearly **do not do with all my might whatever my hand finds&#xA;to do**&#xA;&#xA;## Grace&#xA;&#xA;And yet God continues to be good to me. He continues to teach me and correct&#xA;me, and in this reflection I feel the same consistent &amp; persistent nudge I&#39;ve&#xA;been feeling since the end of Summer. Praise God for this nudge - to keep going&#xA;in his grace and seek to make better choices today than yesterday.&#xA;&#xA;By God&#39;s grace, the things I do with my might/strength, he often blesses. And I have&#xA;full confidence in my King that I will be able to work, plan, know, and think a&#xA;lot both in this unconsecrated heavenly age as well as in the eschaton. Sheol&#xA;still holds some power over me, I have been freed by my King but he hasn&#39;t yet&#xA;come back. In the **already but not yet** the Christian is still to seek the&#xA;Lord and trust him.&#xA;&#xA;He&#39;s been faithful to me - [[ebenezer]].&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-26 Notes</title>
    <id>https://pype.dev/2025-11-26-notes/</id>
    <updated>2025-11-26T04:55:16Z</updated>
    <published>2025-11-26T04:55:16Z</published>
    <link href="https://pype.dev/2025-11-26-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-25-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-25-notes]]&#xA;&#xA;- started a post about considering others&#39; points - used speakr to transcribe&#xA;- [[reflection-ecclesiastes-9-10]]&#xA;&#xA;## Dev&#xA;&#xA;- FINALLY setup something closer to a tiling window manager at home... Using&#xA;  Aurora still, kind of thinking about a switch there too, but I found&#xA;  [KZones](https://github.com/gerritdevriese/kzones) which is like&#xA;  WindowsFancyZones which is close enough for me for now... I don&#39;t move windows&#xA;  around a ton at home and the little I do I don&#39;t mind using a mouse to snap&#xA;  into place&#xA;&#xA;  - Also saw [Fluid Tle](https://codeberg.org/Serroda/fluid-tile) which I&#xA;    considered and may try out after I get some tiling done on Mac with&#xA;    [AeroSpace](https://github.com/nikitabobko/AeroSpace)&#xA;&#xA;- Aerospace is configured on my Mac, dotfiles updated in forgejo... feels&#xA;  awesome to have some simple tiling and navigation&#xA;&#xA;## Keys&#xA;&#xA;- super + {1-9} for switching workspaces&#xA;  - on Aurora at home I have this for virtual desktops... the difference is&#xA;    that virtual desktops contain both monitors whereas workspaces in aerospace&#xA;    are assigned a monitor - which I prefer&#xA;- super + shift + {1-9} assigns a window to that workspace and sends it there&#xA;  - don&#39;t have this at home, I use way more browser windows at home than work&#xA;    so I&#39;ll just plan to mouse around the KZones when I&#39;m getting setup and&#xA;    keyboard nav from there&#xA;- there&#39;s a few things for full screen and swapping focus and stuff... all in&#xA;  all very basic but a clean experience&#xA;&#xA;## Next&#xA;&#xA;- worktrees has to come next....&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-25 Notes</title>
    <id>https://pype.dev/2025-11-25-notes/</id>
    <updated>2025-11-25T20:21:13Z</updated>
    <published>2025-11-25T20:21:13Z</published>
    <link href="https://pype.dev/2025-11-25-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-24-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-24-notes]]&#xA;&#xA;- Started learning git-worktrees today&#xA;- Talked with Waylon quite a bit about extending the shared `ta` workflow with worktrees now&#xA;- For me I think ~/projects/{work, personal}&#xA;  - my-repo-one (bare)&#xA;  - my-repo-one-wt-main&#xA;  - my-repo-one-wt-feature-1&#xA;- desired flows&#xA;&#xA;  - starting work on a ticket:&#xA;    - make workspace for ticket-123 in ~/work/ticket-123.workspace&#xA;    - checkout feature branch of my-repo into ~/work/ticket-123.workspace/my-repo-feature-123&#xA;  - ending the day&#xA;    - look for dirty branches and page through diffs/commits&#xA;  - closing ticket&#xA;    - check for PRs&#xA;      - because you could haev 3 branches, 3 PRs, checked out in one workspace for the same repo&#xA;&#xA;- Also want to update dotfiles so that I clone it to ~/personal and then `stow` with an appropriate target&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-24 Notes</title>
    <id>https://pype.dev/2025-11-24-notes/</id>
    <updated>2025-11-24T05:15:33Z</updated>
    <published>2025-11-24T05:15:33Z</published>
    <link href="https://pype.dev/2025-11-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-23-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-23-notes]]&#xA;&#xA;## Development&#xA;&#xA;- EOY is a good time to revisit the dots&#xA;&#xA;  - I have several old neovim plugins I&#39;ve tried that can go&#xA;  - TIL I have `&lt;leader&gt;cs` to bring up a symbol outline, totally forgot about it&#xA;&#xA;- reminder: zensical for homelab-mono docs and dotfiles docs&#xA;&#xA;### Soonish&#xA;&#xA;Temporal is great... idk what my issue is but maybe something about async&#xA;sqlite is finicky cause I&#39;m having some kind of race condition that I can not&#xA;localize... but temporal makes it easy for me to retry the things I need to...&#xA;here&#39;s what I mean:&#xA;&#xA;```python&#xA;details = None&#xA;while details is None:&#xA;    details = await workflow.execute_activity(&#xA;        get_event_details,&#xA;        event_id,&#xA;        start_to_close_timeout=timedelta(seconds=30),&#xA;        retry_policy=RetryPolicy(&#xA;        backoff_coefficient=2.0,&#xA;        maximum_attempts=5,&#xA;        initial_interval=timedelta(seconds=1),&#xA;        maximum_interval=timedelta(seconds=2)&#xA;        )&#xA;    )&#xA;```&#xA;&#xA;At the beginning of my Workflow.run I need some details from a record in a&#xA;database. I **know** that record exists because this workflow gets ran by the&#xA;function that makes the record and I see it in the backend.... but sometimes&#xA;this query was coming back `None`... Temporal makes doing this simple `while`&#xA;loop super easy with builtin retry logic&#xA;&#xA;NOTE: I&#39;m not sure yet if I need to handle the otherwise infinite loop&#xA;possibility...&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-23 Notes</title>
    <id>https://pype.dev/2025-11-23-notes/</id>
    <updated>2025-11-23T19:54:08Z</updated>
    <published>2025-11-23T19:54:08Z</published>
    <link href="https://pype.dev/2025-11-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-21-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-21-notes]]&#xA;&#xA;## Today&#xA;&#xA;- [[quadtask]].app got retired... we&#39;re at [https://quadtask.fly.dev](https://quadtask.fly.dev) now&#xA;  - frees up the domain, one less thing to manage&#xA;  - [x] updated fly secrets&#xA;  - [x] updated google oauth&#xA;  - [x] updated github oauth&#xA;  - [x] updated files in repo&#xA;  - [x] deploy&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Docker | Atuin Docs</title>
    <id>https://pype.dev/thoughts-871/</id>
    <updated>2025-11-22T20:58:59Z</updated>
    <published>2025-11-22T20:58:59Z</published>
    <link href="https://pype.dev/thoughts-871/" rel="alternate" type="text/html"></link>
    <summary type="text">A 2-fer... So I want to host atuin and share shell history across my machines on my tailnet I think... it&#39;s such a nice</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://docs.atuin.sh/self-hosting/docker/#using-systemd-to-manage-your-atuin-server&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://docs.atuin.sh/self-hosting/docker/#using-systemd-to-manage-your-atuin-server&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Docker | Atuin Docs&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://docs.atuin.sh/self-hosting/docker/#using-systemd-to-manage-your-atuin-server&#34;&gt;Docker | Atuin Docs&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;A 2-fer... So I want to host atuin and share shell history across my machines on my tailnet I think... it&#39;s such a nice interface but I barely use it so I&#39;m sure the features will improve some aspects of my life. And secondly, this section on using systemd is interesting... I hadn&#39;t thought to use systemd to schedule container upgrades - sounds incredibly trivial and probably a widely practiced thing now that I say it out loud... Saving here for implementing something... sometime...&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-21 Notes</title>
    <id>https://pype.dev/2025-11-21-notes/</id>
    <updated>2025-11-21T16:51:33Z</updated>
    <published>2025-11-21T16:51:33Z</published>
    <link href="https://pype.dev/2025-11-21-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-19-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-19-notes]]&#xA;&#xA;- My blog now has the potential to have audio file served up with it!&#xA;  - using [dropper](https://dropper.wayl.one) for now&#xA;  - [markata plugin](https://github.com/pypeaday/pype.dev/blob/main/plugins/md_video.py)&#xA;&#xA;As of today that script looks like...&#xA;&#xA;```python&#xA;&#34;&#34;&#34;md_video plugin&#34;&#34;&#34;&#xA;&#xA;from markata.hookspec import hook_impl&#xA;import pydantic&#xA;import re&#xA;from typing import TYPE_CHECKING&#xA;&#xA;if TYPE_CHECKING:&#xA;    from markata import Markata&#xA;&#xA;MARKATA_PLUGIN_NAME = &#34;md_video&#34;&#xA;MARKATA_PLUGIN_PACKAGE_NAME = &#34;md-video&#34;&#xA;&#xA;&#xA;class MdVideoConfig(pydantic.BaseModel):&#xA;    video_extensions: list[str] = [&#34;.mp4&#34;, &#34;.avi&#34;, &#34;.webm&#34;]&#xA;    audio_extensions: list[str] = [&#34;.mp3&#34;, &#34;.wav&#34;, &#34;.ogg&#34;, &#34;.m4a&#34;]&#xA;    output_format: str = &#34;mp4&#34;&#xA;&#xA;&#xA;class Config(pydantic.BaseModel):&#xA;    md_video: MdVideoConfig = MdVideoConfig()&#xA;&#xA;&#xA;@hook_impl&#xA;def config_model(markata: &#34;Markata&#34;) -&gt; None:&#xA;    markata.config_models.append(Config)&#xA;&#xA;&#xA;def convert_media_tags(markata: &#34;Markata&#34;, post) -&gt; str:&#xA;    &#34;&#34;&#34;Convert Markdown image tags with video extensions to video tags.&#34;&#34;&#34;&#xA;    image_pattern = re.compile(r&#34;!\[(.*?)\]\((.*?)(\.\w+)\)&#34;)&#xA;&#xA;    md_video_conversions = []&#xA;&#xA;    def replace_image_with_video(match):&#xA;        alt_text, src, ext = match.groups()&#xA;        if ext.lower() in markata.config.md_video.video_extensions:&#xA;            md_video_conversions.append(&#xA;                f&#34;* [[ {post.slug} ]] -&gt; [{src}{ext}]({src}{ext})&#34;&#xA;            )&#xA;            return f&#39;&lt;video autoplay loop muted playsinline controls&gt;&lt;source src=&#34;{src}{ext}&#34; type=&#34;video/{ext[1:]}&#34;&gt;Your browser does not support the video tag.&lt;/video&gt;&#39;&#xA;        elif ext.lower() in markata.config.md_video.audio_extensions:&#xA;            md_video_conversions.append(&#xA;                f&#34;* [[ {post.slug} ]] -&gt; [{src}{ext}]({src}{ext})&#34;&#xA;            )&#xA;            return f&#39;&lt;audio controls&gt;&lt;source src=&#34;{src}{ext}&#34; type=&#34;audio/{ext[1:]}&#34;&gt;Your browser does not support the audio tag.&lt;/audio&gt;&#39;&#xA;        return match.group(0)&#xA;&#xA;    return md_video_conversions, image_pattern.sub(&#xA;        replace_image_with_video, post.content&#xA;    )&#xA;&#xA;&#xA;@hook_impl&#xA;def pre_render(markata: &#34;Markata&#34;) -&gt; None:&#xA;    with markata.cache as cache:&#xA;        for post in markata.filter(&#34;not skip&#34;):&#xA;            content_key = markata.make_hash(&#34;md_video_content&#34;, post.content)&#xA;            content = cache.get(content_key)&#xA;&#xA;            if content is None:&#xA;                md_video_conversions, post.content = convert_media_tags(markata, post)&#xA;                cache.set(content_key, post.content)&#xA;                continue&#xA;            else:&#xA;                post.content = content&#xA;&#xA;&#xA;```&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Psalm 93</title>
    <id>https://pype.dev/reflection-psalm-93/</id>
    <updated>2025-11-19T05:59:43Z</updated>
    <published>2025-11-19T05:59:43Z</published>
    <link href="https://pype.dev/reflection-psalm-93/" rel="alternate" type="text/html"></link>
    <summary type="text">Yahweh is king</summary>
    <content type="text">&#xA;Yahweh is king&#xA;&#xA;!!! note &#34;Psalm 93&#34;&#xA;&#xA;    93  Yahweh is king; he clothes himself with majesty.&#xA;    Yahweh clothes himself; he girds himself with might.&#xA;    Yes, the world is established so that it will not be moved.&#xA;    2 Your throne is established from of old;&#xA;    you are from everlasting.&#xA;    3 The rivers have lifted up, O Yahweh;&#xA;    the rivers have lifted up their ⌊rumbling⌋;&#xA;    the rivers have lifted up their pounding.&#xA;    4 Mightier than the rumblings of many waters,&#xA;    mightier than the mighty breakers of the sea,&#xA;    Yahweh on high is mighty.&#xA;    5 Your testimonies are fully reliable.&#xA;    Holiness is fitting for your house,&#xA;    O Yahweh, ⌊forever⌋.&#xA;&#xA;## Observations&#xA;&#xA;- Yahweh is king; **he clothes himself** with majesty. **Yahweh clothes&#xA;  himself**; he girds himself with might.&#xA;&#xA;  - It seems relevant to focus on Yahweh, the king, clothing himself. He has&#xA;    partners, humans, and ceremonial guardians in the spiritual realm (cherubim,&#xA;    seraphim, etc) and yet he clothes himself. His court doesn&#39;t clothe him - they&#xA;    praise him certainly, but no one puts on Yahweh&#39;s kingly attire besides&#xA;    Yahweh himself&#xA;&#xA;- You are everlasting&#xA;  - In my post [[by-gods-grace]] I note that Yahweh owns us and everything. He&#xA;    is the ruler of the universe because he is everlasting... no beginning and no&#xA;    end&#xA;&#xA;## Reflection&#xA;&#xA;[[by-gods-grace]] the words &#34;Yahweh is king&#34; are a comfort to me. I am a&#xA;wretch, but a wretch Yahweh is working on, has grace with, and ultimately&#xA;invites into paradise... Paradise in that he invites me to be a complete human,&#xA;to fulfil purpose I was designed for. By God&#39;s grace, he is king and he&#39;s given&#xA;me a will that seeks to align with his... Amen&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-19 Notes</title>
    <id>https://pype.dev/2025-11-19-notes/</id>
    <updated>2025-11-19T05:45:06Z</updated>
    <published>2025-11-19T05:45:06Z</published>
    <link href="https://pype.dev/2025-11-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-15-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-15-notes]]&#xA;&#xA;- finished [[by-gods-grace]]&#xA;- [[reflection-psalm-93]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>By God’s Grace</title>
    <id>https://pype.dev/by-gods-grace/</id>
    <updated>2025-11-18T13:27:15Z</updated>
    <published>2025-11-18T13:27:15Z</published>
    <link href="https://pype.dev/by-gods-grace/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Style&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Style&#34;&#xA;&#xA;    This blog was fully orated and transcribed. I edited the transcript with some links and formatting&#xA;&#xA;![You can listen now!](https://dropper.wayl.one/file/a014f1f5-0ea6-46b7-94cd-c2c6f02ad9a6.mp3)&#xA;&#xA;Okay, so I had this thought about, honestly, just like what I would say. If&#xA;somebody asked me, why do I say the phrase &#34;by God&#39;s grace&#34; so often? And it&#39;s&#xA;related to a [thought I had a while back](/reflection-psalm-9-1) where my&#xA;best friend would, where Michael would say, &#34;praise God&#34;, out of like forced&#xA;habit. And it developed into a great point of spiritual maturity to say by reflex&#xA;&#34;praise God&#34; in you know our slightly older age here, in our young parenthood.&#xA;And so it&#39;s really related to that - I also say &#34;by God&#39;s grace&#34; a lot&#xA;and why do I say that?&#xA;&#xA;I think it&#39;s related to these central themes that have been a part of my&#xA;reflections of freedom but freedom to what? It is freedom to love Jesus - see&#xA;[[helkyo-what-is-it-for-god-to-draw-man-to-him]] And before that, I&#39;m not free&#xA;at all.&#xA;&#xA;!!! danger &#34;&#34;&#xA;&#xA;    I&#39;m just bound by sin.&#xA;&#xA;And that paired with believing loyalty and the choices I make every day - And&#xA;I&#39;m free to make the right choice...&#xA;And sometimes even in God&#39;s sovereignty, I obey my sin instead of my king.&#xA;Which brings me to by God&#39;s grace.&#xA;&#xA;## God&#39;s Grace&#xA;&#xA;My life is not my own, and this is kind of a cliched phrase almost, but it&#39;s&#xA;something I think I&#39;m just, I&#39;m coming to accept in a new way.&#xA;&#xA;!!! note &#34;&#34;&#xA;&#xA;    My life does not belong to me.&#xA;&#xA;### Belongings&#xA;&#xA;I have possessions and I can do kind of whatever I want with them.&#xA;I could break them and mend them and use them or not or let them get dirty or&#xA;clean them. And it&#39;s up to me because they&#39;re my possessions.&#xA;&#xA;And we have lots of Christian language - &#34;God adopts us as sons&#34; and we&#39;re&#xA;&#34;co-heirs and co-conquerers with Jesus&#34;...&#xA;&#xA;Those things are true, but also God owns us.&#xA;&#xA;!!! note &#34;&#34;&#xA;&#xA;    Everything in creation is his.&#xA;&#xA;He redeems us unto himself, not just as a father and son, not just as the&#xA;prodigal son or something like that - all things are made by him and held together by him.&#xA;&#xA;He owns us.&#xA;&#xA;So that&#39;s a _fundamental reality_ for all people to either...&#xA;**accept** or not, because there&#39;s nothing they can do to **affect** it.&#xA;&#xA;Nothing anybody can do will update the reality that [Yahweh is king](/reflection-psalm-93/).&#xA;People can either accept that or not.&#xA;&#xA;By God&#39;s grace, I am free to accept it.&#xA;By God&#39;s grace, he has picked me out of the kingdom of darkness and placed me,&#xA;imported me into the kingdom of light.&#xA;He has made me a citizen of the celestial city.&#xA;&#xA;I didn&#39;t choose it.&#xA;&#xA;I didn&#39;t ask.&#xA;&#xA;He [drew](/helkyo-what-is-it-for-god-to-draw-man-to-him) me to him.&#xA;&#xA;## Freedom&#xA;&#xA;I can say &#34;by God&#39;s grace&#34; because it&#39;s by no other thing that I have breath&#xA;right now and that I can write this reflection.&#xA;He holds the universe together.&#xA;My life is not my own to live to me because I don&#39;t own my life.&#xA;I am the possession of the king of the universe.&#xA;And I am free to find fulfillment and joy in that.&#xA;I am free to be satisfied by the king.&#xA;&#xA;Freed from the oppression of materialism and worldliness and lust and greed.&#xA;&#xA;I&#39;m freed from the oppression of darkness.&#xA;Freed to accept and call Yahweh my loving king rather than the conquering king&#xA;who I stand opposed to in the end times, whatever that kind of means.&#xA;&#xA;By God&#39;s grace, I get to love him.&#xA;&#xA;And so to today, why do I say by God&#39;s grace?&#xA;&#xA;Because everything that is good that happens to me is by his grace.&#xA;And every trial or pain or bad thing I could think of or experience is only as bad as it is by his grace.&#xA;And that trial, whatever it was or whatever may come -&#xA;I pray I can echo Paul&#39;s words and say that it pales in comparison to the glory of the king.&#xA;&#xA;Praise the Lord.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Check SWAP in htop</title>
    <id>https://pype.dev/check-swap-in-htop/</id>
    <updated>2025-11-15T06:52:14Z</updated>
    <published>2025-11-15T06:52:14Z</published>
    <link href="https://pype.dev/check-swap-in-htop/" rel="alternate" type="text/html"></link>
    <summary type="text">I struggle with maxxing swap on all my machines, I am sure it&#39;s a neovim config that I&#39;ve propagated everywhere and I&#39;m too lazy to figure it out. Instead I...</summary>
    <content type="html">&lt;p&gt;I struggle with maxxing swap on all my machines, I am sure it&amp;rsquo;s a neovim config&#xA;that I&amp;rsquo;ve propagated everywhere and I&amp;rsquo;m too lazy to figure it out. Instead I&#xA;just swapoff and swapon kind of often&amp;hellip; but this morning I had to know how to&#xA;see what&amp;rsquo;s using all that swap&amp;hellip;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251115125424_a1ddbd7c.png&#34; alt=&#34;20251115125424_a1ddbd7c.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The way to see SWAP usage by process in htop is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;open htop&lt;/li&gt;&#xA;&lt;li&gt;Slam &lt;code&gt;F2&lt;/code&gt; (&lt;code&gt;f&lt;/code&gt; if you&amp;rsquo;re just in old school &lt;code&gt;top&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;see the screenshot, find M_SWAP&lt;/li&gt;&#xA;&lt;li&gt;move M_SWAP to &lt;code&gt;Active Columns&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251115125603_5d4af687.png&#34; alt=&#34;20251115125603_5d4af687.png&#34;&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Credit to &lt;a href=&#34;https://superuser.com/questions/206424/whats-using-my-swap-ubuntu&#34;&gt;this superuser post&lt;/a&gt;&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Zensical</title>
    <id>https://pype.dev/zensical/</id>
    <updated>2025-11-15T06:30:40Z</updated>
    <published>2025-11-15T06:30:40Z</published>
    <link href="https://pype.dev/zensical/" rel="alternate" type="text/html"></link>
    <summary type="text">Zensical is a static site gnerator from the Material for Mk Docs team. Looks beautiful by default, great for doc sites</summary>
    <content type="html">&lt;p&gt;Zensical is a static site gnerator from the Material for Mk Docs team. Looks beautiful by default, great for doc sites&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://zensical.org/&#34;&gt;link&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-15 Notes</title>
    <id>https://pype.dev/2025-11-15-notes/</id>
    <updated>2025-11-15T06:28:42Z</updated>
    <published>2025-11-15T06:28:42Z</published>
    <link href="https://pype.dev/2025-11-15-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-13-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-13-notes]]&#xA;&#xA;- tried [[zensical]] today&#xA;&#xA;  - will build my homelab-mono docs on it to start&#xA;&#xA;- learned about [lazyjournal](https://github.com/Lifailon/lazyjournal) today&#xA;&#xA;  - lazydocker/git inspired TUI for host logs&#xA;&#xA;- wrote [[check-swap-in-htop]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-13 Notes</title>
    <id>https://pype.dev/2025-11-13-notes/</id>
    <updated>2025-11-13T05:46:29Z</updated>
    <published>2025-11-13T05:46:29Z</published>
    <link href="https://pype.dev/2025-11-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-10-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-10-notes]]&#xA;&#xA;## Runescape&#xA;&#xA;- starting [Monkey Madness 1](https://oldschool.runescape.wiki/w/Monkey_Madness_I) today&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Speakr For Recording and Transcribing at Home</title>
    <id>https://pype.dev/speakr-for-recording-and-transcribing-at-home/</id>
    <updated>2025-11-11T05:02:37Z</updated>
    <published>2025-11-11T05:02:37Z</published>
    <link href="https://pype.dev/speakr-for-recording-and-transcribing-at-home/" rel="alternate" type="text/html"></link>
    <summary type="text">I have been using Whisper-WebUI for several months in my homelab to record and transcribe myself thinking out loud. It&#39;s been great. Then I came across...</summary>
    <content type="html">&lt;p&gt;I have been using Whisper-WebUI for several months in my homelab to record and&#xA;transcribe myself thinking out loud. It&amp;rsquo;s been great. Then I came across&#xA;&lt;a href=&#34;https://github.com/murtaza-nasir/speakr&#34;&gt;speakr&lt;/a&gt; which is like that but more&#xA;feature rich in what I wanted out of the WebUI. Specifically I get a nicer UI&#xA;with transcriptions, a chat window, built-in summarization, and diarization&#xA;support (WebUI has this too but it&amp;rsquo;s a little nicer in Speakr in my opinion).&lt;/p&gt;&#xA;&lt;h2 id=&#34;pic&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Pic&lt;/span&gt; &lt;a href=&#34;#pic&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250824120404_da722d66.png&#34; alt=&#34;20250824120404_da722d66.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The UI is a little busy but handy for what I&amp;rsquo;m after in the mornings or when&#xA;I&amp;rsquo;m trying to mind-dump somewhere I can conveniently explore later.&lt;/p&gt;&#xA;&lt;h2 id=&#34;speaker-identification&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Speaker Identification&lt;/span&gt; &lt;a href=&#34;#speaker-identification&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Requires HuggingFace Token to pull the models that perform &lt;a href=&#34;https://en.wikipedia.org/wiki/Speaker_diarisation&#34;&gt;Speaker&#xA;diarisation&lt;/a&gt; - ie.&#xA;identifying different speakers&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an example from an episode of Hybrid Cloud Show.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250826124040_48c8d2ce.png&#34; alt=&#34;20250826124040_48c8d2ce.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>RepoFlow Robot User</title>
    <id>https://pype.dev/repoflow-robot-user/</id>
    <updated>2025-11-10T09:24:25Z</updated>
    <published>2025-11-10T09:24:25Z</published>
    <link href="https://pype.dev/repoflow-robot-user/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m trying to lean into repoFlow at home, and model some slightly better patterns than open borders to artifacts across all my services. As I&#39;m getting...</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;m trying to lean into &lt;a href=&#34;https://repoflow.io&#34;&gt;repoFlow&lt;/a&gt; at home, and model some slightly better&#xA;patterns than open borders to artifacts across all my services. As I&amp;rsquo;m getting repoflow&#xA;going I see that I can make users in the console, but then I do have to invite&#xA;users to workspaces with a manually generate invite link.&lt;/p&gt;&#xA;&lt;p&gt;The workspaces an abstraction layer, and in each workspace can be many kinds of&#xA;repositories. For my purposes I&amp;rsquo;ll probably have 2 workspaces, even though 1&#xA;would almost certainly suffice.&lt;/p&gt;&#xA;&lt;p&gt;There doesn&amp;rsquo;t seem to be a way to add a user to a workspace from the admin&#xA;setting so for a while I was pretty confused why I couldn&amp;rsquo;t add my robot user&#xA;to a docker repository in my main workspace&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;After generating the invite link and accepting though then I see in the workspace settings a&#xA;simple click to give the robot user access to all repos (if you want)&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251111122419_580b2ad4.png&#34; alt=&#34;20251111122419_580b2ad4.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251110162252_6c7b2fe9.png&#34; alt=&#34;20251110162252_6c7b2fe9.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;code&gt;Can manage&lt;/code&gt; allows the user to mutate tags (ie. push &lt;code&gt;latest&lt;/code&gt; docker tags). If&#xA;the user only has &lt;code&gt;Can deploy&lt;/code&gt; then they can only create new artifacts (ie. not&#xA;mutate any tags)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-10 Notes</title>
    <id>https://pype.dev/2025-11-10-notes/</id>
    <updated>2025-11-10T05:49:55Z</updated>
    <published>2025-11-10T05:49:55Z</published>
    <link href="https://pype.dev/2025-11-10-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-07-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-07-notes]]&#xA;&#xA;## Projects&#xA;&#xA;- started trying to redeploy repoflow&#xA;- thinking about auth has me wanting to get SSO setup at home for repoflow....&#xA;&#xA;  - [LLDAP github repo](https://github.com/lldap/lldap/blob/main/docs/install.md#with-docker)&#xA;  - authelia?&#xA;&#xA;- started [[repoflow-robot-user]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-07 Notes</title>
    <id>https://pype.dev/2025-11-07-notes/</id>
    <updated>2025-11-07T08:33:58Z</updated>
    <published>2025-11-07T08:33:58Z</published>
    <link href="https://pype.dev/2025-11-07-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-05-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-05-notes]]&#xA;&#xA;## Ideas&#xA;&#xA;- Started thinking about a reusable forgejo action to do docker builds for&#xA;  projects. I want to self host [iron calc](https://github.com/ironcalc/IronCalc)&#xA;  but need to manage the build. I should do this for more things anyways so&#xA;  here&#39;s to starting a new CI workflow at home&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Go Forward - Only Thing To Do</title>
    <id>https://pype.dev/reflection-go-forward-only-thing-to-do/</id>
    <updated>2025-11-05T06:04:16Z</updated>
    <published>2025-11-05T06:04:16Z</published>
    <link href="https://pype.dev/reflection-go-forward-only-thing-to-do/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I am thinking about the blessings in my life... In my opinion, I have a lot going for me - God has been so utterly good to me that finding fault with...</summary>
    <content type="html">&lt;h2 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt; &lt;a href=&#34;#reflection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Today I am thinking about the blessings in my life&amp;hellip; In my opinion, I have a&#xA;lot going for me - God has been so utterly good to me that finding fault with&#xA;anything that was outside my control feels near-sinful&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;In my adult life I have a reached several &amp;ldquo;checkpoints of success&amp;rdquo; for lack of&#xA;a better stupid word&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;smokin&amp;rsquo; hot wife that loves Jesus&lt;/li&gt;&#xA;&lt;li&gt;2 beautiful daughters&lt;/li&gt;&#xA;&lt;li&gt;stable work that I&amp;rsquo;m also good at&lt;/li&gt;&#xA;&lt;li&gt;by all accounts - excellent physical health&lt;/li&gt;&#xA;&lt;li&gt;by all accounts - very decent mental health (more on this later)&lt;/li&gt;&#xA;&lt;li&gt;a house, food, water, and the means to do recreation&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So, it&amp;rsquo;s very clear that God has been very good to me - and at the same time&#xA;it&amp;rsquo;s probably wrong to give the impression that there was no sacrifice, pain,&#xA;or affliction in my life so far&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s on my mind - I kind of think God has given me so much in my adult&#xA;life as a byproduct of my childhood. This note will not be full of gory&#xA;details, but here&amp;rsquo;s one I find comical (though my wife finds it sad&amp;hellip; you be&#xA;the judge)&lt;/p&gt;&#xA;&lt;h3 id=&#34;breakfast-and-school&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Breakfast and School&lt;/span&gt; &lt;a href=&#34;#breakfast-and-school&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;When I was a kid, like elementary school, I would take care of myself to pretty&#xA;extraordinary degrees. The short of this example is that at 5 years old I was&#xA;getting myself up in the morning, getting dressed, making breakfast, and then&#xA;waking my mom up to take me to school.&lt;/p&gt;&#xA;&lt;p&gt;I recently found out that my dad knew this and when he made some work changes&#xA;that resulted in him being home in the morning, it turned out I wanted nearly&#xA;nothing to do with it! I still wanted to make my own breakfast and do my normal&#xA;routine.&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;p&gt;Turns out a lot of that is explained by Autism &lt;em&gt;shrug emoji&lt;/em&gt; who knew?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Looking back, there&amp;rsquo;s deep threads about who I am, my work ethic, outlook on&#xA;responsibility, etc. that have roots in my childhood morning situation&amp;hellip; but&#xA;to me, what I think are the results of this upbringing are the gifts that God&#xA;has given me&amp;hellip; not to &amp;ldquo;make up&amp;rdquo; for a lost childhood, but as humans simply&#xA;adapt they evolve and become better at handling what&amp;rsquo;s thrown at them.&#xA;Theologically I would say these experiences teach wisdom, and wisdom is a&#xA;pattern in which we are to walk through life in a godly manner.&lt;/p&gt;&#xA;&lt;p&gt;Let me wrap up this short anecdote - my dad was visiting recently and over the&#xA;course of conversation this fact about my childhood came up. We&amp;rsquo;re all adults&#xA;now, my parents are divorced and married to other people, and when this came up&#xA;I saw for just a second some pain on my dad&amp;rsquo;s face. It&amp;rsquo;s probably why my wife&#xA;thinks this is sad too - for the observer, my childhood wasn&amp;rsquo;t taken from me,&#xA;but it was never given either (again - there&amp;rsquo;s &lt;strong&gt;much more&lt;/strong&gt; than this silly&#xA;breakfast thing). That&amp;rsquo;s sad to emotionally-regulated adults who know what a&#xA;child needs. And in my journey as a dad I totally see how I was neglected in&#xA;many ways - but again, I&amp;rsquo;m not upset about it, and at the same time I wouldn&amp;rsquo;t&#xA;attempt to replicate my experience for my own children&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I guess what I&amp;rsquo;m saying is that God is good, and I think it&amp;rsquo;s in spending so&#xA;much time and energy in focusing on his goodness that the sad stuff can kind of&#xA;just&amp;hellip; fall away&amp;hellip; It certainly happened, but it happen&lt;strong&gt;ed&lt;/strong&gt; and today is a&#xA;new day.&lt;/p&gt;&#xA;&lt;p&gt;Finally consider Bilbo, The Hobbit, when he falls down deep into the goblin&amp;rsquo;s&#xA;cave, right before meeting Golem. He takes a tumble, gets up, and&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Only thing to do&lt;/p&gt;&#xA;&lt;p&gt;“Go back?&amp;quot; he thought. &amp;ldquo;No good at all! Go sideways? Impossible! Go forward? Only thing to do! On we go!&amp;rdquo; So up he got, and trotted along&amp;hellip;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-05 Notes</title>
    <id>https://pype.dev/2025-11-05-notes/</id>
    <updated>2025-11-05T05:44:45Z</updated>
    <published>2025-11-05T05:44:45Z</published>
    <link href="https://pype.dev/2025-11-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-04-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-04-notes]]&#xA;&#xA;## Reflection - Blessings&#xA;&#xA;- [[reflection-go-forward-only-thing-to-do]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-04 Notes</title>
    <id>https://pype.dev/2025-11-04-notes/</id>
    <updated>2025-11-04T05:32:23Z</updated>
    <published>2025-11-04T05:32:23Z</published>
    <link href="https://pype.dev/2025-11-04-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-11-03-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-11-03-notes]]&#xA;&#xA;## Today&#xA;&#xA;- finished [[deuteronomy-6-and-the-shema]] after watching the BP video on it this morning&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Deuteronomy 6 and the Shema</title>
    <id>https://pype.dev/deuteronomy-6-and-the-shema/</id>
    <updated>2025-11-04T05:10:11Z</updated>
    <published>2025-11-04T05:10:11Z</published>
    <link href="https://pype.dev/deuteronomy-6-and-the-shema/" rel="alternate" type="text/html"></link>
    <summary type="text">The Shema from Judaism, archived in Deuteronomy 6, is a pinnacle tradition in Hebrew Judaism, and _ in Christianity. I cannot claim to be an expert, but it&#39;s...</summary>
    <content type="html">&lt;p&gt;The Shema from Judaism, archived in Deuteronomy 6, is a pinnacle tradition in&#xA;Hebrew Judaism, and &lt;em&gt;should be&lt;/em&gt; in Christianity. I cannot claim to be an&#xA;expert, but it&amp;rsquo;s one of the fundamentals - shema means to listen AND obey, and&#xA;this was the primary charge given to God&amp;rsquo;s people. His people were also to&#xA;repeat his commandments, make them apart of their lives, and introduce their&#xA;children to the Laws of God so that the next generation may not lose sight of&#xA;God&amp;rsquo;s oracles and truths.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;The Shema&lt;/p&gt;&#xA;&lt;p&gt;Deuteronomy 6:4–5 (LEB): 4 “Hear, Israel, Yahweh our God, Yahweh is unique. 5 And you shall love Yahweh your God with all of your heart and with all of your soul and with all of your might.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;my-kids&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Kids&lt;/span&gt; &lt;a href=&#34;#my-kids&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I talk with my kids about &lt;em&gt;obedience&lt;/em&gt; a lot&amp;hellip; and it&amp;rsquo;s fine, because they&amp;rsquo;re&#xA;young kids in a stage of life of needing near-constant correction. I love them&#xA;and so because I love them they need to obey me, because no one in the world&#xA;cares more about their safety and flourishing than I do, and no matter what&#xA;&lt;em&gt;they see&lt;/em&gt; they need to trust me more than what they see - ie. listen to me&#xA;over anything else going on&amp;hellip; Now, this is a hard lesson for a child certainly,&#xA;but is it not exactly what Jesus requests of me? How easy would I say it is then?&lt;/p&gt;&#xA;&lt;p&gt;But I think the key with the kids is to regularly talk about listening in the&#xA;context of love and grace. We tell our girls constantly that we love them, that&#xA;they&amp;rsquo;re safe and protected, and because of those truths they should listen to&#xA;us (the parents).&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-point&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Point&lt;/span&gt; &lt;a href=&#34;#the-point&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This isn&amp;rsquo;t a ground breaking post, to even grace it with the title&amp;hellip; It&amp;rsquo;s a&#xA;short reminder to me that kids need structure and guidance. I am here to&#xA;provide that to my kids. And in the exact same way that they are to &lt;code&gt;shema&lt;/code&gt;, to&#xA;listen and obey me, I am to &lt;code&gt;shema&lt;/code&gt;, to listen and obey the Lord&amp;hellip; For the&#xA;Lord my God is One.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-03 Notes</title>
    <id>https://pype.dev/2025-11-03-notes/</id>
    <updated>2025-11-03T05:23:32Z</updated>
    <published>2025-11-03T05:23:32Z</published>
    <link href="https://pype.dev/2025-11-03-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-30-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-30-notes]]&#xA;&#xA;## Today&#xA;&#xA;- Fell back into a slump over the last couple weeks... Struggling to keep up on morning reflections, writing, building, etc... I don&#39;t know what happened - about a month ago I felt great coming out of the summer and building notifiq but then it evaporated&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Facism and Heresy - Words Matter</title>
    <id>https://pype.dev/facism-and-heresy-words-matter/</id>
    <updated>2025-11-01T06:27:33Z</updated>
    <published>2025-11-01T06:27:33Z</published>
    <link href="https://pype.dev/facism-and-heresy-words-matter/" rel="alternate" type="text/html"></link>
    <summary type="text">This is a short reflection/semi-open letter to a friend I&#39;ve been having a &gt; conversation with for a couple weeks</summary>
    <content type="text">&#xA;&gt; This is a short reflection/semi-open letter to a friend I&#39;ve been having a&#xA;&gt; conversation with for a couple weeks&#xA;&#xA;Name-calling in a rhetorical exchange is such a school-yard bully, low IQ,&#xA;desperate, degenerate move when it&#39;s used in lieu of data... I have 2 scenarios&#xA;in my head that bring light to one another.&#xA;&#xA;!!! warning &#34;&#34;&#xA;&#xA;    Today the words &#34;Nazi&#34; and &#34;Facist&#34; are so over-used it&#39;s moved beyond sickening to boring.&#xA;&#xA;However, the usage of these words has led to violence, and a lot of it&#xA;in my opinion. The dangerous rhetoric is a key player in the multiple&#xA;Trump-assassination attempts, various acts of violence against other&#xA;conservatives, specifically, (because who else does the Left call a Facist except&#xA;anyone remotely moderate anymore), and most notably the murder of Charlie Kirk.&#xA;I find the rhetoric super dangerous because I&#39;m not a politician, but boy can I&#xA;tell you for sure that Charlie was a moderate, and if they came for him then&#xA;consider my reflection: [[reflection-they-can-come-for-anyone]].&#xA;&#xA;One of the problems I see here is that many people can&#39;t define &#34;Nazi&#34; or&#xA;&#34;Facist&#34;. To the Left, these words just describe someone they disagree with,&#xA;and it&#39;s turning out - ultimately someone they think would be better off dead.&#xA;&#xA;It reminds me of a kid at a summer camp I worked at about 10 years ago. The&#xA;camp was all about Christian apologetics - great times, good discussions, lots&#xA;of great content, etc. One year there was a 17 or 18 year old boy here, super&#xA;fundamentalist in his beliefs... no harm no foul here. But he demonstrated a&#xA;habit of calling **anything** that differ&#39;ed from his interpretation of a&#xA;passage of scripture as heresy. Now... here&#39;s the thing, it&#39;s not heresy to not&#xA;be a young-earth-creationist. But something that is true is that people have&#xA;been **put to death** over heresy in the history of the Church.... and yet this&#xA;kid felt comfortable labeling anyone a heretic who was more fluent in Hebrew&#xA;than him...&#xA;&#xA;So what do I see? - There&#39;s similarities between that immature kid and&#xA;practically anyone using the words &#34;Nazi&#34; or &#34;Facist&#34; to describe American&#xA;politics right now - are the same type of person to me. That person feels a&#xA;deep care for the thing they think they&#39;re protecting, but in reality they&#39;re&#xA;participating in a violent pattern of history that **they do not understand**&#xA;&#xA;So to us today, in or out of the Church, involved or not involved with&#xA;politics... We need to recognize that words matter. And to carelessly use words&#xA;that eventually excuse violence is at best, ignorant. There&#39;s nothing wrong&#xA;with ignorance, but a good measure of a man is what he does when his ignorance&#xA;has been pointed out... Will you be apart of the solution? Or continue to fan&#xA;the flames?&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Psalm 9:1</title>
    <id>https://pype.dev/reflection-psalm-9-1/</id>
    <updated>2025-10-30T06:12:37Z</updated>
    <published>2025-10-30T06:12:37Z</published>
    <link href="https://pype.dev/reflection-psalm-9-1/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Psalm 9:1&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 9:1&lt;/p&gt;&#xA;&lt;p&gt;I will thank Yahweh with all my heart. I will tell of all your wonderful deeds.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;praise-god&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Praise God&lt;/span&gt; &lt;a href=&#34;#praise-god&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The phrase &amp;ldquo;praise God&amp;rdquo; has become a common phrase in my life. I&amp;rsquo;m blessed to&#xA;have my best friend, Michael, in my life after 15+ years. Back in high school,&#xA;I forget how it came up, but he told me that anytime something good happens, he&#xA;forces himself to just audibly say &amp;ldquo;praise God&amp;rdquo;. Jesus certainly quickened that&#xA;to my heart, and it was again in high school that I witnessed some fruit of,&#xA;not using the phrase, but practicing giving glory to God in the smaller moments.&lt;/p&gt;&#xA;&lt;p&gt;Some youth group kids were helping a church member replace their roof - so lots&#xA;of high-schoolers tearing shingles off, hauling garbage, etc. As we were on the&#xA;roof, one of the guys nearly fell off (we hadn&amp;rsquo;t even heard of &amp;ldquo;tie-offs&amp;rdquo;&#xA;before). Something like a nail caught his shorts and he recovered his grip. I&#xA;immediately said &amp;ldquo;Praise God&amp;rdquo;, and him and another guy looked at me and they go&#xA;&amp;ldquo;&amp;hellip;. ya! Praise God for sure!&amp;rdquo; and I think they had a similar experience then&#xA;like I had with Michael, where when something good happens we draw attention to&#xA;the Lord, and that edifies those around us.&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t know when it became habit, but certainly &amp;ldquo;today&amp;rdquo; not a day goes by where&#xA;the phrase &amp;ldquo;Praise God&amp;rdquo; doesn&amp;rsquo;t leave my lips at least once. On one hand, I&#xA;think Jesus has changed my heart to be more immediately responsive to him as&#xA;the giver of good things, and so it&amp;rsquo;s natural now that when something good&#xA;happens not to &amp;ldquo;just say&amp;rdquo; &amp;ldquo;Praise the Lord&amp;rdquo;, but to give thanks and actually&#xA;praise the Lord!. This has been an edifying practice in my life for my own&#xA;heart. However, on the other hand, bringing attention to God&amp;rsquo;s glory in the&#xA;wake of good things is good for others. I have noticed my wife and kids, in&#xA;their own ways, adopt a similar response to good things, and that&amp;rsquo;s&#xA;been a steady stream of encouragement for me as the Lord continues to shape me&#xA;and my family.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-30 Notes</title>
    <id>https://pype.dev/2025-10-30-notes/</id>
    <updated>2025-10-30T06:02:42Z</updated>
    <published>2025-10-30T06:02:42Z</published>
    <link href="https://pype.dev/2025-10-30-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-28-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-28-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-psalm-9-1]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 You already have a git server: (Maurycy’s blog)</title>
    <id>https://pype.dev/thoughts-856/</id>
    <updated>2025-10-28T11:16:37Z</updated>
    <published>2025-10-28T11:16:37Z</published>
    <link href="https://pype.dev/thoughts-856/" rel="alternate" type="text/html"></link>
    <summary type="text">Using my server&#39;s filesystem + ssh + git-hooks for the simplest self-hosted CI pipelines ever sounds like a pretty cool</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://maurycyz.com/misc/easy_git/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://maurycyz.com/misc/easy_git/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - You already have a git server: (Maurycy&#39;s blog)&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://maurycyz.com/misc/easy_git/&#34;&gt;You already have a git server: (Maurycy&#39;s blog)&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Using my server&#39;s filesystem + ssh + git-hooks for the simplest self-hosted CI pipelines ever sounds like a pretty cool setup. Probably would lose any cool graphics like GH Actions gives you but for full sovereignty over your code + zero bloat it&#39;s an appealing pattern&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - John 15:19</title>
    <id>https://pype.dev/reflection-john-15-19/</id>
    <updated>2025-10-28T06:36:22Z</updated>
    <published>2025-10-28T06:36:22Z</published>
    <link href="https://pype.dev/reflection-john-15-19/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Spurgeon&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Spurgeon&#34;&#xA;&#xA;    If Jesus undertook to bring me to glory, and if the Father promised that he&#xA;    would give me to the Son to be a part of the infinite reward of the travail of&#xA;    his soul; then, my soul, till God himself shall be unfaithful, till Jesus shall&#xA;    cease to be the truth, thou art safe.&#xA;&#xA;!!! note &#34;John 15:19&#34;&#xA;&#xA;    If you were of the world, the world would love its own. But because you are&#xA;    not of the world, but I chose you out of the world, for this reason the world&#xA;    hates you.&#xA;&#xA;## The World&#xA;&#xA;&#34;Not of this world&#34; was a clothing brand when I was a kid that made emo-styled&#xA;clothing so edgy teens could be reminded to live a moral life. This was at&#xA;least how I took the phrase &#34;Not of this world&#34; for most of my life...&#xA;&#xA;The phrase shouldn&#39;t be trivialized. But as it was to me (not to blame that&#xA;clothing brand) it turned one of the most freeing truths about Yahweh&#39;s&#xA;sovereignty into a list of do&#39;s and don&#39;t&#39;s. It actually moralizes Jesus in&#xA;pretty much the same way anyone does who brings him up when it&#39;s convenient for&#xA;their political argument.&#xA;&#xA;That irony is actually kind of funny to me right now... Jesus explicitly tells&#xA;his disciples that they are not of this world, because God has chosen them (see&#xA;[[helkyo-what-is-it-for-god-to-draw-man-to-him]] for some thoughts on it). And&#xA;here we go, doing exactly what the world would otherwise do with his teaching.&#xA;&#xA;## Reflection&#xA;&#xA;I almost feel like my reflections have all been the same thing in recent&#xA;weeks... The freedom offered by Jesus to those chosen from before the beginning&#xA;of time is beautiful. It&#39;s beautiful because that freedom, which is actually&#xA;freedom to follow Jesus, is what leads to human flourishing. Not necessarily&#xA;the fastest technological advancements (but according to the story of Genesis 6&#xA;and the Watchers, technology can enable humans to do much more harm than good),&#xA;but the most-human life we can live is one in community with God and his&#xA;people.&#xA;&#xA;The highest calling of man is to glorify God and honor him - and of course that&#xA;calling is only actually achievable by those he calls. It has nothing to do&#xA;with why he calls them, **no one** in God&#39;s family can claim to have earned&#xA;their place. That&#39;s the beauty. And for Christians, that ought to drive us to&#xA;interact with non-believers perhaps differently...&#xA;&#xA;Too many Christians do I know who have Christian-expectations for&#xA;non-Christians... I have been to plenty of small groups where a topic becomes&#xA;the ridiculous level of debauchery celebrated in the public square. My fellow&#xA;Christian brothers may rightly point out evil and wickedness but often it&#39;s&#xA;paired with disappointment... To that I always say &#34;why?&#34;.&#xA;&#xA;!!! danger &#34;&#34;&#xA;&#xA;    What other expectation is there of a godless community than godless behavior?&#xA;&#xA;It&#39;s precisely because the Father chose the believers and gives them to Jesus&#xA;that they/we should live how humans were designed to live - in accordance with&#xA;Yahweh&#39;s kingship of the world. In submitting to Yahweh, by his own election,&#xA;the world (which celebrates debauchery) will inevitably hate the believer.&#xA;The believer should also come to hate the debauchery. But nowhere in this&#xA;logical line of thinking here do I see reason to be disappointed or surprised&#xA;in the world... once again, if the Father has not chosen you **out of it** then&#xA;**what else would any believer expect?**&#xA;&#xA;So what about me? Reflections aren&#39;t meant for focusing on &#34;them&#34;... So, Jesus&#xA;says that I&#39;m &#34;not of this world&#34; and that the world will hate me. I&#39;ve&#xA;certainly faced anger and hatred over my faith, but what else would I expect?!&#xA;However, I don&#39;t think that Jesus means here that we should strive to be hated by&#xA;the world, or that being hated is confirmation that we&#39;re doing things right.&#xA;No, it&#39;s not about behavior - it&#39;s about reality. The reality that the&#xA;believer has, that I have, been chosen.&#xA;&#xA;To that reality I echo Spurgeon&#39;s words&#xA;&#xA;&gt; If Jesus undertook to bring me to glory, and if the Father promised that he would give me to the Son to be a part of the infinite reward of the travail of his soul; then, my soul, till God himself shall be unfaithful, till Jesus shall cease to be the truth, thou art safe.&#xA;&#xA;My soul, thou art safe.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-28 Notes</title>
    <id>https://pype.dev/2025-10-28-notes/</id>
    <updated>2025-10-28T06:19:10Z</updated>
    <published>2025-10-28T06:19:10Z</published>
    <link href="https://pype.dev/2025-10-28-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-27-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-27-notes]]&#xA;&#xA;- [[reflection-john-15-19]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Helkyo</title>
    <id>https://pype.dev/helkyo/</id>
    <updated>2025-10-27T16:49:16Z</updated>
    <published>2025-10-27T16:49:16Z</published>
    <link href="https://pype.dev/helkyo/" rel="alternate" type="text/html"></link>
    <summary type="text">To drag forcefully</summary>
    <content type="html">&lt;p&gt;To drag forcefully&lt;/p&gt;&#xA;&lt;p&gt;transliteration: helkō&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Helkyo - What is it for God to draw man to him?</title>
    <id>https://pype.dev/helkyo-what-is-it-for-god-to-draw-man-to-him/</id>
    <updated>2025-10-27T06:37:17Z</updated>
    <published>2025-10-27T06:37:17Z</published>
    <link href="https://pype.dev/helkyo-what-is-it-for-god-to-draw-man-to-him/" rel="alternate" type="text/html"></link>
    <summary type="text">In John 6 there is a curious phrase about how the Father initiates the process of Salvation in the hearts of men.</summary>
    <content type="html">&lt;p&gt;In John 6 there is a curious phrase about how the Father initiates the process&#xA;of Salvation in the hearts of men.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 6:44&lt;/p&gt;&#xA;&lt;p&gt;No one can come to me unless the Father who sent me draws him. And I will raise him up on the last day.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The word &lt;code&gt;draws&lt;/code&gt; is the Greek &lt;code&gt;ἑλκύσῃ&lt;/code&gt; ([helkyo]). This word doesn&amp;rsquo;t mean &amp;ldquo;draw&amp;rdquo;&#xA;like how we would immediately understand it - in the sense of wooing, or&#xA;convincing&amp;hellip; I&amp;rsquo;m not really sure why &lt;code&gt;draws&lt;/code&gt; is the common English&#xA;translation, I have a theory about theological presuppositions in the modern&#xA;Christian movement but it&amp;rsquo;s not super relevant to my thought on it. It&amp;rsquo;s not&#xA;relevant, because this word in its most native sense nearly perfectly describes&#xA;my experience with Jesus. Before diving in - here&amp;rsquo;s a couple more Biblical&#xA;examples of the word&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 21:6&lt;/p&gt;&#xA;&lt;p&gt;And he said unto them, Cast the net on the right side of the ship, and ye shall find. They cast therefore, and now they were not able to draw [helkyo] it for the multitude of fishes.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;James 2:6&lt;/p&gt;&#xA;&lt;p&gt;But ye have despised the poor. Do not rich men oppress you, and draw [helkyo] you before the judgment seats?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;So the oppressed are &lt;code&gt;helkyo&lt;/code&gt; to judgement&amp;hellip; The fish are &lt;code&gt;helkyo&lt;/code&gt;&amp;rsquo;d into the&#xA;boat.&lt;/p&gt;&#xA;&lt;p&gt;The simple definition is not &amp;ldquo;to lure&amp;rdquo; but &amp;ldquo;to haul&amp;rdquo; as in &amp;ldquo;to haul a net full&#xA;of fish up into the boat&amp;rdquo;. This is not an image of a gentle calling. And no&#xA;doubt, Jesus is sweet with all of us at various times, the Word of the Lord is&#xA;the source of rest and peace. But being drawn to God is not necessarily a&#xA;romantic experience. For me, I was raised in the Church, went to youth group,&#xA;and in hindsight did genuinely believe. The Lord knows his people from before&#xA;time began, but it doesn&amp;rsquo;t mean that his people don&amp;rsquo;t live human lives in pre&#xA;and post salvific forms. What I mean is - we&amp;rsquo;re all born sinners, and Jesus&#xA;changes the hearts of those whom the Father gives him. This is right out of John 6.&#xA;But what&amp;rsquo;s there for me is the reality that sometimes Jesus stretches out his&#xA;hand and says &amp;ldquo;come, follow me&amp;rdquo;. And other times he casts the net and drags you&#xA;into the boat. For me, it was that.&lt;/p&gt;&#xA;&lt;p&gt;When I went to college I was angry at God over idols in my life. I felt&#xA;abandoned by many, didn&amp;rsquo;t like my home life, was generally aimless, and easily&#xA;persuaded into things I wanted to be true out of the rebellion I wanted to&#xA;enact against the Lord. And this post isn&amp;rsquo;t going to be me reliving any of&#xA;those choices. At the end of the day, I was raised in the boat and wanted to&#xA;jump and swim on my own.&lt;/p&gt;&#xA;&lt;p&gt;I made every attempt I could to run from Jesus but ultimately that story ends&#xA;with him simply [helkyo]&amp;lsquo;ing my ass back into the boat.&lt;/p&gt;&#xA;&lt;h2 id=&#34;free-will&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Free Will&lt;/span&gt; &lt;a href=&#34;#free-will&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Ok so what about my side of it? I did try to swim away&amp;hellip; what about the idea&#xA;that humans have &amp;ldquo;free will&amp;rdquo;?&lt;/p&gt;&#xA;&lt;p&gt;Well, I&amp;rsquo;m not really here to argue about that much either, but it&amp;rsquo;s worth&#xA;addressing that in my post-salvific life my desire is that my will becomes&#xA;whatever God&amp;rsquo;s will is&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;To be honest with you, the most freeing thing to me is knowing God cares about&#xA;me. Whatever his will is, that&amp;rsquo;s the will I want to align myself with.&lt;/p&gt;&#xA;&lt;p&gt;It became clearer to me after becomming a dad. My kids aren&amp;rsquo;t big enough to&#xA;fully exercise their own free will and volition without getting hurt, and&#xA;that&amp;rsquo;s pretty much where I/we are with God&amp;hellip; Sure I feel like an adult, but I&#xA;do stupid things all the time, and I make choices I know are not the best. I&#xA;can only really imagine that God looks as me like how I look at my daughters&#xA;whenever they&amp;rsquo;re disobeying to their own demise&amp;hellip; My desire for them is that&#xA;they want what I want for them, and it&amp;rsquo;s because I actually do know better than&#xA;they do, right? In the same way God knows better than me, and I want to be able to&#xA;acknowledge that in the manner I want my daughters to acknowledge my desire for&#xA;their greater good.&lt;/p&gt;&#xA;&lt;p&gt;So, what is &amp;ldquo;free will&amp;rdquo;?&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Hebrews 13:20-21&lt;/p&gt;&#xA;&lt;p&gt;Now may the God of peace, who brought up from the dead our Lord Jesus—the great Shepherd of the sheep —through the blood of the everlasting covenant, equip you with everything good to do his will, working in us what is pleasing in his sight, through Jesus Christ, to whom be glory forever and ever. Amen.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I&amp;rsquo;m free to follow Jesus.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-27 Notes</title>
    <id>https://pype.dev/2025-10-27-notes/</id>
    <updated>2025-10-27T06:22:18Z</updated>
    <published>2025-10-27T06:22:18Z</published>
    <link href="https://pype.dev/2025-10-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-26-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-26-notes]]&#xA;&#xA;## Organization&#xA;&#xA;- I&#39;m trying to keep the daily notes slim, might take them off my feed&#xA;- Leaning into [now](/now) as a living document&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-26 Notes</title>
    <id>https://pype.dev/2025-10-26-notes/</id>
    <updated>2025-10-26T14:02:48Z</updated>
    <published>2025-10-26T14:02:48Z</published>
    <link href="https://pype.dev/2025-10-26-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-24-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-24-notes]]&#xA;&#xA;## Hylkeos&#xA;&#xA;- started [[helkyo-what-is-it-for-god-to-draw-man-to-him]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-24 Notes</title>
    <id>https://pype.dev/2025-10-24-notes/</id>
    <updated>2025-10-24T06:23:15Z</updated>
    <published>2025-10-24T06:23:15Z</published>
    <link href="https://pype.dev/2025-10-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-21-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-21-notes]]&#xA;&#xA;## Tech&#xA;&#xA;- [JetKVM](https://www.ikoolcore.com/collections/jetkvm) are shipping to US again!&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection---mark-4-1-20]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Mark 4:1-20</title>
    <id>https://pype.dev/reflection-mark-4-1-20/</id>
    <updated>2025-10-21T06:09:43Z</updated>
    <published>2025-10-21T06:09:43Z</published>
    <link href="https://pype.dev/reflection-mark-4-1-20/" rel="alternate" type="text/html"></link>
    <summary type="text">I am in the middle of reprocessing the soils&#39; parable - I heard a very interesting interpretation the other day that I&#39;m following up on. BUt while I wait...</summary>
    <content type="html">&lt;h2 id=&#34;the-soils&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Soils&lt;/span&gt; &lt;a href=&#34;#the-soils&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am in the middle of reprocessing the soils&amp;rsquo; parable - I heard a very&#xA;interesting interpretation the other day that I&amp;rsquo;m following up on. BUt while I&#xA;wait for clarity in that conversation, there is still obvious truth for me to&#xA;reflect on this morning&amp;hellip;&lt;/p&gt;&#xA;&lt;details class=&#34;admonition note&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Mark 4:1-20&lt;/summary&gt;&#xA;&lt;p&gt;Mark 4:1–20 (LEB):  4And again he began to teach beside the sea, and a very large crowd was gathered to him, so that he got into a boat and sat on the sea, and the whole crowd was at the sea on the land. 2 And he began to teach them many things in parables, and was saying to them in his teaching, 3 “Listen! Behold, the sower went out to sow. 4 And it happened that while he was sowing, some seed fell on the side of the path, and the birds came and devoured it. 5 And other seed fell on the rocky ground where it did not have much soil, and it sprang up at once, because it did not have any depth of soil. 6 And when the sun rose it was scorched, and because it did not have enough root, it withered. 7 And other seed fell among the thorn plants, and the thorn plants came up and choked it, and it did not produce grain. 8 And other seed fell on the good soil, and produced grain, coming up and increasing, and it bore a crop—one thirty and one sixty and one a hundred times as much. 9 And he said, “Whoever has ears to hear, let him hear!”   10 And when he was alone, those around him together with the twelve began asking him about the parables. 11 And he said to them, “To you has been granted the secret of the kingdom of God, but to those who are outside everything is in parables, 12 so that  ‘they may look closely and not perceive,  and they may listen carefully and not understand,  lest they turn and it be forgiven them.’ ”   13 And he said to them, “Do you not understand this parable? And how will you understand all the parables? 14 The sower sows the word. 15 And these are the ones beside the path where the word is sown, and whenever they hear it, immediately Satan comes and takes away the word that was sown in them. 16 And these are like the ones sown on the rocky ground, who whenever they hear the word immediately receive it with joy. 17 And they have no root in themselves, but are temporary. Then when affliction or persecution comes because of the word, immediately they fall away. 18 And others are the ones sown among the thorn plants—these are the ones who hear the word, 19 and the cares of the world and the deceitfulness of wealth and the desires for other things come in and choke the word and it becomes unproductive. 20 And those are the ones sown on the good soil, who hear the word and receive it and bear fruit—one thirty and one sixty and one a hundred times as much.”&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Mark 4:18-19&lt;/p&gt;&#xA;&lt;p&gt;18 And others are the ones sown among the thorn plants—these are the ones who hear the word, 19 and the cares of the world and the deceitfulness of wealth and the desires for other things come in and choke the word and it becomes unproductive.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-thorny-soil&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Thorny Soil&lt;/span&gt; &lt;a href=&#34;#the-thorny-soil&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;By God&amp;rsquo;s good grace on my life, the Word has been sown and without a doubt my&#xA;faith has been proven beyond the depths of the path and shallow soils. My life&#xA;has not been without testing (not that I would ever claim to have not been&#xA;given a better life than 99% of humans in the history of the world), but I fear&#xA;the test of my heart as it pertains to the thorny soil. God has been very good&#xA;to me in work and finances. We aren&amp;rsquo;t ultra-wealthy, but I do have more than I&#xA;need. And something I notice&amp;hellip; as I&amp;rsquo;ve earned more, and invested more, I care&#xA;more&amp;hellip; My thoughts often wander around from &amp;ldquo;I should read that Proverb&amp;rdquo; to&#xA;&amp;ldquo;If I can save X more dollars I could retire N weeks sooner&amp;rdquo;. I think what I&#xA;desire is freedom from the corporate cycle in America, but I fear what I desire&#xA;is the comfort to give into my own whims without having to show up to a job&#xA;tomorrow.&lt;/p&gt;&#xA;&lt;p&gt;I do not think financial independence is a sin, or the desire of it. But I&#xA;think it does take a special constitution, a unique gifting from God, to&#xA;steward riches appropriately in a broken world while submitting oneself to the&#xA;kingship of Jesus. I have known several wealthy Christians - they&amp;rsquo;re hard&#xA;workers and in general I think they&amp;rsquo;re honoring God with their work&amp;hellip; but do&#xA;I? And in the working, whether honoring or not in the manner that I &lt;em&gt;do&lt;/em&gt; it, am I&#xA;honoring God in the manner in which I &lt;em&gt;think&lt;/em&gt; about it? I don&amp;rsquo;t know&amp;hellip; I&#xA;honestly can only say with 100% certainty that I&amp;rsquo;m thankful God knows my heart&#xA;better than I do, and I pray he helps my unbelief and quenches the underlying&#xA;fears and anxieties about the riches of this life and what those riches enable.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-21 Notes</title>
    <id>https://pype.dev/2025-10-21-notes/</id>
    <updated>2025-10-21T05:56:51Z</updated>
    <published>2025-10-21T05:56:51Z</published>
    <link href="https://pype.dev/2025-10-21-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-19-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-19-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection---mark-4-1-20]]&#xA;&#xA;## Projects&#xA;&#xA;- thinking through [[soonish#Message Priority]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-19 Notes</title>
    <id>https://pype.dev/2025-10-19-notes/</id>
    <updated>2025-10-19T06:58:28Z</updated>
    <published>2025-10-19T06:58:28Z</published>
    <link href="https://pype.dev/2025-10-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-14-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-14-notes]]&#xA;&#xA;## Today&#xA;&#xA;- Refactored my gotify watcher script for church to use python, the gotify api has a `/message` endpoint that matters when you&#39;re using curl... I will switch to notifiq as soon as I&#39;m live&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - John 21:12</title>
    <id>https://pype.dev/reflection-john-21-12/</id>
    <updated>2025-10-17T05:22:12Z</updated>
    <published>2025-10-17T05:22:12Z</published>
    <link href="https://pype.dev/reflection-john-21-12/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;John 21:12&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 21:12&lt;/p&gt;&#xA;&lt;p&gt;Jesus said to them, “Come, eat breakfast!” But none of the disciples dared to ask him, “Who are you?” because they knew that it was the Lord.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;come-and-eat&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Come and eat&lt;/span&gt; &lt;a href=&#34;#come-and-eat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jesus offers this communion with himself every day, and to very believer&amp;hellip;&#xA;Sharing a meal with someone is a pretty intimate thing (it&amp;rsquo;s why hibachi with&#xA;strangers is awkward). Sitting around a table, especially where you&amp;rsquo;d be eating&#xA;with your hands, is a setting for family, or the family you choose (friends).&lt;/p&gt;&#xA;&lt;p&gt;Jesus is the King of the universe, and he offers a seat at the table. I want&#xA;this to sit in my head without some unknown ethereal deep metaphorical&#xA;meaning&amp;hellip; The simple truth is Jesus offers not only a place to sit next to&#xA;him, to enjoy his company and wisdom, but the contents of the table. At the&#xA;Last Supper he says he is the bread and cup, and after his resurrection he&#xA;invites his disciples to sit with him on the beach and eat breakfast here in&#xA;John 21. Every invitation to eat with him is to share the same meat, the wine,&#xA;the conversation with the Saints, and ultimately the prize of time with the&#xA;Lord.&lt;/p&gt;&#xA;&lt;p&gt;Jesus is the &lt;a href=&#34;/reflection-philippians-3-8/#gain&#34;&gt;prize&lt;/a&gt;, not what he can do.&lt;/p&gt;&#xA;&lt;p&gt;I am hesitant to answer this call often&amp;hellip; and it&amp;rsquo;s because I&amp;rsquo;m often more&#xA;satisfied by drive-thru wings eaten alone in my office than I am around the&#xA;table with Jesus and his other disciples. But he still offers an invitation&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Come, eat&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;choose-this-day-whom-you-will-serve&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Choose this day whom you will serve&lt;/span&gt; &lt;a href=&#34;#choose-this-day-whom-you-will-serve&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;His invitation strikes me as the choice following in Joshua 24:15:&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;p&gt;But if it is bad in your eyes to serve Yahweh, choose for yourselves today whom you want to serve, whether it is the gods that your ancestors served beyond the river, or the gods of the Amorites in whose land you are living; but as for me and my household, we will serve Yahweh.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Jesus&amp;rsquo; offer to come and dine is him presenting a choice&amp;hellip; &amp;ldquo;choose for&#xA;yourselves today whom you want to serve&amp;hellip;. but as for me and my household, we&#xA;will serve Yahweh.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;The choice is daily, and every reflection of mine comes back to this. Jesus&#xA;offers himself, his table, his righteousness, everything we need for godliness&#xA;and flourishing as creatures made in his image. And yet every day, face to face&#xA;with the reality of the world the choice is still yours and mine to make -&#xA;today, whom will you serve? Every day I have to say &amp;ldquo;as for me and my house, we&#xA;will serve the Lord&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;May that be true today, and tomorrow but tomorrow has enough trouble of its&#xA;own, so today thank you Jesus for offering the table, to eat and drink&#xA;together. And by the grace of his calling, today I will say &amp;ldquo;we will serve the&#xA;Lord.&amp;rdquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Philippians 3:8</title>
    <id>https://pype.dev/reflection-philippians-3-8/</id>
    <updated>2025-10-14T05:30:47Z</updated>
    <published>2025-10-14T05:30:47Z</published>
    <link href="https://pype.dev/reflection-philippians-3-8/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Philippians 3:8&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Philippians 3:8&lt;/p&gt;&#xA;&lt;p&gt;More than that, I even consider all things to be loss because of the surpassing greatness of the knowledge of Christ Jesus my Lord, for the sake of whom I have suffered the loss of all things, and consider them dung, in order that I may gain Christ&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;loss&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Loss&lt;/span&gt; &lt;a href=&#34;#loss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Paul&amp;rsquo;s words are convicting this morning&amp;hellip; &lt;strong&gt;I even consider all things to be loss&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Danger&lt;/p&gt;&#xA;&lt;p&gt;Do I?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Do I consider anything and everything as closer to &lt;strong&gt;literally nothing&lt;/strong&gt; when&#xA;compared to knowing Jesus? I don&amp;rsquo;t know, this morning I can&amp;rsquo;t even articulate&#xA;what it means to consider allthings &amp;ldquo;loss&amp;rdquo;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251014103915_3412470b.png&#34; alt=&#34;20251014103915_3412470b.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;What a trivial picture but how often is my mind and spirit stuck between the&#xA;green boxes&amp;hellip; fixated again on my retirement, kid&amp;rsquo;s school costs, the fact&#xA;that ribeye steak is still $20/lbs. I have anxities like anyone else over&#xA;things in the world, and if my net worth increased by $3M today what would my&#xA;response be&amp;hellip; would I consider it a loss when compared to the knowledge of&#xA;Jesus Christ? Or would I experience joy and hope for my earthly future&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Of course Paul&amp;rsquo;s note here isn&amp;rsquo;t that we have to just be angry about good&#xA;things and be sad forever until we&amp;rsquo;re on the other side of a consecrated&#xA;heaven, but I think the point is if my net worth goes up by a lot of down by a&#xA;lot, at the end of the day that&amp;rsquo;s still between the 2 green boxes in my&#xA;diagram&amp;hellip; And my mind needs to focus on Jesus. Not for what he can do for me,&#xA;pursuing him in light of my own fancies makes him out to be a Santa Claus, and&#xA;in light of Paul&amp;rsquo;s words to the Philippian church would miss the point&#xA;entirely. There is nothing for us to pursue for gain - that is the point.&lt;/p&gt;&#xA;&lt;p&gt;The ultimate gift is the knowledge of Christ. This knowledge changs us - by the&#xA;molding hand of Yahweh through the mediating power and authority of Jesus by&#xA;the Spirit indwelling our lives - the knowledge of Christ conforms us into his&#xA;image and likeness. But Jesus is the prize, he is the gain. Knowledge of him&#xA;isn&amp;rsquo;t just knowing his name, it&amp;rsquo;s being known by him through communion and&#xA;meditation. Through daily repentence.&lt;/p&gt;&#xA;&lt;h2 id=&#34;gain&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Gain&lt;/span&gt; &lt;a href=&#34;#gain&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I just found myself downcast over this reflection, knowledge of Christ is&#xA;hard&amp;hellip; he chooses whome he chooses, frees whom he frees. In that freedom is&#xA;where the comparison can be made. Only in the freedom of Jesus can you remove&#xA;yourself from the line between the 2 green boxes in my picture, and even&#xA;consider the glory of the knowledge of Christ. Before new life all we know is&#xA;this:&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251014105124_bee8ebbd.png&#34; alt=&#34;20251014105124_bee8ebbd.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;He chooses&amp;hellip; but then what? For some, loss must follow. In fact, for &lt;strong&gt;all&lt;/strong&gt; loss&#xA;will eventually follow. The degree of that loss is not outside his sovereignty.&#xA;Paul says he &amp;ldquo;suffered the loss of all things&amp;rdquo; - in this experience his&#xA;mind is opened to the reality that was hidden from him, the knowledge that&#xA;there&amp;rsquo;s more but the only thing worth gaining is Jesus.&lt;/p&gt;&#xA;&lt;p&gt;I hope I don&amp;rsquo;t have to suffer the loss of all things in order to more fully&#xA;grasp the gravity of my King. But his will be done on earth as it is in heaven,&#xA;whatever that may mean for my life. And may it be that I gain Christ.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-14 Notes</title>
    <id>https://pype.dev/2025-10-14-notes/</id>
    <updated>2025-10-14T05:26:37Z</updated>
    <published>2025-10-14T05:26:37Z</published>
    <link href="https://pype.dev/2025-10-14-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-13-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-13-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-philippians-3-8]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Affine</title>
    <id>https://pype.dev/affine/</id>
    <updated>2025-10-13T05:16:22Z</updated>
    <published>2025-10-13T05:16:22Z</published>
    <link href="https://pype.dev/affine/" rel="alternate" type="text/html"></link>
    <summary type="text">Mind-mapping webapp at home with native desktop App. Like Notion but with diagram support</summary>
    <content type="html">&lt;p&gt;Mind-mapping webapp at home with native desktop App. Like Notion but with diagram support&lt;/p&gt;&#xA;&lt;h2 id=&#34;work&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Work&lt;/span&gt; &lt;a href=&#34;#work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The mind-mapping capabilities with Affine seem pretty great. There&amp;rsquo;s a few&#xA;quirks I&amp;rsquo;m trying to become aware of, like the edgeless and page modes show you&#xA;the same info, but there isn&amp;rsquo;t one view that makes &lt;em&gt;all&lt;/em&gt; the settings clear&amp;hellip;&#xA;so for example just adding another block on a page doesn&amp;rsquo;t make a new little&#xA;section in edgeless view - it just adds text to the existing blob. But in the&#xA;edgeless view I can click &lt;code&gt;+&lt;/code&gt; off the side of a box and get a new distinct&#xA;bubble that I can type in and such, but then back in teh pages view it just&#xA;looks like I added a block. so the block view on the page doesn&amp;rsquo;t represent the&#xA;other possible relationships whichi s fine, just need to be aware of it&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I have another JFlo vid now&amp;hellip; falling behind&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-13 Notes</title>
    <id>https://pype.dev/2025-10-13-notes/</id>
    <updated>2025-10-13T05:14:36Z</updated>
    <published>2025-10-13T05:14:36Z</published>
    <link href="https://pype.dev/2025-10-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-12-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-12-notes]]&#xA;&#xA;## Now&#xA;&#xA;- updated [[now]]&#xA;- published [[use-jellyfin-tags-for-content-moderation]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Testing Safari Formatting</title>
    <id>https://pype.dev/testing-safari-formatting/</id>
    <updated>2025-10-12T13:51:15Z</updated>
    <published>2025-10-12T13:51:15Z</published>
    <link href="https://pype.dev/testing-safari-formatting/" rel="alternate" type="text/html"></link>
    <summary type="text">**</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;bolded with asterisks&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;dunder&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;single asterisk&lt;/em&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Psalm 119:15</title>
    <id>https://pype.dev/reflection-psalm-119-15/</id>
    <updated>2025-10-12T05:59:30Z</updated>
    <published>2025-10-12T05:59:30Z</published>
    <link href="https://pype.dev/reflection-psalm-119-15/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Psalm 119:15&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 119:15&lt;/p&gt;&#xA;&lt;p&gt;I will meditate on your precepts  and look at your ways.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;meditate&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meditate&lt;/span&gt; &lt;a href=&#34;#meditate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Spurgeon had a good thought here&amp;hellip; It is not the act of eating that actually&#xA;nourishes our bodies, it is digestion&amp;hellip; The same is true for our spiritual&#xA;growth - merely listening to a sermon will not transform your heart and life,&#xA;the Word of God must be digested and meditated upon to work in our members and&#xA;change us.&lt;/p&gt;&#xA;&lt;p&gt;What is it to go to church every week but never spend time musing upon the&#xA;things of God? If you chew your food and spit it out right after the meal what&#xA;good did it do you? Maybe you felt good during the songs, liked the taste of&#xA;the food, heard something interesting from the pastor, commented on the decor&#xA;in the dining room&amp;hellip;. but once you leave, do you remember what you ate? Do you&#xA;talk about it with those who ate with you? Did you practice cooking that&#xA;delicious meal later in the week?&lt;/p&gt;&#xA;&lt;p&gt;So it is with us and the precepts of the Lord.&lt;/p&gt;&#xA;&lt;p&gt;The law of God, in light of Jesus, is not a burden any longer. We are free to&#xA;follow, free to choose good. But knowing good takes time&amp;hellip; a captive isn&amp;rsquo;t&#xA;illuminated to all the ways of the free man who saved him the day his bonds are&#xA;cut, he must study the new civilization he&amp;rsquo;s brought into - out of slavery and&#xA;into freedom, out of death and into life.&lt;/p&gt;&#xA;&lt;p&gt;And in that new life, Jesus - the embodiment of the law and the perfector of&#xA;our faith changes us, molds us, teaches us about good and bad. His word is&#xA;sweet and good.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Philippians 4:8&lt;/p&gt;&#xA;&lt;p&gt;Finally, brothers, whatever things are true, whatever things are honorable, whatever things are right, whatever things are pure, whatever things are pleasing, whatever things are commendable, if there is any excellence of character and if anything praiseworthy, think about these things.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;think-about-these-things&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Think about these things&lt;/span&gt; &lt;a href=&#34;#think-about-these-things&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The instruction from Paul is almost too simple&amp;hellip; &amp;ldquo;just think about these&#xA;things&amp;rdquo;. By God&amp;rsquo;s grace I think a lot&amp;hellip; &lt;strong&gt;a lot&lt;/strong&gt;. My thoughts are often hard&#xA;to take hold of, and I&amp;rsquo;m led rather than leading in what I put my attention&#xA;to, but also by God&amp;rsquo;s grace I fixate on the things of God often. This has not&#xA;always been, and is not always fun or exciting or without pain.&lt;/p&gt;&#xA;&lt;p&gt;But we are all gifted by God in different ways, and afflicted in different ways.&#xA;An affliction he&amp;rsquo;s permitted in my life is often a blessing to me as my mind&#xA;sometimes can&amp;rsquo;t let go of things that are pure and pleasing and commendable.&#xA;The overall thing that&amp;rsquo;s on my mind every day is the freedom Jesus offers to&#xA;choose good. The choice can only be made by the power of his resurrection, not&#xA;by any moral teaching to be gleaned from his sermons as though he&amp;rsquo;s nothing&#xA;more than a philosopher.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;He raised me to life, I didn&amp;rsquo;t attend a lecture.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;But what could be sweeter today in our finite lives, than the ability and&#xA;freedom to participate in bringing heaven to earth?&lt;/p&gt;&#xA;&lt;p&gt;We have no means to do this though without meditating on the Lord&amp;rsquo;s precepts&amp;hellip;&#xA;How else can we know what is pleasing to heaven?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-12 Notes</title>
    <id>https://pype.dev/2025-10-12-notes/</id>
    <updated>2025-10-12T05:58:32Z</updated>
    <published>2025-10-12T05:58:32Z</published>
    <link href="https://pype.dev/2025-10-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-10-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-10-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection---psalm-119-15]]&#xA;&#xA;## Other&#xA;&#xA;- Site rendering poorly on safari&#xA;  - [[testing-safari-formatting]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Original Sin</title>
    <id>https://pype.dev/original-sin/</id>
    <updated>2025-10-10T06:05:37Z</updated>
    <published>2025-10-10T06:05:37Z</published>
    <link href="https://pype.dev/original-sin/" rel="alternate" type="text/html"></link>
    <summary type="text">The doctrine (**) basically answers this question:</summary>
    <content type="html">&lt;p&gt;The doctrine (&lt;strong&gt;but question still for me&lt;/strong&gt;) basically answers this question:&lt;/p&gt;&#xA;&lt;p&gt;Do we sin because we&amp;rsquo;re sinners or are we sinners because we sin?&lt;/p&gt;&#xA;&lt;p&gt;With the answer:&lt;/p&gt;&#xA;&lt;p&gt;You inherit Adam&amp;rsquo;s sinfulness, you are born condemned&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Jude 24</title>
    <id>https://pype.dev/reflection-jude-24/</id>
    <updated>2025-10-10T05:52:12Z</updated>
    <published>2025-10-10T05:52:12Z</published>
    <link href="https://pype.dev/reflection-jude-24/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Jude 24-25&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Jude 24-25&#34;&#xA;&#xA;    24 Now to the one who is able to protect you from stumbling and make you to stand before his glory blameless with exultation, 25 to the only God our Savior, through Jesus Christ our Lord, be glory, majesty, power, and authority before all time and now and for all eternity. Amen.&#xA;&#xA;## make you to stand before his glory blameless with exultation&#xA;&#xA;The ultimate hope of the one called to Jesus - to be made blameless.&#xA;&#xA;Those who are blameless are those who are free. When we are in debt we are&#xA;limited - this feels like a pretty natural thing. I owe money on my house, so&#xA;there&#39;s about $1000/mo that I have to put towards that, no options. Worse than&#xA;a necessity (cause a place to live is a foundational need for humans) is&#xA;unnecessary debt - debt for free choices.&#xA;&#xA;!!! danger &#34;pay as you go&#34;&#xA;&#xA;    Have you seen these pay-as-you-go services? Affirm and Klarna, etc.... You can finance (go into debt) your door dash orders, uber rides, amazon cart all usually with just a few clicks! They want you poor. Jesus doesn&#39;t exactly want you rich with earthly wealth, but we make ourselves spiritually poor in the same manner and it&#39;s that poverty that he saves us from.&#xA;&#xA;So on one hand I&#39;m &#34;born a sinner&#34; (take this as my mortgage) and on the other&#xA;hand I make choices that dishonor my Lord - my heart gets worrisome or filled&#xA;with lust, I abandon my faith for anxiety over my future... In this reflection&#xA;I&#39;m not debating [[original-sin]], for me today it&#39;s moot... I do sin, I will&#xA;sin, and Jesus has saved me yesterday, today, and tomorrow. So the hope is a&#xA;blessed gift from Jesus - that I will be **made to stand before him blameless&#xA;with exultation**.&#xA;&#xA;To stand before the face of God is perhaps the most terrifying thing&#xA;imaginable, or it should be for anyone in a wretched state. Ultimate goodness&#xA;has a way of making anyone **less** very uncomfortable. We even have a taste of&#xA;this truth on earth - consider this example. If you were at the gym or&#xA;somewhere having a conversation with someone who was a pastor and you let a&#xA;curse word fly, often people&#39;s follow-up is to apologize to the pastor... why?&#xA;My personal conviction is that cuss-words are just words, and most pastors&#xA;aren&#39;t offended by them. But we all generally recognize pastors as &#34;good men&#34;&#xA;(not all, mind you - don&#39;t come at me with horror stories of abuse in the Church,&#xA;I know it&#39;s there, I hate it too, and those demons aren&#39;t who I&#39;m talking&#xA;about). So when we are face to face with &#34;goodness&#34; we recognize that some&#xA;behavior isn&#39;t appropriate, if only for a second. So we apologize... But a&#xA;pastor is just a man - to come face to face with the Lord Almighty, the very&#xA;definer of Good, should horrify anyone not perfectly good themselves. A&#xA;scary thing to have anything bad in me present before the Judge of the&#xA;universe.&#xA;&#xA;And yet **to the one who is able to protect you from stumbling and make you to&#xA;stand before his glory blameless with exultation**... Who is Jesus? The one who&#xA;makes me blameless. To be blameless is to be able to come face to face with&#xA;goodness. This is my hope, that in Christ alone for his glory and sake alone,&#xA;am I made new and blameless.&#xA;&#xA;## But hope isn&#39;t only in the future&#xA;&#xA;This ultimate hope isn&#39;t the only hope though, it&#39;s not the only thing Jesus&#xA;does... He saves us from more than just hell, and for more than just an&#xA;ethereal idea of goodness. He saves me to be free to choose goodness today as&#xA;he works in me to align my will with his&#xA;&#xA;!!! note &#34;Hebrews 13:20-21&#34;&#xA;&#xA;    20 Now may the God of peace, who brought up from the dead our Lord Jesus, the great shepherd of the sheep, by the blood of the eternal covenant, 21 equip you with every good thing to do his will, carrying out in us what is pleasing before him through Jesus Christ, to whom be the glory forever. Amen.&#xA;&#xA;Jesus left us a helper, the Holy Spirit. This person is the conduit through&#xA;which Yahweh works in us to **equip {me} with every good thing to do his will,&#xA;carrying out in {me} what is pleasing before him**&#xA;&#xA;Hope is for tomorrow, but it&#39;s also for today. Jesus makes us free **today** as&#xA;new creatures (2 Corinthians 5:17) to align with his will. You can&#39;t choose him&#xA;until he frees you to make the choice, and then in that freedom what else can&#xA;you do? Say &#34;no thanks&#34;... lol. His call is the mighty arm of Yahweh reaching&#xA;into the ocean of chaos and death to raise the corpse of your soul to new life,&#xA;to breath air for the first time, to walk on God&#39;s green earth with new feet&#xA;and new purpose.&#xA;&#xA;Praise the freaking Lord for salvation - for tomorrow and today. May my choices&#xA;today reflect the goodness of my King, and if you&#39;re reading this reflection,&#xA;may God bless you with this blessed hope of salvation.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-10 Notes</title>
    <id>https://pype.dev/2025-10-10-notes/</id>
    <updated>2025-10-10T05:39:36Z</updated>
    <published>2025-10-10T05:39:36Z</published>
    <link href="https://pype.dev/2025-10-10-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-09-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-09-notes]]&#xA;&#xA;## Reflecion&#xA;&#xA;- [[reflection-jude-24]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-09 Notes</title>
    <id>https://pype.dev/2025-10-09-notes/</id>
    <updated>2025-10-09T21:05:08Z</updated>
    <published>2025-10-09T21:05:08Z</published>
    <link href="https://pype.dev/2025-10-09-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-08-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-08-notes]]&#xA;&#xA;## Project&#xA;&#xA;- Played with 2 different patterns for accessing encrypted data from a fastapi app...&#xA;  - started [[should-data-models-be-fat]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-08 Notes</title>
    <id>https://pype.dev/2025-10-08-notes/</id>
    <updated>2025-10-08T10:25:20Z</updated>
    <published>2025-10-08T10:25:20Z</published>
    <link href="https://pype.dev/2025-10-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-07-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-07-notes]]&#xA;&#xA;## TIL&#xA;&#xA;- [[use-jellyfin-tags-for-content-moderation]]&#xA;&#xA;## Pilgrim&#39;s Creek&#xA;&#xA;- Recorded ep 6 of Pilgrim&#39;s Creek with Cameron&#xA;- We discussed Leviathin and how Yahweh&#39;s **word** orders a world the other gods have to fight to maintain&#xA;&#xA;## Life&#xA;&#xA;- BoA and Allegiant account mixups&#xA;  - no confirmation number but internal processes should resolve everything&#xA;  - check back on October 15th for my points in the Allways console&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Use Jellyfin Tags For Content Moderation</title>
    <id>https://pype.dev/use-jellyfin-tags-for-content-moderation/</id>
    <updated>2025-10-08T10:21:01Z</updated>
    <published>2025-10-08T10:21:01Z</published>
    <link href="https://pype.dev/use-jellyfin-tags-for-content-moderation/" rel="alternate" type="text/html"></link>
    <summary type="text">Jellyfin brings in ratings and allows you to set custom ratings for shows, which is nice for things like &#34;block anything worse than TV-14 for my kid&#39;s...</summary>
    <content type="html">&lt;p&gt;Jellyfin brings in ratings and allows you to set custom ratings for shows,&#xA;which is nice for things like &amp;ldquo;block anything worse than TV-14 for my kid&amp;rsquo;s&#xA;account&amp;rdquo;. But what if my firend&amp;rsquo;s kids can watch shows I don&amp;rsquo;t want my kids&#xA;watching? Turns out tags exist and are great!&lt;/p&gt;&#xA;&lt;h2 id=&#34;tag-the-content&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Tag the content&lt;/span&gt; &lt;a href=&#34;#tag-the-content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First is to actually tag the content - in the UI it&amp;rsquo;s simple.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Login with admin&lt;/li&gt;&#xA;&lt;li&gt;Manage Metadata&lt;/li&gt;&#xA;&lt;li&gt;Click the content you want to tag and find the &lt;code&gt;Tags&lt;/code&gt; section&lt;/li&gt;&#xA;&lt;li&gt;Add your tag&amp;hellip; for example &lt;code&gt;blocked:girls&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;filter-on-the-account&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Filter on the account&lt;/span&gt; &lt;a href=&#34;#filter-on-the-account&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Go to &lt;code&gt;Dashboard&lt;/code&gt; -&amp;gt; &lt;code&gt;Users&lt;/code&gt; -&amp;gt; &lt;code&gt;Library Access&lt;/code&gt; -&amp;gt; &lt;code&gt;Parental Control&lt;/code&gt; -&amp;gt; &lt;code&gt;Block items with tags&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Numbers 11:11</title>
    <id>https://pype.dev/reflection-numbers-11-11/</id>
    <updated>2025-10-07T05:07:19Z</updated>
    <published>2025-10-07T05:07:19Z</published>
    <link href="https://pype.dev/reflection-numbers-11-11/" rel="alternate" type="text/html"></link>
    <summary type="text">As if the Lord orchestrated Spurgeon&#39;s meditation to give me a spring board to what I need for the third day in a row...</summary>
    <content type="text">&#xA;As if the Lord orchestrated Spurgeon&#39;s meditation to give me a spring board to what I need for the third day in a row...&#xA;&#xA;- [[reflection-1-kings-19-8]] He showed me that he sustains me unto his own service and glory&#xA;- [[reflection-john-4-14]] He showed me that I&#39;ve been pushing away aspects of his provision&#xA;&#xA;And today I see the trials in my life reveal the status of my faith... Last&#xA;night I got a phone call that I missed a credit card payment, which I thought&#xA;odd since everything is on auto-pay. Well, turns out our checking account got a&#xA;smidge low, low enough that the credit card payment was cancelled... In reality&#xA;this isn&#39;t a huge deal, but it threw me off and continues to this morning. The&#xA;truth is, the only issue is my lack of in-depth understanding of our money&#xA;movement. Our lifestyle and living expenses are well below what we can&#xA;otherwise afford, but in my laziness I have mostly neglected each of our&#xA;accounts individually. No doubt this &#34;trial&#34; is self-imposed but Spurgeon&#39;s&#xA;meditation is snapping me out of the funk that threw me into last night&#xA;&#xA;!!! success &#34;fearless faith&#34;&#xA;&#xA;    If our faith be worth anything, it will stand the test. Gilt is afraid of fire, but gold is not: the paste gem dreads to be touched by the diamond, but the true jewel fears no test&#xA;&#xA;The text is [Numbers 11:11](https://biblehub.com/numbers/11-11.htm)&#xA;&#xA;!!! note &#34;Numbers 11:11&#34;&#xA;&#xA;    And Moses said to Yahweh, “Why have you brought trouble to your servant? Why have I not found favor in your eyes, that the burdens of all these people have been placed on me?&#xA;&#xA;The meditation came from &#34;Why have you brought trouble to your servant?&#34;&#xA;&#xA;??? warning &#34;Meditation vs Homily&#34;&#xA;&#xA;    My reflections over the summer have following the pattern of finding a scripture reference from Morning and Evening and then simply asking God to speak through the words of the text and Spurgeon&#39;s meditation. Historically I would study the text, but in the season of life I am in, where I do have years of studious foundation, I am trying to exercise trust in God to speak to me in ways outside of connecting theological knowledge dots that construct a mosaic of my own choosing. Instead I&#39;m trying to just trust his sovereignty - he brought me to Morning and Evening on October 7, 2025 perhaps so that I could be encouraged in my faith in light of this missed credit card payment event/trial. These reflections are not meant to be educational on the Bible, or even on theology necessarily - I am practicing opening my mind and heart to God speaking to me in ways otherwise uncomfortable but with prudence as I&#39;m not approaching these texts in ignorance. As I put these reflections into the world I want to be clear these are personal meditations, not Bible lessons&#xA;&#xA;## Reflection&#xA;&#xA;Our heavenly Father sends us frequent troubles to try our faith... Are the&#xA;source of those trials my own choices? Other&#39;s choices? Some meta-truth about the&#xA;fallenness of creation? I think probably it&#39;s all of that... In reality, it doesn&#39;t&#xA;matter **where** the trial comes from - directly from the heavens above or&#xA;originating in our own mistakes (such as mine of note above). There is almost&#xA;certainly some significance in the source but **ultimately God&#xA;is sovereign over every one of those possibilities**, and so in another sense,&#xA;it&#39;s almost insignificant what I consider the &#34;source&#34; of a trial. The real&#xA;issue is how I respond to it.&#xA;&#xA;Last night I was filled in my physical chest with a feeling of dread... Seeing&#xA;my checking account low revealed that I have more digging to do to uncover any&#xA;internal reliance on my own systems of security (like money). And the dumb part&#xA;dear reader, is we have other accounts and plenty of money... I am in zero&#xA;financial strain, but even so - seeing the number too low to make one of the&#xA;payments sent my head into a whirlwind. God has also already provided a way out&#xA;of this trial... I have budgeting software that I&#39;ve been using for a long time&#xA;and am just not on top of. He gave me the software I use and the ability to use&#xA;it but it&#39;s my own lack of diligence that I think led to this &#34;trial&#34;. And yet,&#xA;with all that knowledge I find that I&#39;m still troubled... I think I have a&#xA;strong faith and one of my most common prayer is &#34;Lord help my unbelief&#34;, and&#xA;apparently today I need to shout this to the heavens. How **dare** I allow&#xA;dread to overcome me when I claim to know my God provides.&#xA;&#xA;And in that I know he is still sweet to me. I&#39;m a father, and when my kids make&#xA;a mess of themselves my first response (often, though I&#39;m not perfect) to them&#xA;is to kneel and say &#34;hey I&#39;m here, you&#39;re safe&#34;. The trial they make for&#xA;themselves may fill them with the dread I filled myself with last night in&#xA;missing that credit card payment.... If I will approach my kids joyfully in&#xA;their own mess, and if I write all these pages about God&#39;s love for me and his&#xA;people, then ought I not adopt the mindset towrads God that I want my&#xA;daughter&#39;s to have when I come to save them?&#xA;&#xA;God approaches me knowing that missing a credit card payment&#xA;is hardly a bigger deal than my 4 year old spilling milk on the table. But my&#xA;world can become small just like their worlds are small and then my issues can&#xA;feel big. I need my heavenly father to kneel next to me and say &#34;hey I&#39;m here,&#xA;you&#39;re safe&#34;. I say I need it, but actually I mean to say that I have it, and&#xA;because I have it is the only reason I can in-turn treat my daughter&#39;s this way&#xA;when their problems fill their little worlds.&#xA;&#xA;Praise God for trials certainly, for what they reveal and for the Gospel truth&#xA;that by the calling of Jesus our faith can be made pure and complete.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-07 Notes</title>
    <id>https://pype.dev/2025-10-07-notes/</id>
    <updated>2025-10-07T04:43:12Z</updated>
    <published>2025-10-07T04:43:12Z</published>
    <link href="https://pype.dev/2025-10-07-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-06-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-06-notes]]&#xA;&#xA;## Quick Thought&#xA;&#xA;- Something I&#34;ve noticed about myself recently is how naturally try to exploit systems. I don&#39;t mean in a nefarious way or anything, but as I think about [[thinking-in-diagrams]] I&#39;m sort of always drawing out a system in my head thinking about ways to shim information or workflows into parts of that system. I feel like there&#39;s gotta be a name for this pattern of thinking but it was just something that came to my mind last night. For example I&#39;m building a notifications service right now and I have several ideas I think I could build on top of it - so while I&#39;m trying to plan for those future ideas I basically try to construct the base framework layer in such a way that I can take advantage of different entrypoints to the data model as a way to &#34;exploit&#34; the larger system for a more specific use case. MAybe you&#39;d just refer to this as planning ahead, but it feels in my inner-being a little more scrappy than that. As I&#39;ve built &#34;distrbuted&#34; systems over the years (mostly like CI/CD, not large systems of scale to be honest) I notice I&#39;m always planning a spot to &#34;hook into&#34; whatever thing I&#39;m building. I don&#39;t know where this thought might go, perhaps nowhere, but maybe there&#39;s something to systems-design and thinking in this way of being sensitive to exploit paths (though again, not necessarily nefarious, just as a way to add features to a system).&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-numbers-11-11]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - John 4:14</title>
    <id>https://pype.dev/reflection-john-4-14/</id>
    <updated>2025-10-06T06:09:02Z</updated>
    <published>2025-10-06T06:09:02Z</published>
    <link href="https://pype.dev/reflection-john-4-14/" rel="alternate" type="text/html"></link>
    <summary type="text">Today Spurgeon&#39;s &#34;Morning and Evening&#34; was on John 4:14</summary>
    <content type="text">&#xA;Today Spurgeon&#39;s &#34;Morning and Evening&#34; was on John 4:14&#xA;&#xA;!!! note &#34;John 4:14&#34;&#xA;&#xA;    But whoever drinks of this water which I will give to him will never be thirsty for eternity, but the water which I will give to him will become in him a well of water springing up to eternal life.”&#xA;&#xA;Being autistic and growing up in the Church led to a few acute pain points for&#xA;me growing up. A commonplace issue for me was when theological truths were&#xA;expressed in absolute terms but didn&#39;t &#34;feel absolutely true&#34; for me. I made a&#xA;practice of trying to force myself to just &#34;be ok&#34; in light of the truth.&#xA;&#xA;!!! warning &#34;A Memory&#34;&#xA;&#xA;    Marissa was one of my best friends in high school - we spent a lot of time together in church, school, extra-curriculars, etc. She was an ever-present friend to me even when I was difficult to love. I recall multiple times, and one vivid memory for sure where I wasn&#39;t doing well and she inquired. But my response was &#34;I have Jesus, so I have to be OK&#34;. I tried to filter my immediate acute pain through the lens of eternal glory. And yes, Paul muses in this fashion as well, but Paul wasn&#39;t a 16 year old undiagnosed autistic... Was everythign going to be alright in the end when I was 16? Oh ya, but was everything all right then? No... Marissa was a great friend, and Jesus has been sweet to me in this struggle, but nonetheless it would&#39;ve been awesome if someone recognized the pain I was in with the wisdom to address me back then.&#xA;&#xA;Today, one of those truths comes up but it is not painful - **it is so relieving**&#xA;&#xA;## The heart is as insatiable as the grave until Jesus enters it&#xA;&#xA;Yesterday God brought me a truth that he sustains me unto his own service -&#xA;[[reflection-1-kings-19-8]]. And today I&#39;m reminded that on his sustenance I&#xA;will &#34;never thirst&#34;. But of course this isn&#39;t a plain and simple truth. I&#xA;thirst for grace more and more every day, but what I&#39;m finding in the season of&#xA;ending Summer 2025, post/present-multiple years of political awareness, and&#xA;near-hatred for my financial reliance on some other guy&#39;s company that my heart&#xA;**wants** for much right now, but even **in that wanting** this truth rests&#xA;softly on me that Jesus is and ought to be enough. I can be resistant to this&#xA;out of fear of losing a drive to provide more and more for my family.&#xA;Contentedness is certainly a gift from God, but as I&#39;ve been reflecting I see&#xA;fear in my heart... As I&#39;ve rejected the truth that &#34;Jesus is **enough**&#34; my&#xA;heart longs for satisfaction, and when I get in my own way then fear and sin&#xA;creep in.&#xA;&#xA;For me and my reflection right now the competing ideas are building financial&#xA;wealth for myself and my family out of a desire for freedom from a system that&#xA;I don&#39;t like, but also... isn&#39;t Jesus enough? My heart is in the same cunundrum&#xA;as I was in at 16 when asked &#34;are you OK?&#34;. But with wisdom, experince, and&#xA;perspective I guess the tension isn&#39;t uncomfortable anymore (not that I&#39;m&#xA;living in the tension perfectly). There&#39;s work for Jesus to do on my heart, and&#xA;yet I know the work he has done and that proves his faithfulness to me to not&#xA;leave me unfinished.&#xA;&#xA;As he works on me, I have day-to-day choices to make.&#xA;&#xA;1. Whom will I serve?&#xA;2. What will fill my heart?&#xA;3. Will what I fill it with satisfy or like a glass of salt-water at sea leave me worse-off in the end?&#xA;&#xA;Jesus has been good to me in ushering my heart through truths like this where&#xA;there&#39;s an &#34;already but not yet&#34; element to them. Jesus fully satisfies my&#xA;heart, this is true. It&#39;s also true that I&#39;m still a sinner. I don&#39;t feel like&#xA;I always only thirst for more of my Lord - today I thirst for a larger&#xA;retirement account and assets to financially support me for the next 20&#xA;years... is this wrong? I don&#39;t think so, not with appropriate perspective. And&#xA;I&#39;ve been feeling more and more in the last few weeks that Jesus is restoring&#xA;me unto a new season of service and work. I don&#39;t know what it&#39;ll look like and&#xA;accepting a murky future feels scary, but in the light of the Son - by whose&#xA;grace my lungs fill with air as I type - I can walk and work with plans that&#xA;change knowing my faithful God satisfies.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-06 Notes</title>
    <id>https://pype.dev/2025-10-06-notes/</id>
    <updated>2025-10-06T05:43:55Z</updated>
    <published>2025-10-06T05:43:55Z</published>
    <link href="https://pype.dev/2025-10-06-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-05-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-05-notes]]&#xA;&#xA;## Writing&#xA;&#xA;- published [[speakr-for-recording-and-transcribing-at-home]]&#xA;&#xA;## Reflection&#xA;&#xA;- These daily reflections are good, I&#39;d like to organize them and perhaps all my&#xA;  posts a little bit as my blog usage has shifted in recent months and I expect&#xA;  it will in the coming months too. My current folder structure is more similar to tags and the folder is like the &#34;primary&#34; tag... I want to put some thought into this because some posts might need their own templates...&#xA;&#xA;  - for example, &#34;thoughts&#34; has an admonition built in and I think my reflections could use a similar admonition&#xA;&#xA;- [[reflection-john-4-14]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Angel of Yahweh</title>
    <id>https://pype.dev/angel-of-yahweh/</id>
    <updated>2025-10-05T13:57:38Z</updated>
    <published>2025-10-05T13:57:38Z</published>
    <link href="https://pype.dev/angel-of-yahweh/" rel="alternate" type="text/html"></link>
    <summary type="text">The Angel of Yahweh is but isn&#39;t Yahweh, it&#39;s the second person of the Trinity, the visible Yahweh to the invisible Yahweh</summary>
    <content type="html">&lt;p&gt;The Angel of Yahweh is but isn&amp;rsquo;t Yahweh, it&amp;rsquo;s the second person of the Trinity,&#xA;the visible Yahweh to the invisible Yahweh&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - 1 Kings 19:8</title>
    <id>https://pype.dev/reflection-1-kings-19-8/</id>
    <updated>2025-10-05T06:59:52Z</updated>
    <published>2025-10-05T06:59:52Z</published>
    <link href="https://pype.dev/reflection-1-kings-19-8/" rel="alternate" type="text/html"></link>
    <summary type="text">Spurgeon picked 1 Kings 19:8 this morning and his meditation was encouraging at a meta-level. Highlighting to me that we (Christians) in maturity can be...</summary>
    <content type="text">&#xA;Spurgeon picked 1 Kings 19:8 this morning and his meditation was encouraging at&#xA;a meta-level. Highlighting to me that we (Christians) in maturity can be&#xA;refreshed from any passage of scripture. This isn&#39;t because the Bible is magic,&#xA;and I believe it should be studied appropriately in context (heavily) in order to&#xA;solidify foundational pieces of understanding.&#xA;&#xA;But I also cannot deny that I serve a living God who actively works in the&#xA;lives of people - and one way he might do that is to encourage through pastoral&#xA;reflection on Biblical truths that may be **brought to mind** though not&#xA;necessarily instructed in a passage. This is a specific point of Christian life&#xA;that I have been meditating loosely on lately - to be open in my heart to&#xA;finding joy and refreshment in Biblical truths that God may bring to mind even&#xA;though the &#34;origin&#34; of that thought might be an unrelated passage of Scripture.&#xA;This has been the case for a few weeks at this point, and today felt&#xA;significant as I read Spurgeon&#39;s thoughts on being supplied for the sake of the&#xA;Lord&#39;s service.&#xA;&#xA;!!! note &#34;1 Kings 19:8&#34;&#xA;&#xA;    So he got up, ate, drank, and went in the strength of that food forty days and forty nights up to Horeb, the mountain of God.&#xA;&#xA;!!! warning &#34;Quick Context&#34;&#xA;&#xA;    Jezebel is chasing the prophet Elijah who has fled into the wilderness. Elijah&#xA;    fears for his life and asks Yahweh to simply kill him. Yahweh (well, the [[Angel-of-Yahweh]]...&#xA;    but we&#39;ll do that another time) meets him in his distress resting&#xA;    under a tree - he provides food, water, and protection for Elijah to take a&#xA;    nap. He does it again and then tells Elijah to travel to Horeb.&#xA;&#xA;## Reflection&#xA;&#xA;Elijah is faithful to the Lord, and finds himself tired and in need. Yahweh&#xA;meets him, feeds him, and then **gives him more work to do**. This is the point&#xA;of Spurgeon&#39;s writing this morning, that every ounce of work should be poured&#xA;out unto the Lord&#39;s service. Every single thing I do should be laced with songs&#xA;of praise to the King. It&#39;s easy to say &#34;blessed be the Name of the Lord&#34; when&#xA;I am in surplus, and even in trial and want I think my faith has been tested&#xA;and proven to some non-trivial degrees... But what about when I&#39;m tired? Do I&#xA;seek rest as a means to be refreshed **unto his service**? Or do I seek a&#xA;hollow shell of rest, one that in reality isn&#39;t restorative and refreshing, but&#xA;is instead deadening and numbing... I think I find myself actively pushing&#xA;against holy rest out of love for, and slavery to myself. Maybe not quite to&#xA;doom and selfish as to say &#34;myself&#34; only, but out of fear of something else -&#xA;maybe as trivial as failure.&#xA;&#xA;God is bringing to my mind why I haven&#39;t built more, why I&#39;m disconnected from&#xA;work, why I zonk out so much... If I accept refreshment - physical refreshment-&#xA;through a God-given grace then I am duty-bound to use it wisely... But I find&#xA;that I am afraid of the daunting work of doing something well, and day to day I&#xA;find myself hesitant to accept the refreshment out of an abandonment of the&#xA;good that can come through the hard work of doing it well.&#xA;&#xA;God is telling me to eat and drink, to be refreshed... I genuinely believe God&#xA;is speaking to me through 1 King 19:8 - to take the strength he provides via&#xA;the channels I know he provides them, and to wisely-steward the work he&#39;s given&#xA;me to do.&#xA;&#xA;This week I&#39;ve pre-planned to dedicate time away from work to my own project&#xA;and I feel encouraged going into tomorrow almost with foreknowledge of the&#xA;strength God will offer me in the morning&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-05 Notes</title>
    <id>https://pype.dev/2025-10-05-notes/</id>
    <updated>2025-10-05T06:49:29Z</updated>
    <published>2025-10-05T06:49:29Z</published>
    <link href="https://pype.dev/2025-10-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-04-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-04-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-1-kings-19-8]]&#xA;&#xA;## Projects&#xA;&#xA;- thinking about updates to [[quadtask]] to envelop it inside digital harbor&#xA;  more... kind of just to save money on DNS and manage one less domain&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-04 Notes</title>
    <id>https://pype.dev/2025-10-04-notes/</id>
    <updated>2025-10-04T13:42:32Z</updated>
    <published>2025-10-04T13:42:32Z</published>
    <link href="https://pype.dev/2025-10-04-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-02-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-02-notes]]&#xA;&#xA;## Cooking Update&#xA;&#xA;- [[chili-notes]]&#xA;&#xA;## Project Update&#xA;&#xA;- [[sending-sms-with-smtp]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Sending SMS with SMTP</title>
    <id>https://pype.dev/sending-sms-with-smtp/</id>
    <updated>2025-10-04T09:38:58Z</updated>
    <published>2025-10-04T09:38:58Z</published>
    <link href="https://pype.dev/sending-sms-with-smtp/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m cooking something up over here that will include SMS message notifications as a feature and I&#39;ve been doing some reading on different providers...</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;m cooking something up over here that will include SMS message notifications&#xA;as a feature and I&amp;rsquo;ve been doing some reading on different providers&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Many specialize in bulk SMS messaging, like for campaigns and promotions. So&#xA;this pricing model doesn&amp;rsquo;t work for me.&lt;/p&gt;&#xA;&lt;p&gt;The providers that do quick single SMS messages are often $0.005 to $.04 cents&#xA;per message which isn&amp;rsquo;t insanity but I&amp;rsquo;m not exactly backed by anyone&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Well today I learned that you can actually send SMS messages via SMTP! I&#xA;wouldn&amp;rsquo;t bank on total reliability here but for testing and initial roll out of&#xA;what I want I think this will be perfect.&lt;/p&gt;&#xA;&lt;p&gt;And because I&amp;rsquo;m just that kind of guy, here&amp;rsquo;s some code you can &lt;code&gt;uv run smtp2sms.py&lt;/code&gt; and get yourself a handy little text. I&amp;rsquo;m going to build a simpler&#xA;module but you can get a &lt;code&gt;gmail&lt;/code&gt; and &lt;code&gt;gmail app password&lt;/code&gt; within about 10&#xA;minutes. &lt;a href=&#34;https://support.google.com/mail/answer/185833?hl=en&#34;&gt;see here&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;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.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;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;# ]&lt;/span&gt;&#xA;&lt;/span&gt;&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;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;smtplib&lt;/span&gt;&#xA;&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;email.mime.text&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MIMEText&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;SMTP_APP_USER&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;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;SMTP_APP_USER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# me@gmail.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;n&#34;&gt;SMTP_APP_PASSWORD&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;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;SMTP_APP_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;SMTP_SERVER&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;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;SMTP_SERVER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# smtp.gmail.ch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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 haven&amp;#39;t verified all the carrier domains - this was provided by ChatGPT&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;carriers&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;att&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;txt.att.net&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mms.att.net&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmobile&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmomail.net&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmomail.net&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;verizon&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;c1&#34;&gt;# &amp;#34;sms&amp;#34;: &amp;#34;vtext.com&amp;#34;, # not reliable&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;vzwpix.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;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;vzwpix.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;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;sprint&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;messaging.sprintpcs.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;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pm.sprint.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;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;googlefi&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;msg.fi.google.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;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;msg.fi.google.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;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;uscellular&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;email.uscc.net&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mms.uscc.net&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;boost&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;sms.myboostmobile.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;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;myboostmobile.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;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;cricket&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;sms.cricketwireless.net&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mms.cricketwireless.net&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;metropcs&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mymetropcs.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;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mymetropcs.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;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;virgin&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;sms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;vmobl.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;s2&#34;&gt;&amp;#34;mms&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;vmobl.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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;contacts&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;me&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;carrier&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;verizon&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;number&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1234567890&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MIMEText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello from a python script? What?!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;From&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;SMTP_APP_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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;SEND_TO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;me&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Complex for my future use cases - deal with 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;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;To&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;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;contacts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SEND_TO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;number&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;@&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;carriers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contacts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SEND_TO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;carrier&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sms&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;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;smtplib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SMTP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SMTP_SERVER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;587&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;email_handler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&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_handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;starttls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&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_handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;login&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SMTP_APP_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SMTP_APP_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;n&#34;&gt;email_handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sendmail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SMTP_APP_USER&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;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;To&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-02 Notes</title>
    <id>https://pype.dev/2025-10-02-notes/</id>
    <updated>2025-10-02T06:28:55Z</updated>
    <published>2025-10-02T06:28:55Z</published>
    <link href="https://pype.dev/2025-10-02-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-10-01-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-10-01-notes]]&#xA;&#xA;## Random Thoughts&#xA;&#xA;I was thinking it might be nice on my blog to have a couple facelifts:&#xA;&#xA;- my daily notes always have the `yesterday: [...]` text in the description, which ain&#39;t pretty, so thinking about a nicer description or a thoughts-like template for dailyNotes maybe&#xA;- I also was thinking a nice cover image for daily notes would look good on the web, but would largely be yak-shaving... maybe 20 minutes of yak shaving never hurt anyone though&#xA;&#xA;- I had a dope-y moment today... My vibe-coded weather app [[dad-can-i-wear-this]] uses ollama on the backend.... OR DOES IT!&#xA;  - seriously I feel so stupid... I made a model via open-webui to be specific for dad-can-i-wear-this but the python code just calls ollama so depending on my env variable I was either getting the hard-coded responses back or else ollama from a different default model (too much dev workflows to outline here for now)...&#xA;  - point is, I&#39;m using open-webui as my LLM provider, and idk what it is but something had to click into place about where that fits with the doofy things I want to build at home&#xA;  - So [[dad-can-i-wear-this]] got another face lift&#xA;  - I should get this into forgejo and then I can deploy it like [[docker-compose-build-from-git-repo]] just for funsies&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Psalm 84:11</title>
    <id>https://pype.dev/reflection-psalm-84-11/</id>
    <updated>2025-10-01T06:34:25Z</updated>
    <published>2025-10-01T06:34:25Z</published>
    <link href="https://pype.dev/reflection-psalm-84-11/" rel="alternate" type="text/html"></link>
    <summary type="text">Spurgeon&#39;s Morning and Evening today (actually the evening one) is for Psalm 84:11.</summary>
    <content type="html">&lt;p&gt;Spurgeon&amp;rsquo;s Morning and Evening today (actually the evening one) is for &lt;a href=&#34;https://www.biblegateway.com/passage/?search=Psalm+84%3A11&amp;amp;version=ESV&#34;&gt;Psalm 84:11&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 84:11&lt;/p&gt;&#xA;&lt;p&gt;Psalm 84:11 (LEB): 11 Because Yahweh God is a sun and a shield;  Yahweh gives grace and honor.  He does not withhold good from those who walk blamelessly.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;What is it to me to hear and know that &lt;strong&gt;Yahweh gives grace and honor&lt;/strong&gt;? I&amp;rsquo;m asking this because Spurgon&amp;rsquo;s meditation this morning has a particularly striking line in it&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The little conjunction “and” in this verse is a diamond rivet binding the present with the future: grace and glory always go together.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The translation he was using has &amp;ldquo;glory&amp;rdquo;, I quoted &amp;ldquo;honor&amp;rdquo;. The word is &lt;code&gt;כָּבוֹד&lt;/code&gt;&#xA;(kabod) which generally basically means &amp;ldquo;weight&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;I got very distracted this morning unfortunately and therefore my reflection&#xA;will be cut short&amp;hellip; I know meditating on these things opens my day up to go in&#xA;a better direction&amp;hellip; May Yahweh give grace to me today, to live in a glorified&#xA;and honorable way&amp;hellip; one worthy of the gospel of Christ.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Philippians 1:27&lt;/p&gt;&#xA;&lt;p&gt;Whatever happens, conduct yourselves in a manner worthy of the gospel of Christ. Then, whether I come and see you or only hear about you in my absence, I will know that you stand firm in the one Spirit, striving together as one for the faith of the gospel&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-10-01 Notes</title>
    <id>https://pype.dev/2025-10-01-notes/</id>
    <updated>2025-10-01T06:20:26Z</updated>
    <published>2025-10-01T06:20:26Z</published>
    <link href="https://pype.dev/2025-10-01-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-28-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-09-28-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-psalm-84-11]]&#xA;&#xA;## Projects&#xA;&#xA;- A friend hit me up for some help with git because he&#39;s building a game with someone&#xA;  - It was interesting to see how Unreal Engine 5 claimed to have git support, but it&#39;s really just a single branch local repo&#xA;  - ChatGPT also led my buddy so astray it was hilarious.... good sobering reminder that AI will lead you astray if you don&#39;t know what you&#39;re researching, myself included&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-28 Notes</title>
    <id>https://pype.dev/2025-09-28-notes/</id>
    <updated>2025-09-28T09:03:55Z</updated>
    <published>2025-09-28T09:03:55Z</published>
    <link href="https://pype.dev/2025-09-28-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-27-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-09-27-notes]]&#xA;&#xA;## Updates&#xA;&#xA;- [[using-litestream-to-restore-my-database-for-easy-development#Update]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Deuteronomy 33:29</title>
    <id>https://pype.dev/reflection-deuteronomy-33-29/</id>
    <updated>2025-09-27T06:38:42Z</updated>
    <published>2025-09-27T06:38:42Z</published>
    <link href="https://pype.dev/reflection-deuteronomy-33-29/" rel="alternate" type="text/html"></link>
    <summary type="text">Note reflections are not theological study</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;Note reflections are not theological study&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Spurgeon&amp;rsquo;s Morning and Evening today starts with:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Deuteronomy 33:29&lt;/p&gt;&#xA;&lt;p&gt;Deuteronomy 33:29 (LEB): 29 Blessed are you, O Israel.  Who is like you, a people who is saved by Yahweh,  the shield of your help,  and who is the sword of your triumph,  and your enemies, they shall fawn before you,  and you shall tread on their backs.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;What is it to be saved by Yahweh? It is to be blessed&amp;hellip; Material blessings are the cheapest understanding of this idea&amp;hellip;&lt;/p&gt;&#xA;&lt;details class=&#34;admonition danger&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Danger&lt;/summary&gt;&#xA;&lt;p&gt;I feel such a strong need to even say that, in any of my public reflections to try to caveat every statement that someone hostile to my faith might say while reading, or get ahead of a bad idea a less mature Christian might hear me say without enough context&amp;hellip; but ultimately these reflections are not deep study, and when I acknowledge that &amp;rsquo;to be saved by God is to be blessed&amp;rsquo; I don&amp;rsquo;t need to follow it up with &amp;ldquo;but not necessarily with money and possessions&amp;rdquo;&amp;hellip; No, the truth of God flows from the Word and through our lives out of experience with him, and out of that intersection this morning do I proclaim I am blessed and saved by Yahweh&amp;hellip;&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;The blessing is the saving, and the saving is the blessing. Apart from faith in&#xA;Jesus, I see no way to understand this biblical truth appropriately. In&#xA;Yahweh&amp;rsquo;s divine grace he has called me - he is the shield of my help in what he&#xA;has called me to. A simple summary is that he enables me to do the job he&amp;rsquo;s&#xA;given. This is why the saving is the blessing&amp;hellip; Any creature is most happy,&#xA;most safe, most successful when it is operating within the bounds of its design&#xA;and purpose&amp;hellip; An airplane is a fast mode of transportation but if you place it&#xA;on the highway - outside the boundaries of the sky and put in the context it&#xA;wasn&amp;rsquo;t meant to operate it, it won&amp;rsquo;t be a very fast or useful means of getting&#xA;from A to B.&lt;/p&gt;&#xA;&lt;p&gt;Yahweh&amp;rsquo;s saving act of grace invites humans into the context whereby they can&#xA;live according to their design and purpose. I believe the humanitarian efforts&#xA;to unite humanity along common grounds are good-faith efforts doomed to fail&#xA;because to be &lt;strong&gt;truly&lt;/strong&gt; human is to be saved by the One Who Saves&amp;hellip; Yahweh&#xA;saves his people &lt;strong&gt;back to humanity&lt;/strong&gt; (or forward to a new humanity - I&amp;rsquo;m not&#xA;here to debate eschatology with anyone at the moment). In this grace is unity and freedom.&lt;/p&gt;&#xA;&lt;p&gt;My reflections consistently revolve around what is becoming a central theme in&#xA;my theology - the meaning of freedom in Jesus. He saved me back to being truly&#xA;human, and in my humanity I freely choose to live my life in loyalty to the one&#xA;who saves me. I&amp;rsquo;m only free to choose the right thing because he enabled me to.&#xA;In making that choice, whatever it might be, if I choose the godly option it&#xA;comes with the most blessing. That blessing is being conformed into the image&#xA;and likeness of Jesus. Yahweh molds me into what it means to be hunman&amp;hellip;&#xA;Sanctification is the process by which we &amp;ldquo;more naturally&amp;rdquo; choose the godly&#xA;thing. Because as our will is molded to his, our natural choice more often&#xA;aligns with what God wants. The blessing has to be understood ultimately as&#xA;being saved, as restoration&amp;hellip; To see blessing as money or power or success is&#xA;to remain broken, remaining broken is evidence of not being saved. ie. It&amp;rsquo;s&#xA;only by the saving power of Jesus that the blessing of being saved can be&#xA;understood - this is how Paul can say that even blessings on earth are garbage&#xA;compared to the glories of heaven.&lt;/p&gt;&#xA;&lt;p&gt;The picture of the perfect human becomes more clear to me day by day as Jesus&#xA;reveals himself to me, and I pray the freedom in Christ permeates my life&#xA;quickly and deeply so that my free-will choice aligns with God&amp;rsquo;s will for my&#xA;life. In that state is shalom.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-27 Notes</title>
    <id>https://pype.dev/2025-09-27-notes/</id>
    <updated>2025-09-27T06:24:42Z</updated>
    <published>2025-09-27T06:24:42Z</published>
    <link href="https://pype.dev/2025-09-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-24-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-09-24-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-deuteronomy-33-29]]&#xA;&#xA;## Losses&#xA;&#xA;- something about running docker in distrobox is wonky with permissions on volume mounts. it might be how my container build is setting up a non-root user idk, but then it&#39;s intermittent with sqlite corruption failures probably from just cat&#39;ing the file over ssh to my desktop... need to rethink how I&#39;m using litestream&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Wants</title>
    <id>https://pype.dev/wants/</id>
    <updated>2025-09-24T20:58:00Z</updated>
    <published>2025-09-24T20:58:00Z</published>
    <link href="https://pype.dev/wants/" rel="alternate" type="text/html"></link>
    <summary type="text">GL.inet Travel Router with Tailscale support - would be great for GWL trips</summary>
    <content type="html">&lt;h1 id=&#34;wants&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Wants&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://store-us.gl-inet.com/products/beryl-ax-gl-mt3000-pocket-sized-wi-fi-6-wireless-travel-gigabit-router&#34;&gt;GL.inet Travel Router with Tailscale support&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;would be great for GWL trips&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Romans 3:26</title>
    <id>https://pype.dev/reflection-romans-3-26/</id>
    <updated>2025-09-24T05:42:24Z</updated>
    <published>2025-09-24T05:42:24Z</published>
    <link href="https://pype.dev/reflection-romans-3-26/" rel="alternate" type="text/html"></link>
    <summary type="text">From Morning and Evening today, Spurgeon has thoughts on Romans 3:26. I need more context personally, so here&#39;s a newer translation of 3:25-26</summary>
    <content type="text">&#xA;From Morning and Evening today, Spurgeon has thoughts on Romans 3:26. I need&#xA;more context personally, so here&#39;s a newer translation of 3:25-26&#xA;&#xA;!!! note &#34;Romans 3:25-26&#34;&#xA;&#xA;    25﻿God put Jesus forth as the place of mercy, through faithfulness, by&#xA;    means of his blood. He did this to demonstrate his covenant justice, because&#xA;    of the passing over (in divine forbearance) of sins committed beforehand.&#xA;    26﻿This was to demonstrate his covenant justice in the present time: that&#xA;    is, that he himself is in the right, and that he declares to be in the right&#xA;    everyone who trusts in the faithfulness of Jesus.&#xA;&#xA;    Goldingay, J., &amp; Wright, T. (2018). The Bible for Everyone: A New Translation&#xA;    (Ro 3:25–26). SPCK.&#xA;&#xA;??? danger &#34;NPP&#34;&#xA;&#xA;    I&#39;m not here to debate &#34;faith in Jesus&#34; vs &#34;faithfulness of Jesus&#34;... I&#xA;    feel so beyond debating semantics when either way it&#39;s Jesus who gives you&#xA;    faith and chooses in the first place&#xA;&#xA;Spurgeon&#39;s meditation certainly resolves around Penal Substitutionary&#xA;Atonement, a doctrine I have come to mostly reject, but I have plenty of&#xA;common-ground with a conviction of PSA-subscribers and Spurgeon - and that&#39;s&#xA;that we can trust, as chosen people of God, that &#34;there is now **no**&#xA;condemnation for those in Christ Jesus&#34;&#xA;&#xA;Not only is there no condemnation, but on the contrary Jesus **declares to be&#xA;in the right everyone who trusts**.&#xA;&#xA;This is the great confidence of the Christian, and the source of my comfort -&#xA;that even though there is sin in my past and future (and I pray sorrow over&#xA;it), I can trust in God&#39;s unchanging nature. He says in effect &#34;Out of my&#xA;divine grace to call your name from the grave, by the covering of Jesus and the&#xA;work of the cross, you are free. Free from condemnation, free from judgement,&#xA;and today (and everyday) free from the yoke of sin&#34;&#xA;&#xA;Freedom... such an interesting word... It came up recently in my&#xA;[[reflection---galatians-5-1]] as well. I guess as I reflect here, freedom is&#xA;about our behavior and what we do or don&#39;t do. But confidence is the partner of&#xA;freedom. A child who has the freedom on the playground to play with whatever&#xA;they want will sit in the corner if they are afraid of consequences of doing&#xA;something wrong - this would come from a place of not trusting in the freedom&#xA;they&#39;ve been given. The child lacks comfort in their freedom to play with what&#xA;they want unless the faithfulness and goodness of the one who gives the freedom&#xA;is impressed into the child and they can exercise trust in that authority -&#xA;which is manifest in their joyful play on the playground.&#xA;&#xA;So for the Christian this obviously doesn&#39;t mean &#34;free to do whatever I want&#34;,&#xA;the metaphor isn&#39;t perfect (it&#39;s made better by aligning the walls around a&#xA;playground with the boundaries of proper-human living)... Jesus actually gives&#xA;me the freedom to do **his** will over my own, because apart from him I am not&#xA;able to choose anything besides the sinful desires of my own heart.&#xA;&#xA;But this morning, I think the full circle is that when I do choose my own&#xA;desires, when I fall back into the &#34;not yet&#34;, when I sacrifice my divine&#xA;freedom on the altar of my own life for a cheap song, I can **still have&#xA;confidence that my God calls me right by the work of my Lord, Jesus**&#xA;&#xA;This great confidence can never excuse sin, can never justify the choice. But&#xA;the reality is that a good God ordered and created the world, and he chooses&#xA;whomever he chooses... By his graceful choice to adopt me, I have confidence in&#xA;his Name that the sin I run to will not ultimately destroy me - because Jesus&#xA;intervened and gives me new life everyday&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-24 Notes</title>
    <id>https://pype.dev/2025-09-24-notes/</id>
    <updated>2025-09-24T05:27:48Z</updated>
    <published>2025-09-24T05:27:48Z</published>
    <link href="https://pype.dev/2025-09-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-23-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-09-23-notes]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-romans-3-26]]&#xA;&#xA;## Dev&#xA;&#xA;- Finally figured out an issue with my Conform setup was just that `node`&#xA;  wasn&#39;t installed on my dev machine... def an artifact of running nvim in&#xA;  distrobox sometimes and on host other times.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-23 Notes</title>
    <id>https://pype.dev/2025-09-23-notes/</id>
    <updated>2025-09-23T06:55:41Z</updated>
    <published>2025-09-23T06:55:41Z</published>
    <link href="https://pype.dev/2025-09-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-20-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-20-notes ]]&#xA;&#xA;## Today&#xA;&#xA;- started [[wants]]&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Book Review - Dula, Fig, and the Wisdom of Old Sycamore</title>
    <id>https://pype.dev/book-review-dula-fig-and-the-wisdom-of-old-sycamore/</id>
    <updated>2025-09-20T07:04:19Z</updated>
    <published>2025-09-20T07:04:19Z</published>
    <link href="https://pype.dev/book-review-dula-fig-and-the-wisdom-of-old-sycamore/" rel="alternate" type="text/html"></link>
    <summary type="text">Dula, Fig, and the Wisdom of Old Sycamore is a beautifully illustrated and powerful story that gives kids an accessible framework to better understand their...</summary>
    <content type="html">&lt;p&gt;Dula, Fig, and the Wisdom of Old Sycamore is a beautifully illustrated and&#xA;powerful story that gives kids an accessible framework to better understand their&#xA;world - hard things are easier with kindness. Old Sycamore helps young Dula&#xA;understand herself a little better through commentary on her mother&amp;rsquo;s favorite&#xA;story (for which Dula was named). He tends to Dula&amp;rsquo;s frustration in a loving&#xA;way and dismisses her back to her real life with gentleness. Kindness is a&#xA;core-value of our household, and I loved sharing this story with&#xA;my kids. I look forward to reading it many times over the next several years!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/241655315-dula-fig-and-the-wisdom-of-old-sycamore&#34; style=&#34;float: left; padding-right: 20px&#34;&gt;&lt;img border=&#34;0&#34; alt=&#34;Dula, Fig, and the Wisdom of Old Sycamore&#34; src=&#34;https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1757946617l/241655315._SX98_.jpg&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/241655315-dula-fig-and-the-wisdom-of-old-sycamore&#34;&gt;Dula, Fig, and the Wisdom of Old Sycamore&lt;/a&gt; by &lt;a href=&#34;https://www.goodreads.com/author/show/55372642.Elizabeth_Lett&#34;&gt;Elizabeth Lett&lt;/a&gt;&lt;br/&gt;&#xA;My rating: &lt;a href=&#34;https://www.goodreads.com/review/show/7929998013&#34;&gt;5 of 5 stars&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&#xA;Dula, Fig, and the Wisdom of Old Sycamore is a beautifully illustrated and&lt;br /&gt;powerful story that gives kids an accessible framework to better understand their&lt;br /&gt;world - hard things are easier with kindness. Old Sycamore helps young Dula&lt;br /&gt;understand herself a little better through commentary on her mother&amp;rsquo;s favorite&lt;br /&gt;story (for which Dula was named). He tends to Dula&amp;rsquo;s frustration in a loving&lt;br /&gt;way and dismisses her back to her real life with gentleness. Kindness is a&lt;br /&gt;core-value of our household, and I loved sharing this story with&lt;br /&gt;my kids. I look forward to reading it many times over the next several years!&lt;br /&gt;&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;&lt;a href=&#34;https://www.goodreads.com/review/list/120682317-nic-payne&#34;&gt;View all my reviews&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-20 Notes</title>
    <id>https://pype.dev/2025-09-20-notes/</id>
    <updated>2025-09-20T07:03:11Z</updated>
    <published>2025-09-20T07:03:11Z</published>
    <link href="https://pype.dev/2025-09-20-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-19-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-19-notes ]]&#xA;&#xA;## Today&#xA;&#xA;- Liz asked me to write a book review for her a couple months ago and I finally got around to it...&#xA;- [[book-review-dula-fig-and-the-wisdom-of-old-sycamore]]&#xA;&#xA;## Soonish&#xA;&#xA;- I&#39;ve been continuing to think about this but it&#39;s becoming more day-dreamy... I need to get something minimal deployed and start using it myself&#xA;&#xA;## Wins&#xA;&#xA;- Where have my wins gone?&#xA;- Tonight I didn&#39;t even try to be ultra productive, I just did all the dishes (which took a super long 15 minutes) and folded some clothes... It&#39;s kind of crazy what a very boring 30 minutes of work at home can do to set up your next day (or several in the case of laundry)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Galatians 5:1</title>
    <id>https://pype.dev/reflection-galatians-5-1/</id>
    <updated>2025-09-19T06:04:58Z</updated>
    <published>2025-09-19T06:04:58Z</published>
    <link href="https://pype.dev/reflection-galatians-5-1/" rel="alternate" type="text/html"></link>
    <summary type="text">Spurgeon&#39;s &#34;Morning and Evening&#34; today is about the freedom we have in Christ. Freedom is a core concept of Christianity, and one no doubt bastardized and...</summary>
    <content type="html">&lt;p&gt;Spurgeon&amp;rsquo;s &amp;ldquo;Morning and Evening&amp;rdquo; today is about the freedom we have in Christ.&#xA;Freedom is a core concept of Christianity, and one no doubt bastardized and&#xA;warped by modern progressive culture (like Ancient Greek modern, not 2010s modern).&lt;/p&gt;&#xA;&lt;p&gt;Freedom is &lt;strong&gt;not&lt;/strong&gt; the ability to do whatever I want without consequence&amp;hellip;&#xA;it&amp;rsquo;s not even the ability to do whatever I want! What a nightmarish hell the&#xA;world would be if each one of us could (and especially did) act on every desire&#xA;that comes into our hearts&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isle of Dreams&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s like the Island of Dreams in CS Lewis&amp;rsquo; Voyage of the Dawn Treader&amp;hellip; The&#xA;seaman are all excited about their &amp;ldquo;dreams&amp;rdquo; (long lost lovers, money, etc) but&#xA;the man they rescue makes it clear to them it&amp;rsquo;s not the place where daydreams&#xA;come true&amp;hellip; but dreams&amp;hellip;. think of the scary dreams you&amp;rsquo;ve had, or you&amp;rsquo;ve&#xA;heard your kids have&amp;hellip; With that context you probably don&amp;rsquo;t want to go to the&#xA;Island of Dreams&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250919112304_e78b23fa.png&#34; alt=&#34;20250919112304_e78b23fa.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;So, this childish anti-view of &amp;ldquo;freedom&amp;rdquo; should&#xA;immediately be rejected by any well-reasoned adult, let alone Christian&amp;hellip; In&#xA;this view, self-restraint is the antithesis of freedom, and not that I have&#xA;some well-endowed argument against that - only I&amp;rsquo;d say it feels ridiculous that&#xA;these 2 ideas would be at odds. It&amp;rsquo;s simply unreasonable to me. But perhaps my&#xA;conviction on that unreasonableness stems from an understanding that the&#xA;freedom Jesus offers is so much better than whatever pleases my fleeting&#xA;fancies.&lt;/p&gt;&#xA;&lt;p&gt;And by that same token, freedom is not our daydreams&amp;hellip; we were all created&#xA;with purpose - humans made in the image of God. Accepting and understanding&#xA;that truth absolutely ought to affect how we live. I am not a &amp;ldquo;good person&amp;rdquo; by&#xA;default - I have the &lt;strong&gt;freedom&lt;/strong&gt; to act &amp;ldquo;good&amp;rdquo; because Jesus saves me, and&#xA;calls me to a higher standard of living than I would call myself to.&lt;/p&gt;&#xA;&lt;p&gt;And that&amp;rsquo;s the meditation today - bourne out of the words in Galatians 5:1&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Galatians 5:1&lt;/p&gt;&#xA;&lt;p&gt;For freedom Christ has set us free. Stand firm, therefore, and do not be subject again to a yoke of slavery.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;If I were to submit myself to my own desires, I&amp;rsquo;d end up a slave to them. I&amp;rsquo;ve&#xA;felt this reality in many ways over my life, and Jesus has been good to me. He&#xA;frees me from myself, he freely offers himself to me (aye, his message goes out&#xA;to all the world, and the ones who are called answer). In that freedom I&amp;rsquo;m&#xA;faced with a choice, the same choice as the Garden&amp;hellip; Do what I want (eat of&#xA;the tree of knowledge of good and bad) or trust what God says is good, is good,&#xA;and make the choice by Jesus&amp;rsquo; grace to &lt;strong&gt;not&lt;/strong&gt; eat of the tree of knowledge of&#xA;good and bad, but instead of the tree of life, presently experienced as&#xA;communion with the Holy Spirit and fellowship with my King Jesus.&lt;/p&gt;&#xA;&lt;p&gt;For freedom Christ has set me free, may I walk in his freedom today.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-19 Notes</title>
    <id>https://pype.dev/2025-09-19-notes/</id>
    <updated>2025-09-19T06:00:41Z</updated>
    <published>2025-09-19T06:00:41Z</published>
    <link href="https://pype.dev/2025-09-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-18-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-18-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection---galatians-5-1]]&#xA;&#xA;## Projects&#xA;&#xA;- Been thinking a lot about soonish, it feels like my thoughts are 3 dimensional but I can only clearly see 2 dimensions at a time... &#xA;  - documentation efforts have been a good exercise in a lot of things including developing skill working alongside AI&#xA;  - basic desire is Notifications as a Service but can be built into anything from event invites to IT tickets&#xA;&#xA;- revamped [[dad-can-i-wear-this]] for a version 2&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Galatians 5:24-25</title>
    <id>https://pype.dev/reflection-galatians-5-24-25/</id>
    <updated>2025-09-18T05:39:12Z</updated>
    <published>2025-09-18T05:39:12Z</published>
    <link href="https://pype.dev/reflection-galatians-5-24-25/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Galatians 5:24-25&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Galatians 5:24-25&#34;&#xA;&#xA;    24 Now those ⌊who belong to Christ⌋  have crucified the flesh together with its feelings and its desires.&#xA;    25 If we live by the Spirit, we must also follow the Spirit. 26 We must not become conceited, provoking one another, envying one another.&#xA;&#xA;Spurgeon&#39;s &#34;Morning and Evening&#34; is a mediation on living in and following the Spirit. He says this:&#xA;&#xA;&gt;  You will never find true faith unattended by true godliness; on the other&#xA;&gt;  hand, you will never discover a truly holy life which has not for its root a&#xA;&gt;  living faith upon the righteousness of Christ&#xA;&#xA;`godliness` is the &#34;following the Spirit&#34; in our daily lives - it is living&#xA;&#34;like god&#34;. What then is &#34;true faith&#34;? I think I can take Spurgeon to be saying&#xA;that upon internal meditation do I find my faith to be secure and genuine.&#xA;&#34;true faith&#34; is between me and the Lord.&#xA;&#xA;The meditation this morning though... &#34;If I live by the Spirit, I must also&#xA;follow the Spirit&#34; is once again heavy on my heart as I wrestled through&#xA;[[reflecting-on-romans-7-7-13]] a few weeks ago - the reality that I daily&#xA;choose things contrary to my faith. &#xA;&#xA;I think Paul is saying &#34;because you have crucified the flesh&#34; as the parallel&#xA;point to &#34;we must also follow the Spirit&#34;. He&#39;s saying &#34;if you say you&#39;ve&#xA;crucified the flesh, show your faith by following as well&#34; - it&#39;s James&#39; &#34;show&#xA;me your faith by what you do&#34;&#xA;&#xA;So who am I today? Whom will I serve?&#xA;&#xA;These morning meditations are like my 100x push-ups a day... the days I do&#xA;them just seem marginally better, and in a season of consistency the value&#xA;seems to compound... I thank Jesus for the conviction in the first place to&#xA;strive for holiness, and for the ~~strength~~ faith to say no to the flesh, but&#xA;yes to the Spirit.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-18 Notes</title>
    <id>https://pype.dev/2025-09-18-notes/</id>
    <updated>2025-09-18T05:19:56Z</updated>
    <published>2025-09-18T05:19:56Z</published>
    <link href="https://pype.dev/2025-09-18-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-15-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-15-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-galatians-524-25]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>erets</title>
    <id>https://pype.dev/erets/</id>
    <updated>2025-09-15T06:11:46Z</updated>
    <published>2025-09-15T06:11:46Z</published>
    <link href="https://pype.dev/erets/" rel="alternate" type="text/html"></link>
    <summary type="text">Hebrew word for &#34;land&#34;, biblically can refer to:</summary>
    <content type="html">&lt;p&gt;Hebrew word for &amp;ldquo;land&amp;rdquo;, biblically can refer to:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the dry land&lt;/li&gt;&#xA;&lt;li&gt;the cosmic earthly realm that parallels the heavenly realm&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;It does not mean &amp;ldquo;globe&amp;rdquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection (Short) - Erets</title>
    <id>https://pype.dev/reflection-short-erets/</id>
    <updated>2025-09-15T06:05:41Z</updated>
    <published>2025-09-15T06:05:41Z</published>
    <link href="https://pype.dev/reflection-short-erets/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been really buggin out about a project I&#39;m working on and nearly forgetting to spend meaningful time during the day/mornings on reflection. Thankfully a...</summary>
    <content type="text">&#xA;I&#39;ve been really buggin out about a project I&#39;m working on and nearly&#xA;forgetting to spend meaningful time during the day/mornings on reflection.&#xA;Thankfully a 60 second Bible Project video offered me a short framework this&#xA;morning to think about the land God created...&#xA;&#xA;The video is a minute long, you can find it [on the Bible Project website](https://bibleproject.com/videos/vocab-insight-erets-land/)&#xA;&#xA;When I think about Bible stuff, especially anything related to Old Testament or&#xA;Creation (which is actually literally everything) I have a hard time stopping&#xA;my mind from jumping to being critical of my brothers and sisters in Christ who&#xA;adopt naieve or mainstream ideas about my Ancient Faith and King.&#xA;&#xA;One of the things my spiritual family largely misses is the cosmic nature of&#xA;the creation account.... In this case of [[erets]], which shows up on page 1 of&#xA;the Bible, the Western mind reads &#34;In the beginning God created the heavens and&#xA;the earth...&#34; and we go &#34;oh, the globe, the planet, God made the planet,&#xA;obviously&#34;&#xA;&#xA;And the thing is... ya, he did... but that&#39;s not what the creation story gets&#xA;at, and what it does get at is what I&#39;m reflecting on...&#xA;&#xA;God put me on the erets, out of the dust of the erets he formed me, and you...&#xA;This is more than God drawing planet earth on the canvas of our universe.&#xA;Yahweh brought order to chaos, he created the heavens (literally &#34;the skies&#34;)&#xA;and filled it and he also created the earth and filled it. There is a parallel&#xA;nature to these realms - the physical earthly realm of erets and the spiritual&#xA;heavenly realm of the skies. These words carry ancient meaning in the creation&#xA;context, they are poetic and visual in nature, rather than explanatory and&#xA;physical.&#xA;&#xA;Recognizing that the realm I&#39;m in, God ordered and put me in, should bring&#xA;meaning to everything I do. My King does say to pray &#34;\[God&#39;s\] will be done on&#xA;earth as it is in heaven&#34;. I am supposed to be one of the ones &#34;bringing heaven&#xA;to earth&#34; - carrying on the ministry of Jesus in the ways he commanded. Paul&#xA;commands to &#34;do everything with gratitude&#34; [philippians 4:6](https://biblehub.com/philippians/4-6.htm)&#xA;in my heart towards Jesus. Jesus said plainly &#34;those who love me obey me&#34; [](https://www.biblegateway.com/verse/en/John%2014%3A21)&#xA;&#xA;But if I misunderstand my place in the cosmos, as a representative of the one&#xA;True God to the physical realm he created that exists in a planar intersection&#xA;with the heavenly realm, if I misunderstand this I will misrepresent my God...&#xA;and I fear I have been. I&#39;ve been consumed with things inside my life lately,&#xA;and perhaps that&#39;s moderately ok... I don&#39;t think that the present trials of my&#xA;life are drawing me away from Jesus at all, but I&#39;d be an idiot to not&#xA;recognize that there are moments in my day where I feel like nothing matters,&#xA;where I walk around on God&#39;s erets somewhat aimlessly due to my own&#xA;self-loathing and consumption. These are moments where my flesh and sin are&#xA;strong, and the trials is revealing it. The meditation on my purpose in God&#39;s&#xA;creation, as a member of the realm of the ordered erets, is calming me in this&#xA;moment.&#xA;&#xA;God&#39;s purpose for anyone is this:&#xA;&#xA;!!! note &#34;1 Thess. 5:18&#34;&#xA;&#xA;    give thanks in everything; for this is God’s will for you in Christ Jesus.&#xA;&#xA;At any moment, anyone one of us could be taken off earth - whether by old age&#xA;like my Grandma, or by violent hatred like [Charlie Kirk](). God&#39;s will (one of&#xA;the wills anyways) for anyone is the same, as a member of ordered creation&#xA;called by Jesus it&#39;s my duty to live this out... and by God&#39;s grace I know&#xA;it&#39;s possible by his intervention - to give thanks in everything.&#xA;&#xA;The honest truth is I&#39;m not really sure what to do besides take a breath every&#xA;minute, acknowledge and preach the truth that Jesus is the author and perfector&#xA;of my life and faith, and to pray this truth calms my heart in the midst of the&#xA;turmoil I&#39;ve been feeling lately.&#xA;&#xA;Yahweh orders creation, he put all of us on the erets, and the message of his&#xA;grace goes out to all people.... who will answer and bring God&#39;s will to the&#xA;earth? Thankfully it&#39;s not my job to know. My job is simple - to give thanks and to&#xA;love the Lord my God with all of me.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-15 Notes</title>
    <id>https://pype.dev/2025-09-15-notes/</id>
    <updated>2025-09-15T06:04:13Z</updated>
    <published>2025-09-15T06:04:13Z</published>
    <link href="https://pype.dev/2025-09-15-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-13-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-13-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-short-erets]]&#xA;&#xA;## Projects&#xA;&#xA;- Continuing work on [[soonish]]&#xA;&#xA;## Thoughts&#xA;&#xA;- WorkOS for auth for B2B for soonish&#xA;- remind.notifiq.net/&lt;url&gt; as a usecase for soonish&#xA;  - configured reading times, so just get reminded at the next one&#xA;  - phase 2 of this idea might be grabbing the content of the url and sending the notification with some of that content&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-13 Notes</title>
    <id>https://pype.dev/2025-09-13-notes/</id>
    <updated>2025-09-13T06:00:27Z</updated>
    <published>2025-09-13T06:00:27Z</published>
    <link href="https://pype.dev/2025-09-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-11-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-11-notes ]]&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Docker Compose Build From Git Repo</title>
    <id>https://pype.dev/docker-compose-build-from-git-repo/</id>
    <updated>2025-09-12T08:45:20Z</updated>
    <published>2025-09-12T08:45:20Z</published>
    <link href="https://pype.dev/docker-compose-build-from-git-repo/" rel="alternate" type="text/html"></link>
    <summary type="text">You can reference a git repo in compose&#39;s &#34;build&#34; argument for a service as of this PR</summary>
    <content type="html">&lt;p&gt;You can reference a git repo in compose&amp;rsquo;s &amp;ldquo;build&amp;rdquo; argument for a service as of &lt;a href=&#34;https://github.com/docker/compose/pull/2430&#34;&gt;this PR&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - They Can Come For Anyone</title>
    <id>https://pype.dev/reflection-they-can-come-for-anyone/</id>
    <updated>2025-09-11T05:34:00Z</updated>
    <published>2025-09-11T05:34:00Z</published>
    <link href="https://pype.dev/reflection-they-can-come-for-anyone/" rel="alternate" type="text/html"></link>
    <summary type="text">At some point in the recent history of my country, political tensions began increasing exponentially between our 2 parties, and I had hardly cared until...</summary>
    <content type="html">&lt;p&gt;At some point in the recent history of my country, political tensions began&#xA;increasing exponentially between our 2 parties, and I had hardly cared until&#xA;right around 2021/2022. There were policies and patterns emerging in the public&#xA;sphere that were troubling to me, and I&amp;rsquo;ve sense developed some hard opinions.&lt;/p&gt;&#xA;&lt;p&gt;A man was just murdered for holding opinions openly that are not much different&#xA;than mine - at least as far as the innate divisive nature of the opinions&amp;hellip; I&#xA;want my country to be safe, I proudly fly the American flag, Jesus saves me&#xA;every day and although America isn&amp;rsquo;t a Christian nation I feel blessed that God&#xA;put me in this country, I value open-debate, and I&amp;rsquo;ve just so happen to come to&#xA;hold fairly right-leaning social positions&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;and they killed this guy for it&lt;/p&gt;&#xA;&lt;p&gt;Charlie Kirk was murdered for daring to challenge college kids around the country to think critically about what narrative they are force-fed through media and school&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The political landscape of America isn&amp;rsquo;t Left vs Right&amp;hellip; I mean it is, and in&#xA;that dichotomy unfortunately I am on the Right, but this isn&amp;rsquo;t Democratic&#xA;values vs Republican values, and I&amp;rsquo;m not a Republican and most Leftists aren&amp;rsquo;t&#xA;actually Democrats&amp;hellip; these &amp;ldquo;sides&amp;rdquo; have both been co-opted by wicked&#xA;people&amp;hellip; In what I&amp;rsquo;ve learned, I would&amp;rsquo;ve said Dems had it right up until the&#xA;mid 2000s, and idk what happened but since the 10s-onward the media and&#xA;honestly a majority of democratic elected-officials are the ones CRANKING UP&#xA;THE VIOLENT RHETORIC. Conservatives are likened to Hitler in the media, Charlie&#xA;himself was called a faccist (what a retarded thing to say&amp;hellip; accuse the guy&#xA;who built his career on good-faith debate of being a police-state supporter)&#xA;and people with national platforms are daily accusing those on the Right of&#xA;being hateful simply for wanting to have debate, for not bowing down to&#xA;identity politics and non-arguments.&lt;/p&gt;&#xA;&lt;p&gt;Charlie is a martyr for freedom, and a victim of the violent rhetoric the media&#xA;has been pushing against the Right ever since Donald Trump became the boogy-man.&lt;/p&gt;&#xA;&lt;p&gt;I value my privacy and I believe in what I believe in&amp;hellip; I&amp;rsquo;m not ashamed to&#xA;publically be known for any conviction I hold, but if they killed Charlie for&#xA;anything he belived, &lt;strong&gt;they&amp;rsquo;d kill me too&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;And who is &amp;ldquo;they&amp;rdquo;? Charlie was shot 16 hours ago, I have seen no evidence that&#xA;the shooter was a democrat or even on the Left&amp;hellip; but what I have seen on&#xA;social media is proud Leftists celebrating the killing of a young dad, husband,&#xA;Christian, and activist for publically encouraging people to debate and to bow&#xA;to the better argument, not the stronger more violent opponent&amp;hellip;. I don&amp;rsquo;t know&#xA;anything about the man who pulled the trigger, but I do know that a disturbing&#xA;number of people are comfortable putting their face behind a campaign of&#xA;assassination and fear. They&amp;rsquo;re comfortable with it because it&amp;rsquo;s socially&#xA;aacceptable to call for violence against &lt;strong&gt;some groups&lt;/strong&gt; of people, primarily&#xA;the one group that is constantly villianized in absolute ignorance - White&#xA;Christian Men&amp;hellip; If you don&amp;rsquo;t agree with this then I would say you are blinded&amp;hellip;&#xA;Christianity is openly mocked, and you wouldn&amp;rsquo;t notice if you wouldn&amp;rsquo;t&#xA;notice&amp;hellip; whereas other religions are so openly protected it&amp;rsquo;s become comical to me.&#xA;When&amp;rsquo;s the last time you felt comfortable making a joke about Islam or Judaism&#xA;compared to Christianity? Even if you wouldn&amp;rsquo;t joke about any of them, you know&#xA;you&amp;rsquo;d be safe to criticize one publically, and the other 2 you&amp;rsquo;d face&#xA;consequences for. And these are the things these lunatics celebrate&amp;hellip; they&#xA;love that another White Christian Man was removed from God&amp;rsquo;s green earth&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;These poor people&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not complaining necessarily about Christianity&amp;rsquo;s lack of priviliege in the public sphere and my heart breaks for people who hate - period&amp;hellip;. to hate someone for a difference of worldview or opinion to the point of openly celebrating their death is one of the saddest and most sickening realities I can think of.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;What can I do after this? Charlie was just a regular guy. It&amp;rsquo;s one thing to&#xA;have the attempted-assassination of Trump sweapt under the rug, or to brush it&#xA;off as a targeted attack against a powerful man. But Charlie wasn&amp;rsquo;t a&#xA;politician&amp;hellip; he was just a guy with a job, who went around having&#xA;conversations. The violence against the Right is stochastic in nature, but&#xA;increasingly present as public figures continue to use hitler and nazi-fueled&#xA;language against people they disagree with&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Paired so closely in time with the news of &lt;a href=&#34;https://www.foxnews.com/us/victim-random-train-stabbing-embraced-american-dream-could-have-taken-world-storm-neighbors-say&#34;&gt;The slaying of Iryna&#xA;Zarutska&lt;/a&gt;&#xA;who was attacked randomly by a man who, all unconfirmed allegations aside, had&#xA;been arrested 14 times for violent crimes. And yet, in my country of freedom, a&#xA;violent criminal was free to murder a refugee fleeing a war-torn region&amp;hellip; (if&#xA;you watched any videos you&amp;rsquo;ll see 4 or 5 people witness the attack, and then do&#xA;nothing as Iryna sorrowfully dies, alone and unaided in a foreign country&amp;hellip;&#xA;the victim of a monster)&lt;/p&gt;&#xA;&lt;p&gt;Charlie commented on this event, I have the same feelings about the climax I&#xA;thought it led to after years of under-reported race-fueld violence against&#xA;white people, and he was called a racist just for noticing patterns&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;If they shot him for saying something about any of his convictions, for&#xA;believing he should be allowed to raise his family in safety, to attend church,&#xA;and to openly debate for the sake of the better idea - they&amp;rsquo;d shoot me&#xA;to&amp;hellip; and celebrate.&lt;/p&gt;&#xA;&lt;p&gt;I take as much comfort as possible, however minimal, knowing that Charlie loved&#xA;Jesus, and that his family has the hope of resurrection in the name of Jesus to see&#xA;him again&amp;hellip; But 2 kids lost their dad, and a young woman lost her husband,&#xA;lunatics celebrate, today is just another day, and if someone would come for a&#xA;normal guy like Charlie, they&amp;rsquo;d come for you too.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-11 Notes</title>
    <id>https://pype.dev/2025-09-11-notes/</id>
    <updated>2025-09-11T05:33:26Z</updated>
    <published>2025-09-11T05:33:26Z</published>
    <link href="https://pype.dev/2025-09-11-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-10-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-10-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-they-can-come-for-anyone]]&#xA;&#xA;## Soonish&#xA;&#xA;- started mapping out models&#xA;- new name potential | notifiq&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-10 Notes</title>
    <id>https://pype.dev/2025-09-10-notes/</id>
    <updated>2025-09-10T09:24:28Z</updated>
    <published>2025-09-10T09:24:28Z</published>
    <link href="https://pype.dev/2025-09-10-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-09-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-09-notes ]]&#xA;&#xA;## Projects&#xA;&#xA;- we&#39;re going to start real work on this event notifications idea&#xA;  - [[event-details-updates-via-notifications-as-a-service]]&#xA;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>That Guy Can Do Anything</title>
    <id>https://pype.dev/that-guy-can-do-anything/</id>
    <updated>2025-09-10T09:11:20Z</updated>
    <published>2025-09-10T09:11:20Z</published>
    <link href="https://pype.dev/that-guy-can-do-anything/" rel="alternate" type="text/html"></link>
    <summary type="text">&#34;That guy can do anything!&#34; sounds nice, right? What if it didn&#39;t matter... what if you draw corporate cat-calls for your sexy skills, excel every year,...</summary>
    <content type="html">&lt;p&gt;&amp;ldquo;That guy can do anything!&amp;rdquo; sounds nice, right? What if it didn&amp;rsquo;t matter&amp;hellip; what if you draw corporate cat-calls for your sexy skills, excel every year, receieve accolades but you were told to change everything for no reason or else be fired&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-09 Notes</title>
    <id>https://pype.dev/2025-09-09-notes/</id>
    <updated>2025-09-09T05:58:08Z</updated>
    <published>2025-09-09T05:58:08Z</published>
    <link href="https://pype.dev/2025-09-09-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-08-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-08-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;&#xA;&#xA;## Projects&#xA;&#xA;- Came across the idea of a [micro-saas](https://www.msthgn.com/articles/the-micro-saas-revolution-from-giants-to-solopreneurs) today... gives me quite a bit of hope for [[homelab-as-a-service]] ideas&#xA;&#xA;## Writing&#xA;&#xA;- [[that-guy-can-do-anything]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 uv script management</title>
    <id>https://pype.dev/thoughts-831/</id>
    <updated>2025-09-08T11:25:33Z</updated>
    <published>2025-09-08T11:25:33Z</published>
    <link href="https://pype.dev/thoughts-831/" rel="alternate" type="text/html"></link>
    <summary type="text">Dang Waylon! Love these few lines... uv is great, been using it for environment and project requirements management bu</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://waylonwalker.com/uv-script-management/##sed+-i+&#39;1i+#!/usr/bin/env+-S+uv+run+--script&#39;+up&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://waylonwalker.com/uv-script-management/##sed+-i+&#39;1i+#!/usr/bin/env+-S+uv+run+--script&#39;+up&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - uv script management&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://waylonwalker.com/uv-script-management/##sed+-i+&#39;1i+#!/usr/bin/env+-S+uv+run+--script&#39;+up&#34;&gt;uv script management&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Dang Waylon! Love these few lines... `uv` is great, been using it for environment and project requirements management but I didn&#39;t realize it was this easy to setup a pep 723 compliant script!&#xA;&#xA;Love this `sed -i &#39;1i #!/usr/bin/env -S uv run --script&#39;` little gem too - I typically do `uv run script.py` so I&#39;ll see about making this a simple zsh alias for faster iteration on python scripts... I often have AI write quick bash scripts to accomplish things, but it&#39;s quite a bit harder for me to read than python, and with the power `uv` is bringing to the python ecosystem, maybe it&#39;s fine to just be a little higher in the programming stack for script-kitty stuff&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Zsh alias for uv scripts</title>
    <id>https://pype.dev/zsh-alias-for-uv-scripts/</id>
    <updated>2025-09-08T06:33:13Z</updated>
    <published>2025-09-08T06:33:13Z</published>
    <link href="https://pype.dev/zsh-alias-for-uv-scripts/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s apparently advantageous for uv to have a specific shebang set that doesn&#39;t add, no problem, we can have a zsh alias for it</summary>
    <content type="html">&lt;p&gt;It&amp;rsquo;s apparently advantageous for uv to have a specific shebang set that &lt;code&gt;uv init&lt;/code&gt; doesn&amp;rsquo;t add, no problem, we can have a zsh alias for 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;nb&#34;&gt;alias&lt;/span&gt; add-shebang&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;f(){ &#xA;&lt;/span&gt;&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;  if [[ ! -s $1 ]]; 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;s1&#34;&gt;    echo &amp;#34;#!/usr/bin/env -S uv run --script&amp;#34; &amp;gt; &amp;#34;$1&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;  elif head -n1 &amp;#34;$1&amp;#34; | grep -q &amp;#34;^#!&amp;#34;; 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;s1&#34;&gt;    echo &amp;#34;Shebang already present in $1&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;  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;s1&#34;&gt;    sed -i &amp;#34;1i #!/usr/bin/env -S uv run --script&amp;#34; &amp;#34;$1&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;  fi&#xA;&lt;/span&gt;&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;}; f&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then if you have a python script from &lt;code&gt;uv init --script&lt;/code&gt; you can &lt;code&gt;add-shebang myscript.py&lt;/code&gt; to add the shebang.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-08 Notes</title>
    <id>https://pype.dev/2025-09-08-notes/</id>
    <updated>2025-09-08T05:42:27Z</updated>
    <published>2025-09-08T05:42:27Z</published>
    <link href="https://pype.dev/2025-09-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-06-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-06-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- Discussed with Andrew the discomfort I felt this morning reading Spurgeon&#39;s&#xA;reflection on Hosea 14:8&#xA;  - The basic takeaways from that are commentary and reflection are different,&#xA;  and reflection isn&#39;t expository teaching&#xA;  - I have a significant sensitivity to putting thoughts on the Bible out there&#xA;  for people to misinterpret, I blog here but hopefully no one comes to any of&#xA;  my posts with &#34;Reflection&#34; in the title and expects theological education...&#xA;  - So this is a good thing to think about, or just be aware of in future&#xA;  conversations - &#34;devotional&#34; is a very common word in Christian circles but&#xA;  this morning it became clear that I have had a slightly different definition&#xA;  than perhaps most of my Christian counterparts (not that my understanding was&#xA;  correct - in fact it became clear this morning that it isn&#39;t)&#xA;  - Overall though, by God&#39;s grace, his Word does speak to people differently,&#xA;  and although we should exercise caution with any application, I cannot deny&#xA;  that God speaks to others in ways that he doesn&#39;t speak to me, and praise God&#xA;  he loves us enough to reach out in ways appropriate for each individual&#xA;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Engineering excellence starts on edge</title>
    <id>https://pype.dev/thoughts-830/</id>
    <updated>2025-09-06T11:27:07Z</updated>
    <published>2025-09-06T11:27:07Z</published>
    <link href="https://pype.dev/thoughts-830/" rel="alternate" type="text/html"></link>
    <summary type="text">I have become a huge DHH fan, maybe that means I&#39;m just a basic bish but as I&#39;ve become aware of who he has I haven&#39;t ye</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://world.hey.com/dhh/engineering-excellence-starts-on-edge-c36e4c59&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://world.hey.com/dhh/engineering-excellence-starts-on-edge-c36e4c59&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Engineering excellence starts on edge&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://world.hey.com/dhh/engineering-excellence-starts-on-edge-c36e4c59&#34;&gt;Engineering excellence starts on edge&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I have become a huge DHH fan, maybe that means I&#39;m just a basic bish but as I&#39;ve become aware of who he has I haven&#39;t yet disagreed with much that he has to say... And fortunately or unfortuntaely that remanins true with this post about getting involved &#34;at the edge&#34;. &#xA;&#xA;I feel like I bounce between &#34;give me bleeding edge&#34; and &#34;give me unshakable stability&#34; on the daily, and there&#39;s probably a time and place for both... I think I am prone to take on initial viewpoints and so I don&#39;t want to abandon my desire for stability, but man... maybe running Arch wouldn&#39;t be that bad, maybe a release-candidate container for an app at home here or there would be an interesting way to give back even a fraction to the FOSS community.&#xA;&#xA;I try to open issues on GH and such when things happen, but I could take a more proactive approach especially with the software that I use more regularly...&#xA;&#xA;Thanks DHH for posting these thoughts, keep em coming!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection on Philippians 2:14-18</title>
    <id>https://pype.dev/reflection-on-philippians-2-14-18/</id>
    <updated>2025-09-06T07:12:55Z</updated>
    <published>2025-09-06T07:12:55Z</published>
    <link href="https://pype.dev/reflection-on-philippians-2-14-18/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Philippians 2:15-18&#34;</summary>
    <content type="text">&#xA;!!! note &#34;Philippians 2:15-18&#34;&#xA;&#xA;    14 Do all things without grumbling and disputing, 15 in order that you may&#xA;    become blameless and innocent, children of God without fault in the midst of a&#xA;    crooked and perverted generation, among whom you shine as stars in the world,&#xA;    16 holding fast to the word of life, for a source of pride to me in the day of&#xA;    Christ, that I did not run in vain or labor in vain. 17 But even if I am being&#xA;    poured out as a drink offering on the sacrifice and service of your faith, I&#xA;    rejoice and rejoice with all of you. 18 And in the same way also you rejoice&#xA;    and rejoice with me. &#xA;&#xA;&#34;Do all things without grumbling and disputing&#34;... now, taking verses out of&#xA;context is one of my biggest pet-peeves in Christian circles (and non-Christian&#xA;as well I suppose, but when non-believers who read 4 pages of the Bible 20&#xA;years ago try to tell me what anything means I can kindly ask them to keep&#xA;their illiteracy to themselves)&#xA;&#xA;However! With my brothers and sisters, there&#39;s no such ask - if we all call on&#xA;Jesus then we will edifiy and educate one another on appropriate applications&#xA;of the inspired word of God.&#xA;&#xA;With that said... dang do I grumble a lot about work... at least lately. I&#xA;believe that nearly everyone I work with knows my worldview, I don&#39;t think&#xA;anyone who spends a few days, maybe even hours (by God&#39;s grace) will know who I&#xA;serve just by my languge and verbiage. But I&#39;m not a prime example of Christian&#xA;living (yet... hopefully). I had been [[reflecting-on-romans-7-7-13]] for&#xA;several days and the &#34;sin in me&#34; is what I see come out when I let my guard&#xA;down against letting strife and anger enter my heart.&#xA;&#xA;I read this passage and found myself immediately focused on &#34;in the midst of a&#xA;crooked and perverted generation&#34; because our generation is disgusting... I&#xA;know immorality and public perverted-ness was present in the before-fore times,&#xA;but I have to imagine that Paul and the other NT writers couldn&#39;t have imagined&#xA;the kind of disgusting perverted anti-nature nonsense that is everywhere in our&#xA;society. We celebrate sex over everything, and a twisted understanding of sex&#xA;for that matter... My daughter&#39;s are growing up in a world where I feel the&#xA;need to practice constant vigilence against the evil forces in the world that&#xA;would seek to them and twist their understanding of themselves into nothing&#xA;more than objects of desire and consumption... And ya know what, that&#39;s a&#xA;worthy thing to meditate on and prepare for.&#xA;&#xA;But it&#39;s not what my heart needs... My girls are relatively safe (for the time&#xA;being) but everyday I face the sin of my own heart, it&#39;s crouching at the door,&#xA;and should not that be my higher concern?&#xA;&#xA;I even notice now in this reflection that my mind is drawn away from myself,&#xA;and it is difficult to follow the Lord in meditation... perhaps it&#39;s too noisey&#xA;but perhaps I&#39;m looking for too much...&#xA;&#xA;This day I choose whom I will serve, and by God&#39;s grace it&#39;s the King Jesus...&#xA;Help my unbelief and still the grumbling in my life.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-06 Notes</title>
    <id>https://pype.dev/2025-09-06-notes/</id>
    <updated>2025-09-06T07:01:46Z</updated>
    <published>2025-09-06T07:01:46Z</published>
    <link href="https://pype.dev/2025-09-06-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-05-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-05-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflection-on-philippians-2-14-18]]&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-05 Notes</title>
    <id>https://pype.dev/2025-09-05-notes/</id>
    <updated>2025-09-05T08:48:16Z</updated>
    <published>2025-09-05T08:48:16Z</published>
    <link href="https://pype.dev/2025-09-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-03-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-03-notes ]]&#xA;&#xA;## Writing&#xA;&#xA;- wrapped up [[write-in-to-the-hybrid-cloud-show]]&#xA;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-03 Notes</title>
    <id>https://pype.dev/2025-09-03-notes/</id>
    <updated>2025-09-03T05:54:02Z</updated>
    <published>2025-09-03T05:54:02Z</published>
    <link href="https://pype.dev/2025-09-03-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-02-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-02-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- it&#39;s been a few days... pick the torch up again tomorrow with morning and evening&#xA;&#xA;## TOODs&#xA;&#xA;- update the Sch. (friends) loan to pause to Dec.&#xA;&#xA;## Runescape&#xA;&#xA;- Did many things today - working on slayer stuff. Mazchna is the Slayer Master I should talk to, but I have to do `priest in peril` first, which I&#39;ll finish tonight&#xA;- Doing [The Fremennik Trials](https://oldschool.runescape.wiki/w/The_Fremennik_Trials) quest now, it&#39;s a bit longer but I need that sweet [Farseer Helm](https://oldschool.runescape.wiki/w/Farseer_helm) for the ranged/magic bonus!&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>apprise</title>
    <id>https://pype.dev/apprise/</id>
    <updated>2025-09-02T17:13:09Z</updated>
    <published>2025-09-02T17:13:09Z</published>
    <link href="https://pype.dev/apprise/" rel="alternate" type="text/html"></link>
    <summary type="text">Apprise - github project that&#39;s awesome about notifications</summary>
    <content type="html">&lt;p&gt;Apprise - github project that&amp;rsquo;s awesome about notifications&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/caronc/apprise&#34;&gt;github repo&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-02 Notes</title>
    <id>https://pype.dev/2025-09-02-notes/</id>
    <updated>2025-09-02T07:53:49Z</updated>
    <published>2025-09-02T07:53:49Z</published>
    <link href="https://pype.dev/2025-09-02-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-09-01-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-09-01-notes ]]&#xA;&#xA;## Runescape&#xA;&#xA;- membership coming soon... I&#39;ve exhaused free-to-play quests (minus 1 I&#39;m waiting on Rob to do together)&#xA;  - gotta get me some of that magic armor!&#xA;  ![20250902125558_86a32cd7.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250902125558_86a32cd7.png)&#xA;&#xA;## Projects&#xA;&#xA;- need to chip away bit by bit on [[homelab-as-a-service]]&#xA;- talked with [waylon](https://waylonwalker.com) about a few neat ideas today to maybe throw into the ether&#xA;  - [[event-details-updates-via-notifications-as-a-service]]&#xA;  - [[compose-stack-example-repo-x-package-manager]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pinchflat</title>
    <id>https://pype.dev/pinchflat/</id>
    <updated>2025-09-01T20:20:58Z</updated>
    <published>2025-09-01T20:20:58Z</published>
    <link href="https://pype.dev/pinchflat/" rel="alternate" type="text/html"></link>
    <summary type="text">Pinchflat is a self-hostable YouTube media downloader</summary>
    <content type="html">&lt;p&gt;Pinchflat is a self-hostable YouTube media downloader&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-09-01 Notes</title>
    <id>https://pype.dev/2025-09-01-notes/</id>
    <updated>2025-09-01T07:04:07Z</updated>
    <published>2025-09-01T07:04:07Z</published>
    <link href="https://pype.dev/2025-09-01-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-31-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-31-notes ]]&#xA;&#xA;## Projects&#xA;&#xA;- I started a notes page for my [[homelab-as-a-service]] idea... idk what to name it and I don&#39;t love this but I can&#39;t keep scattered notes on each of my dailys here...&#xA;&#xA;- Used [[pinchflat]] to download the python doc - made a &#34;dev&#34; youtube playlist to start brining down to the lab&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Morning August 31 2025</title>
    <id>https://pype.dev/reflection-morning-august-31-2025/</id>
    <updated>2025-08-31T06:46:06Z</updated>
    <published>2025-08-31T06:46:06Z</published>
    <link href="https://pype.dev/reflection-morning-august-31-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">“On mine arm shall they trust.&#34; —Isaiah 51:5</summary>
    <content type="html">&lt;h2 id=&#34;morning-august-31&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Morning, August 31&lt;/span&gt; &lt;a href=&#34;#morning-august-31&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;“On mine arm shall they trust.&amp;quot;&#xA;—Isaiah 51:5&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Spurgeon: Morning and Evening&lt;/p&gt;&#xA;&lt;p&gt;In seasons of severe trial, the Christian has nothing on earth that he can&#xA;trust to, and is therefore compelled to cast himself on his God alone. When his&#xA;vessel is on its beam-ends, and no human deliverance can avail, he must simply&#xA;and entirely trust himself to the providence and care of God. Happy storm that&#xA;wrecks a man on such a rock as this! O blessed hurricane that drives the soul&#xA;to God and God alone! There is no getting at our God sometimes because of the&#xA;multitude of our friends; but when a man is so poor, so friendless, so helpless&#xA;that he has nowhere else to turn, he flies into his Father’s arms, and is&#xA;blessedly clasped therein! When he is burdened with troubles so pressing and so&#xA;peculiar, that he cannot tell them to any but his God, he may be thankful for&#xA;them; for he will learn more of his Lord then than at any other time. Oh,&#xA;tempest-tossed believer, it is a happy trouble that drives thee to thy Father!&#xA;Now that thou hast only thy God to trust to, see that thou puttest thy full&#xA;confidence in him. Dishonour not thy Lord and Master by unworthy doubts and&#xA;fears; but be strong in faith, giving glory to God. Show the world that thy God&#xA;is worth ten thousand worlds to thee. Show rich men how rich thou art in thy&#xA;poverty when the Lord God is thy helper. Show the strong man how strong thou&#xA;art in thy weakness when underneath thee are the everlasting arms. Now is the&#xA;time for feats of faith and valiant exploits. Be strong and very courageous,&#xA;and the Lord thy God shall certainly, as surely as he built the heavens and the&#xA;earth, glorify himself in thy weakness, and magnify his might in the midst of&#xA;thy distress. The grandeur of the arch of heaven would be spoiled if the sky&#xA;were supported by a single visible column, and your faith would lose its glory&#xA;if it rested on anything discernible by the carnal eye. May the Holy Spirit&#xA;give you to rest in Jesus this closing day of the month.&lt;/p&gt;&#xA;&lt;p&gt;Spurgeon, C. H. (1896). Morning and evening: Daily readings. Passmore &amp;amp; Alabaster.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt; &lt;a href=&#34;#reflection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;By God&amp;rsquo;s grace, I was led this morning through my old Logos dashboard to the evening and morning or the morning and reading daily readings from Charles Spurgeon.&#xA;And today, August 31, the morning reading is&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 51:5&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;on mine arm, shall they trust.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;And it&amp;rsquo;s a short few words, but Spurgeon writes quite a bit about it.&#xA;And there&amp;rsquo;s many quotes from this short morning reflection that are very relevant to me in light of my work situation.&#xA;One of the things there I&amp;rsquo;ve been processing the most is the powerlessness I feel in regards to corporate policy and the control&#xA;that my employer wants to exercise over my life.&#xA;But the other side of that coin of control is me and me placing my trust in my employer to provide security for me.&#xA;And God has been very good to me and still has given me security outside of my primary job.&#xA;But I did trust that job.&#xA;And it&amp;rsquo;s in the wake of losing it.&#xA;I&amp;rsquo;m not even stretched that thin in losing my job.&#xA;But in the stretching that is taking place, Spurgeon says some things about God that I should impress into my heart.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Oh, blessed hurricane that drives the soul to God and God alone.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Should we not consider trials - Joy?&#xA;I&amp;rsquo;m sure not acting that joyful.&#xA;But God has been very sweet to me through these reflections, through drawing my eye and soul to him through the lens of trust.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There is no getting at our God sometimes because of the multitude of our friends. But when a man is so poor, so friendless, so helpless that he has nowhere else to turn, he flies into his father&amp;rsquo;s arms and is blessedly clasped therein.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Spurgeon clearly isn&amp;rsquo;t saying we can&amp;rsquo;t have friends here.&#xA;I think what he is saying is &amp;ldquo;the multitude of our {idols}&amp;rdquo;, really.&#xA;Like Job&amp;rsquo;s friends, maybe, the ones who keep our attention on work and the world and money and my 401k and the future.&#xA;Those things are my &amp;ldquo;&lt;strong&gt;friends&lt;/strong&gt;&amp;rdquo; because those things give me security.&#xA;And maybe I have trusted too much, and now God is drawing me closer to him.&#xA;And may I say, blessed be the name of the Lord who gives and takes away.&#xA;O blessed hurricane that drives the soul to God and God alone.&#xA;Amen.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-31 Notes</title>
    <id>https://pype.dev/2025-08-31-notes/</id>
    <updated>2025-08-31T06:22:56Z</updated>
    <published>2025-08-31T06:22:56Z</published>
    <link href="https://pype.dev/2025-08-31-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-29-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-29-notes ]]&#xA;&#xA;## Writing&#xA;&#xA;- [[old-school-runescape-runelite-plugins]]&#xA;&#xA;## $HOME&#xA;&#xA;I don&#39;t know what to call my opinionated homelab distribution yet but I will try to have some goals for today or tomorrow for simple steps&#xA;  - drawing up all the pieces will take a while but is necessary&#xA;  - ansible playbook to make zfs datasets for vms or containers is easy first utility to bank somewhere&#xA;&#xA;## Reflection&#xA;&#xA;- I have enjoyed the last 2-ish weeks of [[reflecting-on-romans-7-7-13]]&#xA;- Since that was such a beneficial exercise I will take a week or so on another passage... &#xA;  - But I&#39;m not sure what to do... &#xA;  - [[reflection-morning-august-31-2025]]&#xA;&#xA;## Hybrid Cloud Show Response&#xA;&#xA;- Working on this in speakr (what an amazing tool!)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Old School Runescape Runelite Plugins</title>
    <id>https://pype.dev/old-school-runescape-runelite-plugins/</id>
    <updated>2025-08-31T06:11:26Z</updated>
    <published>2025-08-31T06:11:26Z</published>
    <link href="https://pype.dev/old-school-runescape-runelite-plugins/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been enjoying my time back in Old School Runescape. Such a classic for me. The landscape has changed a lot since 2006 though. There&#39;s clients and...</summary>
    <content type="text">&#xA;I&#39;ve been enjoying my time back in Old School Runescape. Such a classic for me.&#xA;The landscape has changed a lot since 2006 though. There&#39;s clients and plugins&#xA;galore now, no more being limited to a web browser with 1 minute logout timer! &#xA;&#xA;I started a bit in [[runescape-clients-and-settings]] and in the last several&#xA;days I&#39;ve discovered a few more things that I like.&#xA;&#xA;## Logout&#xA;&#xA;There&#39;s not a lot of AFK opportunities in OSRS but there are more than there&#xA;used to be. The primary one is splashing to gain magic xp. It&#39;s slow but AFK&#xA;for as long as you can be. On mobile the logout setting can be changed to 25&#xA;minutes so it&#39;s easy to leave the game running on my phone for the sake of&#xA;leveling up a bit. &#xA;&#xA;But I prefer to play on desktop because it&#39;s so much more beautiful with the HD&#xA;117 GPU plugin noted in [[runescape-clients-and-settings#GPU]]. And thankfully&#xA;that 25 minute logout timer can be set in this client too!&#xA;&#xA;![20250831111601_dc41f9e9.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831111601_dc41f9e9.png)&#xA;&#xA;![20250831111628_24c41fea.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831111628_24c41fea.png)&#xA;&#xA;## Left Click Drop&#xA;&#xA;When power leveling in things like `fishing` or `woodcutting` it&#39;s tempting to&#xA;pair it with leveling in `cooking` and `firemaking` but the walking time&#xA;between fishing, trees, fire etc. does really add up over days and weeks of&#xA;playing. There are many tactics, but if money is no object (ie. you&#39;re not&#xA;trying to bank a ton of gold right now) then you can focus on fishing or&#xA;chopping trees and simply dropping inventory as it fills up. This required&#xA;right-click, select drop, click for every item in your inventory which is so&#xA;tedious.&#xA;&#xA;Luckily there&#39;s a plugin for this!&#xA;&#xA;![20250831111952_a71baef2.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831111952_a71baef2.png)&#xA;&#xA;As you can see you just type the name of the items you want the default&#xA;left-click to `drop` and I have `willow logs` etc. in here from a few leveling&#xA;sessions recently&#xA;&#xA;### Example&#xA;&#xA;By default take this example of `wear Zammorak monk bottom`&#xA;&#xA;![20250831113557_5da3dbac.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831113557_5da3dbac.png)&#xA;&#xA;![20250831113653_3acbcb94.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831113653_3acbcb94.png)&#xA;&#xA;I would never actually want to default drop this item, but let&#39;s say I did!&#xA;&#xA;![20250831113747_9d846f0c.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831113747_9d846f0c.png)&#xA;&#xA;![20250831113815_4e9b7ca2.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831113815_4e9b7ca2.png)&#xA;&#xA;Now the default left-click is `drop` - super easy&#xA;&#xA;## Screenshot&#xA;&#xA;I JUST found this one! There&#39;s a screenshot plugin to give you more standardized screenshots of in-game activity...&#xA;&#xA;![20250831113238_04accffb.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831113238_04accffb.png)&#xA;&#xA;And then an example of that plugin&#39;s screenshot:&#xA;&#xA;![20250831113350_7049366c.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250831113350_7049366c.png)&#xA;&#xA;## Others&#xA;&#xA;Some noteable others are:&#xA;&#xA;- HD 117 GPU plugin (as noted in [[runescape-clients-and-settings#GPU]])&#xA;- `skills progress` shows useful information about the skill you&#39;re leveling as an overlay&#xA;- `Quest Helper` is huge for me because some of the runescape quests are&#xA;legitimately challening, and I&#39;m really here for dad mode... so the quest&#xA;helper is a lifesaver&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-29 Notes</title>
    <id>https://pype.dev/2025-08-29-notes/</id>
    <updated>2025-08-29T08:56:49Z</updated>
    <published>2025-08-29T08:56:49Z</published>
    <link href="https://pype.dev/2025-08-29-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-28-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-28-notes ]]&#xA;&#xA;## Homelab&#xA;&#xA;- started chatting with jipity about some automation... I have so many ideas that circle my head and I have a hard time implementing anything for fear of committing halfway to something... &#xA;- I think I can take baby steps to mitigate that issue and one way is to automate the first thing that annoys me - zfs dataset creation for new apps. I assume that I want a new zfs dataset if I&#39;m going to provision something into my homelab so that means&#xA;  - dataset creation on the appropriate node&#xA;  - permissions&#xA;  - updates to `zfs-ops` (eventually dataops in homelab-mono) for the backup to be added explicitly (or removed if I&#39;m removing one - for example some old VM datasets I no longer need)&#xA;&#xA;- I also mind-dumped after starting the convo with jipity, using speakr to get a short summary of a brain dump is pretty awesome especially considering the purely local self-hosted nature. Here&#39;s the summary of a pretty concentrated 6 minute monologue on things I&#39;m thinking about:&#xA;  - Summary is imperfect - but again, for self-hosted hardware and getting purely private LLM-assisted brainstorming is really cool. However, I do plan on sinking some thought into the big boys (claude or jippity) as I very slowly begin construction&#xA;&#xA;Key Issues Discussed&#xA;&#xA;    Platform and service idea for consulting&#xA;    Product as an opinionated home lab targeting small teams or on-prem setups with Docker Swarm + ZFS&#xA;    Focus on privacy, data ownership, compute ownership while providing cloud options (AWS)&#xA;    Hardware recommendations part of services&#xA;    Use AWS resources when possible but self-hosting is also viable option&#xA;    Tail scale for business networking and network ACLs provided by the vendor&#xA;&#xA;Key Decisions Made&#xA;&#xA;    Deploy servers using Docker Swarm + ZFS with an opinionated approach to data management, backups, application deployment monitoring.&#xA;    Cloud options include Terraform set up in AWS (and possibly Azure later)&#xA;    Use U-Corps as a base for containers on top of Ubuntu distro box; consider KeyCloak or Aphalia for authentication&#xA;    DNS and public services will be handled with NameCheap and Cloudflare using Terraform, not picking each other’s features.&#xA;    CERT management is Let’s Encrypt&#xA;    Observability through Harbor telemetry data gathering&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-28 Notes</title>
    <id>https://pype.dev/2025-08-28-notes/</id>
    <updated>2025-08-28T05:15:38Z</updated>
    <published>2025-08-28T05:15:38Z</published>
    <link href="https://pype.dev/2025-08-28-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-27-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-27-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- [[reflecting-on-romans-7-7-13#Round 5]]&#xA;&#xA;## Wins&#xA;&#xA;- time-boxing is definitely helpful, even with meetings going over and getting side-tracked&#xA;- The inflection point I mentioned in [[reflection-ai-work-and-adhd]] is continuing to flex... I noticed today decisions being made with the paramount motivation being &#34;I am finally just tired of &lt;what I&#39;ve historically been doing in X&gt;&#34;&#xA;  - Feels like I&#39;m taking just a few days of consistent steps in the direction that my &#34;inner-man&#34; wants to go. Inconsistencies persist, nothing for it but to keep stepping.&#xA;&#xA;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Awesome</title>
    <id>https://pype.dev/awesome/</id>
    <updated>2025-08-27T20:58:00Z</updated>
    <published>2025-08-27T20:58:00Z</published>
    <link href="https://pype.dev/awesome/" rel="alternate" type="text/html"></link>
    <summary type="text">There&#39;s some things I find awesome online - here is a list of those things</summary>
    <content type="html">&lt;h1 id=&#34;awesome&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Awesome&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;There&amp;rsquo;s some things I find awesome online - here is a list of those things&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://latenightlinux.com/hcs37/&#34;&gt;Hybrid Cloud Show | Episode 37&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This episode was very emotional for me, and one of the few non-theological&#xA;podcasts I&amp;rsquo;ve listened to more than once. The guy&amp;rsquo;s conversation sparks so many&#xA;memories from my journey from data scientist to platform engineer&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://2.5admins.com/2-5-admins-100/&#34;&gt;2.5 Admins | Episode 100&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This episode is on my list because of a shotout. A friend wrote in asking&#xA;advice on my behalf regarding a sppedtest I let run as a cronjob on a server&#xA;for a week that resulted in downloading over 1TB of data in the span of 7 days&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - AI Work and ADHD</title>
    <id>https://pype.dev/reflection-ai-work-and-adhd/</id>
    <updated>2025-08-27T07:16:57Z</updated>
    <published>2025-08-27T07:16:57Z</published>
    <link href="https://pype.dev/reflection-ai-work-and-adhd/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s time to be more devoted to my work... AI has been a cool technology to watch and experience but one thing I&#39;m allowing it to do to me is to kill my love...</summary>
    <content type="html">&lt;h2 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt; &lt;a href=&#34;#reflection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s time to be more devoted to my work&amp;hellip; AI has been a cool technology to&#xA;watch and experience but one thing I&amp;rsquo;m allowing it to do to me is to kill my love for&#xA;building&amp;hellip; I feel like I&amp;rsquo;m arriving where I&amp;rsquo;ve already seen many talented&#xA;developers get to -&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;realization&lt;/p&gt;&#xA;&lt;p&gt;AI is not magic, it&amp;rsquo;s a headache.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t get me wrong, targeted and focused use of LLMs, with careful planning and&#xA;time-boxing can be great, and has been for me. But I am a creature and prone to&#xA;take the path of least resistance, and in many cases I&amp;rsquo;m just letting the LLM&#xA;do the work. This is where the ADHD element from the title comes into play.&#xA;Now, I&amp;rsquo;m not blaming ADHD for me being lazy, because I&amp;rsquo;m not sure laziness is&#xA;the fairest descriptor of where I&amp;rsquo;ve been lately. A common issue for those with&#xA;ADHD, maybe even the defining characteristic, is the black-hole that&amp;rsquo;s present in the space&#xA;where motiviation and reward belong in the brain. I&amp;rsquo;ve resonated with this thought for much of my life:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Fulfilled or Relieved&lt;/p&gt;&#xA;&lt;p&gt;When I finish tasks, I&amp;rsquo;m not fulfilled&amp;hellip; if anything I&amp;rsquo;m relieved.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is a core issue I am seeking to address in my life, and I guess in&#xA;real-time reflection I should thank the hellscape of AI and LLMs for surfacing&#xA;this pattern in my make-up today instead of when I&amp;rsquo;m in my 40s or 50s.&lt;/p&gt;&#xA;&lt;p&gt;So where I&amp;rsquo;ve been is that I&amp;rsquo;ll let an LLM write code and then I&amp;rsquo;ll attempt to&#xA;be validating the tests or example scripts I prompt it to generate, get&#xA;comfortable with it, and ship.&lt;/p&gt;&#xA;&lt;p&gt;But then in a few weeks the context of that code is all&#xA;lost on me&amp;hellip; I didn&amp;rsquo;t craft it with blood and sweat and so when I&amp;rsquo;m asked a&#xA;question about it I realize I&amp;rsquo;m barely fluent in a thing I built (did I even build it?)!&lt;/p&gt;&#xA;&lt;p&gt;This is embarrassing and exhausting&amp;hellip; I&amp;rsquo;m not sure what I&amp;rsquo;m gonna do about&#xA;this, definitely not write about how I&amp;rsquo;m going to change my life over this&#xA;dissastisfaction and from this day forward everything will be different&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;But today does feel like an infelction point in a trajectory I&amp;rsquo;ve been on with&#xA;AI and my job, so not starting today, but just a decision I am making today, is&#xA;to time-box every task with vigorous commitment.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-27 Notes</title>
    <id>https://pype.dev/2025-08-27-notes/</id>
    <updated>2025-08-27T06:40:18Z</updated>
    <published>2025-08-27T06:40:18Z</published>
    <link href="https://pype.dev/2025-08-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-26-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-26-notes ]]&#xA;&#xA;&#xA;## Reflection on AI&#xA;&#xA;- [[reflection-ai-work-and-adhd]]&#xA;&#xA;&#xA;## TODOs&#xA;&#xA;I need to think about how to keep track of daily tasks across my different work streams...&#xA;  - self hosted time tracker&#xA;  - affine or something&#xA;  - stream-specific tool&#xA;    - working-notes blog with `now` page?&#xA;&#xA;## Wins&#xA;&#xA;- Q: how did today go with time-boxing per [[reflection-ai-work-and-adhd]]? &#xA;  - I would say ok... an office hours went from 1 hours to 3 hours&#xA;  unfortunately, and that definitely affected afternoon momentum. However, I&#xA;  attempted to set a timer for a few tasks with the clock on my wall, and&#xA;  helped to stay focused. &#xA;&#xA;## Runescape&#xA;&#xA;- Totally going to become a member again after finishing the last few free-to-play quests&#xA;- [[runescape-os-mobile-experience]]&#xA;- updated [[starting-old-school-runescape-over-again]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Docker Swarm Still Rocks</title>
    <id>https://pype.dev/thoughts-812/</id>
    <updated>2025-08-26T14:43:44Z</updated>
    <published>2025-08-26T14:43:44Z</published>
    <link href="https://pype.dev/thoughts-812/" rel="alternate" type="text/html"></link>
    <summary type="text">Apparently docker swarm is still a thing and now I have to try it</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://dockerswarmstill.rocks/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://dockerswarmstill.rocks/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Docker Swarm Still Rocks&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://dockerswarmstill.rocks/&#34;&gt;Docker Swarm Still Rocks&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Apparently docker swarm is still a thing and now I have to try it&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-26 Notes</title>
    <id>https://pype.dev/2025-08-26-notes/</id>
    <updated>2025-08-26T05:45:23Z</updated>
    <published>2025-08-26T05:45:23Z</published>
    <link href="https://pype.dev/2025-08-26-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-25-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-25-notes ]]&#xA;&#xA;## Updates&#xA;&#xA;- started my [[awesome]] list&#xA;- I missed something with speakr - need the HF_TOKEN for diarisation to work&#xA;  - [[speakr-for-recording-and-transcribing-at-home]]&#xA;  - with diarisation working I can continue my [[write-in-to-the-hybrid-cloud-show]]&#xA;&#xA;## Reflection&#xA;&#xA;- Didn&#39;t get into a good Bible focus time in the morning, definitely affected the day&#xA;- Vibe Coding... ugh, tempting and treacherous. The API I rolled out for work&#xA;was hard to think about, and using LLMs to build it got something up and going&#xA;but without me providing more subject matter expertise (due to the fact of not having any)&#xA;it&#39;s already heavier tech debt than I care to admit. Maybe I&#39;m sour today and&#xA;defeated at the end of the day&#xA;- It&#39;s been weeks since my 100 push-ups - did them this evening&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-25 Notes</title>
    <id>https://pype.dev/2025-08-25-notes/</id>
    <updated>2025-08-25T08:05:15Z</updated>
    <published>2025-08-25T08:05:15Z</published>
    <link href="https://pype.dev/2025-08-25-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-24-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-24-notes ]]&#xA;&#xA;## Projects&#xA;&#xA;- [[speakr-for-recording-and-transcribing-at-home]]&#xA;  - the speaker identification isn&#39;t working yet&#xA;&#xA;## Desk clean up?&#xA;&#xA;- with life-changes in the midst, a little re-work was in order&#xA;- trying a 27&#34; vertical monitor setup to the side for docs and chat&#xA;- setup a bluetooth speaker - might like open sound instead of headphones&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-24 Notes</title>
    <id>https://pype.dev/2025-08-24-notes/</id>
    <updated>2025-08-24T06:00:38Z</updated>
    <published>2025-08-24T06:00:38Z</published>
    <link href="https://pype.dev/2025-08-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-23-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-23-notes ]]&#xA;&#xA;## Github&#xA;&#xA;- going to spin up speakr&#xA;  - Yes... it&#39;s replacing Whisper-WebUI&#xA;  - [[speakr-for-recording-and-transcribing-at-home]]&#xA;&#xA;## Homelab&#xA;&#xA;- I am slowly moving things to a mono-repo and that&#39;s going well&#xA;- Moved `ollama` and `open-webui` to a `ai` compose stack at home along with `speakr` and a whisper asr service&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-23 Notes</title>
    <id>https://pype.dev/2025-08-23-notes/</id>
    <updated>2025-08-23T05:54:05Z</updated>
    <published>2025-08-23T05:54:05Z</published>
    <link href="https://pype.dev/2025-08-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-22-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-22-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- didn&#39;t write one up today, mediated some more this morning on &#34;inner man&#34;,&#xA;acknowledging the law with my mind, and the Sermon on the Mount whereby Jesus&#xA;teaches his disciples about a new kingdom, where doing right leads to reward -&#xA;but the definition of reward changes as we walk in step with Jesus&#xA;&#xA;## Forgejo&#xA;&#xA;- multiple runner, nice&#xA;&#xA;## Github&#xA;&#xA;- starred many things today&#xA;  - speakr looks nice for how I&#39;m using whisper + open-webui&#xA;  - found an open-webui android app, but I think I have to build and sideload the apk myself [repo](https://github.com/cogwheel0/conduit)&#xA;  - found self-hosted Google analytics that I&#39;d like to try on [[quadtask]] [here](https://github.com/pypeaday/rybbit)&#xA;  - forked [moocup](https://github.com/pypeaday/moocup) for screenshot pre-processing as a step between snipping the screen and uploading to [[shotput]]&#xA;&#xA;## I&#39;m not the only one&#xA;&#xA;Looks like [komodo](https://github.com/pypeaday/komodo) is much of what I&#39;ve envisioned for my &#34;platform as a product&#34;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>When I Learned What An Escape Room Was</title>
    <id>https://pype.dev/when-i-learned-what-an-escape-room-was/</id>
    <updated>2025-08-22T18:03:36Z</updated>
    <published>2025-08-22T18:03:36Z</published>
    <link href="https://pype.dev/when-i-learned-what-an-escape-room-was/" rel="alternate" type="text/html"></link>
    <summary type="text">I was recently diagnosed with Autism and ADHD. I&#39;ve written about it and will plan to write more. As of August 22, 2025 the only published piece is...</summary>
    <content type="text">&#xA;## Set The Stage&#xA;&#xA;I was recently diagnosed with Autism and ADHD. I&#39;ve written about it and will&#xA;plan to write more. As of August 22, 2025 the only published piece is&#xA;[[autism-adhd-and-the-doshas]]. This story will recount one of many events in&#xA;my life that in hindsight were clear-cut examples of how my brain consumes and&#xA;understands reality differently than neuro-typical people...&#xA;&#xA;## Story Time&#xA;&#xA;When I was 24ish I was working at a summer camp as the head of guy&#39;s staff (camp consellors).&#xA;It was typical for the leadership team to get together the week&#xA;before the camp to get to know each other if we didn&#39;t, plan activities, etc.&#xA;For team building the plan was to go to Chattanooga and do an __escape room__.&#xA;&#xA;I had never heard of an escape room before and I am not being hyperbolic or&#xA;obtuse when I tell you that my first thought was of a dungeon. I was told &#34;you&#xA;get locked into a room&#34; and I asked &#34;are you tied up?&#34;. I&#39;m a little surprised&#xA;the ridiculousness of that question didn&#39;t prompt more conversation... I love&#xA;the folks I served with, and maybe they were conspiring against me, but no one&#xA;said anything to bring much clarity to me. And after not getting an actually&#xA;straight forward answer to &#34;are you tied up&#34; I decided to just shut my mouth&#xA;because everyone else was excited... even though I thought we might be going to&#xA;a literal dungeon.&#xA;&#xA;## Trust&#xA;&#xA;I had to exercise so much trust in my friends out of fear of looking stupid but&#xA;my inability to understand the words &#34;escape room&#34; any differently, or more&#xA;contextually correct, led me to an anxiety filled walk to the lobby of the&#xA;first escape room facility I&#39;ve ever been to. And no, there were not chains&#xA;dangling from the ceiling.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-22 Notes</title>
    <id>https://pype.dev/2025-08-22-notes/</id>
    <updated>2025-08-22T06:10:03Z</updated>
    <published>2025-08-22T06:10:03Z</published>
    <link href="https://pype.dev/2025-08-22-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-21-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-21-notes ]]&#xA;&#xA;## Runescape&#xA;&#xA;- knocking quests out - dragon slayer today maybe&#xA;  - hit 40 str instead&#xA;&#xA;## Forgejo&#xA;&#xA;- [[self-hosting-a-code-forge-with-forgejo]]&#xA;&#xA;## Writing&#xA;&#xA;- wrap up [[when-i-learned-what-an-escape-room-was]]&#xA;- started some notes on [[write-in-to-the-hybrid-cloud-show]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Thoughts On August 21 2025</title>
    <id>https://pype.dev/thoughts-on-august-21-2025/</id>
    <updated>2025-08-21T06:14:26Z</updated>
    <published>2025-08-21T06:14:26Z</published>
    <link href="https://pype.dev/thoughts-on-august-21-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">Been struggling more with work - what matters? I can&#39;t help but feel like nothing... As a Christian I want to do my work &#34;for an audience of 1&#34; as the saying...</summary>
    <content type="html">&lt;h1 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Been struggling more with work - what matters? I can&amp;rsquo;t help but feel like&#xA;nothing&amp;hellip; As a Christian I want to do my work &amp;ldquo;for an audience of 1&amp;rdquo; as the&#xA;saying goes&amp;hellip; I should do my work with excellence, and I think I have striven&#xA;for that - it&amp;rsquo;s definitely one reason I have the success and reputation at work&#xA;that I do have&amp;hellip; but as far as the &amp;ldquo;work&amp;rdquo; goes, does it matter? To the&#xA;company, I think the answer is clear - no. They want compliance and submission&#xA;before innovation and success. But as a believer, where does my&#xA;loyalty lie?&lt;/p&gt;&#xA;&lt;p&gt;What I mean is - if I was loyal to a company, then the scenario&#xA;I&amp;rsquo;m in would very understadably lead to what I&amp;rsquo;m currently feeling - remorse,&#xA;regret, embarrasment, and anger. But if I&amp;rsquo;m truly loyal to Yahweh, then&#xA;wouldn&amp;rsquo;t it not matter &lt;em&gt;at all&lt;/em&gt; what the company does? I do my work for Yahweh&#xA;regardless of the company&amp;rsquo;s direction, instruction, or even whether or not they&#xA;benefit&amp;hellip; That&amp;rsquo;s my struggle - I don&amp;rsquo;t want to give another ounce of energy&#xA;towards the success of an entity that doesn&amp;rsquo;t give a shit about me, but am I&#xA;violating my own worldview and disrespecting my God by dragging my feet?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-21 Notes</title>
    <id>https://pype.dev/2025-08-21-notes/</id>
    <updated>2025-08-21T05:54:20Z</updated>
    <published>2025-08-21T05:54:20Z</published>
    <link href="https://pype.dev/2025-08-21-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-20-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-20-notes ]]&#xA;&#xA;## Projects&#xA;&#xA;- continued [[self-hosting-a-code-forge-with-forgejo]] after figuring out the `dind` runner stuff&#xA;&#xA;## Reflection&#xA;&#xA;- continue [[reflecting-on-romans-7-7-13#Round 4]] (updated again)&#xA;&#xA;## Thoughts&#xA;&#xA;- [[thoughts-on-august-21-2025]]&#xA;&#xA;## Runescape&#xA;&#xA;- time to quest&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>forgejo</title>
    <id>https://pype.dev/forgejo/</id>
    <updated>2025-08-20T06:26:00Z</updated>
    <published>2025-08-20T06:26:00Z</published>
    <link href="https://pype.dev/forgejo/" rel="alternate" type="text/html"></link>
    <summary type="text">self-hosted code forge - codeberg - fork of gittea</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;self-hosted code forge&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;codeberg&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;fork of gittea&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;see [[self-hosting-a-code-forge-with-forgejo]]&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-20 Notes</title>
    <id>https://pype.dev/2025-08-20-notes/</id>
    <updated>2025-08-20T06:01:46Z</updated>
    <published>2025-08-20T06:01:46Z</published>
    <link href="https://pype.dev/2025-08-20-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-19-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-19-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- continuing [[reflecting-on-romans-7-7-13]] (updated)&#xA;&#xA;## Forgejo&#xA;&#xA;- [[forgejo]]&#xA;- started [[self-hosting-a-code-forge-with-forgejo]]&#xA;&#xA;## Home&#xA;&#xA;- Kassia requested some storage containers to hang on the girl&#39;s kitchenette&#xA;  - https://makerworld.com/models/929188&#xA;  - https://makerworld.com/models/112478&#xA;  - https://makerworld.com/models/131561&#xA;- need to hang the AMS on the wall&#xA;&#xA;## Runescape&#xA;&#xA;- range and def level 40, dragon hide is mine! &#xA;  - need to do dragon slayer quest for the body though&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Codeberg Pages | Codeberg Documentation</title>
    <id>https://pype.dev/thoughts-804/</id>
    <updated>2025-08-19T11:35:38Z</updated>
    <published>2025-08-19T11:35:38Z</published>
    <link href="https://pype.dev/thoughts-804/" rel="alternate" type="text/html"></link>
    <summary type="text">Forgejo has a github pages like feature... this might be nice to use sometime as I try to lean into forgejo, but the las</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://docs.codeberg.org/codeberg-pages/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://docs.codeberg.org/codeberg-pages/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Codeberg Pages | Codeberg Documentation&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://docs.codeberg.org/codeberg-pages/&#34;&gt;Codeberg Pages | Codeberg Documentation&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Forgejo has a github pages like feature... this might be nice to use sometime as I try to lean into forgejo, but the last thought/bookmark on using traefik + nginx in a compose stack feels simple too. I&#39;ll keep it in mind as I explore the forgejo setup at home&#xA;&#xA;---&#xA;&#xA;After reading it again I missed something. Codeberg pages is not exactly like github pages, seems more like the github readme thing - you have to use a repo called &#34;pages&#34; and then you&#39;ll get {username}.codeberg.page... so they own this TLD, and so I&#39;m not sure it&#39;s worth exploring this for homelab situations when traefik + nginx or something is pretty simple as well&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Use Traefik 2 with Nginx, Apache, or CaddyServer to Serve Stat…</title>
    <id>https://pype.dev/thoughts-803/</id>
    <updated>2025-08-19T11:28:37Z</updated>
    <published>2025-08-19T11:28:37Z</published>
    <link href="https://pype.dev/thoughts-803/" rel="alternate" type="text/html"></link>
    <summary type="text">Looks like a nice way to use git to back static sites, which I already do with my blog but this would be a simple way to</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://simplecto.com/use-traefik-with-nginx-apache-caddyserver-serve-static-files/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://simplecto.com/use-traefik-with-nginx-apache-caddyserver-serve-static-files/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Use Traefik 2 with Nginx, Apache, or CaddyServer to Serve Static Files&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://simplecto.com/use-traefik-with-nginx-apache-caddyserver-serve-static-files/&#34;&gt;Use Traefik 2 with Nginx, Apache, or CaddyServer to Serve Static Files&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Looks like a nice way to use git to back static sites, which I already do with my blog but this would be a simple way to centralize some content I like to serve up. Might make it easier to self-host everything as well!&#xA;&#xA;NOTE: this is in karakeep already&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-19 Notes</title>
    <id>https://pype.dev/2025-08-19-notes/</id>
    <updated>2025-08-19T05:53:46Z</updated>
    <published>2025-08-19T05:53:46Z</published>
    <link href="https://pype.dev/2025-08-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-18-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-18-notes ]]&#xA;&#xA;## Reflection&#xA;&#xA;- I wanted to read psalm 1 some this morning but am feeling like I should continue [[reflecting-on-romans-7-7-13]] perhaps for a few days...&#xA;&#xA;???+ note &#34;Psalm 1:2 (LEB)&#34;&#xA;&#xA;    2 Instead, in the law of Yahweh is his delight,  and on his law he meditates day and night.  &#xA;&#xA;- It&#39;s this meditation that I struggle to maintain for multiple days... In Hebrew its a word that can describe the sound a bear makes while it&#39;s chewing its food - a regular, consistent groaning over the food in their mouth... similarly we should be chewing on God&#39;s word, mulling it around in our heads and in this wisdom I feel the conviction to stay in Romans 7:7-13 for a little while&#xA;&#xA;## Wins&#xA;&#xA;- deleted 553 Signal chats today... was going to archive but then I thought &#34;why&#34;... dude just cut it&#xA;- killing it in runescape - level 40 attack tomorrow for sure&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflecting on Romans 7:7-13</title>
    <id>https://pype.dev/reflecting-on-romans-7-7-13/</id>
    <updated>2025-08-18T06:12:13Z</updated>
    <published>2025-08-18T06:12:13Z</published>
    <link href="https://pype.dev/reflecting-on-romans-7-7-13/" rel="alternate" type="text/html"></link>
    <summary type="text">Romans 7:7–7:13 (ESV): 7 What then shall we say? That the law is sin? By no means! Yet if it had not been for the law, I would not have known sin. For I...</summary>
    <content type="text">&#xA;## Passage&#xA;&#xA;Romans 7:7–7:13 (ESV): 7 What then shall we say? That the law is sin? By no&#xA;means! Yet if it had not been for the law, I would not have known sin. For I&#xA;would not have known what it is to covet if the law had not said, “You shall&#xA;not covet.” 8 But sin, seizing an opportunity through the commandment, produced&#xA;in me all kinds of covetousness. For apart from the law, sin lies dead. 9 I was&#xA;once alive apart from the law, but when the commandment came, sin came alive&#xA;and I died. 10 The very commandment that promised life proved to be death to&#xA;me. 11 For sin, seizing an opportunity through the commandment, deceived me and&#xA;through it killed me. 12 So the law is holy, and the commandment is holy and&#xA;righteous and good. 13 Did that which is good, then, bring death to me? By no&#xA;means! It was sin, producing death in me through what is good, in order that&#xA;sin might be shown to be sin, and through the commandment might become sinful&#xA;beyond measure. &#xA;&#xA;## Reflection&#xA;&#xA;As I was dimwittedly working through 1 John 3 for&#xA;[[olivet-mens-group-august-2025]] I found myself gravitating towards Romans 7&#xA;and 8 as it brings clarity to John&#39;s words about practicing sin vs being a&#xA;child of God.&#xA;&#xA;???+ note &#34;Personal&#34;&#xA;&#xA;    God&#39;s been good to me as I have started trying to be more focused in&#xA;    theological study and reflection... It has been long enough for my &#34;break&#34; to&#xA;    be over&#xA;&#xA;It goes without saying in Christian circles that Romans is a tough cookie...&#xA;Paul packs a lot in the letter and although I&#39;m focusing right now on 7 verses,&#xA;the context certainly matters when it comes to deeper study. As for me this&#xA;morning I believe God&#39;s calling me to reverse-sear my conscience in regards to&#xA;some persistent sins in my life. I write a little note in my notes for the olivet study:&#xA;&#xA;&gt; As I write this out, the Christian concept of &#34;setting the captives free&#34; and&#xA;jubilee and freedom strike my heart deeply. Just these phrases begin to call up&#xA;emotions. But as I look at my life right now, what am I doing that shouts&#xA;freedom? I spend more time lately playing games than being entrenched in&#xA;theological study, I think about work more than things which are noble and&#xA;praiseworthy, and I seem to purposefully focus on my own situations internally&#xA;rather than on God&#39;s grace (which I do externally a lot - but I feel this&#xA;tension inside - __a hook of doubt__)&#xA;&#xA;These aren&#39;t the motifs in the passage, but the conversation around sin in our&#xA;hearts spiderwebs throughout scripture very quickly if the conversation is to&#xA;be worth anything... Freedom is core in a Christian worldview, but am I free&#xA;and devoted to Jesus or a morally bankrupt slave to myself?&#xA;&#xA;So far I haven&#39;t even touched the passage so let me dive in a bit.&#xA;&#xA;???+ note &#34;&#34;&#xA;&#xA;    The rest of this post was dictated and transcribed via a STT utility I have at home. I often do this and rework my thoughts but here it&#39;s easier to word vomit the ideas and hope they make sense on the other side. I loosely edited it for readability but for whatever it&#39;s worth, this is moreso my thinking voice than my public speaking voice&#xA;&#xA;&#34;What then shall we say, that the law is sin? By no means! Yet if it had not been for the law I would not have known sin.&#34;&#xA;&#xA;And that feels to me a little bit like Paul saying what I&#39;ve heard other Christians today say — something like:&#xA;&#34;I didn&#39;t struggle with anger until I became a Christian and then it was a struggle!&#34;&#xA;&#xA;So there&#39;s that side of it.&#xA;&#xA;And then the other side of it is that God has &#34;written eternity on our hearts,&#34; has He not? And through Common Grace, do we not all understand very common morality?&#xA;&#xA;Aside from our worldviews, there are things that we know are wrong. Murdering is simply wrong. Another good example is something like cowardice—or like Paul will go on to say, covetousness.&#xA;&#xA;Whether you&#39;re a Christian or not, you wouldn&#39;t value covetousness or cowardice. Cultures across the world and across history reject these things.&#xA;&#xA;So, through becoming a Christian, the struggle with sin really begins — because it&#39;s the understanding not that something is just kind of morally wrong, but that you&#39;re violating the law of the Creator of the universe.&#xA;&#xA;Now, we don&#39;t want to dive in so deep that we reject the context (of Paul&#39;s thoughts in Romans 7:7–13). And so, I don&#39;t want to dissect these few verses too much.&#xA;&#xA;And so what&#39;s my reflection?&#xA;&#xA;I don&#39;t know.&#xA;&#xA;Sin is crouching at the door.&#xA;And it deceives me.&#xA;So, through the law, I learn what my sin is—it lets me name my killer.&#xA;&#xA;The law didn&#39;t bring death—it brings understanding of death, because it reveals sin, which produces death.&#xA;&#xA;But the part that I&#39;m not &#34;to&#34; in my heart yet is the end of the passage. Verse 13:&#xA;&#xA;&#34;Did that which is good then (the law) bring death to me? By no means! It was sin producing death in me through what is good (the law), in order that sin might be shown to be sin and through the commandment might become sinful beyond measure.&#34;&#xA;&#xA;And I think that that phrase &#34;sinful beyond measure&#34; is a reflection of Paul&#39;s understanding of sin in his life.&#xA;&#xA;Now, I claim I have the same mental understanding...&#xA;&#xA;Later on in Romans 7, Paul talks about his &#34;inner man&#34; and his mind being a slave to the law of the Spirit, but his body being a slave to sin.&#xA;&#xA;But can I really say that my mind is a slave to the law of the Spirit?&#xA;&#xA;I certainly would make a lot of theological points about it—but is it really?&#xA;&#xA;That&#39;s my reflection this morning.&#xA;&#xA;I&#39;m not as convicted over sin in my life, and so this reverse conscience searing needs to happen.&#xA;&#xA;---&#xA;&#xA;## Another Reflection&#xA;&#xA;As I come back here for a second day, I believe by the guidance of the Spirit,&#xA;I trust God to encourage and teach me through Paul&#39;s words&#xA;&#xA;How do I know what is sin (lawlessness) and what is not sin (ie. not lawless, ie. _lawful_)? It&#39;s through the law as noted above. &#xA;&#xA;What to do about this though? One day since some conviction settled into my heart certainly doesn&#39;t indicate anything about my life, but what else is relevant to this meditation?&#xA;&#xA;!!! note &#34;Psalm 1:1-2&#34; &#xA;&#xA;    1 Blessed is the man who does not walk in the advice of the wicked;  nor does he stand in the way of sinners;  nor does he sit in the assembly of mockers.  2 Instead, in the law of Yahweh is his delight,  and on his law he meditates day and night.  &#xA;&#xA;The &#34;law&#34; is _torah_... generally this is referring to a code of holy living.&#xA;Torah isn&#39;t &#34;the law&#34; how we understand the law, it&#39;s case-law for holy living.&#xA;Torah describes the flight of an arrow towards its target - it&#39;s the direction&#xA;of your life. &#xA;&#xA;So the psalmist says that it&#39;s in the constant meditation of God&#39;s law (God&#39;s direction for holy living) that a man is &#34;blessed&#34;. &#xA;&#xA;&gt; There&#39;s many words to use, but this word &#34;blessed&#34; is a Hebrew word used for when describing the good life of another person&#xA;&#xA;- Blessed is the man who meditates on the law of Yahweh&#xA;- The law brings knowledge of sin&#xA;- Furthermore, the law causes sin to &#34;become sinful beyond measure&#34;&#xA;- How? Via the constant meditation of the law of Yahweh - which Psalm 1:3 says&#xA;&#xA;!!! note &#34;Psalm 1:3&#34; &#xA;&#xA;    3 And so, he is like a tree planted by streams of water  that gives its fruit in its season;  its leaf also does not wither.  Therefore all that he does prospers.  &#xA;&#xA;Bible stuff is apart of my daily vocabulary with anyone. God&#39;s law is in my&#xA;mind, and hopefully my heart, every day. At the same time, the callousness is&#xA;present. It&#39;s Paul&#39;s lament about being the chief of sinners, and about the war&#xA;in his members (Romans 7/8)... &#xA;&#xA;The solution is this... day by day meditation - slightly more focused and&#xA;directed... God&#39;s blessing is absolutely on my lie - and the word for &#34;blessed&#34;&#xA;in Psalm 1 referring to _others_ describing the life of the blessed man as&#xA;blessed is very true for me - people around me know God&#39;s been good to me. So I&#xA;have every bit of faith that he will continue that goodness, and thankfully&#xA;conviction this morning and week to take small steps towards a more devoted&#xA;life to the meditation of God&#39;s law.&#xA;&#xA;---&#xA;&#xA;## Round 3&#xA;&#xA;Today the Bible Project app brought me to Isaiah 61 which coincides with this&#xA;extended reflection quite well as it&#39;s one of the places we get the image and&#xA;phrase of &#34;setting the captives free&#34; which is a Biblical theme I see Paul&#xA;leaning on at the end of Romans 7.&#xA;&#xA;!!! note &#34;Isaiah 61&#34;&#xA;&#xA;    1 The Spirit of the Lord Yahweh is upon me,&#xA;    because Yahweh has anointed me,  he has sent me to bring good news to the&#xA;    oppressed,  to bind up the brokenhearted,  to proclaim release to the captives&#xA;    and liberation to those who are bound,  &#xA;    2 to proclaim the year of Yahweh’s&#xA;    favor,  and our God’s day of vengeance,  to comfort all those in mourning,&#xA;    3 to give for those in mourning in Zion,  to give them a head wrap instead of&#xA;    ashes,  the oil of joy instead of mourning,  a garment of praise instead of a&#xA;    faint spirit.  And they will be called oaks of righteousness,  the planting of&#xA;    Yahweh, to show his glory.  &#xA;&#xA;    4 And they shall build the ancient ruins,  they&#xA;    shall erect the former deserted places.  And they shall restore the devastated&#xA;    cities,  the deserted places of many generations.  &#xA;    5 And strangers shall stand&#xA;    and feed your flocks,  and foreigners shall be your farmers and vinedressers.&#xA;    6 But you shall be called the priests of Yahweh,  you will be called servers of&#xA;    our God.  You shall eat the wealth of the nations,  and you shall boast in&#xA;    their riches.  &#xA;    7 Instead of your shame, a double portion,  and instead of&#xA;    insult, they will rejoice over their portion.  Therefore they will take a&#xA;    double portion in their land;  they shall possess everlasting joy.  &#xA;    8 For I, Yahweh, love justice,  hate robbery and injustice,  and I will&#xA;    faithfully give&#xA;    their reward,  and I will make an everlasting covenant with them.  &#xA;    9 And their&#xA;    descendants will be known among the nations,  and their offspring in the midst&#xA;    of the peoples.  All those who see them shall recognize them,  that they are&#xA;    descendants whom Yahweh has blessed.  &#xA;&#xA;    10 I will rejoice greatly in Yahweh;  my&#xA;    being shall shout in exultation in my God.  For he has clothed me with garments&#xA;    of salvation,  he has covered me with the robe of righteousness,  as a&#xA;    bridegroom adorns himself with a head wrap like a priest,  and as a bride&#xA;    adorns herself with her jewelry. &#xA;    11 For as the earth produces its sprout,  and&#xA;    as a garden makes its plants sprout,  so the Lord Yahweh will make&#xA;    righteousness sprout,  and praise before all the nations.  &#xA;&#xA;!!! warning &#34;&#34;&#xA;&#xA;    This isn&#39;t a reflection or study of Isaiah 61 - just a few notes as they pertain to my reflection on Romans 7 and 8 and the posture I have towards sin in my life&#xA;&#xA;This is a messianic prophecy delivered to the people of God in captivity to&#xA;spur the remnant of the faithful to continue hoping in the promises of Yahweh.&#xA;&#xA;Israel was in captivity more or less as discipline for violating God&#39;s word&#xA;pretty regularly... Consistent with my reflection so far - has &#34;sin become sin&#xA;beyond measure&#34; to me yet? No, just as it wasn&#39;t for Israel, and God allowed&#xA;His people to be enslaved multiple times as they turned to foreign gods... is&#xA;callousness to sin any different than turning to a foreign god? No, it&#39;s&#xA;exactly what it is.&#xA;&#xA;But thankfully the over-arching story is about Yahweh&#39;s faithfulness to His&#xA;people, and this prophecy is for those who exercise faithfulness to Yahweh....&#xA;that&#39;s the crux of my reflection on Romans 7, how can I claim the promises of&#xA;God if sin is so present in my life? I think the answer is that it&#39;s only&#xA;through the awakening of the Spirit that I can genuinely question my loyalty to&#xA;Yahweh and also acknowledge his loyalty to the Promise He brought me into. By&#xA;God&#39;s grace I&#39;m just a guy who the Lord has grace on, and I pray through daily&#xA;meditation my will becomes so conformed to the will of Jesus that I can&#xA;faithfully say &#34;sin has become beyond sin to me&#34;&#xA;&#xA;Praise God for Paul&#39;s words at the end of Romans 7&#xA;&#xA;!!! note &#34;Romans 7:24-25&#34;&#xA;&#xA;    24 Wretched man that I am! Who will deliver me from this body of death? 25 Thanks be to God through Jesus Christ our Lord! So then, I myself serve the law of God with my mind, but with my flesh I serve the law of sin.&#xA;&#xA;---&#xA;&#xA;## Round 4&#xA;&#xA;!!! note &#34;Romans 7:13&#34;&#xA;&#xA;    13 Did that which is good, then, bring death to me? By no means! It was sin, producing death in me through what is good, in order that sin might be shown to be sin, and through the commandment might become sinful beyond measure. &#xA;&#xA;This morning I don&#39;t know if it was another translation or the direct explicit&#xA;work of the Spirit but I feel like something clicked just a little bit here.&#xA;The law didn&#39;t bring sin (lawlessness), God&#39;s law pre-exists Torah (Genesis,&#xA;the trees), so the law says what is good and bad, and it&#39;s the brokenness of&#xA;humanity (sin) producing death in us/me and the production of death shows sin&#xA;to be what it is - sinful beyond measure&#xA;&#xA;So as I reflect here on Paul, Romans, and myself - what am I missing or what is&#xA;God recovering in me? This week has been pretty good concerning the areas of my&#xA;mind and life where I feel callous and hardened. The daily meditation can&#39;t NOT&#xA;be the reason - devotion in the morning, however minimal and before anything else,&#xA;is producing in me the will to do God&#39;s good work in my own life. I don&#39;t mean&#xA;giving money and doing charity - but in the privacy of my mind and day, do I&#xA;honor the Lord with every thought?&#xA;&#xA;The cliche but honest answer is no but I feel God&#39;s working in my heart, the&#xA;tug towards Heaven and away from the hellish pit of my own desires&#xA;&#xA;---&#xA;&#xA;## Round 5&#xA;&#xA;Verse 8b &#34;For apart from the law, sin lies dead.&#34;&#xA;&#xA;&gt; This reflection was done audibly and the transcription was modified slightly for this post&#xA;&#xA;I think there&#39;s quite a few interesting perspectives, maybe two that come to mind pretty quickly.&#xA;&#xA;For context, the rest of the verse is &#xA;&#xA;!!! note &#34;Romanas 7:8&#34;&#xA;&#xA;    but sin seizing an opportunity through the commandment produced in me all kinds of covetousness, for apart from the law, sin lies dead.&#xA;&#xA;So the first observation is sin gets its life and its effect (effectual power) through the conduit of the law.&#xA;And so the law says don&#39;t do X. That means we now have knowledge to not do X. &#xA;&#xA;And then it&#39;s like the existence of sin has to be presupposed because it&#39;s the very same sin as in Genesis three.&#xA;God&#39;s rule of the land said not to eat of the tree of the knowledge of good and bad, and sin seizing the opportunity through that commandment produced in Eve all kinds of covetousness.&#xA;&#xA;But it wasn&#39;t really __actually__ the command of God.&#xA;It was the snake.&#xA;So in that sense, depending on our interpretation of Genesis 3, which I will forego...&#xA;The snake is the embodiment of sin, and so we&#39;re not so concerned with the ontological origins of sin, but rather with processing its effect and consequences in our daily life.&#xA;And so that first perspective is to say that - for me, by God&#39;s grace, I know the law.&#xA;It means that by God&#39;s grace, sin has the opportunity to produce __things__ in me, and in that same breath of grace -&#xA;Jesus saves me.&#xA;That&#39;s the end of chapter seven.&#xA;&#xA;!!! note &#34;Romans 7:24-25&#34;&#xA;&#xA;    24 Wretched man that I am! Who will deliver me from this body of death? 25 Thanks be to God through Jesus Christ our Lord! So then, I myself serve the law of God with my mind, but with my flesh I serve the law of sin.&#xA;&#xA;The other perspective that I have on this right now is not inward looking, and so I don&#39;t want to harp on it and meditate much on other people.&#xA;But Christians certainly have internal (internal to the community of faith) conversations about the morality of non-Christians and what should be expected of non-believers.&#xA;As far as a moral life is concerned and there&#39;s various theological opinions and various worldviews, even within Christianity through which we can filter reality and people&#39;s actions and their moralities.&#xA;And so in that vein, perhaps something I see here is to read it almost backwards (transposed is a better word), &#xA;&#xA;&gt; sin lies dead apart from the law.&#xA;&#xA;And you think, I think, about our culture&#39;s hedonistic posture towards being a slave to our own desires.&#xA;American culture largely celebrates, or Western culture rather, largely celebrates the individual decision to do what the individual wants.&#xA;And we live in a culture where to shame others is itself shamed.&#xA;It is unacceptable to call people to higher standards of living.&#xA;But why should we (Christians) be surprised and why is this news and why do Christians spend time talking about it?&#xA;I think Paul gives us the answer.&#xA;&#34;Apart from the law&#34; (and the law is the direction in which we strive for holiness)&#xA;And so &#34;apart from that, sin lies dead&#34; meaning sin doesn&#39;t seize an opportunity through any commandment.&#xA;Because apart from the law sin can&#39;t be shown to be sinfulness.&#xA;That&#39;s verse 13.&#xA;&#xA;!!! note &#34;Romans 7:13&#34;&#xA;&#xA;    13 Did that which is good, then, bring death to me? By no&#xA;    means! It was sin, producing death in me through what is good, in order that&#xA;    sin might be shown to be sin, and through the commandment might become sinful&#xA;    beyond measure.&#xA;&#xA;So that last thought, it isn&#39;t so much that non-believers don&#39;t have the knowledge of good and bad.&#xA;The Bible says that God has written eternity on our hearts.&#xA;And we have moral discussions in the public square all the time, so people&#xA;certainly are aware of opinions about morality, and it is in the rebellion&#xA;against the good and moral positions where I&#39;m right now actually finding&#xA;security in **my** position as a __chosen child of God__ because honestly, I love debauchery, but (thankfully)&#xA;part of me hates it, and it&#39;s that part of me that hates it, that is the Spirit&#xA;in me, that is the grace of the Lord Jesus, saving me from this body of sin and death.&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-18 Notes</title>
    <id>https://pype.dev/2025-08-18-notes/</id>
    <updated>2025-08-18T06:11:28Z</updated>
    <published>2025-08-18T06:11:28Z</published>
    <link href="https://pype.dev/2025-08-18-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-17-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-17-notes ]]&#xA;&#xA;## Reflections&#xA;&#xA;- [[reflecting-on-romans-7-7-13]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-17 Notes</title>
    <id>https://pype.dev/2025-08-17-notes/</id>
    <updated>2025-08-17T05:28:56Z</updated>
    <published>2025-08-17T05:28:56Z</published>
    <link href="https://pype.dev/2025-08-17-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-16-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-16-notes ]]&#xA;&#xA;## Reflections&#xA;&#xA;- men&#39;s group yesterday was a fine conversation about a few things in 1 John 3,&#xA;primarily around what it means to &#34;practice&#34; lawlessness&#xA;- I have been lacking disicpline or devotion in my theological studies, and&#xA;with my time in general, so it&#39;s time to start being more faithful to the life&#xA;God wants for me&#xA;&#xA;## Runescape&#xA;&#xA;- so fun!&#xA;- finally looked up what splashing is for mage training - the staff + full suit of armor make sense finally&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-16 Notes</title>
    <id>https://pype.dev/2025-08-16-notes/</id>
    <updated>2025-08-16T05:55:55Z</updated>
    <published>2025-08-16T05:55:55Z</published>
    <link href="https://pype.dev/2025-08-16-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-15-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-15-notes ]]&#xA;&#xA;## Olivet&#xA;&#xA;- needed to have done more on [[olivet-mens-group-august-2025]]&#xA;- reflection on Romans 7/8 needs to continue... There&#39;s changes I need to make in my life, and I know I&#39;m pushing them off.&#xA;&#xA;## Runescape&#xA;&#xA;-  [[runescape-clients-and-settings]]&#xA;- much leveling via mobile play today... gonna be a problem in the near-term future I think :D&#xA;&#xA;## Others&#xA;&#xA;- [[when-i-learned-what-an-escape-room-was]]&#xA;- [[autism-and-steadfast-faith]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Runescape Clients and Settings</title>
    <id>https://pype.dev/runescape-clients-and-settings/</id>
    <updated>2025-08-15T11:12:57Z</updated>
    <published>2025-08-15T11:12:57Z</published>
    <link href="https://pype.dev/runescape-clients-and-settings/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! danger &#34;Note to future me&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note to future me&lt;/p&gt;&#xA;&lt;p&gt;Hey when you have to reinstall this, you NEED to use a Jagex launcher to launch runeline on Linux. TLDR: bolt from the discover store&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not a seasoned PC gamer, so launchers and game installers have been a tad&#xA;confusing to me over the years. Runescape has some clients now, and &lt;a href=&#34;https://runelite.net&#34;&gt;runelite&lt;/a&gt; is&#xA;apparently the primary third-party one. There are also plugins available!&lt;/p&gt;&#xA;&lt;h2 id=&#34;working-on-linux&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Working On Linux&lt;/span&gt; &lt;a href=&#34;#working-on-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To start I downloaded a third-party jagex launcher, &lt;a href=&#34;https://github.com/Adamcake/Bolt&#34;&gt;bolt&lt;/a&gt;, from the discover store&amp;hellip;&#xA;I use it to launch runelite. In runelite there&amp;rsquo;s a plugin menu, I installed the&#xA;gpu one and almost instantly the game came alive in a whole new way!&lt;/p&gt;&#xA;&lt;details class=&#34;admonition note&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Jagex Launcher&lt;/summary&gt;&#xA;&lt;p&gt;I linked my runescape account to a jagex account and you ahve to use the jagex launcher to launch runelite but the jagex launcher only works on windows - there&amp;rsquo;s a github to make it work on linux but I went with third-party jagex launcher bolt instead&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;gpu&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;GPU&lt;/span&gt; &lt;a href=&#34;#gpu&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The GPU one is great, makes the game look incredible&lt;/p&gt;&#xA;&lt;h3 id=&#34;default&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Default&lt;/span&gt; &lt;a href=&#34;#default&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250815175429_38bbc7f8.png&#34; alt=&#34;20250815175429_38bbc7f8.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;gpu-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;GPU&lt;/span&gt; &lt;a href=&#34;#gpu-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250815175450_bdc2753e.png&#34; alt=&#34;20250815175450_bdc2753e.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;stats&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stats&lt;/span&gt; &lt;a href=&#34;#stats&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a few that give nice timers for resources and stats for skill building&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250815175544_b4cdedbf.png&#34; alt=&#34;20250815175544_b4cdedbf.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Actions for each skill is the last thing you did that earned XP. So in my&#xA;screenshot I was mining iron and I have 10 actions left before leveling up - 1&#xA;action is mining 1 iron ore in this case&lt;/p&gt;&#xA;&lt;h2 id=&#34;end&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;End&lt;/span&gt; &lt;a href=&#34;#end&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m digging not just playing runescape again, but enjoying the ecosystem of tools around it. At the end of the day I&amp;rsquo;m realizing games are sets of data, and things like textures and effects can be loaded on top of that and rendered however you want (that the game/plugins support). So I&amp;rsquo;m very excited to dive back into a childhood favorite and relive the quests but now in GPU-rendered ray-traced goodness&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;It&#39;s not ray-traced but it sounded cool&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-15 Notes</title>
    <id>https://pype.dev/2025-08-15-notes/</id>
    <updated>2025-08-15T11:10:28Z</updated>
    <published>2025-08-15T11:10:28Z</published>
    <link href="https://pype.dev/2025-08-15-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-14-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-14-notes ]]&#xA;&#xA;## Runescape&#xA;&#xA;- started [[runescape-clients-and-settings]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Starting Old School Runescape Over Again</title>
    <id>https://pype.dev/starting-old-school-runescape-over-again/</id>
    <updated>2025-08-14T19:25:55Z</updated>
    <published>2025-08-14T19:25:55Z</published>
    <link href="https://pype.dev/starting-old-school-runescape-over-again/" rel="alternate" type="text/html"></link>
    <summary type="text">I got an itch to play a new game recently and after squabbling with my PS4 and my PC I decided to go old school literally with Old School Runescape... I...</summary>
    <content type="html">&lt;h2 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt; &lt;a href=&#34;#intro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I got an itch to play a new game recently and after squabbling with my PS4 and&#xA;my PC I decided to go old school literally with Old School Runescape&amp;hellip; I&#xA;played this game so much as a kid and it&amp;rsquo;s so well preserved in 2025. I tried&#xA;to bang out a ton today and decided to look through a few guides to try to&#xA;level up effeciently.&lt;/p&gt;&#xA;&lt;h2 id=&#34;quests&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Quests&lt;/span&gt; &lt;a href=&#34;#quests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a handful of quests and several are pretty attainable early on that&#xA;give enough XP to blitz through the early levels of many skills&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Today I made it through doric&amp;rsquo;s quest which bumped be&#xA;through to level 20+ mining. Another player gave me a black pick-axe which made&#xA;mining some iron pretty easy. From there I wanted to level up smithing a bit -&#xA;and the guides say that &amp;ldquo;The Knight&amp;rsquo;s Sword&amp;rdquo; is a good quest for it, though&#xA;it&amp;rsquo;s recommended to be combat level 20 before doing it&amp;hellip; I decided to not&#xA;worry about that, I&amp;rsquo;ve picked red-berries for a pie and am going to bring a&#xA;haul of steaks and my black pick while I try to get the bluerite ore and run&#xA;away from the ice giants that I know will destroy me at my whopping combat&#xA;level 6&amp;hellip; but for first day back I&amp;rsquo;m feeling great.&lt;/p&gt;&#xA;&lt;p&gt;After that my smithing levels should be in the teens&amp;hellip; Not sure what we&amp;rsquo;ll do after that&lt;/p&gt;&#xA;&lt;p&gt;I did do the Cook&amp;rsquo;s Assistant while gathering things for the Knight&amp;rsquo;s Sword,&#xA;easy peasy and gets me access to the oven in Lumbridge Castle.&lt;/p&gt;&#xA;&lt;h2 id=&#34;plans&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Plans&lt;/span&gt; &lt;a href=&#34;#plans&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m using Affine to map out my questing - the mind map is great for tracking&#xA;why I&amp;rsquo;m 6 mini-side-quests removed from the original thing I was after.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250815003021_4a18defc.png&#34; alt=&#34;20250815003021_4a18defc.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;update-01&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Update 01&lt;/span&gt; &lt;a href=&#34;#update-01&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After about 2 weeks I&amp;rsquo;ve done most of othe free-to-play stuff, with just&#xA;another 2 quests to go. The game is so faitful to what I remember.&lt;/p&gt;&#xA;&lt;p&gt;I was thinking about how I would tackle a new account, and I am starting to&#xA;understand the simple appeal of having alternate accounts - a &amp;ldquo;pure mage&amp;rdquo; for&#xA;example&amp;hellip;. If money were no object then having a pure ranger and mage account&#xA;would be pretty fun, and with a powerful main I think it&amp;rsquo;s possible to make&#xA;plenty of in-game gold and just trade between accounts. To my knowledge, this&#xA;doesn&amp;rsquo;t break any of the Jagex rules.&lt;/p&gt;&#xA;&lt;p&gt;Putting the idea of a &amp;ldquo;pure&amp;rdquo; anything aside, I was thinking about how I would&#xA;more efficiently have played to the point in the game I&amp;rsquo;m at right now&amp;hellip; For&#xA;gaining any combat xp the goal is the &lt;code&gt;rune scimitar&lt;/code&gt;, which requires level 40&#xA;&lt;code&gt;attack&lt;/code&gt; to wield. The stronger you are (ie. higher &lt;code&gt;strength&lt;/code&gt;) the more xp you&#xA;can gain per second. This means upping &lt;code&gt;attack&lt;/code&gt; to level 40 with the best&#xA;scimitar you can at every level until &lt;code&gt;rune&lt;/code&gt; at 40, and then swapping to the&#xA;strength-gaining combat style and theoretically training &lt;code&gt;strength&lt;/code&gt; to level 99,&#xA;and then train &lt;code&gt;defense&lt;/code&gt; and &lt;code&gt;attack&lt;/code&gt; from &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;40&lt;/code&gt; respectively to &lt;code&gt;99&lt;/code&gt; is&#xA;the quickest way to do it.&lt;/p&gt;&#xA;&lt;p&gt;The issue with this is that due to the level-scaling of the game, it&amp;rsquo;s totally&#xA;impractical to do this and would suck all the fun out of the game. I think I&#xA;handled my melee combat leveling pretty well by keeping the 3 stats, &lt;code&gt;attack&lt;/code&gt;,&#xA;&lt;code&gt;strength&lt;/code&gt;, &lt;code&gt;defense&lt;/code&gt; more or less in step with each other up to 40, and from&#xA;then on began focusing primarily on &lt;code&gt;strength&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve also spent plenty of time on &lt;code&gt;ranged&lt;/code&gt; and &lt;code&gt;magic&lt;/code&gt; but these are expensive&#xA;to train quickly (and quickly isn&amp;rsquo;t even THAT fast) due to resource consumption&#xA;(arrows / runes). Now, I have plenty of resources in game, so training these&#xA;has been fine, but in a more vanilla situation they could mostly be forgotten&#xA;about until you&amp;rsquo;ve leveled up in &lt;code&gt;crafting&lt;/code&gt; or &lt;code&gt;mining&lt;/code&gt; and &lt;code&gt;smithing&lt;/code&gt; for the&#xA;sake of making some money.&lt;/p&gt;&#xA;&lt;p&gt;On that note, combat can be paused from the onset and one can jump right to the&#xA;mines with tin + copper -&amp;gt; iron or else tan cowhides and craft leather&amp;hellip;&#xA;either way, upgrading these skills opens the door for money-making routines and&#xA;if you have a good source of income in the game, then buying runes and arrows&#xA;for training is quite simple at the &lt;code&gt;grand exchange&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are a few guides on the &amp;ldquo;optimal&amp;rdquo; way to play through the game depending&#xA;on what you want to optimize. Personally, upon thinking about it through writing I can&#xA;see how there&amp;rsquo;s not a &amp;ldquo;one right way&amp;rdquo; to play the game &amp;ldquo;most efficiently&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;If I were to start another account, not as one of these fancy schmancy &amp;ldquo;pure&amp;rdquo;&#xA;ones, I think I would train my melee stats to 40 via cows, chickens, and giant&#xA;frogs (then doubling up on prayer via &lt;code&gt;big bones&lt;/code&gt;). The reason for this is that&#xA;there&amp;rsquo;s places to mine and fish where the enemies are in level ranges 20-30 and&#xA;it&amp;rsquo;s convenient to avoid hostility (ie. being attacked on site)&#xA;(south-east varrock mine for example isn&amp;rsquo;t NEXT to the dark wizards, but they&#xA;are close and if you are sub combat level 21 or something, they are hostile&#xA;towards you).&lt;/p&gt;&#xA;&lt;p&gt;The other skills I hadn&amp;rsquo;t thought about from the perspective of a guide are&#xA;firemaking, fishing, cooking, and woodcutting. Typically they&amp;rsquo;re pretty easy to&#xA;train together, but it&amp;rsquo;s also really easy to focus on cooking by itself east of&#xA;Barbarian Village where folks are trainign fishing by just dropping raw fish.&#xA;Coincidentally, that&amp;rsquo;s one of the fastest ways to level up fishing as well&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve played the game these last 2 weeks I see that with enough money in the&#xA;game you are better off staying laser-focused on one skill at a time and then&#xA;buying the resoures needed for the other skills. For example, you can train&#xA;combat and prayer with giant frogs pretty effeciently since they drop &lt;code&gt;big bones&lt;/code&gt;. But it&amp;rsquo;s faster to just focus on killing the frogs for melee xp, and&#xA;then buying big bones to do focused bone-burying sessions at a bank, is going&#xA;to be a better use of time, but at the cost of buying the bones instead of&#xA;harvesting yourself. If you resign youself to this pattern of play, the game&#xA;pace moves a little quicker, the grind isn&amp;rsquo;t so exhausting, and the enjoyment&#xA;is a big lighter (in a good way)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Setting up a Self-Hosted Forgejo Actions Runner with Docker Co…</title>
    <id>https://pype.dev/thoughts-797/</id>
    <updated>2025-08-14T11:30:54Z</updated>
    <published>2025-08-14T11:30:54Z</published>
    <link href="https://pype.dev/thoughts-797/" rel="alternate" type="text/html"></link>
    <summary type="text">As I explore forgjeo this post has a title that sounds very promising! I would like everything to be a docker compose st</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://linus.dev/posts/setting-up-a-self-hosted-forgejo-actions-runner-with-docker-compose/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://linus.dev/posts/setting-up-a-self-hosted-forgejo-actions-runner-with-docker-compose/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Setting up a Self-Hosted Forgejo Actions Runner with Docker Compose — Linus Groh&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://linus.dev/posts/setting-up-a-self-hosted-forgejo-actions-runner-with-docker-compose/&#34;&gt;Setting up a Self-Hosted Forgejo Actions Runner with Docker Compose — Linus Groh&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;As I explore forgjeo this post has a title that sounds very promising! I would like everything to be a docker compose stack for now and I&#39;m struggling a bit with the runner installation - I might be over-complicating it but some parts of the docs aren&#39;t as clear as I want them to be - hopefully this post is a good supplement&#xA;&#xA;---&#xA;&#xA;EDIT:&#xA;&#xA;I&#39;ve read through this - it&#39;s definitely older than forgejo docs on compose, but I like the setup better... It&#39;s more of what I would&#39;ve guessed whereas the official docs have a `dind` image being used it looks like to proxy the tcp traffic from the runner through to a docker engine running in a containerized environment... now that I say it out loud maybe I do like that better... regardless, looking forward to having some self-hosted actions running before EOD&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pair AceGamer Wireless PS4 Controller With PC</title>
    <id>https://pype.dev/pair-acegamer-wireless-ps4-controller-with-pc/</id>
    <updated>2025-08-14T06:51:12Z</updated>
    <published>2025-08-14T06:51:12Z</published>
    <link href="https://pype.dev/pair-acegamer-wireless-ps4-controller-with-pc/" rel="alternate" type="text/html"></link>
    <summary type="text">I bought a $20 PS4 knock-off controller recently as my PS4 controllers are 12 years old (to me!) and I bought them used before that... the instructions for a...</summary>
    <content type="html">&lt;p&gt;I bought a $20 PS4 knock-off controller recently as my PS4 controllers are 12&#xA;years old (to me!) and I bought them used before that&amp;hellip; the instructions for a&#xA;$20 controller are obviously bad but a godsend redittor discovered the hidden&#xA;secret to pair this device with my computer! Instructions (for ps4) say to plug&#xA;it in, hit the home button, and you&amp;rsquo;re paired. Now, that didn&amp;rsquo;t work on PC&#xA;obviously, but it ALSO didn&amp;rsquo;t work on my PS4&amp;hellip; Unfortunte! It works wired just&#xA;fine, but turns out the magic to send the thing into traditional Bluetooth&#xA;Pairing Mode is to hold the home and share buttons down - wait for a rapid few&#xA;blinks - then you&amp;rsquo;ll see the controller in your bluetooth pairing menu!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250814115137_34c132cd.png&#34; alt=&#34;20250814115137_34c132cd.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-14 Notes</title>
    <id>https://pype.dev/2025-08-14-notes/</id>
    <updated>2025-08-14T06:21:21Z</updated>
    <published>2025-08-14T06:21:21Z</published>
    <link href="https://pype.dev/2025-08-14-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-13-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-13-notes ]]&#xA;&#xA;&#xA;## Forgejo&#xA;&#xA;- need to setup my runner but I then I got [[starting-old-school-runescape-over-again]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-13 Notes</title>
    <id>https://pype.dev/2025-08-13-notes/</id>
    <updated>2025-08-13T09:42:01Z</updated>
    <published>2025-08-13T09:42:01Z</published>
    <link href="https://pype.dev/2025-08-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-12-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-12-notes ]]&#xA;&#xA;&#xA;## Pilgrim&#39;s Creek&#xA;&#xA;- fish story about studying the same fish every day to become a good biologist&#xA;- discussed many things, didn&#39;t actually record today&#xA;- 4 hour chat... oof lol&#xA;&#xA;## Forjeo&#xA;&#xA;- spun it up (again?)&#xA;- what I have up can&#39;t stay up - I had to `chown 777` the docker volume and idk why... will debug later, for now just playing around&#xA;  - migrate function for my blog was easy&#xA;  - need to learn a thing or 2 about forjeo actions now&#xA;    - looks like I&#39;ll add a runner service, and a docker-in-docker service as a way for the runner to do docker stuff I guess... why don&#39;t we just give the runner the docker socket?&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Proxy Pull Docker Images From Self-Hosted Container Registry Through Self-Hosted Repoflow</title>
    <id>https://pype.dev/proxy-pull-docker-images-from-self-hosted-container-registry-through-self-hosted-repoflow/</id>
    <updated>2025-08-12T06:59:02Z</updated>
    <published>2025-08-12T06:59:02Z</published>
    <link href="https://pype.dev/proxy-pull-docker-images-from-self-hosted-container-registry-through-self-hosted-repoflow/" rel="alternate" type="text/html"></link>
    <summary type="text">This post is a short write-up of an issue I had while exploring Reploflow - a super solid artifactory-esq replacement for the homelab (and enterprise!). I&#39;ve...</summary>
    <content type="html">&lt;p&gt;This post is a short write-up of an issue I had while exploring &lt;a href=&#34;https://repoflow.io&#34;&gt;Reploflow&lt;/a&gt; - a&#xA;super solid artifactory-esq replacement for the homelab (and enterprise!). I&amp;rsquo;ve been playing with&#xA;it and have tried to setup a few artifact repos that I&amp;rsquo;m familiar with - docker&#xA;and pypi.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pypi&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;PyPi&lt;/span&gt; &lt;a href=&#34;#pypi&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This isn&amp;rsquo;t a post about repoflow, but I had an issue with pypi and Tomer was&#xA;EXTREMELY responsive in helping to fix my issue and patch repoflow within a day&#xA;of me reporting the issue via email!&lt;/p&gt;&#xA;&lt;h2 id=&#34;docker&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Docker&lt;/span&gt; &lt;a href=&#34;#docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For docker I have a few options I just wanted to see work - obviously&#xA;proxy pull from Dockerhub for ease, but also in the interim I&amp;rsquo;d like to proxy&#xA;pull from my original container registry to avoid having to update any homelab config just yet.&#xA;Now, obviously I&amp;rsquo;ll have to update all my build pipelines to start using&#xA;repoflow, and my homelab configuration to reference the repoflow docker&#xA;repository rather than my existing registry.&lt;/p&gt;&#xA;&lt;p&gt;But there&amp;rsquo;s something to bear in mind if maintaining that middle registry -&#xA;turns out a there&amp;rsquo;s a default namespace in dockerhub &lt;code&gt;/library/&lt;/code&gt; and repoflow&#xA;expects this standard across any docker registry, so it&amp;rsquo;s pull paths fully&#xA;resolve to an incorrect tag if you don&amp;rsquo;t take this into account in your&#xA;existing infrastructure.&lt;/p&gt;&#xA;&lt;p&gt;TLDR: if you tag an image &lt;code&gt;myregistry/ubuntu:latest&lt;/code&gt; and push it&#xA;then try to pull it back through repoflow then repoflow expects the image to be&#xA;&lt;code&gt;myregistry/library/ubuntu:latest&lt;/code&gt;. I think repoflow should support&#xA;configurating the namespace/org for the images - but in the meantime I can&#xA;go find all my images and update my build scripts to add /library/ to my&#xA;tags&amp;hellip; or while I&amp;rsquo;m doing that I can just push to repoflow directly&amp;hellip; All in&#xA;all, nice little lesson on namespaces in docker repos and third-party tooling.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-12 Notes</title>
    <id>https://pype.dev/2025-08-12-notes/</id>
    <updated>2025-08-12T05:42:32Z</updated>
    <published>2025-08-12T05:42:32Z</published>
    <link href="https://pype.dev/2025-08-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-11-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-11-notes ]]&#xA;&#xA;## Thoughts&#xA;&#xA;- apprise needs to be the notification pillar...&#xA;  - quadtask should just use it&#xA;  - soonish&#xA;  - $HOME (brainstorm an easier codename here)&#xA;&#xA;- with repoflow coming up, maybe forjeo is worth spinning up as well&#xA;&#xA;&#xA;## Wins&#xA;&#xA;- sent 2 compassion letters this morning - had almost been 30 days since receiving Ebessa&#39;s.&#xA;- repoflow docker push works after Tomer pointed out a repo setting aside from public/private&#xA;&#xA;```&#xA;  ✗ docker push repoflow.paynepride.com/foo/docker-local/audiomass:latest&#xA;  The push refers to repository [repoflow.paynepride.com/foo/docker-local/audiomass]&#xA;  5f70bf18a086: Pushed &#xA;  92aaf4e79f64: Pushed &#xA;  f91eb324f949: Pushed &#xA;  416bbf08d03f: Pushed &#xA;  097100c76c15: Pushed &#xA;  latest: digest: sha256:7ec012b0d0ace30aa9cb5ccd718ab0416fbed367243b6c738a9f52f58bc64738 size: 1362&#xA;&#xA;```&#xA;&#xA;It also works with my registry if I force `/library/` namespace in my tags&#xA;&#xA;```&#xA;&#xA;nic in homelab-mono/python/test-repoflow-pypi   main   ×1  ×7  ×2 via   v3.12.8(test-repoflow-pypi)   (dev) 󰒄 &#xA;❯ docker tag registry.paynepride.com/audiomass:latest registry.paynepride.com/library/audiomass:latest         &#xA;&#xA;nic in homelab-mono/python/test-repoflow-pypi   main   ×1  ×7  ×2 via   v3.12.8(test-repoflow-pypi)   (dev) 󰒄 &#xA;❯ docker push registry.paynepride.com/library/audiomass                                               &#xA;Using default tag: latest&#xA;The push refers to repository [registry.paynepride.com/library/audiomass]&#xA;5f70bf18a086: Mounted from dad-can-i-wear &#xA;92aaf4e79f64: Mounted from audiomass &#xA;f91eb324f949: Mounted from audiomass &#xA;416bbf08d03f: Mounted from audiomass &#xA;097100c76c15: Mounted from audiomass &#xA;latest: digest: sha256:7ec012b0d0ace30aa9cb5ccd718ab0416fbed367243b6c738a9f52f58bc64738 size: 1362&#xA;&#xA;nic in homelab-mono/python/test-repoflow-pypi   main   ×1  ×7  ×2 via   v3.12.8(test-repoflow-pypi)   (dev) 󰒄 &#xA;❯ docker pull repoflow.paynepride.com/foo/paynepride/audiomass:latest&#xA;latest: Pulling from foo/paynepride/audiomass&#xA;Digest: sha256:7ec012b0d0ace30aa9cb5ccd718ab0416fbed367243b6c738a9f52f58bc64738&#xA;Status: Downloaded newer image for repoflow.paynepride.com/foo/paynepride/audiomass:latest&#xA;repoflow.paynepride.com/foo/paynepride/audiomass:latest&#xA;```&#xA;&#xA;- fixed the pull through dockerhub by removing my dockerhub credentials from repoflow remote repository configuration!&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-11 Notes</title>
    <id>https://pype.dev/2025-08-11-notes/</id>
    <updated>2025-08-11T07:26:45Z</updated>
    <published>2025-08-11T07:26:45Z</published>
    <link href="https://pype.dev/2025-08-11-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-10-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-10-notes ]]&#xA;&#xA;## Repoflow&#xA;&#xA;- talking with Tomer about my dockerhub issues now&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>A Simple Lua Plugin To Find My Drafts</title>
    <id>https://pype.dev/a-simple-lua-plugin-to-find-my-drafts/</id>
    <updated>2025-08-10T20:56:33Z</updated>
    <published>2025-08-10T20:56:33Z</published>
    <link href="https://pype.dev/a-simple-lua-plugin-to-find-my-drafts/" rel="alternate" type="text/html"></link>
    <summary type="text">I used windsurf to write daily-notes-neovim-plugin for navigating my daily notes in neovim.</summary>
    <content type="text">&#xA;I used windsurf to write [[daily-notes-neovim-plugin]] for navigating my daily notes in neovim.&#xA;&#xA;For a while now I&#39;ve wanted a way to see my blog drafts... and tonight finally got the massive courage to prompt gpt-5 to build it for me...&#xA;&#xA;## Screenshot&#xA;&#xA;&#xA;![20250811020234_e0c02600.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250811020234_e0c02600.png)&#xA;&#xA;## Code&#xA;&#xA;```lua&#xA;---@diagnostic disable: undefined-global&#xA;-- Blogging plugin: find draft blog posts under `pages/`&#xA;-- Draft = YAML front matter contains `published: false` (case-insensitive)&#xA;&#xA;local M = {}&#xA;&#xA;-- Read file and return YAML front matter block as string, or nil&#xA;local function read_front_matter(path)&#xA;  local fh = io.open(path, &#34;r&#34;)&#xA;  if not fh then&#xA;    return nil&#xA;  end&#xA;  local content = fh:read(&#34;*a&#34;)&#xA;  fh:close()&#xA;  if not content then&#xA;    return nil&#xA;  end&#xA;&#xA;  -- Front matter starts with --- on first line and ends with --- on its own line&#xA;  -- Support optional CRLF&#xA;  local start_s, start_e = content:find(&#34;^%-%-%-%s*\r?\n&#34;)&#xA;  if not start_e then&#xA;    return nil&#xA;  end&#xA;  local fm_end_s, fm_end_e = content:find(&#34;\n%-%-%-%s*\r?\n&#34;, start_e + 1)&#xA;  if not fm_end_s then&#xA;    return nil&#xA;  end&#xA;  -- Extract between the fence lines (exclude the starting and ending --- lines)&#xA;  local front_matter = content:sub(start_e + 1, fm_end_s)&#xA;  return front_matter&#xA;end&#xA;&#xA;-- Determine if a file is a draft by inspecting front matter for published: false&#xA;function M._is_draft(path)&#xA;  local fm = read_front_matter(path)&#xA;  if not fm then&#xA;    return false&#xA;  end&#xA;  -- Find a line starting with `published:` and capture the value&#xA;  -- Trim comments and quotes, compare case-insensitively&#xA;  local value = fm:match(&#34;[Pp][Uu][Bb][Ll][Ii][Ss][Hh][Ee][Dd]%s*:%s*([^\n\r]+)&#34;)&#xA;  if not value then&#xA;    return false&#xA;  end&#xA;  -- strip inline comments starting with # and surrounding quotes/space&#xA;  value = value:gsub(&#34;#.*$&#34;, &#34;&#34;)&#xA;  value = value:gsub(&#39;&#34;&#39;, &#34;&#34;):gsub(&#34;&#39;&#34;, &#34;&#34;)&#xA;  value = value:gsub(&#34;^%s+&#34;, &#34;&#34;):gsub(&#34;%s+$&#34;, &#34;&#34;)&#xA;  local v = value:lower()&#xA;  if v == &#34;false&#34; or v == &#34;no&#34; or v == &#34;0&#34; then&#xA;    return true&#xA;  end&#xA;  return false&#xA;end&#xA;&#xA;-- Telescope picker for draft posts&#xA;function M.find_drafts()&#xA;  local ok_pickers, pickers = pcall(require, &#34;telescope.pickers&#34;)&#xA;  if not ok_pickers then&#xA;    vim.notify(&#34;telescope.nvim not available&#34;, vim.log.levels.ERROR)&#xA;    return&#xA;  end&#xA;  local finders = require(&#34;telescope.finders&#34;)&#xA;  local previewers = require(&#34;telescope.previewers&#34;)&#xA;  local conf = require(&#34;telescope.config&#34;).values&#xA;  local actions = require(&#34;telescope.actions&#34;)&#xA;  local action_state = require(&#34;telescope.actions.state&#34;)&#xA;&#xA;  -- Collect markdown files under pages/&#xA;  local files = vim.fn.glob(&#34;pages/**/*.md&#34;, false, true)&#xA;  local drafts = {}&#xA;  for _, f in ipairs(files) do&#xA;    if M._is_draft(f) then&#xA;      table.insert(drafts, f)&#xA;    end&#xA;  end&#xA;&#xA;  if #drafts == 0 then&#xA;    vim.notify(&#34;No draft blog posts found in pages/&#34;, vim.log.levels.INFO)&#xA;    return&#xA;  end&#xA;&#xA;  -- Simple, version-agnostic entry maker&#xA;  local function entry_maker_fn(line)&#xA;    return {&#xA;      value = line,&#xA;      ordinal = line,&#xA;      display = vim.fn.fnamemodify(line, &#34;:~:.&#34;) or line,&#xA;      path = line,&#xA;    }&#xA;  end&#xA;&#xA;  -- Use Telescope builtin find_files with a custom command that lists only drafts.&#xA;  -- This guarantees previews and matches the style of other file pickers.&#xA;  local tmpfile = vim.fn.tempname()&#xA;  local ok_write, err = pcall(function()&#xA;    local fh = assert(io.open(tmpfile, &#34;w&#34;))&#xA;    for _, f in ipairs(drafts) do&#xA;      fh:write(f .. &#34;\n&#34;)&#xA;    end&#xA;    fh:close()&#xA;  end)&#xA;  if not ok_write then&#xA;    vim.notify(&#34;Failed to prepare drafts list: &#34; .. tostring(err), vim.log.levels.ERROR)&#xA;    return&#xA;  end&#xA;&#xA;  local builtin = require(&#34;telescope.builtin&#34;)&#xA;  builtin.find_files({&#xA;    prompt_title = &#34;Draft Blog Posts&#34;,&#xA;    -- cat the tmp list so Telescope treats it like find output&#xA;    find_command = { &#34;bash&#34;, &#34;-lc&#34;, string.format(&#39;cat %q&#39;, tmpfile) },&#xA;    attach_mappings = function(prompt_bufnr, map)&#xA;      local actions = require(&#34;telescope.actions&#34;)&#xA;      actions.close:enhance({&#xA;        post = function()&#xA;          os.remove(tmpfile)&#xA;        end,&#xA;      })&#xA;      return true&#xA;    end,&#xA;  })&#xA;end&#xA;&#xA;-- Expose a user command similar to daily plugin style&#xA;vim.api.nvim_create_user_command(&#34;BlogDrafts&#34;, function()&#xA;  M.find_drafts()&#xA;end, {})&#xA;&#xA;return M&#xA;&#xA;&#xA;```&#xA;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>AudioMass</title>
    <id>https://pype.dev/audiomass/</id>
    <updated>2025-08-10T14:17:43Z</updated>
    <published>2025-08-10T14:17:43Z</published>
    <link href="https://pype.dev/audiomass/" rel="alternate" type="text/html"></link>
    <summary type="text">I edit our church&#39;s recorded sermons every week and upload them to our website. It&#39;s very simple, and the editing is just cutting the audio file down on the...</summary>
    <content type="html">&lt;p&gt;I edit our church&amp;rsquo;s recorded sermons every week and upload them to our website.&#xA;It&amp;rsquo;s very simple, and the editing is just cutting the audio file down on the&#xA;front and back sides of extra stuff picked up while the mic was on. I&amp;rsquo;ve been&#xA;doing this for a while using Davinci Resolve which is WAY too heavy for&#xA;trimming audio files but I&amp;rsquo;m loosely familiar with it and so I just have been&#xA;dealing with the pain of long start up, overly complicated organization, etc.&#xA;Well it&amp;rsquo;s been buggy on Aurora for me and a few weeks ago I got sick of it&#xA;finally and tried KdenLive&amp;hellip;. Now this is a great tool, but again I&amp;rsquo;m just&#xA;cutting up some audio files, why is this hard?&lt;/p&gt;&#xA;&lt;p&gt;Double finally I just did some research and after a few minutes found&#xA;&lt;a href=&#34;https://github.com/pkalogiros/AudioMass&#34;&gt;audiomass&lt;/a&gt; which I immediately forked&#xA;and dockerized cause it&amp;rsquo;s so simple and beautiful!&lt;/p&gt;&#xA;&lt;p&gt;Now I have a little webapp to trim these files from - almost such that the tech&#xA;lead on Sunday could maybe do this instead of me!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250810191909_cc0dc2d7.png&#34; alt=&#34;20250810191909_cc0dc2d7.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;You can check it out on &lt;a href=&#34;https://github.com/pypeaday/audiomass&#34;&gt;my github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;clone&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;http://localhost:5056&lt;/code&gt; to begin trimming audio locally!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-10 Notes</title>
    <id>https://pype.dev/2025-08-10-notes/</id>
    <updated>2025-08-10T05:52:42Z</updated>
    <published>2025-08-10T05:52:42Z</published>
    <link href="https://pype.dev/2025-08-10-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-09-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-09-notes ]]&#xA;&#xA;## New&#xA;&#xA;- trying out [https://github.com/matda59/ChoresRewards](ChoresRewards). It looks obviously vibe-coded, could re-vibe it myself if it looks great... Needing a way at home to help track and reward chores for both myself and the kids now&#xA;  - it&#39;s ok... have to put the pin code in everypage refresh which is super annoying&#xA;  - rewrite in fastapi with easier auth mechanisms would be nice&#xA;&#xA;## Issues&#xA;&#xA;- repoflow pypi&#xA;  - can&#39;t pip install from repoflow with remote repo configured for pypi with public access&#xA;  - emailed tomer&#xA;  - have gone back and forth several times - very responsive guy... makes me even more exicted for the project&#xA;  - Tomer has been very helpful - we iterated async today and got the pypi issue resolved&#xA;&#xA;- repoflow dockerhub&#xA;  - unfortunately have issues with remote repos for dockerhub and my self-hosted container registry... &#xA;  - sent tomer another email&#xA;&#xA;- traefik logs dahsboard&#xA;  - tried to spin it up but it&#39;s confusing&#xA;  - otel and file logs... do i need both?&#xA;  - traefik config failing to be parsed when I add the otel config&#xA;&#xA;## Wins:&#xA;&#xA;- updated my [[daily-notes-neovim-plugin#Update]] plugin to auto-add &#34;yesterday: &#34; at the top of my new notes with the most previous day&#39;s wikilink pasted in there&#xA;- started a blogging plugin with shortcut to bring up all my drafts&#xA;  - [[a-simple-lua-plugin-to-find-my-drafts]]&#xA;- printer got all clogged up the other day - this glow in the dark filament is&#xA;challenging sometimes... after much toil this morning I was able to pull it all&#xA;the way out of the extruder mechanism and get Rob&#39;s print going in boring white&#xA;for now&#xA;&#xA;- [[quadtask]] is deployed from my desktop now&#xA;  - litestream backup working beautifully&#xA;&#xA;- stood up [[audiomass]] and it&#39;s gonna save me anywhere from 10-60 minutes every Sunday!&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-09 Notes</title>
    <id>https://pype.dev/2025-08-09-notes/</id>
    <updated>2025-08-09T06:47:48Z</updated>
    <published>2025-08-09T06:47:48Z</published>
    <link href="https://pype.dev/2025-08-09-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-08-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-08-notes ]]&#xA;&#xA;## RepoFlow&#xA;&#xA;- requested free license for [repoflow](https://docs.repoflow.io/Self-Hosting/licensing) which I might be able to use for my platform artifact storage at home&#xA;- Got it spun up, been talking with Tomer, the guy who sent me the license.&#xA;- repoflow is like an artifactory replacement - artifact storage... overkill for my homelab, but interesting. And might be a component I package up with $HOME... need to have a good name for that thing still&#xA;&#xA;## Things&#xA;&#xA;-  Will plan to finish  [[olivet-mens-group-august-2025]] this week for next saturday&#xA;- would like to write mote about [[when-i-learned-what-an-escape-room-was]]&#xA;- need temp graph on [[dad-can-i-wear-this]] but man windsurf has sucked at adding this the last few times I&#39;ve tried and I ain&#39;t no web dev!&#xA;&#xA;Been hard to be motivated to push through on almost anything lately... trying at least to just not lose sight of things I want to do and to do small things as I can...&#xA;&#xA;## Wins&#xA;&#xA;- stood up repoflow for first time&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-08 Notes</title>
    <id>https://pype.dev/2025-08-08-notes/</id>
    <updated>2025-08-08T08:54:22Z</updated>
    <published>2025-08-08T08:54:22Z</published>
    <link href="https://pype.dev/2025-08-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-07-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-07-notes ]]&#xA;&#xA;- did some work on - [[thoughts-to-nostr]]&#xA;&#xA;&#xA;## TODO&#xA;-  [[olivet-mens-group-august-2025]]&#xA;- started [[when-i-learned-what-an-escape-room-was]]&#xA;&#xA;## Wins&#xA;&#xA;- Postiz 2.0 came out recently and I got my [PR](https://github.com/gitroomhq/postiz-app/pull/824) to work with it at home&#xA;- decided to *kill* ~moved~ home-automation-pipelines ~to homelab-mono~&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Using Litestream to Restore My Database for Easy Development</title>
    <id>https://pype.dev/using-litestream-to-restore-my-database-for-easy-development/</id>
    <updated>2025-08-07T15:14:45Z</updated>
    <published>2025-08-07T15:14:45Z</published>
    <link href="https://pype.dev/using-litestream-to-restore-my-database-for-easy-development/" rel="alternate" type="text/html"></link>
    <summary type="text">see using-litestream-to-backup-quadtasks-sqlite-db for how I setup litestream replication for quadtask</summary>
    <content type="text">&#xA;# Litestream&#xA;&#xA;see [[using-litestream-to-backup-quadtasks-sqlite-db]] for how I setup litestream replication for [[quadtask]]&#xA;&#xA;I have the entrypoint to my app container check if the sqlite database exists&#xA;or not - in production or with local volume mounts, it will and then we start&#xA;litestream replication and then the app like normal. But what&#39;s awesome about&#xA;this little trick I got from [this litestream&#xA;example](https://github.com/benbjohnson/litestream-docker-example/tree/main) is&#xA;I can docker compose up locally without the data directory volume mounted in,&#xA;and get a fresh copy of my production data right there locally to work with!&#xA;&#xA;My entrypoint script now looks like:&#xA;&#xA;```bash&#xA;#!/bin/bash&#xA;&#xA;# Exit on error, undefined vars, and fail on pipe errors&#xA;set -euo pipefail&#xA;# Restore the database if it does not already exist.&#xA;if [ -f /app/data/quadtask.db ]; then&#xA; echo &#34;Database already exists, skipping restore&#34;&#xA;else&#xA; echo &#34;No database found, restoring from replica if exists&#34;&#xA; litestream restore -v /app/data/quadtask.db&#xA;fi&#xA;# Run litestream with your app as the subprocess.&#xA;exec litestream replicate -exec &#34;uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload --log-level debug&#34;&#xA;&#xA;```&#xA;&#xA;## Appropriate and Safe Replication&#xA;&#xA;The way to get prod data in automatically is to restore from the production&#xA;backup but I don&#39;t want to replicate to the production backup with my local&#xA;work, so it&#39;s not the best but I have a manual step that makes it pretty easy&#xA;&#xA;I first `just sync-db`&#xA;&#xA;```bash&#xA;# Sync production database locally&#xA;sync-db:&#xA;    fly ssh console -a quadtask -C &#39;cat /app/data/quadtask.db&#39; &gt; ./litestream/source/quadtask-prod.db&#xA;```&#xA;&#xA;and this brings my database down to a folder I maintain locally.&#xA;&#xA;I have litestream installed on my desktop obviously, and here&#39;s the relevant litestream configuration I use:&#xA;&#xA;```yaml&#xA;dbs:&#xA;  - path: /home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db&#xA;    replicas:&#xA;      - name: quadtask-prod&#xA;        type: s3&#xA;        bucket: litestream&#xA;        path: quadtask-local&#xA;        endpoint: s3.example.com&#xA;        skip-verify: false&#xA;        region: us-east-1&#xA;```&#xA;&#xA;So on my desktop if I `litestream replicate` then basically I&#39;m taking the&#xA;output of `just synd-db` and replicating to my litestream bucket to the&#xA;`quadtask-local` path.&#xA;&#xA;Then I start up my app, it restores from that point and I&#39;m working with fresh&#xA;prod data!&#xA;&#xA;## How To Handle Environments?&#xA;&#xA;I have this working for different environments too, with a little bit of&#xA;process but basically thanks to [litestream expanding env&#xA;vars](https://litestream.io/reference/config/#variable-expansion) in the config&#xA;we can do something like this:&#xA;&#xA;```yaml&#xA;dbs:&#xA;  - path: /app/data/quadtask.db&#xA;    replicas:&#xA;      - name: quadtask&#xA;        type: s3&#xA;        bucket: litestream&#xA;        path: quadtask-${ENVIRONMENT}&#xA;        endpoint: s3.example.com&#xA;        skip-verify: false&#xA;        region: us-east-1&#xA;```&#xA;&#xA;And so wherever I spin up quadtask: local, dev, or prod - the replication will&#xA;happen to and from a different path in my litestream bucket!&#xA;&#xA;# Update&#xA;&#xA;I updated the `docker-entrypoint.sh` of my quadtask container to look like this now:&#xA;&#xA;```bash&#xA;&#xA;# Restore the database if it does not already exist.&#xA;if [ -f /app/data/quadtask.db ]; then&#xA; echo &#34;Database already exists, skipping restore&#34;&#xA;else&#xA; echo &#34;No database found, restoring from replica&#34;&#xA; ENVIRONMENT=&#34;prod&#34; litestream restore -v /app/data/quadtask.db&#xA;fi&#xA;# Run litestream with your app as the subprocess.&#xA;exec litestream replicate -exec &#34;uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload --log-level debug&#34;&#xA;&#xA;```&#xA;&#xA;The `if` block checks if there&#39;s a db at the filepath it should be in in the continer - if it&#39;s not there is the little bit of magic to me right now...&#xA;&#xA;My litestream config has a parameterized `ENVIRONMENT` variable in the db path,&#xA;so by overwritting it for just the `restore` command, I can very simply always&#xA;pull a fresh copy of the prod database into an ephemeral container to test&#xA;things against real data in a very convenient way&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Migrate Github Issues to Kanboard</title>
    <id>https://pype.dev/migrate-github-issues-to-kanboard/</id>
    <updated>2025-08-07T14:43:27Z</updated>
    <published>2025-08-07T14:43:27Z</published>
    <link href="https://pype.dev/migrate-github-issues-to-kanboard/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working on shifting everything, or as much as I reasonably can, related to dev for myself to on-prem, including git and CI/CD. So for Quadtask I had a...</summary>
    <content type="html">&lt;p&gt;I am working on shifting everything, or as much as I reasonably can, related to&#xA;dev for myself to on-prem, including git and CI/CD. So for Quadtask I had a&#xA;bunch of Github issues that I wanted to migrate to my kanboard instance, gpt-5&#xA;did a bang-up job on this script&lt;/p&gt;&#xA;&lt;p&gt;It gets each issue, creates a tag for each label, creates the kanboard ticket, then closes the github 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#!/bin/bash&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# GitHub to Kanboard Issue Migration 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;# Uses GitHub CLI (gh) and curl to migrate issues&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Exit on 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;nb&#34;&gt;set&lt;/span&gt; -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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 required environment variables&lt;/span&gt;&#xA;&lt;/span&gt;&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; var in KANBOARD_URL KANBOARD_TOKEN GH_TOKEN QUADTASK_KANBOARD_PROJECT_ID&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; -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;p&#34;&gt;!var&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Error: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; is not set&amp;#34;&lt;/span&gt;&#xA;&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;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;# GitHub repository (default: pypeaday/quadtask)&lt;/span&gt;&#xA;&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;GITHUB_REPO&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;GITHUB_REPO&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pypeaday/quadtask&amp;#34;&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;c1&#34;&gt;# Kanboard API endpoint&lt;/span&gt;&#xA;&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;KANBOARD_API&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;$KANBOARD_URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/jsonrpc.php&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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 open issues from 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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Fetching open issues from &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GITHUB_REPO&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;ISSUES_JSON&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;gh issue list --repo &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GITHUB_REPO&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --state open --limit &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; --json number,title,body,labels&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;# Count issues&lt;/span&gt;&#xA;&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;ISSUE_COUNT&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ISSUES_JSON&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; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;. | length&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;Found &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ISSUE_COUNT&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; open 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Process each 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;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;$ISSUES_JSON&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; jq -c &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;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; -r issue&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;c1&#34;&gt;# Extract issue 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;nv&#34;&gt;NUMBER&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$issue&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; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.number&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;nv&#34;&gt;TITLE&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$issue&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; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.title&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;nv&#34;&gt;BODY&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$issue&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; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.body // &amp;#34;&amp;#34;&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;c1&#34;&gt;# Extract label names as a JSON array&lt;/span&gt;&#xA;&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;LABELS_JSON&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$issue&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; jq -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;[.labels[]?.name] // []&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;# Prepare Kanboard task 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;nv&#34;&gt;REQUEST_DATA&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;jq -n &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;        --arg method &lt;span class=&#34;s2&#34;&gt;&amp;#34;createTask&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;        --argjson id &lt;span class=&#34;m&#34;&gt;1&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;        --arg jsonrpc &lt;span class=&#34;s2&#34;&gt;&amp;#34;2.0&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;        --arg title &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TITLE&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;        --arg description &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$BODY&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;        --arg project_id &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$QUADTASK_KANBOARD_PROJECT_ID&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;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;jsonrpc&amp;#34;: $jsonrpc,&#xA;&lt;/span&gt;&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;method&amp;#34;: $method,&#xA;&lt;/span&gt;&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;: $id,&#xA;&lt;/span&gt;&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;params&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;: $title,&#xA;&lt;/span&gt;&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;description&amp;#34;: $description,&#xA;&lt;/span&gt;&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;project_id&amp;#34;: $project_id&#xA;&lt;/span&gt;&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;&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;# Create task in Kanboard&lt;/span&gt;&#xA;&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;Creating task: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TITLE&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;RESPONSE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -s -X POST &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;        -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type: application/json&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;        -u &lt;span class=&#34;s2&#34;&gt;&amp;#34;jsonrpc:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$KANBOARD_TOKEN&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;        -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$REQUEST_DATA&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;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$KANBOARD_API&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;    &#xA;&lt;/span&gt;&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 for errors&lt;/span&gt;&#xA;&lt;/span&gt;&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RESPONSE&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; jq -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;.error&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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Error creating task: &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&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;$RESPONSE&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; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.error.message&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;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;nv&#34;&gt;TASK_ID&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RESPONSE&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; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.result&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;Created task ID: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TASK_ID&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;c1&#34;&gt;# If there are labels, set them as Kanboard tags on the 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;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;k&#34;&gt;$(&lt;/span&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;$LABELS_JSON&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; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;length&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; -gt &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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Setting tags on task &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TASK_ID&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&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;$LABELS_JSON&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; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;join(&amp;#34;, &amp;#34;)&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;nv&#34;&gt;TAGS_REQUEST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;jq -n &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;                --arg jsonrpc &lt;span class=&#34;s2&#34;&gt;&amp;#34;2.0&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;                --arg method &lt;span class=&#34;s2&#34;&gt;&amp;#34;setTaskTags&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;                --argjson id &lt;span class=&#34;m&#34;&gt;2&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;                --arg project_id &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$QUADTASK_KANBOARD_PROJECT_ID&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;                --arg task_id &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TASK_ID&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;                --argjson tags &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$LABELS_JSON&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;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;                    jsonrpc: $jsonrpc,&#xA;&lt;/span&gt;&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;                    method: $method,&#xA;&lt;/span&gt;&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;                    id: $id,&#xA;&lt;/span&gt;&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;                    params: {&#xA;&lt;/span&gt;&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;                        project_id: $project_id,&#xA;&lt;/span&gt;&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;                        task_id: $task_id,&#xA;&lt;/span&gt;&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;                        tags: $tags&#xA;&lt;/span&gt;&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;&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;nv&#34;&gt;TAGS_RESPONSE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -s -X POST &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;                -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type: application/json&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;                -u &lt;span class=&#34;s2&#34;&gt;&amp;#34;jsonrpc:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$KANBOARD_TOKEN&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;                -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TAGS_REQUEST&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;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$KANBOARD_API&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;&#xA;&lt;/span&gt;&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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TAGS_RESPONSE&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; jq -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;.error&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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Warning: Failed to set tags: &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&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;$TAGS_RESPONSE&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; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.error.message&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;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;Tags set successfully&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&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 corresponding GitHub issue to avoid duplicates&lt;/span&gt;&#xA;&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;TASK_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;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KANBOARD_URL&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/?controller=TaskViewController&amp;amp;action=show&amp;amp;task_id=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TASK_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;&#xA;&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;Closing GitHub issue #&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NUMBER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; with comment linking to Kanboard task...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&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; gh issue close &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NUMBER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --repo &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GITHUB_REPO&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --comment &lt;span class=&#34;s2&#34;&gt;&amp;#34;Migrated to Kanboard task &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TASK_ID&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TASK_URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Closed GitHub issue #&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NUMBER&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;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;Warning: Failed to close GitHub issue #&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NUMBER&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;    &#xA;&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;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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Migration completed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-07 Notes</title>
    <id>https://pype.dev/2025-08-07-notes/</id>
    <updated>2025-08-07T05:54:17Z</updated>
    <published>2025-08-07T05:54:17Z</published>
    <link href="https://pype.dev/2025-08-07-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-06-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-06-notes ]]&#xA;&#xA;- started [[autism-and-steadfast-faith]]&#xA;- almost forgot about apprise&#xA;- worked more on [[olivet-mens-group-august-2025]]&#xA;&#xA;## Wins&#xA;&#xA;- published [[using-litestream-to-backup-quadtasks-sqlite-db]] &#xA;- published [[using-litestream-to-restore-my-database-for-easy-development]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-06 Notes</title>
    <id>https://pype.dev/2025-08-06-notes/</id>
    <updated>2025-08-06T07:19:42Z</updated>
    <published>2025-08-06T07:19:42Z</published>
    <link href="https://pype.dev/2025-08-06-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday - 2025-08-05-notes</summary>
    <content type="text">&#xA;yesterday - [[ 2025-08-05-notes ]]&#xA;&#xA;reminder: [[now]] for what I&#39;m doing&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Using Litestream to Backup QuadTask’s SQLite DB</title>
    <id>https://pype.dev/using-litestream-to-backup-quadtasks-sqlite-db/</id>
    <updated>2025-08-05T19:34:19Z</updated>
    <published>2025-08-05T19:34:19Z</published>
    <link href="https://pype.dev/using-litestream-to-backup-quadtasks-sqlite-db/" rel="alternate" type="text/html"></link>
    <summary type="text">This post will be a walkthrough of installing litestream in a docker container that runs my FastAPI app in order to replicate the sqlite db in the data...</summary>
    <content type="text">&#xA;# Litestream&#xA;&#xA;This post will be a walkthrough of installing [[litestream]] in a docker container&#xA;that runs my FastAPI app in order to replicate the sqlite db in the data volume&#xA;currently hosted in Fly&#39;s volume manager to my MinIO instance. From there, on&#xA;my development machine I can use litestream to restore the prod database to my&#xA;dev environment to practice whatever I may need to practice with real&#xA;production data!&#xA;&#xA;## Dockerfile&#xA;&#xA;Installing litestream in the dockerfile is 2-3 lines of code - no sweat. Configuration file is further down the post.&#xA;&#xA;```dockerfile&#xA;FROM python:3.11-slim&#xA;WORKDIR /app&#xA;&#xA;# Install uv&#xA;COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/&#xA;&#xA;# Install litestream&#xA;ADD https://github.com/benbjohnson/litestream/releases/download/v0.3.8/litestream-v0.3.8-linux-amd64-static.tar.gz /tmp/litestream.tar.gz&#xA;RUN tar -C /usr/local/bin -xzf /tmp/litestream.tar.gz&#xA;COPY etc/litestream.yml /etc/litestream.yml&#xA;&#xA;# Install dependencies&#xA;COPY requirements.txt .&#xA;RUN uv pip install --no-cache -r requirements.txt&#xA;&#xA;# Copy the rest of the application&#xA;COPY . .&#xA;&#xA;# Install the app package in development mode&#xA;RUN uv pip install -e .&#xA;&#xA;# Run the application&#xA;CMD [&#34;docker-entrypoint.sh&#34;]&#xA;&#xA;```&#xA;&#xA;## Litestream Configuration&#xA;&#xA;Taking care to set `ENVIRONMENT` appropriately in each environment, the&#xA;litestream configuration gets that env var templated out to the path for the&#xA;litestream target. See [docs](https://litestream.io/reference/config/#variable-expansion)&#xA;&#xA;```yaml&#xA;#/etc/litestream.yml&#xA;dbs:&#xA;- path: /app/data/quadtask.db&#xA;  replicas:&#xA;  - name: quadtask&#xA;    type: s3&#xA;    bucket: litestream&#xA;    path: quadtask-${ENVIRONMENT}&#xA;    endpoint: s3.example.com&#xA;    skip-verify: false&#xA;    region: us-east-1&#xA;```&#xA;&#xA;## Authentication&#xA;&#xA;In your docker container you&#39;ll need to set `LITESTREAM_ACCESS_KEY_ID` and&#xA;`LITESTREAM_SECRET_ACCESS_KEY` which you setup in Minio - see&#xA;[[setup-remote-minio-s3-backend-target-for-litestream]]. I have these set as&#xA;secrets in my fly configuration, and locally in a .env file that gets sourced&#xA;with my compose stack&#xA;&#xA;## Example Log from Dev&#xA;&#xA;My fly dev machine has this log message showing the `ENVIRONMENT` var `dev` gets expanded into the config so the s3 path includes `quadtask-dev`&#xA;&#xA;`replicating to: name=&#34;quadtask&#34; type=&#34;s3&#34; bucket=&#34;litestream&#34; path=&#34;quadtask-dev&#34; region=&#34;us-east-1&#34; endpoint=&#34;s3.&lt;redacted&gt;.com&#34; sync-interval=1s`&#xA;&#xA;## Example Usage for Local Development&#xA;&#xA;- [[using-litestream-to-restore-my-database-for-easy-development]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Static egress IPs for machines - Fresh Produce - Fly.io</title>
    <id>https://pype.dev/thoughts-781/</id>
    <updated>2025-08-05T11:50:12Z</updated>
    <published>2025-08-05T11:50:12Z</published>
    <link href="https://pype.dev/thoughts-781/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m starting to setup litestream for replicating sqlite dbs of my apps to my self-hosted MinIO instance... only issue is</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://community.fly.io/t/static-egress-ips-for-machines/22004&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://community.fly.io/t/static-egress-ips-for-machines/22004&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Static egress IPs for machines - Fresh Produce - Fly.io&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://community.fly.io/t/static-egress-ips-for-machines/22004&#34;&gt;Static egress IPs for machines - Fresh Produce - Fly.io&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;m starting to setup litestream for replicating sqlite dbs of my apps to my self-hosted MinIO instance... only issue is most of my networking assumes client connectivity via tailscale so I whitelist pretty much every accessible domain.&#xA;This has gotten me in trouble once or twice, and I&#39;m currently in the throws of backing up sqlite from fly.io. The easiest solution for me would be to add egress IP cidr blocks to my traefik whitelisting configuration and wouldn&#39;t ya know it - in september 2024 fly.io released the ability to set static egress IPs!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-05 Notes</title>
    <id>https://pype.dev/2025-08-05-notes/</id>
    <updated>2025-08-05T09:23:07Z</updated>
    <published>2025-08-05T09:23:07Z</published>
    <link href="https://pype.dev/2025-08-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-04-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-04-notes ]]&#xA;&#xA;## Today&#xA;&#xA;- wrote [[setup-remote-minio-s3-backend-target-for-litestream]]&#xA;- working on litestream with quadtask, bigger plans eventually for backing up all my apps dbs to minio, probably self-hosting everything and getting off fly eventually... not sure&#xA;- started [[using-litestream-to-backup-quadtasks-sqlite-db]]&#xA;&#xA;## Fly.io&#xA;&#xA;- pain point: cert management&#xA;- no terraform, fly cli... this is probably fine&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Litestream</title>
    <id>https://pype.dev/litestream/</id>
    <updated>2025-08-05T08:48:01Z</updated>
    <published>2025-08-05T08:48:01Z</published>
    <link href="https://pype.dev/litestream/" rel="alternate" type="text/html"></link>
    <summary type="text">Litestream is a simple way to replicate SQLite databases</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://litestream.io/&#34;&gt;Litestream&lt;/a&gt; is a simple way to replicate SQLite databases&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Setup Remote MinIO S3 Backend Target for Litestream</title>
    <id>https://pype.dev/setup-remote-minio-s3-backend-target-for-litestream/</id>
    <updated>2025-08-05T08:39:16Z</updated>
    <published>2025-08-05T08:39:16Z</published>
    <link href="https://pype.dev/setup-remote-minio-s3-backend-target-for-litestream/" rel="alternate" type="text/html"></link>
    <summary type="text">I am starting to think through some patterns for replicating sqlite databases, exploring them, standardizing on schemas/models I use across projects, etc......</summary>
    <content type="text">&#xA;## Intro&#xA;&#xA;I am starting to think through some patterns for replicating sqlite databases,&#xA;exploring them, standardizing on schemas/models I use across projects, etc...&#xA;Thanks to [Waylon](https://waylonwalker.com) I know about [[litestream]] and&#xA;finally I started playing with it. Their&#xA;[quickstart](https://litestream.io/getting-started/) is good, but it assumes&#xA;you&#39;ll run MinIO on the same machine you run litestream on.&#xA;&#xA;I, however, have MinIO setup in my homelab with the api endpoint accessible via&#xA;DNS - `s3.mydomain.com`.&#xA;&#xA;Before starting - I realize I left the credential aspect out - Litestream&#xA;explains how to setup API keys in MinIO for their application&#xA;[here](https://litestream.io/getting-started/#setting-up-minio)&#xA;&#xA;Basically after generating the keys I set `LITESTREAM_ACCESS_KEY_ID` and `LITESTREAM_SECRET_ACCESS_KEY` as env vars&#xA;&#xA;So let&#39;s see what happens and then get to [the fix]&#xA;&#xA;&#xA;```&#xA;⬢ [devbox] ❯ litestream replicate quadtask-prod.db s3://s3.example.com/litestream/qt.db    &#xA;2025/08/05 08:50:09 INFO litestream version=v0.3.13&#xA;2025/08/05 08:50:09 INFO initialized db path=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db&#xA;2025/08/05 08:50:09 INFO replicating to name=s3 type=s3 sync-interval=1s bucket=s3.example.com path=litestream/qt.db region=&#34;&#34; endpoint=&#34;&#34;&#xA;2025/08/05 08:50:10 INFO sync: new generation db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db generation=209692854ccd85d5 reason=&#34;no generation exists&#34;&#xA;2025/08/05 08:50:10 ERROR monitor error db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=s3 error=&#34;cannot lookup bucket region: InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.\n\tstatus code: 403, request id: ERHZD4RD61Y8ADMD, host id: dOjPn5j8Oa+mkwOqROXDvCdKNxzxG0B8JJOPtGXDZA7qKxwAWqaSXhGYzK2mkoJQV7hJhaoJcag=&#34;&#xA;&#xA;```&#xA;&#xA;So that `403` is pretty simple... my login is wrong... but wait...&#xA;&#xA;`2025/08/05 08:50:09 INFO replicating to name=s3 type=s3 sync-interval=1s bucket=s3.example.com path=litestream/qt.db region=&#34;&#34; endpoint=&#34;&#34;`&#xA;&#xA;Notice this line - `endpoint=&#34;&#34;`... so `s3://s3.example.com` was not the right replacement for `s3://mybkt.localhost:9000/target.db`. Also the inferred `bucket` is the entire `s3.example.com`... &#xA;&#xA;Oh! Well I didn&#39;t specify a bucket in the subdomain - I did it with a route on the URL... &#xA;&#xA;ok let&#39;s try `litestream replicate quadtask-prod.db s3://litestream.example.com/qt.db`&#xA;&#xA;We got the same kind of error...&#xA;&#xA;`2025/08/05 08:53:45 INFO replicating to name=s3 type=s3 sync-interval=1s bucket=litestream.example.com path=qt.db region=&#34;&#34; endpoint=&#34;&#34;`&#xA;&#xA;This time the inferred bucket was `litestream.example.com`... ok that&#39;s consistent with above as well - so the endpoint is still wrong/null and the bucket inference is wrong...&#xA;&#xA;Turns out for Litestream, and probably many other tools that use s3-compatible storage, that there&#39;s an inference problem if the configuration leans on the shorthand `s3://` - [see this GitHub issue](https://github.com/benbjohnson/litestream/issues/398) and [this one about localhost](https://github.com/benbjohnson/litestream/issues/219). There&#39;s a few options for using your own `s3.mydomain.example`.&#xA;&#xA;## The Fix&#xA;&#xA;If you&#39;re familiar with the `awscli` then maybe you&#39;ve heard of a config option `AWS_S3_ENDPOINT_URL` which allows you to use the boto sdk with s3-compatibile resources while still using the `s3://` shorthand. Litestream has a way to set this configuration right on config:&#xA;&#xA;```yaml&#xA;dbs:&#xA;  - path: /home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db&#xA;    replicas:&#xA;      - type: s3&#xA;        bucket: litestream&#xA;        endpoint: s3.example.com  # &lt;---- right here!&#xA;        skip-verify: true  # set to false if you have TLS and want more security&#xA;        # note you acn set these sensitive values as env vars per the Litestream Quickstart&#xA;        # access-key-id: &lt;ACCESS-KEY-ID&gt;&#xA;        # secret-access-key: &lt;SECRET-ACCESS-KEY&gt;&#xA;```&#xA;&#xA;???+ danger &#34;UPDATE&#34;&#xA;&#xA;    I added a `path` key to give the backups a folder basically on s3, so under &#34;bucket: listream&#34; I have &#34;path: &lt;my desired path&gt;&#34;&#xA;&#xA;So with that config in place we can actually JUST `litestream replicate` from anywhere...&#xA;&#xA;```bash&#xA;⬢ [devbox] ❯ litestream replicate                                                      &#xA;time=2025-08-05T08:56:11.353-05:00 level=INFO msg=litestream version=v0.3.13&#xA;time=2025-08-05T08:56:11.353-05:00 level=INFO msg=&#34;initialized db&#34; path=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db&#xA;time=2025-08-05T08:56:11.353-05:00 level=INFO msg=&#34;replicating to&#34; name=s3 type=s3 sync-interval=1s bucket=litestream path=&#34;&#34; region=&#34;&#34; endpoint=s3.example.com&#xA;time=2025-08-05T08:56:12.399-05:00 level=INFO msg=&#34;write snapshot&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=s3 position=209692854ccd85d5/00000000:4152&#xA;time=2025-08-05T08:56:12.489-05:00 level=INFO msg=&#34;snapshot written&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=s3 position=209692854ccd85d5/00000000:4152 elapsed=89.994626ms sz=909437&#xA;time=2025-08-05T08:56:12.492-05:00 level=INFO msg=&#34;write wal segment&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=s3 position=209692854ccd85d5/00000000:0&#xA;time=2025-08-05T08:56:12.510-05:00 level=INFO msg=&#34;wal segment written&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=s3 position=209692854ccd85d5/00000000:0 elapsed=17.572784ms sz=4152&#xA;```&#xA;&#xA;!!! success &#34;It works!&#34;&#xA;    &#xA;    Notice that the endpoint is properly s3.example.com, and the bucket is litestream (the name of my taret bucket in MinIO)&#xA;&#xA;&gt; You can use a local config with `-c config.yaml` or something if you want to avoid the global `/etc/litestream.yml`&#xA;&#xA;## What About Restore?&#xA;&#xA;Should work just fine... Let&#39;s move the database on my host and see if I can use litestream to restore it&#xA;&#xA;```&#xA;nic in quadtask/litestream   database-clean-up   ×21  ×2  ×9 via   v3.11.10(quadtask)   (dev) 󰒄 &#xA;⬢ [devbox] ❯ mv ./source/quadtask-prod.db ./source/quadtask-prod.db.backup                 &#xA;&#xA;nic in quadtask/litestream   database-clean-up   ×21  ×2  ×9 via   v3.11.10(quadtask)   (dev) 󰒄 &#xA;⬢ [devbox] ❯ litestream restore ./source/quadtask-prod.db              &#xA;time=2025-08-05T09:06:25.826-05:00 level=INFO msg=&#34;restoring snapshot&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index=0 path=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db.tmp&#xA;time=2025-08-05T09:06:25.843-05:00 level=INFO msg=&#34;restoring wal files&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index_min=0 index_max=0&#xA;time=2025-08-05T09:06:25.845-05:00 level=INFO msg=&#34;downloaded wal&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index=0 elapsed=2.103514ms&#xA;time=2025-08-05T09:06:25.856-05:00 level=INFO msg=&#34;applied wal&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index=0 elapsed=10.871034ms&#xA;time=2025-08-05T09:06:25.856-05:00 level=INFO msg=&#34;renaming database from temporary location&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod&#xA;&#xA;```&#xA;&#xA;The command `litestream restore &lt;db path&gt;` was confusing at first because I was trying to replicate to a new place, but couldn&#39;t get the config to line up. The general understanding here is DR I believe - so the configuration is relatively static and when you `restore` you are restoring a specific database, not just standing up a copy from a backup... &#xA;&#xA;!!! note &#34;But would we setup a copy from a backup?&#34;&#xA;&#xA;    ie. restore to a different file?&#xA;&#xA;Yes, but it&#39;s confusing - at least it was to me... it looks to me like litestream uses the path of a db as the identifier in the config, and you reference the config not by an object&#39;s name (if it has one) but by the `path`...&#xA;&#xA;So the command is `litestream restore -o &lt;output path&gt; &lt;db path&gt;`. This makes sense in light of the fact that the configuration is relative to this host - so `&lt;db path&gt;` being the path of the source db whose backup you are restoring from to `&lt;output path&gt;` makes some amount of sense... if I wanted to replicate to another machine, then THAT machine would need `/etc/litestream.yaml` and if the filesystem hierarchy was different then an appropriate `path` for the &#34;source&#34; of the db to replicate back to.&#xA;&#xA;```&#xA;⬢ [devbox] ❯ litestream restore -o /tmp/db ./source/quadtask-prod.db          &#xA;time=2025-08-05T09:09:04.784-05:00 level=INFO msg=&#34;restoring snapshot&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index=0 path=/tmp/db.tmp&#xA;time=2025-08-05T09:09:04.797-05:00 level=INFO msg=&#34;restoring wal files&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index_min=0 index_max=0&#xA;time=2025-08-05T09:09:04.799-05:00 level=INFO msg=&#34;downloaded wal&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index=0 elapsed=2.128594ms&#xA;time=2025-08-05T09:09:04.800-05:00 level=INFO msg=&#34;applied wal&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod generation=209692854ccd85d5 index=0 elapsed=610.75µs&#xA;time=2025-08-05T09:09:04.800-05:00 level=INFO msg=&#34;renaming database from temporary location&#34; db=/home/nic/projects/personal/quadtask/litestream/source/quadtask-prod.db replica=quadtask-prod&#xA;&#xA;```&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>GrapheneOS</title>
    <id>https://pype.dev/grapheneos/</id>
    <updated>2025-08-04T20:32:55Z</updated>
    <published>2025-08-04T20:32:55Z</published>
    <link href="https://pype.dev/grapheneos/" rel="alternate" type="text/html"></link>
    <summary type="text">GrapheneOS is a de-googled version of Android OS you can run on Android devices. They coincidentally recommend Pixel phones for the sake of the hardware</summary>
    <content type="html">&lt;p&gt;GrapheneOS is a de-googled version of Android OS you can run on Android&#xA;devices. They coincidentally recommend Pixel phones for the sake of the&#xA;hardware&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-04 Notes</title>
    <id>https://pype.dev/2025-08-04-notes/</id>
    <updated>2025-08-04T06:33:58Z</updated>
    <published>2025-08-04T06:33:58Z</published>
    <link href="https://pype.dev/2025-08-04-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-08-03-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-08-03-notes ]]&#xA;&#xA;&#xA;## TODO&#xA;&#xA; - [x] update copier with glossary template just like notes but keep in glossary folder with new templateKey&#xA;&#xA;## Work&#xA;&#xA;- consolidated digital harbor infra and tf modules to the digital harbor repo&#xA;  - going to end spacelift, use just recipes and minio... keep it simple stupid&#xA;&#xA;## Other&#xA;&#xA;- making progress on quadtask - notifiations are looking ok for now but with apprise on the horizon now I don&#39;t want to go too much farther. Cleaning up the premium stuff since there&#39;s no stripe, and once this stuff is ok I can put another bow on it and put it down for a while&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 caronc/apprise-api: A lightweight REST framework that wraps th…</title>
    <id>https://pype.dev/thoughts-778/</id>
    <updated>2025-08-04T01:08:10Z</updated>
    <published>2025-08-04T01:08:10Z</published>
    <link href="https://pype.dev/thoughts-778/" rel="alternate" type="text/html"></link>
    <summary type="text">I just stood this up and I am very excited about how easy it was to setup and get a message through my gotify instance a</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://github.com/caronc/apprise-api?tab=readme-ov-file&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://github.com/caronc/apprise-api?tab=readme-ov-file&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - caronc/apprise-api: A lightweight REST framework that wraps the Apprise Notification Library&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://github.com/caronc/apprise-api?tab=readme-ov-file&#34;&gt;caronc/apprise-api: A lightweight REST framework that wraps the Apprise Notification Library&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I just stood this up and I am very excited about how easy it was to setup and get a message through my gotify instance at home - just a few minutes once I got through my think head on the config in the web front-end... I expect to lean into this heavily in the future &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 The Remarkable Incompetence At The Heart Of Tech</title>
    <id>https://pype.dev/thoughts-777/</id>
    <updated>2025-08-03T11:39:14Z</updated>
    <published>2025-08-03T11:39:14Z</published>
    <link href="https://pype.dev/thoughts-777/" rel="alternate" type="text/html"></link>
    <summary type="text">What a great post... the majority of my tech experience has been at a large non-tech company and this just couldn&#39;t be m</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.wheresyoured.at/the-remarkable-incompetence-at-the-heart-of-tech/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.wheresyoured.at/the-remarkable-incompetence-at-the-heart-of-tech/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - The Remarkable Incompetence At The Heart Of Tech&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.wheresyoured.at/the-remarkable-incompetence-at-the-heart-of-tech/&#34;&gt;The Remarkable Incompetence At The Heart Of Tech&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;What a great post... the majority of my tech experience has been at a large non-tech company and this just couldn&#39;t be more true... we&#39;ve got folks who made 150k+ in just cash salary who would take 3 months to learn what a firewall rule even was... I heard at one time there were 6 different salesforce accounts across 3 different cloud providers... The incompetence in management, new-hires, those in charge of hiring, etc. is just mind-boggling. &#xA;I have been fortunate to have generally awesome peers and helpful direct managers but generally I see every ounce of truth in this article... but what does it matter? I kind of think it doesn&#39;t... there&#39;s nothing I or anyone can do to change this wide-spread problem... companies will throw money at other companies while employing dozens (if not more) of engineers who think Excel is Big Data...&#xA;&#xA;overall great read, much respect&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>inode</title>
    <id>https://pype.dev/inode/</id>
    <updated>2025-08-03T07:16:02Z</updated>
    <published>2025-08-03T07:16:02Z</published>
    <link href="https://pype.dev/inode/" rel="alternate" type="text/html"></link>
    <summary type="text">Index Nodes (inode) is a data structure that stores information about a file or directory, such as its size, permissions, ownership, and disk block...</summary>
    <content type="html">&lt;p&gt;Index Nodes (inode) is a data structure that stores information about a file or directory, such as its size, permissions, ownership, and disk block addresses. Each file and directory on a filesystem has a unique inode number.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-03 Notes</title>
    <id>https://pype.dev/2025-08-03-notes/</id>
    <updated>2025-08-03T06:39:32Z</updated>
    <published>2025-08-03T06:39:32Z</published>
    <link href="https://pype.dev/2025-08-03-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-31-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-07-31-notes ]]&#xA;&#xA;## Writting&#xA;&#xA;- started [[docker-volume-mounts-link-to-an-inode]] the other day&#xA;- starting to organize glossary posts until it&#39;s built-in to markata&#xA;&#xA;## TODO&#xA; - update copier with glossary template just like notes but keep in glossary folder with new templateKey&#xA;&#xA; - ran accross apprise again... I need a centtrlized notification thing for some ideas, so this mgiht be it. I forked the repo, will build image and deploy to get a feel for it&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Docker Volume Mounts Link to an Inode</title>
    <id>https://pype.dev/docker-volume-mounts-link-to-an-inode/</id>
    <updated>2025-08-02T13:01:58Z</updated>
    <published>2025-08-02T13:01:58Z</published>
    <link href="https://pype.dev/docker-volume-mounts-link-to-an-inode/" rel="alternate" type="text/html"></link>
    <summary type="text">docker bind mounts are specified as filepaths - this is very intuitive. I want /path/to/directory on my host to be shared with /another/path/foo in a...</summary>
    <content type="text">&#xA;docker bind mounts are specified as filepaths - this is very intuitive. I want&#xA;/path/to/directory on my host to be shared with /another/path/foo in a&#xA;container. But what if /path/to/directory on the host is moved?&#xA;&#xA;This is a situation I have found myself in at home and it turns out that I&#39;m&#xA;actually in almost zero trouble thankfully...&#xA;&#xA;TLDR - I have a bunch of compose stacks in&#xA;/home/projects/homelab-compose/&lt;host&gt;/&lt;application&gt; and I want to move them to&#xA;/home/projects/homelap-mono/compose/&lt;host&gt;/&lt;application&gt;&#xA;&#xA;I don&#39;t want to take down all my stacks to do this because I don&#39;t yet have a&#xA;convenient way to do it - but can I just `mv .../homelab-compose&#xA;.../homelab-mono/compose` and be done with it?&#xA;&#xA;The issue is that some of my stacks use local volume mounts - ie. there is a&#xA;data volume on the host in&#xA;/home/projects/homelab-compose/&lt;host&gt;&lt;application&gt;/docker-data for some of the&#xA;applications... can I just move everything and docker is nonethewiser?&#xA;&#xA;Turns out the answer is mostly `yes` with some caveats to keep in mind..&#xA;&#xA;Let&#39;s start with why it works and then show an example...&#xA;&#xA;## Why&#xA;&#xA;This works because of how docker interprets the bind mount location initially&#xA;and with how `mv` is different from `cp`. When you speicify a volume mount for&#xA;docker, the engine determines which [[inode]] contains the metadata for the&#xA;filesystem object referenced by the original volume path `/path/to/directory`.&#xA;I think about this like a string path is a pointer to a lower level identifier&#xA;closer to the filesystem - if that pointer changes it doesn&#39;t affect the&#xA;pre-existing inode or data. So docker uses the inode that `/path/to/directory`&#xA;points to when the container starts up.&#xA;&#xA;The slight convenience in my case is that `mv` maintains the existing inode and&#xA;so the new filepath is irrelevant to that existing container that was spun up&#xA;with a now-non-existent host filepath.&#xA;&#xA;So if you can imagine then - I spun up several containers in&#xA;`///homelab-compose/...` with many stacks - and I want to just move all the&#xA;config files to new repo... thankfully, I actually can *just `mv`* everything&#xA;and because the `inode` locations dont&#39; change, the stacks are fine!&#xA;&#xA;!!! warning &#34;caveat&#34;&#xA;&#xA;    Is the next issue apparent? What happens to those files whose volume mount configurations specify .../homelab-compose/...? Well, if the stacks are brought down and back up then docker will create that filepath on the host and a new inode reference will be had by all... so that&#39;s a problem easily mitigated by some string replacement!&#xA;&#xA;!!! note &#34;another note&#34;&#xA;&#xA;&#xA;    Perhaps just don&#39;t keep data next to your configuration either... In most of my stacks I have a determined docker volume that&#39;s backed up etc. on my hosts and that&#39;s what I&#39;m moving towards on my desktop, but as of right now I&#39;ve put myself in an odd situation via not participating in a proper thinking exercise when standing up all these stacks on my desktop&#xA;&#xA;## Example&#xA;&#xA;Finally let&#39;s just see it in action quickly...&#xA;&#xA;I have a directory `/tmp/foo/source` with a compose file in it.&#xA;&#xA;```&#xA;❯ tree source       &#xA;source&#xA;└── docker-compose.yml&#xA;```&#xA;&#xA;That file is simple:&#xA;&#xA;```yaml&#xA;services:&#xA;  app:&#xA;    image: nginx&#xA;    ports:&#xA;      - &#34;8070:80&#34;&#xA;    volumes:&#xA;      - /tmp/foo/source:/usr/share/nginx/html&#xA;```&#xA;&#xA;Now I can spin that container up, exec in, drop a file in `/usr/share/nginx/html` and we&#39;ll see it in `/tmp/foo/source` as expected...&#xA;&#xA;```bash&#xA;nic in /tmp/foo   (dev)&#xA;❯ docker exec source-app-1 touch /usr/share/nginx/html/file.txt&#xA;&#xA;nic in /tmp/foo   (dev)&#xA;❯ tree source                                                       &#xA;source&#xA;├── docker-compose.yml&#xA;└── file.txt&#xA;&#xA;1 directory, 2 files&#xA;&#xA;```&#xA;&#xA;Now let&#39;s `mv` the `source` directory somewhere else and see what happens&#xA;&#xA;```&#xA;nic in /tmp/foo   (dev)&#xA;❯ mv source target &#xA;&#xA;nic in /tmp/foo   (dev)&#xA;❯ tree target &#xA;target&#xA;└── source&#xA;    ├── docker-compose.yml&#xA;    └── file.txt&#xA;&#xA;2 directories, 2 files&#xA;&#xA;```&#xA;&#xA;OK everything is there - now let&#39;s drop another file in the container - remember the compose file still has the host path as `/tmp/foo/source`, not `/tmp/foo/target/source`.&#xA;&#xA;```&#xA;nic in /tmp/foo   (dev)&#xA;❯ docker exec source-app-1 touch /usr/share/nginx/html/another-file.txt&#xA;&#xA;nic in /tmp/foo   (dev)&#xA;❯ tree target                                                          &#xA;target&#xA;└── source&#xA;    ├── another-file.txt  # BAM! New file still here...&#xA;    ├── docker-compose.yml&#xA;    └── file.txt&#xA;&#xA;2 directories, 3 files&#xA;```&#xA;## Few Things&#xA;1. `cp` as noted before, creates new `inodes` and so if I were to have `cp -r`&#xA;   that `source` directory to `target` then the container would&#39;ve dropped&#xA;er exec source-app-1 touch /usr/share/nginx/html/another-file.txc in /tmp/foo   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET t&#xA;`another-file.txt` to `/tmp/source` and we&#39;d be in a pretty confusing state&#xA;&#xA;2. Let me stress again the importance of managing your docker volumes in a sane&#xA;   way... I have on any of my hosts a `/path/to/docker/data` which is backed up&#xA;in a way that makes sense for the host (usually zfs + sanoid, otherwise restic&#xA;backup TO a remote zfs dataset - see&#xA;[[using-restic-to-backup-my-home-directory#Intro]])&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Kinopio</title>
    <id>https://pype.dev/thoughts-770/</id>
    <updated>2025-07-31T23:34:41Z</updated>
    <published>2025-07-31T23:34:41Z</published>
    <link href="https://pype.dev/thoughts-770/" rel="alternate" type="text/html"></link>
    <summary type="text">kinopio is a pretty sweet map-mapping type of application. It&#39;s localfirst, you can run it for free with state kept loca</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://kinopio.club/hello-kinopio-yJcWauuveiODl-efDj9Ox&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://kinopio.club/hello-kinopio-yJcWauuveiODl-efDj9Ox&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Kinopio&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://kinopio.club/hello-kinopio-yJcWauuveiODl-efDj9Ox&#34;&gt;Kinopio&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;kinopio is a pretty sweet map-mapping type of application. It&#39;s localfirst, you can run it for free with state kept locally and that&#39;s pretty dope. Heard about it on ep 9 of the localfirst.fm podcast. Very impressive app&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Knowledge and Faith</title>
    <id>https://pype.dev/knowledge-and-faith/</id>
    <updated>2025-07-31T05:58:52Z</updated>
    <published>2025-07-31T05:58:52Z</published>
    <link href="https://pype.dev/knowledge-and-faith/" rel="alternate" type="text/html"></link>
    <summary type="text">What does it mean to be &#34;faithful&#34;? I wrestle with this question in various contexts pretty regularly - mostly because God has been so ridiculously stupid...</summary>
    <content type="html">&lt;h1 id=&#34;a-question&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;A Question&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;What does it mean to be &amp;ldquo;faithful&amp;rdquo;? I wrestle with this question in various&#xA;contexts pretty regularly - mostly because God has been so ridiculously stupid&#xA;good to me that I feel compelled to ask daily &amp;ldquo;am I being faithful with the&#xA;gifts God has given me?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a lot of places to go from this starting point, but there&amp;rsquo;s some events&#xA;happening in my life that are giving me perspective on Jesus&amp;rsquo; faithfulness to&#xA;the Father&amp;rsquo;s will and what it implies for my own life of faithfulness and&#xA;steadfastness to the Lord.&lt;/p&gt;&#xA;&lt;h2 id=&#34;faithfulness&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Faithfulness&lt;/span&gt; &lt;a href=&#34;#faithfulness&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;How do I be more like Jesus (as a human), and how do I more or less copy his&#xA;faithfulness to God in the wake of trial. I&amp;rsquo;ve certainly given some amount of&#xA;thought to my own ability to be faithful in the worst potential circumstance of&#xA;straight up physical execution: martyrdom&amp;hellip; In Fox&amp;rsquo;s Book of Martyrs there&amp;rsquo;s&#xA;accounts of Christians through the ages singing hymns while being&#xA;burned alive for their faith&amp;hellip; What leads to that kind of faithfulness? What&#xA;gave these heros of the faith the peace to face death with a song? Would&#xA;I, today right now, if I was going to be executed for my faith (real reality in&#xA;many parts of the world) would I sing &amp;ldquo;Amazing Grace&amp;rdquo; while my physical body&#xA;was tortured to death&amp;hellip; I can&amp;rsquo;t say I know the answer to this, but the&#xA;accounts of these martyrs is at least encouraging that God has developed the&#xA;faith of others to such a degree that physical torture cannot break them from&#xA;their communion with God.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;What about NOT death...&lt;/p&gt;&#xA;&lt;p&gt;We all face trials of different kinds every day, and in the face of those trials what does faithfulness look like?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;knowledge&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Knowledge&lt;/span&gt; &lt;a href=&#34;#knowledge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Back to Jesus for a second&amp;hellip; A confession of mine is that I&amp;rsquo;ve lowkey felt&#xA;like Jesus, as truly human, had a leg up on us when it comes to remaining&#xA;faithful to the Father&amp;rsquo;s will&amp;hellip;.&lt;/p&gt;&#xA;&lt;p&gt;As a human he walked through life in deep communion&#xA;with the Father, and he &lt;em&gt;knows&lt;/em&gt; his place as the Author of creation, the one&#xA;who holds all things together. So I&amp;rsquo;ve often struggled with the thought &amp;ldquo;of&#xA;course Jesus is calm in X or isn&amp;rsquo;t worried about Y&amp;hellip; He knows he&amp;rsquo;s God, he&#xA;knows the plan, and that &lt;em&gt;knowledge&lt;/em&gt; must do something for enabling the kind&#xA;of calm faith we see in the person, in the human, Jesus Christ.&amp;rdquo;&lt;/p&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;p&gt;Jesus &lt;em&gt;knows&lt;/em&gt; that if he commanded a mountain to cast itself into the sea, that it would&amp;hellip; So did Jesus have &lt;em&gt;faith&lt;/em&gt; or &lt;em&gt;knowledge&lt;/em&gt;?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;almost-there&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Almost There&lt;/span&gt; &lt;a href=&#34;#almost-there&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I think he had both, and part of living a life of faith is &lt;em&gt;remembering&lt;/em&gt; all the&#xA;things that are true about Jesus&amp;hellip; If I only say he&amp;rsquo;s faithful and good to me&#xA;because the Bible says so, well that&amp;rsquo;s not a lot for me as a real physical&#xA;person to live my life on&amp;hellip; I live my life based on experience like anyone&#xA;else, and experience gives anyone a unique kind of knowledge - it&amp;rsquo;s more than&#xA;reading something in a book, when you learn something by living through it the&#xA;message is deeply engrained, it passes through your brain and into your&#xA;being&amp;hellip; ya know what I&amp;rsquo;m saying? There&amp;rsquo;s things we know and then there&amp;rsquo;s&#xA;things &lt;em&gt;we KNOW&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But for this to happen we have to acknowledge God through it&#xA;all&amp;hellip; whatever &amp;ldquo;it all&amp;rdquo; is certainly affects what &amp;ldquo;acknowledge God&amp;rdquo; means, but&#xA;for Jesus he certainly gave God the Father every ounce of glory and credit&#xA;during his life, and that acknowledgement I believe is a part of Jesus&amp;rsquo; life of&#xA;Faith&amp;hellip; so too in my life do I try to practice this perspective - giving&#xA;thanks to God for all things given and taken away&amp;hellip; This acknowledgement&#xA;presses the truth about God&amp;rsquo;s goodness and faithfulness to me deeper and deeper&#xA;into my being. It is Jesus being tender to my heart and shepherding me into&#xA;being more like him&lt;/p&gt;&#xA;&lt;p&gt;Jesus &lt;em&gt;knew&lt;/em&gt; everything true about his power because of his experience and&#xA;identity. I would certainly claim to know it as well - but &lt;em&gt;my&lt;/em&gt; knowledge of&#xA;Jesus&amp;rsquo; power is not &lt;em&gt;his&lt;/em&gt; knowledge of his own power. So does any knowledge I&#xA;have or lack affect the reality of Jesus&amp;rsquo; faithfulness?&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;no...&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-point&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Point&lt;/span&gt; &lt;a href=&#34;#the-point&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is finally my point&amp;hellip; I&amp;rsquo;m going through a trial, losing something&#xA;important to me that&amp;rsquo;s valuable and a source of provision for my family in many&#xA;ways. But at the same time&amp;hellip; God has been so good to me, and I have so much&#xA;experience and knowledge of that goodness&amp;hellip; I&amp;rsquo;ve been complimented by a few&#xA;people in this situation about how I&amp;rsquo;m handling it - cause anyone would be&#xA;pretty justified in being angry in what I&amp;rsquo;m walking through&amp;hellip; And I&amp;rsquo;m&#xA;struggling with many emotions:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;but ultimately&lt;/p&gt;&#xA;&lt;p&gt;I know God provides for me&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;and losing a massive source of that provision isn&amp;rsquo;t the end of the world because&#xA;not only do I know that God provides for me, but he already has provided in&#xA;such a way that this trial isn&amp;rsquo;t devastating. It&amp;rsquo;s annoying of course, but his&#xA;goodness to me so outshines the crappiness of this situation that I can&amp;rsquo;t help&#xA;but overflow with &amp;ldquo;this sucks but God&amp;rsquo;s stil good, and has been and will be&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;The thing is that the people around me do not have all the same &lt;em&gt;knowledge&lt;/em&gt; as&#xA;me that I&amp;rsquo;ve gained through &lt;em&gt;experience&lt;/em&gt; and acknowledgment of God&amp;rsquo;s&#xA;goodness&amp;hellip; Few people see all the details of how God has and is protecting me&#xA;and my family that to the outsider of my life, witnessing what&amp;rsquo;s happening, I&#xA;might look like that martyr being burned alive&amp;hellip;. Of course that&amp;rsquo;s a little&#xA;hyperbolic, but I don&amp;rsquo;t know the lives of all those martyrs - God probably&#xA;worked in them for so long and in such deep ways that not only the reality of a&#xA;trial, but the reality of physical pain, just washes over them&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;That&#39;s how I feel&lt;/p&gt;&#xA;&lt;p&gt;my trial here sucks, I even want to complain about it (and will probably) but ultimately God is so good to me, and I&amp;rsquo;ll make that known to everyone around me.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It might look miraculous to them, and it doesn&amp;rsquo;t mean it&amp;rsquo;s&#xA;not, because it&amp;rsquo;s God who provided for me in the first place, but my place of&#xA;serenity in the wake of trial comes from Jesus pressing the reality of his&#xA;faithfulness into my life, and now that I have a backdrop of years of goodness&#xA;from him - how can any one silly trial in this life send me anywhere but closer&#xA;to my Heavenly Father as I trust him for provision.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-31 Notes</title>
    <id>https://pype.dev/2025-07-31-notes/</id>
    <updated>2025-07-31T05:44:41Z</updated>
    <published>2025-07-31T05:44:41Z</published>
    <link href="https://pype.dev/2025-07-31-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-28-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-07-28-notes ]]&#xA;&#xA;## QuadTask&#xA;&#xA;- Implemented drag and drop on [quadtask](https://quadtask.app), it&#39;s in dev and I&#39;ll roll out updates as I work on cleaning up deployment - I&#39;d like to deploy locally, not from Actions&#xA;- Started notifications&#xA;&#xA;## Writing&#xA;&#xA;- wrote [[knowledge-and-faith]]&#xA;&#xA;## Work&#xA;&#xA;- Caught up with Progress Rail contact about platform engineering possibilities&#xA;- Talked with Zack about building a product myself... scary idea for sure...&#xA;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>What Is A Right?</title>
    <id>https://pype.dev/what-is-a-right/</id>
    <updated>2025-07-28T06:31:11Z</updated>
    <published>2025-07-28T06:31:11Z</published>
    <link href="https://pype.dev/what-is-a-right/" rel="alternate" type="text/html"></link>
    <summary type="text">I saw something this morning that kind of irk&#39;d me so I thought I&#39;d write some thoughts on it... It was one of those maps of countries and the results of a...</summary>
    <content type="html">&lt;h2 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt; &lt;a href=&#34;#intro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I saw something this morning that kind of irk&amp;rsquo;d me so I thought I&amp;rsquo;d write some&#xA;thoughts on it&amp;hellip; It was one of those maps of countries and the results of a&#xA;poll. The poll what &amp;ldquo;Is food a human right?&amp;rdquo; and like every country except USA&#xA;voted &amp;ldquo;yes&amp;rdquo; and we voted &amp;ldquo;no&amp;rdquo; - ie. Americans hate people&amp;hellip; obviously&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Obviously that&amp;rsquo;s ridiculous&amp;hellip; or it obvious to me anyways&amp;hellip; But the&#xA;ridiculousness of the graphic aside, it&amp;rsquo;s the baseline question that got me&#xA;thinking&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;What is a right?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;things-to-be-protected&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Things to be Protected&lt;/span&gt; &lt;a href=&#34;#things-to-be-protected&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The thing is - you &lt;em&gt;can not&lt;/em&gt; be &lt;strong&gt;entitled&lt;/strong&gt; to the labor of another human&#xA;being&amp;hellip; I think this is axiomatic, and I know there are large groups of people&#xA;who disagree, but I would call every one of those groups &lt;strong&gt;inhumane&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;My Right Trumps Your Freedom&lt;/p&gt;&#xA;&lt;p&gt;If my right requires that another person works, then that person is not&#xA;free&amp;hellip; sounds familiar, ya?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;So with the understanding that I have ZERO regard for a worldview that thinks&#xA;some humans can force labor on another group of humans - let&amp;rsquo;s talk about what&#xA;a right is.&lt;/p&gt;&#xA;&lt;p&gt;A right is something all humans have the ability to do AND at the same time is&#xA;a thing that CAN BE defended&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ultimately, rights are just force&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Note I&amp;rsquo;m not saying all humans have to agree on the thing, nor am I saying that&#xA;it MUST BE defended to be a right, but if something can forcefully be taken away&#xA;then I think the verbiage of calling it a &amp;ldquo;right&amp;rdquo; is nothing more than&#xA;emotional argumentation.&lt;/p&gt;&#xA;&lt;p&gt;I want all people to have clean drinking water, the ability to work and make a&#xA;life for themselves, the freedom to express creativity, and also food to eat&amp;hellip;&#xA;I want these things for all humans, but calling anything of them a &amp;ldquo;right&amp;rdquo; on&#xA;their own is either deeply misguided or, as noted above, axiomatic to a&#xA;worldview that is essentially pro-slavery. The simpleton thinking about&#xA;&amp;ldquo;rights&amp;rdquo; is doing  the world, and our country specifically no favors in public&#xA;discourse&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;For Example&lt;/p&gt;&#xA;&lt;p&gt;I hear that Trump&amp;rsquo;s administration is &amp;ldquo;taking away basic human rights&amp;rdquo; and&#xA;I&amp;rsquo;ve had the privilege of asking a few people what they mean&amp;hellip; Either nothing&#xA;or abortion. The nothing crowd is led astray by a misguided narrative, and&#xA;the abortion crowd simply denies the humanity of the unborn. They would&#xA;deny the humanity of any group of humans they can eliminate or enslave for&#xA;their own gain. Ironically it&amp;rsquo;s in restoring the idea of liberty from the&#xA;government that I think this WH administration is actually doing a good job of&#xA;defending huamn rights - and by civil necessity that means the rights of&#xA;citizens primarily.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;might-makes-right&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Might Makes Right&lt;/span&gt; &lt;a href=&#34;#might-makes-right&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Unfortunately, a reality of our broken world is that &lt;em&gt;might makes right&lt;/em&gt;. ie.&#xA;the Strong make the rules for the Weak, and if the Strong don&amp;rsquo;t protect the&#xA;Weak&amp;rsquo;s ability, say to eat, then the language of a &amp;ldquo;right to food&amp;rdquo; has&#xA;absolutely zero weight.&lt;/p&gt;&#xA;&lt;p&gt;Let me say plainly that I don&amp;rsquo;t subscribe to a worldview where &amp;ldquo;might makes&#xA;right&amp;rdquo; is appropriate - I believe Jesus will come back to judge the living and&#xA;the dead, and that his people (ie. the Church) should work the world for the&#xA;betterment of all people. But while I believe this and live my life in this&#xA;direction - I recognize the functional reality that the only things you &amp;ldquo;have a&#xA;right to&amp;rdquo; are the things you can protect.&lt;/p&gt;&#xA;&lt;p&gt;This is one reason I&amp;rsquo;ve come to appreciate America so much. It isn&amp;rsquo;t that our&#xA;country demonstrates every moral conviction I have, or even that it was founded&#xA;on &amp;ldquo;Christian Principals&amp;rdquo; (history is hard), but our country was founded on a&#xA;principal that all people have inalienable rights&amp;hellip; But those rights are&#xA;recognized in our country because our country can and does defend those liberties.&lt;/p&gt;&#xA;&lt;p&gt;If no one will defend you, you functionally have a right to nothing - to argue&#xA;otherwise is to be needlessly pedantic in a conversation that must revolve around&#xA;&lt;em&gt;practicality&lt;/em&gt; to be useful&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;p&gt;It&amp;rsquo;s high-time some political activists start thinking pragmatically&#xA;instead of spewing emotional language into a field they probably have no&#xA;business being in (besides those sweet sweet lobby-dollars of course)&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Fin&lt;/span&gt; &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So&amp;hellip; what&amp;rsquo;s the point? I think I&amp;rsquo;m saying we should just speak honestly about&#xA;our world, because emotional and vague language is actually not helpful&amp;hellip; To&#xA;that end, honestly many many people need to practice silence in the public&#xA;sector - the internet has made everyone an expert commentator on the&#xA;current thing, and it&amp;rsquo;s destroying actual rhetoric.&lt;/p&gt;&#xA;&lt;p&gt;And although I can&amp;rsquo;t say &amp;ldquo;all humans have a right to food&amp;rdquo; because not all&#xA;humans have their ability to obtain and eat food protected, I absolutely&#xA;believe all humans should have this ability of theirs protected. This&#xA;conclusion can&amp;rsquo;t be expressed in a simple map created undoubtedly to&#xA;perpetuate political anger and division&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;So go out there and protect the weaker person&amp;rsquo;s &amp;ldquo;right&amp;rdquo; to whatever you feel is&#xA;being wrongly taken from them - but if you can&amp;rsquo;t protect it then either vote&#xA;for someone who will or frankly quit talking&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-28 Notes</title>
    <id>https://pype.dev/2025-07-28-notes/</id>
    <updated>2025-07-28T06:30:24Z</updated>
    <published>2025-07-28T06:30:24Z</published>
    <link href="https://pype.dev/2025-07-28-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-27-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-07-27-notes ]]&#xA;&#xA;## Blog&#xA; &#xA;- og images look busted, taking a look at it this morning&#xA;- wrote [[what-is-a-right]]&#xA;&#xA;## Wins&#xA;&#xA;- wrapped up that stupid form at work&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-27 Notes</title>
    <id>https://pype.dev/2025-07-27-notes/</id>
    <updated>2025-07-27T06:38:30Z</updated>
    <published>2025-07-27T06:38:30Z</published>
    <link href="https://pype.dev/2025-07-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve lost a lot of my terminal workflow since picking up more work in kubernetes and terraform, mostly because of the work patterns of those around me and...</summary>
    <content type="html">&lt;h2 id=&#34;file-explorer&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;File explorer&lt;/span&gt; &lt;a href=&#34;#file-explorer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve lost a lot of my terminal workflow since picking up more work in kubernetes and terraform, mostly because of the work patterns of those around me and the slight differences between my dev machines&amp;hellip; but I&amp;rsquo;ve dealt with it for too long. The first step to recovering some of my speed with file management specifically is to get a terminal file manager figured out.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;finder&lt;/code&gt; is the WORST file explorer on the planet and I use a Mac daily so it has to end&lt;/li&gt;&#xA;&lt;li&gt;superfile looks nice, but I could immediately even get &amp;ldquo;go bacK&amp;rdquo; to work with their vim keybindings, so I&amp;rsquo;m out&lt;/li&gt;&#xA;&lt;li&gt;trying yazi now&amp;hellip;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;theme done with &amp;ldquo;flavors&amp;rdquo;: &lt;a href=&#34;https://github.com/yazi-rs/flavors&#34;&gt;https://github.com/yazi-rs/flavors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I cloned that to &lt;code&gt;~/.config/yazi/flavors/&lt;/code&gt; and then was able to just use their few canned ones easily in &lt;code&gt;~/.config/yazi/theme.toml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;config oddness&lt;/p&gt;&#xA;&lt;p&gt;I tried to setup showing hidden files in the config file but it didn&amp;rsquo;t seem to work&amp;hellip; but just hitting &lt;code&gt;.&lt;/code&gt; in the tui showed my hidden files just fine&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;why&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Why?&lt;/span&gt; &lt;a href=&#34;#why&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;right now I&amp;rsquo;m trying to move all my homelab stuff to a mono-repo, so terminal file management makes that easier&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I think I have to take down each compose stack to move it from&#xA;&lt;code&gt;.../homelab-compose&lt;/code&gt; to &lt;code&gt;.../homelab-mono/&amp;lt;something else&amp;gt;&lt;/code&gt; which is&#xA;annoying because I don&amp;rsquo;t have a way to take all the compose stacks down and&#xA;up yet&amp;hellip; could make a simple custom config for it? ugh&amp;hellip;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;others&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Others&lt;/span&gt; &lt;a href=&#34;#others&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Also I wanted to think about a way to backup my &lt;code&gt;~/.skm&lt;/code&gt; directory since I&amp;rsquo;m&#xA;using &lt;a href=&#34;&#34;&gt;skm&lt;/a&gt; for my ssh keys, then I can restore from the back on a new laptop&#xA;and have all my keys ready to go&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kanboard.paynepride.com/?controller=TaskViewController&amp;amp;action=show&amp;amp;task_id=247&amp;amp;project_id=8&#34;&gt;kanboard ticket&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;started transitioning quadtask over to fully AI driven dev - curious if I can have windsurf actually generate feature ideas or not&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;wins&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Wins&lt;/span&gt; &lt;a href=&#34;#wins&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I forgot how magicaly ssh + tmux is&amp;hellip; I wrote this in my daily notes BUFFER on my desktop from this repurposed laptop in my living room&amp;hellip; so amazing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-26 Notes</title>
    <id>https://pype.dev/2025-07-26-notes/</id>
    <updated>2025-07-26T13:28:52Z</updated>
    <published>2025-07-26T13:28:52Z</published>
    <link href="https://pype.dev/2025-07-26-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-25-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-07-25-notes ]]&#xA;&#xA;## Dev&#xA;&#xA;- I kept working on my ansible playbook and just recipes for setting up a new machine... I just need to diagram it out to continue honing in the experience:&#xA;&#xA;1. initial install of OS&#xA;2. python -m http.server from my desktop, download &#xA;  - ssh key&#xA;  - skm backup? (haven&#39;t done this yet but feels potentially nice...)&#xA;3. clone ansible-playbooks&#xA;4. run bootstrap&#xA;  - bootstrap dotfiles?&#xA;  - just bootstrap?&#xA;  - do this with bash assuming just isn&#39;t installed yet&#xA;5. just &lt;whatever set of things&gt;&#xA;&#xA;I&#39;m not sure what&#39;s missing from my playbook still&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 My Ultimate Self-hosting Setup</title>
    <id>https://pype.dev/thoughts-764/</id>
    <updated>2025-07-25T19:56:38Z</updated>
    <published>2025-07-25T19:56:38Z</published>
    <link href="https://pype.dev/thoughts-764/" rel="alternate" type="text/html"></link>
    <summary type="text">great post on self-hosting. I think in a lot of similar ways and had a siar journey. There&#39;s things I want to accomplish</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://codecaptured.com/blog/my-ultimate-self-hosting-setup/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://codecaptured.com/blog/my-ultimate-self-hosting-setup/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - My Ultimate Self-hosting Setup&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://codecaptured.com/blog/my-ultimate-self-hosting-setup/&#34;&gt;My Ultimate Self-hosting Setup&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;great post on self-hosting. I think in a lot of similar ways and had a siar journey. There&#39;s things I want to accomplish as time goes on, looking for motivation to get a post like this going myself&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>God Provides When He Takes Away</title>
    <id>https://pype.dev/god-provides-when-he-takes-away/</id>
    <updated>2025-07-25T05:52:37Z</updated>
    <published>2025-07-25T05:52:37Z</published>
    <link href="https://pype.dev/god-provides-when-he-takes-away/" rel="alternate" type="text/html"></link>
    <summary type="text">This post is meant to serve as a reminder that God&#39;s provision is about more than the chronology of things happening... For example he brought me a job when...</summary>
    <content type="html">&lt;p&gt;This post is meant to serve as a reminder that God&amp;rsquo;s provision is about more&#xA;than the chronology of things happening&amp;hellip; For example he brought me a job when&#xA;I lost my main one - he just brought that to me before I lost it&amp;hellip; the timing&#xA;of that event make it no less significant or caused by God&amp;hellip; He answered the&#xA;prayer I hadn&amp;rsquo;t uttered yet when it comes to providing for my family&lt;/p&gt;&#xA;&lt;p&gt;I believe one way God provides in the midst of taking things away is through&#xA;living a life of daily submission to him. The idea that it goes:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;something bad happens&lt;/li&gt;&#xA;&lt;li&gt;pray for protection&lt;/li&gt;&#xA;&lt;li&gt;maybe something happens and the reality of what happens affects my view of God&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;is silly, selfish, and misguided.&lt;/p&gt;&#xA;&lt;p&gt;God sometimes provides by gifting you in a way that ends up protecting you&#xA;later - but to make the claim the gift was honed solely by you, or worse - a&#xA;product of yourself, is to make a grave theological error&amp;hellip; God&amp;rsquo;s provision is&#xA;a daily journey with him, not a hail mary prayer for a last second safety net&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-25 Notes</title>
    <id>https://pype.dev/2025-07-25-notes/</id>
    <updated>2025-07-25T05:38:45Z</updated>
    <published>2025-07-25T05:38:45Z</published>
    <link href="https://pype.dev/2025-07-25-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-24-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-07-24-notes ]]&#xA;&#xA;## Wins&#xA;&#xA;- [[god-provides-when-he-takes-away]]&#xA;- published [[after-exceeding-expectations-for-4-years]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-24 Notes</title>
    <id>https://pype.dev/2025-07-24-notes/</id>
    <updated>2025-07-24T06:26:10Z</updated>
    <published>2025-07-24T06:26:10Z</published>
    <link href="https://pype.dev/2025-07-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-23-notes</summary>
    <content type="text">&#xA;yesterday: [[ 2025-07-23-notes ]]&#xA;&#xA;## Desktop&#xA;&#xA;Plasma updated after a reboot, and I&#39;m not gonna try to rollback but it&#39;s a little messed up so I need to figure out:&#xA;1. my activity bar virtual desktops don&#39;t show what&#39;s on each desktop&#xA;2. the task bar doesn&#39;t show all windows (I remember fixing this before)&#xA;3. maybe use this as a time to make kde more like mac just for consistency with work&#xA;&#xA;Fixed my long-standing broken keybinding for screenshot on desktop! and it&#39;s a dumb keybind but it matches what I use on mac...&#xA;&#xA;![20250724115049_5b30c47f.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250724115049_5b30c47f.png)&#xA;&#xA;## TODOs&#xA;&#xA;- Blount AC&#xA;  - not doing mini-split for now&#xA;  - need new central AC&#xA;  - I called and left a message&#xA;&#xA;- bug report for flameshot&#xA;&#xA;## Work&#xA;&#xA;- going to start learning golang for work&#xA;&#xA;## Other&#xA;&#xA;- [[olivet-mens-group-august-2025]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-23 Notes</title>
    <id>https://pype.dev/2025-07-23-notes/</id>
    <updated>2025-07-23T05:48:00Z</updated>
    <published>2025-07-23T05:48:00Z</published>
    <link href="https://pype.dev/2025-07-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-22-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-22-notes]]&#xA;&#xA;## Blog / Dev&#xA;&#xA;Started [[setting-up-a-laptop-in-2025]]&#xA;&#xA;- need to get my ssh keys and stuff over to my server&#xA;&#xA;## Church&#xA;&#xA;Continued work on [[olivet-mens-group-august-2025]]&#xA;&#xA;## Other&#xA;&#xA;struggling with a lot of thoughts over [[after-exceeding-expectations-for-4-years]] and [[reflections-on-rto-2025]]&#xA;&#xA;sent updated resume to Tek&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Olivet Men’s Group August 2025</title>
    <id>https://pype.dev/olivet-mens-group-august-2025/</id>
    <updated>2025-07-22T06:35:57Z</updated>
    <published>2025-07-22T06:35:57Z</published>
    <link href="https://pype.dev/olivet-mens-group-august-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">1 John 3: 7-10 for men&#39;s group in August 2025</summary>
    <content type="html">&lt;p&gt;1 John 3: 7-10 for men&amp;rsquo;s group in August 2025&lt;/p&gt;&#xA;&lt;details class=&#34;admonition note&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;1 John 3: 7-10&lt;/summary&gt;&#xA;&lt;p&gt;7 Little children, let no one deceive you: the one who practices&#xA;righteousness is righteous, just as that one is righteous. 8 The one who&#xA;practices sin is of the devil, because the devil has been sinning from the&#xA;beginning. For this reason the Son of God was revealed: in order to destroy the&#xA;works of the devil. 9 Everyone who is fathered by God does not practice sin,&#xA;because his seed resides in him, and he is not able to sin, because he has been&#xA;fathered by God. 10 By this the children of God and the children of the devil&#xA;are evident: everyone who does not practice righteousness is not of God,&#xA;namely, the one who does not love his brother.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;details class=&#34;admonition note&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;verse 7 from ESV&lt;/summary&gt;&#xA;&lt;p&gt;7 Little children, let no one deceive you. Whoever practices righteousness is righteous, as he is righteous&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;The difference I note is that ESV, right or wrong, is more clear that the &amp;ldquo;just as that one is righteous&amp;rdquo; is actually Jesus&lt;/p&gt;&#xA;&lt;h2 id=&#34;flowchart&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Flowchart&lt;/span&gt; &lt;a href=&#34;#flowchart&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://affine.paynepride.com/workspace/068b2d03-00ee-4b4b-9a8d-d7b98e85f1f2/YYJT5gEfZin3nTFv7s5wp&#34;&gt;affine link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;interesting-notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Interesting notes&lt;/span&gt; &lt;a href=&#34;#interesting-notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;we will avoid cheap questions that assume black and white understanding of&#xA;the passage &amp;ldquo;the one who practices sin if of the devil&amp;rdquo; does not mean that&#xA;sinning one time means you&amp;rsquo;re not saved&amp;hellip; put the juvenile things behind us&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;the devil has been sinning from the beginning&amp;rdquo;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;from the beginning of what?&lt;/li&gt;&#xA;&lt;li&gt;has he really been sinning the entire time? don&amp;rsquo;t we have mythology about&#xA;Lucifer being an angel of light??? (note the heavy sarcasm from me here&amp;hellip;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt; &lt;a href=&#34;#reflection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been loosely mediating on this and Romans 7 and 8&lt;/p&gt;&#xA;&lt;details class=&#34;admonition note&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Romans 7:16-8:11&lt;/summary&gt;&#xA;&lt;p&gt;15 For what I am doing I do not understand, because what I want to do, this I do not practice, but what I hate, this I do.&#xA;16 Now if I do what I do not want, I agree with the law, that it is good. 17 So now it is no longer I who do it, but sin that dwells within me. 18 For I know that nothing good dwells in me, that is, in my flesh.&#xA;For I have the desire to do what is right, but not the ability to carry it out. 19 For I do not do the good I want, but the evil I do not want is what I keep on doing. 20 Now if I do what I do not want, it is no longer I who do it, but sin that dwells within me.&#xA;21 So I find it to be a law that when I want to do right, evil lies close at hand. 22 For I delight in the law of God, in my inner being, 23 but I see in my members another law waging war against the law of my mind and making me captive to the law of sin that dwells in my members.&#xA;24 Wretched man that I am! Who will deliver me from this body of death? 25 Thanks be to God through Jesus Christ our Lord! So then, I myself serve the law of God with my mind, but with my flesh I serve the law of sin. 8:1 There is therefore now no condemnation for those who are in Christ Jesus.&#xA;2 For the law of the Spirit of life has set you free in Christ Jesus from the law of sin and death. 3 For God has done what the law, weakened by the flesh, could not do.&#xA;By sending his own Son in the likeness of sinful flesh and for sin, he condemned sin in the flesh, 4 in order that the righteous requirement of the law might be fulfilled in us, who walk not according to the flesh but according to the Spirit.&#xA;5 For those who live according to the flesh set their minds on the things of the flesh, but those who live according to the Spirit set their minds on the things of the Spirit. 6 For to set the mind on the flesh is death, but to set the mind on the Spirit is life and peace.&#xA;7 For the mind that is set on the flesh is hostile to God, for it does not submit to God’s law; indeed, it cannot.&#xA;8 Those who are in the flesh cannot please God.&#xA;9 You, however, are not in the flesh but in the Spirit, if in fact the Spirit of God dwells in you. Anyone who does not have the Spirit of Christ does not belong to him.&#xA;10 But if Christ is in you, although the body is dead because of sin, the Spirit is life because of righteousness. 11 If the Spirit of him who raised Jesus from the dead dwells in you, he who raised Christ Jesus from the dead will also give life to your mortal bodies through his Spirit who dwells in you.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;I think I&amp;rsquo;m mostly walking away from these texts with 2 things on my heart:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I must be desensitized to some sin in my life - I think it&amp;rsquo;s impossible for&#xA;me to know in my inner being am I genuinely separating myself from my&#xA;sinfulness and enjoying God&amp;rsquo;s presence, or am I using grace as an excuse to&#xA;sin&amp;hellip; The entanglement of my own heart is one of the most difficult things to&#xA;navigate in personal faith.&lt;/li&gt;&#xA;&lt;li&gt;I am questioning my devotion&amp;hellip; am I devoted to Jesus, to his law, to doing&#xA;good&amp;hellip; or am I a slave to myself?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;As I write this out, the Christian concept of &amp;ldquo;setting the captives free&amp;rdquo; and&#xA;jubilee and freedom strike my heart deeply. Just these phrases begin to call up&#xA;emotions. But as I look at my life right now, what am I doing that shouts&#xA;freedom? I spend more time lately playing games than being entrenched in&#xA;theological study, I think about work more than things which are noble and&#xA;praiseworthy, and I seem to purposefully focus on my own situations internally&#xA;rather than on God&amp;rsquo;s grace (which I do externally a lot - but I feel this&#xA;tension inside - &lt;strong&gt;a hook of doubt&lt;/strong&gt;)&lt;/p&gt;&#xA;&lt;details class=&#34;admonition danger&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Romans 8:5a&lt;/summary&gt;&#xA;&lt;p&gt;5 For those who live according to the flesh set their minds on the things of the flesh,&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;details class=&#34;admonition note&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Romans 6&lt;/summary&gt;&#xA;&lt;p&gt;6 For to set the mind on the flesh is death, but to set the mind on the Spirit is life and peace.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;Why would I be hesitant to regularly set my mind on things of the spirit? I&#xA;absolutely feel something inside that rebels against the things of God at&#xA;times&amp;hellip; at odd times as well.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-prayer&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;A Prayer&lt;/span&gt; &lt;a href=&#34;#a-prayer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Lord Jesus, help me to set my mind on things of the Spirit - to live in&#xA;accordance with your will and righteousness. I confess I run in ways I think&#xA;are secret or hidden, I reject godly things daily, and yet in your&#xA;compassionate love you have saved me from this body of sin and death. Praise be&#xA;to God, guide my heart and mind today, just enough so that tomorrow I can ask&#xA;for what I need for the day&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Romans 8:21-25&lt;/p&gt;&#xA;&lt;p&gt;21 Consequently, I find the principle with me, the one who wants to do good, that evil is present with me. 22 For I joyfully agree with the law of God in my inner person, 23 but I observe another law in my members, at war with the law of my mind and making me captive to the law of sin that exists in my members. 24 Wretched man that I am! Who will rescue me from this body of death? 25 Thanks be to God through Jesus Christ our Lord! So then, I myself with my mind am enslaved to the law of God, but with my flesh I am enslaved to the law of sin.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-22 Notes</title>
    <id>https://pype.dev/2025-07-22-notes/</id>
    <updated>2025-07-22T06:11:40Z</updated>
    <published>2025-07-22T06:11:40Z</published>
    <link href="https://pype.dev/2025-07-22-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-20-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-20-notes]]&#xA;&#xA;- working on finalizing [[after-exceeding-expectations-for-4-years]]&#xA;&#xA;## Bible Project&#xA;&#xA;- I lead discussion next month at Men&#39;s group - so starting to take a look at 1 John 3: 7-10&#xA;&#xA;  - [[olivet-mens-group-august-2025]]&#xA;&#xA;- Kassia looking for Bible study ideas... gotta do some amount of research for her&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 It’s rude to show AI output to people | Alex Martsinovich</title>
    <id>https://pype.dev/thoughts-758/</id>
    <updated>2025-07-21T11:46:43Z</updated>
    <published>2025-07-21T11:46:43Z</published>
    <link href="https://pype.dev/thoughts-758/" rel="alternate" type="text/html"></link>
    <summary type="text">Great read on LLM output, and the slop that&#39;s already been dumped into the internet. I&#39;ve become a pretty heavy AI user</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://distantprovince.by/posts/its-rude-to-show-ai-output-to-people/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://distantprovince.by/posts/its-rude-to-show-ai-output-to-people/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - It&#39;s rude to show AI output to people | Alex Martsinovich&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://distantprovince.by/posts/its-rude-to-show-ai-output-to-people/&#34;&gt;It&#39;s rude to show AI output to people | Alex Martsinovich&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Great read on LLM output, and the slop that&#39;s already been dumped into the internet. I&#39;ve become a pretty heavy AI user - mostly for code and then thoughts organization. With code (that matters) I review everything AI makes. When I ask gemma3 via ollama to organize my thoughts, I reiterate the importance in my prompt to not re-word things, but to just organize and then help me work through whatever I&#39;m working through in the post.&#xA;&#xA;I&#39;ve generated a blog post or 2 with AI only, and it&#39;s still relatively clear to me when AI writes vs when a human writes. This post does a good job of highlighting how 1. this is a hilariously old sci-fi problem (there&#39;s nothing new under the sun, ammirite?) 2. how AI is a useful tool and 3. how in the age of AI we&#39;re still actually just battling other humans.... but humans are simple creatures in a lot of ways - we take the path of least resistance the vast majority of the time, and LLM sloppy output that _looks_ not shitty is certainly a low-resistance path to a post or commit... but was the post or commit worth anything?&#xA;&#xA;without proof of thought - no.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>You suck at git - but it’s honestly fine</title>
    <id>https://pype.dev/you-suck-at-git-but-its-honestly-fine/</id>
    <updated>2025-07-21T05:20:07Z</updated>
    <published>2025-07-21T05:20:07Z</published>
    <link href="https://pype.dev/you-suck-at-git-but-its-honestly-fine/" rel="alternate" type="text/html"></link>
    <summary type="text">I just started listening to localfirst.fm podcast podcast and would recommend it after 2 episodes. In the first episode, the hosts discuss where the term...</summary>
    <content type="html">&lt;h2 id=&#34;git-is-for-everyone&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Git is for everyone&lt;/span&gt; &lt;a href=&#34;#git-is-for-everyone&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I just started listening to &lt;a href=&#34;https://www.localfirst.fm/&#34;&gt;localfirst.fm podcast&lt;/a&gt;&#xA;podcast and would recommend it after 2 episodes. In the first episode, the&#xA;hosts discuss where the term &lt;code&gt;localfirst&lt;/code&gt; comes from, what it means, and&#xA;examples of some localfirst, or semi-localfirst projects. One of them is &lt;code&gt;git&lt;/code&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the de-facto standard by which developers share code today.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a reason it&amp;rsquo;s the standard. I&amp;rsquo;m not arguing that it&amp;rsquo;s perfect, and&#xA;there&amp;rsquo;s new abstractions that may help people adopt usage like&#xA;&lt;a href=&#34;https://github.com/jj-vcs/jj&#34;&gt;jujutsu&lt;/a&gt;, but ultimately &lt;code&gt;git&lt;/code&gt; is a great tool,&#xA;and anyone can use it who works with text files (lookin at you book-writing&#xA;nerds)&lt;/p&gt;&#xA;&lt;p&gt;But as I was enjoying the pod the co-host/guest said &amp;ldquo;and we all know the git user&#xA;experience isn&amp;rsquo;t that great&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;heavy sigh&lt;/p&gt;&#xA;&lt;p&gt;Git isn&amp;rsquo;t that hard - you probably just aren&amp;rsquo;t that good at it&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;it-s-ok&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;It’s OK&lt;/span&gt; &lt;a href=&#34;#it-s-ok&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t hear me say that you suck at git like that&amp;rsquo;s a bad thing&amp;hellip; It&amp;rsquo;s &lt;em&gt;totally&#xA;fine&lt;/em&gt; to not be a wizard. Many people can use git like 80-90% efficiently for&#xA;their own use cases. In fact, my usage of git doesn&amp;rsquo;t fall into any perfectly&#xA;established patterns, and the decisions I make are not always the same (the&#xA;overplayed rebase vs merge-upstream argument&amp;hellip; I do both, it doesn&amp;rsquo;t matter,&#xA;squash your crap at the end anyways&amp;hellip;)&lt;/p&gt;&#xA;&lt;p&gt;So continue to collaborate - checkout your feature branches, pull in&#xA;&lt;code&gt;origin/main&lt;/code&gt; after a PR, ask for help with a rebase for the 69th time if you&#xA;need to&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Danger&lt;/p&gt;&#xA;&lt;p&gt;But quit your stupid annoying bitching&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;seriously&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Seriously&lt;/span&gt; &lt;a href=&#34;#seriously&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Honestly, I learned &lt;em&gt;about&lt;/em&gt; git 8 years ago when I started my first job as a&#xA;data scientist. I was told by another developer, Jokko,&#xA;that it was the standard for collaboration&amp;hellip; only issue was that almost no one&#xA;in our division even used it. Or if they did it was at the end of a project,&#xA;after sharing code on share drives and OneDrive, at the very end we&amp;rsquo;d see &lt;code&gt;git init&lt;/code&gt;, &lt;code&gt;git add .&lt;/code&gt;, &lt;code&gt;git commit -m &amp;quot;pushed to git&amp;quot;&lt;/code&gt;, &lt;code&gt;git push&lt;/code&gt;&amp;hellip; literally 0&#xA;value, or at least no more value than&#xA;&lt;code&gt;my_project_final_FINAL_v2_project-over-now.zip&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;It took me a few weeks of on-the-job git usage, practicing way over complicated&#xA;git flows and talking about git with the few people around me who knew it, for&#xA;me to become a go-to resource&amp;hellip; I was and am honestly still annoyed about&#xA;it&amp;hellip; It didn&amp;rsquo;t take that long, or that much effort, to get pretty comfortable&#xA;with git. There&amp;rsquo;s tons of UIs (with their own flaws), TUIs, and resources for&#xA;learning the few things that will make you stand out as a git wizard:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;can you rebase onto a new root commit?&lt;/li&gt;&#xA;&lt;li&gt;can you pull in changes from someone else&amp;rsquo;s feature branch?&lt;/li&gt;&#xA;&lt;li&gt;if you find yourself in &lt;code&gt;detached HEAD state&lt;/code&gt; are you panicked?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Just make a directory, &lt;code&gt;git init&lt;/code&gt;, and start shitting all over text files&amp;hellip;&#xA;make branches, reconcile differences, just freaking practice for 10 minutes&lt;/p&gt;&#xA;&lt;h2 id=&#34;end&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;End&lt;/span&gt; &lt;a href=&#34;#end&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was triggered I guess listening to this podcast episode&amp;hellip; It&amp;rsquo;s fine to not&#xA;be an expert, it&amp;rsquo;s fine to just use the 3 or 4 commands you probably need (&lt;code&gt;git checkout -b, rebase origin/main, merge feature/branch, push&lt;/code&gt;), I am happy to&#xA;help people with git everyday - like I said above, I am somehow a go-to&#xA;resource for git in my workplace&amp;hellip;. (heck, even one of my managers asks me to&#xA;squash all the commits on his feature branches for him before it&amp;rsquo;s merged to&#xA;main&amp;hellip; it&amp;rsquo;s fine)&lt;/p&gt;&#xA;&lt;p&gt;But the user experience isn&amp;rsquo;t bad, so quit your bitching.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;details class=&#34;admonition note&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;phone notes&lt;/summary&gt;&#xA;&lt;p&gt;hot take, if you complain about git then you don&amp;rsquo;t it&amp;hellip; and that&amp;rsquo;s fine but&#xA;shut up. I love git,I use it in a way that&amp;rsquo;s productive for me, and when I hear&#xA;people complain all they ever say is &amp;ldquo;git is hard&amp;rdquo; and &amp;ldquo;why is rebasing so&#xA;hard?!?!&amp;rdquo;&#xA;but they don&amp;rsquo;t get it, and that&amp;rsquo;s fine. you can use git inefficiently, as a&#xA;requirement of your job, and not enjoy it. but don&amp;rsquo;t bitch, because with 10&#xA;minutes of practice you could gain some real fluency in rebasing&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-20 Notes</title>
    <id>https://pype.dev/2025-07-20-notes/</id>
    <updated>2025-07-20T05:20:21Z</updated>
    <published>2025-07-20T05:20:21Z</published>
    <link href="https://pype.dev/2025-07-20-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-19-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-19-notes]]&#xA;&#xA;## Today&#xA;&#xA;- started [[you-suck-at-git-but-its-honestly-fine]]&#xA;&#xA;- made great progress on protecting some markata posts with an encryption workflow&#xA;  - markata build can encrypt the rendered html data of a post (encryption done with python)&#xA;  - front-end can decrypt the post content&#xA;  - password and decrypted content are nowhere on the rendered website (but they are presently in the repo)&#xA;  - [[example-protected-post]] - password is `example123`&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Anthropic Is Bleeding Out</title>
    <id>https://pype.dev/thoughts-757/</id>
    <updated>2025-07-19T10:44:56Z</updated>
    <published>2025-07-19T10:44:56Z</published>
    <link href="https://pype.dev/thoughts-757/" rel="alternate" type="text/html"></link>
    <summary type="text">Ah... so things are rough on the business side according to Edward Zitron An intere|ing note is that anthropic models m</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.wheresyoured.at/anthropic-is-bleeding-out/?ref=dailydev&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.wheresyoured.at/anthropic-is-bleeding-out/?ref=dailydev&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Anthropic Is Bleeding Out&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.wheresyoured.at/anthropic-is-bleeding-out/?ref=dailydev&#34;&gt;Anthropic Is Bleeding Out&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Ah... so things are rough on the business side according to Edward Zitron&#xA;&#xA;An intere|ing note is that anthropic models make more more than half of all token related to programming through OpenRouter... so they clearly have marketshare but if they&#39;re losing money on _every single customer_ then oof... what does the future of vibe coding look like? And who can afford it?&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-19 Notes</title>
    <id>https://pype.dev/2025-07-19-notes/</id>
    <updated>2025-07-19T05:37:30Z</updated>
    <published>2025-07-19T05:37:30Z</published>
    <link href="https://pype.dev/2025-07-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-18-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-18-notes]]&#xA;&#xA;## Notes&#xA;&#xA;- working on protecting blog posts with a password somehow too&#xA;  - pretty cool that I can pull in RSS but it pulls in the whole feed and then it&#39;s not super easy to edit everything... maybe worth it for one time additions - or could keep using FreshRSS for that and karakeep for other stuff.... though not notes, that&#39;s my blog... so it&#39;s kind of like archivebox, replaces texting myself messages with links and notes... that&#39;s probably where it fits.&#xA;&#xA;## Men&#39;s Group&#xA;&#xA;- Met at Chefo&#39;s today, talked about identity in Christ, what it means to abide, and why we still sin even though 1 John says &#34;anyone who sins is not in him&#34;&#xA;- I am leading on the next one - August 16. Note in [karakeep](https://karakeep.paynepride.com/dashboard/preview/opl94af4bwsdk55bg8xtd43h)&#xA;&#xA;## Affine&#xA;&#xA;What I am seeing about Affine is that the power is in the edgeless view. There&#39;s plenty of notion-esq apps for writting documents that have some special formatting. But the edgeless view allows you to represent more complicated relationships that are present in the document that are impossible to represent linearlly...&#xA;&#xA;![20250719114631_9e51e998.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250719114631_9e51e998.png)&#xA;&#xA;![20250719114742_7621198f.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250719114742_7621198f.png)&#xA;&#xA;## Karakeep&#xA;&#xA;- started setting up [karakeep](https://docs.karakeep.app/) today using [this blog](https://blog.mariofragnito.it/en-gb/posts/rss-and-read-later-with-miniflux/)&#xA;&#xA;I can add stuff to karakeep, put it in a list, then expose the list as RSS and get the things that I want to read later in the feed reader, while still having karakeep now as a dumping grounds... now it feels actually like it does what thoughts does for me _almost_ ... there&#39;s an app and extension to play around with&#xA;&#xA;- the firefox extension rocks...&#xA;&#xA;- I wonder how the app is...&#xA;&#xA;!!! success &#34;It ephing rocks...&#34;&#xA;&#xA;    Why did I wait so long on this???&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Thread by @windsurf_ai on Thread Reader App – Thread Reader App</title>
    <id>https://pype.dev/thoughts-753/</id>
    <updated>2025-07-18T10:54:50Z</updated>
    <published>2025-07-18T10:54:50Z</published>
    <link href="https://pype.dev/thoughts-753/" rel="alternate" type="text/html"></link>
    <summary type="text">Claude 4 is pretty impressive, I&#39;m enjoying using it at work and now I&#39;ll certainly burn some credits at home. Also I l</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://threadreaderapp.com/thread/1945599013954490523.html?utm_source=tldrai&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://threadreaderapp.com/thread/1945599013954490523.html?utm_source=tldrai&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Thread by @windsurf_ai on Thread Reader App – Thread Reader App&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://threadreaderapp.com/thread/1945599013954490523.html?utm_source=tldrai&#34;&gt;Thread by @windsurf_ai on Thread Reader App – Thread Reader App&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Claude 4 is pretty impressive, I&#39;m enjoying using it at work and now I&#39;ll certainly burn some credits at home.&#xA;&#xA;Also I like this Threadreader thing... may need to look into it&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-18 Notes</title>
    <id>https://pype.dev/2025-07-18-notes/</id>
    <updated>2025-07-18T05:23:14Z</updated>
    <published>2025-07-18T05:23:14Z</published>
    <link href="https://pype.dev/2025-07-18-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday : 2025-07-17-notes</summary>
    <content type="text">&#xA;yesterday : [[2025-07-17-notes]]&#xA;&#xA;## News&#xA;&#xA;- I got news that my job will be moved to on-site only... I plan to make my case but I have low hopes and I&#39;m not sure where or if I&#39;ll write about this... or when...&#xA;&#xA;- [The Kill is an amazing song and this rivals the OG](https://www.youtube.com/watch?v=HMBRjo33cUE)&#xA;&#xA;## Wins&#xA;&#xA;- Finished [[pilgrims-creek---about-me]]&#xA;- Wrote up a bit on [[after-exceeding-expectations-every-year]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Daily Notes Neovim Plugin</title>
    <id>https://pype.dev/daily-notes-neovim-plugin/</id>
    <updated>2025-07-17T21:11:32Z</updated>
    <published>2025-07-17T21:11:32Z</published>
    <link href="https://pype.dev/daily-notes-neovim-plugin/" rel="alternate" type="text/html"></link>
    <summary type="text">Windsurf helped me whip up a neovim plugin for my daily notes workflows. It has a few features that make my note taking workflow day-to-day a tiny bit more...</summary>
    <content type="text">&#xA;# What?&#xA;&#xA;Windsurf helped me whip up a neovim plugin for my daily notes workflows. It has&#xA;a few features that make my note taking workflow day-to-day a tiny bit more&#xA;fluid&#xA;&#xA;!!! note &#34;credit due&#34;&#xA;&#xA;    Honestly my zettlekasten and this daily notes stuff is only possible with the help of [Waylon Walker](https://waylonwalker.com)&#xA;&#xA;## Context&#xA;&#xA;I learned about the concept of a [zettlekasten]() recently and it really spoke&#xA;to me. I&#39;ve sought for YEARS to have a nice note-taking workflow, where I never&#xA;think about _where_ to put something, it&#39;s searchable, portable to some degree,&#xA;and customizable... I&#39;ve used OneNote and its derivatives, different&#xA;self-hosted container based note taking apps, raw markdown files scattered on&#xA;my file system, etc... I think I&#39;ve finally landed on a solution which is&#xA;basically this blog + some tooling to achieve the things I want...&#xA;&#xA;- [markata](https://markata.dev) is the build system, it&#39;s what lets me keep all my notes in markdown files, and build them into a cohesive searchable experience on the web&#xA;- [neovim](https://neovim.io) is my primary note taking environment - using tools like `marksman` I get the ability to &#34;jump&#34; to wiki-linked posts and grep content easily for searching&#xA;- [copier](https://copier.readthedocs.io) is used for generating note templates - whether it&#39;s a `til`, blog post, or starting my daily note page - copier makes it quick to stub out the file in the right place with the right tags and frontmatter for markata&#xA;&#xA;## Usage&#xA;&#xA;I&#39;ll explain the daily notes workflow here, the code is below...&#xA;&#xA;There&#39;s basically just a couple things I wanted smoothed out in my note-taking as I am getting started here...&#xA;&#xA;1. I need an immediate way to get to my daily notes page... I have started keeping a new note for each day and it&#39;s a chore to copy paste the old note, update the date, delete content, etc... instead `check_and_open_daily_note` checks the directory I keep my daily notes in `pages/daily` in my blog repo, checks the date for a note for today and either creates it from the copier template or opened it as my current buffer&#xA;&#xA;&gt; I could maybe improve this by making it global so that no matter what directory I&#39;m in I could open the daily note with a keymap or lua function call instead of swapping tmux sessions and then opening the file&#xA;&#xA;2. I need a way to link to _yesterday_&#39;s notes so it&#39;s easy to &#34;go to definition&#34; on the wiki link which opens the file...&#xA;3. I wanted to track page linking... this is something core for me as I am building out my personal knowledge base, but I have key areas in my life where I want to see graphical links, or at least make it easy to trace thoughts I&#39;ve had like clicking through wikipedia, so the `find_backlinks` function brings up a menu of all the pages that link to the one I&#39;m in&#xA;&#xA;I&#39;m sure I&#39;ll add more functions as time goes on - it&#39;d be ncie to open certain slash pages like [[now]] with a keymap... drop me a note at `nic@pype.dev` if you&#39;ve got any great ideas!&#xA;&#xA;## Code&#xA;&#xA;see the [gist](https://gist.github.com/pypeaday/38192f6db4d77c7c3be2b9213e14db6c)&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 AI INTERVIEWS ARE HERE!! SO I TROLLED ONE TO SHOW YOU… - You…</title>
    <id>https://pype.dev/thoughts-752/</id>
    <updated>2025-07-17T10:41:04Z</updated>
    <published>2025-07-17T10:41:04Z</published>
    <link href="https://pype.dev/thoughts-752/" rel="alternate" type="text/html"></link>
    <summary type="text">AI has provided a lot of value in my life for sure... but it&#39;s still not my favorite piece of technology, and the nearis</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.youtube.com/watch&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.youtube.com/watch&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - AI INTERVIEWS ARE HERE!! SO I TROLLED ONE TO SHOW YOU... - YouTube&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.youtube.com/watch&#34;&gt;AI INTERVIEWS ARE HERE!! SO I TROLLED ONE TO SHOW YOU... - YouTube&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;AI has provided a lot of value in my life for sure... but it&#39;s still not my favorite piece of technology, and the nearish-term-future certainly has some dystopian qualities to it. AI interviews definitely are in that category and Josh does a good and comical job of highlighting the ridiculousness of it. &#xA;&#xA;I envy no one looking for a job, and I double envy no one who has to deal with AI powered HR solutions...&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Add yourself to www-data to view your Nextcloud data on the filesystem</title>
    <id>https://pype.dev/add-yourself-to-www-data-to-view-your-nextcloud-data-on-the-filesystem/</id>
    <updated>2025-07-17T07:38:09Z</updated>
    <published>2025-07-17T07:38:09Z</published>
    <link href="https://pype.dev/add-yourself-to-www-data-to-view-your-nextcloud-data-on-the-filesystem/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working on using gotify-cli-for-notifying-me-of-nextcloud-uploads and I&#39;ll start by running the gotify cli as my user so I&#39;ll need to be able to see the...</summary>
    <content type="text">&#xA;I am working on using [[gotify-cli-for-notifying-me-of-nextcloud-uploads]] and&#xA;I&#39;ll start by running the gotify cli as my user so I&#39;ll need to be able to see&#xA;the directory in the filesystem that Nextcloud stores the data in.&#xA;&#xA;That folder on disk is owned by `www-data` (see [[nextcloud-permissions-with-zfs-and-ansible-nas]]&#xA;&#xA;Turns out it&#39;s my computer and I can do what I want so I just add myself to the&#xA;`www-data` group instead of running the `gotify cli` as `root`&#xA;&#xA;# Bonus&#xA;&#xA;You can remove users from groups with `gpasswd -d username groupname`&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-17 Notes</title>
    <id>https://pype.dev/2025-07-17-notes/</id>
    <updated>2025-07-17T05:44:58Z</updated>
    <published>2025-07-17T05:44:58Z</published>
    <link href="https://pype.dev/2025-07-17-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-16-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-16-notes]]&#xA;&#xA;## Notes&#xA;&#xA;- Heidi liked the white parking signs, printed another one&#xA;&#xA;## Wins&#xA;&#xA;- Finished up post on [[daily-notes-neovim-plugin]]&#xA;- Basically finished [[gotify-cli-for-notifying-me-of-nextcloud-uploads]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>gotify cli for notifying me of nextcloud uploads</title>
    <id>https://pype.dev/gotify-cli-for-notifying-me-of-nextcloud-uploads/</id>
    <updated>2025-07-16T20:33:25Z</updated>
    <published>2025-07-16T20:33:25Z</published>
    <link href="https://pype.dev/gotify-cli-for-notifying-me-of-nextcloud-uploads/" rel="alternate" type="text/html"></link>
    <summary type="text">I was looking for a way to get notified from nextcloud when files were uploaded to a certain directory. This is because the upload is very spotty due to the...</summary>
    <content type="text">&#xA;# The Ask&#xA;&#xA;I was looking for a way to get notified from nextcloud when files were uploaded&#xA;to a certain directory. This is because the upload is very spotty due to the&#xA;physical environment of where the nextcloud client is, and once a file shows up&#xA;I have a job to do. So I was hoping nextcloud had an easy way to say &#34;if file&#xA;shows up in X folder, notify me&#34; but I can&#39;t find it...&#xA;&#xA;## Solution 2&#xA;&#xA;Since I already use gotify and they provide a [DOPE&#xA;CLI](https://github.com/gotify/cli) we can write a little bash script to work&#xA;at the filesystem level rather than the nextcloud level.&#xA;&#xA;## Permissions&#xA;&#xA;We&#39;ll need to make sure the user running this script has all the right read&#xA;permissions... In my exact case the file upload happens in a group folder,&#xA;which is easily found on the filesystem in the Nextcloud volume at&#xA;`.../data/__groupfolders/{id}/{rest of path}`. This was owned by `www-data` on&#xA;the host, see&#xA;[[add-yourself-to-www-data-to-view-your-nextcloud-data-on-the-filesystem]] if&#xA;you want but a simple `usermod -aG www-data &lt;me&gt;` does the trick.&#xA;&#xA;## The Script&#xA;&#xA;With a little AI magic to spruce up the messaging, the script basically looks like this:&#xA;&#xA;```bash&#xA;#!/bin/bash&#xA;&#xA;# Script to monitor sermon directory using gotify watch&#xA;# Used with a systemd service or standalone&#xA;# Can run in local or remote (SSH) mode&#xA;&#xA;# Configuration&#xA;&#xA;# Target directory to monitor&#xA;DIR_PATH=&#34;/path/to/watch&#34;&#xA;&#xA;# Mode: Set to &#34;ssh&#34; or &#34;local&#34;&#xA;# If ssh, will connect to SSH_HOST as SSH_USER to monitor the directory&#xA;# If local, will monitor the directory directly on this machine&#xA;MODE=&#34;ssh&#34;&#xA;&#xA;# Remote SSH settings (only used if MODE=&#34;ssh&#34;)&#xA;SSH_USER=&#34;youruser&#34;&#xA;SSH_HOST=&#34;yourserver&#34;&#xA;&#xA;# Log settings&#xA;LOG_DIR=&#34;$HOME/.local/state/sermon-monitor&#34;&#xA;LOG_FILE=&#34;$LOG_DIR/sermon-monitor.log&#34;&#xA;MAX_LOG_SIZE_KB=1024 # 1MB max log size&#xA;&#xA;# Create log directory if it doesn&#39;t exist&#xA;mkdir -p &#34;$LOG_DIR&#34; 2&gt;/dev/null&#xA;&#xA;# Create or truncate log file if it&#39;s too large&#xA;if [ -f &#34;$LOG_FILE&#34; ] &amp;&amp; [ $(stat -c%s &#34;$LOG_FILE&#34; 2&gt;/dev/null || echo 0) -gt $((MAX_LOG_SIZE_KB * 1024)) ]; then&#xA;  # Keep the last 20 lines when rotating&#xA;  tail -n 20 &#34;$LOG_FILE&#34; &gt;&#34;${LOG_FILE}.tmp&#34; 2&gt;/dev/null &amp;&amp; mv &#34;${LOG_FILE}.tmp&#34; &#34;$LOG_FILE&#34; 2&gt;/dev/null&#xA;  echo &#34;$(date &#39;+%Y-%m-%d %H:%M:%S&#39;) - Log file rotated due to size limit&#34; &gt;&gt;&#34;$LOG_FILE&#34;&#xA;fi&#xA;&#xA;# Ensure log file exists&#xA;touch &#34;$LOG_FILE&#34; 2&gt;/dev/null&#xA;&#xA;# Log function&#xA;log() {&#xA;  echo &#34;$(date &#39;+%Y-%m-%d %H:%M:%S&#39;) - $1&#34; | tee -a &#34;$LOG_FILE&#34;&#xA;}&#xA;&#xA;# Create a temp file to store the previous state&#xA;TEMP_DIR=&#34;/tmp/gotify-watcher&#34;&#xA;PREV_STATE_FILE=&#34;$TEMP_DIR/previous_state.txt&#34;&#xA;mkdir -p &#34;$TEMP_DIR&#34; 2&gt;/dev/null || true&#xA;&#xA;# Function to get directory listing based on mode&#xA;get_directory_listing() {&#xA;  if [ &#34;$MODE&#34; = &#34;ssh&#34; ]; then&#xA;    # Remote mode - use SSH&#xA;    ssh $SSH_USER@$SSH_HOST &#34;ls -la &#39;$DIR_PATH&#39; | grep -v &#39;^\.\.$&#39; | grep -v &#39;^\.$&#39;&#34; ||&#xA;      echo &#34;Error: Failed to connect to $SSH_HOST&#34;&#xA;  else&#xA;    # Local mode - direct access&#xA;    if [ -d &#34;$DIR_PATH&#34; ]; then&#xA;      ls -la &#34;$DIR_PATH&#34; | grep -v &#39;^\.\.$&#39; | grep -v &#39;^\.$&#39;&#xA;    else&#xA;      echo &#34;Error: Directory $DIR_PATH does not exist locally&#34;&#xA;    fi&#xA;  fi&#xA;}&#xA;&#xA;# Removed unused function - was leftover from previous version&#xA;&#xA;# Display startup message based on mode&#xA;if [ &#34;$MODE&#34; = &#34;ssh&#34; ]; then&#xA;  log &#34;Starting sermon file monitor for $SSH_USER@$SSH_HOST:$DIR_PATH (SSH mode)&#34;&#xA;else&#xA;  log &#34;Starting sermon file monitor for $DIR_PATH (local mode)&#34;&#xA;fi&#xA;&#xA;# Run initial check to establish baseline&#xA;CURRENT_LISTING=$(get_directory_listing)&#xA;echo &#34;$CURRENT_LISTING&#34; &gt;&#34;$PREV_STATE_FILE&#34;&#xA;log &#34;Initial state captured. Watching for changes.&#34;&#xA;&#xA;# Monitor continuously&#xA;while true; do&#xA;  # Sleep for 30 seconds between checks&#xA;  sleep 30&#xA;&#xA;  # Get current listing&#xA;  CURRENT_LISTING=$(get_directory_listing)&#xA;&#xA;  # Find new files by comparing with previous state&#xA;  NEW_FILES=$(diff --new-line-format=&#34;%L&#34; --old-line-format=&#34;&#34; --unchanged-line-format=&#34;&#34; \&#xA;    &#34;$PREV_STATE_FILE&#34; &lt;(echo &#34;$CURRENT_LISTING&#34;) | grep -v &#34;^total&#34; | grep -v &#34;^drwx&#34;)&#xA;&#xA;  # If new files found, notify&#xA;  if [ -n &#34;$NEW_FILES&#34; ]; then&#xA;    # Filter out directories and system entries, keep only regular files&#xA;    FILE_ENTRIES=$(echo &#34;$NEW_FILES&#34; | grep -v &#34;^d&#34; | grep -v &#34;^total&#34; | grep -v &#34;^\.$&#34; | grep -v &#34;^\.\.&#34;)&#xA;&#xA;    # Count how many actual files (non-empty lines)&#xA;    NEW_COUNT=$(echo &#34;$FILE_ENTRIES&#34; | grep -v &#34;^$&#34; | wc -l)&#xA;&#xA;    # Only proceed if we have actual files&#xA;    if [ &#34;$NEW_COUNT&#34; -gt 0 ]; then&#xA;      # Create notification message&#xA;      if [ &#34;$NEW_COUNT&#34; -eq 1 ]; then&#xA;        TITLE=&#34;New File Added&#34;&#xA;        # Extract filename from listing line&#xA;        FILENAME=$(echo &#34;$FILE_ENTRIES&#34; | awk &#39;{print $NF}&#39;)&#xA;        MESSAGE=&#34;New file detected: $FILENAME&#34;&#xA;      else&#xA;        TITLE=&#34;New Files Added&#34;&#xA;        # Format filenames only for readability&#xA;        FILELIST=$(echo &#34;$FILE_ENTRIES&#34; | awk &#39;{print $NF}&#39; | sort)&#xA;        MESSAGE=&#34;$NEW_COUNT new files detected:\n$FILELIST&#34;&#xA;      fi&#xA;&#xA;      # Send notification&#xA;      gotify push --title &#34;$TITLE&#34; &#34;$MESSAGE&#34;&#xA;      log &#34;Notification sent for new files: $NEW_COUNT&#34;&#xA;    fi&#xA;&#xA;    # Update previous state&#xA;    echo &#34;$CURRENT_LISTING&#34; &gt;&#34;$PREV_STATE_FILE&#34;&#xA;  fi&#xA;done&#xA;&#xA;# If we get here, gotify watch has exited&#xA;log &#34;gotify watch exited unexpectedly&#34;&#xA;exit 1&#xA;&#xA;```&#xA;&#xA;### Credentials&#xA;&#xA;As noted in the gotify repo - you can put the relevant credentials in a&#xA;`./cli.json` which is what I did since this is in a big repo of mine and that&#39;s&#xA;where the script executes from&#xA;&#xA;```json&#xA;{&#xA;  &#34;token&#34;: &#34;yourToken&#34;,&#xA;  &#34;url&#34;: &#34;https://gotify.example.com&#34;,&#xA;  &#34;defaultPriority&#34;: 6&#xA;}&#xA;```&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Using restic to backup my home directory</title>
    <id>https://pype.dev/using-restic-to-backup-my-home-directory/</id>
    <updated>2025-07-16T09:12:26Z</updated>
    <published>2025-07-16T09:12:26Z</published>
    <link href="https://pype.dev/using-restic-to-backup-my-home-directory/" rel="alternate" type="text/html"></link>
    <summary type="text">I need to backup my personal $HOME to my NAS cause there&#39;s a lot in there, and mostly my git projects with .env files all over. Plus some docker data</summary>
    <content type="text">&#xA;# Intro&#xA;&#xA;I need to backup my personal $HOME to my NAS cause there&#39;s a lot in there, and&#xA;mostly my git projects with .env files all over. Plus some docker data&#xA;&#xA;## Why Not ZFS?&#xA;&#xA;GREAT QUESTION! It&#39;s because I struggled getting all the syncoid/sanoid&#xA;requirements installed on my Aurora OS.... I like the immutable desktop trend,&#xA;but I don&#39;t understand rpm-ostree enough to properly get all the lower level&#xA;kernel stuff setup in a way I trust. So because I don&#39;t have ZFS at $HOME&#xA;what&#39;s a boy to do?&#xA;&#xA;`rsync` would probably work fine especially if I [[rsync-like-a-pro]] but I figured I could cobble together some other tech and broaden my horizons...&#xA;&#xA;## Enter restic&#xA;&#xA;Apparently [restic](https://restic.net/) has been around for a while, and you can run it in a container... awesome that&#39;s all I needed to hear...&#xA;&#xA;## How?&#xA;&#xA;I&#39;ll use a docker compose stack for this... typically I think running `restic`&#xA;right on the host is the way to go, but on my desktop I float between my host&#xA;and distroboxes and to keep things as simple as possible, even though less&#xA;efficient, I want to manage everything through containers as my homelab gets&#xA;built out and eventually I&#39;ll have a more full-featured ecosystem.&#xA;&#xA;## The Value&#xA;&#xA;You can find code below and an example repo that more or less is what I use for my desktop backup but that&#39;s primarily what I was after.... backing up the data on my desktop to my NAS in a way that:&#xA;&#xA;1. I wouldn&#39;t have to &#34;remember&#34; how I was doing it&#xA;&#xA;- I accomplish this by having good git repo organization and README files that explain my own usage patterns&#xA;&#xA;2. Tracked snapshots&#xA;&#xA;- I need some kind of snapshotting - `zfs` has spoiled me, and turns out `restic` has some amount of support for it&#xA;&#xA;3. Running in docker would be ideal for now so that I don&#39;t need to worry about installing specific binaries across machine while I build out my patterns&#xA;&#xA;With this setup I get to backup my $HOME to my NAS which contains 1. docker&#xA;volume info for all the AI workloads I run on my desktop and 2. all my&#xA;sensitive info in my git repos is at least backed up in a way that I can&#xA;recover `.env` files with relative ease...&#xA;&#xA;# Code&#xA;&#xA;Check out the [Example GH&#xA;Repo](https://github.com/pypeaday/docker-compose-restic) but I&#39;ll drop key file&#xA;contents here for a quick read if you&#39;re interested in some of the setup... but&#xA;the blog post mostly ends here&#xA;&#xA;## The Files&#xA;&#xA;We have a `docker-compose.yml` of course&#xA;&#xA;```yaml&#xA;services:&#xA;  backup:&#xA;    image: restic/restic:latest&#xA;    network_mode: host&#xA;    container_name: restic_backup&#xA;    hostname: restic-backup-runner&#xA;    env_file:&#xA;      - .env&#xA;    environment:&#xA;      # The location of the backup repository inside the container&#xA;      - RESTIC_REPOSITORY=/target&#xA;      # The location of the password file inside the container&#xA;      - RESTIC_PASSWORD_FILE=/password&#xA;    volumes:&#xA;      # --- Source and Config Mounts ---&#xA;      - &#34;${BACKUP_SOURCE}:/source:ro&#34;&#xA;      - &#34;${RESTIC_PASSWORD_FILE}:/password:ro&#34;&#xA;      - &#34;./backup-and-prune.sh:/usr/local/bin/backup-and-prune:ro&#34;&#xA;&#xA;      # --- Persistent Data Mounts ---&#xA;      - &#34;./.ssh:/root/.ssh:rw&#34;&#xA;      - &#34;./.cache:/root/.cache:rw&#34;&#xA;&#xA;    # Set the default entrypoint to our new script. This will be executed when&#xA;    # the container starts, unless overridden.&#xA;    entrypoint: [&#34;/usr/local/bin/backup-and-prune&#34;]&#xA;```&#xA;&#xA;Your `.env` file will need to look like this&#xA;&#xA;```bash&#xA;``# HOST related variables&#xA;# The source directory to back up (absolute path)&#xA;BACKUP_SOURCE=/home/nic&#xA;&#xA;# --- Restic Configuration ---&#xA;# The file containing the restic repository password (absolute path on host)&#xA;HOST_RESTIC_PASSWORD_FILE=/home/nic/projects/personal/homelab-mono/dataops/docker/.restic-password&#xA;# The SSH private key to use for connecting to the NAS (absolute path on host)&#xA;# It&#39;s recommended to use a dedicated key for this purpose.&#xA;SSH_PRIVATE_KEY_FILE=/home/nic/.skm/ghost/id_rsa&#xA;&#xA;# Container Env Vars&#xA;# the container makes the sftp connection using my credentials, but nonetheless the container needs them, so this isn&#39;t envrc stuff&#xA;&#xA;# --- SFTP/SSH Connection Details for the NAS ---&#xA;SFTP_USER=nic&#xA;SFTP_HOST=ghost&#xA;# The path on the NAS where the restic repository will be stored&#xA;SFTP_PATH=/tank/encrypted/nas/nic-home/&#xA;&#xA;# --- Restic Configuration ---&#xA;&#xA;RESTIC_REPOSITORY=/target&#xA;RESTIC_PASSWORD_FILE=/password&#xA;```&#xA;&#xA;And then the backup script that the container will execute is something like this:&#xA;&#xA;```bash&#xA;&#xA;#!/bin/sh&#xA;set -e # Exit immediately if a command exits with a non-zero status.&#xA;&#xA;# Construct the repository path from environment variables passed by docker-compose&#xA;REPO=&#34;sftp:${SFTP_USER}@${SFTP_HOST}:${SFTP_PATH}&#34;&#xA;&#xA;# 1. Run the backup&#xA;# -----------------&#xA;echo &#34;--- Starting backup for ${BACKUP_SOURCE} ---&#34;&#xA;restic backup /source --verbose -r &#34;${REPO}&#34;&#xA;echo &#34;--- Backup complete ---&#34;&#xA;&#xA;# 2. Clean up old snapshots according to the policy&#xA;# --------------------------------------------------&#xA;echo &#34;--- Pruning old snapshots ---&#xA;(Policy: keep last 7 daily, 4 weekly, 6 monthly)&#34;&#xA;restic forget \&#xA;    --prune \&#xA;    --keep-daily 7 \&#xA;    --keep-weekly 4 \&#xA;    --keep-monthly 6 \&#xA;    -r &#34;${REPO}&#34;&#xA;&#xA;echo &#34;--- Backup and prune process finished successfully ---&#34;&#xA;```&#xA;&#xA;## Systemd&#xA;&#xA;Finally there&#39;s a systemd unit and timer file in there so you can setup a systemd service for the backup&#xA;&#xA;### service&#xA;&#xA;```bash&#xA;&#xA;[Unit]&#xA;Description=Run Restic backup to NAS using Docker Compose&#xA;# We are running this as a user service, so we assume that the system-level&#xA;# docker.service is already running.&#xA;After=network-online.target&#xA;&#xA;[Service]&#xA;Type=oneshot&#xA;# Set the working directory to where your docker-compose.yml and .env file are located&#xA;WorkingDirectory=/home/user/nas-backup/docker&#xA;&#xA;# The command to execute. We use the full path to docker-compose for reliability.&#xA;# You may need to adjust this path if &#39;docker compose&#39; is installed elsewhere.&#xA;ExecStart=/usr/bin/docker compose run --rm backup&#xA;&#xA;[Install]&#xA;WantedBy=default.target&#xA;```&#xA;&#xA;### timer&#xA;&#xA;```bash&#xA;&#xA;[Unit]&#xA;Description=Run Restic backup job daily&#xA;&#xA;[Timer]&#xA;# Run daily at 2:00 AM&#xA;OnCalendar=daily&#xA;# Or uncomment for a specific time:&#xA;# OnCalendar=*-*-* 02:00:00&#xA;&#xA;# Run the backup immediately if the last scheduled run was missed (e.g., if the computer was off)&#xA;Persistent=true&#xA;&#xA;[Install]&#xA;WantedBy=timers.target&#xA;```&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Shotput</title>
    <id>https://pype.dev/shotput/</id>
    <updated>2025-07-16T06:18:00Z</updated>
    <published>2025-07-16T06:18:00Z</published>
    <link href="https://pype.dev/shotput/" rel="alternate" type="text/html"></link>
    <summary type="text">This is from i-built-a-simple-app-for-adding-images-to-my-blog</summary>
    <content type="text">&#xA;This is from [[i-built-a-simple-app-for-adding-images-to-my-blog]]&#xA;&#xA;## Overview&#xA;&#xA;Shotput is a simple webapp backed by a git repo that allows you to paste a screenshot from your clipboard, it gets put into the repo and pushed, and you get a link back to using that image via statically&#39;s CDN in your website.&#xA;&#xA;## Example&#xA;&#xA;![20250607130609_dadd33eb.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250607130609_dadd33eb.png)&#xA;&#xA;pasting an image let&#39;s you copy the markdown link for easy pasting&#xA;&#xA;```markdown&#xA;![20250607130609_dadd33eb.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250607130609_dadd33eb.png)&#xA;```&#xA;&#xA;## Concerns&#xA;&#xA;Currently this is deployed with an ssh key mounted into the container that I&#xA;put into a zfs dataset manually. Per [[2025-07-16-notes#Wants]] I&#39;m struggling&#xA;with the key sharing model...&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-16 Notes</title>
    <id>https://pype.dev/2025-07-16-notes/</id>
    <updated>2025-07-16T06:05:39Z</updated>
    <published>2025-07-16T06:05:39Z</published>
    <link href="https://pype.dev/2025-07-16-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday - 2025-07-15-notes</summary>
    <content type="text">&#xA;yesterday - [[2025-07-15-notes]]&#xA;&#xA;## Notes&#xA;&#xA;- working on parking signs for heidi&#xA;  - need to buy black and green PETG probably&#xA;&#xA;## For Today&#xA;&#xA;I&#39;m going to try replacing my &#34;for today&#34; and &#34;for tomorrow&#34; sections of notes with just updating [[now]]&#xA;&#xA;[[pilgrims-creek---about-me#Hello]]&#xA;&#xA;I&#39;m migrating my homelab stuff to its own repo called `homelab-mono`&#xA;&#xA;- starting with the restic stuff going into a `dataops` folder&#xA;- will move `homelab-compose` to there eventually&#xA;&#xA;- restic is backing up ok I think, but I want just recipes for quickly checking the health and so I&#39;m working on that with windsurf right now&#xA;&#xA;- I started working on [[gotify-cli-for-notifying-me-of-nextcloud-uploads]] and it&#39;s got me thinking that I was going to be using temporal for this kind of stuff... how far out to I branch out at home?&#xA;&#xA;## Wants&#xA;&#xA;I&#39;m struggling with some homelab setup... Between&#xA;[[using-restic-to-backup-my-home-directory#Intro]] and building my blog with temporal&#xA;(oh and [[shotput]] which pushes images to my images.pype.dev repo ) I&#39;m&#xA;finding that I need an ssh key in a container... My restic backup uses my ssh&#xA;key and runs out of my dotfiles repo right now. But I need to think about a way&#xA;to generate or share a restricted user&#39;s keypair with a container or many&#xA;containers for homelab use...&#xA;&#xA;- ssh&#xA;- restic&#xA;- zfs operations? probably not&#xA;- github permissions / self-hosted git repo&#xA;  - should be github for images.pype.dev because statically.io works well specifically with github&#xA;&#xA;This is where something like vault would come in handy... a central place to&#xA;store these types of credentials. But I suppose I could hack something up on a&#xA;zfs dataset... I could generate a key pair for a user in my lab, or even me but&#xA;with restricted permissions, and then put that in&#xA;`/tank/encrypted/docker/something-zfs` and then use that as a host mount into&#xA;any containers that need a key? `-v&#xA;/tank/enctyped/docker/something-zfs:/home/appuser/.ssh` something like that...&#xA;&#xA;## Wins&#xA;&#xA;- got [[using-restic-to-backup-my-home-directory#Intro]] written today&#xA;- Started working on using [[gotify-cli-for-notifying-me-of-nextcloud-uploads]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-15 Notes</title>
    <id>https://pype.dev/2025-07-15-notes/</id>
    <updated>2025-07-15T06:20:47Z</updated>
    <published>2025-07-15T06:20:47Z</published>
    <link href="https://pype.dev/2025-07-15-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-14-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-14-notes]]&#xA;&#xA;## Today&#xA;&#xA;- church sermon upload&#xA;- respond to Michael&#xA;&#xA;## Affine&#xA;&#xA;- More with affine and mind-mapping (I bookmarked a TT BJJ video I wanted to make a map of from JFlo)&#xA;  - I have another JFlo vid now... falling behind&#xA;&#xA;## Writing&#xA;&#xA;- [ ] Write up more on restic - how to check backups etc. (and do it while you write it up... duh)&#xA;  - [[using-restic-to-backup-my-home-directory]]&#xA;- [ ] Andrew&#39;s sermon today had several good points I want to meditate on.&#xA;  - biblical friendship&#xA;- [ ] Notes on obedience with kids and my patterns for instruction&#xA;  1. I talk about obedience a lot, but I should to it with more focus on grace and love, not so much _during_ the girls being disobedient&#xA;  2. I need to use the word shema with the girls - help adorn them with the fear of the Lord. deut 6 and proverbs 1&#xA;  - [[deuteronomy-6-and-the-shema]]&#xA;&#xA;## Projects to touch&#xA;&#xA;- [[thoughts-to-nostr]]&#xA;- [[daily-notes-neovim-plugin]]&#xA;- no notes but I&#39;m continuing to iterate on my dotfiles and pype.dev theming&#xA;  with windsurf - mostly just to keep a portion of my brain occupied with&#xA;  lightweight project management&#xA;&#xA;## Wins&#xA;&#xA;- [[python-editable-installs-and-nested-scripts]]&#xA;- Got started with dockerizing in [[thoughts-to-nostr#dockerizing]]&#xA;&#xA;## For Tomorrow&#xA;&#xA;- [[using-restic-to-backup-my-home-directory]]&#xA;- [[thoughts-to-nostr]]&#xA;- [[daily-notes-neovim-plugin]]&#xA;- [[deuteronomy-6-and-the-shema]]&#xA;- More with affine and mind-mapping (I bookmarked a TT BJJ video I wanted to make a map of from JFlo)&#xA;  - I have another JFlo vid now... falling behind&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Python editable installs and nested scripts</title>
    <id>https://pype.dev/python-editable-installs-and-nested-scripts/</id>
    <updated>2025-07-14T08:40:32Z</updated>
    <published>2025-07-14T08:40:32Z</published>
    <link href="https://pype.dev/python-editable-installs-and-nested-scripts/" rel="alternate" type="text/html"></link>
    <summary type="text">I have been working towards a standard structure for all my python projects - and I mean much more than just or something along those lines. But one of the...</summary>
    <content type="html">&lt;h1 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I have been working towards a standard structure for all my python projects -&#xA;and I mean much more than just &lt;code&gt;uv init&lt;/code&gt; or something along those lines. But&#xA;one of the things that got me recently was starting to keep a &lt;code&gt;scripts/&lt;/code&gt; folder&#xA;that ran code based on what was in &lt;code&gt;src/&lt;/code&gt; or &lt;code&gt;app/&lt;/code&gt; (I&amp;rsquo;m working on that&amp;hellip;)&#xA;being installed in the virtual environment&amp;hellip; so I&amp;rsquo;d &lt;code&gt;uv pip install -e .&lt;/code&gt; or&#xA;&lt;code&gt;uv pip install -e src&lt;/code&gt; (kind of depends on the structure) and then in&#xA;&lt;code&gt;scripts/foo.py&lt;/code&gt; I&amp;rsquo;d have &lt;code&gt;from my_cool_code.module import thing&lt;/code&gt;&amp;hellip;.&lt;/p&gt;&#xA;&lt;p&gt;Running scripts has never been a problem&amp;hellip; but I&amp;rsquo;ve always kept them in the&#xA;root of the repo OR &lt;em&gt;inside&lt;/em&gt; &lt;code&gt;app&lt;/code&gt; or &lt;code&gt;src&lt;/code&gt; in a &lt;em&gt;nested&lt;/em&gt; directory&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;So here&amp;rsquo;s where I learned a little something about &lt;code&gt;python my_script.py&lt;/code&gt; vs&#xA;&lt;code&gt;python -m my_script&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Example&lt;/span&gt; &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I setup a short example repo to illustrate the problem&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday/python-e-example&#34;&gt;link to repo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The repo structure is very simple&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;python-e-example&#xA;  ├── foo.py&#xA;  ├── pyproject.toml&#xA;  ├── src&#xA;  │   ├── module.py&#xA;  ├── README.md&#xA;  └── scripts&#xA;      └── bar.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;scripts/bar.py&lt;/code&gt; and &lt;code&gt;foo.py&lt;/code&gt; are the same 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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;src.module&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my_func&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_func&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 then &lt;code&gt;src/module.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;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;my_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;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;it worked!&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;The rest of the structure is from &lt;code&gt;uv init&lt;/code&gt; basically, then &lt;code&gt;uv venv&lt;/code&gt; will make&#xA;your virtual environment, and &lt;code&gt;uv pip install -e .&lt;/code&gt; will install the library in&#xA;editable mode.&lt;/p&gt;&#xA;&lt;h3 id=&#34;so-what-s-the-problem&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;So what’s the problem?&lt;/span&gt; &lt;a href=&#34;#so-what-s-the-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s run &lt;code&gt;foo.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;nic in python-e-example   main   ×7 via   v3.13.1&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;python-e-example&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄&#xA;&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;devbox&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ python foo.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;it worked!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Nice! It works just like we&amp;rsquo;d expect&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;What about &lt;code&gt;python scripts/bar.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;nic in python-e-example   main   ×7 via   v3.13.1&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;python-e-example&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄&#xA;&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;devbox&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ python scripts/bar.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Traceback &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;most recent call last&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  File &lt;span class=&#34;s2&#34;&gt;&amp;#34;/tmp/python-e-example/scripts/bar.py&amp;#34;&lt;/span&gt;, line 8, in &amp;lt;module&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    from src.module import my_func&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ModuleNotFoundError: No module named &lt;span class=&#34;s1&#34;&gt;&amp;#39;src&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Come again for big fudge...&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;ok-let-s-stay-calm-and-troubleshoot&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Ok let’s stay calm and troubleshoot&lt;/span&gt; &lt;a href=&#34;#ok-let-s-stay-calm-and-troubleshoot&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;What if we open a &lt;code&gt;python&lt;/code&gt; shell&amp;hellip;&lt;/p&gt;&#xA;&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 3.13.1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;main, Dec &lt;span class=&#34;m&#34;&gt;19&lt;/span&gt; 2024, 14:32:25&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Clang 18.1.8 &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; on linux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type &lt;span class=&#34;s2&#34;&gt;&amp;#34;help&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;copyright&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;credits&amp;#34;&lt;/span&gt; or &lt;span class=&#34;s2&#34;&gt;&amp;#34;license&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; more information.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;gt;&amp;gt; from src.module import my_func&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;gt;&amp;gt; my_func&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;!--markata-attribution--&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;it worked!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ok&amp;hellip; as expected it worked, and we&amp;rsquo;ve learned nothing&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;implicit behavior&lt;/p&gt;&#xA;&lt;p&gt;We didn&amp;rsquo;t learn anything from the example but something is present that we&#xA;don&amp;rsquo;t see&amp;hellip; &lt;code&gt;python foo.py&lt;/code&gt; implicitly adds the path to the script to&#xA;&lt;code&gt;sys.path&lt;/code&gt; and so the &lt;code&gt;src&lt;/code&gt; library is in the same directory as the script&#xA;&lt;code&gt;foo.py&lt;/code&gt; so the library is on &lt;code&gt;sys.path&lt;/code&gt;&amp;hellip;. take note of this&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Problem&lt;/span&gt; &lt;a href=&#34;#the-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Turns out &lt;code&gt;uv pip install .&lt;/code&gt; and &lt;code&gt;uv pip install -e .&lt;/code&gt; are &lt;em&gt;actually&lt;/em&gt; different&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250705005214_a83dd563.png&#34; alt=&#34;20250705005214_a83dd563.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The editable install adds a &lt;code&gt;.pth&lt;/code&gt; file into &lt;code&gt;site-packages&lt;/code&gt; which acts as a&#xA;shell hook.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# .venv/lib/python3.13/site-packages/__editable__.python_e_example-0.1.0.pth&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/tmp/python-e-example/src&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So when &lt;code&gt;python&lt;/code&gt; runs a script, the location of the script is&#xA;implicitly added to &lt;code&gt;sys.path&lt;/code&gt; as noted above.&#xA;The &lt;code&gt;python&lt;/code&gt; process invoked by &lt;code&gt;python foo.py&lt;/code&gt; has &lt;code&gt;$PWD&lt;/code&gt; on &lt;code&gt;sys.path&lt;/code&gt; which is &lt;code&gt;/tmp/python-e-example&lt;/code&gt; in&#xA;the example but &lt;code&gt;python scripts/bar.py&lt;/code&gt; has &lt;code&gt;/tmp/python-e-example/scripts&lt;/code&gt;&#xA;on &lt;code&gt;sys.path&lt;/code&gt;&amp;hellip; which means that &lt;code&gt;/tmp/python-e-example&lt;/code&gt; is NOT on &lt;code&gt;sys.path&lt;/code&gt;&#xA;in the process that&amp;rsquo;s running &lt;code&gt;scripts/bar.py&lt;/code&gt; and so the &lt;code&gt;src&lt;/code&gt; folder won&amp;rsquo;t be&#xA;searched by python because the &lt;code&gt;.pth&lt;/code&gt; file points to a directory that&amp;rsquo;s no on&#xA;the path!&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-solution&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Solution&lt;/span&gt; &lt;a href=&#34;#the-solution&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We can instead of running the script &amp;ldquo;as a script&amp;rdquo; we can tell python to&#xA;execute it as as a module with &lt;code&gt;python -m scripts.bar&lt;/code&gt;. This is syntatically&#xA;similar to &lt;code&gt;python path/to/script.py&lt;/code&gt; but instead tells the python interpreter&#xA;to execute the script as a module so the path is replaced by import syntax.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;This works for foo.py too&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;o&#34;&gt;[&lt;/span&gt;devbox&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ✗ python -m foo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;it worked!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;devbox&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ python -m scripts.bar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;it worked!&#xA;&lt;/span&gt;&lt;/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;chatgpt&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;ChatGPT&lt;/span&gt; &lt;a href=&#34;#chatgpt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s noteworthy that jipity was helpful in exploring these issues I was running into&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://chatgpt.com/c/686d2a05-5b54-800f-8b84-1638c1b96840&#34;&gt;link to convo&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>typ.ing personal best</title>
    <id>https://pype.dev/typ-ing-personal-best/</id>
    <updated>2025-07-14T08:12:37Z</updated>
    <published>2025-07-14T08:12:37Z</published>
    <link href="https://pype.dev/typ-ing-personal-best/" rel="alternate" type="text/html"></link>
    <summary type="text">I can&#39;t even remember if I&#39;ve hit 130 WPM in a typing challenge before, let alone at 98%+ accuracy!</summary>
    <content type="html">&lt;p&gt;I can&amp;rsquo;t even remember if I&amp;rsquo;ve hit 130 WPM in a typing challenge before, let&#xA;alone at 98%+ accuracy!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250714131151_ce1ddc2f.png&#34; alt=&#34;20250714131151_ce1ddc2f.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-14 Notes</title>
    <id>https://pype.dev/2025-07-14-notes/</id>
    <updated>2025-07-14T06:28:33Z</updated>
    <published>2025-07-14T06:28:33Z</published>
    <link href="https://pype.dev/2025-07-14-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-13-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-13-notes]]&#xA;&#xA;Yesterday I basically got 0 things done computer-wise. So this is mostly a copy paste of my morning notes from yesterday:&#xA;&#xA;## Affine&#xA;&#xA;- More with affine and mind-mapping (I bookmarked a TT BJJ video I wanted to make a map of from JFlo)&#xA;&#xA;## Writing&#xA;&#xA;- Write up more on restic - how to check backups etc. (and do it while you write it up... duh)&#xA;- Andrew&#39;s sermon today had several good points I want to meditate on.&#xA;  - biblical friendship&#xA;- Notes on obedience with kids and my patterns for instruction&#xA;  1. I talk about obedience a lot, but I should to it with more focus on grace and love, not so much _during_ the girls being disobedient&#xA;  2. I need to use the word shema with the girls - help adorn them with the fear of the Lord. deut 6 and proverbs 1&#xA;  - [[deuteronomy-6-and-the-shema]]&#xA;- [[python-editable-installs-and-nested-scripts]]&#xA;&#xA;## Projects to touch&#xA;&#xA;- [[thoughts-to-nostr]]&#xA;- [[daily-notes-neovim-plugin]]&#xA;- no notes but I&#39;m continuing to iterate on my dotfiles and pype.dev theming&#xA;  with windsurf - mostly just to keep a portion of my brain occupied with&#xA;  lightweight project management&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Agile Was Never Your Problem Pt 1/2 | The Cynical Developer</title>
    <id>https://pype.dev/thoughts-749/</id>
    <updated>2025-07-13T18:13:08Z</updated>
    <published>2025-07-13T18:13:08Z</published>
    <link href="https://pype.dev/thoughts-749/" rel="alternate" type="text/html"></link>
    <summary type="text">Love this post - feels like it vindicates a lot of my opinions (that I&#39;ve been pretty loud about professionally). I love</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://thecynical.dev/posts/agile-was-never-your-problem/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://thecynical.dev/posts/agile-was-never-your-problem/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Agile Was Never Your Problem Pt 1/2 | The Cynical Developer&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://thecynical.dev/posts/agile-was-never-your-problem/&#34;&gt;Agile Was Never Your Problem Pt 1/2 | The Cynical Developer&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Love this post - feels like it vindicates a lot of my opinions (that I&#39;ve been pretty loud about professionally). I love agile but I HATE Agile... and this helps put years of my feelings into semi-structured text...&#xA;Agile isn&#39;t the problem but it certainly is a broad label for many many problems&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-13 Notes</title>
    <id>https://pype.dev/2025-07-13-notes/</id>
    <updated>2025-07-13T13:04:07Z</updated>
    <published>2025-07-13T13:04:07Z</published>
    <link href="https://pype.dev/2025-07-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-12-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-12-notes]]&#xA;&#xA;## Affine&#xA;&#xA;- More with affine and mind-mapping (I bookmarked a TT BJJ video I wanted to make a map of from JFlo)&#xA;&#xA;## Writing&#xA;&#xA;- Write up more on restic - how to check backups etc. (and do it while you write it up... duh)&#xA;- Andrew&#39;s sermon today had several good points I want to meditate on.&#xA;  - biblical friendship&#xA;  - deut 6, shema&#xA;    1. I talk about obedience a lot, but I should to it with more focus on grace and love, not so much _during_ the girls being disobedient&#xA;    2. I need to use the word shema with the girls - help adorn them with the fear of the Lord. deut 6 and proverbs 1&#xA;    - [[deuteronomy-6-and-the-shema]]&#xA;&#xA;## Projects to touch&#xA;&#xA;- [[thoughts-to-nostr]]&#xA;- [[daily-notes-neovim-plugin]]&#xA;&#xA;## Wins&#xA;&#xA;- lots of outside time with the girls today&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Waupaca Boatride Volleyball Tournament</title>
    <id>https://pype.dev/waupaca-boatride-volleyball-tournament/</id>
    <updated>2025-07-12T20:17:30Z</updated>
    <published>2025-07-12T20:17:30Z</published>
    <link href="https://pype.dev/waupaca-boatride-volleyball-tournament/" rel="alternate" type="text/html"></link>
    <summary type="text">website</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://www.waupacaboatride.com/&#34;&gt;website&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;2025&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;2025&lt;/span&gt; &lt;a href=&#34;#2025&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Played with Ming, John, and Daniel&lt;/li&gt;&#xA;&lt;li&gt;We honestly didn&amp;rsquo;t play great - some good passes but many errors definitely lost us our games&lt;/li&gt;&#xA;&lt;li&gt;I must&amp;rsquo;ve missed 7 or 8 serves and 2 were game point (we then lost those games)&lt;/li&gt;&#xA;&lt;li&gt;Overall had a blast - we played &lt;code&gt;B LEAGUE&lt;/code&gt; which is 100% appropriate&amp;hellip; already looking forward to next year&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;packing-notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Packing Notes&lt;/span&gt; &lt;a href=&#34;#packing-notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I overpacked this year (shocker)&lt;/li&gt;&#xA;&lt;li&gt;Items for next year:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Better canopy with sides&lt;/li&gt;&#xA;&lt;li&gt;pop up table&lt;/li&gt;&#xA;&lt;li&gt;camp stove (talk to ming about this)&lt;/li&gt;&#xA;&lt;li&gt;nicer chairs&lt;/li&gt;&#xA;&lt;li&gt;towel&lt;/li&gt;&#xA;&lt;li&gt;less clothes&amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;trail running shoes were PERFECT&lt;/li&gt;&#xA;&lt;li&gt;Epoch sunnies or similar&lt;/li&gt;&#xA;&lt;li&gt;UV hoodie&lt;/li&gt;&#xA;&lt;li&gt;anker solix power bank&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3 outlets&lt;/li&gt;&#xA;&lt;li&gt;usb&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 OpenAI’s Windsurf deal is off — and Windsurf’s CEO is going to…</title>
    <id>https://pype.dev/thoughts-748/</id>
    <updated>2025-07-12T10:48:05Z</updated>
    <published>2025-07-12T10:48:05Z</published>
    <link href="https://pype.dev/thoughts-748/" rel="alternate" type="text/html"></link>
    <summary type="text">Welp I&#39;m not upset the OpenAI deal fell through (I mean probably not great for those at Codeium, but I don&#39;t want these</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.theverge.com/openai/705999/google-windsurf-ceo-openai&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.theverge.com/openai/705999/google-windsurf-ceo-openai&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - OpenAI’s Windsurf deal is off — and Windsurf’s CEO is going to Google | The Verge&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.theverge.com/openai/705999/google-windsurf-ceo-openai&#34;&gt;OpenAI’s Windsurf deal is off — and Windsurf’s CEO is going to Google | The Verge&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Welp I&#39;m not upset the OpenAI deal fell through (I mean probably not great for those at Codeium, but I don&#39;t want these big tech firms to keep buying out the competition... So even though I&#39;m not upset about it - I can&#39;t say going to Google is my favorite alternative... I&#39;m a windsurf user at home but if the Google deal goes through I may drop windsurf entirely and stick to roo...&#xA;&#xA;Look at me care about who owns my editor when I&#39;ll just root myself deeper into vs**** #smh&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-12 Notes</title>
    <id>https://pype.dev/2025-07-12-notes/</id>
    <updated>2025-07-12T05:54:08Z</updated>
    <published>2025-07-12T05:54:08Z</published>
    <link href="https://pype.dev/2025-07-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday: 2025-07-11-notes</summary>
    <content type="text">&#xA;yesterday: [[2025-07-11-notes]]&#xA;&#xA;## Today&#xA;&#xA;- Playing in Waupaca volleyball tournament&#xA;- Saw news about OpenAI Windsurf deal falling through&#xA;- Started setting up&#xA;  [affine](https://docs.affine.pro/self-host-affine/install/docker-compose-recommend)&#xA;  to try a self-hosted option for mind mapping... draw.io is ok, excalidraw is&#xA;  ok, but I feel like for mind mapping there&#39;s gotta be a better tool than what&#xA;  I&#39;d use for infra diagrams... maybe not, but affine looks interesting to at&#xA;  least spin up nonetheless and thankfully it&#39;s just `docker compose up`&#xA;&#xA;## Affine&#xA;&#xA;You have to go to `&lt;affine-url&gt;/admin` for the admin setup, and from there&#xA;there is no link to the root page where you can see the workspaces... good to&#xA;note&#xA;&#xA;### WHY&#xA;&#xA;One of the things that comes up in my mind every now and then is a way to map&#xA;out BJJ flows... like given position A start a flow chart based on opponent&#xA;decisions. Or flow charts of execution steps of passes or things like that...&#xA;&#xA;Needing the mind map feels similar to linking my posts together, but it&#39;s like&#xA;more detailed - I need a lot of space for many different ideas, whereas with&#xA;text notes pretty much all the space is given to one note (or one link in all&#xA;the map).&#xA;&#xA;I also think in diagrams a lot - see [[thinking-in-diagrams#Intro]] and so&#xA;having a nice place to keep all my diagrams has felt like a dream. I go back&#xA;and forth with draw.io and excalidraw for various things both personal and&#xA;work, and I just don&#39;t know how to pick one over the other. So maybe moving to&#xA;a different style of platform with Affine (which is Notion-esq) will help me&#xA;organize the mind maps in a meaningful way&#xA;&#xA;## Volleyball&#xA;&#xA;I got to play in America&#39;s largest volleyball tournament which takes place in Waupaca&#xA;&#xA;- [[waupaca-boatride-volleyball-tournament]]&#xA;&#xA;## For tomorrow&#xA;&#xA;- More with affine and mind-mapping (I bookmarked a TT BJJ video I wanted to make a map of from JFlo)&#xA;- Write up more on restic - how to check backups etc. (and do it while you write it up... duh)&#xA;- don&#39;t lose sight of [[thoughts-to-nostr]]&#xA;- or [[daily-notes-neovim-plugin]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Ghost</title>
    <id>https://pype.dev/ghost/</id>
    <updated>2025-07-11T20:23:35Z</updated>
    <published>2025-07-11T20:23:35Z</published>
    <link href="https://pype.dev/ghost/" rel="alternate" type="text/html"></link>
    <summary type="text">Ghost is my primary application server. These are the specs...</summary>
    <content type="text">&#xA;# Intro&#xA;&#xA;Ghost is my primary application server. These are the specs...&#xA;&#xA;&gt; I wrote about some of the specs in [[homelab-journey-part-1#current-homelab-setup]] but here is where I will keep up to date information&#xA;&#xA;## Why&#xA;&#xA;Why `ghost`? I don&#39;t know... I was going for a theme at one point it time, or&#xA;several points rather... and after giving up on the theatrics of a fully&#xA;consistent harry potter naming scheme across all my homelab entities, I decided&#xA;to just come up with some short aliases that were easy to type. So `ghost` was&#xA;born, and the backup server is `ghost-vault`.&#xA;&#xA;## CPU&#xA;&#xA;I have a `AMD Ryzen 7 5700G with Radeon Graphics @ 16x 4.426GHz` in this bad&#xA;boy... why this chip? Well I knew I wanted many cores, and I was previously on&#xA;a Ryzn 5 3600, which was fine but I noticed that as I started to develop with&#xA;containers more that I was going to want to take advnaatage of more cores...&#xA;&#xA;I also was pretty sure that the built-in graphics would be enough for the&#xA;acceleration requirements I had in mind - which was primarily [[jellyfin]].&#xA;&#xA;At this point in time, I think AMD was still beating Intel on most of the&#xA;benchmarks I tended to care about (I was watching channels like Bitwit and LTT&#xA;at the time of building this machine)&#xA;&#xA;So because of the moderate amount of cores and built-in GPU, I paid $229 for it&#xA;according to my Amazon history, and it&#39;s currently priced at $174, so that&#39;s a&#xA;pretty sweet deal if you&#39;re on AM4 and looking to upgrade in July of 2025&#xA;&#xA;## Memory&#xA;&#xA;I maxxed her out at 128 Gee Beez. I snagged that kit of Crucial that&#39;s all&#xA;black that we&#39;ve all seen on Amazon. I paid aboaut $90 for it, it&#39;s currently&#xA;priced way high for some reason, which is unfortunate. It&#39;s been totally fine&#xA;for me as far as memory performance goes - in that it&#39;s stable and I don&#39;t&#xA;think about it...&#xA;&#xA;## Boot&#xA;&#xA;I have a 1 TB NVMe in here to boot from. I think it&#39;s a Crucial P3&#xA;&#xA;## Storage&#xA;&#xA;Storage is the interesting bit, it&#39;s supposed to be the most rock solid but&#xA;it&#39;s also been the most fluid for me from a hardware perspective, and as of my&#xA;most recent case migration I think I&#39;m in a good spot..&#xA;&#xA;&gt; The case is a Sagitatius 8-bay NAS Chassis from aliexpress&#xA;&#xA;I use&#xA;[zfs](https://openzfs.github.io/openzfs-docs/Getting%20Started/index.html)&#xA;and recommend you do to.... but this isn&#39;t a post about that&#xA;&#xA;My primary zpool is a 12TB ZFS Mirror, and I have another 12TB ZFS Mirror as an&#xA;on-prem replica plugged into this same box.&#xA;&#xA;There is a 4TB drive that serves as frigate&#39;s media directory - I wanted a&#xA;dedicated drive due to the write-intensive nature of the NVR.&#xA;&#xA;&gt; I backup to an offsite box using syncoid&#xA;&#xA;## OS&#xA;&#xA;I am currently running Ubuntu Server 24.04&#xA;&#xA;I am eager for Ubuntu to get zfs in their release that contains the zfs data&#xA;corruption with encrypted datasets but I don&#39;t expect to see it until 26.04 at&#xA;the earliest _fingers crossed_.&#xA;&#xA;## KVM&#xA;&#xA;I recently purchased a [jetkvm](https://www.jetkvm.com/) and it&#39;s exactly what&#xA;I need for both my main server and my backup off-site... An amazingly simple&#xA;and elegant solution to remote KVM.&#xA;&#xA;## Applications&#xA;&#xA;Currently I use `docker compose` to manage practically everything. Stay tuned&#xA;for more about those things&#xA;&#xA;I also have a few ansible playbooks for setting up my shell and some utilities&#xA;on my computers, including the server. They&#39;re in&#xA;[github](https://github.com/pypeaday/ansible-playbooks)&#xA;&#xA;Find more at [[the-homelab]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Homelab</title>
    <id>https://pype.dev/the-homelab/</id>
    <updated>2025-07-11T20:22:51Z</updated>
    <published>2025-07-11T20:22:51Z</published>
    <link href="https://pype.dev/the-homelab/" rel="alternate" type="text/html"></link>
    <summary type="text">This is the landing page for my homelab posts. It isn&#39;t a feed because I will write things here and link out to relevant parts of the homelab.</summary>
    <content type="text">&#xA;# The Lab&#xA;&#xA;This is the landing page for my homelab posts. It isn&#39;t a feed because I will&#xA;write things here and link out to relevant parts of the homelab.&#xA;&#xA;I&#39;ll probably have notes about the hardware mostly here.&#xA;&#xA;## Primary Application Server&#xA;&#xA;My main server is called [[ghost]]&#xA;&#xA;## Current Homelab Setup&#xA;&#xA;&gt; I copied this our of [[homelab-journey-part-1#current-homelab-setup]] for now to stub out what this page will link to&#xA;&#xA;## Ad blocking | Pi-Hole&#xA;&#xA;Hardware: pi-3&#xA;&#xA;I have a Raspberry Pi 3 hardwired in that is running pi-hole so that&#39;s been a&#xA;part of my infrastructure now for a long time.&#xA;&#xA;## Router | OPNSense&#xA;&#xA;!!! note &#34;stats&#34;&#xA;&#xA;    CPU: i5-8700&#xA;&#xA;    Memory: 8GB of whatever was in the box&#xA;&#xA;    Storage: 1TB SSD&#xA;&#xA;My router is an old Optiplex SFF 5060 I got from Amazon for less than $100.&#xA;So I&#39;m running a x86 system for my router with&#xA;OpenSense on it. Just seemed it to be another home lab standard and I&#39;d like to&#xA;someday bring pi-hole over there or use AdGuard or integrate those two things&#xA;maybe a little bit more completely but right now they are mostly separate.&#xA;&#xA;## Networking | VLANs&#xA;&#xA;There&#39;s a&#xA;managed switch in there for some VLAN tomfoolery for my cameras and an IOT&#xA;network type of a thing.&#xA;&#xA;## Networking | VPN | Tailscale&#xA;&#xA;They&#39;re on tailscale as well so my DNS happens over tailscale.&#xA;&#xA;## My Desktop&#xA;&#xA;!!! note &#34;stats&#34;&#xA;&#xA;    CPU: Ryzen 7 5700X&#xA;&#xA;    GPU: Nvidia 3090&#xA;&#xA;    Memory: 64 GB&#xA;&#xA;    Storage: 4TB SSD + 2 TB HDD for zfs backup&#xA;&#xA;    OS: Universal Blue Aurora&#xA;&#xA;My daily-driver desktop is somewhat apart of my homelab now as I have a 3090 in&#xA;there with 20 GB of VRAM so I can run some heavier LLMs for self-hosted AI&#xA;workloads. Everything in that space runs in a container and then I manage&#xA;docker containers with compose stacks and portainer for visibility.&#xA;&#xA;### Applications&#xA;&#xA;Some of the apps I run here are ollama, open-webui, automatic1111&#39;s stable diffusion webui, whisper-webui&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Docker Brings Compose to the AI Agent Era | Docker</title>
    <id>https://pype.dev/thoughts-746/</id>
    <updated>2025-07-11T11:49:41Z</updated>
    <published>2025-07-11T11:49:41Z</published>
    <link href="https://pype.dev/thoughts-746/" rel="alternate" type="text/html"></link>
    <summary type="text">Seems like docker is leaning harder into compose - which is great for me as a heavy compose user. I had heard about some</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.docker.com/blog/build-ai-agents-with-docker-compose/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.docker.com/blog/build-ai-agents-with-docker-compose/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Docker Brings Compose to the AI Agent Era | Docker&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.docker.com/blog/build-ai-agents-with-docker-compose/&#34;&gt;Docker Brings Compose to the AI Agent Era | Docker&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Seems like docker is leaning harder into compose - which is great for me as a heavy compose user. I had heard about some of the LLM enablements directly through docker desktop - for example taking fuller advantage of the host&#39;s compute power without paying the penalty of the nvidia runtime or something... I can&#39;t claim to have followed it all but I heard &#34;run LLMs in docker directly for a bigger boost&#34; and I&#39;m in.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Tyblog | systemd has been a complete, utter, unmitigated success</title>
    <id>https://pype.dev/thoughts-745/</id>
    <updated>2025-07-11T11:00:54Z</updated>
    <published>2025-07-11T11:00:54Z</published>
    <link href="https://pype.dev/thoughts-745/" rel="alternate" type="text/html"></link>
    <summary type="text">I found this post on systemd this morning, and although I&#39;ve been a Linux user for around 6 years now, there&#39;s some leve</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://blog.tjll.net/the-systemd-revolution-has-been-a-success/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://blog.tjll.net/the-systemd-revolution-has-been-a-success/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Tyblog | systemd has been a complete, utter, unmitigated success&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://blog.tjll.net/the-systemd-revolution-has-been-a-success/&#34;&gt;Tyblog | systemd has been a complete, utter, unmitigated success&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I found this post on systemd this morning, and although I&#39;ve been a Linux user for around 6 years now, there&#39;s some levels of it that are pretty foreign to me. One of the things I never got was the drama around systemd - but that&#39;s because I wasn&#39;t around in the beforefore times, I don&#39;t use cron THAT MUCH, and I&#39;ve only had to setup a few systemd unit files - not enough to generate a real opinion on it.&#xA;But lately I&#39;m looking into more automation at home - and some stuff is fun to put into an overkill of a platform for a homelab, like temporal, but some stuff should probably be run in more hardened ways (backups for example) - so getting a little download this morning on systemd from a clearly seasoned Linux user is a nice addition to my hot cup of coffee.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Lua type hinting - undefined global</title>
    <id>https://pype.dev/lua-type-hinting-undefined-global/</id>
    <updated>2025-07-11T06:08:39Z</updated>
    <published>2025-07-11T06:08:39Z</published>
    <link href="https://pype.dev/lua-type-hinting-undefined-global/" rel="alternate" type="text/html"></link>
    <summary type="text">I have tons of linting errors in my nvim config, partly because I use Lazyvim plus a set of poorly written customizations that have traveled with me for a...</summary>
    <content type="html">&lt;p&gt;I have tons of linting errors in my nvim config, partly because I use Lazyvim&#xA;plus a set of poorly written customizations that have traveled with me for a&#xA;while. I try to re-work things and right now I&amp;rsquo;ve been revisiting my developer&#xA;setup. Well the LSP rrors as I&amp;rsquo;ve gone through my neovim config are ticking me&#xA;off - and this was the biggest one &amp;ldquo;Undefined global: vim&amp;rdquo;. I saw &lt;code&gt;vim.fn&lt;/code&gt;&#xA;everywhere but the LSP hated it&amp;hellip; turns out &lt;code&gt;vim&lt;/code&gt; is a given global and you&#xA;can help your lsp with 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;---@diagnostic disable: undefined-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;c1&#34;&gt;-- vim is a global in Neovim Lua scripts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;---@diagnostic disable: undefined-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;c1&#34;&gt;-- vim is a global in Neovim Lua scripts&lt;/span&gt;&#xA;&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;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;pypeaday&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&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;n&#34;&gt;stdpath&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;s2&#34;&gt;&amp;#34;/lua/pypeaday&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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&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;&#xA;&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;daily&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;s2&#34;&gt;&amp;#34;pypeaday.daily&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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.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;&lt;span class=&#34;s2&#34;&gt;&amp;#34;DailyNote&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;daily.check_and_open_daily_note&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;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;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Daily&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;daily.check_and_open_daily_note&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;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;&lt;span class=&#34;s2&#34;&gt;&amp;#34;BackLinks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;daily.find_backlinks&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;vim.keymap&lt;/span&gt;&lt;span class=&#34;p&#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;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;dn&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;daily.check_and_open_daily_note&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;desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Open daily note&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&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.keymap&lt;/span&gt;&lt;span class=&#34;p&#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;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;df&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;daily.find_daily_files&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;desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Find daily 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;n&#34;&gt;vim.keymap&lt;/span&gt;&lt;span class=&#34;p&#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;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;dl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;daily.find_backlinks&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;desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Find backlinks&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&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;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-11 Notes</title>
    <id>https://pype.dev/2025-07-11-notes/</id>
    <updated>2025-07-11T05:43:47Z</updated>
    <published>2025-07-11T05:43:47Z</published>
    <link href="https://pype.dev/2025-07-11-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">yesterday 2025-07-10-notes</summary>
    <content type="text">&#xA;yesterday [[2025-07-10-notes]]&#xA;&#xA;I am continuing to work on my dev experience a little bit... it&#39;s been a long&#xA;time since I got into it but I&#39;m very spread out now so I need to get some&#xA;minimized commmonization going across my environments:&#xA;&#xA;1. 3 computers&#xA;2. 2.5 editors: neovim, vs code, vs code + roo, windsurf&#xA;3. scattered blogging utilities (links, graphs, etc)&#xA;&#xA;So I&#39;m using LLMs to help me clean up dotfiles, and then I&#39;ll probably try to&#xA;get my keymaps from tmux working in windsurf... they work in vs code OK, i&#xA;probably have a few pain points, but when I&#39;m in windsurf, although that&#39;s&#xA;mostly the AI writing code, I need to edit things sometimes and my vim keymaps&#xA;are all messed up. I usually open the file in neovim to make the edit but it&#39;d&#xA;be nice to stay in whichever tool I&#39;m in for the task I&#39;m working on&#xA;&#xA;## Working on&#xA;&#xA;- [[thoughts-to-nostr]] is coming along great, I have the oldest thoughts being posted via temporal workflow and activities now&#xA;- setup [[jellyfin]] post stub&#xA;- I still want to clean up my dotfiles a bit and hone in on the vs code and&#xA;  windsurf keymaps issues... plus a few settings issues with git and the project&#xA;  manager extension&#xA;&#xA;## Wins&#xA;&#xA;- learned [[lua-type-hinting-undefined-global]]&#xA;- wrote about [[the-homelab]] and [[ghost]]&#xA;- my daily-notes nvim plugin is working really nicely - [[daily-notes-neovim-plugin]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-10 Notes</title>
    <id>https://pype.dev/2025-07-10-notes/</id>
    <updated>2025-07-10T06:54:26Z</updated>
    <published>2025-07-10T06:54:26Z</published>
    <link href="https://pype.dev/2025-07-10-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">2025-07-09-notes from yesterday</summary>
    <content type="text">&#xA;[[2025-07-09-notes]] from yesterday&#xA;&#xA;I have temporal stuff kind of going with postiz in a windsurf session working on [[thoughts-to-nostr]]&#xA;&#xA;Been cleaning up my zshrc and tmux stuff... will be touching other dotfiles as well&#xA;&#xA;I could make links to those 3 things... zshrc, tmux, and my dotfiles&#xA;&#xA;---&#xA;&#xA;I explored some rust replacements for common things - and I&#39;ve been using them&#xA;loosely but trying to get some nice aliases into my zshrc&#xA;&#xA;I worked with windsurf and added this to just get started&#xA;&#xA;```bash&#xA;# Rust-based utility replacements&#xA;# File listing with eza (modern ls replacement, fork of exa)&#xA;if command -v eza &amp;&gt; /dev/null&#xA;then&#xA;    alias ls=&#39;eza&#39;&#xA;    alias ll=&#39;eza -la&#39;&#xA;    alias lt=&#39;eza -T --level=2&#39;             # Tree view, 2 levels deep&#xA;    alias ltt=&#39;eza -T --level=3&#39;            # Tree view, 3 levels deep&#xA;    alias lttt=&#39;eza -T&#39;                     # Full tree view&#xA;    alias lg=&#39;eza -la --git&#39;                # List with git status&#xA;    alias lm=&#39;eza -la --sort=modified&#39;      # Sort by modified date&#xA;    alias lsize=&#39;eza -la --sort=size&#39;       # Sort by size&#xA;fi&#xA;&#xA;# Disk usage with dust (du replacement)&#xA;if command -v dust &amp;&gt; /dev/null&#xA;then&#xA;    alias du=&#39;dust&#39;&#xA;    alias du1=&#39;dust -d 1&#39;                   # Show only 1 level deep&#xA;    alias du2=&#39;dust -d 2&#39;                   # Show 2 levels deep&#xA;    alias duh=&#39;dust -h&#39;                     # Human readable&#xA;    alias dus=&#39;dust -s&#39;                     # Sort by size&#xA;fi&#xA;&#xA;# Directory tree with broot (interactive tree)&#xA;if command -v broot &amp;&gt; /dev/null&#xA;then&#xA;    alias br=&#39;broot&#39;&#xA;    alias brs=&#39;broot --sizes&#39;               # Show with sizes&#xA;    alias brh=&#39;broot --hidden&#39;              # Show hidden files&#xA;fi&#xA;&#xA;# Disk space with duf (df replacement)&#xA;if command -v duf &amp;&gt; /dev/null&#xA;then&#xA;    alias df=&#39;duf&#39;&#xA;    alias dfa=&#39;duf -all&#39;                    # Show all devices&#xA;fi&#xA;&#xA;# Process viewer with procs (ps replacement)&#xA;if command -v procs &amp;&gt; /dev/null&#xA;then&#xA;    alias ps=&#39;procs&#39;&#xA;    alias pst=&#39;procs --tree&#39;                # Show process tree&#xA;    alias psc=&#39;procs --watch&#39;               # Watch processes (like top)&#xA;fi&#xA;&#xA;# Find with fd (find replacement)&#xA;if command -v fd &amp;&gt; /dev/null&#xA;then&#xA;    alias find=&#39;fd&#39;&#xA;    alias fh=&#39;fd --hidden&#39;                  # Include hidden files&#xA;    alias ft=&#39;fd --type f --exec-batch ls -la&#39;  # Find files and show details&#xA;fi&#xA;```&#xA;&#xA;## Wins&#xA;&#xA;- rush tool exploration&#xA;- tried zoxide - it&#39;s overkill for me&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pilgrims Creek</title>
    <id>https://pype.dev/pilgrims-creek/</id>
    <updated>2025-07-09T08:00:25Z</updated>
    <published>2025-07-09T08:00:25Z</published>
    <link href="https://pype.dev/pilgrims-creek/" rel="alternate" type="text/html"></link>
    <summary type="text">Podcast with Cameron for weary theologians. We spend time discussing interesting topics, approaches to theology, etc. all from the perspective of travelers...</summary>
    <content type="html">&lt;h1 id=&#34;what&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Podcast with Cameron for weary theologians. We spend time discussing interesting topics, approaches to theology, etc. all from the perspective of travelers who are tired and need a place to just have good conversation. We&amp;rsquo;re not here to fight theological points or debate, but rather to explore the patterns in the Bible, equip ourselves and others with theological tools, and overall enjoy a good time with believers interacting with fun and challenging ideas about our faith&lt;/p&gt;&#xA;&lt;iframe src=&#34;https://shows.element.fm/player?x=https://cdn.element.fm/2e873e93-be22-4bc0-a68f-2fed2810e169/8c1d9ebb-9e1b-4f81-80e7-9921a42d9ca8/rss.xml&amp;e=b4574c89-f521-43f8-80c1-9d8ad6c89fea&#34; width=&#34;100%&#34; height=&#34;90px&#34; style=&#34;border: none;&#34;&gt;&lt;/iframe&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-09 Notes</title>
    <id>https://pype.dev/2025-07-09-notes/</id>
    <updated>2025-07-09T06:40:22Z</updated>
    <published>2025-07-09T06:40:22Z</published>
    <link href="https://pype.dev/2025-07-09-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">2025-07-08-notes from yesterday</summary>
    <content type="text">&#xA;[[2025-07-08-notes]] from yesterday&#xA;&#xA;## [[thoughts-to-nostr]]&#xA;&#xA;- I feel a litte stuck on this... kind of blocked on temporal organization and not knowing what to do next&#xA;&#xA;## [[homelab-monitoring-agent]]&#xA;&#xA;- working still on basic tool call, idk how much longer I&#39;m gonna care about this...&#xA;&#xA;## [[using-restic-to-backup-my-home-directory]]&#xA;&#xA;- desktop backup&#xA;- it&#39;s in compose, but I might want to use the `restic` binary that comes with UBlue... systemd timer to run it or temporal?&#xA;&#xA;???+ success &#34;&#34;&#xA;&#xA;    This is setup as a user systemd service and only backing uping my dotfiles to /tank/sandbox for now... but it appears to be working&#xA;&#xA;## Writing&#xA;&#xA;The python -m issue - &lt;https://chatgpt.com/c/686d2a05-5b54-800f-8b84-1638c1b96840&gt;&#xA;&#xA;## Organization&#xA;&#xA;zfs-ops is in pypeaday github... should it be in doomlab7 with everything else? I kind of want a monorepo just so I can quit thinking about where to put stuff...&#xA;&#xA;for example I have zfs-ops for zfs related things, but now I&#39;m gonna use restic to backup from my desktop... so does that go in zfs-ops cause it&#39;s really more about backups? or shoudl that stay only for zfs things and put this restic/docker backup somewhere else... either a new repo or start a monorepo for all my homelab stuff...&#xA;&#xA;- homelab-compose&#xA;- all terraform (including digital harbor stuff?)&#xA;- zfs-ops&#xA;- amcrest sync&#xA;&#xA;## [[pilgrims-creek]]&#xA;&#xA;- Meeting with Cam today&#xA;&#xA;## Wins&#xA;&#xA;- restic setup on systemd as a test - just doing dotfiles right now but it&#39;s working I think [[using-restic-to-backup-my-home-directory]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 restic · Backups done right!</title>
    <id>https://pype.dev/thoughts-740/</id>
    <updated>2025-07-08T11:53:41Z</updated>
    <published>2025-07-08T11:53:41Z</published>
    <link href="https://pype.dev/thoughts-740/" rel="alternate" type="text/html"></link>
    <summary type="text">Welp, I need to be backing up my desktop home directory, specifically a directory of docker volume data... I thought dup</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://restic.net/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://restic.net/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - restic · Backups done right!&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://restic.net/&#34;&gt;restic · Backups done right!&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Welp, I need to be backing up my desktop home directory, specifically a directory of docker volume data... I thought duplicati made sense, but that mostly targets cloud-based backends, and rsync is great but I wasn&#39;t sure how i wanted to manage the job. &#xA;Through a little AI chat I learned about restic and am working on a compose stack to run restic in a container to regularly backup my home directory via sftp to my NAS to then be swept up in my NAS backup workflow&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Add confirmation for hard reset by stefanhaller · Pull Request…</title>
    <id>https://pype.dev/thoughts-739/</id>
    <updated>2025-07-08T11:25:30Z</updated>
    <published>2025-07-08T11:25:30Z</published>
    <link href="https://pype.dev/thoughts-739/" rel="alternate" type="text/html"></link>
    <summary type="text">I float between lazygit and gitui still for my terminal-based git flow and I want to lean into lazygit more fully. One i</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://github.com/jesseduffield/lazygit/pull/4704&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://github.com/jesseduffield/lazygit/pull/4704&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Add confirmation for hard reset by stefanhaller · Pull Request #4704 · jesseduffield/lazygit&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://github.com/jesseduffield/lazygit/pull/4704&#34;&gt;Add confirmation for hard reset by stefanhaller · Pull Request #4704 · jesseduffield/lazygit&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I float between lazygit and gitui still for my terminal-based git flow and I want to lean into lazygit more fully. One issue is that the keybinding for lazygit &lt;C-d&gt; brings up a menu there the first option is to nuke the entire working tree... in gitui this just resets the one file that&#39;s highlighted in the TUI. So that&#39;s obviously 100% my fault, however it&#39;s nice to see this PR open for adding confirmation for this potential blunder that has cost me several uncommitted scripts and changes...&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-08 Notes</title>
    <id>https://pype.dev/2025-07-08-notes/</id>
    <updated>2025-07-08T09:03:01Z</updated>
    <published>2025-07-08T09:03:01Z</published>
    <link href="https://pype.dev/2025-07-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I consolidated homelab-social-media-pipelines into homelab-temporal, which is the app repo.</summary>
    <content type="text">&#xA;Today I consolidated homelab-social-media-pipelines into homelab-temporal,&#xA;which is the app repo.&#xA;&#xA;I am tracking this stuff in a [kanboard&#xA;ticket](https://kanboard.paynepride.com/?controller=TaskViewController&amp;action=show&amp;task_id=235&amp;project_id=8)&#xA;and also [[thoughts-to-nostr]]&#xA;&#xA;I also touched on my [[homelab-monitoring-agent]] bys witching to atomic-agents, but windsurf is struggling with it&#xA;&#xA;Worked on backup of my desktop - in dotfiles I have nas-back which will be a&#xA;compose stack I can move to homelab-compose that uses restic to backup files&#xA;via stp/ssh - seems easy enough to setup&#xA;[[using-restic-to-backup-my-home-directory]]&#xA;&#xA;I learned some stuff about python from chat - &lt;https://chatgpt.com/c/686d2a05-5b54-800f-8b84-1638c1b96840&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 HomeBox</title>
    <id>https://pype.dev/thoughts-737/</id>
    <updated>2025-07-07T10:48:12Z</updated>
    <published>2025-07-07T10:48:12Z</published>
    <link href="https://pype.dev/thoughts-737/" rel="alternate" type="text/html"></link>
    <summary type="text">I stumbled onto homebox this morning scrolling a newsletter and it looks like something I&#39;ve been lightly thinking about</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://homebox.software/en/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://homebox.software/en/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - HomeBox&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://homebox.software/en/&#34;&gt;HomeBox&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I stumbled onto homebox this morning scrolling a newsletter and it looks like something I&#39;ve been lightly thinking about for a while. I have wanted a way to track all the things in my house, but I haven&#39;t given it enough thought to come up with the specific manner in which to do it. I&#39;ve seen other asset trackers but today this one excited me. &#xA;I spun it up at home quick and it looks great - It&#39;ll take quite a lot of time to fill it out but here&#39;s a few features I love out of the gate:&#xA;&#xA;1. the default setup seems very useful - pre-populated locations and tags for cataloging assets reduces the barrier to entry for me&#xA;2. it&#39;s pretty nice lookin&#xA;3. there&#39;s a label generator including qr codes that take you to the record in your homebox... I had an idea for something like this a while ago - qr codes to link to instructions for things around the house (like cleaning the oven or something). So it&#39;s neat to see that similar idea played out in another more useful way!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 postmarketOS // v24.06: The One With Over 250 Devices</title>
    <id>https://pype.dev/thoughts-736/</id>
    <updated>2025-07-06T11:31:19Z</updated>
    <published>2025-07-06T11:31:19Z</published>
    <link href="https://pype.dev/thoughts-736/" rel="alternate" type="text/html"></link>
    <summary type="text">This is the OS you can install onto an old phone to run linux on it - using this OS you could set-up a cluster of phones</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://postmarketos.org/blog/2024/06/16/v24.06-release/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://postmarketos.org/blog/2024/06/16/v24.06-release/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - postmarketOS // v24.06: The One With Over 250 Devices&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://postmarketos.org/blog/2024/06/16/v24.06-release/&#34;&gt;postmarketOS // v24.06: The One With Over 250 Devices&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;This is the OS you can install onto an old phone to run linux on it - using this OS you could set-up a cluster of phones. I&#39;m interested in this someday, although today the to-do list is too long to worry about it&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Self-Hosting A Cluster On Old Phones | Hackaday</title>
    <id>https://pype.dev/thoughts-735/</id>
    <updated>2025-07-06T11:30:17Z</updated>
    <published>2025-07-06T11:30:17Z</published>
    <link href="https://pype.dev/thoughts-735/" rel="alternate" type="text/html"></link>
    <summary type="text">Came across a blog and article on using a mobile OS to self-host a cluster on old phones... I happen to keep several old</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://hackaday.com/2025/04/09/self-hosting-a-cluster-on-old-phones/?ref=dailydev&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://hackaday.com/2025/04/09/self-hosting-a-cluster-on-old-phones/?ref=dailydev&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Self-Hosting A Cluster On Old Phones | Hackaday&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://hackaday.com/2025/04/09/self-hosting-a-cluster-on-old-phones/?ref=dailydev&#34;&gt;Self-Hosting A Cluster On Old Phones | Hackaday&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Came across a blog and article on using a mobile OS to self-host a cluster on old phones... I happen to keep several old android phones lying around and although I&#39;m not presently super interested in figuring out an android/arm based homelab, I am excited for the next coming years when I&#39;m sure it&#39;ll only get easier, phones will only be more powerful, and perhaps we&#39;ll be running full blown CV pipeline in k8s clusters running on Pixel devices!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Testing a Postiz Change Locally (IT WORKS!)</title>
    <id>https://pype.dev/testing-a-postiz-change-locally/</id>
    <updated>2025-07-06T08:42:44Z</updated>
    <published>2025-07-06T08:42:44Z</published>
    <link href="https://pype.dev/testing-a-postiz-change-locally/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working on a pipeline at home to integrate my blog with social media a little more. One of the things I want to do is automatically post my-thoughts to...</summary>
    <content type="text">&#xA;## Setup&#xA;&#xA;I am working on a pipeline at home to integrate my blog with social media a&#xA;little more. One of the things I want to do is automatically post&#xA;[[my-thoughts]] to [[nostr]]. [[postiz]] has nostr support that works just fine - login&#xA;with your [[nostr-hex-key]] and you&#39;re good to go to post notes to several of&#xA;the common relays. However for my testing I just wanted to post to a&#xA;[self-hosetd nostr relay](https://github.com/scsibug/nostr-rs-relay)&#xA;but there wasn&#39;t a way to override which relays were used. Well I submitted [this pr](https://github.com/gitroomhq/postiz-app/pull/824)&#xA;and hopefully it goes through. But before it did I was able to test the changes&#xA;by simply building the postiz image from my feature branch and deploying it at&#xA;home in leiu of the published image. It was super cool to see it work&#xA;&#xA;## Build and Deploy&#xA;&#xA;The build was easy after cloning the repo - I happened to already have `buildx` installed... it came with [aurora](https://docs.getaurora.dev/)&#xA;&#xA;`docker buildx build --platform linux/amd64 -f Dockerfile.dev -t registry.example.com/gitroomhq/postiz-app:nostr-test .`&#xA;&#xA;After building then I just update my compose file easy-peasy&#xA;&#xA;```yaml&#xA;services:&#xA;  postiz:&#xA;    # updated the image to my own from my registry&#xA;    image: resitry.example.com/gitroomhq/postiz-app:latest&#xA;    container_name: postiz&#xA;    restart: always&#xA;    env_file: .env&#xA;#####################&#xA;### REST OF COMPOSE FILE FROM THEIR REPO&#xA;```&#xA;&#xA;## Pics&#xA;&#xA;To test this my methodlogy was: 0. spin up nostr relay&#xA;&#xA;1. start postiz with my NOSTR_RELAY_OVERRIDES configuration for only my local relay&#xA;2. use an existing script to schedule a nostr post via the postiz REST API&#xA;3. use the UI to send the note to nostr&#xA;4. validate the note came through my relay&#xA;&#xA;So step 1 - does my script to schedule via the REST API work?&#xA;&#xA;```&#xA;postiz  | [0] 1|backend  | {&#xA;postiz  | [0] 1|backend  |   &#34;type&#34;: &#34;draft&#34;,&#xA;postiz  | [0] 1|backend  |   &#34;shortLink&#34;: false,&#xA;postiz  | [0] 1|backend  |   &#34;tags&#34;: [],&#xA;postiz  | [0] 1|backend  |   &#34;posts&#34;: [&#xA;postiz  | [0] 1|backend  |     {&#xA;postiz  | [0] 1|backend  |       &#34;integration&#34;: {&#xA;postiz  | [0] 1|backend  |         &#34;id&#34;: &#34;cmbgf5oko0001ra99r9vzv1fj&#34;&#xA;postiz  | [0] 1|backend  |       },&#xA;postiz  | [0] 1|backend  |       &#34;value&#34;: [&#xA;postiz  | [0] 1|backend  |         {&#xA;postiz  | [0] 1|backend  |           &#34;content&#34;: &#34;\nHere&#39;s a thought I had a while back:\n\n&gt; matduggan.com/what-would-a-kubernetes-2-0-look-like/\n\nThis article was longer than I had time to really consume but a heading caught my eye that I wanted to agree with - the author says k8s 2.0 may consider HCL instead of YAML. And as a recent terraform / open-tofu adopter I gotta say I would be ALL FOR THIS\n\nHere&#39;s the original link for more context: https://matduggan.com/what-would-a-kubernetes-2-0-look-like/\n        \n\n# devops # tech #k8s #nostr #plebchain&#34;,&#xA;postiz  | [0] 1|backend  |           &#34;image&#34;: []&#xA;postiz  | [0] 1|backend  |         }&#xA;postiz  | [0] 1|backend  |       ]&#xA;postiz  | [0] 1|backend  |     }&#xA;postiz  | [0] 1|backend  |   ],&#xA;postiz  | [0] 1|backend  |   &#34;date&#34;: &#34;2025-07-02T13:27:07.028Z&#34;&#xA;postiz  | [0] 1|backend  | }&#xA;```&#xA;&#xA;???+ success&#xA;&#xA;    After the first step my local build looks to have not broken this part of the app!&#xA;&#xA;Next was spinning up my own nostr relay - it&#39;s actually just `docker compose up`&#xA;&#xA;```yaml&#xA;services:&#xA;  nostr-relay:&#xA;    image: nostr-rs-relay:latest&#xA;    container_name: nostr-relay&#xA;    ports:&#xA;      - &#34;7000:8080&#34;&#xA;    environment:&#xA;      TZ: America/Chicago&#xA;    volumes:&#xA;      - ./data:/usr/src/app/db&#xA;      - ./config.toml:/usr/src/app/config.toml&#xA;    restart: unless-stopped&#xA;```&#xA;&#xA;Finally, can I send my note to my relay?&#xA;&#xA;I hit post in the UI and then checked coracle...&#xA;&#xA;Yes! Using [coracle.social](https://coracle.social) I can verify that my note went to my relay only&#xA;&#xA;![20250706122123_47b06d96.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250706122123_47b06d96.png)&#xA;&#xA;## Fin&#xA;&#xA;So that was a fun way to get into postiz a little more and start to flesh out&#xA;what will be a testing-scenario for some pipelines I&#39;m building at home&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>July 4 - Freedom From Protection</title>
    <id>https://pype.dev/july-4-freedom-from-protection/</id>
    <updated>2025-07-04T19:41:30Z</updated>
    <published>2025-07-04T19:41:30Z</published>
    <link href="https://pype.dev/july-4-freedom-from-protection/" rel="alternate" type="text/html"></link>
    <summary type="text">Independence Day has become more important to me as I&#39;ve gained some perspective on the world, and learned that in the US of A we have it pretty dang good......</summary>
    <content type="html">&lt;h2 id=&#34;a-renewed-appreciation-for-independence-day&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;A Renewed Appreciation for Independence Day&lt;/span&gt; &lt;a href=&#34;#a-renewed-appreciation-for-independence-day&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Independence Day has become more important to me as I&amp;rsquo;ve gained some&#xA;perspective on the world, and learned that in the US of A we have it pretty&#xA;dang good&amp;hellip; yes there&amp;rsquo;s corruption up the chain and the government is a wreck,&#xA;but at the day to day level for an individual setting 2 feet on God&amp;rsquo;s green&#xA;earth&amp;hellip; there&amp;rsquo;s a LOT worse places on the earth to be. And so as we all&#xA;celebrate with cookouts and stuff I was getting ready to have a great time with&#xA;a few friends enjoying some that tastey freedom&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;friends-and-boundaries&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Friends and Boundaries&lt;/span&gt; &lt;a href=&#34;#friends-and-boundaries&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We hosted this gathering and pretty clearly scheduled it until 630 PM which is&#xA;when we typically get our daughters ready for bed (yes yes early bedtime&amp;hellip;&#xA;they&amp;rsquo;re up PLENTY early so don&amp;rsquo;t you worry). These friends know our kids and&#xA;our early nightly routine, so nothing was unexpected here&lt;/p&gt;&#xA;&lt;p&gt;However, my entire life as I&amp;rsquo;ve had some kind of boundary to keep personally,&#xA;I&amp;rsquo;ve had to make sure that that boundary was respected very actively, or work&#xA;to remind people of it&amp;hellip; Overstaying your welcome is a general example here.&lt;/p&gt;&#xA;&lt;p&gt;So I was definitely ready to start reminding people about the time come 6:15ish&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Well I got pulled away needing to tend to my youngest daughter&amp;rsquo;s tantrum and in that time several minutes passed, but one key thing happened&amp;hellip;&lt;/p&gt;&#xA;&lt;details class=&#34;admonition success&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;everyone got ready to go&lt;/summary&gt;&#xA;&lt;p&gt;While I was tending to my kid, my friends got all ready to leave on time&amp;hellip;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250705005214_a83dd563.png&#34; alt=&#34;20250705005214_a83dd563.png&#34;&gt;&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;Great guests know when it&amp;rsquo;s time to leave and don&amp;rsquo;t make it your responsibility&#xA;to end the time of hanging out. And honestly that&amp;rsquo;s the whole post&amp;hellip; Today all&#xA;of our friends were mindful of the time, gave their kiddos adequate warnings,&#xA;and everyone&amp;rsquo;s cars were gone by 6:38&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I found myself SHOCKED and concerned that I had offended everyone and they couldn&amp;rsquo;t&#xA;wait to leave. But no&amp;hellip; it was our friends knowing our boundary and not making&#xA;it my responsibility to kick everyone out. They&amp;rsquo;re good friends who know our&#xA;girls go to bed early. The thing I am struck by is in mulling over the concern&#xA;of having offended someone what I realized is&amp;hellip;&lt;/p&gt;&#xA;&lt;details class=&#34;admonition note&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Note&lt;/summary&gt;&#xA;&lt;p&gt;I realized that my friends here freed me from having to protect my own&#xA;boundaries and it&amp;rsquo;s hard to put that into words&amp;hellip;&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;Without the words to describe it - I am grateful to have a community that is&#xA;considerate of others (ie. me and my family).&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Build backend | uv</title>
    <id>https://pype.dev/thoughts-732/</id>
    <updated>2025-07-04T11:43:30Z</updated>
    <published>2025-07-04T11:43:30Z</published>
    <link href="https://pype.dev/thoughts-732/" rel="alternate" type="text/html"></link>
    <summary type="text">uv build backend ready for production! Dang... I need to visit my hatch builds, I love hatch&#39;s simplicity specifically w</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://docs.astral.sh/uv/concepts/build-backend/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://docs.astral.sh/uv/concepts/build-backend/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Build backend | uv&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://docs.astral.sh/uv/concepts/build-backend/&#34;&gt;Build backend | uv&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;uv build backend ready for production! Dang... I need to visit my hatch builds, I love hatch&#39;s simplicity specifically with versioning...  Not sure if it&#39;s worth actually switching to uv for my builds or not, but it is dang cool to see astral take on the python space with unbelievable improvements &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Liquids vs Liquid and How My Wife Forgot I was Autistic</title>
    <id>https://pype.dev/liquids-vs-liquid-and-how-my-wife-forgot-i-was-autistic/</id>
    <updated>2025-07-04T06:32:57Z</updated>
    <published>2025-07-04T06:32:57Z</published>
    <link href="https://pype.dev/liquids-vs-liquid-and-how-my-wife-forgot-i-was-autistic/" rel="alternate" type="text/html"></link>
    <summary type="text">My wife said a somewhat rhetorical question yesterday &#34;is it liquid or liquids when...&#34; and I frankly don&#39;t remember the exact ending. I thought it was a...</summary>
    <content type="html">&lt;h1 id=&#34;a-comical-story&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;A Comical Story&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;My wife said a somewhat rhetorical question yesterday &amp;ldquo;is it liquid or liquids&#xA;when&amp;hellip;&amp;rdquo; and I frankly don&amp;rsquo;t remember the exact ending. I thought it was a&#xA;curious statement so I launched into my own explanation&amp;hellip;&lt;/p&gt;&#xA;&lt;details class=&#34;admonition note&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;\*_Liquids vs Liquid_&lt;/summary&gt;&#xA;&lt;p&gt;Liquid is used regardless of the quantity of a single liquid, or if you are referring to a combination of different liquids that group together in a similar way&amp;hellip; So if you had a lot of apple juice, you could say &amp;ldquo;that&amp;rsquo;s a lot of liquid&amp;rdquo;, and if you had apple juice and orange juice, you could still say &amp;ldquo;that&amp;rsquo;s a lot of liquid&amp;rdquo; because the &amp;ldquo;liquid&amp;rdquo; isn&amp;rsquo;t the specific &lt;em&gt;kind&lt;/em&gt; of juice here, it&amp;rsquo;s the amount of &lt;em&gt;juice&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;She cut me off right at the end to lovingly comment &lt;strong&gt;I forgot for a second that you were autistic&lt;/strong&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>MCPHub with Windsurf</title>
    <id>https://pype.dev/mcphub-with-windsurf/</id>
    <updated>2025-07-03T08:42:31Z</updated>
    <published>2025-07-03T08:42:31Z</published>
    <link href="https://pype.dev/mcphub-with-windsurf/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across mcphub today and got the motivation to try it out... I use AI tools like Windsurf and Roo across multiple devices and it&#39;d be awesome to have a...</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/samanhappy/mcphub&#34;&gt;mcphub&lt;/a&gt; today and got the motivation to try it out&amp;hellip; I use AI&#xA;tools like Windsurf and Roo across multiple devices and it&amp;rsquo;d be awesome to have&#xA;a simple mcp config - ie. a centralized hub to serve all my mcp servers and BAM&#xA;enter this github project. It was easy to spin up in docker, and then according&#xA;to Windsurf&amp;rsquo;s docs&#xA;&lt;a href=&#34;https://docs.windsurf.com/windsurf/cascade/mcp#mcp-config-json&#34;&gt;here&lt;/a&gt; the&#xA;setup is just naming a server and passing a serverUrl&lt;/p&gt;&#xA;&lt;pre class=&#34;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;mcpServers&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;hub&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;serverUrl&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://localhost:3000/sse&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;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;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250703134426_2c9dfa01.png&#34; alt=&#34;20250703134426_2c9dfa01.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;details class=&#34;admonition warning&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Warning&lt;/summary&gt;&#xA;&lt;p&gt;The sse endpoint stuff is getting deprecated eventually - I didn&amp;rsquo;t want to&#xA;spend any time right now trying to get the newer things to work&amp;hellip; future&#xA;me/you will solve that problem&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;setup&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Setup&lt;/span&gt; &lt;a href=&#34;#setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I ran this in compose with this 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;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;mcphub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;samanhappy/mcphub&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;3000:3000&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;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;./mcp_settings.json:/app/mcp_settings.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;l&#34;&gt;./data:/app/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;qdrant&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;qdrant/qdrant&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;qdrant&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;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;6333:6333&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;deploy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;limits&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;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;500m&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 at present the &lt;code&gt;mcp_settings.json&lt;/code&gt; file looks like this mostly:&lt;/p&gt;&#xA;&lt;pre class=&#34;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;mcpServers&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;docker-mcp&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;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;uvx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;args&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;docker-mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;ragdocs&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;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;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;nt&#34;&gt;&amp;#34;args&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;./node_modules/@qpd-v/mcp-server-ragdocs/build/index.js&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&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;p&#34;&gt;{&lt;/span&gt;&#xA;&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;QDRANT_URL&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://localhost:6333&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;EMBEDDING_PROVIDER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ollama&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;OLLAMA_URL&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://localhost:11434&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;alwaysAllow&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;search_documentation&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;list_sources&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&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_ollama&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;add_documentation&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&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;disabled&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;sequential-thinking&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;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;npx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;args&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;-y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;@modelcontextprotocol/server-sequential-thinking&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;users&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;username&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;redacted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;isAdmin&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;details class=&#34;admonition note&#34; open&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;Note&lt;/summary&gt;&#xA;&lt;p&gt;I assume here you have ollama running for ragdocs (in my screenshot you see I actually don&amp;rsquo;t right now anyways)&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;&lt;code&gt;docker compose up&lt;/code&gt; and we&amp;rsquo;re cooking at &lt;a href=&#34;http://localhost:3000&#34;&gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Nostr</title>
    <id>https://pype.dev/nostr/</id>
    <updated>2025-07-02T21:22:03Z</updated>
    <published>2025-07-02T21:22:03Z</published>
    <link href="https://pype.dev/nostr/" rel="alternate" type="text/html"></link>
    <summary type="text">???+ note &#34;How to start...&#34;</summary>
    <content type="text">&#xA;???+ note &#34;How to start...&#34;&#xA;&#xA;    This isn&#39;t a getting started with nostr - see [[getting-started-with-nostr]] for that&#xA;&#xA;[The nostr docs](https://nostr.com/)&#xA;&#xA;Nostr is a very intriguing protocol for communication that lends itself to a&#xA;decentrlized social media experience through the use of relays. I would love to&#xA;understand it more fully someday, but I am inclined to be in line with&#xA;almost anything decentrlized, and although the primary content in the&#xA;nostr-verse right now is bitcoin, I am sure that as time goes on, the need for&#xA;a truly free way to communicate will be necessary - and nostr won&#39;t solve every&#xA;problem, but I think it&#39;ll be a tool in the set of solutions we come up with.&#xA;It&#39;s secure, decentralized, actively worked on, and very flexible.&#xA;&#xA;???+ note &#34;NOSTR&#34;&#xA;&#xA;    Notes and Other Stuff Transmited over Relays&#xA;&#xA;## Decentralization&#xA;&#xA;Why does decentralization matter? Put simply - censorship. A founding principal&#xA;of America is free speech and in recent years our right to speak freely has&#xA;been put under severe fire.&#xA;&#xA;I&#39;ve crossed paths with people who very regularly talked about freedom of&#xA;speech but it wasn&#39;t until the last several years, mostly with covid that I&#xA;started to pay a little closer attention. I&#39;m not turning this post into any&#xA;long rant about anything specific, but I do know that many voices were silenced&#xA;on Facebook, Twitter/X, Insta, etc. Big Tech really threw the hammer down on&#xA;people - a simple example was the Ivermectin stuff... which in the last 2 years&#xA;has turned out to be a pretty effective treatment for many thousands of people!&#xA;&#xA;But why does that matter? It&#39;s because the platforms that existed which made it&#xA;possible for anyone to &#34;have an audience&#34; made harsh judgements about what&#xA;could and couldn&#39;t be on their platforms... There&#39;s pros and cons to this, but a&#xA;primary con I see is that the power to limit the spread of information was&#xA;pretty solely concentrated in the departments of these Big Tech firms that&#xA;allowed or disallowed certain things to be said and expressed on their&#xA;platforms.&#xA;&#xA;Nostr is different here in that there&#39;s no central command, no single data&#xA;center or hub.... Nostr is a protocol, like HTTP is a protocol... anyone can&#xA;send &#34;Notes and Other Stuff over Relays&#34; so developers can build any kind of UI&#xA;for it, and you as the user can subscribe to relays that tend to have&#xA;information you care about... in a sense it&#39;s kind of like subreddits but not&#xA;quite as organized (yet).... but unlike reddit, there&#39;s no central authority.&#xA;The closest it gets is that a relay may go down or someone may choose to close&#xA;one - no big, you just subscribe to other relays, or don&#39;t subscribe to relays&#xA;you don&#39;t want to see&#xA;&#xA;Another friend of mine likened this to RSS - and it&#39;s also not UNlike that, but&#xA;there&#39;s more to it - the notes are on the relays, there&#39;s encryption throughout&#xA;the protocol, and several other standards called NIPS that make nostr unique,&#xA;and I think bulletproof as we go into a future clouded by big government and&#xA;big tech collaboration.&#xA;&#xA;## Brief Usage&#xA;&#xA;As for a usage pattern with nostr I think you have to combine the ideas of&#xA;reddit, rss, and twitter...&#xA;&#xA;Some apps like coracle.social have nice support for building &#34;feeds&#34; and&#xA;&#34;lists&#34;... lists are combinations of tags (hashtags) and feeds are combinations&#xA;of lists - at least in the coracle world. This means you can use lists of tags&#xA;to discover content and users, create feeds of things you want to see regularly&#xA;(like your RSS feed subscriptions), follow other users (using their pub keys&#xA;see [## Follow Me]), and curate your social media experience in whatever way&#xA;you want.&#xA;&#xA;There&#39;s nostr apps specific to mobile (primal, snort) and desktop&#xA;(coracle.social). They help you set yourself up in different ways and to learn&#xA;more about how I got started then checkout [[getting-started-with-nostr]].&#xA;There&#39;s also content-driven nostr apps, for example [fountain]() is great for&#xA;music and podcasts that are distributed on the nostrverse, which feels like a&#xA;totally different world than when I use coracle to browse my tech or bible&#xA;related feeds.&#xA;&#xA;## End&#xA;&#xA;Nostr is a pretty cool thing taking shape... here&#39;s some related info&#xA;&#xA;[Thank God for nostr podcast](https://tgfb.com/podcasts/thank-god-for-nostr/)&#xA;&#xA;[nostr website](https://nostr.com/)&#xA;&#xA;&gt; Note these posts aren&#39;t available yet but they will show up on my RSS feed when they&#39;re published&#xA;&#xA;My post on [[getting-started-with-nostr]]&#xA;&#xA;My project on [[thoughts-to-nostr]]&#xA;&#xA;...&#xA;&#xA;## Follow Me&#xA;&#xA;![20250705122314_e9fbd0f7.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250705122314_e9fbd0f7.png)&#xA;&#xA;???+ note &#34;my public key&#34;&#xA;&#xA;    npub1q3fsec2vcv99v80ga72dlv90qwkqmuxqcr6mdyumcmpkgudlhrespyurfj&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 TimoStahl/kanboard_plugin_bigboard: A Kanboard that can displa…</title>
    <id>https://pype.dev/thoughts-730/</id>
    <updated>2025-07-02T11:31:34Z</updated>
    <published>2025-07-02T11:31:34Z</published>
    <link href="https://pype.dev/thoughts-730/" rel="alternate" type="text/html"></link>
    <summary type="text">I use kanboard to keep myself focused at home - it&#39;s great because it&#39;s simple enough but does have complex features (th</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://github.com/TimoStahl/kanboard_plugin_bigboard&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://github.com/TimoStahl/kanboard_plugin_bigboard&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - TimoStahl/kanboard_plugin_bigboard: A Kanboard that can display multiple projects&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://github.com/TimoStahl/kanboard_plugin_bigboard&#34;&gt;TimoStahl/kanboard_plugin_bigboard: A Kanboard that can display multiple projects&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I use kanboard to keep myself focused at home - it&#39;s great because it&#39;s simple enough but does have complex features (that I largely don&#39;t need). It&#39;s got a great REST API for integrations and looks decent.&#xA;Well today I discovered &#34;plugins&#34; for it - and those make it even better - tis BigBoard plugin gives me a way better view of my projects, letting me minimize the ones I don&#39;t need to look at &#34;right now&#34; but not using any weird search filters or anything - a simple intuitive &#34;big board&#34; of my projects and their subsequent tasks.&#xA;Very excited to find some more useful plugins!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 { TechDufus } | Blog</title>
    <id>https://pype.dev/thoughts-729/</id>
    <updated>2025-07-02T11:09:01Z</updated>
    <published>2025-07-02T11:09:01Z</published>
    <link href="https://pype.dev/thoughts-729/" rel="alternate" type="text/html"></link>
    <summary type="text">Just came across TechDufus today... love his blog style... it&#39;s beautiful... definitely not gonna potentially rip this o</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://techdufus.com/blog/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://techdufus.com/blog/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - { TechDufus } | Blog&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://techdufus.com/blog/&#34;&gt;{ TechDufus } | Blog&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Just came across TechDufus today... love his blog style... it&#39;s beautiful... definitely not gonna potentially rip this off...&#xA;1. I like the estimated reading time&#xA;2. the tree/ls like view of the posts is super cool&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 { TechDufus } | Building a Talos Kubernetes Homelab with Terra…</title>
    <id>https://pype.dev/thoughts-728/</id>
    <updated>2025-07-02T11:00:52Z</updated>
    <published>2025-07-02T11:00:52Z</published>
    <link href="https://pype.dev/thoughts-728/" rel="alternate" type="text/html"></link>
    <summary type="text">Caught this blog post from Waylon - I added this guy to my RSS feed to star this post. I have tried talos with terraform</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - { TechDufus } | Building a Talos Kubernetes Homelab with Terraform on Proxmox&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://techdufus.com/tech/2025/06/30/building-a-talos-kubernetes-homelab-on-proxmox-with-terraform.html&#34;&gt;{ TechDufus } | Building a Talos Kubernetes Homelab with Terraform on Proxmox&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Caught this blog post from Waylon - I added this guy to my RSS feed to star this post. I have tried talos with terraform and struggled myself... I was new to k8s when I first tried but definitely got NOWHERE with it... I don&#39;t use k8s at home for anything beyond playing, and I see the power in using it but for now I&#39;m sticking with my pretty vanilla compose setup (plus a few just recipes for yeeting config files to a server)&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Also done with second braining</title>
    <id>https://pype.dev/thoughts-727/</id>
    <updated>2025-07-02T10:57:57Z</updated>
    <published>2025-07-02T10:57:57Z</published>
    <link href="https://pype.dev/thoughts-727/" rel="alternate" type="text/html"></link>
    <summary type="text">Oddly enough I am just now really getting into the second brain idea... a zettlekasten has been taking shape in my life</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://derekkedziora.com/notes/2025-06-30-also-done-with-second-braining&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://derekkedziora.com/notes/2025-06-30-also-done-with-second-braining&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Also done with second braining&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://derekkedziora.com/notes/2025-06-30-also-done-with-second-braining&#34;&gt;Also done with second braining&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Oddly enough I am just now really getting into the second brain idea... a zettlekasten has been taking shape in my life through the use of markata and some markdown plugins for neovim... Interesting to see Derek here giving up on the idea... I wonder what my second brain will look like in the next few years... I certainly hope it remain valuable to me and doesn&#39;t become a burden...&#xA;&#xA;One thing in this post I find interesting is that Derek said keeping his second brain might stop him from reading due to the pressure to take notes - but ironically, NOT having a second brain has stopped me from reading because I get paralyzed about where to keep notes, how to use them later, etc... I like the system taking shape in my life, and again I hope it only increases in value as time goes on.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Nostr hex key</title>
    <id>https://pype.dev/nostr-hex-key/</id>
    <updated>2025-07-02T08:43:32Z</updated>
    <published>2025-07-02T08:43:32Z</published>
    <link href="https://pype.dev/nostr-hex-key/" rel="alternate" type="text/html"></link>
    <summary type="text">you can hexify your nostr key when you need to sometimes which I needed to for postiz (link with a thought I&#39;m sure I have on postiz)</summary>
    <content type="text">&#xA;you can hexify your [[nostr]] key when you need to sometimes which I needed to for [[postiz]] (link with a thought I&#39;m sure I have on postiz)&#xA;&#xA;```python&#xA;&#xA;# /// script&#xA;# requires-python = &#34;&gt;=3.8&#34;&#xA;# dependencies = [&#xA;#     &#34;bech32&#34;,&#xA;# ]&#xA;# ///&#xA;#&#xA;import os&#xA;&#xA;import bech32&#xA;&#xA;# Set your nsec... key to NOSTR_PRIVATE_KEY or bake it in...&#xA;nsec_key = os.environ.get(&#34;NOSTR_PRIVATE_KEY&#34;)&#xA;&#xA;&#xA;def decode_nsec(nsec_key):&#xA;    hrp, data = bech32.bech32_decode(nsec_key)&#xA;    if hrp != &#34;nsec&#34;:&#xA;        raise ValueError(&#34;Not a valid nsec key&#34;)&#xA;    decoded = bech32.convertbits(data, 5, 8, False)&#xA;    return bytes(decoded).hex()&#xA;&#xA;&#xA;# Example usage&#xA;raw_hex = decode_nsec(nsec_key)&#xA;print(f&#34;Raw hex private key: {raw_hex}&#34;)&#xA;```&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Github Star Sorter</title>
    <id>https://pype.dev/github-star-sorter/</id>
    <updated>2025-07-01T08:01:31Z</updated>
    <published>2025-07-01T08:01:31Z</published>
    <link href="https://pype.dev/github-star-sorter/" rel="alternate" type="text/html"></link>
    <summary type="text">I wrote a simple app to sort, tag, and create tickets at home for my github stars... As of right now I have 1.3k stars and no convenient way to view them or...</summary>
    <content type="html">&lt;p&gt;I wrote a simple app to sort, tag, and create tickets at home for my github&#xA;stars&amp;hellip; As of right now I have 1.3k stars and no convenient way to view them&#xA;or remember which ones were ones I actually wanted to do something with. This&#xA;simple UI makes scrolling the stars list easy, updates is easy, and the kicker&#xA;for me is Kanboard integration so I can click a button from the stars UI and&#xA;get a ticket made in my kanboard instance so that the work I want to do is in&#xA;front of me and not hidden by Github&amp;rsquo;s shockingly HORRIBLE UI.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250701125804_c41ec692.png&#34; alt=&#34;20250701125804_c41ec692.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday/gh-star-sorter&#34;&gt;GH Link&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>gwl-margarita-tracker</title>
    <id>https://pype.dev/gwl-margarita-tracker/</id>
    <updated>2025-06-30T21:33:28Z</updated>
    <published>2025-06-30T21:33:28Z</published>
    <link href="https://pype.dev/gwl-margarita-tracker/" rel="alternate" type="text/html"></link>
    <summary type="text">Track discount on margarita refills over the lifetime of this mug</summary>
    <content type="html">&lt;p&gt;Track discount on margarita refills over the lifetime of this mug&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday/gwl-margarita-tracker&#34;&gt;github repo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250701131846_9a61924b.png&#34; alt=&#34;20250701131846_9a61924b.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Great Wolf Lodge</title>
    <id>https://pype.dev/great-wolf-lodge/</id>
    <updated>2025-06-30T21:31:13Z</updated>
    <published>2025-06-30T21:31:13Z</published>
    <link href="https://pype.dev/great-wolf-lodge/" rel="alternate" type="text/html"></link>
    <summary type="text">walkie-talkies!</summary>
    <content type="text">&#xA;# Trips&#xA;&#xA;## 2026 (Dells)&#xA;&#xA;- walkie-talkies!&#xA;&#xA;### Notes&#xA;&#xA;- The Lodge&#39;s sheets were real scratchy - bring your own sheets and pillows&#xA;  - The room we had in the condo had a King bed, we brought Queen sheets :face_palm:&#xA;&#xA;---&#xA;&#xA;## 2025 (Gurnee)&#xA;&#xA;We returned to Gurnee in June of 2025 (so a summer trip) and had a great time.&#xA;&#xA;We experienced the bigger slides on this grip - and they were a blast. We had&#xA;our oldest sneakly get up on her toes when the door guard measured her height&#xA;and we got her JUST up to 48&#34; for the GREEN bracelet which got us on the double&#xA;whirlwind amongst other super fun slides.&#xA;&#xA;This trip I also got the idea for the [[gwl-margarita-tracker]]!&#xA;&#xA;???+ danger &#34;Magiquest Scam&#34;&#xA;&#xA;    If you buy the wand or a topper it seems like that includes a &#34;session&#34; of&#xA;    the game. We brought our wands and toppers this time, and when we went to play&#xA;    the game said our time expired... Turns out you have to pay $15 for another&#xA;    session of playing even if you already bought all the gear!&#xA;&#xA;### Tips&#xA;&#xA;- I brought my lulu shirts but the wristband snags them and my sweatshirts like&#xA;  crazy - bring athletic hoodies and regular cotton t-shirts to avoid the snag&#xA;- There is a Culver&#39;s literally down the street, you could walk... so if you&#39;&#xA;  re starving at night and don&#39;t want to spend $29 on a personal pizza, you can&#xA;  take a quick hike for a butter burger&#xA;- Bringing a crock pot with pulled pork worked great for meals&#xA;- Mini fridge is available for lunch meats and cheeses&#xA;- There&#39;s an ice machine in the hallway if you want to keep anything on ice&#xA;- We brought a griddle but it was brand new - got some smoke, will break in next time&#xA;&#xA;---&#xA;&#xA;## 2025 (Dells)&#xA;&#xA;After experiencing the Gurnee location we were excited to checkout the Dells as well.&#xA;&#xA;The waterpark is organized a little differently - and the only real&#xA;observations are that the wave pool is a lot bigger than Gurnee&#39;s but the lazy&#xA;river is a lot smaller...&#xA;&#xA;We stayed in a condo during this trip, which was great with a kitchenette -&#xA;buying groceries and just doing sandwiches or pasta for meals saved a boat load&#xA;of money, probably enough to nearly off-set the cost of the condo over a&#xA;regular room.&#xA;&#xA;At this location the Magiquest setup is unique - it&#39;s in its own building,&#xA;which is setup as like a 4 story high jungle gym. It&#39;s very cool, and the kids&#xA;can run around to play the magiquest game, or ditch the wands and just run&#xA;around and slide down slides and stuff... our kids had a blast at 3 and 5 years&#xA;old.&#xA;&#xA;---&#xA;&#xA;## 2023 (Gurnee)&#xA;&#xA;We went to GWL in Gurnee in 2023 for the first time, and we didn&#39;t know exactly&#xA;what to expect. We are also are not very experienced travelers, so packing for&#xA;a trip (particularly in the food department) is tough... which isn&#39;t a huge&#xA;deal - it just means we spent a LOT on food at the resort...&#xA;&#xA;For this trip our kids were 2 and 4 and it was still a valuable trip. The&#xA;waterpark is organized in such a way that the littler kids have their own space&#xA;away from the bigger ones, it&#39;s very safe, and the slides and stuff even for&#xA;the littles are great.&#xA;&#xA;I&#39;m writing this in July after our 3rd trip, so I don&#39;t have all the memories&#xA;from this first one, but here&#39;s a short list of things if traveling with kids&#xA;say younger than 5:&#xA;&#xA;1. water shoes would be a good purchase for the kids if they&#39;re going to be in the littles area. The ground there for some reason is murder on the feet (on a future visit we realzied the rest of the waterpark&#39;s ground isn&#39;t so bad... not sure why the kiddo&#39;s pool was so rough)&#xA;2. you don&#39;t need to bring towels&#xA;3. you don&#39;t need nearly as many clothes as you think, just underwear and enough swimming gear... no one is dressed in much more than swimwear and a cover-up like a t-shirt even at the restaurants pretty much&#xA;&#xA;---&#xA;&#xA;# Packing List&#xA;&#xA;## Pack&#xA;&#xA;- Coffee + mushroom stuff&#xA;- Espresso + grinder (or ground beans)&#xA;- Fairlife milk&#xA;- Sheets (the Lodge&#39;s sheets were real scratchy)&#xA;- Pillows&#xA;- Sleeping Bags&#xA;&#xA;## Buy (Aldi)&#xA;&#xA;### Breakfast&#xA;&#xA;- Cereal + milk&#xA;- Fruit&#xA;- Frozen waffles (if toaster)&#xA;&#xA;### Snacks&#xA;&#xA;- &#34;Functional&#34; protein bars&#xA;- clementines/apples&#xA;&#xA;### Lunch&#xA;&#xA;- Deli sandwiches&#xA;- Chips&#xA;&#xA;### Dinner&#xA;&#xA;- Mac and Cheese + chicken nuggets&#xA;- Pizza&#xA;- Veggies&#xA;&#xA;### Misc&#xA;&#xA;- ziploc&#xA;- napkins/paper towels&#xA;- ketchup&#xA;- mustard/mayo&#xA;- drinks&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Switching pip to uv in a Dockerized Flask / Django App — Nick …</title>
    <id>https://pype.dev/thoughts-722/</id>
    <updated>2025-06-27T11:18:16Z</updated>
    <published>2025-06-27T11:18:16Z</published>
    <link href="https://pype.dev/thoughts-722/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s nice to see uv gaining popularity in so many places - and replacing vanilla pip with uv in containerized environmen</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://nickjanetakis.com/blog/switching-pip-to-uv-in-a-dockerized-flask-or-django-app&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://nickjanetakis.com/blog/switching-pip-to-uv-in-a-dockerized-flask-or-django-app&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Switching pip to uv in a Dockerized Flask / Django App — Nick Janetakis&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://nickjanetakis.com/blog/switching-pip-to-uv-in-a-dockerized-flask-or-django-app&#34;&gt;Switching pip to uv in a Dockerized Flask / Django App — Nick Janetakis&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;It&#39;s nice to see uv gaining popularity in so many places - and replacing vanilla pip with uv in containerized environments seems great due if for no other reason than the time you&#39;ll save in CI... A few years ago I refactored a disjointed container build process to use uv instead of pip, and due to the design of the build pipelines we went from 10-15 minute builds to 2-3 minutes... &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Containers are available in public beta for simple, global, an…</title>
    <id>https://pype.dev/thoughts-721/</id>
    <updated>2025-06-26T11:20:11Z</updated>
    <published>2025-06-26T11:20:11Z</published>
    <link href="https://pype.dev/thoughts-721/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been learning a lot just about basic web-development as I work on my blog. I&#39;m not actively learning the ins and ou</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://blog.cloudflare.com/containers-are-available-in-public-beta-for-simple-global-and-programmable/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://blog.cloudflare.com/containers-are-available-in-public-beta-for-simple-global-and-programmable/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Containers are available in public beta for simple, global, and programmable compute&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://blog.cloudflare.com/containers-are-available-in-public-beta-for-simple-global-and-programmable/&#34;&gt;Containers are available in public beta for simple, global, and programmable compute&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;ve been learning a lot just about basic web-development as I work on my blog. I&#39;m not actively learning the ins and outs to be honest - AI is both helpful and harmful in this regard for me I think - but in that knowledge-gathering and experience-gaining I&#39;ve gotten my head around deploying a static site to a simple web server and how that&#39;s different than deploying a simple container with a backend. &#xA;I use cloudflare for my DNS already, and I have an app or 2 on fly - but depending on the IaC support for container deployment that are now available with cloudflare I may look to switch...&#xA;&#xA;I suppose I should do a little PoC first, and so this thought will be a reminder to take a stab at it&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Genesis 1 and Its ANE Polemic, Part 2 - Dr. Michael Heiser</title>
    <id>https://pype.dev/thoughts-720/</id>
    <updated>2025-06-25T11:29:10Z</updated>
    <published>2025-06-25T11:29:10Z</published>
    <link href="https://pype.dev/thoughts-720/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m preparing for a conversation on Genesis 1 this morning, and so I of course wanted to read through a few of Mike&#39;s ol</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://drmsh.com/genesis-1-and-its-ane-polemic-part-2/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://drmsh.com/genesis-1-and-its-ane-polemic-part-2/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Genesis 1 and Its ANE Polemic, Part 2 - Dr. Michael Heiser&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://drmsh.com/genesis-1-and-its-ane-polemic-part-2/&#34;&gt;Genesis 1 and Its ANE Polemic, Part 2 - Dr. Michael Heiser&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;m preparing for a conversation on Genesis 1 this morning, and so I of course wanted to read through a few of Mike&#39;s old posts... I&#39;m going to write a longer post about the impact Mike had on my life... he died in February of 2023 of pancreatic cancer and everytime I visit his site I get a little teary eyed...&#xA;&#xA;The guy brought SO MUCH clarity to me regarding the Bible and some of the silly ideas I had about i growing up (and indeed MOST of the people in America that I have ever talked to about the Bible also have).&#xA;&#xA;So this thought is a reminder to me to not forget to write more about him - Jesus touched so many people through Mike&#39;s ministry of studying the Bible for what it is, not what the arrogant Western mind wants it to be.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Notes – 06:11 Sun 22 Jun 2025 – David Bushell – Web Dev (UK)</title>
    <id>https://pype.dev/thoughts-719/</id>
    <updated>2025-06-25T11:04:29Z</updated>
    <published>2025-06-25T11:04:29Z</published>
    <link href="https://pype.dev/thoughts-719/" rel="alternate" type="text/html"></link>
    <summary type="text">I see that most of the tech world, at least in public, leans left... which is fine. I think politically I&#39;d have leaned</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://dbushell.com/notes/2025-06-22T06:11Z/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://dbushell.com/notes/2025-06-22T06:11Z/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Notes – 06:11 Sun 22 Jun 2025 – David Bushell – Web Dev (UK)&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://dbushell.com/notes/2025-06-22T06:11Z/&#34;&gt;Notes – 06:11 Sun 22 Jun 2025 – David Bushell – Web Dev (UK)&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I see that most of the tech world, at least in public, leans left... which is fine. I think politically I&#39;d have leaned left in the 90s/00s if I had been old enough to pay attention and understand.&#xA;&#xA;But the sold-out hatred for Elon and Trump is wild to me... Nothing makes the reality of propganda in 2025 more clear to me than the manufactured hate of 2 guys who the Left USED to love... I&#39;m not like all in on either guy - but the politically driven hatred which has led to physical violence against both of these guys is insane.... &#xA;&#xA;Dave&#39;s ending thought here &#34;We&#39;re entering a Misinformation Age&#34; is funny to me... Misinformation has been around forever - the CIA has admitted to an absolutely hilarious amount of things that over the years the government (US Government) had denied and the news had been complicit in covering up - right up until it was just undeniable and finally &#34;ok ya everyone we did do that mind control experiment - BUT WE&#39;LL NEVER DO IT AGAIN&#34;... &#34;ok ya everyone we did know the Taliban has been on the receiving end of millions of US dollars every year but don&#39;t worry about it&#34;... But for everyone to NOW get all up in arms over 2 guys the news will not shut up about, is just comically out of touch with history to me...&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Traefik and gRPC for Temporal at home</title>
    <id>https://pype.dev/traefik-and-grpc-for-temporal-at-home/</id>
    <updated>2025-06-24T20:55:42Z</updated>
    <published>2025-06-24T20:55:42Z</published>
    <link href="https://pype.dev/traefik-and-grpc-for-temporal-at-home/" rel="alternate" type="text/html"></link>
    <summary type="text">Someday I will potentially write up some stuff about temporal but for now it&#39;s a workflow orchestrator that I&#39;m interested in and I wanted to PoC it in my...</summary>
    <content type="text">&#xA;# Temporal Networking Woes&#xA;&#xA;Someday I will potentially write up some stuff about [[temporal]] but for now&#xA;it&#39;s a workflow orchestrator that I&#39;m interested in and I wanted to PoC it in&#xA;my homelab by replacing a simple cron job to build my blog with a temporal&#xA;workflow and activity. I was IMMEDIATELY thwarted by a networking error that&#xA;feels crazy to me but maybe won&#39;t be to others... so enjoy the problem and if&#xA;you&#39;re here from a Google search, I hope it&#39;s helpful.&#xA;&#xA;Getting started with Temporal I wanted to have the server and associated&#xA;components on my server, but I expected to be running workflows and workers&#xA;on another computer. &#xA;&#xA;For most of my apps I slap some [[traefik]] labels on&#xA;and we&#39;re good to go. But I got a wild set of errors trying to run a worker on&#xA;my desktop and connect it to the temporal server on my server over https.... it&#xA;ended up being because I needed to setup a special protocol in traefik for the&#xA;reverse proxy to appropriately proxy the grpc call.&#xA;&#xA;So I had a normal set of labels on my temporal container, went to run a worker&#xA;and got this nasty work of art&#xA;&#xA;```&#xA;RuntimeError: Failed client connect: `get_system_info` call error after connection: Status { code: Internal, message: &#34;protocol error: received message with invalid compression flag: 73 (valid flags are 0 and 1) while receiving response with status: 500 Internal Server Error&#34;, metadata: MetadataMap { headers: {&#34;content-type&#34;: &#34;text/plain; charset=utf-8&#34;, &#34;content-length&#34;: &#34;21&#34;, &#34;date&#34;: &#34;Wed, 25 Jun 2025 02:12:44 GMT&#34;} }, source: None }&#xA;```&#xA;&#xA;Thank God I had kind of seen this at work one other time in my life, and we&#xA;never fixed the issue there but I knew what it was... we had traefik acting as&#xA;a load balancer (as do I at home) and the traefik load balancer was &#34;balancing&#xA;traffic using https&#34;... no, I do not really know what I&#39;m saying. But what I do&#xA;know is that in order for the Temporal Server and Worker to communicate,&#xA;traefik has to properly route the traffic for gRPC instead of https.&#xA;&#xA;!!! warning &#34;&#34;&#xA;    I can&#39;t stress enough how little I know about the difference between https and grpc or why the load balancer cares... there&#39;s clearly something in the networking stack that is extremely relevant here&#xA;&#xA;But the fix is NOT hard thankfully, and it&#39;s even on [traefik&#39;s website](https://doc.traefik.io/traefik/user-guides/grpc/#traefik-configuration) - the warning annotation there tells you what you need - which is one more traefik label...&#xA;&#xA;```yaml&#xA;traefik.http.services.&lt;my-service-name&gt;.loadbalancer.server.scheme=h2c&#xA;```&#xA;&#xA;So after setting the loadbalancer.server.scheme to `h2c` I could run my worker just fine!&#xA;&#xA;![20250625021838_4d7104c2.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250625021838_4d7104c2.png)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Copilot Instructions</title>
    <id>https://pype.dev/thoughts-713/</id>
    <updated>2025-06-23T11:14:02Z</updated>
    <published>2025-06-23T11:14:02Z</published>
    <link href="https://pype.dev/thoughts-713/" rel="alternate" type="text/html"></link>
    <summary type="text">I have tried a few different cursorrules/windsurfrules with windsurf, but I didn&#39;t even know you could give copilot cust</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.copilotinstructions.xyz/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.copilotinstructions.xyz/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Copilot Instructions&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.copilotinstructions.xyz/&#34;&gt;Copilot Instructions&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I have tried a few different cursorrules/windsurfrules with windsurf, but I didn&#39;t even know you could give copilot custom instructions. I see python + fastapi on here, which I build with frequently at home, so I&#39;ll look forward to seeing if the results are any better with a custom prompt using copilot&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Nextcloud PHP Opache Memory Consumption</title>
    <id>https://pype.dev/nextcloud-php-opache-memory-consumption/</id>
    <updated>2025-06-23T08:46:20Z</updated>
    <published>2025-06-23T08:46:20Z</published>
    <link href="https://pype.dev/nextcloud-php-opache-memory-consumption/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I was combing through Nextcloud, just taking a gander at the apps, updates, etc.</summary>
    <content type="html">&lt;h1 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Today I was combing through Nextcloud, just taking a gander at the apps, updates, etc.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The OPcache buffer is nearly full. To assure that all scripts can be hold in&#xA;cache, it is recommended to apply &amp;ldquo;opcache.memory_consumption&amp;rdquo; to your PHP&#xA;configuration with a value higher than &amp;ldquo;128&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So I know &lt;em&gt;nothing&lt;/em&gt; about &lt;code&gt;php&lt;/code&gt; and I had no idea where to set this&amp;hellip; Also I&amp;rsquo;m&#xA;running Nextcloud in a container so any updates will be blown away when the&#xA;container is removed (say next time I update Nextcloud)&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;After a little duckduckgoing I came across &lt;a href=&#34;https://www.reddit.com/r/NextCloud/comments/1gpxl5b/need_help_with_php_opcache_module_warning/&#34;&gt;this reddit&#xA;post&lt;/a&gt;&#xA;where a guy had the same issue&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;The long and short of it is that on &lt;em&gt;single instance nextcloud deployments&lt;/em&gt;&#xA;this php memory consumption value can be too low for Nextcloud to keep up with&#xA;the demand&amp;hellip; You can see in the message they just recommend upping the value.&lt;/p&gt;&#xA;&lt;p&gt;So I had to think about how to persist the change and have it take effect now&#xA;ideally without affecting any users too much&amp;hellip; So here&amp;rsquo;s what I did - made the&#xA;change in 2 places:&lt;/p&gt;&#xA;&lt;h2 id=&#34;in-the-container&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;In the container&lt;/span&gt; &lt;a href=&#34;#in-the-container&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I exec&amp;rsquo;d into the container and used this handy &lt;code&gt;sed&lt;/code&gt; command &lt;code&gt;sed -i &#39;s/^opcache\.memory_consumption\s*=\s*128$/opcache.memory_consumption=256/&#39; /usr/local/etc/php/conf.d/opcache-recommended.ini&lt;/code&gt; to update the value in the&#xA;running container - and I guess &lt;code&gt;php&lt;/code&gt; maybe is loaded up dynamically or&#xA;something? but the warning did go away&amp;hellip;.&lt;/p&gt;&#xA;&lt;p&gt;So how to persist this change when the filesystem is blown away when the&#xA;container is updated?&lt;/p&gt;&#xA;&lt;h2 id=&#34;in-the-config&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;In the config&lt;/span&gt; &lt;a href=&#34;#in-the-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I set the env var &lt;code&gt;PHP_OPCACHE_MEMORY_CONSUMPTION&lt;/code&gt; in the &lt;code&gt;docker-compose.yml&lt;/code&gt;&#xA;file to 256 and voila&amp;hellip; the change should persist&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 You asked, we built it: Firefox tab groups are here</title>
    <id>https://pype.dev/thoughts-712/</id>
    <updated>2025-06-22T13:18:49Z</updated>
    <published>2025-06-22T13:18:49Z</published>
    <link href="https://pype.dev/thoughts-712/" rel="alternate" type="text/html"></link>
    <summary type="text">I stumbled into tab groups today when rearranging my tabs in firefox while bouncing between a few different things this</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://blog.mozilla.org/en/firefox/tab-groups-community/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://blog.mozilla.org/en/firefox/tab-groups-community/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - You asked, we built it: Firefox tab groups are here &#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://blog.mozilla.org/en/firefox/tab-groups-community/&#34;&gt;You asked, we built it: Firefox tab groups are here &lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I stumbled into tab groups today when rearranging my tabs in firefox while bouncing between a few different things this morning. I&#39;m thankful this article is from April of this year... otherwise this was a super boomer moment for me... As a heavy tech user I don&#39;t think a lot about my internet browsing experience except from a privacy standpoint. So thinking about automation and comfort within the browser - treating it like a first-class citizen in my development workflow and toolkit, will hopefully help me stay just a little bit more organized&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Quit issueing 200s for 500s</title>
    <id>https://pype.dev/quit-issueing-200s-for-500s/</id>
    <updated>2025-06-22T06:55:21Z</updated>
    <published>2025-06-22T06:55:21Z</published>
    <link href="https://pype.dev/quit-issueing-200s-for-500s/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;h1 id=&#34;stop-this-nonsense&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stop this nonsense&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250622115500_5bd3bc21.png&#34; alt=&#34;20250622115500_5bd3bc21.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Control Your n8n Instance Remotely with Telegram Bot Commands …</title>
    <id>https://pype.dev/thoughts-711/</id>
    <updated>2025-06-22T00:38:53Z</updated>
    <published>2025-06-22T00:38:53Z</published>
    <link href="https://pype.dev/thoughts-711/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m doing a lot of thinking and brainstorming about how I want to run some pipelines I have in my head, at home... thing</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://n8n.io/workflows/4928-control-your-n8n-instance-remotely-with-telegram-bot-commands/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://n8n.io/workflows/4928-control-your-n8n-instance-remotely-with-telegram-bot-commands/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Control Your n8n Instance Remotely with Telegram Bot Commands | n8n workflow template&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://n8n.io/workflows/4928-control-your-n8n-instance-remotely-with-telegram-bot-commands/&#34;&gt;Control Your n8n Instance Remotely with Telegram Bot Commands | n8n workflow template&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;m doing a lot of thinking and brainstorming about how I want to run some pipelines I have in my head, at home... things like image gen for blog posts, posting to various social media, click to generate qr codes and send emails, etc... things that require a lot of integration. &#xA;&#xA;I tried n8n a while ago with 1 use case, it didn&#39;t work but times have changed and whatever was wrong for that use case is now just fixed with a few updates... so I&#39;m strongly considering n8n as a platform I build my workflows on, and using telegram as a simple entry-point into workflow execution is kind of intriguing... imagine sending a message to telegram to generate an image with SD based on a picture you took with our phone, maybe do something else with that image (turn it into a qr code or something), and then email it? all with a text message and pic? that sounds pretty cool... not sure what I&#34;ll have spun up but I am excited to be making some progress on the automation ideas&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 matduggan.com/what-would-a-kubernetes-2-0-look-like/</title>
    <id>https://pype.dev/thoughts-710/</id>
    <updated>2025-06-20T11:53:33Z</updated>
    <published>2025-06-20T11:53:33Z</published>
    <link href="https://pype.dev/thoughts-710/" rel="alternate" type="text/html"></link>
    <summary type="text">This article was longer than I had time to really consume but a heading caught my eye that I wanted to agree with - the</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://matduggan.com/what-would-a-kubernetes-2-0-look-like/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://matduggan.com/what-would-a-kubernetes-2-0-look-like/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - matduggan.com/what-would-a-kubernetes-2-0-look-like/&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://matduggan.com/what-would-a-kubernetes-2-0-look-like/&#34;&gt;matduggan.com/what-would-a-kubernetes-2-0-look-like/&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;This article was longer than I had time to really consume but a heading caught my eye that I wanted to agree with - the author says k8s 2.0 may consider HCL instead of YAML. And as a recent terraform / open-tofu adopter I gotta say I would be ALL FOR THIS&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Thinking In Diagrams</title>
    <id>https://pype.dev/thinking-in-diagrams/</id>
    <updated>2025-06-20T06:55:31Z</updated>
    <published>2025-06-20T06:55:31Z</published>
    <link href="https://pype.dev/thinking-in-diagrams/" rel="alternate" type="text/html"></link>
    <summary type="text">Something I didn&#39;t appreciate earlier on in my career (and I&#39;m only 8 as far as the age of that career goes anyways) was thinking through problems with...</summary>
    <content type="text">&#xA;# Intro&#xA;&#xA;Something I didn&#39;t appreciate earlier on in my career (and I&#39;m only 8 as far as&#xA;the age of that career goes anyways) was thinking through problems with&#xA;diagrams... I&#39;ve often approached a problem with code first, and immediately&#xA;started implementing a solution. There&#39;s nothing actually wrong with that especially when considering:&#xA;&#xA;1. people think differently&#xA;2. some people think with their fingers&#xA;3. recognizing that the first thing you build should be thrown away should give you freedom to &#34;just start&#34;&#xA;&#xA;Now with that said, let&#39;s chat about how awesome diagrams are though...&#xA;&#xA;1. they put context in front of you without details&#xA;2. you can express many more components of a system in a consumable way when compared to code&#xA;3. diagrams help prioritize work and bubble up maybe unforseen dependencies&#xA;4. they force you to wireframe before getting lost in the details&#xA;&#xA;## Wireframing&#xA;&#xA;One of my biggest issue when I &#34;just start coding&#34; is not having a direction...&#xA;I can put a few place holders `def this:` `def that:` in a few python modules,&#xA;but without having every place holder in front of me it is hard to keep them&#xA;straight, know the order or dependencies, etc.&#xA;&#xA;Diagrams aren&#39;t beholden to a text file or series of them, and you can fit much&#xA;more on your screen because you have all the X-Y available to you instead of&#xA;the height of your monitor times your formatted lined length (usually 120 for&#xA;me).&#xA;&#xA;Diagrams also make it easy to spew out onto a page the different components you&#xA;need for a solution, without committing to an order (something that I cannot&#xA;express well in scripts)&#xA;&#xA;## A Plan&#xA;&#xA;Diagramming with purpose can get you to the place of having almost a&#xA;paint-by-number experience building your app/system/etc. Beecause you separate&#xA;the implemetation from the design and when you implement BASED on a design&#xA;rather than implement to DISCOVER a design you will be more efficient and in my&#xA;experience I&#39;ve improved my ability to forsee issues that I wouldn&#39;t have seen,&#xA;or have historically missed, by putting the design down in front of me, the&#xA;details of any integrations, etc. before starting to &#34;just code&#34;.&#xA;&#xA;## Good Enough&#xA;&#xA;A final note about diagrams for right now is that they&#39;re easy to leave as&#xA;&#34;good enough&#34;. The point was to get a guide for solving a problem.&#xA;&#xA;Diagrams don&#39;t have to be picture perfect, even for documentation&#39;s sake. They&#xA;can even remain somewhat unfinished (permitted you don&#39;t get yourself into a&#xA;bind of treating diagrams as docs that you didn&#39;t clean up)&#xA;&#xA;Here&#39;s an example of what I mean - I&#39;m working on a simple workflow to take [my-thoughts](/my-thoughts) and post them to [[nostr]]. I started with a diagram like this...&#xA;&#xA;![20250622112223_f1838d9b.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250622112223_f1838d9b.png)&#xA;&#xA;&gt; In parallel I&#39;m working on posting my blog to other social media - this small&#xA;&gt; workflow is apart of a larger initiative I&#39;m working on at home&#xA;&#xA;AS you can see this diagram isn&#39;t super detailed or pretty. But what it does it&#xA;help me see the high level points of bringing my published thoughts to nostr as&#xA;posts.&#xA;&#xA;After I have the simple steps, I&#39;ve started diagramming out more details of each step:&#xA;&#xA;![20250622112415_f18663e3.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250622112415_f18663e3.png)&#xA;&#xA;The diagram is easy to put notes on, add some color to for problems not yet solved, etc.&#xA;&#xA;And then with this diagram in front of me, it&#39;s easy to begin building&#xA;small-scoped components that will be assembled to my larger system, but without&#xA;the pressure of constructing every part of the system at once&#xA;&#xA;# Fin&#xA;&#xA;Diagrams help me break up a problem into manageable chunks so that I can put&#xA;the things I need later on the back-burner and can focus on one achievable&#xA;thing at a time.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>What Are The Rewards In Heaven?</title>
    <id>https://pype.dev/what-are-the-rewards-in-heaven/</id>
    <updated>2025-06-20T06:23:05Z</updated>
    <published>2025-06-20T06:23:05Z</published>
    <link href="https://pype.dev/what-are-the-rewards-in-heaven/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across an article on the Bible Project on what it means to &#34;store up treasures in Heaven&#34; and it brought some clarity to the meaning of this teaching...</summary>
    <content type="html">&lt;h1 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I came across an article on the Bible Project on what it means to &amp;ldquo;store up&#xA;treasures in Heaven&amp;rdquo; and it brought some clarity to the meaning of this&#xA;teaching for me&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been walking with Jesus for around 2 decades now, and he&amp;rsquo;s taught me a lot&#xA;about life, love, and grace. I still feel the battle inside myself when faced&#xA;with a decision where I can act more or less in line with Jesus&amp;rsquo; desire and&#xA;will or I can make a choice that&amp;rsquo;s about me&amp;hellip; Anytime I&amp;rsquo;m able to choose the&#xA;path I know is his, then praise the Lord and he&amp;rsquo;s been faithful to change me&#xA;more and more into his image and likeness.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr-the-treasures&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TLDR - The Treasures&lt;/span&gt; &lt;a href=&#34;#tldr-the-treasures&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The article goes on to argue that the rewards we are promised in Heaven, the&#xA;ones we are supposed to &amp;ldquo;store up&amp;rdquo;, are the rewards of living like Jesus today.&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;p&gt;The reward becomes greater as our will is forged to align with the Lord. As&#xA;we grow in holiness, making holy decisions and living a holy life &lt;em&gt;becomes&lt;/em&gt; the&#xA;reward we store up for heaven&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;The idea that the perspective of the rewards change as we change is actually&#xA;not that ground breaking to me&amp;hellip; Growth leads to perspective changes in other&#xA;aspects of life.&lt;/p&gt;&#xA;&lt;p&gt;Say for my work, as I get more experience and learn what kinds of problems&#xA;&lt;em&gt;tend&lt;/em&gt; to arise, I can appreciate troubleshooting tactics I may have not&#xA;considered before, approach problems with a different point of view, etc. And&#xA;it&amp;rsquo;s in this growth that I can appreciate things like searching deep in logs&#xA;for 1 piece of info, or deciding to re-run something that takes hours and&#xA;appreciating that it&amp;rsquo;s the best thing to do when I&amp;rsquo;d rather try to slam changes&#xA;in that &lt;em&gt;might&lt;/em&gt; work or might make it worse&amp;hellip; The growth brings maturity and&#xA;deeper understanding to the problems.&lt;/p&gt;&#xA;&lt;p&gt;How about with children? As they grow and mature they learn more about the&#xA;world&amp;hellip; They appreciate things they didn&amp;rsquo;t like before - like having been&#xA;disciplined as a child or being taught a hard lesson that pays off down the&#xA;line. Again, the growth brings a perspective change.&lt;/p&gt;&#xA;&lt;p&gt;And so as I journey in my faith this quote from the article resonated with me&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;p&gt;Jesus’ exhortation to store up for yourselves treasures in Heaven is an invitation to taste, right now, what life will be like in the renewed world later on.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Jesus brought Heaven back to earth, and invites his chosen people to live in Heaven today regardless of where we live on earth.&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;p&gt;As we mature in the Lord, the things of God become more valuable to us, and these rewards not only become more apparent, but they become easier to appreciate&amp;hellip; ie. we store them up as we experience Heaven on earth&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;link&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Link&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://bibleproject.com/articles/what-are-rewards-heaven-bible&#34;&gt;link to article&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 pypeaday/whose-turn-is-it: Simple uv webapp to determine order…</title>
    <id>https://pype.dev/thoughts-709/</id>
    <updated>2025-06-20T01:23:26Z</updated>
    <published>2025-06-20T01:23:26Z</published>
    <link href="https://pype.dev/thoughts-709/" rel="alternate" type="text/html"></link>
    <summary type="text">We pray together as a family every night, but every single flipping night my daughter&#39;s fight about the order we go in..</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://github.com/pypeaday/whose-turn-is-it&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://github.com/pypeaday/whose-turn-is-it&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - pypeaday/whose-turn-is-it: Simple uv webapp to determine order fo players for an event&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://github.com/pypeaday/whose-turn-is-it&#34;&gt;pypeaday/whose-turn-is-it: Simple uv webapp to determine order fo players for an event&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;We pray together as a family every night, but every single flipping night my daughter&#39;s fight about the order we go in... well, NO MORE!&#xA;&#xA;I built a simple uv fastapi app that randomly sorts a list from an environment var `PLAYERS` and presents it in the web page at `/generate`.&#xA;&#xA;Super easy `uv run` at home...&#xA;&#xA;I love that with enough knowledge, or the right kind of knowledge, you can build like anything you want!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Microsoft planning thousands of job cuts aimed at salespeople,…</title>
    <id>https://pype.dev/thoughts-707/</id>
    <updated>2025-06-19T10:51:59Z</updated>
    <published>2025-06-19T10:51:59Z</published>
    <link href="https://pype.dev/thoughts-707/" rel="alternate" type="text/html"></link>
    <summary type="text">more cuts for the sake of AI investment... this is getting out of hand. I&#39;m thankful that I don&#39;t work in a field that w</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.reuters.com/business/world-at-work/microsoft-planning-thousands-job-cuts-aimed-salespeople-bloomberg-news-reports-2025-06-18/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.reuters.com/business/world-at-work/microsoft-planning-thousands-job-cuts-aimed-salespeople-bloomberg-news-reports-2025-06-18/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Microsoft planning thousands of job cuts aimed at salespeople, Bloomberg News reports | Reuters&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.reuters.com/business/world-at-work/microsoft-planning-thousands-job-cuts-aimed-salespeople-bloomberg-news-reports-2025-06-18/&#34;&gt;Microsoft planning thousands of job cuts aimed at salespeople, Bloomberg News reports | Reuters&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;more cuts for the sake of AI investment... this is getting out of hand. I&#39;m thankful that I don&#39;t work in a field that will be overtaken by AI in the sense of losing my job (I mean we&#39;re like 47 months into AI will end dev jobs tomorrow) - of course I have to learn about the tools and LLMs have increased my output in many ways. If I was fearful of losing my job, for example being in Sales at Microsoft, I would be using every on-the-clock hour to find a new job...&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 microsandbox/microsandbox: Self-Hosted Plaform for Secure Exec…</title>
    <id>https://pype.dev/thoughts-706/</id>
    <updated>2025-06-19T10:46:03Z</updated>
    <published>2025-06-19T10:46:03Z</published>
    <link href="https://pype.dev/thoughts-706/" rel="alternate" type="text/html"></link>
    <summary type="text">There&#39;s a ton of AI related tools I want to play with, and there are several I run in docker pretty willy nilly. However</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://github.com/microsandbox/microsandbox&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://github.com/microsandbox/microsandbox&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - microsandbox/microsandbox: Self-Hosted Plaform for Secure Execution of Untrusted User/AI Code&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://github.com/microsandbox/microsandbox&#34;&gt;microsandbox/microsandbox: Self-Hosted Plaform for Secure Execution of Untrusted User/AI Code&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;There&#39;s a ton of AI related tools I want to play with, and there are several I run in docker pretty willy nilly. However, the MCP server stuff as of late has felt fast and borderline reckless so I like seeing a project seeking to make it easy to sandbox code... I get blocked by this idea cause I&#39;ll want to setup a VM on a VLAN or something before just spinning up an mcp server idk if I should trust - but if I can do it with a library then that&#39;s amazing!&#xA;&#xA;We just have to hope the motivation to try this stays strong enough to get started&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Homelab Youtube Podcasts to AudioBookShelf Pipeline</title>
    <id>https://pype.dev/homelab-youtube-podcasts-to-audiobookshelf-pipeline/</id>
    <updated>2025-06-18T13:53:12Z</updated>
    <published>2025-06-18T13:53:12Z</published>
    <link href="https://pype.dev/homelab-youtube-podcasts-to-audiobookshelf-pipeline/" rel="alternate" type="text/html"></link>
    <summary type="text">I wrote about using homelab-pinchflat for at-home mashup creation and a song flow for church. But I use it for more than, that and here&#39;s another prime use case</summary>
    <content type="text">&#xA;I wrote about using [[homelab-pinchflat]] for at-home mashup creation and a song flow&#xA;for church. But I use it for more than, that and here&#39;s another prime use case&#xA;&#xA;There are podcasts on YouTube I want to follow - The Standup with Prime, or&#xA;Shawn Ryan&#39;s show. Basically I use pinchflat to download the audio and serve up&#xA;those files in ABS (audiobookshelf)&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 neverjust</title>
    <id>https://pype.dev/thoughts-705/</id>
    <updated>2025-06-18T10:33:49Z</updated>
    <published>2025-06-18T10:33:49Z</published>
    <link href="https://pype.dev/thoughts-705/" rel="alternate" type="text/html"></link>
    <summary type="text">Your &#34;just&#34; comes from seeing only the surface of the problem. Like an iceberg, what&#39;s visible is just a fraction This</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.neverjust.net/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.neverjust.net/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - neverjust&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.neverjust.net/&#34;&gt;neverjust&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Your &#34;just&#34; comes from seeing only the surface of the problem. Like an iceberg, what&#39;s visible is just a fraction&#xA;&#xA;This is a good reminder when discussing issues within a team or with your buddies... trivializing someone else&#39;s problem, in tech or out, it not a good look&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflecting on BP Article on James - Faith and Works</title>
    <id>https://pype.dev/reflecting-on-bp-article-on-james-faith-and-works/</id>
    <updated>2025-06-18T06:00:15Z</updated>
    <published>2025-06-18T06:00:15Z</published>
    <link href="https://pype.dev/reflecting-on-bp-article-on-james-faith-and-works/" rel="alternate" type="text/html"></link>
    <summary type="text">This started as one of my-thoughts and got long enough to warrant putting right in the blog</summary>
    <content type="text">&#xA;# Intro&#xA;&#xA;&gt; This started as one of [[my-thoughts]] and got long enough to warrant putting right in the blog&#xA;&#xA;Faith and works is a common point of conversation for Christians who like&#xA;debating things, and I&#39;m at the point in my life where I&#39;m kind of over the&#xA;debates and the simplistic thinking.... but this morning I saw this article and&#xA;wanted to give it a read&#xA;&#xA;## Article&#xA;&#xA;[Article Link](https://bibleproject.com/articles/what-does-faith-without-works-dead-mean-james-214-26) - 11 minute read&#xA;&#xA;One of the best pieces from the article is:&#xA;&#xA;!!! info &#34;&#34;&#xA;    James illuminates and clarifies our understanding of faith by bypassing&#xA;    questions about whether one has (or does not have) faith and focusing instead&#xA;    on whether a person’s faith is living or dead.&#xA;&#xA;## Reflection&#xA;&#xA;This snippet isn&#39;t incredibly profound on its own, but in my experience it hits hard&#xA;I&#39;ve been in many conversations about faith and works - and as I&#39;ve written&#xA;about before in [[a-new-perspective-on-being-god-s-child]] Christians&#xA;today have a deep desire to put things into neat and simple boxes but this is&#xA;often a mistake. &#xA;And in the case of faith and works I think it&#39;s just as&#xA;prevalent for similar reasons I outlined in that post - a deep &#34;need&#34; to &#34;fully&#xA;understand&#34; a system we participate in. &#xA;However this usually comes lacking the accompanying nuance in understanding&#xA;&#34;works&#34; and &#34;works of the law&#34; and &#34;work in order to be saved&#34;.&#xA;&#xA;!!! warning &#34;To be very clear&#34;&#xA;    The Bible is in no way contradictory in its teaching about faith and works&#xA;    and salvation regardless of how wrong someone gets it... at the end of the day&#xA;    Jesus picks who he picks. This in no way excuses the elect from performing good&#xA;    works, but any good or bad &#34;works&#34; do nothing to change the reality of&#xA;    salvation - the works merely reveal the truth&#xA;&#xA;I don&#39;t see tension in faith and works - James&#39; statement &#34;faith without works&#xA;is dead&#34; is so simple to me...&#xA;Jesus changes my life every day, and every day I make decisions based on that&#xA;reality. &#xA;If I only talked about my faith, and never made a decision where I&#xA;prioritized my faith over what I wanted - then do I really believe? &#xA;&#xA;!!! danger &#34;The answer is simple&#34;&#xA;    Of course not.&#xA;&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 A Brief History &amp; Ethos of the Digital Garden</title>
    <id>https://pype.dev/thoughts-701/</id>
    <updated>2025-06-17T11:56:10Z</updated>
    <published>2025-06-17T11:56:10Z</published>
    <link href="https://pype.dev/thoughts-701/" rel="alternate" type="text/html"></link>
    <summary type="text">I am interested in the topic of &#34;digital gardening&#34;, and I didn&#39;t realize how long the term has been around. As a relati</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://maggieappleton.com/garden-history/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://maggieappleton.com/garden-history/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - A Brief History &amp; Ethos of the Digital Garden&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://maggieappleton.com/garden-history/&#34;&gt;A Brief History &amp; Ethos of the Digital Garden&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I am interested in the topic of &#34;digital gardening&#34;, and I didn&#39;t realize how long the term has been around. As a relatively new member of the blogging community I&#39;d like to formulate my own understanding and continue to grow in practicing tending to what I put out their in the digi-space.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>source_up for nested .envrc</title>
    <id>https://pype.dev/source-up-for-nested-envrc/</id>
    <updated>2025-06-17T09:52:17Z</updated>
    <published>2025-06-17T09:52:17Z</published>
    <link href="https://pype.dev/source-up-for-nested-envrc/" rel="alternate" type="text/html"></link>
    <summary type="text">I have a use case for nesting directories with cascading .envrc files. and ran into an issue where the parent environment was being reset by the child...</summary>
    <content type="html">&lt;h1 id=&#34;tldr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TLDR&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I have a use case for nesting directories with cascading .envrc files. and ran&#xA;into an issue where the parent environment was being reset by the child&#xA;environment. The fix is &lt;code&gt;source_up&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;context&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Context&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I manage some infrastructure at home with a folder 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;├── homelab&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── .envrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── stack1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│       ├── .envrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I do this so that the &amp;ldquo;homelab-wide&amp;rdquo; terraform variables can be exported with&#xA;&lt;code&gt;TF_VAR_the_variable&lt;/code&gt; in the &lt;code&gt;homelab/.envrc&lt;/code&gt; and then the stack specific&#xA;variables in &lt;code&gt;stack1/.envrc&lt;/code&gt; get exported like &lt;code&gt;TF_VAR_stack_specific_var&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For example, my cloudflare account id is needed in every stack, but the&#xA;cloudflare zone id is different per stack - so instead of copying the account&#xA;id var to every stack (however the vars are managed), I can set it in a parent&#xA;.envrc and share it in nested stack directories&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Problem&lt;/span&gt; &lt;a href=&#34;#problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;# homelab/.envrc&#xA;#!/bin/bash&#xA;export VAR_FOO=BAR&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So when I &lt;code&gt;cd homelab&lt;/code&gt; I get&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;nic in /tmp/homelab   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET&#xA;⬢ [devbox] ❯ direnv allow&#xA;direnv: loading /tmp/homelab/.envrc&#xA;direnv: export +VAR_FOO&#xA;&#xA;nic in /tmp/homelab   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET&#xA;⬢ [devbox] ❯ env | grep VAR&#xA;VAR_FOO=BAR&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can see &lt;code&gt;VAR_FOO&lt;/code&gt; is set&amp;hellip; but now I&amp;rsquo;ll &lt;code&gt;cd stack1&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;nic in /tmp/homelab   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET&#xA;⬢ [devbox] ❯ cd stack1&#xA;direnv: error /tmp/homelab/stack1/.envrc is blocked. Run `direnv allow` to approve its content&#xA;&#xA;nic in /tmp/homelab/stack1   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET&#xA;⬢ [devbox] ❯ direnv allow&#xA;direnv: loading /tmp/homelab/stack1/.envrc&#xA;direnv: export +VAR_BAZ&#xA;&#xA;nic in /tmp/homelab/stack1   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET&#xA;⬢ [devbox] ❯ env | grep VAR&#xA;VAR_BAZ=BAM&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As you can see &lt;code&gt;VAR_FOO&lt;/code&gt; was unset, and &lt;code&gt;VAR_BAZ&lt;/code&gt; is set&amp;hellip; so &lt;code&gt;homelab/.envrc&lt;/code&gt; was blown away!&lt;/p&gt;&#xA;&lt;h2 id=&#34;fix&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Fix&lt;/span&gt; &lt;a href=&#34;#fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Edit &lt;code&gt;stack1/.envrc&lt;/code&gt; with a &lt;code&gt;source_up&lt;/code&gt; command&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# stack1/.envrc # NEW&#xA;#!/bin/bash&#xA;source_up  # source the parent environment&#xA;export VAR_BAZ=BAM&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After the edit&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;nic in /tmp/homelab/stack1   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET&#xA;⬢ [devbox] ❯ vim .envrc&#xA;direnv: error /tmp/homelab/stack1/.envrc is blocked. Run `direnv allow` to approve its content&#xA;&#xA;nic in /tmp/homelab/stack1   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET  took 5s&#xA;⬢ [devbox] ❯ direnv allow&#xA;direnv: loading /tmp/homelab/stack1/.envrc&#xA;direnv: loading /tmp/homelab/.envrc&#xA;direnv: export +VAR_BAZ +VAR_FOO&#xA;&#xA;nic in /tmp/homelab/stack1   (dev) 󰒄 󱔎 NO PYTHON ENVIORNMENT SET&#xA;⬢ [devbox] ❯ env | grep VAR&#xA;VAR_FOO=BAR&#xA;VAR_BAZ=BAM&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Both vars are set!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Cross Account AWS Security Group ID Reference</title>
    <id>https://pype.dev/thoughts-700/</id>
    <updated>2025-06-16T20:56:57Z</updated>
    <published>2025-06-16T20:56:57Z</published>
    <link href="https://pype.dev/thoughts-700/" rel="alternate" type="text/html"></link>
    <summary type="text">I needed to update some ingress rules across several AWS accounts and ran into an issue when I had to reference a securi</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://stackoverflow.com/questions/12465978/can-aws-security-groups-on-one-aws-account-reference-security-groups-in-another&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://stackoverflow.com/questions/12465978/can-aws-security-groups-on-one-aws-account-reference-security-groups-in-another&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Cross Account AWS Security Group ID Reference&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://stackoverflow.com/questions/12465978/can-aws-security-groups-on-one-aws-account-reference-security-groups-in-another&#34;&gt;Cross Account AWS Security Group ID Reference&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I needed to update some ingress rules across several AWS accounts and ran into an issue when I had to reference a security group id in another account - turns out &lt;accountid&gt;/&lt;securitygroupid&gt; is the money maker&#xA;&#xA;EDIT: this requires VPC Peering...&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Failed to load state: unsupported checkable object kind var - …</title>
    <id>https://pype.dev/thoughts-699/</id>
    <updated>2025-06-16T20:27:07Z</updated>
    <published>2025-06-16T20:27:07Z</published>
    <link href="https://pype.dev/thoughts-699/" rel="alternate" type="text/html"></link>
    <summary type="text">I have spacelift stacks managed with open tofu and stacks managed with terraform... Due to this very issue I think, I ra</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://discuss.hashicorp.com/t/failed-to-load-state-unsupported-checkable-object-kind-var/61844/2&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://discuss.hashicorp.com/t/failed-to-load-state-unsupported-checkable-object-kind-var/61844/2&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Failed to load state: unsupported checkable object kind var - #2 by apparentlymart - Terraform - HashiCorp Discuss&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://discuss.hashicorp.com/t/failed-to-load-state-unsupported-checkable-object-kind-var/61844/2&#34;&gt;Failed to load state: unsupported checkable object kind var - #2 by apparentlymart - Terraform - HashiCorp Discuss&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I have spacelift stacks managed with open tofu and stacks managed with terraform... Due to this very issue I think, I ran into a problem where a terraform-managed spacelift stack couldn&#39;t use the `terraform_remote_state` data resource to load the state of the open-tofu managed stacks because of state file differences&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Snowflake Status - Certificate Authority Update for AWS Regions</title>
    <id>https://pype.dev/thoughts-698/</id>
    <updated>2025-06-16T16:37:12Z</updated>
    <published>2025-06-16T16:37:12Z</published>
    <link href="https://pype.dev/thoughts-698/" rel="alternate" type="text/html"></link>
    <summary type="text">A recent Snowflake issue borked some old pipelines - thankfully it appears to be a simple fix. Just goes to show you tha</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://status.snowflake.com/incidents/txclg2cyzq32&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://status.snowflake.com/incidents/txclg2cyzq32&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Snowflake Status - Certificate Authority Update for AWS Regions&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://status.snowflake.com/incidents/txclg2cyzq32&#34;&gt;Snowflake Status - Certificate Authority Update for AWS Regions&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;A recent Snowflake issue borked some old pipelines - thankfully it appears to be a simple fix. Just goes to show you that you can&#39;t just deploy pipelines and expect them to live forever, they have to be maintained when there are ANY external dependencies&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Visualizing My Blog’s Internal Links - Jim Nielsen’s Blog</title>
    <id>https://pype.dev/thoughts-697/</id>
    <updated>2025-06-16T11:26:29Z</updated>
    <published>2025-06-16T11:26:29Z</published>
    <link href="https://pype.dev/thoughts-697/" rel="alternate" type="text/html"></link>
    <summary type="text">Someday I will build a thing to see the relationship in my posts and notes. Right now I&#39;m working on writing consistentl</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Visualizing My Blog’s Internal Links - Jim Nielsen’s Blog&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://blog.jim-nielsen.com/2022/visualizing-my-blogs-links/&#34;&gt;Visualizing My Blog’s Internal Links - Jim Nielsen’s Blog&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Someday I will build a thing to see the relationship in my posts and notes. Right now I&#39;m working on writing consistently, improving my tagging, using wikilinks, and just generally thinking about what I want my website to contain - and a mindmap like this would be just awesome&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Stable Diffusion QR Code 101</title>
    <id>https://pype.dev/thoughts-696/</id>
    <updated>2025-06-16T11:24:46Z</updated>
    <published>2025-06-16T11:24:46Z</published>
    <link href="https://pype.dev/thoughts-696/" rel="alternate" type="text/html"></link>
    <summary type="text">My brother asked me to generate some QR codes for his link page that I manage. It&#39;s been a long time since I&#39;ve used SD</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://antfu.me/posts/ai-qrcode-101&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://antfu.me/posts/ai-qrcode-101&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Stable Diffusion QR Code 101&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://antfu.me/posts/ai-qrcode-101&#34;&gt;Stable Diffusion QR Code 101&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My brother asked me to generate some QR codes for his link page that I manage. It&#39;s been a long time since I&#39;ve used SD to make codes, and for the life of me I cannot find my notes anywhere... That unfortunate disorganization aside I think I followed Anthony&#39;s guides before, and they&#39;ve only gotten better... &#xA;Time to get prompting!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Father’s Day 2025</title>
    <id>https://pype.dev/father-s-day-2025/</id>
    <updated>2025-06-15T09:02:09Z</updated>
    <published>2025-06-15T09:02:09Z</published>
    <link href="https://pype.dev/father-s-day-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">I just wanted to capture some thoughts on Father&#39;s Day and how becoming a dad and raising two beautiful kids has affected my view on, or matured my view of,...</summary>
    <content type="text">&#xA;# Intro&#xA;&#xA;I just wanted to capture some thoughts on Father&#39;s&#xA;Day and how becoming a dad and raising two beautiful kids has affected my view&#xA;on, or matured my view of, my relationship with God and how He sees me.&#xA;Because, biblically speaking, the father metaphor is very common and prominent&#xA;for Yahweh. He&#39;s many things to His chosen people. But the theology of adoption&#xA;makes the father model and metaphor a really good one. And being a dad,&#xA;I feel like I&#39;ve learned a lot.&#xA;&#xA;# The Childlike Position Before God&#xA;&#xA;This is pretty related to the last post of mine [[a-new-perspective-on-being-god-s-child]] &#xA;where the crux of that post is that, as smart as we might think we&#xA;are as educated theologians, in the eyes of God we&#39;re still just children. And&#xA;I mean that we should think that our understanding of our complex topics, is&#xA;still the level of a child in relation to God. And so in that&#xA;same vein I&#39;m asking &#xA;&#xA;!!! warning &#34;&#34;&#xA;    &#34;In what other ways am I like a child to God?&#34; &#xA;&#xA;So again today, I&#39;m making sure to process some of these thoughts.&#xA;&#xA;## Babies and Who Am I?&#xA;&#xA;I remember both of my kids as babies would get overtired, and they&#39;d be so&#xA;tired that they couldn&#39;t fall asleep. And I would look at them and go - &#34;this&#xA;doesn&#39;t make sense. Your body knows you need sleep, you know you need sleep,&#xA;but what does it mean to be too tired? You can&#39;t fall asleep. And you just yell&#xA;and scream at me.&#34; But that baby doesn&#39;t know that I&#39;m their dad, they don&#39;t&#xA;know anything. They&#39;re just overtired, and they&#39;re yelling and screaming. It&#39;s&#xA;just my job to protect them in that moment, comfort them, whatever. And I&#xA;thought, &#34;man, this just has to be how God sees me sometimes.&#34; Even though I&#39;ve&#xA;been walking with the Lord for decades there&#39;s got to be&#xA;times when I&#39;m just throwing a tantrum. &#xA;&#xA;!!! info &#34;And that&#39;s how God sees me&#34;&#xA;    as a creature he loves, who&#39;s just too tired to take a nap. And it&#39;s a&#xA;    humbling thing to think that that&#39;s really sometimes how God sees me.&#xA;&#xA;# Unconditional Love &amp; Disobedience&#xA;&#xA;As my kids have gotten older, I think that I&#39;ve picked up on other truths&#xA;of the Lord - mainly how he can love me even when I sin... Even when my daughters&#xA;disobey, it doesn&#39;t change my love for them. I just had an experience today with&#xA;my daughter who climbed up too high on a swing set on a trapeze bar and&#xA;couldn&#39;t get herself down. And although it got tense and there was some shouting to handle, I eventually walked her through a few things:&#xA;&#xA;1. I told her not to get up there, and she disobeyed.&#xA;2. By disobeying, she put herself into a dangerous and scary situation.&#xA;3. I would help her in her scary situation, but my help might not look like how she wants it to look&#xA;4. The help I can provide is to not remove her from the situation, i.e. to pick her up and just save her, but I could help her climb down and give her instruction.&#xA;5. Finally, she needs to choose to trust me, even though she&#39;ll still be scared, and she needs to choose to trust me, even when I&#39;m not standing where&#xA;she wants me to stand, or putting my hand where she wants me to put my hand, so&#xA;that she feels safe. &#xA;&#xA;!!! info &#34;Guidance Over Rescue &amp; The Need for Trust&#34;&#xA;    I need her to know that she is safe, and to trust that I tell her she is&#xA;    safe, even when she doesn&#39;t see it or feel it. And that is what God requests&#xA;    and demands of me, is to trust him more than I might be fearful of my future,&#xA;    financially, or of relational security, or whatever.&#xA;&#xA;## Acting in Obedience Despite Fear&#xA;&#xA;That trust doesn&#39;t necessarily take away the fear, but it does mean that you&#xA;behave obediently and act in accordance with the reality, not with the fear.&#xA;The reality is that Yahweh loves and protects me, just as I love and protect my&#xA;daughter, even when she was scared on the trapeze bar.&#xA;&#xA;# End&#xA;&#xA;So Father&#39;s Day is, for me, a good time to just reflect on what that means to&#xA;be a dad. I&#39;m not going to celebrate and do anything crazy. My family isn&#39;t&#xA;going to, because I don&#39;t want us to. But this is a nice reminder, perhaps I&#xA;should do this more purposefully, more often, is reflect on how&#xA;God teaches me about his love for me through giving me a deep love for my&#xA;children.&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>U-Blue Aurora Upgrade Broke HWA Docker</title>
    <id>https://pype.dev/u-blue-aurora-upgrade-broke-hwa-docker/</id>
    <updated>2025-06-15T08:42:09Z</updated>
    <published>2025-06-15T08:42:09Z</published>
    <link href="https://pype.dev/u-blue-aurora-upgrade-broke-hwa-docker/" rel="alternate" type="text/html"></link>
    <summary type="text">I use Universal Blue&#39;s Aurora distribution on my daily driver desktop, and I rebooted today which led what I imagine is a kernel update. This broke all of my...</summary>
    <content type="html">&lt;p&gt;I use Universal Blue&amp;rsquo;s &lt;a href=&#34;https://getaurora.dev/en&#34;&gt;Aurora&lt;/a&gt; distribution on my daily driver desktop, and&#xA;I rebooted today which led what I imagine is a kernel update. This broke all of&#xA;my docker containers using a GPU.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;nvidia-container-cli: detection error: open failed: /usr/lib/libnvidia-tls.so.570.153.02: no such file or directory: unknown&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Thankfully a reboot and booting into the older environment fixes everything&amp;hellip;&#xA;Linux and immutability FTW&lt;/p&gt;&#xA;&lt;h2 id=&#34;related&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Related&lt;/span&gt; &lt;a href=&#34;#related&#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://universal-blue.discourse.group/t/cannot-use-nvidia-runtime-in-docker-since-update-to-fedora-42/8812/3&#34;&gt;Discorse Thread&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Test Styles</title>
    <id>https://pype.dev/test-styles/</id>
    <updated>2025-06-14T16:03:50Z</updated>
    <published>2025-06-14T16:03:50Z</published>
    <link href="https://pype.dev/test-styles/" rel="alternate" type="text/html"></link>
    <summary type="text">Content fooo bar</summary>
    <content type="html">&lt;h1 id=&#34;test-title-heading&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Test Title Heading&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Content fooo bar&lt;/p&gt;&#xA;&lt;h2 id=&#34;test-sub-heading&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Test Sub Heading&lt;/span&gt; &lt;a href=&#34;#test-sub-heading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;test-sub-sub-heading&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Test Sub Sub Heading&lt;/span&gt; &lt;a href=&#34;#test-sub-sub-heading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;test-sub-sub-sub-heading&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Test Sub Sub Sub Heading&lt;/span&gt; &lt;a href=&#34;#test-sub-sub-sub-heading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;h5 id=&#34;test-sub-sub-sub-sub-heading&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Test Sub Sub Sub Sub Heading&lt;/span&gt;&lt;/h5&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Blockquote&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;in line code&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pype.dev&#34;&gt;Link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250613203559_6470ff5a.png&#34; alt=&#34;20250613203559_6470ff5a.png&#34;&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;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;nb&#34;&gt;print&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;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;/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;k&#34;&gt;resource&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cloudflare_pages_domain&amp;#34; &amp;#34;cf_domain&amp;#34;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;  account_id&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;account_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;  project_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;cloudflare_pages_project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;build_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#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;n&#34;&gt;  domain&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pype.dev&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;a success message&lt;/p&gt;&#xA;&lt;p&gt;This is a success message&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition info&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;an info message&lt;/p&gt;&#xA;&lt;p&gt;This is an info message&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;a warning message&lt;/p&gt;&#xA;&lt;p&gt;This is a warning message&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;a danger message&lt;/p&gt;&#xA;&lt;p&gt;This is a danger message&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;!!! question &amp;ldquo;a question message&amp;rdquo;&#xA;This is a question message&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;a note message&lt;/p&gt;&#xA;&lt;p&gt;This is a note message&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;details class=&#34;admonition info&#34;&gt;&#xA;&lt;summary class=&#34;admonition-title&#34;&gt;an info message&lt;/summary&gt;&#xA;&lt;p&gt;This is an info message&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Homelab Pinchflat</title>
    <id>https://pype.dev/homelab-pinchflat/</id>
    <updated>2025-06-14T08:51:21Z</updated>
    <published>2025-06-14T08:51:21Z</published>
    <link href="https://pype.dev/homelab-pinchflat/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve written about self-hosted-media before and addressed some thoughts with YouTube.</summary>
    <content type="text">&#xA;# Why?&#xA;&#xA;I&#39;ve written about [[self-hosted-media]] before and addressed some thoughts with YouTube. &#xA;&#xA;Lately though I&#39;ve had 2 use cases for offline YouTube media and I&#39;m now&#xA;solving this problem by using [pinchflat](https://pinchflat.com/) as my `ytdl`&#xA;solution + file system organization for use throughout my homelab.&#xA;&#xA;## Use Case 1&#xA;&#xA;At church we use pre-recorded music to sing along to, or at least we used to,&#xA;thankfully as of June 2025 we&#39;re doing live-music every week. But in the before&#xA;times I would strip the audio out of song files we had purchased and then made&#xA;lyric videos with the instrumental tracks. As we wanted to try new songs out we&#xA;didn&#39;t want to purchase them in case they didn&#39;t work out for us to use and&#xA;that ends up being a waste (church budget is very tight). So using songs&#xA;available on YouTube is an easy solution, but the only way to strip the vocals&#xA;and see if the song sounded right with our singers and equipment was to make&#xA;the lyric video and rehearse it... Chicken or Egg problem unless we can freely&#xA;try it before purchasing... So using Pinchflat we can download songs in that&#xA;playlist, I can edit the files, the team can try it out, and if we like it we&#xA;can use it without hitting the budget any harder than necessary.&#xA;&#xA;&gt; Pinchflat syncs that playlist to a folder on my NAS that another process&#xA;&gt; watches and performs the audio stripping workflow&#xA;&#xA;## Use Case 2&#xA;&#xA;I just wrote about [[if-you-want-something-make-it-so-song-style]] which is the&#xA;second use case - cutting mashups of my favorite songs on youtube and then&#xA;hosting them myself for easy listening&#xA;&#xA;# The Setup&#xA;&#xA;I run it in docker compose like practically all my other services&#xA;&#xA;```yml&#xA;services:&#xA;  pinchflat:&#xA;    container_name: &#34;pinchflat&#34;&#xA;    image: &#34;ghcr.io/kieraneglin/pinchflat:latest&#34;&#xA;    ports:&#xA;      - &#34;8945:8945&#34;&#xA;    volumes:&#xA;      - &#34;/tank/encrypted/docker/the-pit-zfs/pinchflat/config:/config:rw&#34;&#xA;      - &#34;/tank/encrypted/nas/media/downloads/pinchflat/downloads:/downloads:rw&#34;&#xA;    environment:&#xA;      TZ: &#34;America/Chicago&#34;&#xA;      PUID: &#34;1000&#34;&#xA;      PGID: &#34;1000&#34;&#xA;    restart: unless-stopped&#xA;    deploy:&#xA;      resources:&#xA;        limits:&#xA;          memory: &#34;4g&#34;&#xA;```&#xA;&#xA;# The GUI&#xA;&#xA;The WebUI is easy to navigate - you organize your downloads however you want with &#34;sources&#34;, and here&#39;s how I setup the source for these mashups that I want to edit... I add them to my playlist and Pinchflat grabs them for me automatically&#xA;![20250614144201_fa16e7ac.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250614144201_fa16e7ac.png)&#xA;&#xA;![20250614144307_bdf12ee0.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250614144307_bdf12ee0.png)&#xA;&#xA;That&#39;s basically it - then as you can see in the compose file, I get the files in a folder on my NAS and from there I can edit them as I need.&#xA;&#xA;## Example&#xA;&#xA;The church app that does the audio processing is in a compose stack with the&#xA;pinchflat download directory on the host mounted in - this is how containers in&#xA;different stacks can share data, by sharing a filesystem bind mount&#xA;&#xA;```yml&#xA;services:&#xA;  olivet_watcher_app:&#xA;    image: pypeaday/vocal-remover-watcher&#xA;    container_name: olivet-youtube-watcher&#xA;    volumes:&#xA;      - /tank/encrypted/nas/media/downloads/pinchflat/downloads:/input:ro&#xA;      - /tank/encrypted/docker/vocal_remover_app/watcher-app/processed_mp3s:/output&#xA;      - /tank/encrypted/docker/vocal_remover_app/watcher-app/db:/data&#xA;    working_dir: /app&#xA;```&#xA;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>If You Want Something Make It So - Song Style</title>
    <id>https://pype.dev/if-you-want-something-make-it-so-song-style/</id>
    <updated>2025-06-14T08:44:14Z</updated>
    <published>2025-06-14T08:44:14Z</published>
    <link href="https://pype.dev/if-you-want-something-make-it-so-song-style/" rel="alternate" type="text/html"></link>
    <summary type="text">In grad school a professor of mine, Mark Hunacek, said one of the most profound things I&#39;ve ever heard to the tune &#34;if you want it, then make it so&#34;... It&#39;s...</summary>
    <content type="text">&#xA;In grad school a professor of mine, Mark Hunacek, said one of the most profound&#xA;things I&#39;ve ever heard to the tune &#34;if you want it, then make it so&#34;... It&#39;s a&#xA;great benefit to mathematicians at the bar to start a conversation with &#34;hey&#xA;let&#39;s assume X because we can&#34;...&#xA;&#xA;This phrase has affected my work greatly to the work I do and how I go about it- &#xA;it&#39;s literally changed how I design some of my code. But I also want this&#xA;mantra to flow into other parts of my life...&#xA;&#xA;&gt; So here&#39;s a post about how I use Pinchflat and Davinci Resolve to tickle my&#xA;&gt; brain with bespoke versions of beautifully crafted mashups&#xA;&#xA;In this example I took a Goobsie mashup, cut the part I didn&#39;t like quite as&#xA;much (though admittedly it&#39;s still beautiful) and spliced it with itself to&#xA;give me a longer running version of a musical piece that takes me to another&#xA;world...&#xA;&#xA;[OG Youtube Mashup](https://www.youtube.com/watch?v=7v7nreDnmDg)&#xA;&#xA;## Acquiring the Media&#xA;&#xA;Pinchflat isn&#39;t really necessary here, anyone can use `youtubedl` or another&#xA;tool to download from YouTube. I do use Pinchflat to subscribe to Youtube&#xA;playlists to automate this process for me. See more about that in&#xA;[[homelab-pinchflat]]&#xA;&#xA;## Creating the Mashup&#xA;&#xA;So Goobsie makes actually good mashups, and I&#39;m not anything even remotely close to an audio engineer or whatever, but there&#39;s a segment of this song that just strikes my whole body in a unique way and I want to sometimes just listen to it conveniently... So enter Davinci Resolve... Basically I took the downloaded file, added it twice to a timeline, and then faded in and out until it sounded ok to me.&#xA;&#xA;![20250614135418_b75bc26a.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250614135418_b75bc26a.png)&#xA;&#xA;## Listening to the Mashup&#xA;&#xA;So now how do I listen to this?&#xA;&#xA;For the moment, it&#39;s a favorite in my Jellyfin library and I listen through&#xA;that client. It&#39;s a TODO item for me to set-up a more music-centric streaming&#xA;service&#xA;&#xA;&#xA;!!! info &#34;Go Forth&#34;&#xA;    So Go Forth - and if you want something, make it so</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>About Me</title>
    <id>https://pype.dev/slash-pages/</id>
    <updated>2025-06-13T20:58:00Z</updated>
    <published>2025-06-13T20:58:00Z</published>
    <link href="https://pype.dev/slash-pages/" rel="alternate" type="text/html"></link>
    <summary type="text">Hey, I&#39;m Nic. Welcome to my little corner of the internet.</summary>
    <content type="html">&lt;h1 id=&#34;about-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;About Me&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Hey, I&amp;rsquo;m Nic. Welcome to my little corner of the internet.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m a platform engineer who loves homelabbing, automation, and figuring out how things work. I also write about faith, life, and whatever&amp;rsquo;s on my mind.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-this-site&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What is this site?&lt;/span&gt; &lt;a href=&#34;#what-is-this-site&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is my public mental datalake—a space where I share thoughts on technology, faith, and life. The posts here range from technical tutorials to personal reflections.&lt;/p&gt;&#xA;&lt;h2 id=&#34;slash-pages&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Slash Pages&lt;/span&gt; &lt;a href=&#34;#slash-pages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You might have noticed URLs like &lt;code&gt;/now&lt;/code&gt;, &lt;code&gt;/uses&lt;/code&gt;, or &lt;code&gt;/about&lt;/code&gt;. These are called &lt;a href=&#34;https://slashpages.net/&#34;&gt;slash pages&lt;/a&gt; — a simple, elegant way to share information about yourself using just a URL.&lt;/p&gt;&#xA;&lt;p&gt;They&amp;rsquo;re inspired by the &amp;ldquo;slash&amp;rdquo; convention popularized by people like Derek Sivers. Instead of having to navigate through menus, you can just share a link like &lt;code&gt;pype.dev/uses&lt;/code&gt; and people instantly see what tech I use.&lt;/p&gt;&#xA;&lt;h3 id=&#34;my-slash-pages&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Slash Pages&lt;/span&gt; &lt;a href=&#34;#my-slash-pages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Here are some of my slash pages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;/now&#34;&gt;/now&lt;/a&gt;&lt;/strong&gt; — What I&amp;rsquo;m currently focused on&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;/uses&#34;&gt;/uses&lt;/a&gt;&lt;/strong&gt; — My current setup and tools&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;/wants&#34;&gt;/wants&lt;/a&gt;&lt;/strong&gt; — Things I&amp;rsquo;m hoping to get/do&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;/about&#34;&gt;/about&lt;/a&gt;&lt;/strong&gt; — More about who I am&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;/contact&#34;&gt;/contact&lt;/a&gt;&lt;/strong&gt; — How to reach me&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;/feeds&#34;&gt;/feeds&lt;/a&gt;&lt;/strong&gt; — Other feeds I follow&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You can also browse all my slash pages at &lt;a href=&#34;/slash&#34;&gt;/slash&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-reach-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;How to Reach Me&lt;/span&gt; &lt;a href=&#34;#how-to-reach-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Email: &lt;a href=&#34;mailto:nic@pype.dev&#34;&gt;nic@pype.dev&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;GitHub: &lt;a href=&#34;https://github.com/pypeaday&#34;&gt;pypeaday&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Digital Harbor: &lt;a href=&#34;https://mydigitalharbor.com/pypeaday&#34;&gt;pypeaday&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;Thanks for stopping by!&lt;/em&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Now</title>
    <id>https://pype.dev/now/</id>
    <updated>2025-06-13T20:58:00Z</updated>
    <published>2025-06-13T20:58:00Z</published>
    <link href="https://pype.dev/now/" rel="alternate" type="text/html"></link>
    <summary type="text">Started on 2025-07-16-notes using this page for my &#34;don&#39;t lose sight of the projects you&#39;re touching&#34;</summary>
    <content type="text">&#xA;Started on [[2025-07-16-notes]] using this page for my &#34;don&#39;t lose sight of the projects you&#39;re touching&#34;&#xA;&#xA;## Writing&#xA;&#xA;- [x] [[gods-zeal-for-justice-amont-men-displayed-in-the-divine-counsel]]&#xA;- [[desktop-crash-2026]]&#xA;- [[desktop-setup-2026]]&#xA;- [[dataops]]&#xA;- [x] [[panicking-led-to-losing-my-desktop]]&#xA;- note on [[blog-and-llm-knowledge-base]], should turn this into a plan&#xA;  - doing it at work?&#xA;&#xA;## Lost but potentially recoverable&#xA;&#xA;- [[consider-the-point]]&#xA;- [[self-hosting-a-code-forge-with-forgejo]]&#xA;- [[should-data-models-be-fat]]&#xA;&#xA;- I want to start writing about some parenting concepts&#xA;  - discipline vs consequences vs punishment is one concept&#xA;    - [x] [[consequences-discipline-and-punishment]]&#xA;  - love and the &#34;greater will&#34; for your child&#xA;    - goes hand-in-hand with something like &#34;it&#39;s good for your child to suffer&#34;&#xA;&#xA;## Hot&#xA;&#xA;- bookorbit for Kassia&#xA;- [[notifiq]]&#xA;- [[soonish]]&#xA;- [[mindful]]&#xA;- [[quadtask]]&#xA;- [[qr-harbor]]&#xA;- [[cannalyze]]&#xA;  - josh&#39;s site redirects still, it isn&#39;t his url so I still need to fix that&#xA;&#xA;## BUGS&#xA;&#xA;- repoflow bug... when my library is set to private, I can login and push from forgejo with my bot account. if I make the library public, then the push fails from forgejo with 401&#xA;&#xA;## Runescape&#xA;&#xA;- [x] [Monkey Madness 1](https://oldschool.runescape.wiki/w/Monkey_Madness_I)&#xA;  - post on runelite plugins again&#xA;  - safespot the gorillas in the temple&#xA;    ![20251130112234_945c685a.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251130112234_945c685a.png)&#xA;    ![20251130122758_a8f58b1b.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20251130122758_a8f58b1b.png)&#xA;&#xA;- [ ] RTB Gnome quest&#xA;  - can&#39;t get ice gloves until 50 mining&#xA;  - got the cake&#xA;&#xA;- ## Migrating my homelab stuff to a mono repo&#xA;&#xA;  - [kanboard ticket for skm backup](https://kanboard.paynepride.com/?controller=TaskViewController&amp;action=show&amp;task_id=247&amp;project_id=8)&#xA;  - [kanboard ticket for homelab mono migration](https://kanboard.paynepride.com/task/109)&#xA;&#xA;## Dev&#xA;&#xA;- [ ] need to clean up old repos like doomlab7/homelab-mono for example. I archived it but there&#39;s no point in keeping it around I think&#xA;- [ ] [[thoughts-to-nostr]]&#xA;&#xA;## Auth&#xA;&#xA;- [LLDAP github repo](https://github.com/lldap/lldap/blob/main/docs/install.md#with-docker)&#xA;- authelia?&#xA;&#xA;## Warm&#xA;&#xA;- epub audiobooks for Amanda&#xA;&#xA;- [[homelab-as-a-service]] -- product idea&#xA;- started [[autism-and-steadfast-faith]]&#xA;  - add repoflow post/writing in this same stream&#xA;&#xA;- [[compose-stack-example-repo-x-package-manager]]&#xA;&#xA;## Cold&#xA;&#xA;Haven&#39;t forgotten about [[cronicle]]&#xA;&#xA;I built a fun self-hosted weather app [[dad-can-i-wear-this]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Feeds</title>
    <id>https://pype.dev/feeds/</id>
    <updated>2025-06-13T20:58:00Z</updated>
    <published>2025-06-13T20:58:00Z</published>
    <link href="https://pype.dev/feeds/" rel="alternate" type="text/html"></link>
    <summary type="text">I write about things I find interesting, here&#39;s a list of my feeds:</summary>
    <content type="html">&lt;p&gt;I write about things I find interesting, here&amp;rsquo;s a list of my feeds:&lt;/p&gt;&#xA;&lt;p&gt;Q: Jinja here over my markata feeds?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Contact</title>
    <id>https://pype.dev/contact/</id>
    <updated>2025-06-13T20:58:00Z</updated>
    <published>2025-06-13T20:58:00Z</published>
    <link href="https://pype.dev/contact/" rel="alternate" type="text/html"></link>
    <summary type="text">You can find more places to find me at my digital harbor</summary>
    <content type="html">&lt;h1 id=&#34;contact-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Contact Me&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;You can find more places to find me at &lt;a href=&#34;https://mydigitalharbor.com/pypeaday&#34;&gt;my digital harbor&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;email&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Email&lt;/span&gt; &lt;a href=&#34;#email&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can also email me at &lt;a href=&#34;mailto:nic@pype.dev&#34;&gt;nic@pype.dev&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;github&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;GitHub&lt;/span&gt; &lt;a href=&#34;#github&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can find me on GitHub at &lt;a href=&#34;https://github.com/pypeaday&#34;&gt;pypeaday&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>About</title>
    <id>https://pype.dev/about/</id>
    <updated>2025-06-13T20:58:00Z</updated>
    <published>2025-06-13T20:58:00Z</published>
    <link href="https://pype.dev/about/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m a tech nerd who&#39;s been homelabbing since 2019 - I got started with pi-hole and it&#39;s been all downhill ever since... see the-homelab for more info. I...</summary>
    <content type="text">&#xA;# Me&#xA;&#xA;I&#39;m a tech nerd who&#39;s been homelabbing since 2019 - I got started with pi-hole&#xA;and it&#39;s been all downhill ever since... see [[the-homelab]] for more info. I&#xA;write about things in the tech world as I&#39;ve been thrust into it via hobbies&#xA;and work, and I also write about things related to theology and Christianity.&#xA;Jesus changes my life everyday and I try to write about some of that for my own&#xA;processing and perhaps my thoughts will be encouraging to someone who stumbles&#xA;across them&#xA;&#xA;## Work&#xA;&#xA;I work primarily as a platform engineer supporting data scientists and app&#xA;developers deploy their code on kubernetes based systems&#xA;&#xA;## Hobbies&#xA;&#xA;???+ note &#34;Homelabbing&#34;&#xA;&#xA;    - [[the-homelab]]&#xA;    - [[homelab-journey-part-1]]&#xA;&#xA;???+ note &#34;BJJ&#34;&#xA;&#xA;    I got my blue belt in BJJ July 2023 (should blog about my BJJ experience...)&#xA;&#xA;## Family&#xA;&#xA;I have one.&#xA;&#xA;## More&#xA;&#xA;Check out [[slash]] pages for more about-related info or hit up some feeds from the [homepage](https://pype.dev) to explore&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>QuadTask</title>
    <id>https://pype.dev/quadtask/</id>
    <updated>2025-06-13T20:58:00Z</updated>
    <published>2025-06-13T20:58:00Z</published>
    <link href="https://pype.dev/quadtask/" rel="alternate" type="text/html"></link>
    <summary type="text">Eisenhower Matrix based task manager</summary>
    <content type="html">&lt;p&gt;QuadTask is a simple productivity app that I&amp;rsquo;m sure will bring in $0 towards my retirement but a few friends use it and it&amp;rsquo;s a fun project to use as fodder for learning how to pair program with AI.&lt;/p&gt;&#xA;&lt;p&gt;&lt;del&gt;The app is live here - &lt;a href=&#34;https://quadtask.app&#34;&gt;quadtask.app&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;The app is live here - &lt;a href=&#34;https://quadtask.fly.dev&#34;&gt;quadtask.fly.dev&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;updates&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Updates&lt;/span&gt; &lt;a href=&#34;#updates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I can add SMS notifications with the SMTP trick&lt;/li&gt;&#xA;&lt;li&gt;retire quadtask.app and just have it live on fly&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;new-updatess&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;New Updatess&lt;/span&gt; &lt;a href=&#34;#new-updatess&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rebuild as a notifiq app&#xA;&lt;ul&gt;&#xA;&lt;li&gt;includes translating quadtask&amp;rsquo;s schema into event.content or adding tables to notifiq&lt;/li&gt;&#xA;&lt;li&gt;db clean up to get rid of my DDOS artifacts&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Dad, Can I Wear This?</title>
    <id>https://pype.dev/dad-can-i-wear-this/</id>
    <updated>2025-06-13T20:58:00Z</updated>
    <published>2025-06-13T20:58:00Z</published>
    <link href="https://pype.dev/dad-can-i-wear-this/" rel="alternate" type="text/html"></link>
    <summary type="text">Repo</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday/dad-can-i-wear-this&#34;&gt;Repo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a simple FastAPI web app you can &lt;code&gt;docker compose up&lt;/code&gt; alongside ollama and get some cute AI driven weather suggestions for the day.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250614121103_997fe18d.png&#34; alt=&#34;20250614121103_997fe18d.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250614121122_39376fa1.png&#34; alt=&#34;20250614121122_39376fa1.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;version-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Version 2&lt;/span&gt; &lt;a href=&#34;#version-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250919212136_319c1006.png&#34; alt=&#34;20250919212136_319c1006.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Normal boyhood is ADHD</title>
    <id>https://pype.dev/thoughts-691/</id>
    <updated>2025-06-13T10:58:01Z</updated>
    <published>2025-06-13T10:58:01Z</published>
    <link href="https://pype.dev/thoughts-691/" rel="alternate" type="text/html"></link>
    <summary type="text">I may want to write a longer post about this or just capture some quick thoughts but I appreciate DHH&#39;s take here.... AD</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://world.hey.com/dhh/normal-boyhood-is-adhd-a9593488&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://world.hey.com/dhh/normal-boyhood-is-adhd-a9593488&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Normal boyhood is ADHD&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://world.hey.com/dhh/normal-boyhood-is-adhd-a9593488&#34;&gt;Normal boyhood is ADHD&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I may want to write a longer post about this or just capture some quick thoughts but I appreciate DHH&#39;s take here.... ADHD _diagnosis_ is an epidemic... Humans are different and I think we should seek to build society that makes space for differences, rather than medicating everyone into more or less the same robotic blog to work and pay taxes.&#xA;&#xA;However I came across this post on another platform with commenting, and most of the commentators were upset with the post saying things like &#34;tell me you have no idea what ADHD is without telling me&#34; and long explanation of honestly regurgitated talking points from a very pro-pharma worldview position... it&#39;s kind of a chicken or egg thing to me - because you don&#39;t have to be a doctor to read and do your own research, and to &#34;just trust the experts&#34; is the most unscientific saying in history... but the folks criticizing this post claiming DHH is speaking out of turn are taking JUST as arrogant approach to ADHD or mental health, only they put more faith in a medical community (which I&#39;ve written about a little and am sus of due to the money), but they put ZERO faith in their own ability to think critically or observe patterns about the world...&#xA;&#xA;Thanks DHH for the thoughts here, as a guy recently diagnosed with ADHD and Autism I&#39;ve done my own reflection and simply agree with a lot of what he puts down here&#xA;&#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>ZSA typing challenge issue</title>
    <id>https://pype.dev/zsa-typing-challenge-issue/</id>
    <updated>2025-06-13T08:07:41Z</updated>
    <published>2025-06-13T08:07:41Z</published>
    <link href="https://pype.dev/zsa-typing-challenge-issue/" rel="alternate" type="text/html"></link>
    <summary type="text">I love zsa and have been using a moonlander for a few years now.</summary>
    <content type="html">&lt;h1 id=&#34;zsa&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;ZSA&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I love &lt;a href=&#34;https://zsa.io&#34;&gt;zsa&lt;/a&gt; and have been using a moonlander for a few years now.&lt;/p&gt;&#xA;&lt;p&gt;They recently launched &lt;a href=&#34;https://typ.ing&#34;&gt;typ.ing&lt;/a&gt; as a way to train your typing skills - it&amp;rsquo;s a lot like &lt;a href=&#34;https://monkeytype.com&#34;&gt;monkeytype&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I have a thought about it &lt;a href=&#34;https://thoughts.waylonwalker.com/post/682&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;today-s-challenge&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Today’s Challenge&lt;/span&gt; &lt;a href=&#34;#today-s-challenge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I went to do today&amp;rsquo;s daily challenge and have ran into an issue where part of&#xA;the challenge is to type &lt;code&gt;/&lt;/code&gt; the forward slash character but it&amp;rsquo;s actually a&#xA;keybind on the website for navigation (well done btw!)&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250613130724_06b0f9ef.png&#34; alt=&#34;20250613130724_06b0f9ef.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;So when I try to type the challenge I actually bring up the nav menu&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250613131031_ce06cf48.png&#34; alt=&#34;20250613131031_ce06cf48.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;So for today I&amp;rsquo;ll take the error on the character to complete it and maybe ZSA&#xA;can look into this?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Double Check Your DNS Records</title>
    <id>https://pype.dev/double-check-your-dns-records/</id>
    <updated>2025-06-13T06:53:50Z</updated>
    <published>2025-06-13T06:53:50Z</published>
    <link href="https://pype.dev/double-check-your-dns-records/" rel="alternate" type="text/html"></link>
    <summary type="text">I host my blog on cloudflare and manage my infra with terraform. I got a 522 when I went to recently and I wondered why since worked fine...</summary>
    <content type="html">&lt;h1 id=&#34;my-blog&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Blog&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I host &lt;a href=&#34;https://pype.dev&#34;&gt;my blog&lt;/a&gt; on cloudflare and manage my infra with&#xA;terraform. I got a 522 when I went to &lt;code&gt;https://www.pype.dev&lt;/code&gt; recently and I&#xA;wondered why since &lt;code&gt;https://pype.dev&lt;/code&gt; worked fine&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;terraform&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Terraform&lt;/span&gt; &lt;a href=&#34;#terraform&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I had this right in the terraform:&lt;/p&gt;&#xA;&lt;pre class=&#34;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;resource&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cloudflare_pages_domain&amp;#34; &amp;#34;cf_domain&amp;#34;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;  account_id&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;account_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;  project_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;cloudflare_pages_project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;build_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#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;n&#34;&gt;  domain&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pype.dev&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;But turns out the &lt;code&gt;www&lt;/code&gt; record was commented out for some reason in my terraform 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;resource&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cloudflare_pages_domain&amp;#34; &amp;#34;cf_domain_www&amp;#34;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;  account_id&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;account_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;  project_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;cloudflare_pages_project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;build_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#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;n&#34;&gt;  domain&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;www.pype.dev&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;A quick &lt;code&gt;terraform apply -auto-approve&lt;/code&gt; (careful with this) and we&amp;rsquo;re up and&#xA;running with the &lt;code&gt;www&lt;/code&gt; record now&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 “We would be less confidential than Google” – Proton threatens…</title>
    <id>https://pype.dev/thoughts-690/</id>
    <updated>2025-06-13T02:19:29Z</updated>
    <published>2025-06-13T02:19:29Z</published>
    <link href="https://pype.dev/thoughts-690/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been a proton user for several years now, and pay a decently hefty subscription fee for some of their services that</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.techradar.com/vpn/vpn-privacy-security/we-would-be-less-confidential-than-google-proton-threatens-to-quit-switzerland-over-new-surveillance-law?ref=dailydev&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.techradar.com/vpn/vpn-privacy-security/we-would-be-less-confidential-than-google-proton-threatens-to-quit-switzerland-over-new-surveillance-law?ref=dailydev&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - &#34;We would be less confidential than Google&#34; – Proton threatens to quit Switzerland over new surveillance law | TechRadar&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.techradar.com/vpn/vpn-privacy-security/we-would-be-less-confidential-than-google-proton-threatens-to-quit-switzerland-over-new-surveillance-law?ref=dailydev&#34;&gt;&#34;We would be less confidential than Google&#34; – Proton threatens to quit Switzerland over new surveillance law | TechRadar&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;ve been a proton user for several years now, and pay a decently hefty subscription fee for some of their services that I love having access to (multiple domains, email relay, simplelogin, etc.). This privacy impact in Switzerland is concerning and I am definitely biting my nails over the future of this platform&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Exploiting Copilot AI for SharePoint | Pen Test Partners</title>
    <id>https://pype.dev/thoughts-689/</id>
    <updated>2025-06-13T02:17:17Z</updated>
    <published>2025-06-13T02:17:17Z</published>
    <link href="https://pype.dev/thoughts-689/" rel="alternate" type="text/html"></link>
    <summary type="text">In hindsight this vulnerability isn&#39;t even that clever, hopefully the share holders of the companies that rushed to thro</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.pentestpartners.com/security-blog/exploiting-copilot-ai-for-sharepoint/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.pentestpartners.com/security-blog/exploiting-copilot-ai-for-sharepoint/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Exploiting Copilot AI for SharePoint | Pen Test Partners&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.pentestpartners.com/security-blog/exploiting-copilot-ai-for-sharepoint/&#34;&gt;Exploiting Copilot AI for SharePoint | Pen Test Partners&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;In hindsight this vulnerability isn&#39;t even that clever, hopefully the share holders of the companies that rushed to throw AI into everything will make it out ok&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 slash pages</title>
    <id>https://pype.dev/thoughts-688/</id>
    <updated>2025-06-12T11:41:43Z</updated>
    <published>2025-06-12T11:41:43Z</published>
    <link href="https://pype.dev/thoughts-688/" rel="alternate" type="text/html"></link>
    <summary type="text">Waylon&#39;s mentioned slash pages before, but as I work on building my blog again and writing more regularly thanks to &#34;tho</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://slashpages.net/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://slashpages.net/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - slash pages&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://slashpages.net/&#34;&gt;slash pages&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Waylon&#39;s mentioned slash pages before, but as I work on building my blog again and writing more regularly thanks to &#34;thoughts&#34; etc. I&#39;d like to start putting together some meaningful slash pages for myself... I&#39;m not sure what to put out there yet but this thought can serve as a todo for me&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 The Meaning of “Mammon” in the Bible | Matthew 6:24</title>
    <id>https://pype.dev/thoughts-687/</id>
    <updated>2025-06-12T11:03:13Z</updated>
    <published>2025-06-12T11:03:13Z</published>
    <link href="https://pype.dev/thoughts-687/" rel="alternate" type="text/html"></link>
    <summary type="text">I spend a fair amount of time thinking about the future, planning and saving, making sure to the best of my ability and</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://bibleproject.com/videos/vocab-insight-mammon-wealth&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://bibleproject.com/videos/vocab-insight-mammon-wealth&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - The Meaning of “Mammon” in the Bible | Matthew 6:24&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://bibleproject.com/videos/vocab-insight-mammon-wealth&#34;&gt;The Meaning of “Mammon” in the Bible | Matthew 6:24&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I spend a fair amount of time thinking about the future, planning and saving, making sure to the best of my ability and capability right now, that my family is financially taken care of for my whole life and beyond.&#xA;It&#39;s a challenging thing to wrestle with building wealth while understanding Jesus&#39; call to live a life focused on others and Heaven. He certainly never says having wealth is bad or sinful, but the point in this short 1 minute video on mammon was good for me be encouraged by. Mammon (or stuff, possessions, etc) has the tendency to lead people astray into trusting in it... how many times to people straight up freak out when the stock market dips?&#xA;But using mammon to care for others is one of the points of Christian living. God has been good to me, and as we seek to be good to others I pray we (my family and I) are bringing glory to his name and not doing anything for our own vanity&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 N.T. Wright on The Unseen Realm &amp; Heiser - YouTube</title>
    <id>https://pype.dev/thoughts-686/</id>
    <updated>2025-06-12T10:59:29Z</updated>
    <published>2025-06-12T10:59:29Z</published>
    <link href="https://pype.dev/thoughts-686/" rel="alternate" type="text/html"></link>
    <summary type="text">I don&#39;t write enough short thoughts on theology stuff, I&#39;m usually trying to have some longer thought to unpack or to su</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=StRxlVhjH_0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.youtube.com/watch?v=StRxlVhjH_0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - N.T. Wright on The Unseen Realm &amp; Heiser - YouTube&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.youtube.com/watch?v=StRxlVhjH_0&#34;&gt;N.T. Wright on The Unseen Realm &amp; Heiser - YouTube&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I don&#39;t write enough short thoughts on theology stuff, I&#39;m usually trying to have some longer thought to unpack or to summarize a longer teaching. I came across this video this morning after a Bible Project video - I love Michael Heiser, he&#39;s given me such a strong framework for understanding the Bible, and now to see an example of NT Wright talking about him and some of those ideas is really exciting. Wright nails it around 9 minutes in - that the primary point of the supremacy of Jesus, and his victory over the ruling powers from Deut 32, is a great short truth that more Christians needs to learn... Jesus doesn&#39;t magically your life better, he invites you to submit to his authority rather than the authority of the present ruling forces, and yes this does make your life better but only if you are truly submissive to him can you understand &#34;better&#34; appropriately.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 qwen3</title>
    <id>https://pype.dev/thoughts-685/</id>
    <updated>2025-06-11T02:23:23Z</updated>
    <published>2025-06-11T02:23:23Z</published>
    <link href="https://pype.dev/thoughts-685/" rel="alternate" type="text/html"></link>
    <summary type="text">I really don&#39;t know much about every self-hostable LLM out there... so much as happened. I am blessed at home with a pre</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://ollama.com/library/qwen3&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://ollama.com/library/qwen3&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - qwen3&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://ollama.com/library/qwen3&#34;&gt;qwen3&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I really don&#39;t know much about every self-hostable LLM out there... so much as happened. I am blessed at home with a pretty beefy GPU and so although I don&#39;t know all the deets, I can run a lot of the reasonably large &#34;open source&#34; models. The one I&#39;ve been playing with lately is qwen3. The conversational flow has felt more natural with it compared to llama3.2 or dolphin3. Granted I might need to update something and my experience is limited. I&#39;ve also had good experience with gemma3 as a noteworthy contender for my go-to LLM right now in open-webui&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 daily challenge leaderboard | typ.ing</title>
    <id>https://pype.dev/thoughts-682/</id>
    <updated>2025-06-09T13:45:07Z</updated>
    <published>2025-06-09T13:45:07Z</published>
    <link href="https://pype.dev/thoughts-682/" rel="alternate" type="text/html"></link>
    <summary type="text">typ.ing is like monkeytype to a degree. it&#39;s made by ZSA, who makes my keyboard, and I love the idea of a simple trainin</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://typ.ing/stats/daily-challenge&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://typ.ing/stats/daily-challenge&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - daily challenge leaderboard | typ.ing&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://typ.ing/stats/daily-challenge&#34;&gt;daily challenge leaderboard | typ.ing&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;typ.ing is like monkeytype to a degree. it&#39;s made by ZSA, who makes my keyboard, and I love the idea of a simple training tool for getting fluent with my board and keymaps. The daily challenge is a nice little way to earn some internet points, and although I missed a day recently I want to stay consistent with it each morning... someday I&#39;ll hit 130 99% accuracy&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 News - Apps - App Store - Nextcloud</title>
    <id>https://pype.dev/thoughts-680/</id>
    <updated>2025-06-09T11:37:39Z</updated>
    <published>2025-06-09T11:37:39Z</published>
    <link href="https://pype.dev/thoughts-680/" rel="alternate" type="text/html"></link>
    <summary type="text">I just started using FreshRSS to get familiar with subscribing to RSS feeds and leaning into that as opposed to social m</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://apps.nextcloud.com/apps/news&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://apps.nextcloud.com/apps/news&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - News - Apps - App Store - Nextcloud&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://apps.nextcloud.com/apps/news&#34;&gt;News - Apps - App Store - Nextcloud&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I just started using FreshRSS to get familiar with subscribing to RSS feeds and leaning into that as opposed to social media... Twitter has become basically just a news outlet for me, not a place to connect with devs (except for 2 or 3 who are active). RSS seems like such cool and ancient technology that is protected from the corporate tentacles that hold up every social media outlet save for nostr... &#xA;&#xA;So as I look for an RSS reader and/or feed aggregator this Nextcloud plugin seems like a good choice to look at since I&#39;m already hosting NC.. although do I really want to lean into it for more and more?&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 ELEMENT.FM - unlimited podcast hosting</title>
    <id>https://pype.dev/thoughts-679/</id>
    <updated>2025-06-09T11:30:38Z</updated>
    <published>2025-06-09T11:30:38Z</published>
    <link href="https://pype.dev/thoughts-679/" rel="alternate" type="text/html"></link>
    <summary type="text">I heard about element.fm as a possible self-hosted podcast solution. They also have a service that looks pretty nice and</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://element.fm/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://element.fm/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - ELEMENT.FM - unlimited podcast hosting&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://element.fm/&#34;&gt;ELEMENT.FM - unlimited podcast hosting&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I heard about element.fm as a possible self-hosted podcast solution. They also have a service that looks pretty nice and reasonable. As I help Cameron with Pilgrim&#39;s Creek this might be a platform we lean into&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Thoughts</title>
    <id>https://pype.dev/thoughts/</id>
    <updated>2025-06-09T11:30:21Z</updated>
    <published>2025-06-09T11:30:21Z</published>
    <link href="https://pype.dev/thoughts/" rel="alternate" type="text/html"></link>
    <summary type="text">My thoughts are found at my thoughts feed</summary>
    <content type="html">&lt;h1 id=&#34;thoughts&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Thoughts&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;My thoughts are found at &lt;a href=&#34;/my-thoughts&#34;&gt;my thoughts feed&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://thoughts.waylonwalker.com&#34;&gt;thoughts&lt;/a&gt; was built by Waylon and is a place where I drop things not ready for a blog but that I don&amp;rsquo;t want to forget. Waylon created &lt;a href=&#34;https://markata.dev&#34;&gt;Markata&lt;/a&gt; and paired with thoughts I&amp;rsquo;m able to capture much more of my thinking than I could before.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Keynote Speaker - Cory Doctorow - YouTube</title>
    <id>https://pype.dev/thoughts-678/</id>
    <updated>2025-06-08T17:43:16Z</updated>
    <published>2025-06-08T17:43:16Z</published>
    <link href="https://pype.dev/thoughts-678/" rel="alternate" type="text/html"></link>
    <summary type="text">What a great talk - will pull this thought into a post someday but the guy hits like 9 out of 10 on this one, great stuf</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=ydVmzg_SJLw&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.youtube.com/watch?v=ydVmzg_SJLw&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Keynote Speaker - Cory Doctorow - YouTube&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.youtube.com/watch?v=ydVmzg_SJLw&#34;&gt;Keynote Speaker - Cory Doctorow - YouTube&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;What a great talk - will pull this thought into a post someday but the guy hits like 9 out of 10 on this one, great stuff to consider in general&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Example For Andrew</title>
    <id>https://pype.dev/example-for-andrew/</id>
    <updated>2025-06-08T14:48:53Z</updated>
    <published>2025-06-08T14:48:53Z</published>
    <link href="https://pype.dev/example-for-andrew/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250608194801_809d5306.png&#34; alt=&#34;20250608194801_809d5306.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>I built a simple app for adding images to my blog</title>
    <id>https://pype.dev/i-built-a-simple-app-for-adding-images-to-my-blog/</id>
    <updated>2025-06-07T13:30:28Z</updated>
    <published>2025-06-07T13:30:28Z</published>
    <link href="https://pype.dev/i-built-a-simple-app-for-adding-images-to-my-blog/" rel="alternate" type="text/html"></link>
    <summary type="text">I built a simple fastAPI app called &#34;shotput&#34; that I run locally inside a git repo where I save images for my blog. The app is simple:</summary>
    <content type="text">&#xA;# Quick Deets&#xA;&#xA;I built a simple fastAPI app called &#34;shotput&#34; that I run locally inside a git repo where I save images for my blog. The app is simple:&#xA;&#xA;1. upload image from clipboard&#xA;2. app commits image to repo (path is configurable)&#xA;3. app pushes the commit (auto-push configurable)&#xA;4. app returns a markdown link I can paste in my blog that uses statically.io (see [[statically-io-to-help-me-out]]) to serve the image from the repo to my blog&#xA;&#xA;See the image repo with app details at [images.pype.dev](https://github.com/pypeaday/images.pype.dev)&#xA;&#xA;# Usage&#xA;&#xA;Anyone could copy the script and config to their own git repo to put images in&#xA;and run this at home - instructions are in the readme but for simple running on localhost it&#39;s just `uv run`&#xA;&#xA;# Example&#xA;&#xA;![20250607130609_dadd33eb.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250607130609_dadd33eb.png)&#xA;&#xA;pasting an image let&#39;s you copy the markdown link for easy pasting&#xA;&#xA;```markdown&#xA;![20250607130609_dadd33eb.png](https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250607130609_dadd33eb.png)&#xA;```&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Linux Explained: What is The Linux Kernel? - YouTube</title>
    <id>https://pype.dev/thoughts-670/</id>
    <updated>2025-06-07T11:28:18Z</updated>
    <published>2025-06-07T11:28:18Z</published>
    <link href="https://pype.dev/thoughts-670/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m getting sucked into the Linux is a kernel not an operating system crowd because tonight I realized I couldn&#39;t descri</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.youtube.com/watch?si=CFRBAdjtI0x7Pmj7&amp;v=pJ607nDnyE0&amp;feature=youtu.be&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.youtube.com/watch?si=CFRBAdjtI0x7Pmj7&amp;v=pJ607nDnyE0&amp;feature=youtu.be&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Linux Explained: What is The Linux Kernel? - YouTube&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.youtube.com/watch?si=CFRBAdjtI0x7Pmj7&amp;v=pJ607nDnyE0&amp;feature=youtu.be&#34;&gt;Linux Explained: What is The Linux Kernel? - YouTube&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;m getting sucked into the Linux is a kernel not an operating system crowd because tonight I realized I couldn&#39;t describe what a kernel is so I YouTubeda few things and before you know it you joined a decades old war before finishing loading the dishwasher&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 What are these 100.x.y.z addresses? · Tailscale Docs</title>
    <id>https://pype.dev/thoughts-669/</id>
    <updated>2025-06-07T11:27:43Z</updated>
    <published>2025-06-07T11:27:43Z</published>
    <link href="https://pype.dev/thoughts-669/" rel="alternate" type="text/html"></link>
    <summary type="text">I have had serious issues with a whitelist I set in my traefik config and then reaching some services on my tailnet... t</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://tailscale.com/kb/1015/100.x-addresses&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://tailscale.com/kb/1015/100.x-addresses&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - What are these 100.x.y.z addresses? · Tailscale Docs&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://tailscale.com/kb/1015/100.x-addresses&#34;&gt;What are these 100.x.y.z addresses? · Tailscale Docs&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I have had serious issues with a whitelist I set in my traefik config and then reaching some services on my tailnet... turns out I whitelisted 10.64.0.0/10 instead of 100.64.0.0/10 in my traefik configuration file... &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Double check your CIDR blocks!</title>
    <id>https://pype.dev/double-check-your-cidr-blocks/</id>
    <updated>2025-06-07T07:27:31Z</updated>
    <published>2025-06-07T07:27:31Z</published>
    <link href="https://pype.dev/double-check-your-cidr-blocks/" rel="alternate" type="text/html"></link>
    <summary type="text">Copy paste - don&#39;t rely on typing correctly...</summary>
    <content type="html">&lt;h1 id=&#34;tl-dr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;tl;dr&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Copy paste - don&amp;rsquo;t rely on typing correctly&amp;hellip;&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-issue&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Issue&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I use tailscale at home and generally love it. One thing I use it for is&#xA;whitelisting - so I have some apps publically available and my homelab ones&#xA;have DNS with SSL certs by LE but I whitelist to only my private IPs so that I&#xA;can use https at home basically. However I have had a few issues&#xA;with a couple apps, and I kind of chaulked it up to &amp;ldquo;network protocol this&amp;rdquo;&#xA;&amp;ldquo;need to figure out that header that&amp;rdquo; but ultimately I was being lazy and the&#xA;issues weren&amp;rsquo;t catastrophic&amp;hellip; it was things like:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;couldn&amp;rsquo;t get to my NVR by DNS, so I&amp;rsquo;d have to use tailscale_ip:port&lt;/li&gt;&#xA;&lt;li&gt;couldn&amp;rsquo;t login with my user in jellyfin cause I lock me down to LAN only&#xA;since I dont&amp;rsquo; use a password&lt;/li&gt;&#xA;&lt;li&gt;gotify wouldn&amp;rsquo;t connect using DNS&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;These things aren&amp;rsquo;t huge but they are annoying and today I decided to figure it out.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;typo&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Typo!&lt;/span&gt; &lt;a href=&#34;#typo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not an expert yet but I think the main problem was the CIDR block I was&#xA;using in my traefik config.&lt;/p&gt;&#xA;&lt;p&gt;This&amp;rsquo;ll shock some of you but &lt;code&gt;10.64.0.0/10&lt;/code&gt; and &lt;code&gt;100.64.0.0/10&lt;/code&gt; are not the&#xA;same blocks!&lt;/p&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Check your CIDRs&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s always DNS, and even when it&amp;rsquo;s not, it&amp;rsquo;s still probably networking&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>I love an expert in their craft</title>
    <id>https://pype.dev/i-love-an-expert-in-their-craft/</id>
    <updated>2025-06-06T19:38:13Z</updated>
    <published>2025-06-06T19:38:13Z</published>
    <link href="https://pype.dev/i-love-an-expert-in-their-craft/" rel="alternate" type="text/html"></link>
    <summary type="text">Our AC died, or has been showing signs of dying recently, and regardless of the finality of its death, our house hasn&#39;t been getting super cold... The...</summary>
    <content type="html">&lt;h1 id=&#34;presence-of-an-expert&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Presence of an Expert&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Our AC died, or has been showing signs of dying recently, and regardless of the&#xA;finality of its death, our house hasn&amp;rsquo;t been getting super cold&amp;hellip; The&#xA;condenser unit is from 1991, making it 34 years old at the time of this post&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;The reason I&amp;rsquo;m writing though is that I was presented with a nice moment of&#xA;reflection when the HVAC guy who came over to service our unit was talking to&#xA;me about his diagnostic process. I wouldn&amp;rsquo;t even try to regurgiate everything&#xA;because I barely understood it, something about a valve being stuck and not&#xA;allowing enough refrigerant through was the root cause of the issue&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Anyways, the root cause aside, this guy KNEW HVAC&amp;hellip; it was clear. He&#xA;understood every aspect of my AC and furnace within a few minutes of being in&#xA;the basement. And that was a surreal moment, to realize I was in the presence&#xA;of an absolute expert - just not in anything I could remotely understand.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-rest&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Rest&lt;/span&gt; &lt;a href=&#34;#the-rest&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t know what more there is to reflect&amp;hellip; I don&amp;rsquo;t want to make something all about how I&amp;rsquo;m actually an expert in my own fields&amp;hellip; because that&amp;rsquo;s not always true&amp;hellip; but it&amp;rsquo;s also not never true&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;So without arguing myself into oblivion I just want to throw out there that you should try to be an expert in what you do - and you might even encourage someone simply by being that expert&amp;hellip; I think I&amp;rsquo;m often afraid I&amp;rsquo;m going to sound arrogant or something when explaining a concept in my field, and maybe it&amp;rsquo;s dependent on the audience, but listening to this guy just effortlessly step through the mechanics of my air-con problem was an enjoyable experience.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Find joy?&lt;/p&gt;&#xA;&lt;p&gt;As a final attempt to make this a blog post - a final comment might be that&#xA;it&amp;rsquo;s ok to find joy in something, especially if you become an expert in it,&#xA;and that expertise might itself bring joy to someone else&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>homelab-journey-part-1</title>
    <id>https://pype.dev/homelab-journey-part-1/</id>
    <updated>2025-06-05T08:19:57Z</updated>
    <published>2025-06-05T08:19:57Z</published>
    <link href="https://pype.dev/homelab-journey-part-1/" rel="alternate" type="text/html"></link>
    <summary type="text">I want to start writing about my homelab and this first post can be a short introduction to how I got into homelabbing and a review of my current hardware....</summary>
    <content type="text">&#xA;# Introduction&#xA;&#xA;I want to start writing about my homelab and this first post can be a short&#xA;introduction to how I got into homelabbing and a review of my current hardware.&#xA;I&#39;ll hopefully write about the evolution of my homelab to get to this&#xA;current point and then start writing about updates as new things hit the lab.&#xA;&#xA;# The Journey&#xA;&#xA;## Applications | Pi-Hole&#xA;&#xA;I started with a pi-hole appliance running on a pi-0 I&#xA;had lying around. So, a little introduction into SSH and foreign operating&#xA;systems (I was loosely familiar with Linux and so Raspbian wasn&#39;t a huge deal&#xA;to start with) and then you could just [install pi-hole](https://docs.pi-hole.net/main/basic-install/).&#xA;After installing it I got to learn a little bit about networking, DNS, DHCP,&#xA;etc. all from just exploring and trying out the features of pi-hole.&#xA;&#xA;## Hardware&#xA;&#xA;From there I happened to come into a few computers kind of for free that a church was&#xA;recycling and so now with new-to-me x86 hardware and armed with a tiny bit of&#xA;docker experience at work - I thought &#34;well I wonder if I could run pi-hole in&#xA;docker on a Linux machine?&#34; and that opened the door to running other things in docker.&#xA;&#xA;# Applications | Free-NAS&#xA;&#xA;I quickly decided I wanted a NAS after talking with a friend at work, and one&#xA;of those computers that I inherited was the perfect target for Freenas by iX&#xA;systems (Freenas has since morphed into a few things - primarily TrueNAS Core&#xA;for the homelabber). That got me somewhat familiar with jails (which is a BSD&#xA;concept as FreeNAS was based on FreeBSD, not Linux) and running&#xA;containers in different ways and then I decided I wanted Linux so I rebuilt with&#xA;Ubuntu.&#xA;&#xA;!!! note &#34;&#34;&#xA;&#xA;    there&#39;s been several hardware changes and such in there but that&#xA;    does more or less get me to arrive at where I&#39;m at today which is I have a&#xA;    few different boxes running pretty standard operating systems for their&#xA;    purposes and they are as follows.&#xA;&#xA;# Current Homelab Setup&#xA;&#xA;!!! note &#34;Find updated information at [[the-homelab]]&#34;&#xA;&#xA;## Ad blocking | Pi-Hole&#xA;&#xA;Hardware: pi-3&#xA;&#xA;I have a Raspberry Pi 3 hardwired in that is running pi-hole so that&#39;s been a&#xA;part of my infrastructure now for a long time.&#xA;&#xA;## Router | OPNSense&#xA;&#xA;!!! note &#34;stats&#34;&#xA;&#xA;    CPU: i5-8700&#xA;&#xA;    Memory: 8GB of whatever was in the box&#xA;&#xA;    Storage: 1TB SSD&#xA;&#xA;My router is an old Optiplex SFF 5060 I got from Amazon for less than $100.&#xA;So I&#39;m running a x86 system for my router with&#xA;OpenSense on it. Just seemed it to be another home lab standard and I&#39;d like to&#xA;someday bring pi-hole over there or use AdGuard or integrate those two things&#xA;maybe a little bit more completely but right now they are mostly separate.&#xA;&#xA;## Networking | VLANs&#xA;&#xA;There&#39;s a&#xA;managed switch in there for some VLAN tomfoolery for my cameras and an IOT&#xA;network type of a thing.&#xA;&#xA;## Networking | VPN | Tailscale&#xA;&#xA;They&#39;re on tailscale as well so my DNS happens over tailscale.&#xA;&#xA;## My Desktop&#xA;&#xA;!!! note &#34;stats&#34;&#xA;&#xA;    CPU: Ryzen 7 5700X&#xA;&#xA;    GPU: Nvidia 3090&#xA;&#xA;    Memory: 64 GB&#xA;&#xA;    Storage: 4TB SSD + 2 TB HDD for zfs backup&#xA;&#xA;    OS: Universal Blue Aurora&#xA;&#xA;My daily-driver desktop is somewhat apart of my homelab now as I have a 3090 in&#xA;there with 20 GB of VRAM so I can run some heavier LLMs for self-hosted AI&#xA;workloads. Everything in that space runs in a container and then I manage&#xA;docker containers with compose stacks and portainer for visibility.&#xA;&#xA;### Applications&#xA;&#xA;Some of the apps I run here are ollama, open-webui, automatic1111&#39;s stable diffusion webui, whisper-webui&#xA;&#xA;## NAS / Server&#xA;&#xA;!!! note &#34;stats&#34;&#xA;&#xA;    CPU: Ryzen 7 5700G&#xA;&#xA;    GPU: None right now&#xA;&#xA;    Memory: 128 GB&#xA;&#xA;    Storage: 2x12 TB ZFS Mirror + another 2x12 TB ZFS Mirror + 500GB disk for NVR&#xA;&#xA;    OS: Ubuntu Server 24.04&#xA;&#xA;At the moment I am managing containers using Docker Compose stacks. Many&#xA;applications have their own stack but then I also have stacks of many&#xA;applications. The Compose files are all organized by host and they&#39;re in git&#xA;and I use GitHub as my main get back and remote storage.&#xA;&#xA;### Applications&#xA;&#xA;There are currently 74 containers running on my server, I will not list them all but here&#39;s some highlights:&#xA;&#xA;- traefik&#xA;- portainer&#xA;- nextcloud&#xA;- jellyfin&#xA;- \*arr stack&#xA;- code-server&#xA;- kanboard&#xA;&#xA;I regularly spin up compose stacks to try new things as I hear about them in&#xA;newsletters and such - I will be making an attempt to write about them more&#xA;frequently in a homelabbing series&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Autism ADHD and the Doshas</title>
    <id>https://pype.dev/autism-adhd-and-the-doshas/</id>
    <updated>2025-06-05T07:28:42Z</updated>
    <published>2025-06-05T07:28:42Z</published>
    <link href="https://pype.dev/autism-adhd-and-the-doshas/" rel="alternate" type="text/html"></link>
    <summary type="text">I was recently diagnosed with Autism Spectrum Disorder Level 1 and ADHD, the inattentive type. I suppose, AuDHD for short. There are many reasons why I now...</summary>
    <content type="html">&lt;h1 id=&#34;introduction&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Introduction&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I was recently diagnosed with Autism Spectrum Disorder Level 1 and ADHD, the inattentive&#xA;type. I suppose, AuDHD for short.&#xA;There are many reasons why I now have this official label of AuDHD, not that I&#xA;was hoping for it, but due to a childhood behavioral disorder diagnosis and a&#xA;desire to understand myself better, I decided to start considering that something&#xA;in my childhood issue was misunderstood.&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;p&gt;But what started as simply considering some new diagnosis turned into a&#xA;larger worldview shift when it comes to medicine and how we treat people for&#xA;things we label disorderly.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;personal-history&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Personal History&lt;/span&gt; &lt;a href=&#34;#personal-history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A brief history lesson for context is that I was diagnosed with bipolar&#xA;disorder, but not specifically type 1 or type 2. This diagnosis came about two&#xA;times, once in my late childhood and again when I was 19.&#xA;The diagnosis never made a ton of sense to me, but it seemed to almost match some of&#xA;the things that my mom specifically was concerned about.&#xA;There is another point for later on, which is that part of me wanted to be bipolar.&#xA;I felt like it would be cool, but also it made me special.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;bias&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s no way that this desire didn&amp;rsquo;t turn into massive confirmation bias&#xA;in getting this diagnosis as a kid and as a late teenager.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Once I started kind of thinking &lt;em&gt;for myself&lt;/em&gt; a little bit - the bipolar diagnosis&#xA;was one of my first spiritual challenges in understanding the brokenness of&#xA;humanity.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-challenge&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Challenge&lt;/span&gt; &lt;a href=&#34;#the-challenge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I believe in an orderly God, the creator of all things, who makes things both&#xA;soundly and reasonable. Mental health is complex because it&amp;rsquo;s not like a broken&#xA;arm, throw a cast on, and wait&amp;hellip; Taking medicine felt almost antithetical to&#xA;my worldview because I had a deep desire to see&#xA;something miraculous. So, I backed myself into this odd worldview where I&#xA;taking medicine must be fighting something that God wants to do in me with this&#xA;brokenness. I felt like I was trying to do something maybe God didn&amp;rsquo;t want me to&#xA;do, but was also wrestling with &amp;ldquo;but if something&amp;rsquo;s really wrong (which is&#xA;possible because we live in a broken world) God gifts these doctors to come up&#xA;with this medicine to help heal some of the brokenness.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;So I had these two competing ideas that were very loud in my head.&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;p&gt;In hindsight, an AuDHD diagnosis somewhat explains this behavior of mine.&#xA;Wherein I wanted to be sick, and I had these competing ideas about the&#xA;character of God.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;So I&amp;rsquo;ve been more at less at peace with the idea that behavior disorders are&#xA;apart of life for many people - and that medical treatment can be helpful.&lt;/p&gt;&#xA;&lt;h1 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;As I&amp;rsquo;ve gotten older and reflected on being bi-polar I couldn&amp;rsquo;t help but notice&#xA;that hardly any part of the atypical&#xA;pieces of myself matched up with bi-polar at all&amp;hellip; Around the time I started&#xA;to notice this my wife began wondering if I had something more akin to ADD. We&#xA;didn&amp;rsquo;t really understand what that meant, or how it has changed over the years,&#xA;or any of it - but based on some initial stereotypes ADHD began to become a&#xA;common thing we discussed&#xA;After some more legitimate research we both became pretty convinced that I was&#xA;measurably on the Autism Spectrum and that certainly there were ADHD tendencies&#xA;that negatively affected my life. I talked with my doctor and after several&#xA;psych evaluations it turns out that my self-diagnosis was consistent with the&#xA;conclusion of the evaluation. So if this was the end then my thought would&amp;rsquo;ve&#xA;been&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;I&#39;m not bi-polar&lt;/p&gt;&#xA;&lt;p&gt;ok I&amp;rsquo;m not bi-polar, I&amp;rsquo;m AuDHD - there&amp;rsquo;s some coping mechanisms I can&#xA;learn now and things make sense.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;However, this wasn&amp;rsquo;t the end for me - getting diagnosed with AuDHD&#xA;didn&amp;rsquo;t/hasn&amp;rsquo;t changed my life - it&amp;rsquo;s given me a framework by which I can&#xA;understand myself in the context of our&#xA;Western world better.&#xA;But there&amp;rsquo;s a lot more here and as we look ahead, I want to be clear that I&#xA;take no special pride in the AuDHD label&amp;hellip;&#xA;I&amp;rsquo;ll talk about myself with this label as a way of communicating with people who&#xA;understand it, but the main point of this post will be in how understanding&#xA;myself as a human being more holistically led to a different point of view of&#xA;what the West calls neurodivergencies.&lt;/p&gt;&#xA;&lt;h1 id=&#34;treatment&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Treatment&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I have been taking a light mood stabilizer for a while now per my former&#xA;bi-polar diagnosis. There&amp;rsquo;s no doubt that it is coincidentally a helpful tool&#xA;in coping with some debilitating aspects of AuDHD but the more I reflect the&#xA;more I want to get away from it - personally.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not sure what to think about treatment overall&amp;hellip; I recognize that some folks are&#xA;much more negatively affected by the tendencies we label as neurodivergent and&#xA;that there are meaningful changes that can come from modern western medicine.&#xA;However, there&amp;rsquo;s also old/ancient and natural solutions to many problems that I&#xA;think are often overlooked&lt;/p&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Simple doesn&#39;t mean easy&lt;/p&gt;&#xA;&lt;p&gt;often exercise and cleaner eating can treat depression and anxiety for&#xA;example. That doesn&amp;rsquo;t mean the anxiety wasn&amp;rsquo;t significant or legitimate, but&#xA;it&amp;rsquo;s not like a pharmaceutical is the only option for treating something&#xA;legitimate.&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;The other side&lt;/p&gt;&#xA;&lt;p&gt;I also see that obviously there are severe cases of Autism - I think we&#xA;should better understand where that comes from, and I wouldn&amp;rsquo;t ever claim&#xA;that just drinking some tea and figuring out an exercise regime can cure&#xA;something that is fully debilitating.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Las drogas&lt;/p&gt;&#xA;&lt;p&gt;I think where I have the biggest issues with &amp;ldquo;treatment&amp;rdquo; is that taking&#xA;mental health medication is a fad today&amp;hellip; it doesn&amp;rsquo;t mean it&amp;rsquo;s not helpful,&#xA;but our culture glorifies taking drugs as long as they come from a&#xA;pharmaceutical company. I&amp;rsquo;ve personally come across this as I&amp;rsquo;ve shared my&#xA;struggles and official AuDHD diagnosis with some friends -  and it&amp;rsquo;s clear that&#xA;some of them give these ads and medicines every ounce of their faith and&#xA;that&amp;rsquo;s frankly concerning in its own way&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;two-systems-east-v-west&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Two Systems | East v West&lt;/span&gt; &lt;a href=&#34;#two-systems-east-v-west&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve become critical of the modern Western perspective on neurodivergence&#xA;and mental/behavioral health. It&amp;rsquo;s primarily that I&amp;rsquo;d be much less skeptical if&#xA;it wasn&amp;rsquo;t for all the money&amp;hellip; I notice patterns as well that I don&amp;rsquo;t find&#xA;comforting - such as the focus on symptoms and isolated treatment of them or&#xA;groups of symptoms rather than looking at a human-being as an entire organism or&#xA;system.&#xA;I know that certain pieces of a system can break, and sometimes treating&#xA;those isolated breakages is the way to go - but also we (in the West) seem to&#xA;avoid thinking about ourselves as 1 whole thing&amp;hellip; There&amp;rsquo;s language that&#xA;younger people use about their &amp;ldquo;whole self&amp;rdquo; but honestly I only see them talk&#xA;about sexuality as if that defined everything about a person&amp;hellip; that&amp;rsquo;s 100% not&#xA;what I have in mind here&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Every one of my psychiatric appointments up through the last few years had never&#xA;sought to get me off my medication&amp;hellip; It got me thinking the goal was for me to be&#xA;a customer for life. I don&amp;rsquo;t like being reliant on anything external and the&#xA;fact that there was never a goal for me to be self-sufficient in my own health&#xA;became troubling.&lt;/p&gt;&#xA;&lt;p&gt;My philosophical issues arising with our modern medical systems have led me&#xA;to becoming more open to Eastern medicine and as I explore how those systems&#xA;have historically analyzed patterns and attributed those patterns to different&#xA;ways of thinking, I think the pattern-analysis and subsequent recommendations&#xA;can be extremely valuable. This is where adaptogens come in for me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lifestyle-changes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Lifestyle Changes&lt;/span&gt; &lt;a href=&#34;#lifestyle-changes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;d heard of Lion&amp;rsquo;s Mane via some Joe Rogan clips (have become a bigger and&#xA;bigger fan of him over the last few years), and then got a subscription to&#xA;FourSigmatic which is a coffee company that offers mushroom-replacement and&#xA;supplements for coffee and tea basically. So I&amp;rsquo;m drinking coffee with Lion&amp;rsquo;s&#xA;Mane, and have added a few other mushroom tinctures with Reishi and Chaga&#xA;specifically, as well as Eleuthero and Turkey Tail as a means of introducing&#xA;adaptogens into my routine and maybe it&amp;rsquo;s confirmation bias again, but as I&amp;rsquo;ve&#xA;gone on and off the Lion&amp;rsquo;s Mane specifically I notice a significant difference&#xA;in my cognitive function&amp;hellip; When I&amp;rsquo;m diligent about putting the Lion&amp;rsquo;s Mane&#xA;tincture into my coffee in the morning it is like unlocking on-demand&#xA;hyper-focus some mornings&amp;hellip;&lt;/p&gt;&#xA;&lt;h1 id=&#34;wrapping-it-up&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Wrapping It Up&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;This post is mostly a stream-of-consciousness as I reflect on the atpypical&#xA;nature of much of my life, how that fits into the modern Western discourse of&#xA;mental health, and how the Western perspective might end up not being a helpful lens&#xA;through which to process these behavioral issues.&lt;/p&gt;&#xA;&lt;p&gt;With sufficient context, a faithful summary of my journey is that I don&amp;rsquo;t mind being labeled as AuDHD - there&amp;rsquo;s plenty that&amp;rsquo;s helpful with it. However if an Ayuverdic Shaman &amp;ldquo;diagnosed&amp;rdquo; me as a person whose elemental make up was primarily earthy and watery with an odd flare of fire, and that elemental make-up is what explains some of my tendencies (needing to know the correct answer, tunnel-vision and hyper-focus, literal understanding of the world, etc.) then I want to understand that with the same amount of &amp;ldquo;weight&amp;rdquo; as being AuDHD..&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;p&gt;At the end of the day there&amp;rsquo;s multiple ways to label people based on&#xA;observation - either at the micro or macro levels of humanity. I don&amp;rsquo;t think&#xA;that the Western systems of medicine get everything right, and the Eastern&#xA;models have been around for thousands more years so I want to treat them with&#xA;an equal amount of respect and validity&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Backups interrupted by full disk usage</title>
    <id>https://pype.dev/backups-interrupted-by-full-disk-usage/</id>
    <updated>2025-06-03T21:08:50Z</updated>
    <published>2025-06-03T21:08:50Z</published>
    <link href="https://pype.dev/backups-interrupted-by-full-disk-usage/" rel="alternate" type="text/html"></link>
    <summary type="text">I just got a message from HCIO that my primary backup script is late... This happens every now and then but I decided to check on it... Quickly in and I...</summary>
    <content type="html">&lt;p&gt;I just got a message from HCIO that my primary backup script is late&amp;hellip; This&#xA;happens every now and then but I decided to check on it&amp;hellip; Quickly &lt;code&gt;ssh&lt;/code&gt; in and&#xA;I notice it takes a long time to connect, but nothing errors out&amp;hellip; I&amp;rsquo;ve been&#xA;in the game long enough to think this kind of latency is often disk IO. After&#xA;waiting a bit and haulting the zshrc sourcing, I hit a &lt;code&gt;sudo dust / -H&lt;/code&gt; and bam&amp;hellip;&#xA;There&amp;rsquo;s a container logfile that&amp;rsquo;s about 80GB sitting in &lt;code&gt;/var&lt;/code&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  75G   │ │ │ │   ┌── 57409a7f8d3168b368e0230babd08ec2e20aabb288806aa13652db1e653a0eee-json.log&#xA;  75G   │ │ │ │ ┌─┴ 57409a7f8d3168b368e0230babd08ec2e20aabb288806aa13652db1e653a0eee           &#xA;  76G   │ │ │ ├─┴ containers                                                                   &#xA;  83G   │ │ ├─┴ docker                                                                         &#xA;  85G   │ ├─┴ lib                                                                              &#xA;  90G   ├─┴ var                                                                                &#xA; 117G ┌─┴ /&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Easy enough to remove, but I need to setup some alerts on disk usage, and&#xA;identify the container to limit the log file size&lt;/p&gt;&#xA;&lt;div class=&#34;admonition info&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Useful Notifications&lt;/p&gt;&#xA;&lt;p&gt;I use healthchecks.io to monitor several scripts. You can self-host it but&#xA;I use the hosted service since he has simple Signal integration&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Windows Update Broke Wifi</title>
    <id>https://pype.dev/windows-update-broke-wifi/</id>
    <updated>2025-06-01T14:30:43Z</updated>
    <published>2025-06-01T14:30:43Z</published>
    <link href="https://pype.dev/windows-update-broke-wifi/" rel="alternate" type="text/html"></link>
    <summary type="text">After an unapproved windows update on a machine I help administer for my church, the wifi became super finnicky. I had installed a pretty standard AX5400...</summary>
    <content type="html">&lt;h1 id=&#34;windows-update-behind-my-back&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Windows Update Behind My Back&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;After an unapproved windows update on a machine I help administer for my church, the wifi&#xA;became super finnicky. I had installed a pretty standard AX5400 WiFi 6 PCIe&#xA;adapter and things were great for a while.&lt;/p&gt;&#xA;&lt;h2 id=&#34;isp-and-top-tier-laziness&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;ISP and Top-Tier Laziness&lt;/span&gt; &lt;a href=&#34;#isp-and-top-tier-laziness&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The ISP installed the modem and router/AP combo all in one room encased in CMU block in the basement&amp;hellip;&#xA;That is in the worst possible spot in the entire building and the Windows&#xA;computer of note is as far away from it as possible - but we were cooking just fine with that PCIe card.&#xA;Suddenly though, after the update and reboot the machine quit receiving an IPv4&#xA;address via that interface&amp;hellip; Many applications broke in odd ways, and the&#xA;browser connected to some websites but not others.&lt;/p&gt;&#xA;&lt;h2 id=&#34;state-matters&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;State Matters&lt;/span&gt; &lt;a href=&#34;#state-matters&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It took a lot of troubleshooting because of 2 things in the mix&amp;hellip;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tailscale&lt;/li&gt;&#xA;&lt;li&gt;A second Wi-Fi adapter via USB dongle that was installed while I was out of town (due to the WiFi issues)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So because of these 2 things, and mostly the USB adapter I think, we saw odd&#xA;behavior that was inconsistent and hard to explain. After having sorted through a bit, I think the intermittent nature of the problems was due to the USB dongle getting an IPv4 address when the connectivity via the default interface was messed up - I can&amp;rsquo;t claim to know if or how Windows would handle this, but it&amp;rsquo;s the only thing that makes sense to me as to why some of the appliations would work and then randomly fail - it&amp;rsquo;s the USB dongle losing connection&amp;hellip; The extra layer is that the bad NIC (the PCIe card) was getting an IPv6 address so the internet connectivity worked EXCEPT FOR THINGS ON MY TAILNET - for example the Nextcloud instance the church backs some data up to&amp;hellip; So the issues were hard to pin-point.&lt;/p&gt;&#xA;&lt;h2 id=&#34;medium-term-plan&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Medium Term Plan…&lt;/span&gt; &lt;a href=&#34;#medium-term-plan&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Our medium term plan is to move the AP of the church to somewhere more&#xA;convenient after we figure out busting through some concrete walls&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Queso Notes</title>
    <id>https://pype.dev/queso-notes/</id>
    <updated>2025-05-31T19:14:30Z</updated>
    <published>2025-05-31T19:14:30Z</published>
    <link href="https://pype.dev/queso-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">It occured to me that this is my blog... I can write about whatever the heck I want!</summary>
    <content type="html">&lt;p&gt;It occured to me that this is my blog&amp;hellip; I can write about whatever the heck I want!&lt;/p&gt;&#xA;&lt;h2 id=&#34;may-2025&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;May 2025&lt;/span&gt; &lt;a href=&#34;#may-2025&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Made 2 quesos very similar - they consisted of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1.5 lbs ground beef&lt;/li&gt;&#xA;&lt;li&gt;2 lbs Velveeta (queso blanco or original)&lt;/li&gt;&#xA;&lt;li&gt;~ 0.75 lbs Pepper Jack&lt;/li&gt;&#xA;&lt;li&gt;~ 0.75 lbs Chedder&lt;/li&gt;&#xA;&lt;li&gt;16 oz diced tomatoes&lt;/li&gt;&#xA;&lt;li&gt;8 oz diced chilis&lt;/li&gt;&#xA;&lt;li&gt;6 oz. jar of sliced jalepenos (for the queso blanco)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I basically browned the meat, and combined everything in a foil pan and smoked&#xA;for an hour or 2, stirring regularly.&lt;/p&gt;&#xA;&lt;p&gt;The Queso Blanco one was a little runnier, no doubt due to the added jalepenos.&#xA;Both queso&amp;rsquo;s turned out pretty good but could definitely use a lot more heat. I&#xA;seasoned the meat with some salt, pepper, garlic, onion powder, cumin. We could&#xA;add jalepenos to regular queso for the flavor since there was almost no heat,&#xA;and then add serrano or something to the queso blanco to turn the heat up next&#xA;time.&lt;/p&gt;&#xA;&lt;p&gt;Stay tuned to this post somehow for the next update!&lt;/p&gt;&#xA;&lt;p&gt;Q: How to start a series?&#xA;Q: Does RSS update if a post is updated?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Backups are dope</title>
    <id>https://pype.dev/backups-are-dope/</id>
    <updated>2025-05-27T19:42:27Z</updated>
    <published>2025-05-27T19:42:27Z</published>
    <link href="https://pype.dev/backups-are-dope/" rel="alternate" type="text/html"></link>
    <summary type="text">I accidently chown&#39;d -R an app directory and it totally screwed up the database folder. Luckily I zfs replicate my docker volumes to another drive even on...</summary>
    <content type="text">&#xA;I accidently chown&#39;d -R an app directory and it totally screwed up the database&#xA;folder. Luckily I zfs replicate my docker volumes to another drive even on the&#xA;same host, so a quick [rsync] from /harbor/encrypted/docker/manyfold to&#xA;/tank/encrypted/docker/manyfold got me back up and running since I hadn&#39;t&#xA;replicated the messed up permission set yet&#xA;&#xA;Q: How to link to my rsync like a pro post?&#xA;&#xA;A: Wikilinks `[[rsync-like-a-pro]]` [[rsync-like-a-pro]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Aurora U-Blue ZRAM Config</title>
    <id>https://pype.dev/aurora-u-blue-zram-config/</id>
    <updated>2025-05-27T13:51:27Z</updated>
    <published>2025-05-27T13:51:27Z</published>
    <link href="https://pype.dev/aurora-u-blue-zram-config/" rel="alternate" type="text/html"></link>
    <summary type="text">I keep running out of space with my swap getting maxxed out... I don&#39;t know why but U-Blue uses Zram already and apparently I can easily override the defaults:</summary>
    <content type="html">&lt;p&gt;I keep running out of space with my swap getting maxxed out&amp;hellip; I don&amp;rsquo;t know why but U-Blue uses Zram already and apparently I can easily override the defaults:&lt;/p&gt;&#xA;&lt;p&gt;in &lt;code&gt;usr/lib/systemd/zram-generator.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;&#xA;# This config file enables a /dev/zram0 device with the default settings:&#xA;# — size — same as available RAM or 8GB, whichever is less&#xA;# — compression — most likely lzo-rle&#xA;#&#xA;# To disable, uninstall zram-generator-defaults or create empty&#xA;# /etc/systemd/zram-generator.conf file.&#xA;[zram0]&#xA;zram-size = min(ram, 8192)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And so I just made my own file in &lt;code&gt;/etc/systemd/zram-generator.conf&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;&#xA;[zram0]&#xA;zram-size = min(ram, 16384)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>I Hate Corporate America</title>
    <id>https://pype.dev/i-hate-corporate-america/</id>
    <updated>2025-05-27T08:11:52Z</updated>
    <published>2025-05-27T08:11:52Z</published>
    <link href="https://pype.dev/i-hate-corporate-america/" rel="alternate" type="text/html"></link>
    <summary type="text">The longer I&#39;m in corporate America - and the longer I homelab and listen to podcasts - a cliché truth becomes more and more apparent to me, which is a lot...</summary>
    <content type="html">&lt;h1 id=&#34;rant&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Rant&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;The longer I&amp;rsquo;m in corporate America - and the longer I homelab and listen to&#xA;podcasts - a cliché truth becomes more and more apparent to me, which&#xA;is a lot of people are full of bullshit, and a lot of initiatives are built on&#xA;nothing, and a lot of people feel the need to be/feel important.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Danger&lt;/p&gt;&#xA;&lt;p&gt;That makes it hard to do things and find things that are actually valuable.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;So, for this rant to be healthy I suppose I&amp;rsquo;ll muse for a little while on&#xA;finding things of value in these contexts that suck.&lt;/p&gt;&#xA;&lt;p&gt;I want to be thankful for finding things that matter when I&amp;rsquo;m&#xA;forced to participate in contexts that I think are stupid.&lt;/p&gt;&#xA;&lt;h1 id=&#34;redemption&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Redemption&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;So what good has come? The first is financial blessing - I hate that money runs&#xA;the worls, but God has given me a skill-set where the work does afford a&#xA;moderately comfortable life.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve met some good friends of faith through the machine that is corporate America,&#xA;and the friendships are a source of regular encouragement via The Boys Chat.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve also met a couple friends of tech (so to speak) and through those&#xA;friendships I&amp;rsquo;ve discovered fun hobbies which have affected&#xA;my family life and home in very positive ways.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ending the rant&lt;/p&gt;&#xA;&lt;p&gt;There can be good redeeming things anywhere, and it&amp;rsquo;s kind of a meme to hate&#xA;corporate America this much, but I really do and I look forward to Heaven&#xA;coming to Earth fully. Until then, gratitude is a good daily practice&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pandas.DataFrame info always answers and is sometimes right</title>
    <id>https://pype.dev/pandas-dataframe-info-always-answers-and-is-sometimes-right/</id>
    <updated>2025-05-26T09:08:08Z</updated>
    <published>2025-05-26T09:08:08Z</published>
    <link href="https://pype.dev/pandas-dataframe-info-always-answers-and-is-sometimes-right/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned that the of a will always give you an answer, but it is wildly difficult to know how accurate it is, because it depends on the underlying...</summary>
    <content type="html">&lt;h1 id=&#34;til&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TIL&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Today I learned that the &lt;code&gt;.info()&lt;/code&gt; of a &lt;code&gt;pandas.DataFrame&lt;/code&gt; will always&#xA;give you an answer, but it is wildly difficult to know how accurate it is, because it depends&#xA;on the underlying data types.&#xA;If everything is a NumPy Dtype, then the result you get is the amount of memory NumPy is using&#xA;under the hood, which is very accurate.&#xA;But as soon as you have something like a Python string in the data frame, now pandas will&#xA;tell you how much memory the NumPy data types are using, and it will give you some quick&#xA;estimate of how much memory space the Python string types are using because numpy is just storing&#xA;a pointer to that data in memory, but this is far less&#xA;accurate because it doesn&amp;rsquo;t actually know what the strings are.&lt;/p&gt;&#xA;&lt;h2 id=&#34;memory-usage-deep-or-true&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Memory Usage Deep or True&lt;/span&gt; &lt;a href=&#34;#memory-usage-deep-or-true&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To get an honest answer about a DataFrame&amp;rsquo;s memory usage, you need to pass &lt;code&gt;memory_usage=&#39;deep&#39;&lt;/code&gt; to the &lt;code&gt;.info()&lt;/code&gt; method.&lt;/p&gt;&#xA;&lt;pre class=&#34;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 default&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 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;50&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: df.info&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;memory_usage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;class &lt;span class=&#34;s1&#34;&gt;&amp;#39;pandas.core.frame.DataFrame&amp;#39;&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;RangeIndex: &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; entries, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; to &lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Data columns &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;total &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; columns&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;#   Column  Non-Null Count  Dtype &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---  ------  --------------  ----- &#xA;&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;   s1      &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; non-null     int64 &#xA;&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;   s2      &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; non-null     int64 &#xA;&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;2&lt;/span&gt;   s3      &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; non-null     object&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dtypes: int64&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, object&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;memory usage: 372.0+ bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice that the memory usage has a &lt;code&gt;+&lt;/code&gt; in it? You can force a deeper analysis by passing &lt;code&gt;memory_usage=&#39;deep&#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;In &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;51&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: df.info&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;memory_usage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;deep&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;&amp;lt;class &lt;span class=&#34;s1&#34;&gt;&amp;#39;pandas.core.frame.DataFrame&amp;#39;&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;RangeIndex: &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; entries, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; to &lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Data columns &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;total &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; columns&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;#   Column  Non-Null Count  Dtype &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---  ------  --------------  ----- &#xA;&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;   s1      &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; non-null     int64 &#xA;&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;   s2      &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; non-null     int64 &#xA;&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;2&lt;/span&gt;   s3      &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; non-null     object&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dtypes: int64&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, object&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;memory usage: 792.0 bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 SearXNG | Open WebUI</title>
    <id>https://pype.dev/thoughts-643/</id>
    <updated>2025-05-25T11:21:40Z</updated>
    <published>2025-05-25T11:21:40Z</published>
    <link href="https://pype.dev/thoughts-643/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been meaning to set searxng for a while - it comes out of the box with khoj but I want an instance for open-webui a</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://docs.openwebui.com/tutorials/web-search/searxng/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://docs.openwebui.com/tutorials/web-search/searxng/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - SearXNG | Open WebUI&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://docs.openwebui.com/tutorials/web-search/searxng/&#34;&gt;SearXNG | Open WebUI&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;ve been meaning to set searxng for a while - it comes out of the box with khoj but I want an instance for open-webui as I get serious about deciding on a self-hosted AI tool-chain solution. It look like the setup for open-webui is a touch more than &#34;docker compose up&#34; so it&#39;ll take probably 15-20 minutes of dedicated time to try this out&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>SearXNG</title>
    <id>https://pype.dev/searxng/</id>
    <updated>2025-05-25T08:33:10Z</updated>
    <published>2025-05-25T08:33:10Z</published>
    <link href="https://pype.dev/searxng/" rel="alternate" type="text/html"></link>
    <summary type="text">I heard about SearXNG on a couple podcasts and saw it trending on GitHub several times before I finally decided to stand it up. I used it transparently when...</summary>
    <content type="html">&lt;p&gt;I heard about &lt;a href=&#34;https://searxng.org&#34;&gt;SearXNG&lt;/a&gt; on a couple podcasts and saw it trending on GitHub&#xA;several times before I finally decided to stand it up.&#xA;I used it transparently when trying out &lt;a href=&#34;https://khoj.dev/&#34;&gt;khoj&lt;/a&gt;, a self-hosted AI LLM agent&#xA;playground kind of a thing, but I&amp;rsquo;ve also been messing around with &lt;a href=&#34;https://openwebui.com&#34;&gt;Open-WebUI&lt;/a&gt; to&#xA;have a self-hosted ChatGPT-like experience.&#xA;I don&amp;rsquo;t know if SearchXNG used to be harder to set up, but it was pretty simple with a Docker Compose up&#xA;and a couple configuration options given my personal homelab setup. Using it feels&#xA;very 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;&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;redis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;redis&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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/valkey/valkey:8-alpine&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;valkey-server --save 30 1 --loglevel warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;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;./data/redis:/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;logging&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;driver&lt;/span&gt;&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;json-file&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;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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-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;s2&#34;&gt;&amp;#34;1m&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-file&lt;/span&gt;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;searxng&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;searxng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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/searxng/searxng: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;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;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;8080:8080&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;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;./data/searxng:/etc/searxng:rw&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.env&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;c&#34;&gt;# - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-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;l&#34;&gt;UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-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;logging&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;driver&lt;/span&gt;&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;json-file&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;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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-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;s2&#34;&gt;&amp;#34;1m&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-file&lt;/span&gt;&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;/code&gt;&lt;/pre&gt;&lt;p&gt;I love the self-hosted aspect. I love not seeing any ads on my search&#xA;results. I did a few searches where I know what results to expect and&#xA;it did okay.&#xA;It is good right now at filtering out garbage in my results.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://dropper.wayl.one/api/file/4ff5953c-bc8d-4978-8509-b43582460a0b.png&#34; alt=&#34;SearXNG&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;So I look forward to tweaking it and using it as a search&#xA;backend with open web UI. Next on my list is having enough resources to run&#xA;Ollama and a stable diffusion generator at the same time and have image&#xA;generation working through open web UI.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>A New Perspective on Being God’s Child</title>
    <id>https://pype.dev/a-new-perspective-on-being-god-s-child/</id>
    <updated>2025-05-18T07:15:06Z</updated>
    <published>2025-05-18T07:15:06Z</published>
    <link href="https://pype.dev/a-new-perspective-on-being-god-s-child/" rel="alternate" type="text/html"></link>
    <summary type="text">I was in men&#39;s group the other day, and one of the things that came up almost inevitably is a debate between God&#39;s sovereignty and predestination, and then...</summary>
    <content type="html">&lt;h2 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt; &lt;a href=&#34;#intro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was in men&amp;rsquo;s group the other day, and one of the things that came up almost inevitably&#xA;is a debate between God&amp;rsquo;s sovereignty and predestination, and then an idea of free will.&#xA;I have been a part of these conversations for years - I&amp;rsquo;ve been in hundreds of them certainly,&#xA;and they all go in a very similar direction. Almost irrespective of the theological prowess&#xA;or training of the group of people I&amp;rsquo;m in the unspoken goal always is the same&amp;hellip;&#xA;&lt;strong&gt;to find a hard and fast line between the 2 things or to find some comfortable verbiage for the tension&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-anecdotal-experience-with-other-believers&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Anecdotal Experience With Other Believers&lt;/span&gt; &lt;a href=&#34;#my-anecdotal-experience-with-other-believers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;People with no real theological background have very simple ideas and&#xA;understandings of free will and God&amp;rsquo;s sovereignty.&#xA;They typically equate God&amp;rsquo;s sovereignty with &amp;ldquo;He willed everything to be, and so you don&amp;rsquo;t&#xA;actually have any real choices.&amp;rdquo;&#xA;Then they think that because God has ultimate sovereignty, but they have free will, they&#xA;can somehow contradict God&amp;rsquo;s will, but then they don&amp;rsquo;t understand that that is a violation&#xA;of the doctrine of God&amp;rsquo;s sovereignty.&#xA;So those conversations are typically hard to sit through, and my historical thought&#xA;on that, ever since I believe I&amp;rsquo;ve come to a pretty mature position on the matter,&#xA;has been that in the Hebrew mind, these things aren&amp;rsquo;t at odds, and we create the division with our&#xA;Western ideals on what it means to make choices, and what it means to be free.&lt;/p&gt;&#xA;&lt;h3 id=&#34;freedom&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Freedom&lt;/span&gt; &lt;a href=&#34;#freedom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;As a quick parenthetical remark on that - freedom is not doing whatever you want.&#xA;True freedom is living in accordance with your creation, bound by the things that create&#xA;order, because it is within those boundaries that you were designed to live -&#xA;and thus the life you live within the boundaries is the best the life could&#xA;be&amp;hellip; Freedom isn&amp;rsquo;t the ultimate goal, it&amp;rsquo;s a byproduct of living in accordance&#xA;with our design.&#xA;When you break those boundaries though - then life is scary, and you are not&#xA;free but rather a slave to the environment you made for yourself - an&#xA;environment not designed for you because you designed it for yourself, it isn&amp;rsquo;t&#xA;what the Maker made for you&lt;/p&gt;&#xA;&lt;h3 id=&#34;freedom-child-s-play&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Freedom - Child’s Play&lt;/span&gt; &lt;a href=&#34;#freedom-child-s-play&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;An easy example is kids on a playground.&#xA;If you give a bunch of little kids a playground with nice high fences, and you tell them to&#xA;do whatever they want in the playground, they&amp;rsquo;ll have a great time.&#xA;But if you take all the fences away from that playground, maybe even move it&#xA;out further away from the school, kids tend to feel a lot less safe.&#xA;Because now, not only can they just wander as far away from it as they please, perhaps&#xA;by accident, but dangers can now enter their playground&amp;hellip; The fences gave them&#xA;the freedom to enjoy the life appropriate for them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;back-to-the-debate&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Back To the Debate&lt;/span&gt; &lt;a href=&#34;#back-to-the-debate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Returning to the sovereignty and free will discussion&amp;hellip;&#xA;With no academic, theological, or honestly even critical thinking&#xA;applied, we have this very silly juxtaposition of sovereignty - as if it means&#xA;you can&amp;rsquo;t make choices - and free will as if God&amp;rsquo;s sovereignty could be usurped&#xA;by us.&#xA;However, in groups where we have more theological training present, we really just have the&#xA;same (directionally speaking - the same) conversation, with a larger vocabulary.&#xA;Now we have words like &amp;ldquo;agency&amp;rdquo;, and &amp;ldquo;scope of choice&amp;rdquo;, things that kind of seek to explain&#xA;away the tension by introducing new dimension or element of abstraction to the argument.&lt;/p&gt;&#xA;&lt;p&gt;At the end of the day, we&amp;rsquo;re now just cutting the cake into smaller pieces.&#xA;We&amp;rsquo;re just filling in some of the gaps that we can see.&#xA;There&amp;rsquo;s still nuance.&#xA;There&amp;rsquo;s still the Western influence of needing to label everything.&#xA;There&amp;rsquo;s still, in my opinion, the ancient truth that in the Hebrew mind, Yahweh&amp;rsquo;s sovereignty&#xA;and the human&amp;rsquo;s choice to live their life are not at odds with each other.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-new-perspective&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;A New Perspective&lt;/span&gt; &lt;a href=&#34;#a-new-perspective&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;But here&amp;rsquo;s a thought I started to formulate just recently&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;a recent thought&lt;/p&gt;&#xA;&lt;p&gt;Even for a PhD in theological studies or in theology or an expert in church history or&#xA;church fathers or whatever - for somebody &lt;em&gt;today&lt;/em&gt; to think that we can define these terms&#xA;in a totally correct and understandable way is another manifestation of the&#xA;&lt;strong&gt;PEAK ARROGANCE&lt;/strong&gt; of the West  (Blog on Western v Eastern medicine in the works)&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t mean to claim here that I have the &lt;em&gt;right&lt;/em&gt; understanding of sovereignty and free will.&#xA;But Paul has some choice words for believers who love quarreling and debates, and he calls&#xA;them spiritual children who aren&amp;rsquo;t ready for real food.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2 Timothy 2:23-24&lt;/p&gt;&#xA;&lt;p&gt;23 But reject foolish and ignorant disputes, knowing that they breed quarrels.&#xA;24 The Lord&amp;rsquo;s slave must not quarrel, but must be gentle to everyone, able to teach, and patient,&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1 Corinthians 3&lt;/p&gt;&#xA;&lt;p&gt;1For my part, brothers and sisters, I was not able to speak to you as spiritual&#xA;people but as people of the flesh, as babies in Christ.a 2I gave you milk to&#xA;drink, not solid food, since you were not yet ready for it. In fact, you are&#xA;still not ready, 3because you are still worldly. For since there is envya and&#xA;strifea b among you, are you not worldly and behaving like mere humans? 4For&#xA;whenever someone says, “I belong to Paul,” and another, “I belong to Apollos,”a&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;It&#39;s you&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve often heard the Corinthian church used as an example of a bad place to&#xA;be - and no doubt it was. But modern American Christianity may be much closer&#xA;to Corinth than Thessolinca as far as maturity and Christ-like living goes.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;He says things like &amp;ldquo;I gave you milk to drink, not solid food, since you were&#xA;not yet ready for it&amp;rdquo;&#xA;I used to think that the &amp;ldquo;real food&amp;rdquo; was these theological debates, that you learn&#xA;more about the Bible, you learn more about humanity, and then you can have these more&#xA;in-depth conversations.&#xA;But I think the real wisdom is easly seen with a metaphor&lt;/p&gt;&#xA;&lt;h3 id=&#34;who-s-the-child-here&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Who’s the child here?&lt;/span&gt; &lt;a href=&#34;#who-s-the-child-here&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I have two daughters in different developmental stages, and so we have 3 characters&amp;hellip;&#xA;There&amp;rsquo;s my young daughter, my older daughter, and me.&#xA;Right away, I think we often talk about knowing God in this kind of a term where,&#xA;you know, I&amp;rsquo;m his child and I have children.&#xA;So there&amp;rsquo;s a parent-child relationship.&#xA;And then in the God-human relationship, I understand my position better now as a parent&#xA;of real children, of humans, which helps me understand my position as a child of God.&lt;/p&gt;&#xA;&lt;p&gt;!!! failure &amp;quot;&amp;quot;&#xA;I don&amp;rsquo;t think we take that very seriously.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;I think use this more as comforting language rather than a humbling truth - &lt;strong&gt;I&amp;rsquo;m a child of God&lt;/strong&gt;&#xA;But really, I think the TLDR is that even the most highly trained theological individual - that person is not a grown-up in the eyes of God.&#xA;He or she is still a child, and our understanding is still limited to what a child can understand.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s continue with the metaphor&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;You could ask either one of my daughters if they know me, and of course they would both&#xA;say yes, and they know me to different degrees.&#xA;Perhaps because the older one knows more about me - does that mean that she knows me better than the younger?&#xA;I think it would be silly to say yes.&#xA;Both of my kids know me to the fullest capacity that they can know me.&#xA;So what about love?&#xA;Do they both love me?&#xA;And do I love them?&#xA;Of course.&#xA;And do I show my love to both of them in the same ways?&#xA;Of course not.&#xA;Not only are they unique, but they&amp;rsquo;re at different stages in life&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;For example - I don&amp;rsquo;t exercise the same amount of discipline towards my&#xA;youngest because she&amp;rsquo;s not ready for it - it&amp;rsquo;s not reasonable to expect the&#xA;same things of her as our older daughter.&#xA;Speaking of her - she absolutely is ready for some more discipline and for some&#xA;higher expectations, and so I will train her up in the ways that she is mature&#xA;enough to understand.&#xA;Now, does that mean I love my younger daughter less, or does it mean I love my older daughter&#xA;more?&#xA;No.&#xA;It means I&amp;rsquo;m loving them in a way that is appropriate for where they are at&#xA;developmentally, for their better good.&#xA;So that they grow up to be ordered, to be competent, to be self-controlled, and&#xA;to not grow up to be wild adults with no regard for boundaries and rules.&lt;/p&gt;&#xA;&lt;p&gt;So to be specific about the metaphor and the example I just laid out: I don&amp;rsquo;t want my children&#xA;to ever hurt or suffer, but I also know that suffering is required for learning and for them to grow to be mature individuals.&#xA;I know how to control some of the inevitable suffering a child must endure, especially if it&amp;rsquo;s in the form of discipline, for my children so they are safe, protected, loved, but also corrected and molded into competent human beings.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-kicker&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Kicker&lt;/span&gt; &lt;a href=&#34;#the-kicker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Now would it be appropriate for my older daughter (who understands that suffering is required&#xA;for learning) would it be appropriate for her to look at my younger daughter and tell&#xA;her, &amp;ldquo;dad wants you to suffer&amp;rdquo;?&#xA;That&amp;rsquo;s tough, isn&amp;rsquo;t it&amp;hellip;&#xA;Because she&amp;rsquo;s not really lying, but more importantly she&amp;rsquo;s also not telling anything close to the whole&#xA;truth and she is also not talking to somebody who is capable of understanding the nuances&#xA;of that truth.&lt;/p&gt;&#xA;&lt;p&gt;In the eyes of God, I&amp;rsquo;m still a five-year-old.&lt;/p&gt;&#xA;&lt;p&gt;And for me as a five-year-old boy in the eyes of the Lord, to try and explain things that&#xA;I think I understand or that I understand to the best capability that a five-year-old can -&#xA;If I go try to teach a three-year-old things about God in ways that they can&amp;rsquo;t understand,&#xA;I am not loving that other person and I&amp;rsquo;m not even loving God very well.&#xA;I&amp;rsquo;m just stuck in my own arrogance of understanding, thinking that I now get it because I&amp;rsquo;ve come&#xA;to my own realization.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I recognize there&amp;rsquo;s a little irony now in writing this post because I&amp;rsquo;m&#xA;saying I think I kind of understand that I don&amp;rsquo;t/can&amp;rsquo;t understand the sovereignty&#xA;and free will relationship. I wouldn&amp;rsquo;t say I can explain that away, but I&#xA;think I understand who I am better in the eyes of the Lord and what I could&#xA;reasonably expect to understand from an academic standpoint.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;so-what&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;So What?&lt;/span&gt; &lt;a href=&#34;#so-what&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The lesson for me, and for my community of faith - is to calm down about the&#xA;debates&amp;hellip;. They&amp;rsquo;re fun over a drink and cigars, but when boots are on the&#xA;ground we need to remember that the Bible has information that we need to know,&#xA;it doesn&amp;rsquo;t have all the information that we want to know - and the American&#xA;Church must drop its arrogant need to explain away every mystery and instead&#xA;hold fast to the God of those mysteries.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-607/</id>
    <updated>2025-04-28T14:07:51Z</updated>
    <published>2025-04-28T14:07:51Z</published>
    <link href="https://pype.dev/thoughts-607/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-606/</id>
    <updated>2025-04-28T14:07:50Z</updated>
    <published>2025-04-28T14:07:50Z</published>
    <link href="https://pype.dev/thoughts-606/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-605/</id>
    <updated>2025-04-28T14:07:48Z</updated>
    <published>2025-04-28T14:07:48Z</published>
    <link href="https://pype.dev/thoughts-605/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-604/</id>
    <updated>2025-04-28T14:07:48Z</updated>
    <published>2025-04-28T14:07:48Z</published>
    <link href="https://pype.dev/thoughts-604/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-603/</id>
    <updated>2025-04-28T14:07:43Z</updated>
    <published>2025-04-28T14:07:43Z</published>
    <link href="https://pype.dev/thoughts-603/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-602/</id>
    <updated>2025-04-28T14:07:43Z</updated>
    <published>2025-04-28T14:07:43Z</published>
    <link href="https://pype.dev/thoughts-602/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-601/</id>
    <updated>2025-04-28T14:07:39Z</updated>
    <published>2025-04-28T14:07:39Z</published>
    <link href="https://pype.dev/thoughts-601/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-600/</id>
    <updated>2025-04-28T14:07:38Z</updated>
    <published>2025-04-28T14:07:38Z</published>
    <link href="https://pype.dev/thoughts-600/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Installing Tailscale on JetKVM | Medium</title>
    <id>https://pype.dev/thoughts-599/</id>
    <updated>2025-04-28T14:07:37Z</updated>
    <published>2025-04-28T14:07:37Z</published>
    <link href="https://pype.dev/thoughts-599/" rel="alternate" type="text/html"></link>
    <summary type="text">My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Installing Tailscale on JetKVM | Medium&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://medium.com/@brandontuttle/installing-tailscale-on-a-jetkvm-3c72355b7eb0&#34;&gt;Installing Tailscale on JetKVM | Medium&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;My jetKVM is a flipping dream - plug and play kvm that worked out of the box. I want to put tailscale on it so I can hit my server from anywhere no matter what - this article appears to walk through doing it. &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>My MCP Configuration</title>
    <id>https://pype.dev/my-mcp-configuration/</id>
    <updated>2025-04-27T05:29:54Z</updated>
    <published>2025-04-27T05:29:54Z</published>
    <link href="https://pype.dev/my-mcp-configuration/" rel="alternate" type="text/html"></link>
    <summary type="text">https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite</summary>
    <content type="html">&lt;h1 id=&#34;my-mcp&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My MCP&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;the-tools&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Tools&lt;/span&gt; &lt;a href=&#34;#the-tools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;docker&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Docker&lt;/span&gt; &lt;a href=&#34;#docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;ragdocs&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;RAGDocs&lt;/span&gt; &lt;a href=&#34;#ragdocs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;sequential-thinking&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Sequential Thinking&lt;/span&gt; &lt;a href=&#34;#sequential-thinking&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;git&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Git&lt;/span&gt; &lt;a href=&#34;#git&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;not-tried-yet&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Not Tried Yet&lt;/span&gt; &lt;a href=&#34;#not-tried-yet&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite&#34;&gt;https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-config&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Config&lt;/span&gt; &lt;a href=&#34;#the-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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;mcpServers&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;docker-mcp&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;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;uvx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;args&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;docker-mcp&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;ragdocs&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;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;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;nt&#34;&gt;&amp;#34;args&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;/home/nic/projects/personal/quadtask/node_modules/@qpd-v/mcp-server-ragdocs/build/index.js&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&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;p&#34;&gt;{&lt;/span&gt;&#xA;&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;QDRANT_URL&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://babyblue-aurora:6333&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;EMBEDDING_PROVIDER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ollama&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;OLLAMA_URL&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://babyblue-aurora:11434&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;alwaysAllow&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;search_documentation&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;list_sources&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&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_ollama&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;add_documentation&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&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;disabled&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;sequentialthinking&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;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;docker&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;args&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;run&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;-i&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;--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;s2&#34;&gt;&amp;#34;sequentialthinking&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcp/sequentialthinking&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&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;disabled&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;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;alwaysAllow&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;sequentialthinking&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&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;git&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;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;uvx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&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;args&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;mcp-server-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;p&#34;&gt;],&lt;/span&gt;&#xA;&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;disabled&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;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;alwaysAllow&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;git_status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&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_commit&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&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_add&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&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_log&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&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_diff&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;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>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>I was wrecked by a weird combo of » and -e</title>
    <id>https://pype.dev/i-was-wrecked-by-a-weird-combo-of-and-e/</id>
    <updated>2025-04-23T08:44:59Z</updated>
    <published>2025-04-23T08:44:59Z</published>
    <link href="https://pype.dev/i-was-wrecked-by-a-weird-combo-of-and-e/" rel="alternate" type="text/html"></link>
    <summary type="text">If state matters then check it in the beginning or handle it on a failure... Let me explain</summary>
    <content type="html">&lt;h2 id=&#34;tl-dr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TL;DR&lt;/span&gt; &lt;a href=&#34;#tl-dr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If state matters then check it in the beginning or handle it on a failure&amp;hellip; Let me explain&lt;/p&gt;&#xA;&lt;p&gt;I ran into some trouble recently &lt;em&gt;almost&lt;/em&gt; losing some encrypted data&amp;hellip; Now&#xA;this would be the second time I&amp;rsquo;ve had that happen, so I&amp;rsquo;m going to write a&#xA;little bit about it now that I figured it out&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-stage&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Stage&lt;/span&gt; &lt;a href=&#34;#the-stage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the scenario - I use &lt;code&gt;ansible-vault&lt;/code&gt; to keep some sensitive data in a&#xA;few public repos, and I keep the keys I use in Bitwarden Secrets Manager.&lt;/p&gt;&#xA;&lt;p&gt;I use &lt;code&gt;just&lt;/code&gt; as a command runner and have common &lt;code&gt;just encrypt&lt;/code&gt; and &lt;code&gt;just decrypt&lt;/code&gt; recipes throughout many justfiles. It 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;get-vault-key:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    bws secret get &lt;span class=&#34;nv&#34;&gt;$HOMELAB_BOT_VAULT_KEY_ID&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.value&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;encrypt:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#!/bin/bash&lt;/span&gt;&#xA;&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; +e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    just get-vault-key &amp;gt; key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault encrypt ./secret-file --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault encrypt ./secret-file2 --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm 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;decrypt:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#!/bin/bash&lt;/span&gt;&#xA;&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; +e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    just get-vault-key &amp;gt; key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault decrypt ./secret-file --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault decrypt ./secret-file2 --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;spoiler&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Spoiler&lt;/span&gt; &lt;a href=&#34;#spoiler&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Above is a good example of the 2 recipes, but prior to this morning they looked 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;get-vault-key:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    bws secret get &lt;span class=&#34;nv&#34;&gt;$HOMELAB_BOT_VAULT_KEY_ID&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.value&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;# BAD EXAMPLES! DO NOT DO THIS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encrypt:&#xA;&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; -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    just get-vault-key &amp;gt;&amp;gt; key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault encrypt ./secret-file --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault encrypt ./secret-file2 --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm 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;decrypt:&#xA;&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; -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    just get-vault-key &amp;gt;&amp;gt; key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault decrypt ./secret-file --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ansible-vault decrypt ./secret-file2 --vault-password-file key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;problem&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Problem&lt;/span&gt; &lt;a href=&#34;#problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So here&amp;rsquo;s the story - in real life I started using distrobox when I ran into&#xA;this and I thought it was an issue with different versions of ansible installed&#xA;in distrobox and on my desktop. After a few more odd deployment workflows I&#xA;think I&amp;rsquo;ve determined that the real problem is that &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; appends to a file (see&#xA;the issue yet?), but if my recipes fail (say I try to encrypt an already&#xA;encrypted file) then the command exits but what&amp;rsquo;s left on my disk? &lt;code&gt;key&lt;/code&gt; is&#xA;still there&amp;hellip; and the next time I go to run a command I&amp;rsquo;ll echo the real key&#xA;to the &lt;code&gt;key&lt;/code&gt; file again and if I called &lt;code&gt;encrypt&lt;/code&gt; when the first or more files&#xA;in the list were &lt;code&gt;decrypted&lt;/code&gt; then they&amp;rsquo;ll be encrypted not with my key, but&#xA;with my key repeated as many times as I ran a command with &lt;code&gt;just get-vault-key &amp;gt;&amp;gt; key&lt;/code&gt;&#xA;before ever removing the key 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&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 secret-file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Danger, Will Robinson&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ just encrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bws secret get &lt;span class=&#34;nv&#34;&gt;$HOMELAB_BOT_VAULT_KEY_ID&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.value&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;Encryption successful&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&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 secret-file&#xA;&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;$ANSIBLE_VAULT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;1.1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;AES256&#xA;&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;39616332393662346639633030633766666336323939346138633238626239363733316431333737&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6463663763366434376437303335643431663431326135300a636261663636336139323033316232&#xA;&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;37666439383131393631333332353731633661396431633834326432363936613331623135666565&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6364363039663933620a326563323931643632323031396664646363613636613562366166386439&#xA;&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;63653661653037393538356461323239396630643338393231306163343964623866&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ just decrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bws secret get &lt;span class=&#34;nv&#34;&gt;$HOMELAB_BOT_VAULT_KEY_ID&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.value&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;Decryption successful&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&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 secret-file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Danger, Will Robinson&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So as you can see, I have &lt;code&gt;secret-file&lt;/code&gt; here, and I can encrypt and decrypt&#xA;just fine. But if I have that &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; in the recipe, add a second file, and a&#xA;failure in a command - well then I&amp;rsquo;ll start getting confused&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Follow along with the workflow of adding a file that I&amp;rsquo;ll need encrypted&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Only secret-file is in the just recipe here - I add secret-file2 after&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;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ just decrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bws secret get &lt;span class=&#34;nv&#34;&gt;$HOMELAB_BOT_VAULT_KEY_ID&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.value&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;ERROR! input is not vault encrypted data. /var/home/nic/projects/personal/pype.dev/secret-file is not a vault encrypted file &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; /var/home/nic/projects/personal/pype.dev/secret-file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;error: Recipe &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;decrypt&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; failed with &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; code &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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×8 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&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;Good - secret-file is already decrypted! So lets add another 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;Good - secret-file is already decrypted! So lets add another 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;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&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;Foo Bar Bam Baz&amp;#34;&lt;/span&gt; &amp;gt; secret-file2                                    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×8 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&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;Added secret-file2 to my Just recipes&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Added secret-file2 to my Just recipes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×8 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ just encrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bws secret get &lt;span class=&#34;nv&#34;&gt;$HOMELAB_BOT_VAULT_KEY_ID&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.value&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;Encryption successful&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Encryption successful&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×7 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ just decrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bws secret get &lt;span class=&#34;nv&#34;&gt;$HOMELAB_BOT_VAULT_KEY_ID&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.value&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;ERROR! Decryption failed &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;no vault secrets were found that could decrypt&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; on /var/home/nic/projects/personal/pype.dev/secret-file &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; /var/home/nic/projects/personal/pype.dev/secret-file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;error: Recipe &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;decrypt&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; failed with &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; code &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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in pype.dev   main   ×2  ×3  ×8 via   v3.11.10&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype-dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 &#xA;&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;Oh no!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So what happened?&lt;/p&gt;&#xA;&lt;p&gt;Recall that my recipes originally had &lt;code&gt;set -e&lt;/code&gt; at the top and used &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; to cat&#xA;my secret to a file &lt;code&gt;key&lt;/code&gt;. Well, when the fir| decryption recipe failed the&#xA;&lt;code&gt;key&lt;/code&gt; file was left behind. Then when I went to encrypt both of my files the&#xA;recipe got the key again and made a keyfile 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;secretKey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;secretKey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The encryption recipe encrypted the files with this key, removed the key file,&#xA;and then the next decryption recipe failed because when it got the key and made&#xA;the file it looked like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;secretKey&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So the solution in the end is to remake the &lt;code&gt;key&lt;/code&gt; file every time (&lt;code&gt;&amp;gt;&lt;/code&gt; instead&#xA;of &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;), or check if it exists, or handle the error when the recipe fails, or&#xA;just keep going (&lt;code&gt;set +e&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Fin&lt;/span&gt; &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;And that&amp;rsquo;s how I lost some secrets in my homelab once, and how I almost lost a&#xA;second time if I hadn&amp;rsquo;t noticed the &lt;code&gt;key&lt;/code&gt; file in my file tree&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Grafana + Gotify for push notifications</title>
    <id>https://pype.dev/grafana-gotify-for-push-notifications/</id>
    <updated>2025-04-07T10:12:51Z</updated>
    <published>2025-04-07T10:12:51Z</published>
    <link href="https://pype.dev/grafana-gotify-for-push-notifications/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s easy to configure push notifications through Gotify from Grafana by setting up a generic Alerting Contact Point...</summary>
    <content type="html">&lt;p&gt;It&amp;rsquo;s easy to configure push notifications through Gotify from Grafana by setting up a generic &lt;code&gt;Webhook&lt;/code&gt; Alerting Contact Point&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;The parameters are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HTTP Method: POST&lt;/li&gt;&#xA;&lt;li&gt;URL: http://&lt;gotify url&gt;/message&lt;/li&gt;&#xA;&lt;li&gt;Authentication is done with an app token generated from Gotify, and you put it in &lt;code&gt;Authorization Header: Credentials&lt;/code&gt; in the Grafana configuration&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.wayl.one/api/file/610b4efb-b4c4-4930-ac63-499d501ba3c3.png&#34;&gt;See image&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Monolith - download and save site as html</title>
    <id>https://pype.dev/monolith-download-and-save-site-as-html/</id>
    <updated>2025-03-16T16:03:31Z</updated>
    <published>2025-03-16T16:03:31Z</published>
    <link href="https://pype.dev/monolith-download-and-save-site-as-html/" rel="alternate" type="text/html"></link>
    <summary type="text">I needed to save a website earlier and this was just what I needed...</summary>
    <content type="html">&lt;h2 id=&#34;til-monolith&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TIL: Monolith&lt;/span&gt; &lt;a href=&#34;#til-monolith&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I needed to save a website earlier and this was just what I needed&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/Y2Z/monolith&#34;&gt;https://github.com/Y2Z/monolith&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>SMB with ZFS on Ubuntu</title>
    <id>https://pype.dev/smb-with-zfs-on-ubuntu/</id>
    <updated>2025-02-20T09:18:35Z</updated>
    <published>2025-02-20T09:18:35Z</published>
    <link href="https://pype.dev/smb-with-zfs-on-ubuntu/" rel="alternate" type="text/html"></link>
    <summary type="text">sudo apt-get install -y samba \\ then set sharesmb=on \\ chown the user \\ smbpasswd -a \\ then mount with user/password from other machine</summary>
    <content type="html">&lt;p&gt;sudo apt-get install -y samba \ then set sharesmb=on \ chown the user \ smbpasswd &lt;user&gt; -a \ then mount with user/password from other machine&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Someday</title>
    <id>https://pype.dev/someday/</id>
    <updated>2025-02-17T00:00:00Z</updated>
    <published>2025-02-17T00:00:00Z</published>
    <link href="https://pype.dev/someday/" rel="alternate" type="text/html"></link>
    <summary type="text">Projects, tools, and technologies I want to explore someday. This is my queue of things to check out, organized by category. Each item has a checkbox for...</summary>
    <content type="text">&#xA;## Purpose of the Page&#xA;&#xA;Projects, tools, and technologies I want to explore someday. This is my queue&#xA;of things to check out, organized by category. Each item has a checkbox for&#xA;tracking progress - once explored, I&#39;ll add a summary or link to a longer post.&#xA;&#xA;---&#xA;&#xA;## Self-Hosted Services&#xA;&#xA;- [x] **[Karakeep](https://docs.karakeep.app/)** (2025-07-19) Read-later and&#xA;      bookmarking service to replace texting links to myself. Want to explore the app&#xA;      and extension, set up RSS feeds for lists.&#xA;&#xA;  - I am running Karakeep, would like to hook it into my blog like `thoughts` but just haven&#39;t taken the time to do it&#xA;&#xA;- [ ] **[Rybbit](https://github.com/pypeaday/rybbit)** (2025-08-23)&#xA;      Self-hosted Google Analytics alternative. Forked the repo, want to try on&#xA;      quadtask.&#xA;&#xA;- [ ] **[Domain Locker](https://github.com/lissy93/domain-locker)**&#xA;      (2025-12-09) Domain monitoring service. Stood it up and want to see how it&#xA;      fits into the lab over the next year.&#xA;&#xA;---&#xA;&#xA;## Platform &amp; DevOps&#xA;&#xA;- [ ] **[Komodo](https://github.com/pypeaday/komodo)** (2025-08-23)&#xA;      Platform-as-a-product tool that aligns with my vision for &#34;platform as a&#xA;      product&#34;. Discovered it matches much of what I envisioned.&#xA;&#xA;- [x] **[IronCalc](https://github.com/ironcalc/IronCalc)** (2025-11-07)&#xA;      Self-hosted spreadsheet solution. Need to manage the build, starting to think&#xA;      about a reusable Forgejo action for Docker builds.&#xA;&#xA;  - Unfortunately there&#39;s not much to write about - neat project but I don&#39;t need it&#xA;&#xA;- [ ] **[LLDAP](https://github.com/lldap/lldap/blob/main/docs/install.md#with-docker)**&#xA;      (2025-11-10) Lightweight LDAP for homelab SSO. Want to get SSO setup at home&#xA;      for repoflow, considering LLDAP and Authelia for authentication.&#xA;&#xA;- [ ] **Repoflow** (2025-08-09) Artifactory replacement for artifact storage.&#xA;      Requested a free license and experimenting with it for homelab platform&#xA;      storage.&#xA;  - _Note: Have blog posts but no dedicated project/glossary page yet_&#xA;&#xA;---&#xA;&#xA;## Storage Solutions&#xA;&#xA;- [ ] **[Garage](https://git.deuxfleurs.fr/Deuxfleurs/garage)** (2026-02-15)&#xA;      Distributed object storage. MinIO is archived, so looking at Garage as a&#xA;      replacement for object storage.&#xA;&#xA;- [ ] **[RustFS](https://github.com/rustfs/rustfs)** (2026-02-15) MinIO&#xA;      alternative in Rust. Alternative to MinIO being considered alongside Garage.&#xA;&#xA;---&#xA;&#xA;## Mobile &amp; Apps&#xA;&#xA;- [ ] **[Conduit](https://github.com/cogwheel0/conduit)** (2025-08-23)&#xA;      Open-WebUI Android app. Found it but needs to build and sideload the APK.&#xA;&#xA;---&#xA;&#xA;## Desktop &amp; Window Management&#xA;&#xA;- [x] **[AeroSpace](https://github.com/nikitabobko/AeroSpace)** (2025-11-26)&#xA;      Tiling window manager for Mac. Want to try it out for window management.&#xA;&#xA;  - I am using AeroSpace on my Mac - it&#39;s beautiful&#xA;&#xA;- [ ] **[Fluid Tile](https://codeberg.org/Serroda/fluid-tile)** (2025-11-26)&#xA;      Tiling window manager option. Saw it as a tiling window manager option to try&#xA;      after getting tiling working on Mac with AeroSpace.&#xA;&#xA;---&#xA;&#xA;## Productivity &amp; Utilities&#xA;&#xA;- [ ] **[ChoresRewards](https://github.com/matda59/ChoresRewards)**&#xA;      (2025-08-10) Chore tracking with rewards for kids. Looking for a way to track&#xA;      and reward chores for both myself and the kids; considering rewriting it in&#xA;      FastAPI if the auth mechanisms don&#39;t work out.&#xA;&#xA;- [ ] **[Lazyjournal](https://github.com/Lifailon/lazyjournal)** (2025-11-15)&#xA;      TUI for host logs. Lazydocker/git-inspired tool for viewing host logs that I&#xA;      learned about.&#xA;&#xA;- [ ] **[Oh My Opencode](https://github.com/code-yeongyu/oh-my-opencode)**&#xA;      (2025-12-31) Compare with OpenAgents. Need to compare OpenAgents with&#xA;      oh-my-opencode.&#xA;&#xA;- [ ] **[Handy](https://github.com/cjpais/Handy)** (2026-02-03) STT tool for&#xA;      voice control. Started using for speech-to-text on work Mac to talk to neovim&#xA;      and opencode; excited to explore vocally conversing with agents.&#xA;&#xA;---&#xA;&#xA;## Already Explored (Have Pages)&#xA;&#xA;These projects already have glossary entries or blog posts:&#xA;&#xA;- [x] **[Affine](https://docs.affine.pro/)** - Self-hosted Notion-like platform&#xA;      (see [[affine]])&#xA;- [x] **[Apprise](https://github.com/caronc/apprise)** - Centralized&#xA;      notification service (see [[apprise]])&#xA;- [x] **[Forgejo](https://forgejo.org/)** - Self-hosted Git forge (see&#xA;      [[forgejo]])&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Recovering from zpool corruption when you’re short a drive</title>
    <id>https://pype.dev/recovering-from-zpool-corruption-when-you-re-short-a-drive/</id>
    <updated>2025-02-03T21:08:56Z</updated>
    <published>2025-02-03T21:08:56Z</published>
    <link href="https://pype.dev/recovering-from-zpool-corruption-when-you-re-short-a-drive/" rel="alternate" type="text/html"></link>
    <summary type="text">can only mount tank RO - so can&#39;t rename - also can&#39;t detach which is what I&#39;d want</summary>
    <content type="html">&lt;ol&gt;&#xA;&lt;li&gt;can only mount tank RO&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;so can&amp;rsquo;t rename&lt;/li&gt;&#xA;&lt;li&gt;also can&amp;rsquo;t detach which is what I&amp;rsquo;d want&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Could import pool witn -N to not mount any datasets&lt;/li&gt;&#xA;&lt;li&gt;detach and attach&lt;/li&gt;&#xA;&lt;li&gt;resilver&amp;hellip;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Using my own domain on nostr</title>
    <id>https://pype.dev/using-my-own-domain-on-nostr/</id>
    <updated>2025-01-24T06:28:19Z</updated>
    <published>2025-01-24T06:28:19Z</published>
    <link href="https://pype.dev/using-my-own-domain-on-nostr/" rel="alternate" type="text/html"></link>
    <summary type="text">After generating a keypair on a nostr app (I started with primal) I copied my public key to and put that at the root of my site at .</summary>
    <content type="html">&lt;p&gt;After generating a keypair on a nostr app (I started with primal) I copied my&#xA;public key to &lt;code&gt;/.well-known/nostr.json&lt;/code&gt; and put that at the root of my site at&#xA;&lt;code&gt;https://pype.dev&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The file 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;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&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;“names”:&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;“nic”:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;“npub1q3fsec2vcv99v80ga72dlv90qwkqmuxqcr6mdyumcmpkgudlhrespyurfj”&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&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;p&gt;So now I can use &lt;code&gt;nic@pype.dev&lt;/code&gt; as on nostr because the client will verify the&#xA;pubkey associated with my profile with my domain!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;big upgrade from &lt;whatever&gt;@primal.net&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Design of Genesis 1-11 pt 1</title>
    <id>https://pype.dev/the-design-of-genesis-1-11/</id>
    <updated>2025-01-18T04:54:03Z</updated>
    <published>2025-01-18T04:54:03Z</published>
    <link href="https://pype.dev/the-design-of-genesis-1-11/" rel="alternate" type="text/html"></link>
    <summary type="text">There is a cyclical pattern of Genesis 1-11.</summary>
    <content type="html">&lt;h2 id=&#34;genesis-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Genesis 1&lt;/span&gt; &lt;a href=&#34;#genesis-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is a cyclical pattern of Genesis 1-11.&lt;/p&gt;&#xA;&lt;p&gt;Introduction 1:1 may be a summary heading rather than the first &amp;ldquo;verse&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;chaos&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chaos&lt;/span&gt; &lt;a href=&#34;#chaos&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The narrative begins in 1:2, and the start of everything is a &amp;ldquo;non-created&#xA;world&amp;rdquo;, which in the ancient mind we should think about as &amp;ldquo;non-ordered&#xA;reality&amp;rdquo;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;Genesis 1:2 (LEB): 2 Now the earth was formless and empty, and darkness was&#xA;over the face of the deep. And the Spirit of God was hovering over the surface&#xA;of the waters. &#xA;&#xA;Harris, W. H., III, Ritzema, E., Brannan, R., Mangum, D., Dunham, J., Reimer,&#xA;J. A., &amp;amp; Wierenga, M., eds. (2012). The Lexham English Bible (Ge 1:2). Lexham&#xA;Press. &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;תֹּ֫הוּ | to-hu | formless בֹּ֫הוּ | ba-hu | empty, void&lt;/p&gt;&#xA;&lt;p&gt;The first image is that there is &amp;ldquo;unordered wild and waste (wasteland)&amp;rdquo; (we&#xA;typically see this as formless and void). There is also &amp;ldquo;darkness&amp;rdquo; and &amp;ldquo;deep&amp;rdquo;,&#xA;which is a dark chaotic ocean - and this is the ANE person&amp;rsquo;s conception of&#xA;&amp;ldquo;nothing&amp;rdquo;. Westerners think &amp;ldquo;nothing&amp;rdquo; means &amp;ldquo;no atmoic particles, no matter&amp;rdquo;&#xA;but the ANE person would&amp;rsquo;ve thought about creation as unordered chaos.&lt;/p&gt;&#xA;&lt;p&gt;God&amp;rsquo;s spirit is hovering over the dark, formless, wild, chaotic ocean.&lt;/p&gt;&#xA;&lt;h3 id=&#34;day-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 1&lt;/span&gt; &lt;a href=&#34;#day-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;“Let there be light!” And there was light. 4 And God saw the light, that it&#xA;was good, and God caused there to be a separation between the light and between&#xA;the darkness. 5 And God called the light Day, and the darkness he called Night.&#xA;And there was evening and there was morning, the first day.  &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Creation starts by separating light from darkness. The darkness is now tamed,&#xA;it is apart of an ordered cycle. The ordering of the days is now established&#xA;and is repeated in every subsequent day of creation&lt;/p&gt;&#xA;&lt;h3 id=&#34;day-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 2&lt;/span&gt; &lt;a href=&#34;#day-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;“Let there be a vaulted dome in the midst of the waters, and let it cause a&#xA;separation between the waters.” 7 So God made the vaulted dome, and he caused a&#xA;separation between the waters which were under the vaulted dome and between the&#xA;waters which were over the vaulted dome. And it was so. 8 And God called the&#xA;vaulted dome “heaven.” &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then on day 2 he separates &amp;ldquo;waters from the waters&amp;rdquo;. God &amp;ldquo;splits&amp;rdquo; (Exodus) the&#xA;waters, brining order to the chaotic waters.&lt;/p&gt;&#xA;&lt;h3 id=&#34;day-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 3&lt;/span&gt; &lt;a href=&#34;#day-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;“Let the waters under heaven be gathered to one place, and let the dry&#xA;ground appear.”&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The waters below are gathered together - so there is further order being&#xA;brought to the waters.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;“Let the earth produce green plants that will bear seed—fruit trees bearing&#xA;fruit ⌊in which there is seed⌋—according to its kind, on the earth.” And it was&#xA;so. 12 And the earth brought forth green plants bearing seed according to its&#xA;kind, and trees bearing fruit ⌊in which there was seed⌋ according to its kind.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;bonus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bonus&lt;/span&gt; &lt;a href=&#34;#bonus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;Fruit trees (foreshadowing) are then brought up from the lands&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice that there are things even in the first 3 days that will be apart of&#xA;the narrative going forward&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;So in the first 3 days God has handled the unordered wild and waste&lt;/p&gt;&#xA;&lt;p&gt;What this cosmos needs now is inhabitants&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;day-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 4&lt;/span&gt; &lt;a href=&#34;#day-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;“Let there be lights in the vaulted dome of heaven ⌊to separate day from&#xA;night⌋, and let them be as signs and for appointed times, and for days and&#xA;years, &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The &amp;ldquo;lights&amp;rdquo; are clearly the sun, moon, and stars. But they are not called by&#xA;those names, they are just called &amp;ldquo;lights&amp;rdquo;. Which is the descriptive word מָאוֹר&#xA;| ma-or, used to describe the light from the lamp stands in the temple, which&#xA;was also a symbol of God&amp;rsquo;s presence.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice this is &lt;strong&gt;not&lt;/strong&gt; the same word for &amp;ldquo;light&amp;rdquo; in the separation of light&#xA;and darkness, that is אוֹר | or, not ma-or&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;Psalm 90:8 (LEB): 8 You have put our iniquities before you,  our hidden&#xA;sins into the light (מָאוֹר | ma-or) of your countenance.  &#xA;&#xA;Harris, W. H., III, Ritzema, E., Brannan, R., Mangum, D., Dunham, J., Reimer,&#xA;J. A., &amp;amp; Wierenga, M., eds. (2012). The Lexham English Bible (Ps 90:8). Lexham&#xA;Press. &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;Exodus 35:14 (LEB): 14 and lampstand of the light (מָאוֹר | ma-or) and its&#xA;equipment and its lamps and the oil for the light (מָאוֹר | ma-or); &#xA;&#xA;Harris, W. H., III, Ritzema, E., Brannan, R., Mangum, D., Dunham, J., Reimer,&#xA;J. A., &amp;amp; Wierenga, M., eds. (2012). The Lexham English Bible (Ex 35:14). Lexham&#xA;Press. &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;Genesis 1:16 (LEB): 16 And God made two great lights, the greater light to&#xA;rule the day and the smaller light to rule the night, and the stars. &#xA;&#xA;Harris, W. H., III, Ritzema, E., Brannan, R., Mangum, D., Dunham, J., Reimer,&#xA;J. A., &amp;amp; Wierenga, M., eds. (2012). The Lexham English Bible (Ge 1:16). Lexham&#xA;Press. &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;These lights have a job to rule&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice the callback to day 1 - light and darkness were initially separated,&#xA;and now there is further order brought to both the light (sun) and the dark&#xA;(stars and moon)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;day-5&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 5&lt;/span&gt; &lt;a href=&#34;#day-5&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;Genesis 1:20–21 (LEB): 20 And God said, “Let the waters swarm with swarms&#xA;of living creatures, and let birds fly over the earth across the face of the&#xA;vaulted dome of heaven.” 21 So God created the great sea creatures and every&#xA;living creature that moves, with which the waters swarm, according to their&#xA;kind, and every bird with wings according to its kind. And God saw that it was&#xA;good. &#xA;&#xA;Harris, W. H., III, Ritzema, E., Brannan, R., Mangum, D., Dunham, J., Reimer,&#xA;J. A., &amp;amp; Wierenga, M., eds. (2012). The Lexham English Bible (Ge 1:20–21).&#xA;Lexham Press. &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Day 2 was about the waters, they were separated from above and below, and now&#xA;in Day 5, above and below, will be populated, will be ordered.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Great Sea Creatures - תַּנִּין | tan-nin is a rabbit-hole for another time, but&#xA;it&amp;rsquo;s not insignificant&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;day-6&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 6&lt;/span&gt; &lt;a href=&#34;#day-6&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;“Let the earth bring forth living creatures according to their kind: cattle&#xA;and moving things, and wild animals according to their kind.” And it was so.&#xA;25 So God made wild animals according to their kind and the cattle according to&#xA;their kind, and every creeping thing of the earth according to its kind.&#xA;&#xA;Harris, W. H., III, Ritzema, E., Brannan, R., Mangum, D., Dunham, J., Reimer,&#xA;J. A., &amp;amp; Wierenga, M., eds. (2012). The Lexham English Bible (Ge 1:24–25).&#xA;Lexham Press. &#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;On Day 6 the land, which was brought up on Day 3, is now populated with animals&#xA;according to their kinds, again further order&lt;/p&gt;&#xA;&lt;h4 id=&#34;bonus-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bonus&lt;/span&gt; &lt;a href=&#34;#bonus-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;&lt;code&gt;“Let us make humankind in our image and according to our likeness&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Just as fruit-trees were brought up, specifically with seed in them, now we&#xA;have humanity, given a job to rule the earth, subdue it, and multiply&lt;/p&gt;&#xA;&lt;p&gt;Humanity are the rulers below (Day 4 with the rulers of the sky)&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;So God created humankind in his image&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Humanity are God&amp;rsquo;s idols&amp;hellip; Where do you put idols? In a temple&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Humans are made to rule - God makes humans kings and queens&lt;/p&gt;&#xA;&lt;h3 id=&#34;summary&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Summary&lt;/span&gt; &lt;a href=&#34;#summary&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;God has just built for himself a temple of Creation.&lt;/p&gt;&#xA;&lt;h3 id=&#34;day-7&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Day 7&lt;/span&gt; &lt;a href=&#34;#day-7&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;God is clearly in charge, but he wants to rule the creation with his image&#xA;bearers. So now he rests&lt;/p&gt;&#xA;&lt;h2 id=&#34;genesis-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Genesis 3&lt;/span&gt; &lt;a href=&#34;#genesis-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The one thing, the first thing, that a creature in the narrative sees as &amp;ldquo;good&amp;rdquo;&#xA;is the one thing God said would bring death&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;So when the woman saw that the tree [of knowledge of good and bad] was&#xA;good&amp;hellip;&amp;rdquo;. God said to eat from every tree except this one&amp;hellip; The first&#xA;judgement call humanity makes is contrary to God&amp;rsquo;s command&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Deployments are not StatefulSets</title>
    <id>https://pype.dev/deployments-are-not-statefulsets/</id>
    <updated>2025-01-15T18:07:57Z</updated>
    <published>2025-01-15T18:07:57Z</published>
    <link href="https://pype.dev/deployments-are-not-statefulsets/" rel="alternate" type="text/html"></link>
    <summary type="text">I was debugging some ArgoCD stuff earlier today and I love using k9s to explore my k8s resources.</summary>
    <content type="html">&lt;p&gt;I was debugging some ArgoCD stuff earlier today and I love using k9s to explore&#xA;my k8s resources.&lt;/p&gt;&#xA;&lt;p&gt;The TLDR is that I put some bad env vars in the &lt;code&gt;global&lt;/code&gt; values for my ArgoCD&#xA;pods, this caused the webUI to hang. An easy way to push things through is to&#xA;open k9s, view the Deployments, and edit the env vars there so the pods can be&#xA;in the right state to restart and pickup the changes (you&amp;rsquo;ve obviously fixed&#xA;the values file already right?)&lt;/p&gt;&#xA;&lt;p&gt;Well the Notification Controller was the pod hanging, and I couldn&amp;rsquo;t find it in&#xA;the Deployments view! This blew my mind&amp;hellip; until I realized that it was a&#xA;Stateful Set.&lt;/p&gt;&#xA;&lt;p&gt;So, this is not a comparison of the 2 - this is just a note to say that all I&#xA;had to do was find the StatefulSets in k9s and do the same workflow for editing&#xA;what I needed to edit to get the pods into workable state while working on the&#xA;values file&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Self-Hosting selfh.st/icons With Git-Sync</title>
    <id>https://pype.dev/thoughts-528/</id>
    <updated>2025-01-12T14:51:56Z</updated>
    <published>2025-01-12T14:51:56Z</published>
    <link href="https://pype.dev/thoughts-528/" rel="alternate" type="text/html"></link>
    <summary type="text">I like a nice icon for dashboards I&#39;ve put together and having a convenient way to load them up off line would be nice</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://selfh.st/selfhst-icons-git-sync/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://selfh.st/selfhst-icons-git-sync/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Self-Hosting selfh.st/icons With Git-Sync&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://selfh.st/selfhst-icons-git-sync/&#34;&gt;Self-Hosting selfh.st/icons With Git-Sync&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I like a nice icon for dashboards I&#39;ve put together and having a convenient way to load them up off line would be nice&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Mastering Argo CD image updater with Helm: a complete configur…</title>
    <id>https://pype.dev/thoughts-504/</id>
    <updated>2025-01-04T15:10:30Z</updated>
    <published>2025-01-04T15:10:30Z</published>
    <link href="https://pype.dev/thoughts-504/" rel="alternate" type="text/html"></link>
    <summary type="text">image updater is a great little tool that I&#39;m using at work and I want to use it in the best way. I&#39;ll come back to this</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.cncf.io/blog/2024/11/05/mastering-argo-cd-image-updater-with-helm-a-complete-configuration-guide/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.cncf.io/blog/2024/11/05/mastering-argo-cd-image-updater-with-helm-a-complete-configuration-guide/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Mastering Argo CD image updater with Helm: a complete configuration guide | CNCF&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.cncf.io/blog/2024/11/05/mastering-argo-cd-image-updater-with-helm-a-complete-configuration-guide/&#34;&gt;Mastering Argo CD image updater with Helm: a complete configuration guide | CNCF&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;image updater is a great little tool that I&#39;m using at work and I want to use it in the best way. I&#39;ll come back to this blog as I revisit our applications&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Craig</title>
    <id>https://pype.dev/thoughts-498/</id>
    <updated>2025-01-03T20:39:25Z</updated>
    <published>2025-01-03T20:39:25Z</published>
    <link href="https://pype.dev/thoughts-498/" rel="alternate" type="text/html"></link>
    <summary type="text">Craig is a discord bot to do multi-track recording, seems like a super easy way to get started with a podcast where the</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://craig.chat/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://craig.chat/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Craig&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://craig.chat/&#34;&gt;Craig&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Craig is a discord bot to do multi-track recording, seems like a super easy way to get started with a podcast where the hosts are virtual. Excited to try this out for pilgrims creek!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 memory - Check which processes are eating swap on Linux? - Sup…</title>
    <id>https://pype.dev/thoughts-491/</id>
    <updated>2025-01-01T16:04:56Z</updated>
    <published>2025-01-01T16:04:56Z</published>
    <link href="https://pype.dev/thoughts-491/" rel="alternate" type="text/html"></link>
    <summary type="text">I often max my swap on all my machines, and I still have no idea what I&#39;m dong different than anyone else. But using to</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://superuser.com/questions/1677225/check-which-processes-are-eating-swap-on-linux&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://superuser.com/questions/1677225/check-which-processes-are-eating-swap-on-linux&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - memory - Check which processes are eating swap on Linux? - Super User&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://superuser.com/questions/1677225/check-which-processes-are-eating-swap-on-linux&#34;&gt;memory - Check which processes are eating swap on Linux? - Super User&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I often max my swap on all my machines, and I still have no idea what I&#39;m dong different than anyone else. But using `top` I guess it&#39;s easy to see swap usage by process after adding it to the menu by hitting `f`, finding `SWAP`, then hit `space` and the right arrow key to move it to a convenient spot in the column order... Helped me see that I had 1 python process using over a full GeeBee of swap today!&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 🏡 Home | Open WebUI</title>
    <id>https://pype.dev/thoughts-490/</id>
    <updated>2025-01-01T13:26:50Z</updated>
    <published>2025-01-01T13:26:50Z</published>
    <link href="https://pype.dev/thoughts-490/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using openwebui at home, mostly with llama3.2, to do some basic things - meal planning and short script genera</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://docs.openwebui.com/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://docs.openwebui.com/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - 🏡 Home | Open WebUI&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://docs.openwebui.com/&#34;&gt;🏡 Home | Open WebUI&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;I&#39;ve been using openwebui at home, mostly with llama3.2, to do some basic things - meal planning and short script generation. One thing I want to do is generate shrotened versions of my favorite books to read to my kids. For example, the Narnia series. It&#39;s already a kid&#39;s book, but a 3 year old can&#39;t stay focused for even a whole chapter. I&#39;d love for AI to shorten up the narrative to keep the jist of the story but in about 1000 words or so... I haven&#39;t gotten it perfect, but openwebui lets me upload documents (for example, a pdf of The Lion, The Witch, and The Wardrobe, and then use that for context... It&#39;s not quite RAG I don&#39;t think, and that&#39;s on the list of ideas to play with to this end.&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Do you really need Kubernetes?</title>
    <id>https://pype.dev/thoughts-480/</id>
    <updated>2024-12-30T02:06:41Z</updated>
    <published>2024-12-30T02:06:41Z</published>
    <link href="https://pype.dev/thoughts-480/" rel="alternate" type="text/html"></link>
    <summary type="text">The other shoe just dropped</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://doyoureallyneedkubernetes.com/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://doyoureallyneedkubernetes.com/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Do you really need Kubernetes?&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://doyoureallyneedkubernetes.com/&#34;&gt;Do you really need Kubernetes?&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;The other shoe just dropped&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 audiobookshelf</title>
    <id>https://pype.dev/thoughts-479/</id>
    <updated>2024-12-29T20:53:19Z</updated>
    <published>2024-12-29T20:53:19Z</published>
    <link href="https://pype.dev/thoughts-479/" rel="alternate" type="text/html"></link>
    <summary type="text">Audiobookshelf looks like a solid competitor for booksonic. I&#39;ve liked the simple subsonic api driven nature of booksoni</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://www.audiobookshelf.org/&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://www.audiobookshelf.org/&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - audiobookshelf&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://www.audiobookshelf.org/&#34;&gt;audiobookshelf&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;Audiobookshelf looks like a solid competitor for booksonic. I&#39;ve liked the simple subsonic api driven nature of booksonic but my wife would like some more appropriate and easy-to-use organization... booksonic is not a great &#34;library&#34;... I&#39;m looking forward to putting this into my homelab soon &#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Assistants API overview - OpenAI API</title>
    <id>https://pype.dev/thoughts-477/</id>
    <updated>2024-12-29T20:26:01Z</updated>
    <published>2024-12-29T20:26:01Z</published>
    <link href="https://pype.dev/thoughts-477/" rel="alternate" type="text/html"></link>
    <summary type="text">OpenAI assistants seem like a sweet idea... I wonder if I could use one as a project manager that manages my issues and</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://platform.openai.com/docs/assistants/overview&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://platform.openai.com/docs/assistants/overview&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Assistants API overview - OpenAI API&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://platform.openai.com/docs/assistants/overview&#34;&gt;Assistants API overview - OpenAI API&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;OpenAI assistants seem like a sweet idea... I wonder if I could use one as a project manager that manages my issues and prioritizes my day like a scrum master might&#xA;&#xA;&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Do you need Kubernetes?</title>
    <id>https://pype.dev/thoughts-476/</id>
    <updated>2024-12-29T16:15:43Z</updated>
    <published>2024-12-29T16:15:43Z</published>
    <link href="https://pype.dev/thoughts-476/" rel="alternate" type="text/html"></link>
    <summary type="text">do you though?</summary>
    <content type="text">&#xA;&lt;a href=&#34;https://doyouneedkubernetes.com&#34;&gt;&#xA;    &lt;img&#xA;        src=&#34;https://shots.wayl.one/shot/?url=https://doyouneedkubernetes.com&amp;height=450&amp;width=800&amp;scaled_width=800&amp;scaled_height=450&amp;selectors=&#34;&#xA;        alt=&#34;shot of post - Do you need Kubernetes?&#34;&#xA;        height=450&#xA;        width=800&#xA;    &gt;&#xA;&lt;/a&gt;&#xA;&#xA;Here&#39;s my thought on &lt;a href=&#34;https://doyouneedkubernetes.com&#34;&gt;Do you need Kubernetes?&lt;/a&gt;&#xA;&#xA;---&#xA;&#xA;do you though?&#xA;&#xA;---&#xA;&#xA;!!! note&#xA;    This is one of [[ my-thoughts ]]. I picked this up from [Waylon Walker](https://waylonwalker.com)(https://thoughts.waylonwalker.com). It&#39;s a short note that I make about someone else&#39;s content online.  Learn more about the process [[ thoughts ]]&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>docker context (and an issue to question your sanity)</title>
    <id>https://pype.dev/docker-context-and-an-issue-to-question-your-sanity/</id>
    <updated>2024-12-19T05:59:30Z</updated>
    <published>2024-12-19T05:59:30Z</published>
    <link href="https://pype.dev/docker-context-and-an-issue-to-question-your-sanity/" rel="alternate" type="text/html"></link>
    <summary type="text">docker contexts are great, would recommend putting them in your prompt though (via starship or something else)... here&#39;s why</summary>
    <content type="html">&lt;p&gt;docker contexts are great, would recommend putting them in your prompt though (via starship or something else)&amp;hellip; here&amp;rsquo;s why&lt;/p&gt;&#xA;&lt;p&gt;I like to manage my containers remotely - I have a nice development setup on my desktop and I try to keep my server as bare-bones as possible. For a while I&amp;rsquo;ve been using ansible which makes it easy to manage configuration etc on other machines. But I recently learned about docker contexts and I&amp;rsquo;m planning to scale down my homelab management to just docker-compose stacks rather than a bunch of super complicated ansible playbooks&lt;/p&gt;&#xA;&lt;p&gt;So, setting up a context is easy - it&amp;rsquo;s basically an ssh connection to another machine!&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;docker context create koober --docker &amp;quot;host=ssh://nic@koober&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;koober&lt;/code&gt; is one of my dev machines and my &lt;code&gt;~/.ssh/config&lt;/code&gt; is setup such that I can &lt;code&gt;ssh nic@koober&lt;/code&gt;, this makes the context work really seamlessly.&lt;/p&gt;&#xA;&lt;p&gt;So there&amp;rsquo;s the &lt;code&gt;default&lt;/code&gt; context (the machine you&amp;rsquo;re on) and now I have &lt;code&gt;koober&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;To use it you run &lt;code&gt;docker context use koober&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And then to check we can &lt;code&gt;ls&lt;/code&gt; the contexts&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;docker context ls&#xA;NAME       DESCRIPTION                               DOCKER ENDPOINT               ERROR&#xA;default    Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   &#xA;koober *                                             ssh://nic@koober&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice the * - that indicates that&amp;rsquo;s our current context.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;trouble&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Trouble&lt;/span&gt; &lt;a href=&#34;#trouble&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now here&amp;rsquo;s where things get hairy&amp;hellip; you&amp;rsquo;ve gotta be super-aware of what context you&amp;rsquo;re using. I have an indicator in my starship prompt that shows the current context, but since I&amp;rsquo;m new to using them I kind of didn&amp;rsquo;t notice it until I ran into this issue&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m working on a python application in docker but was not able to execute the entrypoint even though I KNEW the file was there&amp;hellip; let&amp;rsquo;s take a look&lt;/p&gt;&#xA;&lt;h3 id=&#34;example&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Example&lt;/span&gt; &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a minimal hello world applycation in docker to illustrate the 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;&lt;span class=&#34;c1&#34;&gt;# main.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;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 world&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;pre class=&#34;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;# Use an official Python runtime as a parent image&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;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;python:3.11-slim&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;&#xA;&lt;/span&gt;&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 the working directory in the container&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;k&#34;&gt;WORKDIR&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/app&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;&#xA;&lt;/span&gt;&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;# Copy the current directory contents into the container at /app&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;k&#34;&gt;COPY&lt;/span&gt; . /app&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;&#xA;&lt;/span&gt;&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;# Run the main.py script as the container&amp;#39;s main process&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;k&#34;&gt;CMD&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;main.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;err&#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;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;hello-world&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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; &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;    &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;.:/app&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 volume mounting in my project directory &lt;code&gt;.&lt;/code&gt; to &lt;code&gt;/app&lt;/code&gt; as a common practice to develop inside the container&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s where I started to question my sanity&amp;hellip;&lt;/p&gt;&#xA;&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 up                                            &#xA;&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; Running 1/0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ✔ Container docker-context-example-hello-world-1  Created                                                                                                                                                                                                                                                              0.0s &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Attaching to hello-world-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello-world-1  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; python: can&lt;span class=&#34;s1&#34;&gt;&amp;#39;t open file &amp;#39;&lt;/span&gt;/app/main.py&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Errno 2&lt;span class=&#34;o&#34;&gt;]&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;hello-world-1 exited with code &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;&lt;code&gt;python can&#39;t open file&lt;/code&gt;? hmm&amp;hellip; Let&amp;rsquo;s take a look at the image&lt;/p&gt;&#xA;&lt;p&gt;First let&amp;rsquo;s make sure we get the image name right&lt;/p&gt;&#xA;&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 container ls -a              &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CONTAINER ID   IMAGE                                           COMMAND                  CREATED          STATUS                       PORTS                                                                                  NAMES&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3d7285fc39e2   docker-context-example-hello-world              &lt;span class=&#34;s2&#34;&gt;&amp;#34;python main.py&amp;#34;&lt;/span&gt;         &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; minutes ago   Exited &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;44&lt;/span&gt; seconds ago                                                                                           docker-context-example-hello-world-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can &lt;code&gt;docker run --rm -it --entrypoint /bin/bash --name debug docker-context-example-hello-world&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;❯ docker run --rm -it --entrypoint /bin/bash --name debug docker-context-example-hello-world  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@ee46d0e22de8:/app# python main.py&#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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@ee46d0e22de8:/app# &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;WHAT THE HECK??&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-happened&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What happened…&lt;/span&gt; &lt;a href=&#34;#what-happened&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What happened turns out to be pretty simple once we realize I&amp;rsquo;m using contexts&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;koboer&lt;/code&gt; is a remote context, the &lt;code&gt;docker run&lt;/code&gt; and &lt;code&gt;docker compose up&lt;/code&gt; commands are interacting with the docker socket on that machine.&lt;/p&gt;&#xA;&lt;p&gt;So if I compose up the stack notice that there&amp;rsquo;s a volume bind mount in there - well those do &lt;em&gt;not&lt;/em&gt; work with contexts (or at least I&amp;rsquo;m not aware of hose to make it work) and so the &lt;code&gt;/app&lt;/code&gt; directory was getting blown away essentially with an empty overlay&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;But when running with just &lt;code&gt;docker run&lt;/code&gt; with no volume mount, the code was copied in during the build and is right where we expect it&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;let-s-prove-it&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Let’s prove it&lt;/span&gt; &lt;a href=&#34;#let-s-prove-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;❯ docker run --rm -it --entrypoint /bin/bash --name debug -v .:/app docker-context-example-hello-world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@903f591c0384:/app# python main.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python: can&lt;span class=&#34;s1&#34;&gt;&amp;#39;t open file &amp;#39;&lt;/span&gt;/app/main.py&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Errno 2&lt;span class=&#34;o&#34;&gt;]&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;root@903f591c0384:/app# &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Adding a `-v .:/app` to match the compose file, we get the same error...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If we switch to the default context we are back up and running 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;✗ docker context use default&#xA;&lt;/span&gt;&lt;/span&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;Current context is now &lt;span class=&#34;s2&#34;&gt;&amp;#34;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in /tmp/docker-context-example  via   v3.13.0  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 󱔎 NO PYTHON ENVIORNMENT SET &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ docker compose up         &#xA;&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; Running 1/0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ✔ Container docker-context-example-hello-world-1  Created                                                                                                                                                                                                                                                              0.0s &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Attaching to hello-world-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello-world-1  &lt;span class=&#34;p&#34;&gt;|&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-1 exited with code &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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nic in /tmp/docker-context-example  via   v3.13.0  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 󰒄 󱔎 NO PYTHON ENVIORNMENT SET &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ docker run --rm -it --entrypoint /bin/bash --name debug -v .:/app docker-context-example-hello-world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@4045b6aa8883:/app# python main.py&#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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@4045b6aa8883:/app# &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Successful runs on both accounts with the volume mount&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TLDR&lt;/span&gt; &lt;a href=&#34;#tldr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Context is king&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Add a healthcheck to your FastAPI app</title>
    <id>https://pype.dev/add-a-healthcheck-to-your-fastapi-app/</id>
    <updated>2024-12-15T15:41:36Z</updated>
    <published>2024-12-15T15:41:36Z</published>
    <link href="https://pype.dev/add-a-healthcheck-to-your-fastapi-app/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m building a few FastAPI apps to throw in docker and run on my homelab... I wanted to add healthchecks and here&#39;s a simple way to do it</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;m building a few FastAPI apps to throw in docker and run on my homelab&amp;hellip; I wanted to add healthchecks and here&amp;rsquo;s a simple way to do it&lt;/p&gt;&#xA;&lt;p&gt;Make sure to install &lt;code&gt;curl&lt;/code&gt; in the dockerfile (near the top for effeciency)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# Install curl with minimal dependencies&#xA;RUN apt-get update &amp;amp;&amp;amp; \&#xA;    apt-get install -y --no-install-recommends curl &amp;amp;&amp;amp; \&#xA;    apt-get clean &amp;amp;&amp;amp; \&#xA;    rm -rf /var/lib/apt/lists/*&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then I recommend making compose files even for single image deployments&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;services:&#xA;  app:&#xA;    build: .&#xA;    volumes:&#xA;      - type: bind&#xA;        source: .&#xA;        target: /app&#xA;    environment:&#xA;      - PYTHONPATH=/app&#xA;      - DOCKER_ENV=true&#xA;      - UV_VIRTUALENV=/opt/app-env&#xA;    user: &amp;quot;1000:1000&amp;quot;&#xA;    restart: unless-stopped&#xA;    healthcheck:&#xA;      test: [&amp;quot;CMD&amp;quot;, &amp;quot;curl&amp;quot;, &amp;quot;-f&amp;quot;, &amp;quot;http://localhost:8000/health&amp;quot;]&#xA;      interval: 30s&#xA;      timeout: 10s&#xA;      retries: 3&#xA;      start_period: 10s&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then finally you&amp;rsquo;ll need a &lt;code&gt;/health&lt;/code&gt; endpoint&lt;/p&gt;&#xA;&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;@app.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/health&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response_class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HTMLResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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;health_check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&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;    A health check endpoint that returns a status message.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;s2&#34;&gt;&amp;#34;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Service is healthy&amp;lt;/h1&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>statically.io to help me out</title>
    <id>https://pype.dev/statically-io-to-help-me-out/</id>
    <updated>2024-12-14T13:35:31Z</updated>
    <published>2024-12-14T13:35:31Z</published>
    <link href="https://pype.dev/statically-io-to-help-me-out/" rel="alternate" type="text/html"></link>
    <summary type="text">statically.io offers a CDN that I&#39;m going to try to lean into for images in my blog. My hope is that the builds get and stay fast, and that page loads are...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://statically.io&#34;&gt;statically.io&lt;/a&gt; offers a CDN that I&amp;rsquo;m going to try to lean into for images in my blog. My hope is that the builds get and stay fast, and that page loads are fast too.&lt;/p&gt;&#xA;&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;&#xA;&lt;/span&gt;&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; &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://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/skimpy-zsh.png&amp;#34;&lt;/span&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;Skimpy ZSH&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;A fancy data summary in the shell&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;/code&gt;&lt;/pre&gt;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/skimpy-zsh.png&#34; alt=&#34;Skimpy ZSH&#34; title=&#34;A fancy data summary in the shell&#34; /&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Jellyfin container updates for HWE + AMD</title>
    <id>https://pype.dev/jellyfin-container-updates-for-hwe-amd/</id>
    <updated>2024-12-14T11:27:15Z</updated>
    <published>2024-12-14T11:27:15Z</published>
    <link href="https://pype.dev/jellyfin-container-updates-for-hwe-amd/" rel="alternate" type="text/html"></link>
    <summary type="text">I use LSIO Jelyfin container for the easy addon they provide for AMD GPUs but I couldn&#39;t get trickplay to work with HWE...</summary>
    <content type="html">&lt;p&gt;I use LSIO Jelyfin container for the easy addon they provide for AMD GPUs but I couldn&amp;rsquo;t get trickplay to work with HWE&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;There was almost NOTHING on the internet about the error, and all the threads were about BSD systems&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Thankfully someone posted &lt;a href=&#34;https://forum.jellyfin.org/t-jellyfin-amd-docker&#34;&gt;on the formum here&lt;/a&gt; but the only answer was to literally upgrade stuff in the container&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Someday maybe I&amp;rsquo;ll build off of LSIO to add this, but until then I shell&amp;rsquo;d in and homelab&amp;rsquo;d the hell out of it&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;THIS IS INSIDE THE CONTAINER - I use Portianer to make it easy&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;apt update &amp;amp;&amp;amp; apt install -y curl gpg&#xA;&#xA;mkdir -p /etc/apt/keyrings&#xA;&#xA;curl -fsSL https://repo.radeon.com/rocm/rocm.gpg.key | gpg --dearmor -o /etc/apt/keyrings/rocm.gpg&#xA;&#xA;cat &amp;lt;&amp;lt;EOF | tee /etc/apt/sources.list.d/rocm.sources&#xA;&#xA;Types: deb&#xA;&#xA;URIs: https://repo.radeon.com/rocm/apt/latest&#xA;&#xA;Suites: ubuntu&#xA;&#xA;Components: main&#xA;&#xA;Architectures: amd64&#xA;&#xA;Signed-By: /etc/apt/keyrings/rocm.gpg&#xA;&#xA;EOF&#xA;&#xA;apt update &amp;amp;&amp;amp; apt install -y rocm-opencl-runtime&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Flood Story - Types and Baptism</title>
    <id>https://pype.dev/the-flood-story-types-and-baptism/</id>
    <updated>2024-12-14T06:06:38Z</updated>
    <published>2024-12-14T06:06:38Z</published>
    <link href="https://pype.dev/the-flood-story-types-and-baptism/" rel="alternate" type="text/html"></link>
    <summary type="text">Jesus brings up the Flood story from Genesis just one time (in the recorded teachings we have).</summary>
    <content type="html">&lt;h1 id=&#34;the-flood-story-and-jesus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Flood Story and Jesus&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Jesus brings up the Flood story from Genesis just one time (in the recorded teachings we have).&lt;/p&gt;&#xA;&lt;p&gt;First to set the scene, Jesus and his disciples are visiting the temple, and the disiples are kind of &amp;ldquo;ooo-ing&amp;rdquo; and &amp;ldquo;aaah-ing&amp;rdquo; when Jesus tells them about about the coming destruction&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Matthew 24:1–2 (ESV):  24 Jesus left the temple and was going away, when his&#xA;disciples came to point out to him the buildings of the temple. 2 But he&#xA;answered them, “You see all these, do you not? Truly, I say to you, there will&#xA;not be left here one stone upon another that will not be thrown down.”  &#xA;&#xA;The Holy Bible: English Standard Version (Mt 24:1–2). (2016). Crossway Bibles.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code&gt;Matthew 24:37–39 (ESV): 37 For as were the days of Noah, so will be the coming&#xA;of the Son of Man. 38 For as in those days before the flood they were eating&#xA;and drinking, marrying and giving in marriage, until the day when Noah entered&#xA;the ark, 39 and they were unaware until the flood came and swept them all away,&#xA;so will be the coming of the Son of Man. &#xA;&#xA;The Holy Bible: English Standard Version (Mt 24:37–39). (2016). Crossway Bibles.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;At one point in Jesus&amp;rsquo; description of the destruction of the temple in&#xA;Jerusalem, he brings up the Son of Man and Noah&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Jesus says that the &amp;ldquo;coming of the Son of Man&amp;rdquo; will be like when Noah built the&#xA;ark, and no one understood until the flood (κατακλυσμός | kataklysmos) came and&#xA;took them away.&lt;/p&gt;&#xA;&lt;p&gt;In Jesus&amp;rsquo; mind the flood narrative gives him imagery and vocabulary to talk&#xA;about when God allows foreign powers to come and bring judgement&amp;hellip; This isn&amp;rsquo;t&#xA;an interpretation of the flood narrative, but it clues us into the idea that&#xA;the Hebrew bible is full of imagery, like a quilt, that follows a (or several)&#xA;pattern(s).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Jesus understood the flood story as a pattern - a theological category to talk&#xA;about God overthrowing the corrupt power systems of our world - Tim Mackie&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I think sometimes we look at the flood and think God is so bad for taking out&#xA;all of humanity, but we miss the point&amp;hellip; God is RESTORING humanity by&#xA;removing corruption&amp;hellip; that&amp;rsquo;s eventually the story we&amp;rsquo;re invited into via&#xA;faith in Jesus&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;types&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Types&lt;/span&gt; &lt;a href=&#34;#types&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A &lt;code&gt;type&lt;/code&gt; is a category of prophecy, and an &lt;code&gt;antitype&lt;/code&gt; is the revelation of the type.&lt;/p&gt;&#xA;&lt;p&gt;Essentially - a &lt;code&gt;type&lt;/code&gt; is a pattern, and the &lt;code&gt;antytype&lt;/code&gt; is the revelation of&#xA;the meaning of the pattern - and without understanding the preceding types (in&#xA;this case, the flood) then the antitype cannot be understood (in this case&#xA;baptism)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a trivial example of how a type, or a pattern, can be noticed and even build&#xA;anticipation is to think 2, 4, 6, 8&amp;hellip; what comes next? 10, and we all know&#xA;that immediately. Types in general, and types in the Bible are no different,&#xA;albeit not so simple&amp;hellip;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;flood-and-baptism&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Flood and Baptism&lt;/span&gt; &lt;a href=&#34;#flood-and-baptism&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Brace yourself&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1 Peter 3:18–22 (ESV): 18 For Christ also suffered once for sins, the righteous&#xA;for the unrighteous, that he might bring us to God, being put to death in the&#xA;flesh but made alive in the spirit, 19 in which he went and proclaimed to the&#xA;spirits in prison, 20 because they formerly did not obey, when God’s patience&#xA;waited in the days of Noah, while the ark was being prepared, in which a few,&#xA;that is, eight persons, were brought safely through water. 21 Baptism, which&#xA;corresponds to this, now saves you, not as a removal of dirt from the body but&#xA;as an appeal to God for a good conscience, through the resurrection of Jesus&#xA;Christ, 22 who has gone into heaven and is at the right hand of God, with&#xA;angels, authorities, and powers having been subjected to him.  &#xA;&#xA;The Holy Bible: English Standard Version (1 Pe 3:18–22). (2016). Crossway&#xA;Bibles.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Notice verse 21 - &amp;ldquo;Baptism, which &lt;strong&gt;corresponds&lt;/strong&gt; to this&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Corresponds is the word ἀντίτυπος (antitupos) in Greek, which means &amp;ldquo;anti-type&amp;rdquo;&#xA;This means clearly that the &lt;code&gt;type&lt;/code&gt;, or &lt;em&gt;a&lt;/em&gt; type, for baptism, is the flood&#xA;narrative&amp;hellip; or that baptism is the antitype for the flood&lt;/p&gt;&#xA;&lt;p&gt;What does this mean for baptism?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;21 Baptism, which&#xA;corresponds to this, now saves you, not as a removal of dirt from the body but&#xA;as an appeal to God for a good conscience, through the resurrection of Jesus&#xA;Christ, 22 who has gone into heaven and is at the right hand of God, with&#xA;angels, authorities, and powers having been subjected to him&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Through baptism, we experience with Jesus, resurrection and rule of the angels,&#xA;authorities, and power of the world&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;take-away&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Take Away&lt;/span&gt; &lt;a href=&#34;#take-away&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For the disciples listening&amp;hellip; are they arguing about when the flood happened?&#xA;or if it was a global or local flood?&lt;/p&gt;&#xA;&lt;p&gt;No&amp;hellip; they are listening to Jesus unpack patterns in the Bible and they hear&#xA;him invite them, through a story they know very well, into rule and reign with&#xA;him&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Flood Story - Quilt Analogy</title>
    <id>https://pype.dev/the-flood-story-quilt-analogy/</id>
    <updated>2024-12-14T05:43:43Z</updated>
    <published>2024-12-14T05:43:43Z</published>
    <link href="https://pype.dev/the-flood-story-quilt-analogy/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m slowly making my way through some Bible Project classes online because Tim Mackie is a fantastic teacher and BP has done be a _ service by opening my...</summary>
    <content type="html">&lt;h1 id=&#34;the-flood-story-in-the-hebrew-bible&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Flood Story in the Hebrew Bible&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;m slowly making my way through some Bible Project classes online because Tim&#xA;Mackie is a fantastic teacher and BP has done be a &lt;em&gt;great&lt;/em&gt; service by opening&#xA;my eyes to the reality of the Biblical narrative and what it means for my life&#xA;of faith in Jesus.&lt;/p&gt;&#xA;&lt;p&gt;The second session is filled with great points and 10 minutes in I had to jot&#xA;this one down&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-quilt-as-history&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;A Quilt as History&lt;/span&gt; &lt;a href=&#34;#a-quilt-as-history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Imagine your grandmother&amp;rsquo;s grandmother made a quilt, and passed it down the&#xA;family tree. In a sense, that quilt contains history that would pre-date you&#xA;but would absolutely have meaning to you&amp;hellip; However, you might look for meaning&#xA;that was never intended to be present.&lt;/p&gt;&#xA;&lt;p&gt;The pieces of the quilt have their own history - there will be material that&#xA;might&amp;rsquo;ve been part of a dress, or curtains, or bedsheets, or anything else&#xA;someone in the family tree found interesting and meaningful for the story they&#xA;are telling with their quilt.&lt;/p&gt;&#xA;&lt;p&gt;The question of what each of the pieces mean on their own, or in where they&#xA;come from is interesting perhaps, but it&amp;rsquo;s not the same question as asking what&#xA;those pieces mean now that they have been curated into the family quilt&amp;hellip; The&#xA;creator(s) of the quilt may repurpose those pieces entirely, and it wouldn&amp;rsquo;t be&#xA;&amp;ldquo;right&amp;rdquo; for you or me to be upset that one piece of the quilt came from an&#xA;article of clothing or cloth associated with something we might not like - the&#xA;author (your grandma) &lt;strong&gt;repurposed&lt;/strong&gt; it for that very reason, to change the&#xA;meaning and communicate something to you, perhaps something totally different&#xA;than what that cloth might&amp;rsquo;ve meant before it was added to the quilt.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creation-as-a-quilt&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Creation as a Quilt&lt;/span&gt; &lt;a href=&#34;#creation-as-a-quilt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The quilt is a curated piece of pieces of fabric - and to bring the metaphor&#xA;home very abruptly, so is the Hebrew Bible&amp;hellip; the authors of the Hebrew&#xA;scripture absolutely repurposed stories and images that were present in their&#xA;time and before, but not to make something that is a cheap copy, but to&#xA;communicate the story of the &lt;em&gt;actual&lt;/em&gt; God of gods, ruling over the world.&lt;/p&gt;&#xA;&lt;p&gt;For example - the very beginning of the creationa ccount in Genesis 1 has the&#xA;spirit of God hovering over the waters. Without getting into more details than&#xA;a short write-up warrants, the waters in ancient thought represent chaos. Not&#xA;only that, but there is an older creation account called the Enuma Elish where&#xA;their savior god, Marduk, fights the chaos waters (Tiamat) and conquers her&#xA;eventually&amp;hellip; The thing about the Hebrew narrative is that Yahweh doesn&amp;rsquo;t have&#xA;to fight the waters&amp;hellip; he subdues with his words because he isn&amp;rsquo;t in tension&#xA;with creation, or even with chaos, all things obey him and the chaos waters&#xA;that other gods had to fight and die over are no different. So the meaning of&#xA;the waters is somewhat consistent across lots of cultures, but Hebrews took the&#xA;stories and in essence made them &amp;ldquo;more true&amp;rdquo;, but at the very least made them&#xA;relevant to the story they are/were communicating about the God of gods and&#xA;Lord of love - that he is the creator of all things and invites us to partner&#xA;with him (as his image-bearers).&lt;/p&gt;&#xA;&lt;h2 id=&#34;calm-down&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Calm Down&lt;/span&gt; &lt;a href=&#34;#calm-down&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A lot of Christians get upset or skiddish when other stories and cultures get&#xA;brought up - as if the Bible had to fall from heaven in their favorite English&#xA;translation&amp;hellip; but in my opinion that is the silliest and cheapest view of the&#xA;Word of God&amp;hellip; he chose people out of foreign lands to make an inheritence for&#xA;himself, his people, and those people tell his story using images that they&#xA;know.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s important for us to answer interesting questions but not lose sight of&#xA;what&amp;rsquo;s important&amp;hellip; The Enuma Elish is an interesting piece, and there&amp;rsquo;s&#xA;parallels with the Hebrew bible, but the Hebrew creation account clearly&#xA;communicates that Yahweh doesn&amp;rsquo;t have to labor and fight for order, he speaks&#xA;order into chaos. That lesson is wholly different from other creation&#xA;narratives, but is it derivative of them&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;That used to bother me, but understanding that the authors of the Bible,&#xA;carried forth by the guidance of God&amp;rsquo;s spirit, curated these stories and&#xA;narratives for God&amp;rsquo;s people to communicate the truest Truths about him and his&#xA;love for people help me understand the reality of God partnering with humanity&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;which starts in the Garden and is how Revelation ends&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>rsync like a pro</title>
    <id>https://pype.dev/rsync-like-a-pro/</id>
    <updated>2024-12-11T10:52:23Z</updated>
    <published>2024-12-11T10:52:23Z</published>
    <link href="https://pype.dev/rsync-like-a-pro/" rel="alternate" type="text/html"></link>
    <summary type="text">I am moving a hefty amount of data to a new ZFS pool due to some corruption and I want to avoid using for this just to make sure I don&#39;t propagate any...</summary>
    <content type="html">&lt;p&gt;I am moving a hefty amount of data to a new ZFS pool due to some corruption and I want to avoid using &lt;code&gt;zfs send/recv&lt;/code&gt; for this just to make sure I don&amp;rsquo;t propagate any corrupted data to my new pool.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve used &lt;code&gt;rsync&lt;/code&gt; for simple things before but I needed this to be a little smarter and I wanted to see simple progress without flooding my terminal with a billion filenames.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TLDR&lt;/span&gt; &lt;a href=&#34;#tldr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;TLDR:&#xA;&lt;code&gt;rsync -aHAX --chmod=Da+s --info=progress2 --inplace --exclude=&#39;encrypted/docker/frigate-media&#39; /tank/ /harbor/&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;explanation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Explanation&lt;/span&gt; &lt;a href=&#34;#explanation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;-aHAX: Preserves attributes (archive mode, hard links, ACLs, extended attributes).&#xA;&amp;ndash;chmod=Da+s: Ensures the setgid bit is applied to directories.&#xA;&amp;ndash;info=progress2: Provides detailed progress information, including overall data transfer stats.&#xA;&amp;ndash;inplace: Writes directly to the destination file, avoiding temporary files (useful for large files).&#xA;&amp;ndash;exclude=&amp;lsquo;encrypted/docker/frigate-media&amp;rsquo;: Excludes the specified path (relative to the /tank root).&#xA;/tank/ /harbor/: Ensures the contents of /tank are copied directly into /harbor.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>D and uninterruptable sleep</title>
    <id>https://pype.dev/d-and-uninterruptable-sleep/</id>
    <updated>2024-12-11T10:48:10Z</updated>
    <published>2024-12-11T10:48:10Z</published>
    <link href="https://pype.dev/d-and-uninterruptable-sleep/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently have been having significant home server issues, and that&#39;s not the point of this - today I learned what state is when looking at htop.</summary>
    <content type="html">&lt;h2 id=&#34;htop&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Htop&lt;/span&gt; &lt;a href=&#34;#htop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently have been having significant home server issues, and that&amp;rsquo;s not the point of this - today I learned what &lt;code&gt;D&lt;/code&gt; state is when looking at htop.&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/d-htop.png&#34; alt=&#34;htop-d&#34; title=&#34;htop with D state&#34; /&gt;&#xA;&lt;p&gt;Apparently this means &amp;ldquo;uninterruptable sleep&amp;rdquo; and it&amp;rsquo;s a dev&amp;rsquo;s nightmare&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;context&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Context&lt;/span&gt; &lt;a href=&#34;#context&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The issue I was having was that some &lt;code&gt;zfs rollback&lt;/code&gt; commands were hung - for hours&amp;hellip; I wasn&amp;rsquo;t sure what was going on, rollbacks should be instant but I figured it was just an artifact of these issues.&lt;/p&gt;&#xA;&lt;p&gt;Turns out I still don&amp;rsquo;t know what locked the disks up but I learned why &lt;code&gt;&amp;lt;C&amp;gt;-c&lt;/code&gt; did &lt;strong&gt;nothing&lt;/strong&gt;&amp;hellip;&#xA;the more you know&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Advent 2024 - Peace</title>
    <id>https://pype.dev/advent-2024-peace/</id>
    <updated>2024-12-06T15:26:15Z</updated>
    <published>2024-12-06T15:26:15Z</published>
    <link href="https://pype.dev/advent-2024-peace/" rel="alternate" type="text/html"></link>
    <summary type="text">Luke 2:14 (ESV): 14 “Glory to God in the highest, and on earth peace among those with whom he is pleased!”</summary>
    <content type="html">&lt;h2 id=&#34;scripture&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Scripture&lt;/span&gt; &lt;a href=&#34;#scripture&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Luke 2:14 (ESV): 14 “Glory to God in the highest, and on earth peace among those with whom he is pleased!”&lt;/p&gt;&#xA;&lt;h2 id=&#34;edification&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Edification&lt;/span&gt; &lt;a href=&#34;#edification&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is a word we probably know - Shalom. It&amp;rsquo;s the Hebrew word we translate often as &amp;ldquo;peace&amp;rdquo;. But when I hear &amp;ldquo;peace&amp;rdquo; I often think about being calm - and that oversimplifies Shalom&amp;hellip; I think a more appropriate understanding is &amp;ldquo;things are as they are supposed to be&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;In the Garden, we see Shalom - the Lord partnering with humanity to steward the earth, to make things as they were supposed to be&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;You all know we messed that up, Shalom was broken and humanity was exiled.&lt;/p&gt;&#xA;&lt;p&gt;But we have a Great Healer.&lt;/p&gt;&#xA;&lt;p&gt;Jesus is Lord of all, King of Heaven and Earth, Ruler of your lives and mine, and he is the Prince of Peace&lt;/p&gt;&#xA;&lt;p&gt;Things in our lives are probably not often as they are supposed to be&amp;hellip; We get sick, worry about bills, experience tragedy, and weather the storms of life. But there is hope - confident expectation - that peace already has been, and will continue to be, restored to those whom Jesus chooses, the ones with whom he is pleased.&lt;/p&gt;&#xA;&lt;p&gt;John records a lot before telling us about the cross, and I won&amp;rsquo;t recount that in this short edification. But he recalls a hopeful word from the Lord -&lt;/p&gt;&#xA;&lt;p&gt;John 16:33 (LEB): 33 I [Jesus] have said these things to you so that in me you may have peace. In the world you have affliction, but have courage! I have conquered the world.”&lt;/p&gt;&#xA;&lt;p&gt;This season, and this week of Advent, I pray God presses the reality, and the hope for, peace, the expectation of Shalom, deeper into my heart. I pray the Spirit guides us all to bring the will of God to earth as it is in Heaven&lt;/p&gt;&#xA;&lt;p&gt;Finally I pray we may all be given, and accept, the conviction of Paul -&lt;/p&gt;&#xA;&lt;p&gt;Romans 8:18 For I consider that the sufferings of this present time are not worthy to be compared with the glory that is to be revealed to us.” Our present trials are not on an equal scale with the glory of heaven&lt;/p&gt;&#xA;&lt;p&gt;May the rest, the peace, the Shalom that Jesus gives to his followers be with you all. Amen.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>hostnamectl to easily change hostname</title>
    <id>https://pype.dev/hostnamectl-to-easily-change-hostname/</id>
    <updated>2024-12-06T07:25:59Z</updated>
    <published>2024-12-06T07:25:59Z</published>
    <link href="https://pype.dev/hostnamectl-to-easily-change-hostname/" rel="alternate" type="text/html"></link>
    <summary type="text">hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways</summary>
    <content type="html">&lt;p&gt;hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways&lt;/p&gt;&#xA;&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;❯ hostnamectl --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hostnamectl &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;OPTIONS...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; COMMAND ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Query or change system hostname.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;  status                 Show current hostname settings&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  hostname &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;        Get/set system hostname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  icon-name &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;       Get/set icon name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; host&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  chassis &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;         Get/set chassis &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; host&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  deployment &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      Get/set deployment environment &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; host&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  location &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;        Get/set location &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; host&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;  -h --help              Show 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;     --version           Show package version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     --no-ask-password   Do not prompt &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H --host&lt;span class=&#34;o&#34;&gt;=[&lt;/span&gt;USER@&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;HOST  Operate on remote host&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -M --machine&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;CONTAINER Operate on &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; container&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     --transient         Only &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; transient hostname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     --static            Only &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; static hostname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     --pretty            Only &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; pretty hostname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     --json&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;pretty&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;short&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                         Generate JSON output&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;See the hostnamectl&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; man page &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; details.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I learned there&amp;rsquo;s transient and static hostnames, so that&amp;rsquo;s cool&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;The thing I needed was &lt;code&gt;hostnamectl --static hostname babyblue-aurora&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;pretty sweet tool&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>How To Survive The Flood</title>
    <id>https://pype.dev/how-to-survive-the-flood/</id>
    <updated>2024-12-04T05:52:44Z</updated>
    <published>2024-12-04T05:52:44Z</published>
    <link href="https://pype.dev/how-to-survive-the-flood/" rel="alternate" type="text/html"></link>
    <summary type="text">There a lot of flood stories throughout the history of the world, and the Bible is no different in this regard. God warns Noah of a de-creation event,...</summary>
    <content type="html">&lt;p&gt;There a lot of flood stories throughout the history of the world, and the Bible&#xA;is no different in this regard. God warns Noah of a de-creation event, whereby&#xA;he&amp;rsquo;ll start over with humanity via Noah and his family. Noah survives the flood&#xA;by abiding in Yahweh and staying close to the One who loves him.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note this reflection doesn&amp;rsquo;t address &lt;em&gt;AT ALL&lt;/em&gt; if the flood narrative is a&#xA;&amp;ldquo;real&amp;rdquo; historical event, whether it&amp;rsquo;s a global or local event, or anything&#xA;like that - regardless of those points the Biblical authors used this type of&#xA;imagery of chaos waters to communicate themes of judgement and wrath.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jesus, in the Sermon on the Mount with the 2 houses, calls back to the images&#xA;of the chaos waters (the winds and the rains). His instruction is that the wise&#xA;man who built his house on the rock will survive, but the foolish man builds&#xA;his house on the sand and the winds and the rains destroyed it.&lt;/p&gt;&#xA;&lt;p&gt;Somewhat obviously this is metaphorical for basing your life on wisdom or&#xA;folly. The wisdom is Jesus&amp;rsquo; teaching which is all based on Yahweh&amp;rsquo;s love for&#xA;humanity and his desire to partner with humanity for the good of the whole&#xA;earth.&lt;/p&gt;&#xA;&lt;p&gt;The simple take-away is for us to survive the winds and the rain, and to say it&#xA;more fully - to survive de-creation and destruction, we must live our lives in&#xA;a way that revolves around Jesus, the perfect human. He calls us to a greater&#xA;humanity, an unbroken humanity, which is unachievable apart from him (just look&#xA;around if you doubt this truth).&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s important to notice though that abiding in the Lord, basing your life on&#xA;the rock, doesn&amp;rsquo;t spare you from the wind and the rain. Trials come, life gets&#xA;hard, shit hits the fan. The last few weeks for me haven&amp;rsquo;t been my favorite and&#xA;I&amp;rsquo;ve certainly experienced turmoil in my life but frankly Jesus makes those&#xA;things bearable&amp;hellip; in a way I can&amp;rsquo;t put enough words to I&amp;rsquo;ll just be reminded of&#xA;Paul in Romans 8&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-Romans&#34;&gt;worthy to be compared with the glory that is to be revealed to us.” Our present&#xA;trials are not on an equal scale with the glory of heaven ```&#xA;&#xA;By God&#39;s grace he&#39;s molded my heart to be nearly incapable of separating the&#xA;Love God has for me from any trial I face - it&#39;s not a magic answer or silver&#xA;bullet to fixing those problems, and it doesn&#39;t make them go away, but I know&#xA;the sufferings here aren&#39;t even worth comparing to the glory of the Lord. Amen.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Stylus for custom webpage themes</title>
    <id>https://pype.dev/stylus-for-custom-webpage-themes/</id>
    <updated>2024-11-27T06:07:39Z</updated>
    <published>2024-11-27T06:07:39Z</published>
    <link href="https://pype.dev/stylus-for-custom-webpage-themes/" rel="alternate" type="text/html"></link>
    <summary type="text">the Logos web app is DISGUSTINGY bright/white - enough to actually ruin your morning...</summary>
    <content type="html">&lt;p&gt;the Logos web app is DISGUSTINGY bright/white - enough to actually ruin your morning&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Thankfully there&amp;rsquo;s an extension called &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/styl-us/&#34;&gt;stylus&lt;/a&gt; and some kind folks in the Logos community created a nice dark theme &lt;a href=&#34;https://userstyles.world/style/18547/logos-web-app-dark-mode&#34;&gt;here&lt;/a&gt;. You simply install the extension, then go to the userstyles link &amp;lt;&amp;ndash; and click &lt;code&gt;install&lt;/code&gt;. It only changes themes for the sites configured - in this case &lt;a href=&#34;app.logos.com&#34;&gt;app.logos.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;todo-image&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TODO: image&lt;/span&gt;&lt;/h1&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>The Two Houses</title>
    <id>https://pype.dev/the-two-houses/</id>
    <updated>2024-11-27T05:40:24Z</updated>
    <published>2024-11-27T05:40:24Z</published>
    <link href="https://pype.dev/the-two-houses/" rel="alternate" type="text/html"></link>
    <summary type="text">From the visual commentary Tim calls out a few things:</summary>
    <content type="html">&lt;h1 id=&#34;the-two-houses&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Two Houses&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;context&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Context&lt;/span&gt; &lt;a href=&#34;#context&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;24 “Everyone then who hears these words of mine and does them will be like a wise man who built his house on the rock. 25 And the rain fell, and the floods came, and the winds blew and beat on that house, but it did not fall, because it had been founded on the rock. 26 And everyone who hears these words of mine and does not do them will be like a foolish man who built his house on the sand. 27 And the rain fell, and the floods came, and the winds blew and beat against that house, and it fell, and great was the fall of it.&#xA;&#xA;The Holy Bible: English Standard Version (Mt 7:24–27). (2016). Crossway Bibles.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt; &lt;a href=&#34;#reflection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;From the visual commentary Tim calls out a few things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;the rock&lt;/code&gt; is supposed to first call us back to earlier in the sermon when Jesus calls his people &amp;ldquo;the light of the world&amp;rdquo; and says &amp;ldquo;a city on a hill [mountain] cannot be hidden&amp;rdquo; (Matthew 5:14). The hill [ὄρος | oros] means &amp;ldquo;mountain&amp;rdquo; and is a hyperlink to OT teaching of God&amp;rsquo;s people living in the ideal Jerusalem on Mt. Zion. Lots of Hebrew imagery here.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The rain and floods are a callback to the Chaos Waters of the OT (and general ANE thinking). It&amp;rsquo;s a reference to the destructive nature that we humans have unleashed on the world - but the wise man who listens to Jesus lives a life with some amount of protection from those hardships - and ultimate protection from God handing us over to Chaos (destruction).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>DNS Broke After Reboot - Ubuntu 22.04</title>
    <id>https://pype.dev/dns-broke-after-reboot-ubuntu-22-04/</id>
    <updated>2024-11-22T08:08:40Z</updated>
    <published>2024-11-22T08:08:40Z</published>
    <link href="https://pype.dev/dns-broke-after-reboot-ubuntu-22-04/" rel="alternate" type="text/html"></link>
    <summary type="text">I rebooted by server and DNS broke randomly. I have no idea if it was from a kernel update or what but that&#39;s the issue with Ubuntu I guess...</summary>
    <content type="html">&lt;p&gt;I rebooted by server and DNS broke randomly. I have no idea if it was from a kernel update or what but that&amp;rsquo;s the issue with Ubuntu I guess&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;After much toil and none of the other options working for me (sorry to not have those documented here) this is what got me the vic from this &lt;a href=&#34;https://askubuntu.com/questions/1406827/how-to-set-dns-on-ubuntu-22-04-when-you-have-no-netplan-config&#34;&gt;SO Post&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;sudo mkdir /etc/systemd/resolved.conf.d/&#xA;sudo $EDITOR /etc/systemd/resolved.conf.d/dns_servers.conf&lt;/p&gt;&#xA;&lt;p&gt;Most folks probably are good with google (8.8.8.8) and cloudflare (1.1.1.1)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[Resolve]&#xA;DNS=8.8.8.8 1.1.1.1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But I decided to use tailscale&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[Resolve]&#xA;DNS=100.100.100.100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then restart systemd-resolved&lt;/p&gt;&#xA;&lt;p&gt;sudo systemctl restart systemd-resolved&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Restart KDE Plasma</title>
    <id>https://pype.dev/restart-kde-plasma/</id>
    <updated>2024-11-08T15:53:52Z</updated>
    <published>2024-11-08T15:53:52Z</published>
    <link href="https://pype.dev/restart-kde-plasma/" rel="alternate" type="text/html"></link>
    <summary type="text">Plasma shits the bed a little too often on Fedora for me right now but I finally have a quick fix...</summary>
    <content type="html">&lt;p&gt;Plasma shits the bed a little too often on Fedora for me right now but I finally have a quick fix&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;sudo killall plasmashell&#xA;&#xA;kstart plasmashell&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>OPNSense Bootstrap Recovery</title>
    <id>https://pype.dev/opnsense-bootstrap-recovery/</id>
    <updated>2024-11-07T08:40:19Z</updated>
    <published>2024-11-07T08:40:19Z</published>
    <link href="https://pype.dev/opnsense-bootstrap-recovery/" rel="alternate" type="text/html"></link>
    <summary type="text">enabling DHCP WAN port ()- running the bootstrap script -</summary>
    <content type="html">&lt;p&gt;enabling DHCP WAN port (&lt;code&gt;dhclient &amp;lt;iface&amp;gt;&lt;/code&gt;)- running the bootstrap script - &lt;code&gt;sh /usr/local/sbin/opnsense-bootstrap&lt;/code&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>BP - The Golden Rule</title>
    <id>https://pype.dev/bp-the-golden-rule/</id>
    <updated>2024-11-06T05:54:32Z</updated>
    <published>2024-11-06T05:54:32Z</published>
    <link href="https://pype.dev/bp-the-golden-rule/" rel="alternate" type="text/html"></link>
    <summary type="text">Matthew 7:12</summary>
    <content type="html">&lt;p&gt;Matthew 7:12&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;So then, everything you desire that people do to you, so also you do to them, for this is the Torah and the Prophets&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;what-do-i-desire-that-people-do-to-me&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What do I desire that people “do to [me]”?&lt;/span&gt; &lt;a href=&#34;#what-do-i-desire-that-people-do-to-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Help if I need it - I want to live in a world where humans are helpful&lt;/li&gt;&#xA;&lt;li&gt;Listen to me and understand what I say&lt;/li&gt;&#xA;&lt;li&gt;Leave me alone sometimes&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;what-is-the-torah-and-prophets&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What is the Torah and Prophets?&lt;/span&gt; &lt;a href=&#34;#what-is-the-torah-and-prophets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I know there&amp;rsquo;s a lot more to where the texts come from and the varying&#xA;traditions in Judaism. But I think at a very high level, Jesus is saying that&#xA;we all know, deep down, how to live in harmony but that it requires sacrifice.&#xA;He calls us to live sacrificially &lt;em&gt;towards each other&lt;/em&gt;, to live in Heaven&#xA;today, so we can experience the coming reality if our own resurrection&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Recovering OPNSense</title>
    <id>https://pype.dev/recovering-opnsense/</id>
    <updated>2024-11-06T00:00:00Z</updated>
    <published>2024-11-06T00:00:00Z</published>
    <link href="https://pype.dev/recovering-opnsense/" rel="alternate" type="text/html"></link>
    <summary type="text">I woke up to faulty internet and after some troubleshooting it turns out the root zfs dataset that OPNSense boots from got corrupted...</summary>
    <content type="html">&lt;p&gt;I woke up to faulty internet and after some troubleshooting it turns out the&#xA;root zfs dataset that OPNSense boots from got corrupted&amp;hellip;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;PRO-TIP - Auto backup your OPNSense config to Google Drive, git, or&#xA;nextcloud&amp;hellip; But if you won&amp;rsquo;t then at least back up your OPNSense config&#xA;somewhere everytime you update it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It&amp;rsquo;s too much to recount every issue, so here&amp;rsquo;s a bullet list what worked.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;On a fresh drive install OPNSense&lt;/li&gt;&#xA;&lt;li&gt;Plug in the old drive through a USB enclosure - now I&amp;rsquo;m not sure what would&#xA;happen if you plugged it in along with the new drive and then booted up.&#xA;Because both drives will have a zfs pool &lt;code&gt;zroot&lt;/code&gt; and the boot dataset is&#xA;automounted at &lt;code&gt;/zroot/ROOT/default&lt;/code&gt;. My old &lt;code&gt;zroot&lt;/code&gt; pool was &lt;code&gt;SUSPENDED&lt;/code&gt; so it&#xA;didn&amp;rsquo;t automount&lt;/li&gt;&#xA;&lt;li&gt;Because the old &lt;code&gt;zoot/ROOT/default&lt;/code&gt; was corrupted I did this to mount it RO:&#xA;&lt;code&gt;zpool import -d &amp;lt;path to zfs partition - /dev/stuff&amp;gt; -N zroot zrootrecovery&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;-d is the zfs flag to import the pool by disk id, -N it to not mount any of&#xA;the datasets (we need to change mountpoints) and the &lt;code&gt;zroot zrootrecovery&lt;/code&gt;&#xA;imports the &lt;code&gt;zroot&lt;/code&gt; pool with a new name&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Change the mountpoints for all the &lt;code&gt;zrootrecovery&lt;/code&gt; datasets to somewhere&#xA;like &lt;code&gt;/mnt/zrootrecovery&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Depending on the mount point you set you&amp;rsquo;ll find a &lt;code&gt;config&lt;/code&gt; directory around&#xA;&lt;code&gt;/mnt/zrootrecovery/ROOT/default/config&lt;/code&gt; - copy the file you want to another&#xA;machine via scp or whatever&lt;/li&gt;&#xA;&lt;li&gt;Go to OPNSense webui and recover from that config!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;All in all this process took me around 8 hours but I did run into about ever&#xA;issue under the sun (several bad disks in the mix, a laptop that wouldn&amp;rsquo;t live&#xA;boot into a BSD system, etc.)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Wisdom in Relationships 2</title>
    <id>https://pype.dev/reflection-wisdom-in-relationships-2/</id>
    <updated>2024-10-14T06:07:33Z</updated>
    <published>2024-10-14T06:07:33Z</published>
    <link href="https://pype.dev/reflection-wisdom-in-relationships-2/" rel="alternate" type="text/html"></link>
    <summary type="text">James builds on this with . James is arming us with some specifics from the Sermon on the Mount. We aren&#39;t just to ask for anything that we think is good......</summary>
    <content type="html">&lt;h2 id=&#34;passage&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Passage&lt;/span&gt; &lt;a href=&#34;#passage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;Why do you see the speck in the eye of your brother, but you don&#39;t perceive the&#xA;beam in your own eye?&#xA;&#xA;Or how can you say to your brother, &amp;quot;Allow me to take out the speck from your&#xA;eye,&amp;quot; and look, the beam is in your eye!&#xA;&#xA;Hypocrite! First take out the beam from your eye, and then you can see clearly&#xA;the speck in the eye of your brother.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code&gt;Ask and it will be given to you. Seek and you will find. Knock and it will be&#xA;hopend to you. For the one who asks will receive, and the one who seeks will&#xA;find. And to the one who knocks it will be opened. For what person is among&#xA;you, who when their son asks for break, will give him a rock? Or when he asks&#xA;for a fish will give him a snake? So then fi you all are bad, but you know how&#xA;to give good gifts to your children, how much more will your Father in the&#xA;skies give good things to those who ask.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;reflection&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Reflection&lt;/span&gt; &lt;a href=&#34;#reflection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;James builds on this with &lt;code&gt;if any of you lacks wisdom then ask for wisdom it will be given to you&lt;/code&gt;. James is arming us with some specifics from the Sermon&#xA;on the Mount. We aren&amp;rsquo;t just to ask for anything that we think is good&amp;hellip;&#xA;wisdom is the good we are to ask for.&lt;/p&gt;&#xA;&lt;p&gt;Tim: Prayer is important because wisdom will flow out of a deep interpersonal&#xA;relationship with God.&lt;/p&gt;&#xA;&lt;h3 id=&#34;where-has-god-given-me-wisdom&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Where has God given me wisdom?&lt;/span&gt; &lt;a href=&#34;#where-has-god-given-me-wisdom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Marriage/relationships as Kassia and I have navigated many things (job changes, moving for family, family falling through, unhealthy parent relationships, church hunts, and our own self-development and discovery)&lt;/li&gt;&#xA;&lt;li&gt;He&amp;rsquo;s given me a lot of professional wisdom - potentially through AuDHD and the exposure he&amp;rsquo;s brought me through.&lt;/li&gt;&#xA;&lt;li&gt;Through Mark Forstrom, Andrew, Nick Z, etc. I was filled with wisdom on how to be a man in the life of a boy - how to talk with someone immature, let them be and feel heard, but also on how to challenge them to grow (up).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reflection - Wisdom in Relationships</title>
    <id>https://pype.dev/reflection-wisdom-in-relationships/</id>
    <updated>2024-10-12T05:40:11Z</updated>
    <published>2024-10-12T05:40:11Z</published>
    <link href="https://pype.dev/reflection-wisdom-in-relationships/" rel="alternate" type="text/html"></link>
    <summary type="text">This morning I finally felt some motivation for a short Bible Project video. The app is great (💯 would recommend) and gives me daily reminders that are...</summary>
    <content type="html">&lt;p&gt;This morning I finally felt some motivation for a short Bible Project video.&#xA;The app is great (💯 would recommend) and gives me daily reminders that are&#xA;unobtrusive.&lt;/p&gt;&#xA;&lt;p&gt;The passage is Matthew 7:1-2&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-Do&#34;&gt;that you judge, you will be judged.&#xA;&#xA;And with the measure that you measure, it will be measured to you. ```&#xA;&#xA;There are some personal things going on for me as I wrestle and work through an&#xA;AuDHD diagnosis and there&#39;s a lot for me having grown up as a (almost&#xA;certainly) undiagnosed mild-autistic. These 2 verses are in a larger section of&#xA;Scripture called &amp;quot;The Sermon on the Mount&amp;quot;, Jesus starts it by basically saying&#xA;he&#39;ll summarize the Law and Prophets in Matthew 5, then concludes it in Matthew&#xA;7 by saying he summed them up with what we call the Golden Rule - `do unto&#xA;others as you would have them do unto you` is how my Souther Baptist Grandma&#xA;used to say it.&#xA;&#xA;I&#39;ve grown up into knowing it&#39;s simply silly to expect non-Christians to live&#xA;Biblically - I do not understand the judgement some Christians throw at&#xA;non-believers for things like cohabitation or getting drunk... It&#39;s literally&#xA;what I would do without Jesus guiding my lie. However I&#39;ve always felt a pretty&#xA;unreasonable responsibility to point out where Christians are living by double&#xA;standards. Jesus addresses this with another commonly known question - &amp;quot;Why do&#xA;you take the spec our of your brother&#39;s eye but ignore the log in your own&#xA;eye?&amp;quot;. I&#39;m very personally aware, almost to a hyper degree, but I definitely&#xA;don&#39;t have perfect-awaremenss, and I don&#39;t know if I&#39;m losing zeal as I get&#xA;older or actually growing into wisdom but I am sliding more and more into a&#xA;position of just not worrying about what other people are doing. As long as my&#xA;family is safe I&#39;m basically a full-blown libertarian when it comes to people&#xA;living their lives.&#xA;&#xA;The BP message this morning was just great confirmation that this is&#xA;directionally correct, at least right now for me. I spent a lot of time as a&#xA;kid worrying about other Christians living appropriately (this was partly&#xA;driven by needing older Christians to help me live appropriately and so I felt&#xA;responsiblity to help provide that environment for myself... combination of&#xA;God&#39;s grace and undiagnosed AuDHD methinks). Now as an adult I spend most of my&#xA;time thanking Jesus for saving me from myself and I simply trust that he will&#xA;save who he saves. Because that&#39;s not up to me I can focus on what I can manage&#xA;- my own life and family.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>docker-remote-add</title>
    <id>https://pype.dev/docker-remote-add/</id>
    <updated>2024-09-17T06:19:00Z</updated>
    <published>2024-09-17T06:19:00Z</published>
    <link href="https://pype.dev/docker-remote-add/" rel="alternate" type="text/html"></link>
    <summary type="text">Add from url??</summary>
    <content type="html">&lt;p&gt;Add from url??&lt;/p&gt;&#xA;&lt;p&gt;ADD &lt;a href=&#34;http://example.com/cars.csv&#34;&gt;http://example.com/cars.csv&lt;/a&gt; /tmp/cars.csv&lt;/p&gt;&#xA;&lt;p&gt;Unpack automatically!? (.tar, .tar.gz, .tgz, .bz2, .tbz2, .txz, .zip)&lt;/p&gt;&#xA;&lt;p&gt;ADD myapp.tar.gz /opt/myapp/&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Docker copy and chown</title>
    <id>https://pype.dev/docker-copy-and-chown/</id>
    <updated>2024-09-17T06:18:09Z</updated>
    <published>2024-09-17T06:18:09Z</published>
    <link href="https://pype.dev/docker-copy-and-chown/" rel="alternate" type="text/html"></link>
    <summary type="text">COPY --chown=myuser:mygroup source-file target-file</summary>
    <content type="html">&lt;p&gt;COPY &amp;ndash;chown=myuser:mygroup source-file target-file&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Switching from AltaCV to RenderCV for my Resume</title>
    <id>https://pype.dev/switching-from-altacv-to-rendercv-for-my-resume/</id>
    <updated>2024-08-01T05:59:46Z</updated>
    <published>2024-08-01T05:59:46Z</published>
    <link href="https://pype.dev/switching-from-altacv-to-rendercv-for-my-resume/" rel="alternate" type="text/html"></link>
    <summary type="text">I was using a fun LaTex-based project for managing my resume called AltaCV. I loved the customization and was familiar with Tek from school. However, I...</summary>
    <content type="html">&lt;p&gt;I was using a fun LaTex-based project for managing my resume called &lt;a href=&#34;https://github.com/liantze/AltaCV&#34;&gt;AltaCV&lt;/a&gt;. I loved the customization and was familiar with Tek from school. However, I update my resume so infrequently that anytime I&amp;rsquo;d hop back to it I&amp;rsquo;d have to remember how to work with Tex and that was frustrating as I&amp;rsquo;ve lost touch with it over the years.&lt;/p&gt;&#xA;&lt;p&gt;Scrolling GitHub treding repos I saw &lt;a href=&#34;https://github.com/sinaatalay/rendercv&#34;&gt;RenderCV&lt;/a&gt; which let&amp;rsquo;s me just use YAML to write my resume and then it compiles to Tek through Python. There&amp;rsquo;s a sister project to make your own using this very easly call &lt;a href=&#34;https://github.com/sinaatalay/rendercv-pipeline&#34;&gt;rendercv-pipeline&lt;/a&gt;. I forked that repo and translated my tek resume to the YAML. The included theme is nice enough is YAML is much easier to maintain long-term.&lt;/p&gt;&#xA;&lt;p&gt;My resume is behind a private GH repo but the example from rendercv-pipeline is &lt;a href=&#34;https://github.com/sinaatalay/rendercv-pipeline/blob/main/John_Doe_CV.pdf&#34;&gt;here on GitHub&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Upgrading your kernel can F you up… whoops</title>
    <id>https://pype.dev/upgrading-your-kernel-can-f-you-up-whoops/</id>
    <updated>2024-06-26T10:21:59Z</updated>
    <published>2024-06-26T10:21:59Z</published>
    <link href="https://pype.dev/upgrading-your-kernel-can-f-you-up-whoops/" rel="alternate" type="text/html"></link>
    <summary type="text">https://forum.proxmox.com/threads/update-error-with-coral-tpu-drivers.136888/#post-608975 I lost TPU for frigate, this saved me ass</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://forum.proxmox.com/threads/update-error-with-coral-tpu-drivers.136888/#post-608975&#34;&gt;https://forum.proxmox.com/threads/update-error-with-coral-tpu-drivers.136888/#post-608975&lt;/a&gt; I lost TPU for frigate, this saved me ass&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Fonts in VS C**e</title>
    <id>https://pype.dev/fonts-in-vs-c-e/</id>
    <updated>2024-05-20T06:44:07Z</updated>
    <published>2024-05-20T06:44:07Z</published>
    <link href="https://pype.dev/fonts-in-vs-c-e/" rel="alternate" type="text/html"></link>
    <summary type="text">Jet Brains has to be specified &#39;JetBrainsMono Nerd Font Mono&#39;</summary>
    <content type="html">&lt;p&gt;Jet Brains has to be specified &amp;lsquo;JetBrainsMono Nerd Font Mono&amp;rsquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Customize K9s</title>
    <id>https://pype.dev/customize-k9s/</id>
    <updated>2024-05-06T11:57:07Z</updated>
    <published>2024-05-06T11:57:07Z</published>
    <link href="https://pype.dev/customize-k9s/" rel="alternate" type="text/html"></link>
    <summary type="text">To customize k9s use the skins from catppuccin or the ones k9s supplies</summary>
    <content type="html">&lt;p&gt;To customize k9s use the skins from catppuccin or the ones k9s supplies&lt;/p&gt;&#xA;&lt;pre class=&#34;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;OUT&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;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/.config&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/k9s/skins&amp;#34;&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;s2&#34;&gt;&amp;#34;&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;curl -L https://github.com/catppuccin/k9s/archive/main.tar.gz &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar xz -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;&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; --strip-components&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; k9s-main/dist&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then edit your k9s config&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# ~/.config/k9s/config.yml&#xA;k9s:&#xA;  ui:&#xA;    skin: catppuccin-mocha&#xA;    # ...or another flavor:&#xA;    # skin: catppuccin-macchiato&#xA;    # skin: catppuccin-frappe&#xA;    # skin: catppuccin-latte&#xA;&#xA;    # ...or the transparent variants:&#xA;    # skin: catppuccin-mocha-transparent&#xA;    # skin: catppuccin-macchiato-transparent&#xA;    # skin: catppuccin-frappe-transparent&#xA;    # skin: catppuccin-latte-transparent&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Other k9s skins are available &lt;a href=&#34;https://github.com/derailed/k9s/tree/master/skins&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Git fetch failing - check your config</title>
    <id>https://pype.dev/git-fetch-failing-check-your-config/</id>
    <updated>2024-04-18T08:32:33Z</updated>
    <published>2024-04-18T08:32:33Z</published>
    <link href="https://pype.dev/git-fetch-failing-check-your-config/" rel="alternate" type="text/html"></link>
    <summary type="text">I started deploying a website to Cloudflare on a branch called . Similar to one of the GH Pages deployment patterns. But when my CI was pushing the branch I...</summary>
    <content type="html">&lt;p&gt;I started deploying a website to Cloudflare on a branch called &lt;code&gt;pages&lt;/code&gt;. Similar to one of the GH Pages deployment patterns. But when my CI was pushing the branch I couldn&amp;rsquo;t see it locally&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git fetch -a&lt;/code&gt; wasn&amp;rsquo;t pulling any new branches, and &lt;code&gt;git branch -a&lt;/code&gt; was only showing my development and main branches at the remote&amp;hellip; so what gives?&lt;/p&gt;&#xA;&lt;p&gt;I checked my git config, and to this moment I have no idea how this happened but check out my fetch config:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git config --get remote.origin.fetch&#xA;+refs/tags/*:refs/tags/*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So to fix this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git config remote.origin.fetch &#39;+refs/heads/*:refs/remotes/origin/*&#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now &lt;code&gt;git fetch -a&lt;/code&gt; works again&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt; git fetch -a&#xA;&#xA;From github.com:DigitalHarbor7/DigitalHarbor&#xA;   357a28a..969b027  develop    -&amp;gt; origin/develop&#xA;   c052ac9..6d40210  main       -&amp;gt; origin/main&#xA; * [new branch]      pages      -&amp;gt; origin/pages&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Git repo specific SSH Key!</title>
    <id>https://pype.dev/git-repo-specific-ssh-key/</id>
    <updated>2024-01-04T15:42:15Z</updated>
    <published>2024-01-04T15:42:15Z</published>
    <link href="https://pype.dev/git-repo-specific-ssh-key/" rel="alternate" type="text/html"></link>
    <summary type="text">git config --add --local core.sshCommand &#39;ssh -i &gt;&gt;&#39;</summary>
    <content type="html">&lt;p&gt;git config &amp;ndash;add &amp;ndash;local core.sshCommand &amp;lsquo;ssh -i &amp;laquo;&amp;lt;PATH_TO_SSH_KEY&amp;raquo;&amp;gt;&amp;rsquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>On Earth as It Is in Heaven</title>
    <id>https://pype.dev/on-earth-as-it-is-in-heaven/</id>
    <updated>2024-01-02T06:31:21Z</updated>
    <published>2024-01-02T06:31:21Z</published>
    <link href="https://pype.dev/on-earth-as-it-is-in-heaven/" rel="alternate" type="text/html"></link>
    <summary type="text">Video</summary>
    <content type="html">&lt;h1 id=&#34;on-earth-as-it-is-in-heaven&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;On Earth as It Is in Heaven&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://bibleproject.com/explore/video/on-earth-as-it-is-in-heaven/&#34;&gt;Video&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sermon-on-the-mount&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Sermon on the Mount&lt;/span&gt; &lt;a href=&#34;#sermon-on-the-mount&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;3 chapters filled with phrases that are very well-known in our culture&lt;/p&gt;&#xA;&lt;h3 id=&#34;phrases&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Phrases&lt;/span&gt; &lt;a href=&#34;#phrases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Love your neighbor as yourself&lt;/li&gt;&#xA;&lt;li&gt;Do to others what you would have them do to you&lt;/li&gt;&#xA;&lt;li&gt;You are the salt of the earth&lt;/li&gt;&#xA;&lt;li&gt;You can’t serve both God and money&lt;/li&gt;&#xA;&lt;li&gt;Take the plank out of your eye before you take the speck out of another’s&lt;/li&gt;&#xA;&lt;li&gt;If anyone strikes you on the cheek, turn and offer him the other cheek&lt;/li&gt;&#xA;&lt;li&gt;Love your enemy and bless those who persecute you&lt;/li&gt;&#xA;&lt;li&gt;If your hand causes you to sin, cut it… off&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;references&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;References&lt;/span&gt; &lt;a href=&#34;#references&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Mark 12:31&lt;/li&gt;&#xA;&lt;li&gt;Matthew 7:12&lt;/li&gt;&#xA;&lt;li&gt;Matthew 5:13&lt;/li&gt;&#xA;&lt;li&gt;Matthew 6:24&lt;/li&gt;&#xA;&lt;li&gt;Matthew 7:5&lt;/li&gt;&#xA;&lt;li&gt;Matthew 5:39&lt;/li&gt;&#xA;&lt;li&gt;Matthew 5:44&lt;/li&gt;&#xA;&lt;li&gt;Matthew 5:30&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;meditation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Meditation&lt;/span&gt; &lt;a href=&#34;#meditation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sermon on the mount is chiastic&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;3 main parts to the Sermon on the Mount&#xA;The middle part has 3 parts&#xA;Each of those parts has 3 parts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;climax&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Climax&lt;/span&gt; &lt;a href=&#34;#climax&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The center of the chiasm is a famous prayer&lt;/p&gt;&#xA;&lt;p&gt;“Our Father in Heaven, may your name be treated as holy. May your Kingdom come. May your will be done on Earth as it is in Heaven.”9&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol start=&#34;9&#34;&gt;&#xA;&lt;li&gt;Matthew 6:9-10&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;jewishness&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jewishness&lt;/span&gt; &lt;a href=&#34;#jewishness&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;God&amp;rsquo;s kingdom was to be ushered into the world by his creation, but Genesis&#xA;3,6,10 tell us that humans choose wrong when we define good and bad by&#xA;ourselves. Yahweh chose Abraham and built up Israel as a second attempt of&#xA;sorts to bring the his Kingdom to earth but the HB is filled with the story of&#xA;how they mostly failed.&lt;/p&gt;&#xA;&lt;p&gt;NT time is where Jesus reveals the Kingdom to Jews who are oppressed by Roman&#xA;Empire and he reveals this to exactly the oppressed audience - &amp;ldquo;Blessed are the&#xA;poor in spirit&amp;rdquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>DHCP Restart to Save Ubuntu 22.04 Server Networking</title>
    <id>https://pype.dev/dhcp-restart-to-save-ubuntu-22-04-server-networking/</id>
    <updated>2023-12-31T20:26:50Z</updated>
    <published>2023-12-31T20:26:50Z</published>
    <link href="https://pype.dev/dhcp-restart-to-save-ubuntu-22-04-server-networking/" rel="alternate" type="text/html"></link>
    <summary type="text">I moved a computer to a remote location for an off-site backup but when it was powered on it wouldn&#39;t show up on any networks. A solution that got me back in...</summary>
    <content type="html">&lt;p&gt;I moved a computer to a remote location for an off-site backup but when it was powered on it wouldn&amp;rsquo;t show up on any networks. A solution that got me back in was a friend restarting the dhcp client 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;sudo dhclient -r -v &amp;lt;interface&amp;gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo dhclient -v &amp;lt;interface&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Chaos Dragon</title>
    <id>https://pype.dev/chaos-dragon/</id>
    <updated>2023-12-20T06:08:08Z</updated>
    <published>2023-12-20T06:08:08Z</published>
    <link href="https://pype.dev/chaos-dragon/" rel="alternate" type="text/html"></link>
    <summary type="text">Dragons are metaphorical images in the Bible</summary>
    <content type="html">&lt;p&gt;Dragons are metaphorical images in the Bible&lt;/p&gt;&#xA;&lt;p&gt;Goliath -&amp;gt; armor descriptions&#xA;Leviathan&lt;/p&gt;&#xA;&lt;p&gt;Dragon slayers can be enticed to become dragons themselves&lt;/p&gt;&#xA;&lt;p&gt;Jesus is the great dragon slayer, who doesn&amp;rsquo;t give in to the inticing power of the dragon&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;calming the sea&lt;/li&gt;&#xA;&lt;li&gt;conquering sickness in others&lt;/li&gt;&#xA;&lt;li&gt;tempter in the wilderness&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Jesus&amp;rsquo; victory came through the surrender of his life - which brings him deep&#xA;into the dragon&amp;rsquo;s realm, to deliver the ultimate blow&lt;/p&gt;&#xA;&lt;p&gt;Reflect&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In the Bible, why is it challenging for humans to slay the dragon? What risks are involved?&#xA;The dragon&amp;rsquo;s power is enticing&amp;hellip; back to Genesis 3, humans are easy to persuade to do things for personal gain&#xA;It&amp;rsquo;s challenging also becauset the dragon is powerful, and humans are not&#xA;(without its power or the power of Jesus) so if we stand against it without&#xA;the Lord, what hope do we have of victory?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;What are some of the ways that Jesus confronted the “dragon” in his ministry?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;calming the sea&lt;/li&gt;&#xA;&lt;li&gt;conquering sickness in others&lt;/li&gt;&#xA;&lt;li&gt;tempter in the wilderness&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;How does Jesus ultimately defeat the “dragon”? How can we follow his example?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Surrender&lt;/li&gt;&#xA;&lt;li&gt;I think we do the same, but it doesn&amp;rsquo;t always look like death, sometimes it&amp;rsquo;s&#xA;subverting the temporary authorities we are under to comply in the least&#xA;possible ways while always ultimately striving for the coming of the Kingdom&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Simple Port Forwarding OPNSense</title>
    <id>https://pype.dev/simple-port-forwarding-opnsense/</id>
    <updated>2023-10-17T10:26:34Z</updated>
    <published>2023-10-17T10:26:34Z</published>
    <link href="https://pype.dev/simple-port-forwarding-opnsense/" rel="alternate" type="text/html"></link>
    <summary type="text">https://forum.opnsense.org/index.php?topic=8783.0</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://forum.opnsense.org/index.php?topic=8783.0&#34;&gt;https://forum.opnsense.org/index.php?topic=8783.0&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Refresh Nextcloud Groupfolders after messing around on the filesystem</title>
    <id>https://pype.dev/refresh-nextcloud-groupfolders-after-messing-around-on-the-filesystem/</id>
    <updated>2023-09-23T12:45:06Z</updated>
    <published>2023-09-23T12:45:06Z</published>
    <link href="https://pype.dev/refresh-nextcloud-groupfolders-after-messing-around-on-the-filesystem/" rel="alternate" type="text/html"></link>
    <summary type="text">Exec in as www-data and run ./occ groupfolders:scan folder_id -v (the -v to see what it&#39;s doing)</summary>
    <content type="html">&lt;p&gt;Exec in as www-data and run ./occ groupfolders:scan folder_id -v (the -v to see what it&amp;rsquo;s doing)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>lsof to find what’s using your filesystem</title>
    <id>https://pype.dev/lsof-to-find-what-s-using-your-filesystem/</id>
    <updated>2023-04-09T13:32:38Z</updated>
    <published>2023-04-09T13:32:38Z</published>
    <link href="https://pype.dev/lsof-to-find-what-s-using-your-filesystem/" rel="alternate" type="text/html"></link>
    <summary type="text">lsof | grep /tank/nas shows me what is using my nas at any time!</summary>
    <content type="html">&lt;p&gt;lsof | grep /tank/nas shows me what is using my nas at any time!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Changing ZFS key for child datasets of encrypted dataset after migration</title>
    <id>https://pype.dev/changing-zfs-key-for-child-datasets-of-encrypted-dataset-after-migration/</id>
    <updated>2023-04-08T20:12:22Z</updated>
    <published>2023-04-08T20:12:22Z</published>
    <link href="https://pype.dev/changing-zfs-key-for-child-datasets-of-encrypted-dataset-after-migration/" rel="alternate" type="text/html"></link>
    <summary type="text">➜ pihole sudo zfs load-key -L file:///path/to/.zfs.tank.key tank/encrypted/vms/arch-sandbox ➜ pihole sudo zfs change-key -o...</summary>
    <content type="html">&lt;p&gt;➜ pihole sudo zfs load-key -L file:///path/to/.zfs.tank.key tank/encrypted/vms/arch-sandbox&#xA;➜ pihole sudo zfs change-key -o keylocation=file:///path/to/.zfs.tank.key -o keyformat=raw tank/encrypted/vms/arch-sandbox&#xA;Need to load-key for each individual dataset, then change key location to be a file instead of the prompt&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Convert Word Doc to PDF with Headless Libreoffice</title>
    <id>https://pype.dev/convert-word-doc-to-pdf-with-headless-libreoffice/</id>
    <updated>2023-03-09T06:48:38Z</updated>
    <published>2023-03-09T06:48:38Z</published>
    <link href="https://pype.dev/convert-word-doc-to-pdf-with-headless-libreoffice/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using paperless-ngx to manage all my documents, but every once in a while I&#39;ll get a file to deal with...</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;ve been using paperless-ngx to manage all my documents, but every once in a while I&amp;rsquo;ll get a &lt;code&gt;.docx&lt;/code&gt; file to deal with&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Turns out Libreoffice has a headless mode a &lt;code&gt;pdf&lt;/code&gt; converter built-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;libreoffice --headless --convert-to pdf /path/to/file.docx --outdir /path/to/output/directory&#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;--outdir&lt;/code&gt; is in fact a directory, not the path to a file&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>olivet-mens-group-james-2023</title>
    <id>https://pype.dev/olivet-mens-group-james-2023/</id>
    <updated>2023-01-21T06:06:31Z</updated>
    <published>2023-01-21T06:06:31Z</published>
    <link href="https://pype.dev/olivet-mens-group-james-2023/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;!-- markdownlint-disable MD025 MD013 --&gt;&#xA;&lt;h1 id=&#34;james&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;James&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;2023 study of the book of James&lt;/p&gt;&#xA;&lt;h2 id=&#34;bp&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;BP&lt;/span&gt; &lt;a href=&#34;#bp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-guy&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Guy&lt;/span&gt; &lt;a href=&#34;#the-guy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Greek: Iakobos (Jacob in English)&lt;/p&gt;&#xA;&lt;p&gt;Jacob is one of Jesus&amp;rsquo; half-brothers who became a leader of the Jerusalem church post-resurrection&lt;/p&gt;&#xA;&lt;p&gt;The book of James is the legacy of this Jacob&amp;rsquo;s wisdom which was heavily influenced by two things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Sermon on the Mount / Matthew 5-7&lt;/li&gt;&#xA;&lt;li&gt;Proverbs - expecially chapters 1-9&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;summary&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Summary&lt;/span&gt; &lt;a href=&#34;#summary&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;These are short challenging wisdom speeches full of metaphors and one-liners&amp;hellip; Live in a wise way, submitting to Jesus&lt;/p&gt;&#xA;&lt;p&gt;Chapters 2-5 teach about wholehearted devotion to Jesus - there are 12 teachings total&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;section&lt;/th&gt;&#xA;&lt;th&gt;summary&lt;/th&gt;&#xA;&lt;th&gt;source&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;2:1-13&lt;/td&gt;&#xA;&lt;td&gt;favoritism vs love&lt;/td&gt;&#xA;&lt;td&gt;(Matthew 5:46-48)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;2:14-26&lt;/td&gt;&#xA;&lt;td&gt;genuine faith&lt;/td&gt;&#xA;&lt;td&gt;(Matthew 7:21-27)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;/td&gt;&#xA;&lt;td&gt;teaching about words&lt;/td&gt;&#xA;&lt;td&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;3:1-12&lt;/td&gt;&#xA;&lt;td&gt;the tongue&lt;/td&gt;&#xA;&lt;td&gt;(Luke 6:43-45)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;4:11-12 fm condeming others&lt;/td&gt;&#xA;&lt;td&gt;(matthew 12:36-37)&lt;/td&gt;&#xA;&lt;td&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;5:12&lt;/td&gt;&#xA;&lt;td&gt;telling the truth&lt;/td&gt;&#xA;&lt;td&gt;(Matthew 5:37)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;/td&gt;&#xA;&lt;td&gt;wealth&lt;/td&gt;&#xA;&lt;td&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;4:13-17&lt;/td&gt;&#xA;&lt;td&gt;arrogance of wealth&lt;/td&gt;&#xA;&lt;td&gt;(Matthew 6:28-34)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;5:1-6&lt;/td&gt;&#xA;&lt;td&gt;danger of wealth&lt;/td&gt;&#xA;&lt;td&gt;(Matthew 6:19-21)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;5:7-11&lt;/td&gt;&#xA;&lt;td&gt;peace and endurance&lt;/td&gt;&#xA;&lt;td&gt;(Matthew 24:13)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;5:13-18&lt;/td&gt;&#xA;&lt;td&gt;faith-filled prayer&lt;/td&gt;&#xA;&lt;td&gt;(Mathew 21:21-22)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Other 4 are in the poster about James on BP&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Chapter 1 the introduction&lt;/p&gt;&#xA;&lt;p&gt;2-4: life&amp;rsquo;s trials produce endurance and can make us &lt;em&gt;perfect&lt;/em&gt; and &lt;em&gt;complete&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;perect&lt;/em&gt; is repeated 7 times in the book - it refers to &amp;ldquo;wholeness&amp;rdquo; and integrity.&lt;/p&gt;&#xA;&lt;p&gt;We are all fractrued and inconsistent people&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;perfect&lt;/em&gt;: Hebrew: Tamim, Greek: Teleios&lt;/p&gt;&#xA;&lt;p&gt;5-8: God gives wisdom to those who ask in faith&lt;/p&gt;&#xA;&lt;p&gt;9-11: povety can force us tot rust on God alone; wealth will pass away&lt;/p&gt;&#xA;&lt;p&gt;12-18: God is generous and gives us new birth through Jesus&lt;/p&gt;&#xA;&lt;p&gt;19-27: Don&amp;rsquo;t just listen to God&amp;rsquo;s word but &lt;em&gt;do&lt;/em&gt; it. It&amp;rsquo;s the Torah of Freedom&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;speak with love&lt;/li&gt;&#xA;&lt;li&gt;serve the poor&lt;/li&gt;&#xA;&lt;li&gt;be wholly devoted to God&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;jan-21&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jan 21&lt;/span&gt; &lt;a href=&#34;#jan-21&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;James 1:1&lt;/p&gt;&#xA;&lt;p&gt;James, a servant of God and of the Lord Jesus Christ, To the twelve tribes in the Dispersion: Greetings.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Dispersion: διασπορά - same word used by Peter to describe Jesus-followers as exiles&lt;/p&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;James 1:2-11&lt;/p&gt;&#xA;&lt;p&gt;2 Count it all joy, my brothers, when you meet trials of various kinds,&#xA;3 for you know that the testing of your faith produces steadfastness. 4 And&#xA;let steadfastness have its full effect, that you may be perfect and&#xA;complete, lacking in nothing.  5 If any of you lacks wisdom, let him ask&#xA;God, who gives generously to all without reproach, and it will be given&#xA;him. 6 But let him ask in faith, with no doubting, for the one who doubts&#xA;is like a wave of the sea that is driven and tossed by the wind. 7 For that&#xA;person must not suppose that he will receive anything from the Lord; 8 he&#xA;is a double-minded man, unstable in all his ways.  9 Let the lowly brother&#xA;boast in his exaltation, 10 and the rich in his humiliation, because like a&#xA;flower of the grass he will pass away. 11 For the sun rises with its&#xA;scorching heat and withers the grass; its flower falls, and its beauty&#xA;perishes. So also will the rich man fade away in the midst of his pursuits.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;july-15&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;July 15&lt;/span&gt; &lt;a href=&#34;#july-15&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Missed several meetings due to unfortunate travel circumstances&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;James 3:13-18&lt;/p&gt;&#xA;&lt;p&gt;13 Who is wise and understanding among you? By his good conduct let him&#xA;show his works in the meekness of wisdom. 14 But if you have bitter jealousy&#xA;and selfish ambition in your hearts, do not boast and be false to the truth.&#xA;15 This is not the wisdom that comes down from above, but is earthly,&#xA;unspiritual, demonic. 16 For where jealousy and selfish ambition exist, there&#xA;will be disorder and every vile practice. 17 But the wisdom from above is first&#xA;pure, then peaceable, gentle, open to reason, full of mercy and good fruits,&#xA;impartial and sincere. 18 And a harvest of righteousness is sown in peace by&#xA;those who make peace.&lt;/p&gt;&#xA;&lt;p&gt;The Holy Bible: English Standard Version (Jas 3:13–18). (2016). Crossway&#xA;Bibles.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;december-16&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;December 16&lt;/span&gt; &lt;a href=&#34;#december-16&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;James 5:13-20&lt;/p&gt;&#xA;&lt;p&gt;13 Is anyone among you suffering misfortune? He should pray. Is anyone&#xA;cheerful? He should sing praise. 14 Is anyone among you sick? He should&#xA;summon the elders of the church and they should pray over him, anointing&#xA;him with olive oil in the name of the Lord. 15 And the prayer of faith will&#xA;save the one who is sick, and the Lord will raise him up, and if he has&#xA;committed sins ⌊he will be forgiven⌋. 16 Therefore confess your sins to one&#xA;another, and pray for one another, so that you may be healed. The effective&#xA;prayer of a righteous person accomplishes much. 17 Elijah was a human being&#xA;with the same nature as us, and ⌊he prayed fervently⌋ for it not to rain,&#xA;and it did not rain on the land for three years and six months. 18 And he&#xA;prayed again, and the sky gave rain and the earth produced its fruit.&#xA;19 My brothers, if anyone among you should wander away from the truth and&#xA;someone turns him back, 20 he should know that the one who turns a sinner&#xA;back from the error of his way will save that person’s soul from death, and&#xA;will cover over a great number of sins.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;when-to-pray&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;When to pray&lt;/span&gt; &lt;a href=&#34;#when-to-pray&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;All circumstances of life&lt;/li&gt;&#xA;&lt;li&gt;Sickness&lt;/li&gt;&#xA;&lt;li&gt;Confession&lt;/li&gt;&#xA;&lt;li&gt;Working out the will of God&lt;/li&gt;&#xA;&lt;li&gt;Retrieving wandering souls&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;James ends his letter with prayer because it&amp;rsquo;s an exhortation of the Disapora&#xA;and a life of faith must revolve around prayer&lt;/p&gt;&#xA;&lt;p&gt;For myself I think I pray in all circumstances, sickness, confession all ok. I&#xA;do not pray for long periods of time, and don&amp;rsquo;t feel very disiplined, but&#xA;whenever anything happens, by the Lord&amp;rsquo;s grace I am quick to turn my&#xA;attention to Jesus, and hopefully turn the attention of my wife/kids to Jesus&#xA;as well. Example: a person collapsed at the water park we went to this last&#xA;weekend, Athalia and I were close-ish to that happening, so I told her we&#xA;needed to stop what we were doing and pray that Jesus would intervene.&lt;/p&gt;&#xA;&lt;p&gt;I confess sin to Jesus but I&amp;rsquo;m not sure what that &lt;strong&gt;should&lt;/strong&gt; look like. I&amp;rsquo;ve&#xA;taken a Brother Lawrence approach to try and quickly confess and move on,&#xA;accepting grace, but I struggle with intentional sinning in this area&amp;hellip; What&#xA;is prayer if I knew what I was doing was wrong?&lt;/p&gt;&#xA;&lt;p&gt;I am not more inclined to pray for suffering, but I think that&amp;rsquo;s because I&amp;rsquo;ve&#xA;very consciously been trying to pray in good circumstances more often because&#xA;when we only pray in suffering that turns prayer into a Santa&amp;rsquo;s wish list&#xA;situation I think&amp;hellip; yes we need the Lord in suffering, but we display our need&#xA;for him NOT only in suffering, and if that is true then it begs the question,&#xA;to me anyways, of whether or not the need is truly there&lt;/p&gt;&#xA;&lt;h3 id=&#34;jc-ryle-s-quote&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;JC Ryle’s quote&lt;/span&gt; &lt;a href=&#34;#jc-ryle-s-quote&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I disagree with the dude&amp;rsquo;s quote about the requirement of prayer, but only&#xA;because the message is given in a direction that makes prayer look like&#xA;something I have to do to get/keep/maintain my salvation&amp;hellip; Yahweh changes his&#xA;children&amp;rsquo;s hearts and orients them towards him through prayer - if someone&#xA;doesn&amp;rsquo;t then I think that just means Yahweh has not worked or has not chosen&#xA;them, but them calling themselves a Christian is irrelevant, and no amount of&#xA;forcing themselves to pray will change Yahweh&amp;rsquo;s will.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 1:6&lt;/p&gt;&#xA;&lt;p&gt;From the sole of the foot and up to the head&#xA;there is no health in it;&#xA;bruise and sore and bleeding wound have not been cleansed,&#xA;and they have not been bound up&#xA;and not softened with the oil.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalm 23:5&lt;/p&gt;&#xA;&lt;p&gt;5 You prepare before me a table&#xA;in the presence of my oppressors.&#xA;You anoint my head with oil;&#xA;my cup is overflowing.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1 Kings 17:1-16&lt;/p&gt;&#xA;&lt;p&gt;17 Elijah the Tishbite from Tishbe of Gilead said to Ahab, “⌊As Yahweh&#xA;lives⌋, the God of Israel before whom I stand, there shall surely not be&#xA;dew nor rain these years ⌊except by my command⌋.” 2 Then the word of Yahweh&#xA;came to him, saying, 3 “Go from this place and turn to the east; you must&#xA;hide yourself in the Wadi Kerith ⌊which faces the Jordan⌋. 4 It shall be&#xA;that you shall drink from the wadi, and I have commanded the crows to&#xA;sustain you there.” 5 So he went and did according to the word of Yahweh.&#xA;He went and stayed in the Wadi Kerith ⌊which faces the Jordan⌋. 6 The crows&#xA;were bringing bread and meat in the morning for him and bread and meat in&#xA;the evening, and he drank from the wadi. 7 It happened ⌊after a while⌋ that&#xA;the wadi dried up, because there was no rain in the land.&lt;/p&gt;&#xA;&lt;p&gt;8 Then the&#xA;word of Yahweh came to him, saying, 9 “Get up and go to Zarephath which&#xA;belongs to Sidon and stay there. Look, I have commanded a woman there, a&#xA;widow, to sustain you.” 10 So he arose and went to Zarephath and came to&#xA;the gate of the city. There was a widow woman gathering wood, so he called&#xA;to her, and he said, “Please bring a little water for me in a vessel so&#xA;that I can drink.” 11 She went to fetch it, and he called to her and said,&#xA;“Please bring me a morsel of bread in your hand.” 12 She said, “⌊As Yahweh&#xA;your God lives⌋, surely I do not have a cake, ⌊but only a handful of flour⌋&#xA;in the jar and a little olive oil in the jug. Here I am gathering a few&#xA;pieces of wood, and I will go and prepare it for me and my son, that we&#xA;might eat it and die.” 13 Elijah said to her, “Don’t be afraid. Go and do&#xA;according to your word; only make for me a small bread cake from it first,&#xA;and bring it out to me. Make it for yourself and for your son afterward.&#xA;14 For thus says Yahweh, the God of Israel: ‘The jar of flour will not be&#xA;emptied and the jug of olive oil will not run out until the day Yahweh&#xA;gives rain on the surface of the earth.’ ” 15 So she went and did according&#xA;to the word of Elijah; then both she and he ate with her household for many&#xA;days. 16 The jar of flour was not emptied and the jug of olive oil did not&#xA;run out, according to the word of Yahweh which he spoke by the hand of&#xA;Elijah.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>FFMPEG 10-bit videos to 8-bit</title>
    <id>https://pype.dev/ffmpeg-10-bit-videos-to-8-bit/</id>
    <updated>2023-01-16T13:15:53Z</updated>
    <published>2023-01-16T13:15:53Z</published>
    <link href="https://pype.dev/ffmpeg-10-bit-videos-to-8-bit/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;code&gt;ffmpeg -i input.mp4 -map 0 -c:v libx264 -vf format=yuv420p -c:a copy output.mp4&lt;/code&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>i3-Like keyboard mapping in Pop_OS</title>
    <id>https://pype.dev/i3-like-keyboard-mapping-in-pop-os/</id>
    <updated>2023-01-12T05:51:25Z</updated>
    <published>2023-01-12T05:51:25Z</published>
    <link href="https://pype.dev/i3-like-keyboard-mapping-in-pop-os/" rel="alternate" type="text/html"></link>
    <summary type="text">I was introduced to tiling window managers through i3, which I use heavily on one of my machines. I have switched to Pop_OS! at home though, which has a...</summary>
    <content type="html">&lt;p&gt;I was introduced to tiling window managers through i3, which I use heavily on&#xA;one of my machines. I have switched to Pop_OS! at home though, which has a&#xA;tiling window mode but the keybindings are not what I&amp;rsquo;m used to for i3. I&#xA;wanted to at least navigate workspaces how I&amp;rsquo;m used to doing (cause I set&#xA;workspace 3 for communication apps, 1 for my terminal, etc&amp;hellip;)&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s how I set keybindings for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;Super&amp;gt; + &amp;lt;number&amp;gt;&lt;/code&gt; sends me to that numbered workspace&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;Shift&amp;gt; + &amp;lt;Super&amp;gt; + &amp;lt;number&amp;gt;&lt;/code&gt; moves the window I&amp;rsquo;m focused on to workspace &lt;code&gt;number&lt;/code&gt;&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;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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.mutter dynamic-workspaces &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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.preferences num-workspaces &lt;span class=&#34;m&#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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-5 &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.shell.keybindings switch-to-application-9 &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-1 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;1&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-2 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;2&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-3 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;3&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-4 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;4&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-5 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;5&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-6 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;6&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-7 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;7&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-8 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;8&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-9 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;9&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings switch-to-workspace-10 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;0&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-1 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;1&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-2 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;2&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-3 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;3&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-4 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;4&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-5 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;5&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-6 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;6&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-7 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;7&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-8 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;8&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-9 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;9&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.wm.keybindings move-to-workspace-10 &lt;span class=&#34;s2&#34;&gt;&amp;#34;[&amp;#39;&amp;lt;Super&amp;gt;&amp;lt;Shift&amp;gt;0&amp;#39;]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Use non-standard named ssh keys with github</title>
    <id>https://pype.dev/use-non-standard-named-ssh-keys-with-github/</id>
    <updated>2023-01-03T08:34:50Z</updated>
    <published>2023-01-03T08:34:50Z</published>
    <link href="https://pype.dev/use-non-standard-named-ssh-keys-with-github/" rel="alternate" type="text/html"></link>
    <summary type="text">I was getting when trying to push to GH using ssh. When I tested the connection I saw that a bunch of keys in ``~/.ssh/ were being attempted</summary>
    <content type="html">&lt;p&gt;I was getting &lt;code&gt;(publickey denied)&lt;/code&gt; when trying to push to GH using ssh. When I&#xA;tested the connection I saw that a bunch of keys in ``~/.ssh/ were being&#xA;attempted&lt;/p&gt;&#xA;&lt;pre class=&#34;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;✗ ssh git@github.com -vv&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&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;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;go&#34;&gt;debug1: Will attempt key: /home/nic/.ssh/id_rsa &#xA;&lt;/span&gt;&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;debug1: Will attempt key: /home/nic/.ssh/id_ecdsa &#xA;&lt;/span&gt;&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;debug1: Will attempt key: /home/nic/.ssh/id_ecdsa_sk &#xA;&lt;/span&gt;&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;debug1: Will attempt key: /home/nic/.ssh/id_ed25519 &#xA;&lt;/span&gt;&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;debug1: Will attempt key: /home/nic/.ssh/id_ed25519_sk &#xA;&lt;/span&gt;&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;debug1: Will attempt key: /home/nic/.ssh/id_xmss &#xA;&lt;/span&gt;&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;debug1: Will attempt key: /home/nic/.ssh/id_dsa &#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&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;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;go&#34;&gt;debug1: No more authentication methods to try.&#xA;&lt;/span&gt;&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;git@github.com: Permission denied (publickey).&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;None of those were the key I setup with GH. So I added an entry&#xA;into &lt;code&gt;~/.ssh/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;Host&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;github.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;User git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Port 22&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hostname github.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IdentityFile ~/.ssh/my_custom_github_key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TCPKeepAlive yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IdentitiesOnly yes &#xA;&lt;/span&gt;&lt;/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>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reminder about ssh-copy-id for SSH and Ansible</title>
    <id>https://pype.dev/reminder-about-ssh-copy-id-for-ssh-and-ansible/</id>
    <updated>2022-12-28T13:33:07Z</updated>
    <published>2022-12-28T13:33:07Z</published>
    <link href="https://pype.dev/reminder-about-ssh-copy-id-for-ssh-and-ansible/" rel="alternate" type="text/html"></link>
    <summary type="text">this makes sure I can run ansible from my desktop against VMs on my server easily if they have tailscale for the hostname - otherwise use the IP</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;ssh-copy-id -i my.key.pub &amp;lt;hostname probably from tailscale&amp;gt;&lt;/code&gt;&#xA;this makes sure I can run ansible from my desktop against VMs on my server&#xA;easily if they have tailscale for the hostname - otherwise use the IP&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Systemd timer for syncoid</title>
    <id>https://pype.dev/systemd-timer-for-syncoid/</id>
    <updated>2022-12-21T11:38:27Z</updated>
    <published>2022-12-21T11:38:27Z</published>
    <link href="https://pype.dev/systemd-timer-for-syncoid/" rel="alternate" type="text/html"></link>
    <summary type="text">I have a bash script called which boils down to a barebones -</summary>
    <content type="html">&lt;p&gt;I have a bash script called &lt;code&gt;syncoid-job&lt;/code&gt; which boils down to a barebones -&lt;/p&gt;&#xA;&lt;pre class=&#34;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;syncoid --no-sync-snap --sendoptions&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;w --no-privilege-elevation &lt;span class=&#34;nv&#34;&gt;$SYNOIC_USER&lt;/span&gt;@&lt;span class=&#34;nv&#34;&gt;$SERVER&lt;/span&gt;:tank/encrypted/nas tank/encrypted/nas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I want to run this script hourly but as my user (notice the no-privilege-elevation flag)&lt;/p&gt;&#xA;&lt;p&gt;First - create a systemd unit file at &lt;code&gt;/etc/systemd/system/syncoid-replication.service&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;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&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;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ZFS Replication With Syncoid&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&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;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;oneshot&#xA;&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;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/dotfiles/syncoid-job&#xA;&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;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;nv&#34;&gt;Group&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$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;&#xA;&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;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;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;multi-user.target&#xA;&lt;/span&gt;&lt;/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;Then we save the unit file, enable the service, and then start 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;go&#34;&gt;systemctl enable syncoid-replication.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;go&#34;&gt;systemctl start syncoid-replication.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;err&#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;Note this will run that script&amp;hellip; so be ready for syncoid to do its thing&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now for the timer&amp;hellip; We create &lt;code&gt;/etc/systemd/system/syncoid-replication.timer&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;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&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;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Run syncoid-replication every hour&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;Timer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&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;OnCalendar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;hourly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;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;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;timers.target&#xA;&lt;/span&gt;&lt;/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;Hit it with a &lt;code&gt;systemctl enable syncoid-replication.timer&lt;/code&gt; and you&amp;rsquo;re in business!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Adding docker daemon.json broke docker</title>
    <id>https://pype.dev/adding-docker-daemon-json-broke-docker/</id>
    <updated>2022-12-21T10:02:25Z</updated>
    <published>2022-12-21T10:02:25Z</published>
    <link href="https://pype.dev/adding-docker-daemon-json-broke-docker/" rel="alternate" type="text/html"></link>
    <summary type="text">in /lib/systemd/system/docker.service there is an ExecStart command that got placed there when I setup Docker with Ansible - it threw the -H flag which told...</summary>
    <content type="html">&lt;p&gt;in /lib/systemd/system/docker.service there is an ExecStart command that got placed there when I setup Docker with Ansible - it threw the -H flag which told the daemon what hosts to setup. But I added the &amp;ldquo;hosts&amp;rdquo; key in my daemon.json and it broke - so removing the -H flag from the systemd unit fixed it&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>suda.vim for sudo access to files</title>
    <id>https://pype.dev/suda-vim-for-sudo-access-to-files/</id>
    <updated>2022-12-21T09:45:34Z</updated>
    <published>2022-12-21T09:45:34Z</published>
    <link href="https://pype.dev/suda-vim-for-sudo-access-to-files/" rel="alternate" type="text/html"></link>
    <summary type="text">I regularly need to edit system config files - take /etc/sanoid/sanoid.conf as an example... I&#39;ll want to play with something but if I don&#39;t start Neovim as...</summary>
    <content type="html">&lt;p&gt;I regularly need to edit system config files - take /etc/sanoid/sanoid.conf as&#xA;an example&amp;hellip; I&amp;rsquo;ll want to play with something but if I don&amp;rsquo;t start Neovim as&#xA;root then I get in trouble making edits I can&amp;rsquo;t save! So&#xA;&lt;a href=&#34;https://github.com/lambdalisue/suda.vim&#34;&gt;suda.vim&lt;/a&gt; gives me&#xA;&lt;code&gt;:SudaWrite&lt;/code&gt; which let&amp;rsquo;s me write that buffer with sudo privileges even though&#xA;I&amp;rsquo;m Neovim is running with my login user!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pipe to a pager to preserve console output in SSH session</title>
    <id>https://pype.dev/pipe-to-a-pager-to-preserve-console-output-in-ssh-session/</id>
    <updated>2022-12-18T15:04:02Z</updated>
    <published>2022-12-18T15:04:02Z</published>
    <link href="https://pype.dev/pipe-to-a-pager-to-preserve-console-output-in-ssh-session/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m playing with my ansible playbook in a remote tmux session, and I&#39;m no wiz so I don&#39;t know the ins and outs, but I can&#39;t scroll up to get any console log...</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;m playing with my ansible playbook in a remote tmux session, and I&amp;rsquo;m no wiz&#xA;so I don&amp;rsquo;t know the ins and outs, but I can&amp;rsquo;t scroll up to get any console log&#xA;output that&amp;rsquo;s not already visible on my screen. So I&amp;rsquo;m starting to end my&#xA;commands with &lt;code&gt; | less&lt;/code&gt; so I can page through the console output!&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ansible-playbook plays.yml -v --tags mytag | less&lt;/code&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Cron for Nextcloud in Docker</title>
    <id>https://pype.dev/cron-for-nextcloud-in-docker/</id>
    <updated>2022-12-13T06:43:45Z</updated>
    <published>2022-12-13T06:43:45Z</published>
    <link href="https://pype.dev/cron-for-nextcloud-in-docker/" rel="alternate" type="text/html"></link>
    <summary type="text">AJAX wasn&#39;t cutting it, traditional crontab in containers doesn&#39;t make much sense to me, webcron is recommended but I don&#39;t want to register with anything...</summary>
    <content type="html">&lt;p&gt;AJAX wasn&amp;rsquo;t cutting it, traditional crontab in containers doesn&amp;rsquo;t make much&#xA;sense to me, webcron is recommended but I don&amp;rsquo;t want to register with anything&#xA;outside my LAN&amp;hellip; Turns out you can just spin up an identical container with a&#xA;different entrypoint to /cron.sh that does what you need!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note that this is a task in an Ansible playbook - but the docker-compose is straight forward&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the only thing you need to make sure of is that &lt;em&gt;all&lt;/em&gt; the configuration&#xA;options - data volumes, user permissions, etc. are &lt;em&gt;identical&lt;/em&gt; between the&#xA;containers running the cron job and the one actually hosting NextCloud. This&#xA;ensures that the container running cron has proper access to the database and&#xA;filesystem - or at least the same access as NextCloud proper.&lt;/p&gt;&#xA;&lt;pre class=&#34;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;Nextcloud Cron Docker 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;docker_container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;nextcloud-cron&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;s2&#34;&gt;&amp;#34;{{ nextcloud_image }}&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;pull&lt;/span&gt;&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;links&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;nextcloud-mysql:mysql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;entrypoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/cron.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;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;s2&#34;&gt;&amp;#34;{{ nextcloud_data_directory }}/nextcloud:/var/www/html:rw&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;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;MYSQL_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;s2&#34;&gt;&amp;#34;mysql&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;MYSQL_DATABASE&lt;/span&gt;&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;nextcloud&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;MYSQL_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;{{ nextcloud_sql_user }}&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;MYSQL_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;s2&#34;&gt;&amp;#34;{{ nextcloud_sql_password }}&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;NEXTCLOUD_TRUSTED_DOMAINS&lt;/span&gt;&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;{{ nextcloud_hostname }}.{{ ansible_nas_domain }}&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;PUID&lt;/span&gt;&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;{{ nextcloud_user_id }}&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;PGID&lt;/span&gt;&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;{{ nextcloud_group_id }}&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;TZ&lt;/span&gt;&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;{{ ansible_nas_timezone }}&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_policy&lt;/span&gt;&lt;span class=&#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;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;{{ nextcloud_memory }}&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Call basicConfig to get Python log messages in iPython</title>
    <id>https://pype.dev/call-basicconfig-to-get-python-log-messages-in-ipython/</id>
    <updated>2022-12-10T14:04:23Z</updated>
    <published>2022-12-10T14:04:23Z</published>
    <link href="https://pype.dev/call-basicconfig-to-get-python-log-messages-in-ipython/" rel="alternate" type="text/html"></link>
    <summary type="text">I am trying to adopt instead of but ran into a confusing thing in ipython during Advent of Code... I riddled by script with (yes after setting ) but in...</summary>
    <content type="html">&lt;h1 id=&#34;logging-instead-of-printing&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Logging instead of printing&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I am trying to adopt &lt;code&gt;logger.debug&lt;/code&gt; instead of &lt;code&gt;print&lt;/code&gt; but ran into a confusing&#xA;thing in ipython during Advent of Code&amp;hellip; I riddled by script with&#xA;&lt;code&gt;logger.debug&lt;/code&gt; (yes after setting &lt;code&gt;logging.setLevel(&#39;DEBUG&#39;)&lt;/code&gt;) but in ipython&#xA;none of my log messages showed 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;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;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;vm&#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;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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Turns out what I was missing was a call to &lt;code&gt;basicConfig&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;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;c1&#34;&gt;# forget this and your messages are in the ether! or at least not seen in 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;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;basicConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&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;vm&#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;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;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;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;bonus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bonus&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Want your new messages to show up while iterating on something without killing&#xA;the ipython kernel?&lt;/p&gt;&#xA;&lt;pre class=&#34;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;importlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reload&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;reload&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;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# to make sure you get new log messages you add while developing!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>New lines in Markdown tables</title>
    <id>https://pype.dev/new-lines-in-markdown-tables/</id>
    <updated>2022-11-25T13:35:05Z</updated>
    <published>2022-11-25T13:35:05Z</published>
    <link href="https://pype.dev/new-lines-in-markdown-tables/" rel="alternate" type="text/html"></link>
    <summary type="text">I wanted to break down some long lines in a Markdown table cell to make it look nicer on my blog but \n didn&#39;t do anything for me... turns out is the magic...</summary>
    <content type="html">&lt;p&gt;I wanted to break down some long lines in a Markdown table cell to make it look&#xA;nicer on my blog but \n didn&amp;rsquo;t do anything for me&amp;hellip; turns out &lt;br/&gt; is the&#xA;magic sauce&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&lt;em&gt;Column 1&lt;/em&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;em&gt;Column 2&lt;/em&gt;&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Key&lt;/td&gt;&#xA;&lt;td&gt;Doggo ipsum many pats. Borkdrive borking doggo doing me a frighten doggorino, noodle horse heckin. what a nice floof. Pupper borking doggo you are doing me a frighten, much ruin diet.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&amp;mdash;&lt;/td&gt;&#xA;&lt;td&gt;&amp;mdash;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&lt;em&gt;Column 1&lt;/em&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;em&gt;Column 2&lt;/em&gt;&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Key&lt;/td&gt;&#xA;&lt;td&gt;Doggo ipsum many pats. &lt;br/&gt; Borkdrive borking doggo doing me a frighten doggorino, noodle horse heckin. &lt;br/&gt; what a nice floof. &lt;br/&gt; Pupper borking doggo you are doing me a frighten, much ruin diet.&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&amp;mdash;&lt;/td&gt;&#xA;&lt;td&gt;&amp;mdash;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Description of my proposed vimconf 2022 talk</title>
    <id>https://pype.dev/description-of-my-proposed-vimconf-2022-talk/</id>
    <updated>2022-11-12T19:39:19Z</updated>
    <published>2022-11-12T19:39:19Z</published>
    <link href="https://pype.dev/description-of-my-proposed-vimconf-2022-talk/" rel="alternate" type="text/html"></link>
    <summary type="text">Switching to Vim opened a whole new world to me for interacting with a computer and for getting things done. Before I adopted Vim I used GUIs for everything...</summary>
    <content type="html">&lt;p&gt;Switching to Vim opened a whole new world to me for interacting with a computer&#xA;and for getting things done. Before I adopted Vim I used GUIs for everything&#xA;because I thought that&amp;rsquo;s how it had to be done&amp;hellip; Notes in OneNote, code using&#xA;a GUI editor, different notes in TiddlyWiki, slides for work in PowerPoint,&#xA;slides for church using Logos, etc&amp;hellip; Adopting Vim allowed me to disconnect a&#xA;specific tool from the problem that tool is solving - because usually I just&#xA;need to write text (notes, code, slides, etc.). Now, very nearly everything I&#xA;do is from a text-based and git-based workflow&amp;hellip; I put all my notes on&#xA;basically anything just in my blog, which is all markdown and deployed to GH&#xA;with Markata on every push (living dangerously pushing to main) - and that&amp;rsquo;s&#xA;all done easily from Vim with nice syntax highlighting, fast response,&#xA;integrated git-plugins, etc.. I keep project-specific task lists just in&#xA;markdown files and I have Vim/tmux shortcuts to quickly add todos for any&#xA;project (todo list is done with markata todoui) and I can get there fast&#xA;because my Vim workflow dovetails with Tmux nicely. Also I can pull that list&#xA;up right from the terminal, which I&amp;rsquo;m already in because Vim&amp;hellip;. Vim also&#xA;pushed me into the cli more - because Vim is so easily extended with cli tools&#xA;and I&amp;rsquo;m already in the terminal&amp;hellip; The builtin functionality also made things&#xA;make more sense - no more right-click, find &amp;ldquo;refactor all&amp;rdquo; or &amp;ldquo;rename symbol&amp;rdquo;&#xA;(for some stupid reason)&amp;hellip; Vim find-replace is so intuitive and if I need it&#xA;extended then I learned what sed was because of Vim. Moving quickly in Vim also&#xA;enables me to do my job incredibly fast because I hop into several projects a&#xA;day in a coaching role - if I was bound by GUIs I&amp;rsquo;d be waiting forever for&#xA;startup, would lose which GUI instance was which project, etc&amp;hellip; Being in the&#xA;terminal also made Tmux a trivial choice - now I have 90 tmux sessions, all&#xA;named appropriately, ready for me to jump back to and all while keeping the&#xA;majority of RAM still free for Chrome. Vim as my IDE also forced me to learn&#xA;way more about Python (I&amp;rsquo;m a python developer primarily), how LSP works, how to&#xA;configure a development environment, etc&amp;hellip; things I took for granted in my GUI&#xA;workflows, or never knew, or worse - thought I knew but deeply misunderstood.&#xA;Now that I understand them better, I can coach my peers more effectively even&#xA;if they are still in a GUI-based ecosystem.&lt;/p&gt;&#xA;&lt;p&gt;Basically, (Neo)Vim actually did change my life and I&amp;rsquo;m really thankful for it&#xA;(maybe that should be the title?)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Make a series of directories fast!</title>
    <id>https://pype.dev/make-a-series-of-directories-fast/</id>
    <updated>2022-11-10T15:27:50Z</updated>
    <published>2022-11-10T15:27:50Z</published>
    <link href="https://pype.dev/make-a-series-of-directories-fast/" rel="alternate" type="text/html"></link>
    <summary type="text">mkdir s{1..10} will make directories s1, s2, ... s10 in one command!</summary>
    <content type="html">&lt;p&gt;mkdir s{1..10} will make directories s1, s2, &amp;hellip; s10 in one command!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Hebrew Bible Full Class</title>
    <id>https://pype.dev/hebrew-bible-full-class/</id>
    <updated>2022-11-05T06:27:40Z</updated>
    <published>2022-11-05T06:27:40Z</published>
    <link href="https://pype.dev/hebrew-bible-full-class/" rel="alternate" type="text/html"></link>
    <summary type="text">Class link Classroom notes (Must be on home network)</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bibleproject.com/classroom-alpha/education-videos/session-1-what-earth-hebrew-bible/&#34;&gt;Class link&lt;/a&gt;&#xA;&lt;a href=&#34;http://paynepride.com:8010/documents/162&#34;&gt;Classroom notes (Must be on home network)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;01-the-shape-of-the-hebrew-bible&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;01 The Shape of the Hebrew Bible&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;session-1-what-on-earth-is-the-hebrew-bible&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Session 1: What on Earth is the Hebrew Bible?&lt;/span&gt; &lt;a href=&#34;#session-1-what-on-earth-is-the-hebrew-bible&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This class is not so much a survey of the HB, it is Tim&amp;rsquo;s attempt to distil the&#xA;most helpful things for understanding it in a consumable way for laypeople.&lt;/p&gt;&#xA;&lt;p&gt;A chunk of this is the other people giving some of their own background. One&#xA;lady said something that might be helpful for ministry - &amp;ldquo;Maybe that thing that&#xA;I saw as &amp;lsquo;you don&amp;rsquo;t love me&amp;rsquo; is &amp;lsquo;I don&amp;rsquo;t know how to love you&amp;rsquo;&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;how to love&lt;/p&gt;&#xA;&lt;p&gt;Maybe that thing that I saw as &amp;lsquo;you don&amp;rsquo;t love me&amp;rsquo; is &amp;lsquo;I don&amp;rsquo;t know how to love you&amp;rsquo;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Christian coping strategy for the Olt Testament&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Hero-example model&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Stories get isolated and distilled down into a simple moral model, where the hero is just the hero.&lt;/li&gt;&#xA;&lt;li&gt;Veggie-Tales is uber-guilty of this nonsense&lt;/li&gt;&#xA;&lt;li&gt;There&amp;rsquo;s something correct about this - but the oversimplification usually comes out of a massive re-writting of the stories, then anyone raised on those versions of the story is scaldalized when they read it for real&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Poltical-authority source&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Political parties hijacking &amp;ldquo;The Bible says X about Y&amp;rdquo; as a means to harvest authority from a book that many people claim is authoritative.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Theology answer book model&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Treating the Bible like a dictionary of key/value pairs where keys are questions and values are simple answers.&lt;/li&gt;&#xA;&lt;li&gt;This ignores narrative, and general literacy.&lt;/li&gt;&#xA;&lt;li&gt;The instinct may be right - the Bible should profoundly shape my view of everything, but it isn&amp;rsquo;t simple&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Inspirational-heart-warming model&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Verse-a-day calendars&lt;/li&gt;&#xA;&lt;li&gt;Jermiah 29:11&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&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;p&gt;Are we imposing a set of questions that are foreign to what the authors are&#xA;trying to communicate? do we need to set our cultural agendas aside to just&#xA;listen?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;A result of asking the wrong questions is the common story of people&amp;rsquo;s faith being dismantled &lt;em&gt;by reading the Bible&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;DL Baker - Two Testaments - One Bible&lt;/p&gt;&#xA;&lt;p&gt;One of the most fundamental questions which has faced theology and the&#xA;Church in every age&amp;hellip; is whether or not Christianity also needs an Old&#xA;Testament. Is the Old Testament to be thrown away as obsolete, or pre-&#xA;served as a relic from days of yore, or treasured as a classic and read by&#xA;scholars, or used occasionally as a change from the New Testament, or&#xA;kept in a box in case it should be needed some day? Or is the Old Testa-&#xA;ment an essential part of the Christian Bible, with continuing validity along-&#xA;side the New Testament? —&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;session-2-how-jesus-and-the-apostle-readtheir-bibles&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Session 2: How Jesus and the Apostle ReadTheir Bibles&lt;/span&gt; &lt;a href=&#34;#session-2-how-jesus-and-the-apostle-readtheir-bibles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The Bible most often refers to itself as &lt;em&gt;the Writings&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Road to Emmaus&lt;/p&gt;&#xA;&lt;p&gt;Jesus confronts a couple guys walking to Emmaus after he is resurrected and&#xA;more or less calls them idiots/fools for not understanding that the&#xA;Writings point to an annointed king who will suffer death for the sake of&#xA;redemption. He&amp;rsquo;s recognized by them once their eyes are opened then he vanishes&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;strong&gt;Weird stuff&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;paul-and-timothy&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Paul and Timothy&lt;/span&gt; &lt;a href=&#34;#paul-and-timothy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Paul assumes when writing to Timothy that he, and probably believers in general, are in a community of people who are regularly learning about Yahweh through the Scriptures &lt;em&gt;as a family&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2 Timothy 3:15-16&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip; and that from childhood you ahve known the sacred writings which are&#xA;able to give you the wisdom that leas to salvation through faith which is&#xA;in Christ Jesus. All Scripture is inspired by God and profitable for&#xA;teaching, for reproof, for correction, for training in righteousness&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;For Paul, the &lt;code&gt;Scriptures&lt;/code&gt; here are our OT, the Hebrew Bible. For Paul, the HB&#xA;is entirely &lt;em&gt;wisdom literature&lt;/em&gt; that leads to salvation through Jesus&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The question of &amp;ldquo;What are the Scriptures?&amp;rdquo; is covered in the next session&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;To answer the question &amp;lsquo;How do we read the HB?&amp;rsquo; we have to ask the question&#xA;&amp;lsquo;Whose book is the HB?&amp;rsquo;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;session-3-shape-of-the-scriptures&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Session 3: Shape of the Scriptures&lt;/span&gt; &lt;a href=&#34;#session-3-shape-of-the-scriptures&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;Old Testament&lt;/code&gt; is the Christian term for a set of writings that comprise about&#xA;3/4 of the Christian Bible. The authors themselves though refer to those&#xA;writings as &lt;code&gt;the Scriptures&lt;/code&gt;. One time it is called &lt;code&gt;the Old Covenant&lt;/code&gt; by Paul&#xA;, but he&amp;rsquo;s talking about Synagogue readings of the Torah portion in synagogues.&#xA;THe phrase &lt;code&gt;Hebrew Bible&lt;/code&gt; is a modern term that is a bit more neutral.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So, what is our Bible?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 24:25-27&lt;/p&gt;&#xA;&lt;p&gt;25 And he said to them, “O foolish ones, and slow of&#xA;heart to believe all that the prophets have spoken! 26 Was it not necessary&#xA;that the Christ should suffer these things and enter into his glory?”&#xA;27 And beginning with Moses and all the Prophets, he interpreted to them in&#xA;all the Scriptures the things concerning himself.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Moses and the Prophets&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;tanak&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TaNaK&lt;/span&gt; &lt;a href=&#34;#tanak&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Jweish reference to the books in our OT, in the Hebrew Bible, but the arangement is different&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;TaNaK&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;T = Torah (first 5 books)&lt;/li&gt;&#xA;&lt;li&gt;N - Nevi&amp;rsquo;im (Prophets: Joshua - Kings) [Christians often call these the &amp;lsquo;historial books&amp;rsquo;]&lt;/li&gt;&#xA;&lt;li&gt;K - Ketuvim&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&lt;strong&gt;Torah&lt;/strong&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;strong&gt;Pentateuch&lt;/strong&gt;&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Genesis - Exodus - Leviticus - Numbers Deuteronomy&lt;/td&gt;&#xA;&lt;td&gt;Genesis - Exodus - Leviticus - Numbers - Deuteronomy&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Nevi&amp;rsquo;im - The Prophets&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;em&gt;Former Prophets&lt;/em&gt; &lt;br/&gt; Joshua - Judges - Samueal - Kings&lt;/td&gt;&#xA;&lt;td&gt;Joshua - Judges - Ruth &lt;br/&gt; 1-2 Samuel - 1-2 Kings &lt;br/&gt; 1-2 Chronicles &lt;br/&gt; Ezra - Nehemiah - Ester&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;em&gt;Later Prophets&lt;/em&gt; &lt;br/&gt; Isaiah - Jeremiah - Ezekiel &lt;br/&gt; Hosea - Joel - Amos - Obadiah - Jonah - Micah - Nahum - Habakkuk - Zephaniah - Haggai - Zechariah - Malachi&lt;/td&gt;&#xA;&lt;td&gt;&lt;strong&gt;Poetry&lt;/strong&gt; &lt;br/&gt; Job - Psalms - Proverbs - Ecclesiastes - Song of Solomon&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;strong&gt;Kethuvim - The Writings&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;strong&gt;Prophets&lt;/strong&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Psalms - Job - Proverbs &lt;br/&gt; Ruth - Song of Songs - Ecclesiastes - Lamentations - Esther [The Megillot] &lt;br/&gt; Daniel - Ezra - Nehemiah - Chronicles&lt;/td&gt;&#xA;&lt;td&gt;Isiah - Jeremiah - Lamentations &lt;br/&gt; Ezekiel - Daniel &lt;br/&gt; Hosea - Joel - Amos - Obadiah - Jonah - Micah - Nahum - Habakkuk - Zephaniah - Haggai - Zechariah - Malachi&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 11:49–51 (ESV) &lt;/p&gt;&#xA;&lt;p&gt;49 Therefore also the Wisdom of God said, ‘I will send them prophets and&#xA;apostles, some of whom they will kill and persecute,’ 50 so that the blood&#xA;of all the prophets, shed from the foundation of the world, may be charged&#xA;against this generation, 51 from the blood of Abel to the blood of&#xA;Zechariah, who perished between the altar and the sanctuary. Yes, I tell&#xA;you, it will be required of this generation.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Blood of Abel to the blood of Zechariah&amp;hellip;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Why would Jesus pick these two events? Abel is murdered on page 4, Zechariah is&#xA;murdered in the last part of Chronicles, which in the TaNaK is significant&amp;hellip;&#xA;Jesus is saying that &lt;em&gt;all the prophets from the beginning of the Scriptures to&#xA;the end&lt;/em&gt;&amp;hellip; All the prophets from A-Z so to speak&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Scriptures&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Books&amp;rdquo; as we know it, bound papers with writing on it, called a &amp;lsquo;codex&amp;rsquo;&#xA;wasn&amp;rsquo;t a thing until a couple hundred years post-Jesus&amp;hellip; so when the&#xA;authors say &amp;ldquo;The Scriptures&amp;rdquo; we need to keep in mind that Jews had the&#xA;scriptures in their minds and hearts, not on paper (save for a couple very&#xA;expensive scrolls). So the structure of the scriptures is also apart of the&#xA;Jewish being&amp;hellip; This interaction with the Scriptures is &lt;em&gt;very very very&#xA;different than how we interact with the Bible&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;4QMMT&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;The scrolls of Moses, the words of the prophets, and of David.&amp;rdquo;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Philo of Alexandria&lt;/p&gt;&#xA;&lt;p&gt;The laws and the oracles given by inspiration through the prophets and the&#xA;Psalms, and the other scrolls whereby knowledge and piety are increased and&#xA;completed&amp;hellip;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;De Vita Contemplatetiva, 25&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;melito-of-sardis&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Melito of Sardis&lt;/span&gt; &lt;a href=&#34;#melito-of-sardis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Early 200s&lt;/li&gt;&#xA;&lt;li&gt;One of the earliest Christians to talk about the books/scrolls of Christian scriptures&lt;/li&gt;&#xA;&lt;li&gt;Summarizes &lt;em&gt;Christian ordering&lt;/em&gt; of the Hebrew Bible with some logic&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Foundation narrative of the Pentateuch&lt;/li&gt;&#xA;&lt;li&gt;History&lt;/li&gt;&#xA;&lt;li&gt;Poetry&lt;/li&gt;&#xA;&lt;li&gt;Prophets then point forward to the coming Messiah, Jesus, and the NT writings&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;session-4-seams-between-texts-in-the-dead-sea-scrolls&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Session 4 - Seams between Texts in the Dead Sea Scrolls&lt;/span&gt; &lt;a href=&#34;#session-4-seams-between-texts-in-the-dead-sea-scrolls&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Around 100-200 AD there was a split in the Jewish community over things like&#xA;how the Temple and sacrifices were to be run, etc. A group got kicked out, so&#xA;they grabbed some scrolls and went to start what we&amp;rsquo;d think of as a Monastic&#xA;community. Qumran community is where they went, and the scrolls this group&#xA;managed are called the Dead Sea Scrolls.&lt;/p&gt;&#xA;&lt;p&gt;Out of DSS we have some of the oldest biblical scrolls, they have their own&#xA;writings and liturgies since they were all priests basically too.&lt;/p&gt;&#xA;&lt;p&gt;The scrolls were hidden in caves before the Romans marched on Qumran. They were&#xA;found in the 1940s by a bunch of shepherds. A few showed up online for sale and&#xA;that&amp;rsquo;s how we found out about their exitence&amp;hellip;. These scrolls give us&#xA;pre-Christian Jewish Bible nerds&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Qumran community didn&amp;rsquo;t know about Jesus - they thought the Messiah would be a&#xA;man called &lt;em&gt;The Teacher of Righteousness&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;scroll-making&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Scroll-making&lt;/span&gt; &lt;a href=&#34;#scroll-making&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The DSS preserved for us, not only ancient biblical texts, but also the method&#xA;by which scrolls were created. They were well-preserved papyrus that was&#xA;stiched together - literal stitches. We also have obvious additions from Qumran&#xA;community as well as notes from priests and corrections from missed&#xA;transcribing.&lt;/p&gt;&#xA;&lt;h3 id=&#34;our-bible&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Our Bible&lt;/span&gt; &lt;a href=&#34;#our-bible&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The DSS scrolls, being the oldest stitched together set of scrolls, teach us&#xA;how scrolls and collections of ancient holy texts were put together. We need to&#xA;keep this in mind when we think about where our Christian Bible came from&lt;/p&gt;&#xA;&lt;p&gt;The beginning and ending of our books might/are filled with hyperlinks that&#xA;call a reader&amp;rsquo;s mind back to other stories. It&amp;rsquo;s the way of linking context and&#xA;stories to one another before the writings are in a codex&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hyperlinks - language/syntax that remind a reader of antoher scroll - help us&#xA;understand the structure of the Hebrew Bible&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;A favorite quote from Tim&lt;/p&gt;&#xA;&lt;p&gt;So, you can see I&amp;rsquo;m interested in a historical question of like the&#xA;collection [Hebrew Bible] was produced by a group of people. What did they&#xA;mean by it? And we can actually know a lot about what they meant and locate&#xA;them and read it the way they wanted us to read it, and pick up what&#xA;they&amp;rsquo;re saying. And, lo and behold, you know, I hope to convince you&#xA;that—and this is all pre-Christian—what&amp;rsquo;s happening here and what this all&#xA;points to and means, fits hand in glove with how Jesus and Paul and the&#xA;apostles talk about these texts.&#xA;So that&amp;rsquo;s different from saying nobody&#xA;knew what these texts meant. The events of Jesus happen, and then we go&#xA;reread it, and it has a whole new meaning that no one has ever imagined. It&#xA;seems to me what actually happened in history was a little more interesting&#xA;and complicated than that.  [17:30-18:21]&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Case-insensitive search in Vim</title>
    <id>https://pype.dev/case-insensitive-search-in-vim/</id>
    <updated>2022-10-21T06:40:21Z</updated>
    <published>2022-10-21T06:40:21Z</published>
    <link href="https://pype.dev/case-insensitive-search-in-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">/mysearch\c will match mysearch, MYSEARCH, mYSeArCh...</summary>
    <content type="html">&lt;p&gt;/mysearch\c will match mysearch, MYSEARCH, mYSeArCh&amp;hellip;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Faithful</title>
    <id>https://pype.dev/faithful/</id>
    <updated>2022-10-21T06:31:33Z</updated>
    <published>2022-10-21T06:31:33Z</published>
    <link href="https://pype.dev/faithful/" rel="alternate" type="text/html"></link>
    <summary type="text">Link</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bibleproject.com/bible-studies/faithful/&#34;&gt;Link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;notes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Notes&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Exodus 34:6&lt;/p&gt;&#xA;&lt;p&gt;Compassioante and gracious, slow to anger, overflowing with loyal love and faithfulness&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Faithfulness - Emet (can be translated &amp;lsquo;Truth&amp;rsquo;)&#xA;Related to &amp;ldquo;Amen&amp;rdquo; which is untranslated Hebrew expression meaning &amp;ldquo;that&amp;rsquo;s truth&amp;rdquo;&lt;/p&gt;&#xA;&lt;h2 id=&#34;stability&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Stability&lt;/span&gt; &lt;a href=&#34;#stability&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Moses has to hold his hands up when Israel faces the Amalekites. Joshua (and another) bring Moses a rock to sit on and hold is hands up so they could be Emet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;people&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;People&lt;/span&gt; &lt;a href=&#34;#people&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Describs trustiworthiness&lt;/p&gt;&#xA;&lt;p&gt;Exodus 18:21 - Moses apoints leaders are to be &amp;ldquo;Emet&amp;rdquo;&lt;/p&gt;&#xA;&lt;h2 id=&#34;god-and-promises&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;God and promises&lt;/span&gt; &lt;a href=&#34;#god-and-promises&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;God is a rock - he is faithful, just, and upright&lt;/p&gt;&#xA;&lt;p&gt;Hebrew word for trust is He&amp;rsquo;Emin which is the verb form of Emet&lt;/p&gt;&#xA;&lt;p&gt;Abraham considers God Emet, he He&amp;rsquo;Emin&amp;rsquo;s God and God blesses this by creating Isreal.&lt;/p&gt;&#xA;&lt;p&gt;Israel, In Exodus 14:31, He&amp;rsquo;Emin&amp;rsquo;s God (until they see the gians in Canaan that is)&lt;/p&gt;&#xA;&lt;p&gt;1 Kings 1:6 says David walked in Emet with God&lt;/p&gt;&#xA;&lt;p&gt;2 Samuel 7:16, God blesses David and says his kingdom will have Emet&lt;/p&gt;&#xA;&lt;p&gt;Romans 15:8-9 says Jesus came on behalf of God&amp;rsquo;s faithfulness.&lt;/p&gt;&#xA;&lt;h1 id=&#34;questions&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Questions&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1&lt;/p&gt;&#xA;&lt;p&gt;The Hebrew word “emet” is translated with words like “faithful,”&#xA;“reliable,” “sure,” “trustworthy,” and “amen.” Read aloud Psalm 36:5-6 ,&#xA;Psalm 19:7 , and Psalm 41:13 and discuss what the psalmists are&#xA;communicating in these passages when they use the word “emet.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalms 36:5-6&lt;/p&gt;&#xA;&lt;p&gt;5Your lovingkindness, O Lord, extends to the heavens,&lt;/p&gt;&#xA;&lt;p&gt;Your faithfulness reaches to the skies.&lt;/p&gt;&#xA;&lt;p&gt;6Your righteousness is like the mountains of God;&lt;/p&gt;&#xA;&lt;p&gt;Your judgments are like a great deep.&lt;/p&gt;&#xA;&lt;p&gt;O Lord, You preserve man and beast.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalms 19:7&lt;/p&gt;&#xA;&lt;p&gt;7The law of the Lord is perfect, restoring the soul;&lt;/p&gt;&#xA;&lt;p&gt;The testimony of the Lord is sure, making wise the simple.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Psalms 41:13&lt;/p&gt;&#xA;&lt;p&gt;13Blessed be the Lord, the God of Israel,&lt;/p&gt;&#xA;&lt;p&gt;From everlasting to everlasting.&lt;/p&gt;&#xA;&lt;p&gt;Amen and Amen.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I think the lesson here is pretty simple - God is faithful, full stop. His&#xA;faithfulness doesn&amp;rsquo;t look necessarily like how we might want&amp;hellip; when I was a&#xA;kid I would be upset if my parents didn&amp;rsquo;t respond to me in the way I wanted,&#xA;and my kids will certainly share that disappointment. But I am faithful to my&#xA;children - sometimes the main issue is a child&amp;rsquo;s outlook on a situation or&#xA;worldview. I think that metaphor holds true in relation to humans and Yahweh -&#xA;he sees the whole world, we see a part of it so we cannot understand&#xA;faithfulness fully, in the same way that my children can&amp;rsquo;t understand my&#xA;faithfulness to them fully - even to the point of being upset or thinking that&#xA;&lt;em&gt;I&amp;rsquo;m not being faithful&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2&lt;/p&gt;&#xA;&lt;p&gt;God promised the Israelites that he would give them a king of peace that&#xA;would rule forever and ever (e.g. 2 Samuel 7:16). However, Israel’s kingdom&#xA;collapsed and they found themselves without a home or a king. Compare the&#xA;beginning of Psalm 89 (vv. 1-10) with the way it closes (vv. 46-52). What&#xA;do you think it practically looks like to trust God when all seems lost?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2 Samuel 7:16&lt;/p&gt;&#xA;&lt;p&gt;16Your house and your kingdom shall endure before Me forever; your throne shall be established forever.” ’ ”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;PSALM 89&lt;/p&gt;&#xA;&lt;p&gt;The Lord’s Covenant with David, and Israel’s Afflictions.&lt;/p&gt;&#xA;&lt;p&gt;A Maskil of Ethan the Ezrahite.&lt;/p&gt;&#xA;&lt;p&gt;1I will sing of the lovingkindness of the Lord forever;&lt;/p&gt;&#xA;&lt;p&gt;To all generations I will make known Your faithfulness with my mouth.&lt;/p&gt;&#xA;&lt;p&gt;2For I have said, “Lovingkindness will be built up forever;&lt;/p&gt;&#xA;&lt;p&gt;In the heavens You will establish Your faithfulness.”&lt;/p&gt;&#xA;&lt;p&gt;3“I have made a covenant with My chosen;&lt;/p&gt;&#xA;&lt;p&gt;I have sworn to David My servant,&lt;/p&gt;&#xA;&lt;p&gt;4I will establish your seed forever&lt;/p&gt;&#xA;&lt;p&gt;And build up your throne to all generations.” Selah.&lt;/p&gt;&#xA;&lt;p&gt;5The heavens will praise Your wonders, O Lord;&lt;/p&gt;&#xA;&lt;p&gt;Your faithfulness also in the assembly of the holy ones.&lt;/p&gt;&#xA;&lt;p&gt;6For who in the skies is comparable to the Lord?&lt;/p&gt;&#xA;&lt;p&gt;Who among the sons of the mighty is like the Lord,&lt;/p&gt;&#xA;&lt;p&gt;7A God greatly feared in the council of the holy ones,&lt;/p&gt;&#xA;&lt;p&gt;And awesome above all those who are around Him?&lt;/p&gt;&#xA;&lt;p&gt;8O Lord God of hosts, who is like You, O mighty Lord?&lt;/p&gt;&#xA;&lt;p&gt;Your faithfulness also surrounds You.&lt;/p&gt;&#xA;&lt;p&gt;9You rule the swelling of the sea;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;3&lt;/p&gt;&#xA;&lt;p&gt;Ultimately, God answers the psalmist’s cries in the person of Jesus. Compare 2 Samuel 7:16&#xA;2 Samuel 7:16&lt;/p&gt;&#xA;&lt;p&gt;16Your house and your kingdom shall endure before Me forever; your throne shall be established forever.” ’ ”&lt;/p&gt;&#xA;&lt;p&gt;to Hebrews 1:8-9&#xA;Hebrews 1:8-9&lt;/p&gt;&#xA;&lt;p&gt;8But of the Son He says,&lt;/p&gt;&#xA;&lt;p&gt;“Your throne, O God, is forever and ever,&lt;/p&gt;&#xA;&lt;p&gt;And the righteous scepter is the scepter of His kingdom.&lt;/p&gt;&#xA;&lt;p&gt;9You have loved righteousness and hated lawlessness;&lt;/p&gt;&#xA;&lt;p&gt;Therefore God, Your God, has anointed You&lt;/p&gt;&#xA;&lt;p&gt;With the oil of gladness above Your companions.”&lt;/p&gt;&#xA;&lt;p&gt;. How does King Jesus embody and fulfill the ancient promises of God (e.g. John 1:14&#xA;John 1:14&lt;/p&gt;&#xA;&lt;p&gt;The Word Made Flesh&lt;/p&gt;&#xA;&lt;p&gt;14And the Word became flesh, and dwelt among us, and we saw His glory, glory as of the only begotten from the Father, full of grace and truth.&lt;/p&gt;&#xA;&lt;p&gt;, Hebrews 3:5-6&#xA;Hebrews 3:5-6&lt;/p&gt;&#xA;&lt;p&gt;5Now Moses was faithful in all His house as a servant, for a testimony of those things which were to be spoken later; 6but Christ was faithful as a Son over His house—whose house we are, if we hold fast our confidence and the boast of our hope firm until the end.&lt;/p&gt;&#xA;&lt;p&gt;, and Romans 15:8-9&#xA;Romans 15:8-9&lt;/p&gt;&#xA;&lt;p&gt;8For I say that Christ has become a servant to the circumcision on behalf of the truth of God to confirm the promises given to the fathers, 9and for the Gentiles to glorify God for His mercy; as it is written,&lt;/p&gt;&#xA;&lt;p&gt;“Therefore I will give praise to You among the Gentiles,&lt;/p&gt;&#xA;&lt;p&gt;And I will sing to Your name.”&lt;/p&gt;&#xA;&lt;p&gt;)?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;4&lt;/p&gt;&#xA;&lt;p&gt;Read Hebrews 10:22-25&#xA;Hebrews 10:22-25&lt;/p&gt;&#xA;&lt;p&gt;22let us draw near with a sincere heart in full assurance of faith, having our hearts sprinkled clean from an evil conscience and our bodies washed with pure water. 23Let us hold fast the confession of our hope without wavering, for He who promised is faithful; 24and let us consider how to stimulate one another to love and good deeds, 25not forsaking our own assembling together, as is the habit of some, but encouraging one another; and all the more as you see the day drawing near.&lt;/p&gt;&#xA;&lt;p&gt;, Hebrews 11&#xA;Hebrews 11&lt;/p&gt;&#xA;&lt;p&gt;The Triumphs of Faith&lt;/p&gt;&#xA;&lt;p&gt;1Now faith is the assurance of things hoped for, the conviction of things not seen. 2For by it the men of old gained approval.&lt;/p&gt;&#xA;&lt;p&gt;3By faith we understand that the worlds were prepared by the word of God, so that what is seen was not made out of things which are visible. 4By faith Abel offered to God a better sacrifice than Cain, through which he obtained the testimony that he was righteous, God testifying about his gifts, and through faith, though he is dead, he still speaks. 5By faith Enoch was taken up so that he would not see death; and he was not found because God took him up; for he obtained the witness that before his being taken up he was pleasing to God. 6And without faith it is impossible to please Him, for he who comes to God must believe that He is and that He is a rewarder of those who seek Him. 7By faith Noah, being warned by God about things not yet seen, in reverence prepared an ark for the salvation of his household, by which he condemned the world, and became an heir of the righteousness which is according to faith.&lt;/p&gt;&#xA;&lt;p&gt;8By faith Abraham, when he was called, obeyed by going out to a place which he was to receive for an inheritance; and he went out, not knowing where he was going. 9By faith he lived as an alien in the land of promise, as in a foreign land, dwelling in tents with Isaac and Jacob, fellow heirs of the same promise; 10for he was looking for the city which has foundations, whose architect and builder is God. 11By faith even Sarah herself received ability to conceive, even beyond the proper time of life, since she considered Him faithful who had promised. 12Therefore there was born even of one man, and him as good as dead at that, as many descendants as the stars of heaven in number, and innumerable as the sand which is by the seashore.&lt;/p&gt;&#xA;&lt;p&gt;13All these died in faith, without receiving the promises, but having seen them and having welcomed them from a distance, and having confessed that they were strangers and exiles on the earth. 14For those who say such things make it clear that they are seeking a country of their own. 15And indeed if they had been thinking of that country from which they went out, they would have had opportunity to return. 16But as it is, they desire a better country, that is, a heavenly one. Therefore God is not ashamed to be called their God; for He has prepared a city for them.&lt;/p&gt;&#xA;&lt;p&gt;17By faith Abraham, when he was tested, offered up Isaac, and he who had received the promises was offering up his only begotten son; 18it was he to whom it was said, “In Isaac your descendants shall be called.” 19He considered that God is able to raise people even from the dead, from which he also received him back as a type. 20By faith Isaac blessed Jacob and Esau, even regarding things to come. 21By faith Jacob, as he was dying, blessed each of the sons of Joseph, and worshiped, leaning on the top of his staff. 22By faith Joseph, when he was dying, made mention of the exodus of the sons of Israel, and gave orders concerning his bones.&lt;/p&gt;&#xA;&lt;p&gt;23By faith Moses, when he was born, was hidden for three months by his parents, because they saw he was a beautiful child; and they were not afraid of the king’s edict. 24By faith Moses, when he had grown up, refused to be called the son of Pharaoh’s daughter, 25choosing rather to endure ill-treatment with the people of God than to enjoy the passing pleasures of sin, 26considering the reproach of Christ greater riches than the treasures of Egypt; for he was looking to the reward. 27By faith he left Egypt, not fearing the wrath of the king; for he endured, as seeing Him who is unseen. 28By faith he kept the Passover and the sprinkling of the blood, so that he who destroyed the firstborn would not touch them. 29By faith they passed through the Red Sea as though they were passing through dry land; and the Egyptians, when they attempted it, were drowned.&lt;/p&gt;&#xA;&lt;p&gt;30By faith the walls of Jericho fell down after they had been encircled for seven days. 31By faith Rahab the harlot did not perish along with those who were disobedient, after she had welcomed the spies in peace.&lt;/p&gt;&#xA;&lt;p&gt;32And what more shall I say? For time will fail me if I tell of Gideon, Barak, Samson, Jephthah, of David and Samuel and the prophets, 33who by faith conquered kingdoms, performed acts of righteousness, obtained promises, shut the mouths of lions, 34quenched the power of fire, escaped the edge of the sword, from weakness were made strong, became mighty in war, put foreign armies to flight. 35Women received back their dead by resurrection; and others were tortured, not accepting their release, so that they might obtain a better resurrection; 36and others experienced mockings and scourgings, yes, also chains and imprisonment. 37They were stoned, they were sawn in two, they were tempted, they were put to death with the sword; they went about in sheepskins, in goatskins, being destitute, afflicted, ill-treated 38(men of whom the world was not worthy), wandering in deserts and mountains and caves and holes in the ground.&lt;/p&gt;&#xA;&lt;p&gt;39And all these, having gained approval through their faith, did not receive what was promised, 40because God had provided something better for us, so that apart from us they would not be made perfect.&lt;/p&gt;&#xA;&lt;p&gt;, and Hebrews 12:1-3&#xA;Hebrews 12:1-3&lt;/p&gt;&#xA;&lt;p&gt;Jesus, the Example&lt;/p&gt;&#xA;&lt;p&gt;1Therefore, since we have so great a cloud of witnesses surrounding us, let us also lay aside every encumbrance and the sin which so easily entangles us, and let us run with endurance the race that is set before us, 2fixing our eyes on Jesus, the author and perfecter of faith, who for the joy set before Him endured the cross, despising the shame, and has sat down at the right hand of the throne of God.&lt;/p&gt;&#xA;&lt;p&gt;3For consider Him who has endured such hostility by sinners against Himself, so that you will not grow weary and lose heart.&lt;/p&gt;&#xA;&lt;p&gt;. After reading these passages, name one example of what it looks like to put our trust in God.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Limit zfs list to avoid docker vomit</title>
    <id>https://pype.dev/limit-zfs-list-to-avoid-docker-vomit/</id>
    <updated>2022-10-20T06:39:18Z</updated>
    <published>2022-10-20T06:39:18Z</published>
    <link href="https://pype.dev/limit-zfs-list-to-avoid-docker-vomit/" rel="alternate" type="text/html"></link>
    <summary type="text">zfs list has a flag -r, but if you use zfs driver for docker then you&#39;ll get flooded with every docker volume in the world. zfs list -r -d N will limit the...</summary>
    <content type="html">&lt;p&gt;zfs list has a flag -r, but if you use zfs driver for docker then you&amp;rsquo;ll get&#xA;flooded with every docker volume in the world. zfs list -r -d N will limit the&#xA;dept of the print out, so zfs list -r -d 2 gives me tank, tank/encrypted,&#xA;tank/encrypted/docker -&amp;gt; but then I don&amp;rsquo;t see all the continer volumes&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Use the right lspsage, you dope!</title>
    <id>https://pype.dev/use-the-right-lspsage-you-dope/</id>
    <updated>2022-10-14T19:41:44Z</updated>
    <published>2022-10-14T19:41:44Z</published>
    <link href="https://pype.dev/use-the-right-lspsage-you-dope/" rel="alternate" type="text/html"></link>
    <summary type="text">If you think glepnir/lspsaga.nvim config will work with tali5/lspsaga.nvim installed... you&#39;re in for a rude awakening. Double check your forks folks!</summary>
    <content type="html">&lt;p&gt;If you think glepnir/lspsaga.nvim config will work with tali5/lspsaga.nvim installed&amp;hellip; you&amp;rsquo;re in for a rude awakening. Double check your forks folks!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Sabbath</title>
    <id>https://pype.dev/sabbath/</id>
    <updated>2022-10-13T06:34:52Z</updated>
    <published>2022-10-13T06:34:52Z</published>
    <link href="https://pype.dev/sabbath/" rel="alternate" type="text/html"></link>
    <summary type="text">Link to study</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bibleproject.com/bible-studies/sabbath/&#34;&gt;Link to study&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;creation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Creation&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Brougt to completion on the seventh day in Genesis 1. It is the only day that&#xA;does not end with &amp;rsquo;there evening and there was morning, the Nth day&#39;&lt;/p&gt;&#xA;&lt;p&gt;Humans were meant to rest with God in his creation forever, but in their&#xA;rebllion they are sentenced to work as slaves to the land. The rest of the&#xA;hsitory of God&amp;rsquo;s people consists of them looking for God&amp;rsquo;s rest, but&#xA;consistently falling back into slavery/(fallen) work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sabbath&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Sabbath&lt;/span&gt; &lt;a href=&#34;#sabbath&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Celebated every week on the 7th day. The idea is to live in the eternal rest that God offered in creation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;jubilee&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jubilee&lt;/span&gt; &lt;a href=&#34;#jubilee&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Every 7 * 7 years is the Ultimate Sabbath - the land is reset (or was supposed&#xA;to be), everything was returned to the original owner, debt does not persist -&#xA;everything resets so everyone can rest.&lt;/p&gt;&#xA;&lt;h1 id=&#34;jesus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jesus&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Jesus calls himself the Lord of the Sabbath. He claimed to bring the ultimate&#xA;rest of God. Jesus was crucified at a specific time - on Good Friday, and he&#xA;rose again on the following Sunday&amp;hellip; which is the first day of the next week&#xA;&lt;em&gt;or&lt;/em&gt; the 8th day&amp;hellip; the first day of a new age, a new rest, God&amp;rsquo;s ultimate&#xA;sabbath that is symbolized in the 7th day of creation.&lt;/p&gt;&#xA;&lt;h1 id=&#34;questions&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Questions&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1&lt;/p&gt;&#xA;&lt;p&gt;How does the author of Genesis conclude each of the seven days of creation?&#xA;Consider the seventh day of creation as an ultimate rest day. What do you&#xA;think it would be like to always live in that rest with God?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Genesis 1:5,8,13,19,23,31; 2:1-3 5&lt;/p&gt;&#xA;&lt;p&gt;5God called the light day, and the darkness He called night. And there was&#xA;evening and there was morning, one day.&lt;/p&gt;&#xA;&lt;p&gt;8God called the expanse heaven. And there was evening and there was&#xA;morning, a second day.&lt;/p&gt;&#xA;&lt;p&gt;13There was evening and there was morning, a third day.&lt;/p&gt;&#xA;&lt;p&gt;19There was evening and there was morning, a fourth day.&lt;/p&gt;&#xA;&lt;p&gt;23There was evening and there was morning, a fifth day.&lt;/p&gt;&#xA;&lt;p&gt;31God saw all that He had made, and behold, it was very good. And there was&#xA;evening and there was morning, the sixth day.&lt;/p&gt;&#xA;&lt;p&gt;The Creation of Man and Woman&lt;/p&gt;&#xA;&lt;p&gt;1Thus the heavens and the earth were completed, and all their hosts. 2By&#xA;the seventh day God completed His work which He had done, and He rested on&#xA;the seventh day from all His work which He had done. 3Then God blessed the&#xA;seventh day and sanctified it, because in it He rested from all His work&#xA;which God had created and made.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I imagine it would&amp;rsquo;ve looked a lot like enjoying the creation&amp;hellip; I work at&#xA;things I love, and that can be restful to me - I find purpose and order in my&#xA;hobbies and so I bet life would be like that. The work woudl be productive but&#xA;not toilsome.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2&lt;/p&gt;&#xA;&lt;p&gt;Read Genesis 3:1-7 and 3:21-24 What were the humans tempted to believe&#xA;about God and themselves? How did they act on these beliefs, and how did&#xA;this choice exile them from the place of rest? How do you think lies about&#xA;God and ourselves prevent us from resting with God today?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Genesis 3:1-7,21-24&lt;/p&gt;&#xA;&lt;p&gt;The Fall of Man&lt;/p&gt;&#xA;&lt;p&gt;1Now the serpent was more crafty than any beast of the field which the Lord&#xA;God had made. And he said to the woman, “Indeed, has God said, ‘You shall&#xA;not eat from any tree of the garden’?” 2The woman said to the serpent,&#xA;“From the fruit of the trees of the garden we may eat; 3but from the fruit&#xA;of the tree which is in the middle of the garden, God has said, ‘You shall&#xA;not eat from it or touch it, or you will die.’ ” 4The serpent said to the&#xA;woman, “You surely will not die! 5For God knows that in the day you eat&#xA;from it your eyes will be opened, and you will be like God, knowing good&#xA;and evil.” 6When the woman saw that the tree was good for food, and that it&#xA;was a delight to the eyes, and that the tree was desirable to make one&#xA;wise, she took from its fruit and ate; and she gave also to her husband&#xA;with her, and he ate. 7Then the eyes of both of them were opened, and they&#xA;knew that they were naked; and they sewed fig leaves together and made&#xA;themselves loin coverings.&lt;/p&gt;&#xA;&lt;p&gt;21The Lord God made garments of skin for Adam&#xA;and his wife, and clothed them. 22Then the Lord God said, “Behold, the man&#xA;has become like one of Us, knowing good and evil; and now, he might stretch&#xA;out his hand, and take also from the tree of life, and eat, and live&#xA;forever”— 23therefore the Lord God sent him out from the garden of Eden, to&#xA;cultivate the ground from which he was taken. 24So He drove the man out;&#xA;and at the east of the garden of Eden He stationed the cherubim and the&#xA;flaming sword which turned every direction to guard the way to the tree of&#xA;life.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Humans are templted to believe that God is witholding desirableble information&#xA;they are templted to &lt;em&gt;be like God&lt;/em&gt;. They are templted to believe that they&#xA;would be right to knowing good and evil (ironic since they know it&amp;rsquo;s bad to eat&#xA;of the Tree of Knowledge anyways)&lt;/p&gt;&#xA;&lt;p&gt;They acted by listening to the serpent, and to themselves&amp;hellip; essentially they&#xA;chose to not listen and adhere to Yahweh. This choice represents stark and&#xA;obvious rebellion. Yahweh, I think, sees that his creation are tempted to go&#xA;their own way, and for their own protection exiles them from the Garden.&lt;/p&gt;&#xA;&lt;p&gt;It seems like lies haven&amp;rsquo;t changed; ultimately we are still tempted to define&#xA;good and evil/bad for ourselves. I take action by defining wicked things as&#xA;good - made obvious by the fact that I choose to sin often, choose to not&#xA;listen to Yahweh. Actively listening to myself is exhausting. I think there&amp;rsquo;s a&#xA;lot to discussing &amp;ldquo;God&amp;rsquo;s rest&amp;rdquo;, but a high and almost trivial level, I am&#xA;simply less tired when my life is more in step with God&amp;rsquo;s definitions of good&#xA;and bad&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;3&lt;/p&gt;&#xA;&lt;p&gt;God wants to restore humanity to ultimate rest, so he chooses the&#xA;Israelites to reenact his seventh-day rest so they can share it with&#xA;others. Of all the ways he invites them to practice rest which practice are&#xA;you least familiar with today?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Exodus 20:8-11&lt;/p&gt;&#xA;&lt;p&gt;8“Remember the sabbath day, to keep it holy. 9Six days you shall labor and&#xA;do all your work, 10but the seventh day is a sabbath of the Lord your God;&#xA;in it you shall not do any work, you or your son or your daughter, your&#xA;male or your female servant or your cattle or your sojourner who stays with&#xA;you. 11For in six days the Lord made the heavens and the earth, the sea and&#xA;all that is in them, and rested on the seventh day; therefore the Lord&#xA;blessed the sabbath day and made it holy.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Leviticus 23:1-3; 25:8-13&lt;/p&gt;&#xA;&lt;p&gt;Laws of Religious Festivals&lt;/p&gt;&#xA;&lt;p&gt;1The Lord spoke again to Moses, saying, 2“Speak to the sons of Israel and&#xA;say to them, ‘The Lord’s appointed times which you shall proclaim as holy&#xA;convocations—My appointed times are these:&lt;/p&gt;&#xA;&lt;p&gt;3‘For six days work may be done, but on the seventh day there is a sabbath&#xA;of complete rest, a holy convocation. You shall not do any work; it is a&#xA;sabbath to the Lord in all your dwellings.&lt;/p&gt;&#xA;&lt;p&gt;8‘You are also to count off seven sabbaths of years for yourself, seven&#xA;times seven years, so that you have the time of the seven sabbaths of&#xA;years, namely, forty-nine years. 9You shall then sound a ram’s horn abroad&#xA;on the tenth day of the seventh month; on the day of atonement you shall&#xA;sound a horn all through your land. 10You shall thus consecrate the&#xA;fiftieth year and proclaim a release through the land to all its&#xA;inhabitants. It shall be a jubilee for you, and each of you shall return to&#xA;his own property, and each of you shall return to his family. 11You shall&#xA;have the fiftieth year as a jubilee; you shall not sow, nor reap its&#xA;aftergrowth, nor gather in from its untrimmed vines. 12For it is a jubilee;&#xA;it shall be holy to you. You shall eat its crops out of the field.&lt;/p&gt;&#xA;&lt;p&gt;13‘On this year of jubilee each of you shall return to his own property.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;4&lt;/p&gt;&#xA;&lt;p&gt;Jesus comes to restore us to God’s eternal rest! How does Jesus launch his&#xA;public ministry? Read Luke 4:14-21, noting that the year of favor refers to&#xA;the ultimate Jubilee—Israel’s super-charged Sabbath&lt;/p&gt;&#xA;&lt;p&gt;What do you observe?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 4:14-21&lt;/p&gt;&#xA;&lt;p&gt;Jesus’ Public Ministry&lt;/p&gt;&#xA;&lt;p&gt;14And Jesus returned to Galilee in the power of the Spirit, and news about&#xA;Him spread through all the surrounding district. 15And He began teaching in&#xA;their synagogues and was praised by all.&lt;/p&gt;&#xA;&lt;p&gt;16And He came to Nazareth, where He had been brought up; and as was His&#xA;custom, He entered the synagogue on the Sabbath, and stood up to read.&#xA;17And the book of the prophet Isaiah was handed to Him. And He opened the&#xA;book and found the place where it was written,&lt;/p&gt;&#xA;&lt;p&gt;18“The Spirit of the Lord is upon Me,&lt;/p&gt;&#xA;&lt;p&gt;Because He anointed Me to preach the gospel to the poor.&lt;/p&gt;&#xA;&lt;p&gt;He has sent Me to proclaim release to the captives,&lt;/p&gt;&#xA;&lt;p&gt;And recovery of sight to the blind,&lt;/p&gt;&#xA;&lt;p&gt;To set free those who are oppressed,&lt;/p&gt;&#xA;&lt;p&gt;19To proclaim the favorable year of the Lord.”&lt;/p&gt;&#xA;&lt;p&gt;20And He closed the book, gave it back to the attendant and sat down; and&#xA;the eyes of all in the synagogue were fixed on Him. 21And He began to say&#xA;to them, “Today this Scripture has been fulfilled in your hearing.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Leviticus 25&lt;/p&gt;&#xA;&lt;p&gt;The Sabbatic Year and Year of Jubilee&lt;/p&gt;&#xA;&lt;p&gt;1The Lord then spoke to Moses at Mount Sinai, saying, 2“Speak to the sons&#xA;of Israel and say to them, ‘When you come into the land which I shall give&#xA;you, then the land shall have a sabbath to the Lord. 3Six years you shall&#xA;sow your field, and six years you shall prune your vineyard and gather in&#xA;its crop, 4but during the seventh year the land shall have a sabbath rest,&#xA;a sabbath to the Lord; you shall not sow your field nor prune your&#xA;vineyard. 5Your harvest’s aftergrowth you shall not reap, and your grapes&#xA;of untrimmed vines you shall not gather; the land shall have a sabbatical&#xA;year. 6All of you shall have the sabbath products of the land for food;&#xA;yourself, and your male and female slaves, and your hired man and your&#xA;foreign resident, those who live as aliens with you. 7Even your cattle and&#xA;the animals that are in your land shall have all its crops to eat.&lt;/p&gt;&#xA;&lt;p&gt;8‘You are also to count off seven sabbaths of years for yourself, seven&#xA;times seven years, so that you have the time of the seven sabbaths of&#xA;years, namely, forty-nine years. 9You shall then sound a ram’s horn abroad&#xA;on the tenth day of the seventh month; on the day of atonement you shall&#xA;sound a horn all through your land. 10You shall thus consecrate the&#xA;fiftieth year and proclaim a release through the land to all its&#xA;inhabitants. It shall be a jubilee for you, and each of you shall return to&#xA;his own property, and each of you shall return to his family. 11You shall&#xA;have the fiftieth year as a jubilee; you shall not sow, nor reap its&#xA;aftergrowth, nor gather in from its untrimmed vines. 12For it is a jubilee;&#xA;it shall be holy to you. You shall eat its crops out of the field.&lt;/p&gt;&#xA;&lt;p&gt;13‘On this year of jubilee each of you shall return to his own property.&#xA;14If you make a sale, moreover, to your friend or buy from your friend’s&#xA;hand, you shall not wrong one another. 15Corresponding to the number of&#xA;years after the jubilee, you shall buy from your friend; he is to sell to&#xA;you according to the number of years of crops. 16In proportion to the&#xA;extent of the years you shall increase its price, and in proportion to the&#xA;fewness of the years you shall diminish its price, for it is a number of&#xA;crops he is selling to you. 17So you shall not wrong one another, but you&#xA;shall fear your God; for I am the Lord your God.&lt;/p&gt;&#xA;&lt;p&gt;18‘You shall thus observe My statutes and keep My judgments, so as to carry&#xA;them out, that you may live securely on the land. 19Then the land will&#xA;yield its produce, so that you can eat your fill and live securely on it.&#xA;20But if you say, “What are we going to eat on the seventh year if we do&#xA;not sow or gather in our crops?” 21then I will so order My blessing for you&#xA;in the sixth year that it will bring forth the crop for three years. 22When&#xA;you are sowing the eighth year, you can still eat old things from the crop,&#xA;eating the old until the ninth year when its crop comes in.&lt;/p&gt;&#xA;&lt;p&gt;The Law of Redemption&lt;/p&gt;&#xA;&lt;p&gt;23‘The land, moreover, shall not be sold permanently, for the land is Mine;&#xA;for you are but aliens and sojourners with Me. 24Thus for every piece of&#xA;your property, you are to provide for the redemption of the land.&lt;/p&gt;&#xA;&lt;p&gt;25‘If a fellow countryman of yours becomes so poor he has to sell part of&#xA;his property, then his nearest kinsman is to come and buy back what his&#xA;relative has sold. 26Or in case a man has no kinsman, but so recovers his&#xA;means as to find sufficient for its redemption, 27then he shall calculate&#xA;the years since its sale and refund the balance to the man to whom he sold&#xA;it, and so return to his property. 28But if he has not found sufficient&#xA;means to get it back for himself, then what he has sold shall remain in the&#xA;hands of its purchaser until the year of jubilee; but at the jubilee it&#xA;shall revert, that he may return to his property.&lt;/p&gt;&#xA;&lt;p&gt;29‘Likewise, if a man sells a dwelling house in a walled city, then his&#xA;redemption right remains valid until a full year from its sale; his right&#xA;of redemption lasts a full year. 30But if it is not bought back for him&#xA;within the space of a full year, then the house that is in the walled city&#xA;passes permanently to its purchaser throughout his generations; it does not&#xA;revert in the jubilee. 31The houses of the villages, however, which have no&#xA;surrounding wall shall be considered as open fields; they have redemption&#xA;rights and revert in the jubilee. 32As for cities of the Levites, the&#xA;Levites have a permanent right of redemption for the houses of the cities&#xA;which are their possession. 33What, therefore, belongs to the Levites may&#xA;be redeemed and a house sale in the city of this possession reverts in the&#xA;jubilee, for the houses of the cities of the Levites are their possession&#xA;among the sons of Israel. 34But pasture fields of their cities shall not be&#xA;sold, for that is their perpetual possession.&lt;/p&gt;&#xA;&lt;p&gt;Of Poor Countrymen&lt;/p&gt;&#xA;&lt;p&gt;35‘Now in case a countryman of yours becomes poor and his means with regard&#xA;to you falter, then you are to sustain him, like a stranger or a sojourner,&#xA;that he may live with you. 36Do not take usurious interest from him, but&#xA;revere your God, that your countryman may live with you. 37You shall not&#xA;give him your silver at interest, nor your food for gain. 38I am the Lord&#xA;your God, who brought you out of the land of Egypt to give you the land of&#xA;Canaan and to be your God.&lt;/p&gt;&#xA;&lt;p&gt;39‘If a countryman of yours becomes so poor with regard to you that he&#xA;sells himself to you, you shall not subject him to a slave’s service. 40He&#xA;shall be with you as a hired man, as if he were a sojourner; he shall serve&#xA;with you until the year of jubilee. 41He shall then go out from you, he and&#xA;his sons with him, and shall go back to his family, that he may return to&#xA;the property of his forefathers. 42For they are My servants whom I brought&#xA;out from the land of Egypt; they are not to be sold in a slave sale. 43You&#xA;shall not rule over him with severity, but are to revere your God. 44As for&#xA;your male and female slaves whom you may have—you may acquire male and&#xA;female slaves from the pagan nations that are around you. 45Then, too, it&#xA;is out of the sons of the sojourners who live as aliens among you that you&#xA;may gain acquisition, and out of their families who are with you, whom they&#xA;will have produced in your land; they also may become your possession.&#xA;46You may even bequeath them to your sons after you, to receive as a&#xA;possession; you can use them as permanent slaves. But in respect to your&#xA;countrymen, the sons of Israel, you shall not rule with severity over one&#xA;another.&lt;/p&gt;&#xA;&lt;p&gt;Of Redeeming a Poor Man&lt;/p&gt;&#xA;&lt;p&gt;47‘Now if the means of a stranger or of a sojourner with you becomes&#xA;sufficient, and a countryman of yours becomes so poor with regard to him as&#xA;to sell himself to a stranger who is sojourning with you, or to the&#xA;descendants of a stranger’s family, 48then he shall have redemption right&#xA;after he has been sold. One of his brothers may redeem him, 49or his uncle,&#xA;or his uncle’s son, may redeem him, or one of his blood relatives from his&#xA;family may redeem him; or if he prospers, he may redeem himself. 50He then&#xA;with his purchaser shall calculate from the year when he sold himself to&#xA;him up to the year of jubilee; and the price of his sale shall correspond&#xA;to the number of years. It is like the days of a hired man that he shall be&#xA;with him. 51If there are still many years, he shall refund part of his&#xA;purchase price in proportion to them for his own redemption; 52and if few&#xA;years remain until the year of jubilee, he shall so calculate with him. In&#xA;proportion to his years he is to refund the amount for his redemption.&#xA;53Like a man hired year by year he shall be with him; he shall not rule&#xA;over him with severity in your sight. 54Even if he is not redeemed by these&#xA;means, he shall still go out in the year of jubilee, he and his sons with&#xA;him. 55For the sons of Israel are My servants; they are My servants whom I&#xA;brought out from the land of Egypt. I am the Lord your God.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;5&lt;/p&gt;&#xA;&lt;p&gt;What is one specific way Jesus invites us to receive and practice true rest&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Matthew 11:28-29&lt;/p&gt;&#xA;&lt;p&gt;28“Come to Me, all who are weary and heavy-laden, and I will give you rest.&#xA;29Take My yoke upon you and learn from Me, for I am gentle and humble in&#xA;heart, and you will find rest for your souls.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>You can embed gifs?!</title>
    <id>https://pype.dev/you-can-embed-gifs/</id>
    <updated>2022-10-09T13:39:39Z</updated>
    <published>2022-10-09T13:39:39Z</published>
    <link href="https://pype.dev/you-can-embed-gifs/" rel="alternate" type="text/html"></link>
    <summary type="text">I learned you can embed gifs and stuch in things other than GH personal pages!</summary>
    <content type="html">&lt;p&gt;I learned you can embed gifs and stuch in things other than GH personal pages!&lt;/p&gt;&#xA;&lt;p&gt;So here I&amp;rsquo;ll keep ones I like and might use later&lt;/p&gt;&#xA;&lt;iframe src=&#34;https://giphy.com/embed/jXBwoFfPsCCoE&#34; width=&#34;25px&#34; height=&#34;25px&#34; frameBorder=&#34;0&#34; class=&#34;giphy-embed&#34; allowFullScreen&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href=&#34;https://giphy.com/gifs/tech-rainbow-jXBwoFfPsCCoE&#34;&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Don’t forget to load XMP!</title>
    <id>https://pype.dev/dont-forget-to-load-xmp/</id>
    <updated>2022-10-09T07:17:43Z</updated>
    <published>2022-10-09T07:17:43Z</published>
    <link href="https://pype.dev/dont-forget-to-load-xmp/" rel="alternate" type="text/html"></link>
    <summary type="text">Bought some DDR4-3600 speed RAM but only seeing 2666? Load up the BIOS, find DRAM config or something similar, and make sure to load the XMP profile to get...</summary>
    <content type="html">&lt;p&gt;Bought some DDR4-3600 speed RAM but only seeing 2666? Load up the BIOS, find DRAM config or something similar, and make sure to load the XMP profile to get that advertised RAM speed!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>My PassMark Scores</title>
    <id>https://pype.dev/my-passmark-scores/</id>
    <updated>2022-10-08T18:43:29Z</updated>
    <published>2022-10-08T18:43:29Z</published>
    <link href="https://pype.dev/my-passmark-scores/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! note &#34;Babyblue v2&#34;</summary>
    <content type="html">&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Babyblue v2&lt;/p&gt;&#xA;&lt;p&gt;Ryzen 5700x + 32 GB 3200 CL16 RAM&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.passmark.com/baselines/V10/display.php?id=503041456656&#34;&gt;&lt;img src=&#34;https://www.passmark.com/baselines/V10/media/503041456656.png&#34; alt=&#34;PassMark Rating&#34; border=&#34;0&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Venus &lt;/p&gt;&#xA;&lt;p&gt;Ryzen 3200G + 16GB 3600 CL16 RAM&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.passmark.com/baselines/V10/display.php?id=502360857958&#34;&gt;&lt;img src=&#34;https://www.passmark.com/baselines/V10/media/502360857958.png&#34; height=120px alt=&#34;PassMark Rating&#34; border=&#34;0&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Hogwarts&lt;/p&gt;&#xA;&lt;p&gt;Dual Xeon X5650 @2.67GHz | 90 GB 1883 DDR3 ECC RAM&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.passmark.com/baselines/V10/display.php?id=502361259420&#34;&gt;&lt;img src=&#34;https://www.passmark.com/baselines/V10/media/502361259420.png&#34; height=120px alt=&#34;PassMark Rating&#34; border=&#34;0&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Server 2 ... Change the name&lt;/p&gt;&#xA;&lt;p&gt;Ryzen 5700G + 128GB 3200 CL18 RAM&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.passmark.com/baselines/V10/display.php?id=502361424410&#34;&gt;&lt;img src=&#34;https://www.passmark.com/baselines/V10/media/502361424410.png&#34; height=120px alt=&#34;PassMark Rating&#34; border=&#34;0&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Server 2 with XMP enabled and undervolted from 1.35 to 1.2&lt;/p&gt;&#xA;&lt;p&gt;Ryzen 5700G + 128GB 3200 CL18 RAM&lt;/p&gt;&#xA;&lt;p&gt;Undervolted to 1.2V (from 1.35)&#xA;XMP enabled&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.passmark.com/baselines/V10/display.php?id=502363064921&#34;&gt;&lt;img src=&#34;https://www.passmark.com/baselines/V10/media/502363064921.png&#34; height=120px alt=&#34;PassMark Rating&#34; border=&#34;0&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Chara-Joy</title>
    <id>https://pype.dev/chara-joy/</id>
    <updated>2022-10-07T06:46:48Z</updated>
    <published>2022-10-07T06:46:48Z</published>
    <link href="https://pype.dev/chara-joy/" rel="alternate" type="text/html"></link>
    <summary type="text">link</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bibleprojectz.com/bible-studies/chara-joy/&#34;&gt;link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;chara-joy&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chara / Joy&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;There are several words for similar feelings - example like &lt;code&gt;joy&lt;/code&gt; has several synonyms.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Sources&lt;/span&gt; &lt;a href=&#34;#sources&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Genesis tells us creation and life bring joy&#xA;Psalm 104 - A good bottle of wine is God&amp;rsquo;s gift to bring joy to people&amp;rsquo;s hearts&#xA;P#lm 65 - Beautiful things bring joy&#xA;Jeremiah 33:11 - Weddings&lt;/p&gt;&#xA;&lt;h2 id=&#34;corruption&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Corruption&lt;/span&gt; &lt;a href=&#34;#corruption&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Bible shows us that humanity and brokenness mark our world by death and loss&lt;/p&gt;&#xA;&lt;h2 id=&#34;joy-in-spite-of-corruption&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Joy in spite of corruption&lt;/span&gt; &lt;a href=&#34;#joy-in-spite-of-corruption&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;God&amp;rsquo;s people have reasons in God&amp;rsquo;s faithfulness to be joyful.&#xA;Joy in the LORD is not determinmed by current struggles, but by future hope and deliverance&lt;/p&gt;&#xA;&lt;h2 id=&#34;jesus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jesus&lt;/span&gt; &lt;a href=&#34;#jesus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;His birth gives good news and brings great joy&lt;/p&gt;&#xA;&lt;p&gt;Matthew 5 - Jesus says to rejoice and be glad when we are persecuted for his Name&lt;/p&gt;&#xA;&lt;h2 id=&#34;apostles&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Apostles&lt;/span&gt; &lt;a href=&#34;#apostles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Paul says he chooses joy when he is in jail&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;p&gt;Joy is a &lt;em&gt;choice&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;2 Corinthians 6:10 -&amp;gt; Paul is filled with sorrow and yet rejoicing&lt;/p&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;Christian joy is rooted in future hope and expectation of a Messiah, of&#xA;Jesus, to come again. It is a profound choice, not the result of current&#xA;circumstances&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;questions&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Questions&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1&lt;/p&gt;&#xA;&lt;p&gt;The Israelites choose a path apart from God. As a result, they get exiled&#xA;from their land and dominated by foreign nations. But the prophet Isaiah&#xA;knew that sorrow would not have the final word with these people. He looked&#xA;forward to the day when Yahweh would end pain and corruption to lead them&#xA;into endless, joyful living. Read Isaiah 49:13 and Isaiah 51:11 . What does&#xA;Isaiah tell us about God’s character in these passages? What does Isaiah&#xA;say will happen to God’s people?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 49:13&lt;/p&gt;&#xA;&lt;p&gt;13Shout for joy, O heavens! And rejoice, O earth!&lt;/p&gt;&#xA;&lt;p&gt;Break forth into joyful shouting, O mountains!&lt;/p&gt;&#xA;&lt;p&gt;For the Lord has comforted His people&lt;/p&gt;&#xA;&lt;p&gt;And will have compassion on His afflicted.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 51:11&lt;/p&gt;&#xA;&lt;p&gt;11So the ransomed of the Lord will return&lt;/p&gt;&#xA;&lt;p&gt;And come with joyful shouting to Zion,&lt;/p&gt;&#xA;&lt;p&gt;And everlasting joy will be on their heads.&lt;/p&gt;&#xA;&lt;p&gt;They will obtain gladness and joy,&lt;/p&gt;&#xA;&lt;p&gt;And sorrow and sighing will flee away.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Isiah tells us that God is good and faithful. He mentions God&amp;rsquo;s past&#xA;faithfulness - &lt;code&gt;For the Lord _has_ comforted His people&lt;/code&gt; as well as future&#xA;faithfulness - &lt;code&gt;So the randomed of the Lord _will_ return...&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Isiah leans in on Yahweh&amp;rsquo;s defining nature from Exodus 34:6. God&amp;rsquo;s &lt;code&gt;hesed&lt;/code&gt;, his&#xA;&lt;strong&gt;steadfase love&lt;/strong&gt;, is what is our hope. Otherwise our God is no different than&#xA;any powerful but fickle diety.&lt;/p&gt;&#xA;&lt;p&gt;Isiah also doesn&amp;rsquo;t, in these short passages, promise or claim a promise of any&#xA;kind of temporal happiness - the joy is historical-facing in reflecting on&#xA;God&amp;rsquo;s deliverance and future-facing inr reflecting also on God&amp;rsquo;s deliverance.&#xA;God&amp;rsquo;s people were still supposed to find this joy in the midst of their bondage.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2&lt;/p&gt;&#xA;&lt;p&gt;The prophet Isaiah looked forward to the coming of Israel’s redeemer. His&#xA;prophecies were fulfilled with the arrival of Jesus. Read Luke 2:9-11 . Why&#xA;were the shepherds afraid? What reasons did the angels give for them to&#xA;rejoice instead?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 2:9-11&lt;/p&gt;&#xA;&lt;p&gt;9And an angel of the Lord suddenly stood before them, and the glory of the&#xA;Lord shone around them; and they were terribly frightened. 10But the angel&#xA;said to them, “Do not be afraid; for behold, I bring you good news of great&#xA;joy which will be for all the people; 11for today in the city of David&#xA;there has been born for you a Savior, who is Christ the Lord.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Presumably the shepherds were afraid because of &lt;code&gt;the glory of the Lord&lt;/code&gt;. All&#xA;throughout the OT we have examples of God&amp;rsquo;s people fearing this glory,&#xA;specifically on Sinai. Yahweh even tells Moses that he can only be shown&#xA;Yahweh&amp;rsquo;s back due to his glory, and then Moses has to veil his face so that the&#xA;glory of the Lord persisted on him would not terrify the Israelites.&lt;/p&gt;&#xA;&lt;p&gt;The angels outright said that a Savior has been born, the Messiah has come.&#xA;There is no greater cause for joy than the king of creation returning&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;3&lt;/p&gt;&#xA;&lt;p&gt;Joy can persist in the harshest of circumstances because it depends on God&#xA;and his promises. Read Matthew 5:11-12 , Acts 13:50-52 , and Hebrews 12:1-3&#xA;. According to these passages, what specific truths about God can sustain&#xA;joy even through painful or dire situations?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;Joy can persist in the harshest of circumstances because it depends on God&#xA;and his promises.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Matthew 5:11-12&lt;/p&gt;&#xA;&lt;p&gt;11“Blessed are you when people insult you and persecute you, and falsely&#xA;say all kinds of evil against you because of Me. 12Rejoice and be glad, for&#xA;your reward in heaven is great; for in the same way they persecuted the&#xA;prophets who were before you.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Acts 13:50-52&lt;/p&gt;&#xA;&lt;p&gt;50But the Jews incited the devout women of prominence and the leading men&#xA;of the city, and instigated a persecution against Paul and Barnabas, and&#xA;drove them out of their district. 51But they shook off the dust of their&#xA;feet in protest against them and went to Iconium. 52And the disciples were&#xA;continually filled with joy and with the Holy Spirit.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Hebrews 12:1-3&lt;/p&gt;&#xA;&lt;p&gt;Jesus, the Example&lt;/p&gt;&#xA;&lt;p&gt;1Therefore, since we have so great a cloud of witnesses surrounding us, let&#xA;us also lay aside every encumbrance and the sin which so easily entangles&#xA;us, and let us run with endurance the race that is set before us, 2fixing&#xA;our eyes on Jesus, the author and perfecter of faith, who for the joy set&#xA;before Him endured the cross, despising the shame, and has sat down at the&#xA;right hand of the throne of God. 3For consider Him who has endured such&#xA;hostility by sinners against Himself, so that you will not grow weary and&#xA;lose heart.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Harsh treatment of us, particularly for faith, reflects Jesus&amp;rsquo; life. We stand&#xA;with God-incarnate in living for a different kingdom which has negative&#xA;consequences for us in the modern age, but obviously not in God&amp;rsquo;s age that&amp;rsquo;s&#xA;already here and yet coming.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Holy Spirit gives us joy&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We have long list of people in history who lived faithful lives, struggled&#xA;with God, experienced pain, and yet were faithful the Lord by God&amp;rsquo;s own&#xA;grace. Similarly we are chosen and favored - the receipients of God&amp;rsquo;s&#xA;&lt;code&gt;hesed&lt;/code&gt; love.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;4&lt;/p&gt;&#xA;&lt;p&gt;When we see how Jesus’ loving way of life has overcome death itself, joy&#xA;starts to become strangely reasonable. But this doesn’t mean it is wise to&#xA;ignore or suppress sorrow. Read 2 Corinthians 6:3-10 . How did Paul&#xA;integrate both joy and sorrow?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2 Corinthians 6:3-10&lt;/p&gt;&#xA;&lt;p&gt;3giving no cause for offense in anything, so that the ministry will not be&#xA;discredited, 4but in everything commending ourselves as servants of God, in&#xA;much endurance, in afflictions, in hardships, in distresses, 5in beatings,&#xA;in imprisonments, in tumults, in labors, in sleeplessness, in hunger, 6in&#xA;purity, in knowledge, in patience, in kindness, in the Holy Spirit, in&#xA;genuine love, 7in the word of truth, in the power of God; by the weapons of&#xA;righteousness for the right hand and the left, 8by glory and dishonor, by&#xA;evil report and good report; regarded as deceivers and yet true; 9as&#xA;unknown yet well-known, as dying yet behold, we live; as punished yet not&#xA;put to death, 10as sorrowful yet always rejoicing, as poor yet making many&#xA;rich, as having nothing yet possessing all things.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Quick setup of ZFS encrytped datasets with sane permissions</title>
    <id>https://pype.dev/quick-setup-of-zfs-encrytped-datasets-with-sane-permissions/</id>
    <updated>2022-10-06T19:58:01Z</updated>
    <published>2022-10-06T19:58:01Z</published>
    <link href="https://pype.dev/quick-setup-of-zfs-encrytped-datasets-with-sane-permissions/" rel="alternate" type="text/html"></link>
    <summary type="text">Assuming you have a pool called ...</summary>
    <content type="html">&lt;p&gt;Assuming you have a pool called &lt;code&gt;tank&lt;/code&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;And assuming you have an encrypted dataset (See &lt;a href=&#34;https://arstechnica.com/gadgets/2021/06/a-quick-start-guide-to-openzfs-native-encryption/&#34;&gt;Jim Saltar&amp;rsquo;s short&#xA;intro&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create a group for permissions - in my case I have one called &lt;code&gt;home&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Then if there&amp;rsquo;s anything in &lt;code&gt;/tank/encrypted&lt;/code&gt; his it with &lt;code&gt;chgrp -R home /tank/encrypted&lt;/code&gt; to give the &lt;code&gt;home&lt;/code&gt; group ownership&lt;/li&gt;&#xA;&lt;li&gt;Next we need to make sure that the members of &lt;code&gt;home&lt;/code&gt; can do the writing&amp;hellip;&#xA;so &lt;code&gt;chmod 775 -R /tank/encrypted&lt;/code&gt; will do the trick&lt;/li&gt;&#xA;&lt;li&gt;Finally we want to make sure that all data created inside our dataset has&#xA;the same set of permissions with &lt;code&gt;chmod g+s /tank/encrypted&lt;/code&gt; and &lt;code&gt;chmod g+w /tank/encrypted&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Check Your BIOS Version On Ubuntu</title>
    <id>https://pype.dev/check-your-bios-version-on-ubuntu/</id>
    <updated>2022-10-02T18:21:58Z</updated>
    <published>2022-10-02T18:21:58Z</published>
    <link href="https://pype.dev/check-your-bios-version-on-ubuntu/" rel="alternate" type="text/html"></link>
    <summary type="text">sudo dmidecode -s bios-version</summary>
    <content type="html">&lt;p&gt;sudo dmidecode -s bios-version&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Abraham and Melchizedek</title>
    <id>https://pype.dev/abraham-and-melchizedek/</id>
    <updated>2022-09-23T06:10:28Z</updated>
    <published>2022-09-23T06:10:28Z</published>
    <link href="https://pype.dev/abraham-and-melchizedek/" rel="alternate" type="text/html"></link>
    <summary type="text">link to study</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bibleproject.com/bible-studies/abraham-and-melchizedek/&#34;&gt;link to study&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;video&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Video&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;priests&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Priests&lt;/span&gt; &lt;a href=&#34;#priests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;God creates Eden in which he places humans to be his royal image - priests. God&#xA;sets humans up to receive his blessing but humans choose their own way. The&#xA;promise is for a priest and a sacrifice to come in Jesus.&lt;/p&gt;&#xA;&lt;p&gt;God chooses Abraham and Sarah as the first royal priesthood as they are chosen&#xA;by God to bless all the nations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;melchizedek&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Melchizedek&lt;/span&gt; &lt;a href=&#34;#melchizedek&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A priestly king of Salem. Melchizedek recognizes Yahweh as the God of gods -&#xA;Abraham tithes to him and that&amp;rsquo;s about the end of the story&lt;/p&gt;&#xA;&lt;p&gt;Salem is ancient short name for Jerusalem.&#xA;Abraham&amp;rsquo;s tithe to Melchizedek is just like the Israelite call to tithe to the&#xA;Levites (priests) to support them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;royal-family&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Royal Family&lt;/span&gt; &lt;a href=&#34;#royal-family&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Abraham and Sarah are promised their own children but they take amtters into&#xA;their own hands by scheming with Hagar. Eventually Sarah is given her own son,&#xA;Issac, who God then calls for his life as a test of Abraham - it represents God&#xA;challenging Abraham to trust him with his own promise, and to not go his own&#xA;way with Sarah&lt;/p&gt;&#xA;&lt;p&gt;DUring the Isaac sacrifice narrative a ram is given in place and Abraham names the place &amp;ldquo;God will provide&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;types&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Types&lt;/span&gt; &lt;a href=&#34;#types&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The story of God&amp;rsquo;s call to sacrifice Isaac is much like the story of Abraham&#xA;meeting Melchizedek. In the Melchizedek story Abraham meets a priest on a high&#xA;place and gives him an offering. In the Isaac story Abraham acts as the priest&#xA;and a ram is given to him by the LORD that covers the sins of Abraham&amp;rsquo;s family.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Atonement and Covering&lt;/p&gt;&#xA;&lt;p&gt;Covering the sin in this case looks much more like redemption and resolve&#xA;rather than payment for gult, similar to a small-scale apology can cover a&#xA;grievance even though no payment is made to make anything &amp;lsquo;right&amp;rsquo;, the&#xA;&amp;lsquo;covering&amp;rsquo; is simply a sign of forgiveness&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;questions&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Questions&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1&lt;/p&gt;&#xA;&lt;p&gt;Shalem, or Salem, is later known as Jerusalem. Moriah, a mountainous region in&#xA;Jerusalem, is later called the “mount of the LORD” (Genesis 22:14) and the&#xA;“temple mount” (2 Chronicles 3:1). With all of this in mind, compare Genesis&#xA;14:17-20 with Genesis 22:1-14 . How do you see God providing for Abraham in&#xA;these similar settings?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Genesis 22:14&lt;/p&gt;&#xA;&lt;p&gt;14Abraham called the name of that place The Lord Will Provide, as it is&#xA;said to this day, “In the mount of the Lord it will be provided.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2 Chronicles 3:1&lt;/p&gt;&#xA;&lt;p&gt;The Temple Construction in Jerusalem&lt;/p&gt;&#xA;&lt;p&gt;1Then Solomon began to build the house of the Lord in Jerusalem on Mount&#xA;Moriah, where the Lord had appeared to his father David, at the place that&#xA;David had prepared on the threshing floor of Ornan the Jebusite.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Genesis 14:17-20&lt;/p&gt;&#xA;&lt;p&gt;God’s Promise to Abram&lt;/p&gt;&#xA;&lt;p&gt;17Then after his return from the defeat of Chedorlaomer and the kings who&#xA;were with him, the king of Sodom went out to meet him at the valley of&#xA;Shaveh (that is, the King’s Valley). 18And Melchizedek king of Salem&#xA;brought out bread and wine; now he was a priest of God Most High. 19He&#xA;blessed him and said,&lt;/p&gt;&#xA;&lt;p&gt;“Blessed be Abram of God Most High,&lt;/p&gt;&#xA;&lt;p&gt;Possessor of heaven and earth;&lt;/p&gt;&#xA;&lt;p&gt;20And blessed be God Most High,&lt;/p&gt;&#xA;&lt;p&gt;Who has delivered your enemies into your hand.”&lt;/p&gt;&#xA;&lt;p&gt;He gave him a tenth of all.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Genesis 22:1-14&lt;/p&gt;&#xA;&lt;p&gt;The Offering of Isaac&lt;/p&gt;&#xA;&lt;p&gt;1Now it came about after these things, that God tested Abraham, and said to&#xA;him, “Abraham!” And he said, “Here I am.” 2He said, “Take now your son,&#xA;your only son, whom you love, Isaac, and go to the land of Moriah, and&#xA;offer him there as a burnt offering on one of the mountains of which I will&#xA;tell you.” 3So Abraham rose early in the morning and saddled his donkey,&#xA;and took two of his young men with him and Isaac his son; and he split wood&#xA;for the burnt offering, and arose and went to the place of which God had&#xA;told him. 4On the third day Abraham raised his eyes and saw the place from&#xA;a distance. 5Abraham said to his young men, “Stay here with the donkey, and&#xA;I and the lad will go over there; and we will worship and return to you.”&#xA;6Abraham took the wood of the burnt offering and laid it on Isaac his son,&#xA;and he took in his hand the fire and the knife. So the two of them walked&#xA;on together. 7Isaac spoke to Abraham his father and said, “My father!” And&#xA;he said, “Here I am, my son.” And he said, “Behold, the fire and the wood,&#xA;but where is the lamb for the burnt offering?” 8Abraham said, “God will&#xA;provide for Himself the lamb for the burnt offering, my son.” So the two of&#xA;them walked on together.&lt;/p&gt;&#xA;&lt;p&gt;9Then they came to the place of which God had told&#xA;him; and Abraham built the altar there and arranged the wood, and bound his&#xA;son Isaac and laid him on the altar, on top of the wood. 10Abraham&#xA;stretched out his hand and took the knife to slay his son. 11But the angel&#xA;of the Lord called to him from heaven and said, “Abraham, Abraham!” And he&#xA;said, “Here I am.” 12He said, “Do not stretch out your hand against the&#xA;lad, and do nothing to him; for now I know that you fear God, since you&#xA;have not withheld your son, your only son, from Me.” 13Then Abraham raised&#xA;his eyes and looked, and behold, behind him a ram caught in the thicket by&#xA;his horns; and Abraham went and took the ram and offered him up for a burnt&#xA;offering in the place of his son. 14Abraham called the name of that place&#xA;The Lord Will Provide, as it is said to this day, “In the mount of the Lord&#xA;it will be provided.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;5Abraham said to his young men, “Stay here with the donkey, and I and the&#xA;lad will go over there; and we will worship and return to you.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Genesis 14&lt;/th&gt;&#xA;&lt;th&gt;Genesis 22&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Melchizedek provides bread and wine&lt;/td&gt;&#xA;&lt;td&gt;Yahweh provides the ram&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Yahweh gave Abram victory over Chedorlaomer&lt;/td&gt;&#xA;&lt;td&gt;Yahweh gave Abraham Isaac&amp;rsquo;s safety&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;3&lt;/p&gt;&#xA;&lt;p&gt;As you review Hebrews 7 , notice how the author assures their audience that&#xA;Jesus is better than any other priest. What are some of the reasons the&#xA;author provides? How is this good news for everyone?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Hebrews 7&lt;/p&gt;&#xA;&lt;p&gt;Melchizedek’s Priesthood Like Christ’s&lt;/p&gt;&#xA;&lt;p&gt;1For this Melchizedek, king of Salem, priest of the Most High God, who met Abraham as he was returning from the slaughter of the kings and blessed him, 2to whom also Abraham apportioned a tenth part of all the spoils, was first of all, by the translation of his name, king of righteousness, and then also king of Salem, which is king of peace. 3Without father, without mother, without genealogy, having neither beginning of days nor end of life, but made like the Son of God, he remains a priest perpetually.&lt;/p&gt;&#xA;&lt;p&gt;4Now observe how great this man was to whom Abraham, the patriarch, gave a tenth of the choicest spoils. 5And those indeed of the sons of Levi who receive the priest’s office have commandment in the Law to collect a tenth from the people, that is, from their brethren, although these are descended from Abraham. 6But the one whose genealogy is not traced from them collected a tenth from Abraham and blessed the one who had the promises. 7But without any dispute the lesser is blessed by the greater. 8In this case mortal men receive tithes, but in that case one receives them, of whom it is witnessed that he lives on. 9And, so to speak, through Abraham even Levi, who received tithes, paid tithes, 10for he was still in the loins of his father when Melchizedek met him.&lt;/p&gt;&#xA;&lt;p&gt;11Now if perfection was through the Levitical priesthood (for on the basis of it the people received the Law), what further need was there for another priest to arise according to the order of Melchizedek, and not be designated according to the order of Aaron? 12For when the priesthood is changed, of necessity there takes place a change of law also. 13For the one concerning whom these things are spoken belongs to another tribe, from which no one has officiated at the altar. 14For it is evident that our Lord was descended from Judah, a tribe with reference to which Moses spoke nothing concerning priests. 15And this is clearer still, if another priest arises according to the likeness of Melchizedek, 16who has become such not on the basis of a law of physical requirement, but according to the power of an indestructible life. 17For it is attested of Him,&lt;/p&gt;&#xA;&lt;p&gt;“You are a priest forever&lt;/p&gt;&#xA;&lt;p&gt;According to the order of Melchizedek.”&lt;/p&gt;&#xA;&lt;p&gt;18For, on the one hand, there is a setting aside of a former commandment because of its weakness and uselessness 19(for the Law made nothing perfect), and on the other hand there is a bringing in of a better hope, through which we draw near to God. 20And inasmuch as it was not without an oath 21(for they indeed became priests without an oath, but He with an oath through the One who said to Him,&lt;/p&gt;&#xA;&lt;p&gt;“The Lord has sworn&lt;/p&gt;&#xA;&lt;p&gt;And will not change His mind,&lt;/p&gt;&#xA;&lt;p&gt;‘You are a priest forever’ ”);&lt;/p&gt;&#xA;&lt;p&gt;22so much the more also Jesus has become the guarantee of a better covenant.&lt;/p&gt;&#xA;&lt;p&gt;23The former priests, on the one hand, existed in greater numbers because they were prevented by death from continuing, 24but Jesus, on the other hand, because He continues forever, holds His priesthood permanently. 25Therefore He is able also to save forever those who draw near to God through Him, since He always lives to make intercession for them.&lt;/p&gt;&#xA;&lt;p&gt;26For it was fitting for us to have such a high priest, holy, innocent, undefiled, separated from sinners and exalted above the heavens; 27who does not need daily, like those high priests, to offer up sacrifices, first for His own sins and then for the sins of the people, because this He did once for all when He offered up Himself. 28For the Law appoints men as high priests who are weak, but the word of the oath, which came after the Law, appoints a Son, made perfect forever.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Melchizedek was &amp;ldquo;king of righteousness&amp;rdquo; and &amp;ldquo;kind of peace&amp;rdquo;, Jesus is a priest according to &amp;ldquo;the order of Melchizedek&amp;rdquo; and so seems to be that Jesus is the continued reigning king of righteousness and peace&lt;/li&gt;&#xA;&lt;li&gt;Melchizedek was priest of God Most High - the priestly order changed to Levi with the giving of the Law&amp;hellip; Jesus represents, and &lt;em&gt;is&lt;/em&gt;, another change in the priesthood which necessitates another change in law (verse 12). Jesus&amp;rsquo; kingship and priesthood is more similar to Melchizek&amp;rsquo;s than Levi&amp;rsquo;s (who was no king anyways).&lt;/li&gt;&#xA;&lt;li&gt;Levitical priesthood was not bound by an oath - but Jesus&amp;rsquo; priesthood is bound by Yahweh&amp;rsquo;s oath to not change his mind, Jesus is priest forever&lt;/li&gt;&#xA;&lt;li&gt;Former priests, Levites, changed due to death, but Jesus persists forever (Melchizedek also presumably died)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Append string to list of files with xarg</title>
    <id>https://pype.dev/append-string-to-list-of-files-with-xarg/</id>
    <updated>2022-09-21T11:26:02Z</updated>
    <published>2022-09-21T11:26:02Z</published>
    <link href="https://pype.dev/append-string-to-list-of-files-with-xarg/" rel="alternate" type="text/html"></link>
    <summary type="text">❯ find . -name &#34;requirements.in&#34; -print0 | xargs -0 sh -c &#39;for arg in &#34;$@&#34;; do echo &#34;awscli&#34; &gt;&gt;&#34;$arg&#34;; done&#39;</summary>
    <content type="html">&lt;p&gt;❯ find . -name &amp;ldquo;requirements.in&amp;rdquo; -print0 | xargs -0 sh -c &amp;lsquo;for arg in &amp;ldquo;$@&amp;rdquo;; do echo &amp;ldquo;awscli&amp;rdquo; &amp;raquo;&amp;quot;$arg&amp;quot;; done&amp;rsquo;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Tree of Life</title>
    <id>https://pype.dev/tree-of-life/</id>
    <updated>2022-09-21T06:21:19Z</updated>
    <published>2022-09-21T06:21:19Z</published>
    <link href="https://pype.dev/tree-of-life/" rel="alternate" type="text/html"></link>
    <summary type="text">Biblical story begins in a garden, which is presented as a type of Temple. The top (center) is the Tree of Life, which represents God&#39;s life and creative...</summary>
    <content type="html">&lt;h1 id=&#34;video&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Video&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;eden&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Eden&lt;/span&gt; &lt;a href=&#34;#eden&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Biblical story begins in a garden, which is presented as a type of Temple. The&#xA;top (center) is the Tree of Life, which represents God&amp;rsquo;s life and creative&#xA;power. Humans &lt;strong&gt;were supposed to eat from the Tree of Life&lt;/strong&gt; but there&amp;rsquo;s&#xA;another tree, the Tree of Knowledge of &amp;ldquo;good&amp;rdquo; and &amp;ldquo;bad&amp;rdquo; which represents&#xA;assuming the authority to define good and bad for one&amp;rsquo;s own life rather than&#xA;trusting God&amp;rsquo;s defintion. Human eat of that tree and are thus exiled from the&#xA;garden.&lt;/p&gt;&#xA;&lt;h2 id=&#34;burning-bush&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Burning Bush&lt;/span&gt; &lt;a href=&#34;#burning-bush&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Moses meets God at a burning tree, a plant on a mountain radiating with God&amp;rsquo;s&#xA;power just like the Tree of Life. Yahweh charges Moses to bring the same choice&#xA;to the Israelites that Adam and Eve had, which is to trust God or define&#xA;morality for themselves.&lt;/p&gt;&#xA;&lt;h2 id=&#34;jesus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jesus&lt;/span&gt; &lt;a href=&#34;#jesus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jesus announced that God&amp;rsquo;s eternal life is available through him now -&#xA;originally in Eden given through the Tree of Life. Jesus invites other people&#xA;to &amp;ldquo;eat of him&amp;rdquo; to be transformed by God&amp;rsquo;s own life. The invitation is the same&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;to trust Yahweh or not. But Jesus&amp;rsquo; life exposes humanity&amp;rsquo;s brokenness in that&#xA;humans crucified him. Jesus is hung on a cross (a tree) on the top of a&#xA;hill (like Mt. Sinai) and humans not only eat of a different false tree of&#xA;life, but they chopped down the real Tree of Life - Jesus.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;questions&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Questions&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;What is one practical example of what it means to eat from the tree of&#xA;life? How is it different from eating from the false tree of life?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Giving money away I think is one practical example of eating from the tree of&#xA;life. Jesus calls us to share our blessings, and choosing to live by his&#xA;authority rather than decide for myself what to do with my money (meaning to&#xA;spend it on my desires only rather than invest in the Kingdom) then I make the&#xA;same choice humanity always makes - to not trust God&amp;rsquo;s definition of good and&#xA;bad&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2&lt;/p&gt;&#xA;&lt;p&gt;Compare John 15:5-13&#xA;with Matthew 7:15-20&#xA;. How does the true vine give life? How do we recognize a false tree of life?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 15:5-13&lt;/p&gt;&#xA;&lt;p&gt;5I am the vine, you are the branches; he who abides in Me and I in him, he&#xA;bears much fruit, for apart from Me you can do nothing. 6If anyone does not&#xA;abide in Me, he is thrown away as a branch and dries up; and they gather&#xA;them, and cast them into the fire and they are burned. 7If you abide in Me,&#xA;and My words abide in you, ask whatever you wish, and it will be done for&#xA;you. 8My Father is glorified by this, that you bear much fruit, and so&#xA;prove to be My disciples. 9Just as the Father has loved Me, I have also&#xA;loved you; abide in My love. 10If you keep My commandments, you will abide&#xA;in My love; just as I have kept My Father’s commandments and abide in His&#xA;love. 11These things I have spoken to you so that My joy may be in you, and&#xA;that your joy may be made full. Disciples’ Relation to Each Other 12“This&#xA;is My commandment, that you love one another, just as I have loved you.&#xA;13Greater love has no one than this, that one lay down his life for his&#xA;friends.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Matthew 7:15-20&lt;/p&gt;&#xA;&lt;p&gt;15“Beware of the false prophets, who come to you in sheep’s clothing, but&#xA;inwardly are ravenous wolves. 16You will know them by their fruits. Grapes&#xA;are not gathered from thorn bushes nor figs from thistles, are they? 17So&#xA;every good tree bears good fruit, but the bad tree bears bad fruit. 18A&#xA;good tree cannot produce bad fruit, nor can a bad tree produce good fruit.&#xA;19Every tree that does not bear good fruit is cut down and thrown into the&#xA;fire. 20So then, you will know them by their fruits.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The true vine gives life through communion and connection. Jesus says to &amp;ldquo;abide&#xA;in [him]&amp;rdquo; which is represented by a choice to believe him about kingdom, love,&#xA;relationships, brokenness, etc&amp;hellip; By meditating on the Word of God, communing&#xA;with Jesus, being washed and guided by the Spirit we are transformed more and more into&#xA;the image of Jesus which is real and true life.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;3&lt;/p&gt;&#xA;&lt;p&gt;What are some examples of good fruit and bad fruit (see Galatians 5:16-25)?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Galations 5:16-25&lt;/p&gt;&#xA;&lt;p&gt;16But I say, walk by the Spirit, and you will not carry out the desire of&#xA;the flesh. 17For the flesh sets its desire against the Spirit, and the&#xA;Spirit against the flesh; for these are in opposition to one another, so&#xA;that you may not do the things that you please. 18But if you are led by the&#xA;Spirit, you are not under the Law. 19Now the deeds of the flesh are&#xA;evident, which are: immorality, impurity, sensuality, 20idolatry, sorcery,&#xA;enmities, strife, jealousy, outbursts of anger, disputes, dissensions,&#xA;factions, 21envying, drunkenness, carousing, and things like these, of&#xA;which I forewarn you, just as I have forewarned you, that those who&#xA;practice such things will not inherit the kingdom of God. 22But the fruit&#xA;of the Spirit is love, joy, peace, patience, kindness, goodness,&#xA;faithfulness, 23gentleness, self-control; against such things there is no&#xA;law. 24Now those who belong to Christ Jesus have crucified the flesh with&#xA;its passions and desires. 25If we live by the Spirit, let us also walk by&#xA;the Spirit.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Good fruit:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;- choosing to guard my eyes and thoughts against sexual immorality&#xA;- remaining calm when things aren&#39;t going my way at work&#xA;- drinking water instead of _another_ drink at night&#xA;- giving money away out of love&#xA;- seeking unity and charity especially in any time of conflict&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Bad fruit:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;- outbursts at work - for me this is basically giving up hope for someone to be successful. By God&#39;s grace I have a desire to help peopl learn and succeed, but I can exhaust that desire and instead of prioritize an individual&#39;s well-being/growth I place my frustration above that and let my annoyance guide me more than a spirit of teaching and gentleness&#xA;- having that second, or third, drink &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you are led byt he Spirit, you are not under the Law&amp;hellip; This isn&amp;rsquo;t saying&#xA;that the Law doesn&amp;rsquo;t apply, but that by the Spirit&amp;rsquo;s guidance we will never&#xA;be found guilty by anything in the Law!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;4&lt;/p&gt;&#xA;&lt;p&gt;When Jesus talks about what his death will accomplish, he talks about a&#xA;seed going into the ground before it bears fruit (see John 12:23-26). What&#xA;could it look like to live in the ways of Jesus and bear the fruit of life?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John 12:23-26&lt;/p&gt;&#xA;&lt;p&gt;23And Jesus *answered them, saying, “The hour has come for the Son of Man&#xA;to be glorified. 24Truly, truly, I say to you, unless a grain of wheat&#xA;falls into the earth and dies, it remains alone; but if it dies, it bears&#xA;much fruit. 25He who loves his life loses it, and he who hates his life in&#xA;this world will keep it to life eternal. 26If anyone serves Me, he must&#xA;follow Me; and where I am, there My servant will be also; if anyone serves&#xA;Me, the Father will honor him.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Meditating on God&amp;rsquo;s faithfulness to humanity in spite of our disobedience I&#xA;think is an avenue by which the Spirit changes our hearts and as we are changed&#xA;by him we live lives that reflect Jesus&amp;rsquo; own life&lt;/p&gt;&#xA;&lt;p&gt;I think there can be many facets to the seed dying aspect, one relevant piece&#xA;seems fairly self-evident in the passage&amp;hellip; if we hold onto our life (ie. be a&#xA;seed that never dies) then we will never flourish, but if we give up the life&#xA;we have now and live like Jesus did, we will blessed with life&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Shalom and Peace</title>
    <id>https://pype.dev/shalom-and-peace/</id>
    <updated>2022-09-18T06:38:32Z</updated>
    <published>2022-09-18T06:38:32Z</published>
    <link href="https://pype.dev/shalom-and-peace/" rel="alternate" type="text/html"></link>
    <summary type="text">study link</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bibleproject.com/bible-studies/shalom-peace/&#34;&gt;study link&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;peace&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Peace&lt;/span&gt;&lt;/h1&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;p&gt;generally means absnese of war&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;In Hebrew the word is &lt;code&gt;Shalom&lt;/code&gt; (Greek: Eirene). Basic biblical meeting of&#xA;Shalom is &amp;ldquo;complete&amp;rdquo; or &amp;ldquo;whole&amp;rdquo;. ie. a stone with no cracks, or stone wall with&#xA;nogaps or missing grips&lt;/p&gt;&#xA;&lt;p&gt;References a complex situation with nothing missing&lt;/p&gt;&#xA;&lt;p&gt;Shalom can refer to a person&amp;rsquo;s well-being&amp;hellip; Life is complex and when anything&#xA;is out of alignment our Shalom breaks down and needs to be restored&lt;/p&gt;&#xA;&lt;p&gt;To bring shalom is to make complete or restore&lt;/p&gt;&#xA;&lt;p&gt;In Proverbs, to reconcile a broken relationship is to make shalom&lt;/p&gt;&#xA;&lt;h2 id=&#34;isaiah&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Isaiah&lt;/span&gt; &lt;a href=&#34;#isaiah&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 9:6-7&lt;/p&gt;&#xA;&lt;p&gt;6 For a child will be born to us, a son will be given to us;&#xA;And the government will rest on His shoulders;&#xA;And His name will be called Wonderful Counselor, Mighty God,&#xA;Eternal Father, Prince of Peace.&#xA;7 There will be no end to the increase of His government or of peace,&#xA;On the throne of David and over his kingdom,&#xA;To establish it and to uphold it with justice and righteousness&#xA;From then on and forevermore.&#xA;The zeal of the Lord of hosts will accomplish this.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;jesus&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jesus&lt;/span&gt; &lt;a href=&#34;#jesus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jesus restores the broken relationship between humans and our creator.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Quote&lt;/p&gt;&#xA;&lt;p&gt;Ephesians 2:14-15&lt;/p&gt;&#xA;&lt;p&gt;Jesus himeself is our &lt;em&gt;Eirene&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;questions&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Questions&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;1&lt;/p&gt;&#xA;&lt;p&gt;The prophet Isaiah looked forward to the arrival of a future king who would&#xA;make a covenant of shalom (peace, well-being) with his people. This king&#xA;would set the world right and heal all that has been harmed. Read Isaiah&#xA;9:6-7 aloud together. What specific words or phrases stand out to you as&#xA;you observe this passage and why?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Isaiah 9:6-7 6&lt;/p&gt;&#xA;&lt;p&gt;For a child will be born to us, a son will be given to&#xA;us; And the government will rest on His shoulders; And His name will be&#xA;called Wonderful Counselor, Mighty God, Eternal Father, Prince of Peace.&#xA;7There will be no end to the increase of His government or of peace, On the&#xA;throne of David and over his kingdom, To establish it and to uphold it with&#xA;justice and righteousness From then on and forevermore. The zeal of the&#xA;Lord of hosts will accomplish this.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Words that stick out:&#xA;- child&#xA;- given to us&#xA;- government will rest&#xA;- no end to the increase&#xA;- zeal&amp;hellip;will accomplish this&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;2&lt;/p&gt;&#xA;&lt;p&gt;The prophet Isaiah looked forward to the arrival of the Prince of Peace, whose&#xA;reign would lead to eternal shalom. Jesus’ arrival fulfilled Isaiah’s words.&#xA;Read and reflect on Luke 2:9-15 as a group. Why do you think God announced the&#xA;King’s arrival to no-name shepherds? What does this tell you about the nature&#xA;of God and his Kingdom?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Luke 2:9-15&lt;/p&gt;&#xA;&lt;p&gt;9And an angel of the Lord suddenly stood before them, and the glory of the&#xA;Lord shone around them; and they were terribly frightened. 10But the angel&#xA;said to them, “Do not be afraid; for behold, I bring you good news of great&#xA;joy which will be for all the people; 11for today in the city of David&#xA;there has been born for you a Savior, who is Christ the Lord. 12This will&#xA;be a sign for you: you will find a baby wrapped in cloths and lying in a&#xA;manger.” 13And suddenly there appeared with the angel a multitude of the&#xA;heavenly host praising God and saying,&lt;/p&gt;&#xA;&lt;p&gt;14“Glory to God in the highest,&lt;/p&gt;&#xA;&lt;p&gt;And on earth peace among men with whom He is pleased.”&lt;/p&gt;&#xA;&lt;p&gt;15When the angels had gone away from them into heaven, the shepherds began&#xA;saying to one another, “Let us go straight to Bethlehem then, and see this&#xA;thing that has happened which the Lord has made known to us.”&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;At thsi point it seems obvious that the reason God came to the undesirable&#xA;company of teh time was to illustrate that the Kingdom of Heaven was to be an&#xA;upside down kingdom. Status and power are hinderences under Jesus&amp;rsquo; reign, so he&#xA;builds his kingdom (from our perspective) from the ground up.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;3&lt;/p&gt;&#xA;&lt;p&gt;The biblical story shows how humanity often chooses a way of life apart&#xA;from God and suffers as a result. According to Colossians 1:19-23 , what&#xA;did God want to do to remedy this pain, and how did he accomplish his&#xA;desire through Jesus?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Quote&lt;/p&gt;&#xA;&lt;p&gt;Colossians 1:19-23&lt;/p&gt;&#xA;&lt;p&gt;19For it was the Father’s good pleasure for all the fullness to dwell in&#xA;Him, 20and through Him to reconcile all things to Himself, having made&#xA;peace (εἰρηνοποιέω) through the blood of His cross; through Him, I say, whether things on&#xA;earth or things in heaven.&lt;/p&gt;&#xA;&lt;p&gt;21And although you were formerly alienated and hostile in mind, engaged in&#xA;evil deeds, 22yet He has now reconciled you in His fleshly body through&#xA;death, in order to present you before Him holy and blameless and beyond&#xA;reproach— 23if indeed you continue in the faith firmly established and&#xA;steadfast, and not moved away from the hope of the gospel that you have&#xA;heard, which was proclaimed in all creation under heaven, and of which I,&#xA;Paul, was made a minister.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;God interacted with Creation as a created being himself, holding back&#xA;&lt;em&gt;something&lt;/em&gt; in the person of Jesus. On our turf, God showed up to revive our&#xA;lifeless souls and call us to live as citizens in his kingdom.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;4&lt;/p&gt;&#xA;&lt;p&gt;Jesus offers his peace to all people as a gift. Read Ephesians 2:11-16 .&#xA;How did Jesus make peace between two sharply divided people groups (Jews&#xA;and Gentiles), and why did he do it (see Eph. 2:16)?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ephesians 2:11-16&lt;/p&gt;&#xA;&lt;p&gt;11Therefore remember that formerly you, the Gentiles in the flesh, who are&#xA;called “Uncircumcision” by the so-called “Circumcision,” which is performed&#xA;in the flesh by human hands— 12remember that you were at that time separate&#xA;from Christ, excluded from the commonwealth of Israel, and strangers to the&#xA;covenants of promise, having no hope and without God in the world. 13But&#xA;now in Christ Jesus you who formerly were far off have been brought near by&#xA;the blood of Christ. 14For He Himself is our peace, who made both groups&#xA;into one and broke down the barrier of the dividing wall, 15by abolishing&#xA;in His flesh the enmity, which is the Law of commandments contained in&#xA;ordinances, so that in Himself He might make the two into one new man, thus&#xA;establishing peace,&lt;/p&gt;&#xA;&lt;p&gt;16and might reconcile them both in one body to God&#xA;through the cross, by it having put to death the enmity.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Jesus broke down the dividing wall of Circumcision by fulfilling Torah. No&#xA;longer do the people of God need to be circumcized into the covenant (we have&#xA;baptism), and no longer are God&amp;rsquo;s people separate from the world via outward&#xA;appearances but instead by living lives loyal to a different God - to Yahweh&lt;/p&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Success&lt;/p&gt;&#xA;&lt;p&gt;Jesus &amp;ldquo;put to death the enmity&amp;rdquo; by removing all &lt;em&gt;spiritually/covenantally relevant&lt;/em&gt; barriers that separated Jews from Gentiles&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;5&lt;/p&gt;&#xA;&lt;p&gt;Now, let’s carefully read Ephesians 4:1-3 How can humility, gentleness,&#xA;patience, and love help maintain the unity Jesus calls his followers to?&#xA;What happens to unity when one of these virtues is missing?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Ephesians 4:1-3&lt;/p&gt;&#xA;&lt;p&gt;1Therefore I, the prisoner of the Lord, implore you to walk in a manner&#xA;worthy of the calling with which you have been called, 2with all humility&#xA;and gentleness, with patience, showing tolerance for one another in love,&#xA;3being diligent to preserve the unity of the Spirit in the bond of peace.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;These things don&amp;rsquo;t just help maintain unity - they are the postures of life&#xA;Jesus builds his Kingdom around (second to himself I suppose). Jesus levels the&#xA;playing field for all people, and no one has anymore right to anything than&#xA;anyone else. Things like humility (right view of oneself), gentleness,&#xA;patience, love, etc. are necessary for Jesus&amp;rsquo; kingdom to look how he wants it&#xA;to look&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Destroying Tmux sessions with fzf</title>
    <id>https://pype.dev/destroying-tmux-sessions-with-fzf/</id>
    <updated>2022-09-15T10:27:58Z</updated>
    <published>2022-09-15T10:27:58Z</published>
    <link href="https://pype.dev/destroying-tmux-sessions-with-fzf/" rel="alternate" type="text/html"></link>
    <summary type="text">I use Tmux and Vim for most of my workflow, but I end up with a lot of dangling tmux sessions that dont&#39; really need to persist... but killing them one at a...</summary>
    <content type="html">&lt;p&gt;I use Tmux and Vim for most of my workflow, but I end up with a lot of dangling&#xA;tmux sessions that dont&amp;rsquo; really need to persist&amp;hellip; but killing them one at a&#xA;time is a pain so I wrote a little script-kitty nonsense to pipe multiple&#xA;choices from fzf into &lt;code&gt;tmux kill-session&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;I defined a little function in my &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;destroy&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;    tmux list-sessions -F &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{session_name}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -d &lt;span class=&#34;s1&#34;&gt;$&amp;#39;\n&amp;#39;&lt;/span&gt; sh -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;echo &amp;#34;killing $0&amp;#34;; tmux kill-session -t &amp;#34;$0&amp;#34;; for arg;do echo &amp;#34;killing $arg&amp;#34;;tmux kill-session -t &amp;#34;$arg&amp;#34;; done&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bindkey -s &lt;span class=&#34;s1&#34;&gt;&amp;#39;^d&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;destroy \n&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;tmux list-sessions -F &#39;#{session_name}&#39; &lt;/code&gt; prints all my active tmux sessions to the console with the format of just their 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;pype.dev   main   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pype.dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;us-east-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; proxy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tmux list-sessions -F &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{session_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;session-01&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;session-02&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;session-03&#xA;&lt;/span&gt;&lt;/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;Pipe that to &lt;code&gt;fzf -m&lt;/code&gt; to allow multiple choices to be made using tab&lt;/p&gt;&#xA;&lt;p&gt;Then the nasty bit in &lt;code&gt;xargs&lt;/code&gt;&amp;hellip; I echo &lt;code&gt;killing @0&lt;/code&gt; and &lt;code&gt;killing $arg&lt;/code&gt; because the &lt;code&gt;sh -c&lt;/code&gt; passes the first tmux session name to &lt;code&gt;@0&lt;/code&gt; (it&amp;rsquo;s just what bash does) and then the rest get handled in the for loop.&lt;/p&gt;&#xA;&lt;p&gt;Basically then I get an fzf list to choose multiple tmux sessions to destroy to clean up some RAM!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>078 Silent Years - Essenes</title>
    <id>https://pype.dev/078-silent-years-essenes/</id>
    <updated>2022-09-15T06:49:27Z</updated>
    <published>2022-09-15T06:49:27Z</published>
    <link href="https://pype.dev/078-silent-years-essenes/" rel="alternate" type="text/html"></link>
    <summary type="text">link to presentation</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bemadiscipleship.s3.us-east-2.amazonaws.com/BEMA+078+Silent+Years+Essenes-v2.pdf&#34;&gt;link to presentation&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;hellenism&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Hellenism&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;During the &amp;ldquo;silent years&amp;rdquo; Hellenism was on the rise, even among several Jewish circles.&lt;/p&gt;&#xA;&lt;h1 id=&#34;essenes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Essenes&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Another Jewish group (like Pharisees, Herodians, etc.) with a lot of debate&#xA;surrounding them. They were largely men, maybe a few women (which is&#xA;confusing), that were largely driven by priests. They claim God has abandoned&#xA;the system the corrupt Pharisees had come to adopt and so they went out into&#xA;the desert (very sepratist) and basically just prepared for the end times. They&#xA;condemned the Temple system - because of the corruption - however some Essenes&#xA;continued to serve in the Temple because they felt they couldn&amp;rsquo;t abandon God&amp;rsquo;s&#xA;calling on their lives&lt;/p&gt;&#xA;&lt;h2 id=&#34;scripture&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Scripture&lt;/span&gt; &lt;a href=&#34;#scripture&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Quote&lt;/p&gt;&#xA;&lt;p&gt;16  Thus says the Lord:&#xA;“Stand by the roads, and look,&#xA;and ask for the ancient paths,&#xA;where the good way is; and walk in it,&#xA;and find rest for your souls.&#xA;But they said, ‘We will not walk in it.’&lt;/p&gt;&#xA;&lt;p&gt;The Holy Bible: English Standard Version (Je 6:16). (2016). Crossway Bibles.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;dead-sea-scrolls&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Dead Sea Scrolls&lt;/span&gt; &lt;a href=&#34;#dead-sea-scrolls&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Essenes are credeited with writing the DSS.&lt;/p&gt;&#xA;&lt;p&gt;These served to validate basically all of what we have in our modern translated Bibles&lt;/p&gt;&#xA;&lt;h2 id=&#34;living-water&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Living Water&lt;/span&gt; &lt;a href=&#34;#living-water&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Can only come from a spring or rain. Living water is what &lt;em&gt;must&lt;/em&gt; be used to&#xA;fill the baptistrys that the Essenes used. So they would dig canals from wadis&#xA;(pools of water in the desert) to fill their mikvahs (baptistrys).&lt;/p&gt;&#xA;&lt;h2 id=&#34;scripture-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Scripture&lt;/span&gt; &lt;a href=&#34;#scripture-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Another passage Essenes hold to is Isaiah 40:&lt;/p&gt;&#xA;&lt;div class=&#34;admonition quote&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Quote&lt;/p&gt;&#xA;&lt;p&gt;40 Comfort, comfort my people, says your God.&#xA;2  Speak tenderly to Jerusalem,&#xA;and cry to her&#xA;that her warfare is ended,&#xA;that her iniquity is pardoned,&#xA;that she has received from the Lord’s hand&#xA;double for all her sins.&#xA;3  A voice cries:﻿&#xA;“In the wilderness prepare the way of the Lord;&#xA;make straight in the desert a highway for our God.&#xA;4  Every valley shall be lifted up,&#xA;and every mountain and hill be made low;&#xA;the uneven ground shall become level,&#xA;and the rough places a plain.&#xA;5  And the glory of the Lord shall be revealed,&#xA;and all flesh shall see it together,&#xA;for the mouth of the Lord has spoken.”&lt;/p&gt;&#xA;&lt;p&gt;The Holy Bible: English Standard Version (Is 40:1–5). (2016). Crossway Bibles.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;John the Baptist&lt;/p&gt;&#xA;&lt;p&gt;Likely that Zacharia had connections to Essenes movement, and that John was&#xA;dedicated to the LORD via being raised in an Essene community. The only&#xA;non-Essene thing he really did was to &lt;em&gt;go out&lt;/em&gt; and baptize people whereas&#xA;Essene-like action is to wait for other to come to them&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h1 id=&#34;sepratists&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Sepratists&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Unlike Herodians who went out and engaged the world (not that everything they&#xA;did was good), this is in stark contrast to the Essenes community which is that&#xA;they are out in the desert, away from everyone, no &amp;ldquo;crossroads of the earth&amp;rdquo;&#xA;idea, and did not go out into the world - one of the negatives&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>077 Silent Years - Herodians</title>
    <id>https://pype.dev/077-silent-years-herodians/</id>
    <updated>2022-09-04T06:49:27Z</updated>
    <published>2022-09-04T06:49:27Z</published>
    <link href="https://pype.dev/077-silent-years-herodians/" rel="alternate" type="text/html"></link>
    <summary type="text">Herodians show up twice in the Gospels, Josephus talks about them a bit as well. There is a lot of hsitorical debate that surrounds the Herodians.</summary>
    <content type="html">&lt;p&gt;Herodians show up twice in the Gospels, Josephus talks about them a bit as&#xA;well. There is a lot of hsitorical debate that surrounds the Herodians.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Like Republicans and Democracts meant one thing in American history, but&#xA;those positions and words mean something different today - the same is true&#xA;in history, and with Herodians.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;They were believed to be the political party, however formal, to be alligned with Kind Herod.&lt;/p&gt;&#xA;&lt;p&gt;We are also, presently, very hellenistic and even herodian. We are into the&#xA;luxury, we like convenience, we have entertainment/theaters. There&amp;rsquo;s nothing&#xA;wrong with luxury, entertainment, plumbing, wealth, etc&amp;hellip; The Saducees misused&#xA;Hellenism to their own detrement - they turned amoral Hellenism into a&#xA;worldview that pushed Yahweh out of the center and put human and self into the&#xA;center of the worldview&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Herodians toed the line between &lt;em&gt;reluctantly&lt;/em&gt; becoming hellenistic and&#xA;corrupting their worship with hellenism&lt;/p&gt;&#xA;&lt;/blockquote&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;p&gt;I am (hopefully &lt;em&gt;reluctantly&lt;/em&gt;) hellenistic as well&amp;hellip;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Embracing hellenism is not black and white, it is amoral&amp;hellip; To spend money on&#xA;life, enjoy entertainment, decorate our homes, etc&amp;hellip; can we appreciate&#xA;luxuries without compromising on Yahweh worship?&lt;/p&gt;&#xA;&lt;p&gt;timestamp: 21:45&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>076 Silent Years - Sadducees</title>
    <id>https://pype.dev/076-silent-years-sadducees/</id>
    <updated>2022-09-02T06:21:21Z</updated>
    <published>2022-09-02T06:21:21Z</published>
    <link href="https://pype.dev/076-silent-years-sadducees/" rel="alternate" type="text/html"></link>
    <summary type="text">Link to presentation</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bemadiscipleship.s3.us-east-2.amazonaws.com/BEMA+076+Silent+Years+Sadducees.pdf&#34;&gt;Link to presentation&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;sadducees&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Sadducees&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Often we in the modern time totally conflate Sadducees and Pharisees but they&#xA;are as Republicans and Democrats today&amp;hellip; very much not the same&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;origin&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Origin&lt;/span&gt; &lt;a href=&#34;#origin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Back in the Davidic kingdom they are the group that sought to restore the&#xA;priesthood by way of lineage. A goal was figuring out who the High Priest was.&#xA;Lots are cast and Zaddok is chosen at some point - his line becomes the&#xA;Jesus-era Saducees. They are the &lt;code&gt;zaddokim&lt;/code&gt; (Hebrew pronounciation) which when&#xA;somwhat anglosized becomes &lt;code&gt;sadducees&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hasmonean&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Hasmonean&lt;/span&gt; &lt;a href=&#34;#hasmonean&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;During Seleucids destruction of the Temple the Maccabeans revolt and expel&#xA;Selecuis and Ptolemies. The Hasmonean kingdom follows this, which are priests&#xA;that the Maccabeans turned the kingdom over to in an effort to be &amp;lsquo;people of&#xA;the text&amp;rsquo;&lt;/p&gt;&#xA;&lt;p&gt;Hasmoneans are 7 famlies that have descended from Zaddok. Over the course of&#xA;2-3 decades they become entirely Hellenistic. These ones are known in the&#xA;Gospels as the &lt;code&gt;Chief Priests&lt;/code&gt; which is a different group than &lt;code&gt;teachers of the Law&lt;/code&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Chief Priests are a corrupt religious Mafia&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Originally &amp;ldquo;Saducee&amp;rdquo; referred to direct descendents of Zaddok, which are a&#xA;subset of Levitical descendents. Come Jesus-time &lt;code&gt;Saduccee&lt;/code&gt; becomes anyone who&#xA;agrees with the priestly system&amp;hellip; Not all priests were Saducees (See Zachariah&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;father of John the Baptist. He was a &lt;code&gt;righteous priest&lt;/code&gt; which didn&amp;rsquo;t exist in&#xA;their day - he was not a Saducee, he was faithful to Torah not Hellenism)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;rome-s-influence&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Rome’s Influence&lt;/span&gt; &lt;a href=&#34;#rome-s-influence&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Herod essentially controlled the world&amp;rsquo;s wealth due to his own position as king&#xA;(of where?). Hasmonean&amp;rsquo;s persued Herod and asked him to marry a Hasmonean&#xA;daughter in order to be called Jewish. Hasmoneans did this as they saw their&#xA;time coming to an end with the rising power of Rome. Herod saw the opportunity,&#xA;took it, and then he extends an olive branch to Caesar - and Caesar accepts the&#xA;partnership which turns Herod into basically a puppet king of Judea&lt;/p&gt;&#xA;&lt;p&gt;Herod then begins to auction off the High Priesthood - furthering priestly&#xA;corruption. Annas (Caiphas is Annas&amp;rsquo; son) is the one who buys the priesthood -&#xA;and the priesthood stays with this family until the destruction of Jerusalem in&#xA;AD 70.&lt;/p&gt;&#xA;&lt;h1 id=&#34;timeline&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Timeline&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;year&lt;/th&gt;&#xA;&lt;th&gt;thing&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;586 BC&lt;/td&gt;&#xA;&lt;td&gt;Babylonian captivity of Judah&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;538 BC&lt;/td&gt;&#xA;&lt;td&gt;Return to Israel (Decree of Cyrus)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;332 BC&lt;/td&gt;&#xA;&lt;td&gt;Alexander the Great conquers Palestine&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;330–198 BC&lt;/td&gt;&#xA;&lt;td&gt;Rule of Hellenistic Ptolemies over Jews&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;198–167 BC&lt;/td&gt;&#xA;&lt;td&gt;Oppression under Hellenistic Seleucids&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;167 BC&lt;/td&gt;&#xA;&lt;td&gt;Maccabean revolt&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;167–63 BC&lt;/td&gt;&#xA;&lt;td&gt;Hasmonean (Maccabean) kingdom&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;63 BC&lt;/td&gt;&#xA;&lt;td&gt;Roman conquest of Judea&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;37 BC&lt;/td&gt;&#xA;&lt;td&gt;Reign of Herod begins&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;c. 6 BC&lt;/td&gt;&#xA;&lt;td&gt;Birth of Jesus&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;4 BC&lt;/td&gt;&#xA;&lt;td&gt;Herod’s death&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>075 Silent Years - Welcome to Hellenism</title>
    <id>https://pype.dev/075-silent-years-welcome-to-hellenism/</id>
    <updated>2022-09-01T06:08:10Z</updated>
    <published>2022-09-01T06:08:10Z</published>
    <link href="https://pype.dev/075-silent-years-welcome-to-hellenism/" rel="alternate" type="text/html"></link>
    <summary type="text">For the first time in history, Greeks redefined worldfiew to be cenetered &gt; around the individual. Prior to Hellenism, worldviews centered around &gt; pleasing...</summary>
    <content type="html">&lt;h1 id=&#34;hellenism&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Hellenism&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For the first time in history, Greeks redefined worldfiew to be cenetered&#xA;around the individual. Prior to Hellenism, worldviews centered around&#xA;pleasing the gods&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;Alexander the Great&lt;/code&gt; had his own &lt;em&gt;gospel&lt;/em&gt; (εὐαγγέλιον - euangelion: predates biblical authors. &amp;ldquo;Good news to share&amp;rdquo; as an idea is not uniquely biblical)&lt;/p&gt;&#xA;&lt;p&gt;He conqoured the world, not with a huge army but with 4 things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Education&lt;/li&gt;&#xA;&lt;li&gt;Healthcare&lt;/li&gt;&#xA;&lt;li&gt;Entertainment&lt;/li&gt;&#xA;&lt;li&gt;Athletics&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;These 4 things pull on basically all people&amp;rsquo;s values, Andrew the Great used them to control people&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Education - control what people know&lt;/li&gt;&#xA;&lt;li&gt;Healthcare - make people dependent on the state&amp;rsquo;s provision&lt;/li&gt;&#xA;&lt;li&gt;Entertainment - control what people do with their time (theater was invented in this time)&lt;/li&gt;&#xA;&lt;li&gt;Athletics - similar to entertainment - this becomes a pillar of culture&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;jewish-history&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jewish History&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&lt;strong&gt;year&lt;/strong&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;strong&gt;event&lt;/strong&gt;&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;586 BC&lt;/td&gt;&#xA;&lt;td&gt;Babylonian captivity of Judah&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;538 BC&lt;/td&gt;&#xA;&lt;td&gt;Return to Israel (Decree of Cyrus)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;332 BC&lt;/td&gt;&#xA;&lt;td&gt;Alexander the Great conquers Palestine&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;330–198 BC&lt;/td&gt;&#xA;&lt;td&gt;Rule of Hellenistic Ptolemies over Jews&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;198–167 BC&lt;/td&gt;&#xA;&lt;td&gt;Oppression under Hellenistic Seleucids&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;167 BC&lt;/td&gt;&#xA;&lt;td&gt;Maccabean revolt&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;167–63 BC&lt;/td&gt;&#xA;&lt;td&gt;Hasmonean (Maccabean) kingdom&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;63 BC&lt;/td&gt;&#xA;&lt;td&gt;Roman conquest of Judea&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;37 BC&lt;/td&gt;&#xA;&lt;td&gt;Reign of Herod begins&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;c. 6 BC&lt;/td&gt;&#xA;&lt;td&gt;Birth of Jesus&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;4 BC&lt;/td&gt;&#xA;&lt;td&gt;Herod’s death&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;4 BC–AD 6&lt;/td&gt;&#xA;&lt;td&gt;Rule of Archelaus&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;4 BC–AD 39&lt;/td&gt;&#xA;&lt;td&gt;Rule of Antipas&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;c. AD 27–30&lt;/td&gt;&#xA;&lt;td&gt;Jesus’s public ministry&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;c. AD 30&lt;/td&gt;&#xA;&lt;td&gt;Crucifixion of Jesus&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;AD 66–73&lt;/td&gt;&#xA;&lt;td&gt;First Jewish revolt against Rome&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;AD 70&lt;/td&gt;&#xA;&lt;td&gt;Destruction of Jerusalem/Temple&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;AD 73&lt;/td&gt;&#xA;&lt;td&gt;Masada falls&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;AD 131–135&lt;/td&gt;&#xA;&lt;td&gt;Bar Kochba Revolt (Second Jewish revolt)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;post-alexander-the-great-s-death&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Post-Alexander the Great’s death&lt;/span&gt; &lt;a href=&#34;#post-alexander-the-great-s-death&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;4 rulers take over the Greek kingdom&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Synichus&lt;/li&gt;&#xA;&lt;li&gt;?&lt;/li&gt;&#xA;&lt;li&gt;Seleucis&lt;/li&gt;&#xA;&lt;li&gt;Ptolemy&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;ptolemy-rules-the-jewish-region&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Ptolemy rules the Jewish region&lt;/span&gt; &lt;a href=&#34;#ptolemy-rules-the-jewish-region&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Leadership style - very Hellenistic&lt;/p&gt;&#xA;&lt;p&gt;Some Jews dove in, others remained faithful to Judaism&amp;hellip; Psolemy made it just simply ahrd to &lt;em&gt;not be Greek&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;selucids-take-over-psolemies-and-jewish-region&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Selucids take over Psolemies and Jewish region&lt;/span&gt; &lt;a href=&#34;#selucids-take-over-psolemies-and-jewish-region&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Selucis sacrifices a pig on the altar in Judea - ruthless take over of Jewish&#xA;land which leads to the Maccabean revolt (Hanukkah)&lt;/p&gt;&#xA;&lt;h3 id=&#34;hanukkah&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Hanukkah&lt;/span&gt; &lt;a href=&#34;#hanukkah&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Jews wins the Maccabean revolts, story of Hanukkah arises&lt;/p&gt;&#xA;&lt;h2 id=&#34;hasmonean-rule&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Hasmonean rule&lt;/span&gt; &lt;a href=&#34;#hasmonean-rule&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Maccabean&amp;rsquo;s are people of the text and see that Yahweh wanted priests to rule,&#xA;not kings. So they hand the kingdom over to the Hasmoneans (priests), and their&#xA;Yahweh-centric rule eventually turns back to Hellenism&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Josephus (perhaps a little hyperbolically) said at this time there weren&amp;rsquo;t enough priests to run Sabbath services cause they were all at the naked mud wrestling tournaments&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;hasadim&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Hasadim&lt;/span&gt; &lt;a href=&#34;#hasadim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Maccabeans who leave the Hasmonean group, go north, and build a fundamentalist Jewish culture in Galilee which is where Jesus grew up and did his ministry&lt;/p&gt;&#xA;&lt;p&gt;They split into 2 groups - Zealots who use the sword, Pharisees who obedience to the text&lt;/p&gt;&#xA;&lt;h2 id=&#34;rome&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Rome&lt;/span&gt; &lt;a href=&#34;#rome&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jews (Saducees) persue Herod the Great in order to work things in light of Roman conquest, to remain good for the Jews&lt;/p&gt;&#xA;&lt;p&gt;Herod and Ceasar end up having a tight political relationship&lt;/p&gt;&#xA;&lt;h3 id=&#34;herod-s-kingdom&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Herod’s kingdom&lt;/span&gt; &lt;a href=&#34;#herod-s-kingdom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Herod split his kingdom to his sons after his death&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Herod Archelaus (rules for a short time and is replaced by Pontius Pilot)&lt;/li&gt;&#xA;&lt;li&gt;Herod Philip 2&lt;/li&gt;&#xA;&lt;li&gt;Herod Antipad&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Sometime in this period, Jesus was born&lt;/p&gt;&#xA;&lt;h2 id=&#34;post-herod&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Post-Herod&lt;/span&gt; &lt;a href=&#34;#post-herod&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jesus&amp;rsquo; public ministry is during this time&lt;/p&gt;&#xA;&lt;p&gt;Jews eventually revolt against Rome which leads to destruction of Jerusalem and the Temple&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Check your SMART status with smartctl</title>
    <id>https://pype.dev/check-your-smart-status-with-smartctl/</id>
    <updated>2022-08-29T06:30:27Z</updated>
    <published>2022-08-29T06:30:27Z</published>
    <link href="https://pype.dev/check-your-smart-status-with-smartctl/" rel="alternate" type="text/html"></link>
    <summary type="text">https://www.simplified.guide/linux/disk-health-check</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://www.simplified.guide/linux/disk-health-check&#34;&gt;https://www.simplified.guide/linux/disk-health-check&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;install&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Install&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;For ubuntu/debian based distros (which is what I primarly use presently)&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo apt update -y &amp;amp;&amp;amp; sudo apt install smartmontools -y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;list-hard-drives&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;List hard drives&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;lsblk | grep disk&lt;/code&gt; is one way or &lt;code&gt;sudo lshw -c disk&lt;/code&gt; is another&lt;/p&gt;&#xA;&lt;h1 id=&#34;smartctl&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;smartctl&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Use a device&amp;rsquo;s logical name such as &lt;code&gt;dev/sda&lt;/code&gt;, not a partition of the disk&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo smartctl -t short /dev/sda&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;go&#34;&gt;dotfiles   home   ×3  ×2  ×2 via   v3.10.6(dotfiles)  took 11s&#xA;&lt;/span&gt;&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;❯ sudo smartctl -t short /dev/sda&#xA;&lt;/span&gt;&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;smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.15.0-48-generic] (local 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;go&#34;&gt;Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&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;=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===&#xA;&lt;/span&gt;&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;Sending command: &amp;#34;Execute SMART Short self-test routine immediately in off-line mode&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;Drive command &amp;#34;Execute SMART Short self-test routine immediately in off-line mode&amp;#34; successful.&#xA;&lt;/span&gt;&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;Testing has begun.&#xA;&lt;/span&gt;&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;Please wait 2 minutes for test to 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;Test will complete after Fri Sep 23 05:59:39 2022 CDT&#xA;&lt;/span&gt;&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;Use smartctl -X to abort test.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;check-status&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;check status&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo smartctl -H /dev/sda&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;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;go&#34;&gt;dotfiles   home   ×3  ×2  ×2 via   v3.10.6(dotfiles)&#xA;&lt;/span&gt;&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;❯ sudo smartctl -H /dev/sda&#xA;&lt;/span&gt;&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;smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.15.0-48-generic] (local 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;go&#34;&gt;Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&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;=== START OF READ SMART DATA SECTION ===&#xA;&lt;/span&gt;&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;SMART overall-health self-assessment test result: PASSED&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>074 - Silent Years - Synagogue</title>
    <id>https://pype.dev/074-silent-years-synagogue/</id>
    <updated>2022-08-29T06:26:42Z</updated>
    <published>2022-08-29T06:26:42Z</published>
    <link href="https://pype.dev/074-silent-years-synagogue/" rel="alternate" type="text/html"></link>
    <summary type="text">Link to presentation</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://bemadiscipleship.s3.us-east-2.amazonaws.com/BEMA+074+Silent+Years+Synagogue-v2.pdf&#34;&gt;Link to presentation&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;judaism&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Judaism&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Modern Judaism is very different from Jesus&amp;rsquo; Judaism which was distinct from&#xA;David&amp;rsquo;s Judaism, etc&amp;hellip; We, as modern westerners, need to be aware of the&#xA;religious evolution and history of Judaism to properly understand the&#xA;Scriptures.&lt;/p&gt;&#xA;&lt;h1 id=&#34;synagogue&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Synagogue&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;Synagogue&lt;/code&gt; started with groups of people at homes, not in a big building,&#xA;after Exile, exploring a way to express their faith. Synagogue has 7 main&#xA;elements. But note that all 7 are not found in every Synagogue building, but&#xA;the 7 show up consistently&lt;/p&gt;&#xA;&lt;h2 id=&#34;mikveh&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Mikveh&lt;/span&gt; &lt;a href=&#34;#mikveh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Basically a baptistry.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Synagogue was never meant to replace the Temple&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Prior to AD 70, the doors to a Synagogue never faced Jerusalem in order to keep&#xA;in mind that Temple was distinct. However, after AD 70 doors to Synagogues were&#xA;built to face Jerusalem as a means of mourning the loss of the Temple&lt;/p&gt;&#xA;&lt;p&gt;Mikveh was a ritualistic cleansing (not a conversion like baptism) basically&#xA;every day, every time before you enter Synagogue.&lt;/p&gt;&#xA;&lt;h2 id=&#34;basilica&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Basilica&lt;/span&gt; &lt;a href=&#34;#basilica&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The pillared section of the Synagogue which held up the roof.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;They didn&amp;rsquo;t have the technology to span the desired length of the roof, so the columns/pillars were structural&lt;/li&gt;&#xA;&lt;li&gt;Had embedded windows to allow light into the center of the Synagogue in order to &lt;code&gt;read God&#39;s light by God&#39;s light&lt;/code&gt; (sunlight)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;bema&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bema&lt;/span&gt; &lt;a href=&#34;#bema&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Dead center is the Bema seat. (Bay-mah or Bee-mah but this isn&amp;rsquo;t the bima seat of judgement in the NT)&lt;/p&gt;&#xA;&lt;p&gt;Usually was just a slightly raised platform that someone would stand on as they read the text.&lt;/p&gt;&#xA;&lt;p&gt;The Bema seat starts to move closer to a side of the room, as a stage, as&#xA;Synagogues are influenced by Western culture. But in the Second Temple period&#xA;the seat was always at the center so that God&amp;rsquo;s people gather &lt;em&gt;around&lt;/em&gt; the&#xA;text.&lt;/p&gt;&#xA;&lt;p&gt;Modern day churches have us gather more as an audience to see a performer&#xA;rather than to gather around the text&lt;/p&gt;&#xA;&lt;h2 id=&#34;chief-seats&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chief Seats&lt;/span&gt; &lt;a href=&#34;#chief-seats&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Everyone sat on the floor to hear God&amp;rsquo;s word, but around the perimeter were&#xA;seats for those who were &amp;ldquo;seasoned&amp;rdquo;, &amp;ldquo;wise&amp;rdquo;&amp;hellip; really it&amp;rsquo;s that they were older&#xA;and known as wise men in the community&lt;/p&gt;&#xA;&lt;h2 id=&#34;torah-closet&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Torah Closet&lt;/span&gt; &lt;a href=&#34;#torah-closet&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Where Torah was kept. Modern times there were more expensive and ornate art put&#xA;here - the Torah Closet was the place where the valuable things were kept&lt;/p&gt;&#xA;&lt;p&gt;This was introduced because prior to Exile the Jews might have been a people&#xA;who didn&amp;rsquo;t know the rules&amp;hellip; yes they didn&amp;rsquo;t follow them, but there wasn&amp;rsquo;t a&#xA;great system for making sure everyone knew them. So the Torah Closet existed to&#xA;keep God&amp;rsquo;s law safe and accessible by all of God&amp;rsquo;s people&lt;/p&gt;&#xA;&lt;p&gt;timestamp: 21 ish minutes - need to listen to Moses Seat again&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Session 3 Intro</title>
    <id>https://pype.dev/session-3-intro/</id>
    <updated>2022-08-29T00:00:00Z</updated>
    <published>2022-08-29T00:00:00Z</published>
    <link href="https://pype.dev/session-3-intro/" rel="alternate" type="text/html"></link>
    <summary type="text">Session 1: Torah</summary>
    <content type="html">&lt;h1 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Session 1: Torah&lt;/p&gt;&#xA;&lt;p&gt;Session 2: Prophets and Writings&lt;/p&gt;&#xA;&lt;h1 id=&#34;review&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Review&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;torah&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Torah&lt;/span&gt; &lt;a href=&#34;#torah&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Big idea: partnership&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Basis of partnership / meet the characters (Genesis)&lt;/li&gt;&#xA;&lt;li&gt;God chooses a partner / the partner chooses God (Exodus)&lt;/li&gt;&#xA;&lt;li&gt;God defines the partnership (Leviticus)&lt;/li&gt;&#xA;&lt;li&gt;God shapes his partner (Numbers)&lt;/li&gt;&#xA;&lt;li&gt;God asks his partner to remember (Deuteronomy)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;history&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;History&lt;/span&gt; &lt;a href=&#34;#history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Big idea: Redemption cycle; God&amp;rsquo;s patience&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;God places His people in the middle of the action for mission (Joshua)&lt;/li&gt;&#xA;&lt;li&gt;God’s people struggle to walk the path and trust the story (Judges &amp;amp; Ruth)&lt;/li&gt;&#xA;&lt;li&gt;God’s people struggle with identity and obedience (Samuel/Kings)&lt;/li&gt;&#xA;&lt;li&gt;God’s people struggle with empire and becoming the anti-story (Chronicles)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;wisdom&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Wisdom&lt;/span&gt; &lt;a href=&#34;#wisdom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Big idea: Tools&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;If we are going to survive the cycle, we are going to need&amp;hellip;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Art and song for worship and expression (Psalms)&lt;/li&gt;&#xA;&lt;li&gt;Nuggets of conventional wisdom (Proverbs)&lt;/li&gt;&#xA;&lt;li&gt;Purpose and a reason to get up every morning (Ecclesiastes)&lt;/li&gt;&#xA;&lt;li&gt;Relationships and intimacy with others (Song of Songs)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prophets&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prophets&lt;/span&gt; &lt;a href=&#34;#prophets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Big idea: Warnings, woes, and hope&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;God sends warning in Pre-Assyrian/Pre-Babylonian prophets (Amos, Hosea, Micah, 1 Isaiah, Zephaniah, 2 Isaiah)&lt;/li&gt;&#xA;&lt;li&gt;God pronounces woe and judgment (Jonah, Nahum, Jeremiah, Lamentations, Habakkuk, Obadiah, Joel)&lt;/li&gt;&#xA;&lt;li&gt;God gives hope and encouragement to an exiled people (Ezekiel, Daniel, Job, 3 Isaiah)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;remnant&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Remnant&lt;/span&gt; &lt;a href=&#34;#remnant&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Big idea: Returning, yearning, learning&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;God’s people return to rebuild and restore what once was (4 Isaiah, Ezra/Nehemiah)&lt;/li&gt;&#xA;&lt;li&gt;God’s people yearn for what used to be (Haggai, Zechariah)&lt;/li&gt;&#xA;&lt;li&gt;God’s people learn that this new world demands a new approach (Malachi, Esther)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-silent-years&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Silent Years&lt;/span&gt; &lt;a href=&#34;#the-silent-years&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We run out of Biblical text but there&amp;rsquo;s centuries of histories between the&#xA;ending of the OT and Jesus coming onto the scene&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Benchmark your disks with fio</title>
    <id>https://pype.dev/benchmark-your-disks-with-fio/</id>
    <updated>2022-08-27T13:43:22Z</updated>
    <published>2022-08-27T13:43:22Z</published>
    <link href="https://pype.dev/benchmark-your-disks-with-fio/" rel="alternate" type="text/html"></link>
    <summary type="text">I use ZFS at home in my homelab for basically all of my storage... Docker uses ZFS backend, all my VMs have their images in their own zfs datasets, and all...</summary>
    <content type="html">&lt;h1 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I use ZFS at home in my homelab for basically all of my storage&amp;hellip; Docker uses&#xA;ZFS backend, all my VMs have their &lt;code&gt;.qcow2&lt;/code&gt; images in their own zfs datasets,&#xA;and all my shares are ZFS datasets. I love ZFS but my home hardware presently&#xA;is the opposite of expensive or new&amp;hellip; Thankfully I&amp;rsquo;ve had a lot of my orginal&#xA;homelab simply given to me but the cost of this is that I didn&amp;rsquo;t put my&#xA;machines together, I didn&amp;rsquo;t choose the disks, and I definitely didn&amp;rsquo;t do the&#xA;research I would&amp;rsquo;ve otherwise done had I bankrolled my server personally&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Problem&lt;/span&gt; &lt;a href=&#34;#the-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I run &lt;code&gt;glances&lt;/code&gt; on basically all my machines and for the longest time I have&#xA;been seeing big time &lt;code&gt;iowait&lt;/code&gt; issues. Now, since everything was free I&amp;rsquo;ve&#xA;largely been able to ignore that however I&amp;rsquo;m now after some better performance&#xA;which I think means new hardware!&lt;/p&gt;&#xA;&lt;p&gt;Here is a random screenshot of my glances homepage at time of writing - The&#xA;only major load on my server is some &lt;code&gt;ffmpeg&lt;/code&gt; transcoding (about 60% CPU&#xA;utilization)&amp;hellip;&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/glances-iowait.png&#34; alt=&#34;glances&#34; title=&#34;glances with iowait&#34; /&gt;&#xA;&lt;p&gt;As you can see&amp;hellip; there&amp;rsquo;s a lot of issues and &lt;em&gt;I don&amp;rsquo;t even know what they mean&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;fio&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;fio&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I heard about &lt;a href=&#34;https://fio.readthedocs.io/en/latest/&#34;&gt;fio&lt;/a&gt; through a friend and&#xA;decided to try it out quick. It installs with &lt;code&gt;apt&lt;/code&gt; on ubuntu quick and easy&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Jim Saltar has a good blog post on it &lt;a href=&#34;https://arstechnica.com/gadgets/2020/02/how-fast-are-your-disks-find-out-the-open-source-way-with-fio/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Basically it&amp;rsquo;s a handy tool for benchmarking your disks and the blog dives into&#xA;what types of metrics matter - it&amp;rsquo;s not just throughput, but also latency,&#xA;iops, etc.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tests&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Tests&lt;/span&gt; &lt;a href=&#34;#tests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I ran a few basic commands inside a new zfs dataset on my server &lt;code&gt;tank/fio&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;fio --name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;random-write --ioengine&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;posixaio --rw&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;randwrite --bs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;4k --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;4g --numjobs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; --runtime&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;60&lt;/span&gt; --time_based --end_fsync&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &amp;gt; single-4KiB-random-write.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fio --name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;random-write --ioengine&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;posixaio --rw&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;randwrite --bs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;64k --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;256m --numjobs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; --iodepth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; --runtime&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;60&lt;/span&gt; --time_based --end_fsync&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &amp;gt; 16-parallel-64KiB-random-write.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fio --name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;random-write --ioengine&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;posixaio --rw&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;randwrite --bs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1m --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;16g --numjobs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; --iodepth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; --runtime&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;60&lt;/span&gt; --time_based --end_fsync&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &amp;gt; single-1MiB-random-write.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;results&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Results&lt;/span&gt; &lt;a href=&#34;#results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The single 4 KiB random write:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;WRITE: bw=7836KiB/s (8024kB/s), 7836KiB/s-7836KiB/s (8024kB/s-8024kB/s), io=523MiB (548MB), run=68317-68317msec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The 16 parallel 64KiB random writes:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;WRITE: bw=93.9MiB/s (98.4MB/s), 5599KiB/s-6303KiB/s (5734kB/s-6454kB/s), io=7642MiB (8013MB), run=81310-81418msec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The single 1MiB random write:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;WRITE: bw=81.2MiB/s (85.1MB/s), 81.2MiB/s-81.2MiB/s (85.1MB/s-85.1MB/s), io=8177MiB (8574MB), run=100699-100699msec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;summary&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Summary&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;So I don&amp;rsquo;t fully understand these numbers yet&amp;hellip; 80-100 MiB/s isn&amp;rsquo;t super fast&#xA;and that&amp;rsquo;s across a parallelized workload&amp;hellip; The single threaded workloads have&#xA;awful performance so this tells me something is wrong&amp;hellip; I have a few ideas&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ZFS dataset config options such as &lt;code&gt;ashift&lt;/code&gt; or the blocksize might be way misconfigured&lt;/li&gt;&#xA;&lt;li&gt;The disks/pool which came from a TrueNAS/FreeBSD machine may have some artifacts that I need to clean up&lt;/li&gt;&#xA;&lt;li&gt;The SAS controller I am using, which I flashed with IT firmware to get it into JBOD mode might be messed up&lt;/li&gt;&#xA;&lt;li&gt;The data cables themselves could be a problem&amp;hellip;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Points 3 and 4 are less likely given that the write speed does increase in the parallelized job but I&amp;rsquo;m a newbie so it&amp;rsquo;s time to dive in!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Screwtape</title>
    <id>https://pype.dev/screwtape/</id>
    <updated>2022-08-22T00:00:00Z</updated>
    <published>2022-08-22T00:00:00Z</published>
    <link href="https://pype.dev/screwtape/" rel="alternate" type="text/html"></link>
    <summary type="text">Below are just quick notes or quotes from each chapter as a reminder of what to go back to chat about. This isn&#39;t intended to be in-depth by any stretch.</summary>
    <content type="html">&lt;h1 id=&#34;chapters&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapters&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Below are just quick notes or quotes from each chapter as a reminder of what to&#xA;go back to chat about. This isn&amp;rsquo;t intended to be in-depth by any stretch.&lt;/p&gt;&#xA;&lt;h2 id=&#34;chapter-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 1&lt;/span&gt; &lt;a href=&#34;#chapter-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&amp;ldquo;Your man has been accustomed, ever since he was a boy, to have a dozen&#xA;incompatible philosophies dancing about together inside his head. He doesn&amp;rsquo;t&#xA;think of doctrines as primarily &amp;rsquo;true&amp;rsquo; or &amp;lsquo;false&amp;rsquo;, but as &amp;lsquo;academic&amp;rsquo; or&#xA;&amp;lsquo;practical&amp;rsquo;, &amp;lsquo;outworn&amp;rsquo; or &amp;lsquo;contemporary&amp;rsquo;, &amp;lsquo;conventional&amp;rsquo; or &amp;lsquo;ruthless&amp;rsquo;&amp;rdquo;&lt;/p&gt;&#xA;&lt;h2 id=&#34;chapter-2&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 2&lt;/span&gt; &lt;a href=&#34;#chapter-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;chapter-3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 3&lt;/span&gt; &lt;a href=&#34;#chapter-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;pg 11. Keeping the patient&amp;rsquo;s mind focused on the &amp;lsquo;inner life&amp;rsquo; so his actions do&#xA;not ever reflect his conversion&lt;/p&gt;&#xA;&lt;p&gt;pg 12. Creating an imaginary person for whom to pray&amp;hellip; &amp;ldquo;In time, you may get&#xA;the cleavage so wide that no thought or feeling from his prayers for the&#xA;imagined mother will ever flow over into his treatment of the real one&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;pg 13-14. &amp;ldquo;Let him assume that she knows how annoying it is and does it to&#xA;annoy - if you know your job he will not notice the immense improbability of&#xA;the assumption&amp;rdquo; -&amp;gt; This point is particularly convicting to me&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;The last point about encouraging the patient to interpret the mother&amp;rsquo;s every&#xA;move in an over-sensitive fashion is actually very relatable for me&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-4&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 4&lt;/span&gt; &lt;a href=&#34;#chapter-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;pg 15. Convincing the patient that scheduled prayer is wrong and that he must&#xA;create a &lt;em&gt;mood&lt;/em&gt; within himself for real prayer reminds me of high school youth&#xA;groups talking about &amp;ldquo;praying in the spirit&amp;rdquo; and silly conversation &amp;ldquo;combating&#xA;salvation by works&amp;rdquo; ideas like scheduled prayer times.&lt;/p&gt;&#xA;&lt;p&gt;pg 16. &amp;ldquo;they constantly forget, what you must always remember, that they are&#xA;animals and that whatever their bodies do affects their souls&amp;rdquo; 👈 feels a lot&#xA;like Genesis 3, and humans are never more human than when we exercise&#xA;self-control.&lt;/p&gt;&#xA;&lt;p&gt;pg. 16. &amp;ldquo;Keep them watching their own minds and trying to produce &lt;em&gt;feelings&lt;/em&gt;&#xA;there by the action of their own wills&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;I totally remember feeling like I needed to want to pray in order for my&#xA;prayers to matter&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;pg 17. &amp;ldquo;When they say they re praying for forgiveness, let them be trying to&#xA;feel forgiven&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;pg 18. &amp;ldquo;But whatever the nature of the composite object, you must keep him&#xA;praying to &lt;em&gt;it&lt;/em&gt; - to the thing that he has made, not to the Person who has made&#xA;him&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;Lewis talking actual idolatry with meaningful consequences&amp;hellip; not the &amp;ldquo;money&#xA;is my idol&amp;rdquo; take most pastors preach&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-5&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 5&lt;/span&gt; &lt;a href=&#34;#chapter-5&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;pg 23. &amp;ldquo;&amp;hellip;while tens of thousands who do not go so far as that will&#xA;nevertheless have their attention diverted from themselves to values and causes&#xA;which they believe to be higher than the self. I know that the Enemy&#xA;disapproves many of these causes. But that is where He is so unfair. He often&#xA;makes prizes of humans who have given their lives for causes He think bad on&#xA;the monstrously sophistical ground that the humans thought them good and were&#xA;following the best they knew&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;WARNING TITLE&lt;/p&gt;&#xA;&lt;p&gt;This reminds me of the young Tarkan in Narnia: The Last Battle, who Aslan&#xA;ascribes all his good deeds done to Tash as done to himself - effectively&#xA;saying the Tarkan&amp;rsquo;s loyalty to the wrong god is honored by Aslan? Definitely&#xA;want to know more about Lewis&amp;rsquo; thoughts there and here in Screwtape&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-6&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 6&lt;/span&gt; &lt;a href=&#34;#chapter-6&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;pg 25. &amp;ldquo;There is nothing like suspense and anxiety for barricading a human&amp;rsquo;s&#xA;mind against the Enemy.&amp;rdquo;&lt;/p&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;p&gt;Screwtape&amp;rsquo;s point in the beinning of the chapter confuses me&amp;hellip; He instructs&#xA;Wormwood to keep the man thinking that the things he is anxious about, the&#xA;things themselves, are his trials/cross to bear, rather than the anxiety&#xA;itself. So from the Christian perspective, Lewis seems to be saying that the&#xA;real-time, present, acute anxiety and suspense in the man&amp;rsquo;s heart regarding the&#xA;war is the actual trial and cross&amp;hellip; not the things the man is anxious about. I&#xA;don&amp;rsquo;t know what to do with this but it &lt;em&gt;feels&lt;/em&gt; convicting to me. Growing up I&#xA;often had the thought that nothing could be wrong because &amp;ldquo;I have Jesus&amp;rdquo;, and I&#xA;would look at my circumstances as things to bear - for me the biggest one was&#xA;singleness. So would Lewis say my outlook on my singleness as the thing to&#xA;bear, rather than the anxiety about being single, was the enemy twisting my&#xA;convictions to be inward rather than God-ward? It clearly looks like my&#xA;convictions were inward, but I&amp;rsquo;m not sure I understand how seeing the anxiety&#xA;itself as my &amp;ldquo;cross to bare&amp;rdquo; is any more Biblical&amp;hellip;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-7&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 7&lt;/span&gt; &lt;a href=&#34;#chapter-7&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;page 32. &amp;ldquo;The fact that &amp;lsquo;devils&amp;rsquo; are predominately &lt;em&gt;comic&lt;/em&gt; figures in the&#xA;modern imagination will help you&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;I think It&amp;rsquo;s funny because I bet most people, myself included, reading this book (at&#xA;least the first time) have a red-devil type figure in mind for Screwtape or&#xA;Wormwood&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;page 31-32. &amp;ldquo;If once we can produce our perfect work &amp;ndash; the Materialist&#xA;Magician, the man, not using, but veritably worshipping, what he vaguely called&#xA;&amp;lsquo;Froces&amp;rsquo; while denying the existence of &amp;lsquo;spirits&amp;rsquo; &amp;ndash; then the end of the war&#xA;will be in sight.&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I hear some non-Christian friends say things like &amp;ldquo;I&amp;rsquo;m spiritual so I&#xA;appreciate your prayers&amp;rdquo;. In a sense they believe in some kind of&#xA;non-physical &amp;ldquo;thing&amp;rdquo; but not in any real sense so it looks, to me, similar to&#xA;what Screwtape longs for in his letter to Wormwood.&lt;/p&gt;&#xA;&lt;p&gt;page 32. &amp;ldquo;All extremes, except extreme deviotion to the Enemy, are to be&#xA;encouraged&amp;hellip; Other ages, of which the present is one, are unbalanced and prone&#xA;to faction, and it is our business to inflame them&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;Using Christianity to justify political positions or judgement seems right&#xA;here. Extreme devotion to our God I don&amp;rsquo;t think should offend people as often&#xA;or to the degree that many Christians think is right&amp;hellip; People flocked to&#xA;Jesus, only the religious elite and politically powerful hated him. When&#xA;Christianity is mixed with anything other than itself, that&amp;rsquo;s when it becomes&#xA;offensive. I think I see people hold to something like Christian Nationalism,&#xA;and the offensive nature of it justifies the position because &amp;ldquo;we were always&#xA;going to be persecured for loving Jesus&amp;rdquo;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 34&lt;/p&gt;&#xA;&lt;p&gt;Let him begin by treating the Patriotism or the Pacifism as a part of his&#xA;religion. Then let him, under then influence of partisan spirit, come to&#xA;regard it as the most important part&amp;hellip;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-8&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 8&lt;/span&gt; &lt;a href=&#34;#chapter-8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 39&lt;/p&gt;&#xA;&lt;p&gt;For He cannot ravish. He can only woo.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 40&lt;/p&gt;&#xA;&lt;p&gt;He wants them to learn to walk and must therefore take away His hand; and&#xA;if only the will to walk is really there He is pleased even with their&#xA;stumbles&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-9&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 9&lt;/span&gt; &lt;a href=&#34;#chapter-9&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;page 43. &amp;ldquo;In the first place I have always found that the trough periods of the&#xA;human undulation provide excellen opportunity for all sensual tempations,&#xA;particularly those of sex&amp;hellip; The attack has a much better chance of success&#xA;when the man&amp;rsquo;s whole innter world is drab and cold and empty.&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;I feel this observation in my own life deeply - in my &amp;rsquo;troughs&amp;rsquo; I&amp;rsquo;m drawn to&#xA;pleasurable things in a very unpleasurable way&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition success&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 44&lt;/p&gt;&#xA;&lt;p&gt;Never forget that when we are dealing with any pleasure in its healthy and&#xA;normal and satisfying form, we are, in a sense, on the Enemy&amp;rsquo;s ground.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;jargon not wisdom&lt;/p&gt;&#xA;&lt;p&gt;Of course there is no conceivable way of getting by reason from the&#xA;proposition &amp;lsquo;I am losing interest in this&amp;rsquo; to the proposition &amp;lsquo;This is&#xA;false&amp;rsquo;/ But, as I said before, it is jargon, not reason, you must rely on.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-10&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 10&lt;/span&gt; &lt;a href=&#34;#chapter-10&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;page 49. &amp;ldquo;Did he commit himself deeply? I don&amp;rsquo;t mean the words. There is a&#xA;subtle play of looks and tons and laughs by which a mortal can imply that he is&#xA;of the same party as those to whom he is speaking&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;I resonate with the temptation Scretape is basically instructing Wormwood to&#xA;employ - two-facedness/double-life. In hs/college in particular I would &amp;lsquo;play&#xA;the part&amp;rsquo; to fit in to a particular crowd. I&amp;rsquo;d rarely confess Christianity&#xA;early on, would never deny it explicitly, but would act and talk in a&#xA;way/about things to imply that I was not necessarily non-Christian, but&#xA;instead nothing to ask about.&lt;/p&gt;&#xA;&lt;p&gt;Chapter 10 in overall convicting as it just drives home the point I noted&#xA;just now&amp;hellip;. that I&amp;rsquo;m very prone to &amp;lsquo;acting&amp;rsquo; in order to fit into a community&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chatper-11&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 11&lt;/span&gt; &lt;a href=&#34;#chatper-11&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;page 55. &amp;ldquo;The real use of Joke or Humour is in quite a different direction, and&#xA;it is specially promising among the English who take their &amp;lsquo;sense of humour&amp;rsquo; so&#xA;seriously that a deficiency in this sense is almost the only deficiency at&#xA;which they feel shame. Humour is for them the all-consoling and (mark this) the&#xA;all-excusing, grace of life&amp;rdquo;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;all-excusing grace of life&lt;/p&gt;&#xA;&lt;p&gt;Humour is for them the all-consoling and (mark this) the all-excusing,&#xA;grace of life&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;Basically I understand Lewis to be saying here that men (or the English in&#xA;particular) take great pride in having a sense of humor - so much so that&#xA;humor becomes an excuse to laugh at anything. When anything is worth laughing&#xA;at, then I think it&amp;rsquo;s very hard to prioritize things above others - becuase&#xA;if everything is a joke, is anything really worthy of more than a joke?&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;Flippancy&lt;/p&gt;&#xA;&lt;p&gt;I didn&amp;rsquo;t understand flippancy as first because I&amp;rsquo;ve always kind of equated&#xA;it with &amp;ldquo;quick&amp;rdquo;. However, it&amp;rsquo;s more of a &amp;ldquo;quickness&amp;rdquo; paired with a total&#xA;lack of respect/awareness for/of X.&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;churches&lt;/p&gt;&#xA;&lt;p&gt;Are there areas in the church where we are flippant (specifically with humor I guess?)&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-12&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 12&lt;/span&gt; &lt;a href=&#34;#chapter-12&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 57-58&lt;/p&gt;&#xA;&lt;p&gt;As long as he retains externally the habits of a Christian he can still be&#xA;made to think of himself as one who has adopted a few new friends and&#xA;amusements but whose spiritual state is much the same as it was six weeks&#xA;ago.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;page 58. [The dim uneasiness about &lt;code&gt;backsliding&lt;/code&gt; Screwtape describes in the&#xA;chapter] increases the patient&amp;rsquo;s reluctance to think about the Enemy.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;This is too real for me - in seasons of rebellion, and honestly anytime I&#xA;fall away from &amp;ldquo;Christian habits&amp;rdquo; I notice that I am actually reluctant to&#xA;pray or meditate. Often the only thing that (or the initial thing in&#xA;appearance) that brings me back is my kids and praying with them or singing&#xA;Doxology. A choice I wouldnt&amp;rsquo; make alone, but make for their sake - perhaps&#xA;this is God&amp;rsquo;s grace poured out on me&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 58&lt;/p&gt;&#xA;&lt;p&gt;They hate every idea that suggests Him, just as men in financial&#xA;embarrassment hate the very sight of a pass-book.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-13&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 13&lt;/span&gt; &lt;a href=&#34;#chapter-13&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Particularly a challenging chapter. It&amp;rsquo;s interesting to think about pleasurable&#xA;things, for their own sake and not enjoyed outside the boundaires set for&#xA;pleasure by God, are harmful to our enemy&amp;rsquo;s tactics. I do not know if I enjoy&#xA;things for their own sake enough or rightly&amp;hellip;.&lt;/p&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;p&gt;Do my tech hobbies make me more human or less by distracting me from holier&#xA;things&amp;hellip;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-14&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 14&lt;/span&gt; &lt;a href=&#34;#chapter-14&#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;page 69&lt;/p&gt;&#xA;&lt;p&gt;All virtues are less formidable to us once the man is aware that he has&#xA;them, but this is specially true of humility.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-16&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 16&lt;/span&gt; &lt;a href=&#34;#chapter-16&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 81&lt;/p&gt;&#xA;&lt;p&gt;In the first place the parochial organisation [Church] should always be&#xA;attacked, because, being a &lt;em&gt;unity of place and not of likings&lt;/em&gt;, it brings&#xA;people of different classes and psychology together in the kind of unity&#xA;the Enemy desires&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 82-83&lt;/p&gt;&#xA;&lt;p&gt;In order to spare the laity all &amp;lsquo;difficulties&amp;rsquo; he has deserted both the&#xA;lectionary and the appointed psalms and now, without noticing it, revoles&#xA;endlessly round the little treadmill of his fifteen favourite psalms and&#xA;twenty favorite lessons.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-17&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 17&lt;/span&gt; &lt;a href=&#34;#chapter-17&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;Gluttony of Delicacy, not gluttony of Excess&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 88&lt;/p&gt;&#xA;&lt;p&gt;You see? Because what she wants is smaller and less costly than what has&#xA;been set before her, she never recognises as gluttony her determination to&#xA;get what she wants, however troublesome it may be to others&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chapter-18&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 18&lt;/span&gt; &lt;a href=&#34;#chapter-18&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Screwtape&amp;rsquo;s lack of understanding,and arrogant questioning, of the Enemy&amp;rsquo;s&#xA;&lt;em&gt;love&lt;/em&gt; is a hilarious commentary on humans who stand staunchly opposed to&#xA;Yahweh. Academic peers of mine, with such amazing pride, speaking aginst the&#xA;Biblical narrative because &lt;em&gt;it doesn&amp;rsquo;t make sense&lt;/em&gt;&amp;hellip; Lewis makes a good point&#xA;through Screwtape &amp;ldquo;Members of His faction have frequently admitted that if ever&#xA;we [demons] came to understand what He means by love, the war would be over and&#xA;we should re-enter Heaven&amp;rdquo;. I think Lewis&amp;rsquo; point dovetails with the idea that&#xA;Jesus is actually very compelling and the rubbish about him being offensive is&#xA;a replay of the Gospels - where the rich and elite are the ones offended, not&#xA;the people he calls to the kingdom. Jesus&amp;rsquo; love doesn&amp;rsquo;t make sense to those who&#xA;have everything they think they need&amp;hellip; His love is for those who know they are&#xA;lowly&lt;/p&gt;&#xA;&lt;h2 id=&#34;chapter-19&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 19&lt;/span&gt; &lt;a href=&#34;#chapter-19&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TODO: Go through and make notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;chapter-20&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 20&lt;/span&gt; &lt;a href=&#34;#chapter-20&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TODO: Go through and make notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;chapter-21&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chapter 21&lt;/span&gt; &lt;a href=&#34;#chapter-21&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TODO: Go through and make notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;chatper-22&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 22&lt;/span&gt; &lt;a href=&#34;#chatper-22&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TODO: Go through and make notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;chatper-23&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 23&lt;/span&gt; &lt;a href=&#34;#chatper-23&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TODO: Go through and make notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;chatper-24&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 24&lt;/span&gt; &lt;a href=&#34;#chatper-24&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;page 130 - It&amp;rsquo;s always the novice who exaggerates&amp;hellip;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;I think about Summit in particular, where I got to meet a lot of big names in&#xA;apologetics, and I&amp;rsquo;d talk about them to others like we were friends&amp;hellip; The&#xA;difference between &amp;ldquo;I know X&amp;rdquo; and &amp;ldquo;X knows me&amp;rdquo; is a thing I kept hidden so I&#xA;could feel important&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chatper-25&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 25&lt;/span&gt; &lt;a href=&#34;#chatper-25&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Christianity And...&lt;/p&gt;&#xA;&lt;p&gt;What we want, if men becomes Christians at all, is to koeep them in the&#xA;state of mind I call &amp;lsquo;Christianity And&amp;rsquo;. You know - Christianity and the&#xA;Crisis,Christianity and the New Order, &amp;hellip;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t know&amp;hellip; smells more and more like Christian Nationalism is the&#xA;modern-day &lt;code&gt;Christinaity And&lt;/code&gt;&amp;hellip; So much focus on policy, behavior, order&#xA;(patriarchy even)&amp;hellip;. Not a lot about Jesus &lt;em&gt;in the conversation about&#xA;Christian Nationalism&lt;/em&gt; (not that Christians in this mindset don&amp;rsquo;t genuinely&#xA;love Jesus or talk about him - but I don&amp;rsquo;t hear Jesus often in the&#xA;conversation, I only hear the politics). But I suppose to be fair there&amp;rsquo;s&#xA;every chance in the world that I misunderstand the position and people.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Danger&lt;/p&gt;&#xA;&lt;p&gt;But if I do misunderstand&amp;hellip; A fairly educated, theologically competent,&#xA;Biblically literate person&amp;hellip; then what do Christian Nationalists expect of&#xA;people who never heard of Jesus, or already were introduced to Republican&#xA;Jesus or something&amp;hellip; I&amp;rsquo;m not the cream of the crop, but if I don&amp;rsquo;t&#xA;properly understand what the position is about then the world, unbelievers&#xA;I mean, will be even more turned off to the Gospel&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Page 139 - &amp;ldquo;We have trained them to think of the Future as a promised land&#xA;which favoured heroes attain - not as something which everyone reaches at the&#xA;rate of sixety minutes an hour, whatever he does, whoever he is&amp;hellip;&amp;rdquo;&lt;/p&gt;&#xA;&lt;h2 id=&#34;chatper-26&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 26&lt;/span&gt; &lt;a href=&#34;#chatper-26&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition danger&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;_Unselfishness_&lt;/p&gt;&#xA;&lt;p&gt;Note, once again, the admirable work of our Philological Arm in&#xA;substituting the negative unselfishness for the Enemy&amp;rsquo;s positive Charity&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Big one for me&amp;hellip; hard to even process&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;page 143&lt;/p&gt;&#xA;&lt;p&gt;In discussing any joint action, it becomes obligatory thta A should argue&#xA;in favour of B&amp;rsquo;s supposed wishes and against his own, while B does the&#xA;opposite&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition abstract&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Abstract&lt;/p&gt;&#xA;&lt;p&gt;Going out to eat, what to do tonight, etc&amp;hellip; simple things, not big ones&#xA;(like how to discipline our kids), is where this is just rampant in my&#xA;life&amp;hellip; I constantly and consciously say in my head &amp;ldquo;X will make my wife&#xA;happier even though I don&amp;rsquo;t want to&amp;rdquo; then after whatever &amp;ldquo;X&amp;rdquo; is, turns out&#xA;she didn&amp;rsquo;t really care or want it &lt;em&gt;OR&lt;/em&gt; she&amp;rsquo;s upset because she feels like a&#xA;nuisance to me&amp;hellip; Then the reality is I don&amp;rsquo;t actually know if I saw her as a&#xA;nuisance in that moment, or if I genuinely wanted to do what she wanted out&#xA;of love and charity&amp;hellip;&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;page 144&lt;/p&gt;&#xA;&lt;p&gt;He insists on doing &amp;lsquo;what the others want&amp;rsquo;. They insist on doing what he&#xA;wants. Passions are roused. Soon someone is saying &amp;lsquo;Very well then, I won&amp;rsquo;t&#xA;have any tea at all!&amp;rsquo;, and a real quarrel ensues with bitter resentment on&#xA;both sides.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Happens all the freaking time, and at the end of it I&amp;rsquo;m left with &amp;ldquo;wtf just happened?&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;chatper-27&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 27&lt;/span&gt; &lt;a href=&#34;#chatper-27&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TODO: Go through and make notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;chatper-28&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Chatper 28&lt;/span&gt; &lt;a href=&#34;#chatper-28&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Paperless-NGX filtering on IDs instead of values</title>
    <id>https://pype.dev/paperless-ngx-filtering-on-ids-instead-of-values/</id>
    <updated>2022-08-09T08:28:51Z</updated>
    <published>2022-08-09T08:28:51Z</published>
    <link href="https://pype.dev/paperless-ngx-filtering-on-ids-instead-of-values/" rel="alternate" type="text/html"></link>
    <summary type="text">To filter for saved views from the admin console you have to use the of the tag you are using to filter on...</summary>
    <content type="html">&lt;p&gt;To filter for saved views from the admin console you have to use the &lt;code&gt;id&lt;/code&gt; of&#xA;the tag you are using to filter on&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Ex: filtering for tags &amp;ldquo;Inbox&amp;rdquo; doesn&amp;rsquo;t work, but for tag 18 does (the id fo the&#xA;Inbox tag). I can find that ID by clicking on the tag and looking at the url&#xA;bar&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Mounting exFAT USB in Linux</title>
    <id>https://pype.dev/mounting-exfat-usb-in-linux/</id>
    <updated>2022-07-31T07:38:43Z</updated>
    <published>2022-07-31T07:38:43Z</published>
    <link href="https://pype.dev/mounting-exfat-usb-in-linux/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;h1 id=&#34;steps&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Steps&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo fdisk -l&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;then look for the device and partition&lt;/p&gt;&#xA;&lt;p&gt;get the Type column&lt;/p&gt;&#xA;&lt;p&gt;mount&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Example&lt;/span&gt; &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;&#xA;dumbledore in /media  NO PYTHON VENV SET &#xA;❯ sudo fdisk -l&#xA;&#xA;...&#xA;&#xA;Device     Boot    Start      End  Sectors  Size Id Type&#xA;/dev/sdk1  *        2048 60371951 60369904 28.8G  7 HPFS/NTFS/exFAT&#xA;/dev/sdk2       60371952 60437487    65536   32M ef EFI (FAT-12/16/32)&#xA;&#xA;&#xA;dumbledore in /media  NO PYTHON VENV SET &#xA;❯ sudo mount -t ntfs /dev/sdk1 /media/ventoy-usb -o uid=1000                       &#xA;NTFS signature is missing.&#xA;Failed to mount &#39;/dev/sdk1&#39;: Invalid argument&#xA;The device &#39;/dev/sdk1&#39; doesn&#39;t seem to have a valid NTFS.&#xA;Maybe the wrong device is used? Or the whole disk instead of a&#xA;partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?&#xA;&#xA;dumbledore in /media  NO PYTHON VENV SET &#xA;✗ sudo mount -t exfat /dev/sdk1 /media/ventoy-usb -o uid=1000&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Xrdp-Authentication-Required-To-Create-Managed-Color-Device</title>
    <id>https://pype.dev/xrdp-authentication-required-to-create-managed-color-device/</id>
    <updated>2022-07-18T00:00:00Z</updated>
    <published>2022-07-18T00:00:00Z</published>
    <link href="https://pype.dev/xrdp-authentication-required-to-create-managed-color-device/" rel="alternate" type="text/html"></link>
    <summary type="text">I just need to RDP into an Ubuntu box via Remmina and everytime I login I have to authenticate to create a color managed device... which I don&#39;t even know...</summary>
    <content type="html">&lt;p&gt;I just need to RDP into an Ubuntu box via Remmina and everytime I login I have&#xA;to authenticate to create a color managed device&amp;hellip; which I don&amp;rsquo;t even know&#xA;what that is!&lt;/p&gt;&#xA;&lt;p&gt;To fix it?&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;vim /etc/polkit-1/localauthority.conf.d/02-allow-colord.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;polkit.addRule(function(action, subject) {&#xA; if ((action.id == &amp;quot;org.freedesktop.color-manager.create-device&amp;quot; ||&#xA; action.id == &amp;quot;org.freedesktop.color-manager.create-profile&amp;quot; ||&#xA; action.id == &amp;quot;org.freedesktop.color-manager.delete-device&amp;quot; ||&#xA; action.id == &amp;quot;org.freedesktop.color-manager.delete-profile&amp;quot; ||&#xA; action.id == &amp;quot;org.freedesktop.color-manager.modify-device&amp;quot; ||&#xA; action.id == &amp;quot;org.freedesktop.color-manager.modify-profile&amp;quot;) &amp;amp;&amp;amp;&#xA; subject.isInGroup(&amp;quot;{users}&amp;quot;)) {&#xA; return polkit.Result.YES;&#xA; }&#xA; });&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Give&amp;rsquo;r the &lt;code&gt;:x&lt;/code&gt;, logout, and you&amp;rsquo;re good to go&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>ZFS Permissions for Sanoid/Syncoid</title>
    <id>https://pype.dev/zfs-permissions-for-sanoid/</id>
    <updated>2022-07-08T15:54:58Z</updated>
    <published>2022-07-08T15:54:58Z</published>
    <link href="https://pype.dev/zfs-permissions-for-sanoid/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;code&gt;zfs allow -u $USER clone,load-key,create,destroy,mount,mountpoint,receive,send,rollback,compression,snapshot,hold,keylocation,bookmark tank&lt;/code&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;load-key only needed if using encrypted datasets&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>kvm-network-interface-via-nat-ubuntu-20</title>
    <id>https://pype.dev/kvm-network-interface-via-nat-ubuntu-20/</id>
    <updated>2022-06-25T07:20:41Z</updated>
    <published>2022-06-25T07:20:41Z</published>
    <link href="https://pype.dev/kvm-network-interface-via-nat-ubuntu-20/" rel="alternate" type="text/html"></link>
    <summary type="text">I have started using VMs more and more in my development workflow and it&#39;s impossible to work in a VM without an internet connection for me most of the time....</summary>
    <content type="html">&lt;p&gt;I have started using VMs more and more in my development workflow and it&amp;rsquo;s&#xA;impossible to work in a VM without an internet connection for me most of the&#xA;time. Setting up the KVM networking is kind of confusing to me and I&amp;rsquo;ve done it&#xA;two different ways. Here is how I set it up on my home desktop using NAT.&lt;/p&gt;&#xA;&lt;h1 id=&#34;credit&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Credit&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;First thing&amp;rsquo;s first: &lt;a href=&#34;https://computingforgeeks.com/managing-kvm-network-interfaces-in-linux/&#34;&gt;credit to this post&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;commands&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Commands&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;There was a &lt;code&gt;default&lt;/code&gt; network already made by virt-manager but my VM couldn&amp;rsquo;t connect over it at all&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;These commands got me up and running without even turning the VM off&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I went full on &lt;code&gt;sudo -i&lt;/code&gt; for this just to make it easier - be careful&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;dump-an-existint-network-config&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Dump an existint network config&lt;/span&gt; &lt;a href=&#34;#dump-an-existint-network-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;&lt;span class=&#34;c1&#34;&gt;# as root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virsh net-dumpxml default &amp;gt; br1.xml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim br1.xml&#xA;&lt;/span&gt;&lt;/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;edit-it&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Edit it&lt;/span&gt; &lt;a href=&#34;#edit-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was unsure what the ip range should be so I just stuck with the original blog.&#xA;The &lt;code&gt;default&lt;/code&gt; network had the CIDR block defined as &lt;code&gt;192.168.122.0/24&lt;/code&gt; which is different from my home network so I guess it&amp;rsquo;s fine?&lt;/p&gt;&#xA;&lt;pre class=&#34;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;&amp;lt;network&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;nt&#34;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;br1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/name&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;nt&#34;&gt;&amp;lt;forward&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;mode=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;nat&amp;#39;&lt;/span&gt;&lt;span class=&#34;nt&#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;nt&#34;&gt;&amp;lt;nat&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;nt&#34;&gt;&amp;lt;port&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;start=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;1024&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;end=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;65535&amp;#39;&lt;/span&gt;&lt;span class=&#34;nt&#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;nt&#34;&gt;&amp;lt;/nat&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;nt&#34;&gt;&amp;lt;/forward&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;nt&#34;&gt;&amp;lt;bridge&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;br1&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;stp=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;delay=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span class=&#34;nt&#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;nt&#34;&gt;&amp;lt;ip&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;address=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;192.168.10.1&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;netmask=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;255.255.255.0&amp;#39;&lt;/span&gt;&lt;span class=&#34;nt&#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;nt&#34;&gt;&amp;lt;dhcp&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;nt&#34;&gt;&amp;lt;range&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;start=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;192.168.10.10&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;end=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;192.168.10.100&amp;#39;&lt;/span&gt;&lt;span class=&#34;nt&#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;nt&#34;&gt;&amp;lt;/dhcp&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;nt&#34;&gt;&amp;lt;/ip&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;nt&#34;&gt;&amp;lt;/network&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;define-a-network&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Define a network&lt;/span&gt; &lt;a href=&#34;#define-a-network&#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;virsh net-define br1.xml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virsh net-autostart br1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then to check&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virsh net-list --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Name      State    Autostart   Persistent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--------------------------------------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; br1       active   yes         yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; default   active   yes         yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;uuid&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;UUID&lt;/span&gt; &lt;a href=&#34;#uuid&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;virsh net-uuid br1&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;magic&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Magic&lt;/span&gt; &lt;a href=&#34;#magic&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;virsh attach-interface --domain &amp;lt;NAME OF VM&amp;gt; --type bridge --source br1 --model virtio --config --live&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;My VM, &lt;code&gt;ubuntu20.04&lt;/code&gt; was running and immediately connected to the newly attached device!&lt;/p&gt;&#xA;&lt;h1 id=&#34;credit-again&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Credit again&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Visit the original post for more details - this serves more as as a quicker set of notes for future me&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>cheat on your man</title>
    <id>https://pype.dev/cheat-on-your-man/</id>
    <updated>2022-06-23T09:35:31Z</updated>
    <published>2022-06-23T09:35:31Z</published>
    <link href="https://pype.dev/cheat-on-your-man/" rel="alternate" type="text/html"></link>
    <summary type="text">can be a pain to read... and there&#39;s lots of alternatives out there and one I&#39;ve just started playing with is cheat</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;man&lt;/code&gt; can be a pain to read&amp;hellip; and there&amp;rsquo;s lots of alternatives out there and one I&amp;rsquo;ve just started playing with is &lt;a href=&#34;https://github.com/cheat/cheat&#34;&gt;cheat&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;man man&lt;/code&gt; will give you this plus a billion more lines of docs, which is useful when you need it&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MAN&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                                                                                                                       Manual pager utils                                                                                                                      MAN&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man - an interface to the on-line reference manuals&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SYNOPSIS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-C  file&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-d&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--warnings&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;warnings&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-R encoding&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-L locale&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-m system&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;-M path&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-S list&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-e extension&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-i&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;-I&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--regex&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;--wildcard&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--names-only&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-u&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--no-subpages&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-P pager&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-r prompt&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-7&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-E encoding&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--no-hyphenation&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&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;--no-justification&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-p string&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-T&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;device&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;browser&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-X&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dpi&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-Z&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;section&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; page&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;.section&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;       man -k &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;apropos options&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; regexp ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man -K &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-w&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;-W&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-S list&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-i&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;-I&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--regex&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;section&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; term ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man -f &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;whatis options&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; page ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man -l &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-C file&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-d&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--warnings&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;warnings&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-R encoding&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-L locale&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-P pager&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-r prompt&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-7&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-E encoding&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-p string&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-T&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;device&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;browser&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-X&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dpi&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-Z&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; file ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man -w&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;-W &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-C file&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-d&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; page ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man -c &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-C file&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-d&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; page ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-?V&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DESCRIPTION&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man is the system&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s manual pager.  Each page argument given to man is normally the name of a program, utility or &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;.  The manual page associated with each of these arguments is &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; found and displayed.  A section, &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; provided, will direct  man  to  look&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       only  in  that  section of the manual.  The default action is to search in all of the available sections following a pre-defined order &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1 n l 8 3 2 3posix 3pm 3perl 3am 5 4 9 6 7&amp;#34;&lt;/span&gt; by default, unless overridden by the SECTION directive in /etc/manpath.config&lt;span class=&#34;o&#34;&gt;)&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 to show only the first page found, even &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; page exists in several 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;       The table below shows the section numbers of the manual followed by the types of pages they contain.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;   Executable programs or shell commands&#xA;&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;2&lt;/span&gt;   System calls &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;functions provided by the kernel&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;3&lt;/span&gt;   Library calls &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;functions within program libraries&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;   Special files &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;usually found in /dev&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;5&lt;/span&gt;   File formats and conventions eg /etc/passwd&#xA;&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;6&lt;/span&gt;   Games&#xA;&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;7&lt;/span&gt;   Miscellaneous &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;including macro packages and conventions&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, e.g. man&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, groff&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;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;       &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;   System administration commands &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;usually only &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; root&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;9&lt;/span&gt;   Kernel routines &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Non standard&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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 manual page consists of several 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;       Conventional section names include NAME, SYNOPSIS, CONFIGURATION, DESCRIPTION, OPTIONS, EXIT STATUS, RETURN VALUE, ERRORS, ENVIRONMENT, FILES, VERSIONS, CONFORMING TO, NOTES, BUGS, EXAMPLE, AUTHORS, and SEE ALSO.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       The following conventions apply to the SYNOPSIS section and can be used as a guide in other 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;       bold text          &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; exactly as shown.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       italic text        replace with appropriate argument.&#xA;&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;-abc&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;             any or all arguments within &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; are optional.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       -a&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;-b              options delimited by &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cannot be used together.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       argument ...       argument is repeatable.&#xA;&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;expression&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ...   entire expression within &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; is repeatable.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       Exact rendering may vary depending on the output device.  For instance, man will usually not be able to render italics when running in a terminal, and will typically use underlined or coloured text instead.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       The &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; or &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; illustration is a pattern that should match all possible invocations.  In some cases it is advisable to illustrate several exclusive invocations as is shown in the SYNOPSIS section of this manual page.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EXAMPLES&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           Display the manual page &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; the item &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;program&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ls.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       man man.7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           Display the manual page &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; macro package man from section 7.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;but-what-if-you-don-t&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;But what if you don’t?&lt;/span&gt; &lt;a href=&#34;#but-what-if-you-don-t&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;cheat man&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;# To convert a man page to pdf:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;man -t bash &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ps2pdf - bash.pdf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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 view the ascii chart:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;man &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; ascii&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You get tiny examples to remind you of what you &lt;strong&gt;probably&lt;/strong&gt; are trying to do!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reset SSH key passphrase</title>
    <id>https://pype.dev/reset-ssh-key-passphrase/</id>
    <updated>2022-06-13T06:55:32Z</updated>
    <published>2022-06-13T06:55:32Z</published>
    <link href="https://pype.dev/reset-ssh-key-passphrase/" rel="alternate" type="text/html"></link>
    <summary type="text">I got into a pickle where I encrypted the ssh keys I use for my SSH connections on LAN, but then I couldn&#39;t run my ansible playbook on my server! ssh-keygen...</summary>
    <content type="html">&lt;p&gt;I got into a pickle where I encrypted the ssh keys I use for my SSH connections on LAN, but then I couldn&amp;rsquo;t run my ansible playbook on my server! ssh-keygen -p and leave the new passphrase blank saved my day (although password protected key files are safer!)&lt;/p&gt;&#xA;&lt;h1 id=&#34;tl-dr-just-reset-it-to-nothing&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TL;DR - just reset it to nothing&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;ssh-keygen -p&lt;/code&gt; will let you reset the passphrase on your ssh keys (good for you! yay security!)&lt;/p&gt;&#xA;&lt;p&gt;But I needed to remove the passphrase to quickly deploy an ansible playbook 🤓&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Add colored indicators to your dataframes html representation</title>
    <id>https://pype.dev/add-colored-indicators-to-your-dataframes-html-representation/</id>
    <updated>2022-06-04T06:12:33Z</updated>
    <published>2022-06-04T06:12:33Z</published>
    <link href="https://pype.dev/add-colored-indicators-to-your-dataframes-html-representation/" rel="alternate" type="text/html"></link>
    <summary type="text">Mike Driscoll recently tweeted about making colored out with pandas DataFrames and I just had to try it for myself</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://twitter.com/driscollis&#34;&gt;Mike Driscoll&lt;/a&gt; recently tweeted about making&#xA;colored out with pandas DataFrames and I just had to try it for myself&lt;/p&gt;&#xA;&lt;h1 id=&#34;use-case&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Use Case&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;First though&amp;hellip; why?&#xA;My biggest use case is a monitoring pipeline of mine&amp;hellip; The details aside, the&#xA;output of my pipeline is a dataframe where each row has information about a&#xA;failed pipeline that I need to go look into. I dump that result to a simle html&#xA;file that&amp;rsquo;s hosted on an internal site and the file is updated every couple of&#xA;hours. Adding some colored indicators automatically to the rows to help me&#xA;assess severity of each record would be a handy way to quickly get an&#xA;understanding the state of our pipelines.&lt;/p&gt;&#xA;&lt;h1 id=&#34;how&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;How?&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;The docs for the &lt;code&gt;applymap&lt;/code&gt; method state simply:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Apply a CSS-styling function elementwise.&#xA;&#xA;Updates the HTML representation with the result.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So we can write a function that returns &lt;code&gt;color: {color}&lt;/code&gt; based on the dataframe&#xA;values and when we drop that dataframe to html we&amp;rsquo;ll have some simple css&#xA;styling applied automagically!&lt;/p&gt;&#xA;&lt;p&gt;By default the function will be applied to all columns of the dataframe, but&#xA;that&amp;rsquo;s not useful if the columns are different types which is usually the case.&#xA;Luckily there is a &lt;code&gt;subset&lt;/code&gt; keyword to only apply to the columns you need!&lt;/p&gt;&#xA;&lt;p&gt;Consider my 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;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;mpg_color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&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;&#xA;&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;color&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&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; &lt;span class=&#34;k&#34;&gt;else&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;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;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;color: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&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;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;df&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;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;applymap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg_color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mpg&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;to_html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;color.html&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 want to quickly see if the &lt;code&gt;mpg&lt;/code&gt; is any good for the cars in the cars dataset&#xA;and I&amp;rsquo;ll define &amp;ldquo;good&amp;rdquo; as better than 21 mpg (not great I know but just for the&#xA;sake of discussion&amp;hellip;)&lt;/p&gt;&#xA;&lt;p&gt;The function returns an appropriate css string and after I &lt;code&gt;style.applymap&lt;/code&gt; on just the &lt;code&gt;mpg&lt;/code&gt; column we get this!&lt;/p&gt;&#xA;&lt;style type=&#34;text/css&#34;&gt;&#xA;#T_95e99_row0_col1, #T_95e99_row1_col1, #T_95e99_row2_col1, #T_95e99_row3_col1 {&#xA;  color: green;&#xA;}&#xA;#T_95e99_row4_col1 {&#xA;  color: red;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;table id=&#34;T_95e99&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th class=&#34;blank level0&#34; &gt;&amp;nbsp;&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col0&#34; class=&#34;col_heading level0 col0&#34; &gt;Unnamed: 0&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col1&#34; class=&#34;col_heading level0 col1&#34; &gt;mpg&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col2&#34; class=&#34;col_heading level0 col2&#34; &gt;cyl&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col3&#34; class=&#34;col_heading level0 col3&#34; &gt;disp&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col4&#34; class=&#34;col_heading level0 col4&#34; &gt;hp&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col5&#34; class=&#34;col_heading level0 col5&#34; &gt;drat&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col6&#34; class=&#34;col_heading level0 col6&#34; &gt;wt&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col7&#34; class=&#34;col_heading level0 col7&#34; &gt;qsec&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col8&#34; class=&#34;col_heading level0 col8&#34; &gt;vs&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col9&#34; class=&#34;col_heading level0 col9&#34; &gt;am&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col10&#34; class=&#34;col_heading level0 col10&#34; &gt;gear&lt;/th&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_col11&#34; class=&#34;col_heading level0 col11&#34; &gt;carb&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_row0&#34; class=&#34;row_heading level0 row0&#34; &gt;0&lt;/th&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col0&#34; class=&#34;data row0 col0&#34; &gt;Mazda RX4&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col1&#34; class=&#34;data row0 col1&#34; &gt;21.000000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col2&#34; class=&#34;data row0 col2&#34; &gt;6&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col3&#34; class=&#34;data row0 col3&#34; &gt;160.000000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col4&#34; class=&#34;data row0 col4&#34; &gt;110&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col5&#34; class=&#34;data row0 col5&#34; &gt;3.900000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col6&#34; class=&#34;data row0 col6&#34; &gt;2.620000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col7&#34; class=&#34;data row0 col7&#34; &gt;16.460000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col8&#34; class=&#34;data row0 col8&#34; &gt;0&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col9&#34; class=&#34;data row0 col9&#34; &gt;1&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col10&#34; class=&#34;data row0 col10&#34; &gt;4&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row0_col11&#34; class=&#34;data row0 col11&#34; &gt;4&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_row1&#34; class=&#34;row_heading level0 row1&#34; &gt;1&lt;/th&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col0&#34; class=&#34;data row1 col0&#34; &gt;Mazda RX4 Wag&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col1&#34; class=&#34;data row1 col1&#34; &gt;21.000000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col2&#34; class=&#34;data row1 col2&#34; &gt;6&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col3&#34; class=&#34;data row1 col3&#34; &gt;160.000000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col4&#34; class=&#34;data row1 col4&#34; &gt;110&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col5&#34; class=&#34;data row1 col5&#34; &gt;3.900000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col6&#34; class=&#34;data row1 col6&#34; &gt;2.875000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col7&#34; class=&#34;data row1 col7&#34; &gt;17.020000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col8&#34; class=&#34;data row1 col8&#34; &gt;0&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col9&#34; class=&#34;data row1 col9&#34; &gt;1&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col10&#34; class=&#34;data row1 col10&#34; &gt;4&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row1_col11&#34; class=&#34;data row1 col11&#34; &gt;4&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_row2&#34; class=&#34;row_heading level0 row2&#34; &gt;2&lt;/th&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col0&#34; class=&#34;data row2 col0&#34; &gt;Datsun 710&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col1&#34; class=&#34;data row2 col1&#34; &gt;22.800000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col2&#34; class=&#34;data row2 col2&#34; &gt;4&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col3&#34; class=&#34;data row2 col3&#34; &gt;108.000000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col4&#34; class=&#34;data row2 col4&#34; &gt;93&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col5&#34; class=&#34;data row2 col5&#34; &gt;3.850000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col6&#34; class=&#34;data row2 col6&#34; &gt;2.320000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col7&#34; class=&#34;data row2 col7&#34; &gt;18.610000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col8&#34; class=&#34;data row2 col8&#34; &gt;1&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col9&#34; class=&#34;data row2 col9&#34; &gt;1&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col10&#34; class=&#34;data row2 col10&#34; &gt;4&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row2_col11&#34; class=&#34;data row2 col11&#34; &gt;1&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_row3&#34; class=&#34;row_heading level0 row3&#34; &gt;3&lt;/th&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col0&#34; class=&#34;data row3 col0&#34; &gt;Hornet 4 Drive&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col1&#34; class=&#34;data row3 col1&#34; &gt;21.400000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col2&#34; class=&#34;data row3 col2&#34; &gt;6&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col3&#34; class=&#34;data row3 col3&#34; &gt;258.000000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col4&#34; class=&#34;data row3 col4&#34; &gt;110&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col5&#34; class=&#34;data row3 col5&#34; &gt;3.080000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col6&#34; class=&#34;data row3 col6&#34; &gt;3.215000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col7&#34; class=&#34;data row3 col7&#34; &gt;19.440000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col8&#34; class=&#34;data row3 col8&#34; &gt;1&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col9&#34; class=&#34;data row3 col9&#34; &gt;0&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col10&#34; class=&#34;data row3 col10&#34; &gt;3&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row3_col11&#34; class=&#34;data row3 col11&#34; &gt;1&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th id=&#34;T_95e99_level0_row4&#34; class=&#34;row_heading level0 row4&#34; &gt;4&lt;/th&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col0&#34; class=&#34;data row4 col0&#34; &gt;Hornet Sportabout&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col1&#34; class=&#34;data row4 col1&#34; &gt;18.700000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col2&#34; class=&#34;data row4 col2&#34; &gt;8&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col3&#34; class=&#34;data row4 col3&#34; &gt;360.000000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col4&#34; class=&#34;data row4 col4&#34; &gt;175&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col5&#34; class=&#34;data row4 col5&#34; &gt;3.150000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col6&#34; class=&#34;data row4 col6&#34; &gt;3.440000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col7&#34; class=&#34;data row4 col7&#34; &gt;17.020000&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col8&#34; class=&#34;data row4 col8&#34; &gt;0&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col9&#34; class=&#34;data row4 col9&#34; &gt;0&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col10&#34; class=&#34;data row4 col10&#34; &gt;3&lt;/td&gt;&#xA;      &lt;td id=&#34;T_95e99_row4_col11&#34; class=&#34;data row4 col11&#34; &gt;2&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Filtering emails with core utils</title>
    <id>https://pype.dev/filtering-emails-with-core-utils/</id>
    <updated>2022-05-30T06:09:27Z</updated>
    <published>2022-05-30T06:09:27Z</published>
    <link href="https://pype.dev/filtering-emails-with-core-utils/" 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;email1@me.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;somebody_else@gmail.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;/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;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;c1&#34;&gt;# pick multiple emails from list and combine into comma seperated array&lt;/span&gt;&#xA;&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;emails&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat .../emails &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/^\|$/&amp;#34;/g&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;paste -sd,&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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$emails&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Reindex Nextcloud After Adding Data via CLI</title>
    <id>https://pype.dev/reindex-nextcloud-after-adding-data-via-cli/</id>
    <updated>2022-05-29T15:34:33Z</updated>
    <published>2022-05-29T15:34:33Z</published>
    <link href="https://pype.dev/reindex-nextcloud-after-adding-data-via-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">I wrote here about setting up as the owner of any directories you want nextcloud to manage. However, I regularly struggle wtih permissions issues on my NAS...</summary>
    <content type="html">&lt;h1 id=&#34;my-nextcloud-woes&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Nextcloud woes&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I wrote &lt;a href=&#34;%22nextcloud-permissions-with-zfs-and-ansible-nas%22&#34;&gt;here&lt;/a&gt; about setting&#xA;up &lt;code&gt;www-data&lt;/code&gt; as the owner of any directories you want nextcloud to manage.&#xA;However, I regularly struggle wtih permissions issues on my NAS because of the&#xA;external storage app anyways so I&amp;rsquo;ve decided to just put our photos in the spot&#xA;Nextcloud would otherwise put them, and use this as healthy pressure on our&#xA;family to organize our photos and put the ones we care about with the rest of&#xA;our family media.&lt;/p&gt;&#xA;&lt;h1 id=&#34;migration&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Migration&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Because I had a ton of photos on the NAS anyways that I wanted moved over to&#xA;Nextcloud I just rsync&amp;rsquo;d the photos directory on my NAS to the user&amp;rsquo;s photos&#xA;directory in nextcloud but they weren&amp;rsquo;t showing up in the web UI!&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-fix&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Fix?&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;As www-data I needed to &lt;code&gt;php /var/www/nextcloud/occ files:scan --all&lt;/code&gt; inside my&#xA;nextcloud docker container AFTER moving a bunch of photos off my &amp;ldquo;NAS&amp;rdquo; into the&#xA;folder mounted to the nextcloud container as its data folder! Before I did this&#xA;they weren&amp;rsquo;t showing up in the web UI/&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>arr client config</title>
    <id>https://pype.dev/arr-download-client-config/</id>
    <updated>2022-05-28T13:29:28Z</updated>
    <published>2022-05-28T13:29:28Z</published>
    <link href="https://pype.dev/arr-download-client-config/" rel="alternate" type="text/html"></link>
    <summary type="text">TIL that when setting up download clients for radarr/sonarr/lidarr/readarr/bazarr/prowlarr that you can utilize internal DNS and instead of hardcoding an IP...</summary>
    <content type="html">&lt;p&gt;TIL that when setting up download clients for&#xA;radarr/sonarr/lidarr/readarr/bazarr/prowlarr that you can utilize internal DNS&#xA;and instead of hardcoding an IP address of your download client server, can use&#xA;just the CNAME record (ie. instead of 172.10.14.13 I can use&#xA;transmission.mydomain.com&amp;hellip; notice the lact of http(s)://&amp;hellip; adding that won&amp;rsquo;t&#xA;allow the connection to work/&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, you can use internal DNS to lookup the domain, not the subdomain,&#xA;and expose the port, like &lt;code&gt;mydomain.com:7878&lt;/code&gt; for sonarr. This was simpler to&#xA;maintain because I don&amp;rsquo;t change which ports an application exposes or utilizes&#xA;hardly ever, plus I don&amp;rsquo;t need to maintain CNAME records for every service!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Add space to your LVM on Ubuntu</title>
    <id>https://pype.dev/add-space-to-your-lvm-on-ubuntu/</id>
    <updated>2022-05-26T21:33:55Z</updated>
    <published>2022-05-26T21:33:55Z</published>
    <link href="https://pype.dev/add-space-to-your-lvm-on-ubuntu/" rel="alternate" type="text/html"></link>
    <summary type="text">I ran out of space on the SSD in my server when doing some file transfers but only 100GB was used of a 256 GB SSD?</summary>
    <content type="html">&lt;p&gt;I ran out of space on the SSD in my server when doing some file transfers but only 100GB was used of a 256 GB SSD?&lt;/p&gt;&#xA;&lt;h1 id=&#34;lvm&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;LVM&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;When installing Ubuntu live server the default option for how to partition the&#xA;disk (in my experience) has been to setup an LVM group that defaults to less&#xA;than the available space. Most recently I put Ubuntu server on a 256 GB SSD but&#xA;the main partition was formatted as an LVM group with 100GB of storage&amp;hellip; I&#xA;didn&amp;rsquo;t think anything of this even though I&amp;rsquo;m mostly used to EXT4.&lt;/p&gt;&#xA;&lt;p&gt;I think the reason for LVMs is performance, but in hindsight, I don&amp;rsquo;t really&#xA;care much about the performance differences, I really just want all my storage&#xA;that&amp;rsquo;s fast enough&lt;/p&gt;&#xA;&lt;h1 id=&#34;extending-the-lvm&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Extending the LVM&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A moment of googling brought me to Ubuntu&amp;rsquo;s wiki and I&#xA;learned that I can expand my LVM to the space I need&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo lvdisplay&lt;/code&gt; and &lt;code&gt;sudo pvdisplay&lt;/code&gt; show detailed views of the logical volumes and physical volumes respectively.&lt;/p&gt;&#xA;&lt;p&gt;Take a look at those and find the volume you need to extend. For me I found 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;  --- Logical volume ---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  LV Path                /dev/ubuntu-vg/ubuntu-lv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  LV Name                ubuntu-lv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  VG Name                ubuntu-vg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  LV Write Access        read/write&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  LV Status              available&#xA;&lt;/span&gt;&lt;/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;There&amp;rsquo;s more that you&amp;rsquo;ll see but this is what&amp;rsquo;s relevant - I need to extend the&#xA;&lt;code&gt;ubuntu-lv&lt;/code&gt; logical volume in the &lt;code&gt;ubuntu-vg&lt;/code&gt; volume group.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo lvextend -L +50g ubuntu-vg/ubuntu-lv&lt;/code&gt; gives me 50 more GB of storage which should be enough for at least tonight 🤓&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wiki.ubuntu.com/Lvm&#34;&gt;RTFM&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Local DNS with Pi-hole</title>
    <id>https://pype.dev/local-dns-with-pi-hole/</id>
    <updated>2022-05-23T09:40:59Z</updated>
    <published>2022-05-23T09:40:59Z</published>
    <link href="https://pype.dev/local-dns-with-pi-hole/" rel="alternate" type="text/html"></link>
    <summary type="text">Tailscale is way easier than this... I was doing this local DNS overwrite in Pi-hole before running tailscale and I haven&#39;t just totally &#34;kicked the habit&#34;...</summary>
    <content type="html">&lt;h2 id=&#34;spoilers&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Spoilers&lt;/span&gt; &lt;a href=&#34;#spoilers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Tailscale is way easier than this&amp;hellip; I was doing this local DNS overwrite in&#xA;Pi-hole before running tailscale and I haven&amp;rsquo;t just totally &amp;ldquo;kicked the habit&amp;rdquo;&#xA;yet, so for anyone NOT running tailcale, but wanting local HTTPS and using&#xA;Pi-Hole this method would work fine&lt;/p&gt;&#xA;&lt;h2 id=&#34;intro&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Intro&lt;/span&gt; &lt;a href=&#34;#intro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use &lt;a href=&#34;https://pi-hole.net/&#34;&gt;pihole&lt;/a&gt; as my DNS server at home. I run unbound as&#xA;well and have a pretty standard setup from their docs.&lt;/p&gt;&#xA;&lt;p&gt;Pi-hole does 2 primary things for me:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;dns sink-hold, the primary use case I believe&lt;/li&gt;&#xA;&lt;li&gt;local SSL for all my self-hosted apps&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;caveat&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Caveat&lt;/span&gt; &lt;a href=&#34;#caveat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I know for sure there are better ways to do this, but there&amp;rsquo;s also worse&#xA;ones&amp;hellip; so for now this has been my pattern, and it&amp;rsquo;s only bitten me in the&#xA;butt when I&amp;rsquo;ve forgotten to add the final CNAME record&amp;hellip; which&amp;rsquo;ll make sense&#xA;in a sec.&lt;/p&gt;&#xA;&lt;h2 id=&#34;process&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Process&lt;/span&gt; &lt;a href=&#34;#process&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s really quite simple - in pihole I have a DNS record for my domain pointing&#xA;to my primary server&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250706114501_8c34a31e.png&#34; alt=&#34;20250706114501_8c34a31e.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Then for each service that I want to keep everything resolved locally for I add a CNAME&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/20250706114557_916fb4c4.png&#34; alt=&#34;20250706114557_916fb4c4.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;With DNS resolving this way for clients using my pihole, the networking all&#xA;stays local and I still get HTTPS for my wildcard cert in cloudflare&lt;/p&gt;&#xA;&lt;h2 id=&#34;why&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Why?&lt;/span&gt; &lt;a href=&#34;#why&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The reasons I do this are simple:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve been doing it since I started homelabbing and it started out of misunderstanding of how networking works &lt;em&gt;at all&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;I use a home dashboard with https:// links, and it&amp;rsquo;s nice to just use that&#xA;same dashbaord publically or at home. With local DNS resolution then I can&#xA;whitelist some services, but conveniently access over the public url with https&#xA;but routing such that my whitelist let&amp;rsquo;s me in when it wouldn&amp;rsquo;t if I tried to&#xA;access the service from an external client&lt;/li&gt;&#xA;&lt;li&gt;it&amp;rsquo;s my homelab - I can do what I want&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;it-s-too-complicated&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;It’s too complicated&lt;/span&gt; &lt;a href=&#34;#it-s-too-complicated&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Honestly, as simple as this is, it is tedious and kind of complicated&amp;hellip;&#xA;There&amp;rsquo;s options to make it better&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;script any service deployment to update the pihole /etc/host file&lt;/li&gt;&#xA;&lt;li&gt;just use tailscale&amp;hellip;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Netplan change from Focal to Jammy</title>
    <id>https://pype.dev/netplan-change-from-focal-to-jammy/</id>
    <updated>2022-05-22T13:23:17Z</updated>
    <published>2022-05-22T13:23:17Z</published>
    <link href="https://pype.dev/netplan-change-from-focal-to-jammy/" rel="alternate" type="text/html"></link>
    <summary type="text">I am revamping my home server and bumped myself early up to Jammy Jellyfish... however to my peril I reused my netplan config and after hitting my server...</summary>
    <content type="html">&lt;p&gt;I am revamping my home server and bumped myself early up to Jammy Jellyfish&amp;hellip;&#xA;however to my peril I reused my netplan config and after hitting my server with&#xA;the &amp;lsquo;ol &lt;code&gt;netplan apply&lt;/code&gt; I lost connection&amp;hellip;&#xA;DNS still seemed to kinda work externally, but internally nothing was up&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Turns out Netplan got a little change in how to express the &lt;code&gt;gateway&lt;/code&gt; key in the netplan config!&lt;/p&gt;&#xA;&lt;p&gt;Old Ubuntu 20.04 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;nt&#34;&gt;network&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;m&#34;&gt;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;ethernets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;enp0s4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addresses&lt;/span&gt;&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;192.168.1&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.{Static IP}/24]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gateway4&lt;/span&gt;&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;192.168.1.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# &amp;lt;-- This 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;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;nameservers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addresses&lt;/span&gt;&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;192.168.1.1&lt;/span&gt;&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.1.1.1&lt;/span&gt;&lt;span class=&#34;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;New jammin way for Jammy Jellyfish (&lt;strong&gt;at least that worked for me&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;network&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;m&#34;&gt;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;ethernets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;enp0s4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addresses&lt;/span&gt;&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;192.168.1&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.{Static IP}/24]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;routes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;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;via&lt;/span&gt;&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;192.168.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;nameservers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addresses&lt;/span&gt;&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;192.168.1.1&lt;/span&gt;&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.1.1.1&lt;/span&gt;&lt;span class=&#34;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;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Nextcloud permissions with ZFS and Ansible-NAS</title>
    <id>https://pype.dev/nextcloud-permissions-with-zfs-and-ansible-nas/</id>
    <updated>2022-05-19T13:55:20Z</updated>
    <published>2022-05-19T13:55:20Z</published>
    <link href="https://pype.dev/nextcloud-permissions-with-zfs-and-ansible-nas/" rel="alternate" type="text/html"></link>
    <summary type="text">As the nextcloud docs say... if you want to write to an external volume that location has to be writeable by the user/group on the host system... so if that...</summary>
    <content type="html">&lt;h1 id=&#34;tl-dr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TL;DR&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;As the nextcloud docs say&amp;hellip; if you want to write to an external volume that&#xA;location has to be writeable by the user/group &lt;code&gt;www-data&lt;/code&gt; on the host system&amp;hellip;&#xA;so if that makes sense to you then this TIL probably isn&amp;rsquo;t a ton of value.. if&#xA;not however, read on :)&lt;/p&gt;&#xA;&lt;h1 id=&#34;case-study&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Case Study&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;You want to self-host your own cloud and use a smart file system for convenience&amp;hellip;&#xA;Nextcloud and ZFS are pretty common goto answers for each of those problems.&lt;/p&gt;&#xA;&lt;p&gt;My home NAS is built on ZFS and among other things I have a &lt;code&gt;zpool&lt;/code&gt; named&#xA;&lt;code&gt;tank&lt;/code&gt; and nested in there is a &lt;code&gt;tank/nas&lt;/code&gt; dataset with several child zfs&#xA;datasets under that.&lt;/p&gt;&#xA;&lt;p&gt;I want to use nextcloud mainly for auto-uploading photos from my wife&amp;rsquo;s and my phones for automatic backups.&#xA;The issue is that the nextcloud application (I run in Docker) is fixed as the&#xA;&lt;code&gt;www-data&lt;/code&gt; user and so any volume/folder that you want nextcloud to write to&#xA;needs to be permissioned such that &lt;code&gt;www-data&lt;/code&gt; owns it&amp;hellip; but I don&amp;rsquo;t want&#xA;&lt;code&gt;www-data&lt;/code&gt; to own everything in my NAS&amp;hellip; so what&amp;rsquo;s a girl to do?&lt;/p&gt;&#xA;&lt;h1 id=&#34;solution&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Solution&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Well, one way to go is to just utilize docker volumes, write the data in the&#xA;container to &lt;code&gt;/var/www/html&lt;/code&gt; and let that be the place your data backsup to.&lt;/p&gt;&#xA;&lt;p&gt;I still wanted nextcloud to automatically write right to my NAS so I created a&#xA;&lt;code&gt;nextcloud-upload&lt;/code&gt; directory inside of &lt;code&gt;tank/nas/media/photos&lt;/code&gt; (photos cause&#xA;that&amp;rsquo;s all that gets automatically uploaded)&lt;/p&gt;&#xA;&lt;p&gt;Then I &lt;code&gt;chown -R www-data:www-data /tank/nas/media/photos/nextcloud-upload&lt;/code&gt; so&#xA;that just that sub-folder is owned by &lt;code&gt;www-data&lt;/code&gt;. Now everyone&amp;rsquo;s happy!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>See ZFS snapshot disk usage</title>
    <id>https://pype.dev/see-zfs-snapshot-disk-usage/</id>
    <updated>2022-05-19T06:05:23Z</updated>
    <published>2022-05-19T06:05:23Z</published>
    <link href="https://pype.dev/see-zfs-snapshot-disk-usage/" rel="alternate" type="text/html"></link>
    <summary type="text">As I was cleaning up my NAS recently I noticed that I ran out of storage even though my disk usage looked pretty low... turns out I was keeping a mega-ton of...</summary>
    <content type="html">&lt;p&gt;As I was cleaning up my NAS recently I noticed that I ran out of storage even&#xA;though my disk usage looked pretty low&amp;hellip; turns out I was keeping a mega-ton of&#xA;ZFS snapshots and due to my own ignorance at the time didn&amp;rsquo;t realize the&#xA;storage cost of this!&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;zfs list-o space tank/home&lt;/code&gt; will show the disk usage of the dataset and snapshots in &lt;code&gt;tank/home&lt;/code&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Remove ZFS Dataset Specific Snapshots</title>
    <id>https://pype.dev/remove-zfs-dataset-specific-snapshots/</id>
    <updated>2022-05-19T05:49:16Z</updated>
    <published>2022-05-19T05:49:16Z</published>
    <link href="https://pype.dev/remove-zfs-dataset-specific-snapshots/" rel="alternate" type="text/html"></link>
    <summary type="text">I started my homelab journey being super naive about ZFS and how to manage the filesystem... that bit me in the butt when transfering a ton of files out of...</summary>
    <content type="html">&lt;p&gt;I started my homelab journey being super naive about ZFS and how to manage the&#xA;filesystem&amp;hellip; that bit me in the butt when transfering a ton of files out of&#xA;folders and into datasets because ZFS is copy on write so I was essentially&#xA;duplicating my storage until I got a hair smarter about removing files after&#xA;they&amp;rsquo;re moved (rsync &amp;ndash;remove-source-file ftw). But I had a ton of snapshots of&#xA;child datasets with a ton of data that I just never will need, so I learned&#xA;&lt;code&gt;zfs list -H -o name -t snapshot tank/dataset1/dataset2&lt;/code&gt; will list just the&#xA;snapshots for dataset2 and if you pipe that into &lt;code&gt;xargs -n1 zfs destroy&lt;/code&gt; then&#xA;you have a way to clear out some snapshots you don&amp;rsquo;t need!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Plug Snapshot!</title>
    <id>https://pype.dev/plug-snapshot/</id>
    <updated>2022-05-17T15:45:49Z</updated>
    <published>2022-05-17T15:45:49Z</published>
    <link href="https://pype.dev/plug-snapshot/" rel="alternate" type="text/html"></link>
    <summary type="text">:PlugSnapshot, :w ~/dotfiles/nvim/snapshot.vim... keep your config safe with git!</summary>
    <content type="html">&lt;p&gt;:PlugSnapshot, :w ~/dotfiles/nvim/snapshot.vim&amp;hellip; keep your config safe with git!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Filepath Completion in Neovim</title>
    <id>https://pype.dev/filepath-completion-in-neovim/</id>
    <updated>2022-05-17T14:03:27Z</updated>
    <published>2022-05-17T14:03:27Z</published>
    <link href="https://pype.dev/filepath-completion-in-neovim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve had in my plugins for ever but didn&#39;t notice until recently that I wasn&#39;t getting any filepath completion in vim!</summary>
    <content type="html">&lt;p&gt;I&amp;rsquo;ve had &lt;code&gt;Plug &#39;hrsh7th/cmp-path&#39;&lt;/code&gt; in my plugins for ever but didn&amp;rsquo;t notice&#xA;until recently that I wasn&amp;rsquo;t getting any filepath completion in vim!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fuller setup instructions below the TLDR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;tl-dr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TL;DR&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Turns out I need to not be a dope and configure nvim-cmp to actually use it&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;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;c1&#34;&gt;-- removed rest of setup - see the rest in my dotfiles&lt;/span&gt;&#xA;&lt;/span&gt;&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;n&#34;&gt;cmp.config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;  &lt;span class=&#34;c1&#34;&gt;-- This needs to be 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;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;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;h1 id=&#34;my-setup&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Setup&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;For the sake of completeness here is how I currently (May 2022) configure completion in Neovim usin &lt;code&gt;nvim-cmp&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;plugins&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Plugins&lt;/span&gt; &lt;a href=&#34;#plugins&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I keep all my plugins in &lt;code&gt;plugins.vim&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;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;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;plug_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;&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;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;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-buffer&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-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;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-cmdline&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/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;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; For ultisnips 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;p&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;&amp;#34; Plug &amp;#39;SirVer/ultisnips&amp;#39; --&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;c&#34;&gt;&amp;#34; Plug &amp;#39;quangnguyen30192/cmp-nvim-ultisnips&amp;#39; --&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;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;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;vim-settings&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Vim Settings&lt;/span&gt; &lt;a href=&#34;#vim-settings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My vim settings are also kept in their own file, &lt;code&gt;settings.vim&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;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;completeopt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;menuone&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;noselect&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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-cmp-configuration&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;nvim-cmp configuration&lt;/span&gt; &lt;a href=&#34;#nvim-cmp-configuration&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have a &lt;code&gt;cmp.lua&lt;/code&gt; file that gets sourced in &lt;code&gt;init.lua&lt;/code&gt; (file structure explained below) for configuring cmp.&lt;/p&gt;&#xA;&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;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;c1&#34;&gt;-- REQUIRED - you must specify a snippet 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;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 `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;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;UltiSnips#Anon&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;    &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;window&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;completion&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;window.bordered&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&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;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;Tab&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;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;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;s1&#34;&gt;&amp;#39;s&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;n&#34;&gt;cmp.config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;ultisnips&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;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;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;p&gt;The &lt;code&gt;sources&lt;/code&gt; section is what was key for this post&amp;hellip;&lt;/p&gt;&#xA;&lt;h1 id=&#34;piecing-it-together&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Piecing it together!&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;My &lt;code&gt;init.vim&lt;/code&gt; sources plugins and then settings and then finally calls &lt;code&gt;init.lua&lt;/code&gt;.&#xA;&lt;code&gt;init.lua&lt;/code&gt; sources my &lt;code&gt;cmp.lua&lt;/code&gt; file and BANG! auto-completion.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-sources&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;More sources&lt;/span&gt; &lt;a href=&#34;#more-sources&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;hrsh7th&amp;rsquo;s wiki for &lt;code&gt;nvim-cmp&lt;/code&gt; is &lt;a href=&#34;https://github.com/hrsh7th/nvim-cmp/wiki/List-of-sources&#34;&gt;here&lt;/a&gt; and has example configs as well as a list of sources&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t forget to configure and not just install!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/nicpayne713/dotfiles&#34;&gt;my dotfiles&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Plug-Snapshot-To-Save-Your-Life</title>
    <id>https://pype.dev/plug-snapshot-to-save-your-life/</id>
    <updated>2022-05-13T00:00:00Z</updated>
    <published>2022-05-13T00:00:00Z</published>
    <link href="https://pype.dev/plug-snapshot-to-save-your-life/" rel="alternate" type="text/html"></link>
    <summary type="text">If you use vim-plug for managing your vim plugins, do yourself a favor and snapshot your plugins before upgrading!</summary>
    <content type="html">&lt;p&gt;If you use vim-plug for managing your vim plugins, do yourself a favor and snapshot your plugins before upgrading!&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;:PlugSnapshot&lt;/code&gt;  creates a vim.snapshot file that you can use to restore your plugin versions with &lt;code&gt;vim -S snapshot.vim&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The snapshot file 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;go&#34;&gt;❯ cat snapshot.vim&#xA;&lt;/span&gt;&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;#34; Generated by vim-plug&#xA;&lt;/span&gt;&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;#34; Tue 17 May 2022 03:44:29 PM CDT&#xA;&lt;/span&gt;&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;#34; :source this file in vim to restore the snapshot&#xA;&lt;/span&gt;&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;#34; or execute: vim -S snapshot.vim&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&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;silent! let g:plugs[&amp;#39;Telegraph.nvim&amp;#39;].commit = &amp;#39;92e472f4e83acd60eb3766168e66d02718bfefe0&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;go&#34;&gt;silent! let g:plugs[&amp;#39;TrueZen.nvim&amp;#39;].commit = &amp;#39;508b977d71650da5c9243698614a9a1416f116d4&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;go&#34;&gt;silent! let g:plugs[&amp;#39;ariake-vim-colors&amp;#39;].commit = &amp;#39;9fb35f1255e475631c9df24ecc5485a40360cc7b&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;go&#34;&gt;silent! let g:plugs[&amp;#39;auto-pairs&amp;#39;].commit = &amp;#39;39f06b873a8449af8ff6a3eee716d3da14d63a76&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;go&#34;&gt;silent! let g:plugs[&amp;#39;bufutils.vim&amp;#39;].commit = &amp;#39;4634feb1312fd73fab66cfaa860e7af3abde935b&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;go&#34;&gt;silent! let g:plugs[&amp;#39;cmp-buffer&amp;#39;].commit = &amp;#39;12463cfcd9b14052f9effccbf1d84caa7a2d57f0&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;go&#34;&gt;silent! let g:plugs[&amp;#39;cmp-cmdline&amp;#39;].commit = &amp;#39;c36ca4bc1dedb12b4ba6546b96c43896fd6e7252&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;go&#34;&gt;silent! let g:plugs[&amp;#39;cmp-nvim-lsp&amp;#39;].commit = &amp;#39;e6b5feb2e6560b61f31c756fb9231a0d7b10c73d&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;go&#34;&gt;silent! let g:plugs[&amp;#39;cmp-nvim-ultisnips&amp;#39;].commit = &amp;#39;21f02b62deb409ce69928a23406076bd0043ddbc&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;go&#34;&gt;silent! let g:plugs[&amp;#39;cmp-path&amp;#39;].commit = &amp;#39;466b6b8270f7ba89abd59f402c73f63c7331ff6e&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;go&#34;&gt;silent! let g:plugs[&amp;#39;cmp-spell&amp;#39;].commit = &amp;#39;5602f1a0de7831f8dad5b0c6db45328fbd539971&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;go&#34;&gt;silent! let g:plugs[&amp;#39;compe-tabnine&amp;#39;].commit = &amp;#39;33e4af509c27da9ef2c9c3002c01e3ec031797d4&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;go&#34;&gt;silent! let g:plugs[&amp;#39;coverage-highlight.vim&amp;#39;].commit = &amp;#39;864e03679ea4168661501246147893cc82020917&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;go&#34;&gt;silent! let g:plugs[&amp;#39;diffurcate.vim&amp;#39;].commit = &amp;#39;b804675072220ff7c7ebcd24a028aa4aa35f09cc&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;go&#34;&gt;silent! let g:plugs[&amp;#39;fzf&amp;#39;].commit = &amp;#39;6dcf5c3d7d6c321b17e6a5673f1533d6e8350462&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;go&#34;&gt;silent! let g:plugs[&amp;#39;fzf.vim&amp;#39;].commit = &amp;#39;d5f1f8641b24c0fd5b10a299824362a2a1b20ae0&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;go&#34;&gt;silent! let g:plugs[&amp;#39;git-blame.vim&amp;#39;].commit = &amp;#39;9d144b7bed5d8f1c9259551768b7f3b3d1294917&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;go&#34;&gt;silent! let g:plugs[&amp;#39;harpoon&amp;#39;].commit = &amp;#39;d3d3d22b6207f46f8ca64946f4d781e975aec0fc&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;go&#34;&gt;silent! let g:plugs[&amp;#39;instant.nvim&amp;#39;].commit = &amp;#39;c02d72267b12130609b7ad39b76cf7f4a3bc9554&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;go&#34;&gt;silent! let g:plugs[&amp;#39;lsp-colors.nvim&amp;#39;].commit = &amp;#39;517fe3ab6b63f9907b093bc9443ef06b56f804f3&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;go&#34;&gt;silent! let g:plugs[&amp;#39;lsp_extensions.nvim&amp;#39;].commit = &amp;#39;4011f4aec61ba59c734f5dbf52e91f258b99d985&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;go&#34;&gt;silent! let g:plugs[&amp;#39;lspkind-nvim&amp;#39;].commit = &amp;#39;57e5b5dfbe991151b07d272a06e365a77cc3d0e7&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;go&#34;&gt;silent! let g:plugs[&amp;#39;lspsaga.nvim&amp;#39;].commit = &amp;#39;8dde091a61ab07f639baaa82b456d3508d0aa7e8&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;go&#34;&gt;silent! let g:plugs[&amp;#39;neoformat&amp;#39;].commit = &amp;#39;409ebbba9f4b568ea87ab4f2de90a645cf5d000a&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;go&#34;&gt;silent! let g:plugs[&amp;#39;neovim-fuzzy&amp;#39;].commit = &amp;#39;0bef4e1a81c65fc05d31380dd74454bd67733837&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nerdtree&amp;#39;].commit = &amp;#39;eed488b1cd1867bd25f19f90e10440c5cc7d6424&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nerdtree-visual-selection&amp;#39;].commit = &amp;#39;05427635ff053a2c542fcf8d7c3744c72575e76c&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nvim-cmp&amp;#39;].commit = &amp;#39;a226b6a4ff72e5e809ed17734318233fb25c87f3&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nvim-compe&amp;#39;].commit = &amp;#39;d186d739c54823e0b010feb205c6f97792322c08&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nvim-lspconfig&amp;#39;].commit = &amp;#39;9ff2a06cebd4c8c3af5259d713959ab310125bec&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nvim-lspinstall&amp;#39;].commit = &amp;#39;79ec2425d6b39cdcb69d379f3e56847f49be73eb&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nvim-treesitter&amp;#39;].commit = &amp;#39;10d57b3ec14cac0b6b759e1eb5594617b8a7e883&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nvim-treesitter-textobjects&amp;#39;].commit = &amp;#39;094e8ad3cc839e825f8dcc91352837653e365a8f&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;go&#34;&gt;silent! let g:plugs[&amp;#39;nvim-web-devicons&amp;#39;].commit = &amp;#39;bdd43421437f2ef037e0dafeaaaa62b31d35ef2f&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;go&#34;&gt;silent! let g:plugs[&amp;#39;playground&amp;#39;].commit = &amp;#39;71b00a3c665298e5155ad64a9020135808d4e3e8&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;go&#34;&gt;silent! let g:plugs[&amp;#39;plenary.nvim&amp;#39;].commit = &amp;#39;25b3475b97f241e6f76249747bc209e70c5d2ec8&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;go&#34;&gt;silent! let g:plugs[&amp;#39;popup.nvim&amp;#39;].commit = &amp;#39;b7404d35d5d3548a82149238289fa71f7f6de4ac&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;go&#34;&gt;silent! let g:plugs[&amp;#39;syntastic&amp;#39;].commit = &amp;#39;b7f4f71539038d33f173bfa72631737da049575a&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;go&#34;&gt;silent! let g:plugs[&amp;#39;tabular&amp;#39;].commit = &amp;#39;339091ac4dd1f17e225fe7d57b48aff55f99b23a&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;go&#34;&gt;silent! let g:plugs[&amp;#39;targets.vim&amp;#39;].commit = &amp;#39;8d6ff2984cdfaebe5b7a6eee8f226a6dd1226f2d&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;go&#34;&gt;silent! let g:plugs[&amp;#39;telescope-fzy-native.nvim&amp;#39;].commit = &amp;#39;7b3d2528102f858036627a68821ccf5fc1d78ce4&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;go&#34;&gt;silent! let g:plugs[&amp;#39;telescope.nvim&amp;#39;].commit = &amp;#39;39b12d84e86f5054e2ed98829b367598ae53ab41&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;go&#34;&gt;silent! let g:plugs[&amp;#39;termopen.vim&amp;#39;].commit = &amp;#39;3194a991a18a9be2fd9fcf8c4c55fe990c04b2bd&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;go&#34;&gt;silent! let g:plugs[&amp;#39;tokyonight.nvim&amp;#39;].commit = &amp;#39;8223c970677e4d88c9b6b6d81bda23daf11062bb&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;go&#34;&gt;silent! let g:plugs[&amp;#39;trouble.nvim&amp;#39;].commit = &amp;#39;da61737d860ddc12f78e638152834487eabf0ee5&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;go&#34;&gt;silent! let g:plugs[&amp;#39;ultisnips&amp;#39;].commit = &amp;#39;f5ccf0977c611ffd774ca180774959301baaffad&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;go&#34;&gt;silent! let g:plugs[&amp;#39;undotree&amp;#39;].commit = &amp;#39;08e259be24d4476c1ee745dc735eefd44f90efdc&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-airline&amp;#39;].commit = &amp;#39;c4655701431a9c79704c827fd88a4783ec946879&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-airline-themes&amp;#39;].commit = &amp;#39;97cf3e6e638f936187d5f6e9b5eb1bdf0a4df256&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-be-good&amp;#39;].commit = &amp;#39;bc499a06c14c729b22a6cc7e730a9fbc44d4e737&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-commentary&amp;#39;].commit = &amp;#39;3654775824337f466109f00eaf6759760f65be34&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-devicons&amp;#39;].commit = &amp;#39;a2258658661e42dd4cdba4958805dbad1fe29ef4&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-dispatch&amp;#39;].commit = &amp;#39;00e77d90452e3c710014b26dc61ea919bc895e92&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-flake8&amp;#39;].commit = &amp;#39;a99054ef98e8fdaefa1315af4649138bcadbfdf7&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-floaterm&amp;#39;].commit = &amp;#39;ab7876f86c05c1935eb23a193f4f276132902ac1&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-fugitive&amp;#39;].commit = &amp;#39;f529acef74b4266d94f22414c60b4a8930c1e0f3&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-gitbranch&amp;#39;].commit = &amp;#39;1a8ba866f3eaf0194783b9f8573339d6ede8f1ed&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-indent-object&amp;#39;].commit = &amp;#39;5c5b24c959478929b54a9e831a8e2e651a465965&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-nerdtree-syntax-highlight&amp;#39;].commit = &amp;#39;5178ee4d7f4e7761187df30bb709f703d91df18a&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-polyglot&amp;#39;].commit = &amp;#39;38282d58387cff48ac203f6912c05e4c8686141b&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-pydocstring&amp;#39;].commit = &amp;#39;f6e3c52bfaf4b4f76dab4d84e75b94199d5f3b9c&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-quicklink&amp;#39;].commit = &amp;#39;021167741588555501594e1fc31f130b16acefa0&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-repeat&amp;#39;].commit = &amp;#39;24afe922e6a05891756ecf331f39a1f6743d3d5a&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-signify&amp;#39;].commit = &amp;#39;69498f6d49f3eeac06870012416dd9bf867b84f3&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-sneak&amp;#39;].commit = &amp;#39;94c2de47ab301d476a2baec9ffda07367046bec9&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-snippets&amp;#39;].commit = &amp;#39;6f270bb2d26c38765ff2243e9337c65f8a96a28b&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-startify&amp;#39;].commit = &amp;#39;81e36c352a8deea54df5ec1e2f4348685569bed2&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-surround&amp;#39;].commit = &amp;#39;bf3480dc9ae7bea34c78fbba4c65b4548b5b1fea&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-test&amp;#39;].commit = &amp;#39;2240d7a4b868cb594b7d83544e1b6db4df806e5e&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-tmux-runner&amp;#39;].commit = &amp;#39;54767911fd5e6e2d8e493847149e315ac2e6531a&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-ultest&amp;#39;].commit = &amp;#39;6978fd32e3ca2c1c5591884eea0d57a7ee43d212&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vim-visualstar&amp;#39;].commit = &amp;#39;a18cd0e7a03311ac709595c1d261ed44b45c9098&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;go&#34;&gt;silent! let g:plugs[&amp;#39;vimtex&amp;#39;].commit = &amp;#39;dfaca59bbbf0079ab1b4f159337ae7f17d1b5289&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;go&#34;&gt;silent! let g:plugs[&amp;#39;which-key.nvim&amp;#39;].commit = &amp;#39;bd4411a2ed4dd8bb69c125e339d837028a6eea71&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;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;go&#34;&gt;PlugUpdate!&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Dataframe-To-Styled-Html</title>
    <id>https://pype.dev/dataframe-to-styled-html/</id>
    <updated>2022-05-07T00:00:00Z</updated>
    <published>2022-05-07T00:00:00Z</published>
    <link href="https://pype.dev/dataframe-to-styled-html/" rel="alternate" type="text/html"></link>
    <summary type="text">I wrote up a little on exporting DataFrames to markdown and html here</summary>
    <content type="html">&lt;p&gt;I wrote up a little on exporting DataFrames to markdown and html &lt;a href=&#34;/dataframe-to-markdown&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But I&amp;rsquo;ve been playing with a web app for with lists and while I&amp;rsquo;m toying around I learned you can actually give your tables some style with some simple css classes!&lt;/p&gt;&#xA;&lt;h1 id=&#34;to-html&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;To HTML&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Reminder that if you have a dataframe, &lt;code&gt;df&lt;/code&gt;, you can &lt;code&gt;df.to_html()&lt;/code&gt; to get an HTML table of your dataframe.&lt;/p&gt;&#xA;&lt;p&gt;Well you can pass some &lt;code&gt;classes&lt;/code&gt; to make it look super nice!&lt;/p&gt;&#xA;&lt;h1 id=&#34;classes-and-css&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Classes and CSS&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t know anything really about CSS so I won&amp;rsquo;t pretend otherwise, but as I was learning about bootstrap that&amp;rsquo;s where I stumbled upon this&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;There are several classes you can pass but I found really good luck with &lt;code&gt;table-bordered&lt;/code&gt; and &lt;code&gt;table-dark&lt;/code&gt; for my use case&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;df.to_html(classes=[&amp;quot;table table-bordered table-dark&amp;quot;])&lt;/code&gt;&lt;/p&gt;&#xA;&lt;table border=&#34;1&#34; class=&#34;dataframe table table-bordered table-dark&#34;&gt;  &lt;thead&gt;&#xA;&lt;tr style=&#34;text-align: right;&#34;&gt;      &lt;th&gt;Unnamed: 0&lt;/th&gt;      &lt;th&gt;mpg&lt;/th&gt;&#xA;&lt;th&gt;cyl&lt;/th&gt;      &lt;th&gt;disp&lt;/th&gt;      &lt;th&gt;hp&lt;/th&gt;      &lt;th&gt;drat&lt;/th&gt;&#xA;&lt;th&gt;wt&lt;/th&gt;      &lt;th&gt;qsec&lt;/th&gt;      &lt;th&gt;vs&lt;/th&gt;      &lt;th&gt;am&lt;/th&gt;&#xA;&lt;th&gt;gear&lt;/th&gt;      &lt;th&gt;carb&lt;/th&gt;    &lt;/tr&gt;  &lt;/thead&gt;  &lt;tbody&gt;    &lt;tr&gt;&#xA;&lt;td&gt;Mazda RX4&lt;/td&gt;      &lt;td&gt;21.0&lt;/td&gt;      &lt;td&gt;6&lt;/td&gt;      &lt;td&gt;160.0&lt;/td&gt;&#xA;&lt;td&gt;110&lt;/td&gt;      &lt;td&gt;3.90&lt;/td&gt;      &lt;td&gt;2.620&lt;/td&gt;      &lt;td&gt;16.46&lt;/td&gt;&#xA;&lt;td&gt;0&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;&#xA;&lt;td&gt;Mazda RX4 Wag&lt;/td&gt;      &lt;td&gt;21.0&lt;/td&gt;      &lt;td&gt;6&lt;/td&gt;      &lt;td&gt;160.0&lt;/td&gt;&#xA;&lt;td&gt;110&lt;/td&gt;      &lt;td&gt;3.90&lt;/td&gt;      &lt;td&gt;2.875&lt;/td&gt;      &lt;td&gt;17.02&lt;/td&gt;&#xA;&lt;td&gt;0&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;&#xA;&lt;td&gt;Datsun 710&lt;/td&gt;      &lt;td&gt;22.8&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;108.0&lt;/td&gt;&#xA;&lt;td&gt;93&lt;/td&gt;      &lt;td&gt;3.85&lt;/td&gt;      &lt;td&gt;2.320&lt;/td&gt;      &lt;td&gt;18.61&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;&#xA;&lt;td&gt;Hornet 4 Drive&lt;/td&gt;      &lt;td&gt;21.4&lt;/td&gt;      &lt;td&gt;6&lt;/td&gt;      &lt;td&gt;258.0&lt;/td&gt;&#xA;&lt;td&gt;110&lt;/td&gt;      &lt;td&gt;3.08&lt;/td&gt;      &lt;td&gt;3.215&lt;/td&gt;      &lt;td&gt;19.44&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;3&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;&#xA;&lt;td&gt;Hornet Sportabout&lt;/td&gt;      &lt;td&gt;18.7&lt;/td&gt;      &lt;td&gt;8&lt;/td&gt;&#xA;&lt;td&gt;360.0&lt;/td&gt;      &lt;td&gt;175&lt;/td&gt;      &lt;td&gt;3.15&lt;/td&gt;      &lt;td&gt;3.440&lt;/td&gt;&#xA;&lt;td&gt;17.02&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;3&lt;/td&gt;      &lt;td&gt;2&lt;/td&gt;&#xA;&lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt;&#xA;&lt;h1 id=&#34;you-try-it&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;You try it!&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Crack open ipython and make a dataframe, then &lt;code&gt;df.to_html(classes=[&amp;quot;table table-bordered table-dark&amp;quot;])&lt;/code&gt;, copy the output (minus the quote marks ipython uses to denote the string type) that into &lt;code&gt;my-file.html&lt;/code&gt;, open that up in a browser and be amazed!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For added effeciency try using pyperclip to copy the output right to your clipboard!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;pip install pyperclip&lt;/code&gt; and then &lt;code&gt;pyperclip.copy(df.to_html(classes=[&amp;quot;table table-bordered table-dark&amp;quot;]))&lt;/code&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Dataframe-To-Markdown</title>
    <id>https://pype.dev/dataframe-to-markdown/</id>
    <updated>2022-05-07T00:00:00Z</updated>
    <published>2022-05-07T00:00:00Z</published>
    <link href="https://pype.dev/dataframe-to-markdown/" rel="alternate" type="text/html"></link>
    <summary type="text">s are pretty sweet data structures in Python.</summary>
    <content type="html">&lt;h1 id=&#34;pandas&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Pandas&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;pandas.DataFrame&lt;/code&gt;s are pretty sweet data structures in Python.&lt;/p&gt;&#xA;&lt;p&gt;I do a lot of work with tabular data and one thing I have incorporated into some of that work is automatic data summary reports by throwing the first few, or several relevant, rows of a dataframe at a point in a pipeline into a markdown file.&lt;/p&gt;&#xA;&lt;p&gt;Pandas has a method on DataFrames that makes this 100% trivial!&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-method&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Method&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Say we have a dataframe, &lt;code&gt;df&lt;/code&gt;&amp;hellip; then it&amp;rsquo;s literally just: &lt;code&gt;df.to_markdown()&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;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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In ipython I can call the method and get a markdown table back as a string&lt;/p&gt;&#xA;&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;n&#34;&gt;mental&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;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lake&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;new&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mental&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;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lake&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;df&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;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_markdown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&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;|    | Unnamed: 0        |   mpg |   cyl |   disp |   hp |   drat |    wt |   qsec |   vs |   am |   gear |   carb |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;|---:|:------------------|------:|------:|-------:|-----:|-------:|------:|-------:|-----:|-----:|-------:|-------:|&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;|  0 | Mazda RX4         |  21   |     6 |    160 |  110 |   3.9  | 2.62  |  16.46 |    0 |    1 |      4 |      4 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;|  1 | Mazda RX4 Wag     |  21   |     6 |    160 |  110 |   3.9  | 2.875 |  17.02 |    0 |    1 |      4 |      4 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;|  2 | Datsun 710        |  22.8 |     4 |    108 |   93 |   3.85 | 2.32  |  18.61 |    1 |    1 |      4 |      1 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;|  3 | Hornet 4 Drive    |  21.4 |     6 |    258 |  110 |   3.08 | 3.215 |  19.44 |    1 |    0 |      3 |      1 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;|  4 | Hornet Sportabout |  18.7 |     8 |    360 |  175 |   3.15 | 3.44  |  17.02 |    0 |    0 |      3 |      2 |&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;/code&gt;&lt;/pre&gt;&lt;p&gt;You can drop that string into a markdown file and using any reader that supports the rendering you&amp;rsquo;ll have a nicely formated table of example data in whatever report you&amp;rsquo;re making!&lt;/p&gt;&#xA;&lt;h1 id=&#34;bonus-method&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bonus method&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Just like markdown, you can export a dataframe to html with &lt;code&gt;df.to_html()&lt;/code&gt; and use that if it&amp;rsquo;s more appropriate for your use 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#39;&amp;lt;table border=&amp;#34;1&amp;#34; class=&amp;#34;dataframe&amp;#34;&amp;gt;\n  &amp;lt;thead&amp;gt;\n    &amp;lt;tr style=&amp;#34;text-align: right;&amp;#34;&amp;gt;\n      &amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;Unnamed: 0&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;mpg&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;cyl&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;disp&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;hp&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;drat&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;wt&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;qsec&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;vs&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;am&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;gear&amp;lt;/th&amp;gt;\n      &amp;lt;th&amp;gt;carb&amp;lt;/th&amp;gt;\n    &amp;lt;/tr&amp;gt;\n  &amp;lt;/thead&amp;gt;\n  &amp;lt;tbody&amp;gt;\n    &amp;lt;tr&amp;gt;\n      &amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;\n      &amp;lt;td&amp;gt;Mazda RX4&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;21.0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;160.0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;110&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3.90&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;2.620&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;16.46&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;\n    &amp;lt;/tr&amp;gt;\n    &amp;lt;tr&amp;gt;\n      &amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;\n      &amp;lt;td&amp;gt;Mazda RX4 Wag&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;21.0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;160.0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;110&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3.90&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;2.875&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;17.02&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;\n    &amp;lt;/tr&amp;gt;\n    &amp;lt;tr&amp;gt;\n      &amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;\n      &amp;lt;td&amp;gt;Datsun 710&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;22.8&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;108.0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;93&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3.85&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;2.320&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;18.61&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;\n    &amp;lt;/tr&amp;gt;\n    &amp;lt;tr&amp;gt;\n      &amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;\n      &amp;lt;td&amp;gt;Hornet 4 Drive&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;21.4&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;258.0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;110&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3.08&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3.215&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;19.44&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;\n    &amp;lt;/tr&amp;gt;\n    &amp;lt;tr&amp;gt;\n      &amp;lt;th&amp;gt;4&amp;lt;/th&amp;gt;\n      &amp;lt;td&amp;gt;Hornet Sportabout&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;18.7&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;8&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;360.0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;175&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3.15&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3.440&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;17.02&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;\n      &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;\n    &amp;lt;/tr&amp;gt;\n  &amp;lt;/tbody&amp;gt;\n&amp;lt;/table&amp;gt;&amp;#39;&#xA;&lt;/span&gt;&lt;/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;My blog will render that html into a nice table! (After removing new line characters)&lt;/p&gt;&#xA;&lt;table border=&#34;1&#34; class=&#34;dataframe&#34;&gt;  &lt;thead&gt;    &lt;tr style=&#34;text-align: right;&#34;&gt;      &lt;th&gt;Unnamed: 0&lt;/th&gt;      &lt;th&gt;mpg&lt;/th&gt;      &lt;th&gt;cyl&lt;/th&gt;      &lt;th&gt;disp&lt;/th&gt;      &lt;th&gt;hp&lt;/th&gt;      &lt;th&gt;drat&lt;/th&gt;      &lt;th&gt;wt&lt;/th&gt;      &lt;th&gt;qsec&lt;/th&gt;      &lt;th&gt;vs&lt;/th&gt;      &lt;th&gt;am&lt;/th&gt;      &lt;th&gt;gear&lt;/th&gt;      &lt;th&gt;carb&lt;/th&gt;    &lt;/tr&gt;  &lt;/thead&gt;  &lt;tbody&gt;    &lt;tr&gt;      &lt;td&gt;Mazda RX4&lt;/td&gt;      &lt;td&gt;21.0&lt;/td&gt;      &lt;td&gt;6&lt;/td&gt;      &lt;td&gt;160.0&lt;/td&gt;      &lt;td&gt;110&lt;/td&gt;      &lt;td&gt;3.90&lt;/td&gt;      &lt;td&gt;2.620&lt;/td&gt;      &lt;td&gt;16.46&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;Mazda RX4 Wag&lt;/td&gt;      &lt;td&gt;21.0&lt;/td&gt;      &lt;td&gt;6&lt;/td&gt;      &lt;td&gt;160.0&lt;/td&gt;      &lt;td&gt;110&lt;/td&gt;      &lt;td&gt;3.90&lt;/td&gt;      &lt;td&gt;2.875&lt;/td&gt;      &lt;td&gt;17.02&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;Datsun 710&lt;/td&gt;      &lt;td&gt;22.8&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;108.0&lt;/td&gt;      &lt;td&gt;93&lt;/td&gt;      &lt;td&gt;3.85&lt;/td&gt;      &lt;td&gt;2.320&lt;/td&gt;      &lt;td&gt;18.61&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;4&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;Hornet 4 Drive&lt;/td&gt;      &lt;td&gt;21.4&lt;/td&gt;      &lt;td&gt;6&lt;/td&gt;      &lt;td&gt;258.0&lt;/td&gt;      &lt;td&gt;110&lt;/td&gt;      &lt;td&gt;3.08&lt;/td&gt;      &lt;td&gt;3.215&lt;/td&gt;      &lt;td&gt;19.44&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;3&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;Hornet Sportabout&lt;/td&gt;      &lt;td&gt;18.7&lt;/td&gt;      &lt;td&gt;8&lt;/td&gt;      &lt;td&gt;360.0&lt;/td&gt;      &lt;td&gt;175&lt;/td&gt;      &lt;td&gt;3.15&lt;/td&gt;      &lt;td&gt;3.440&lt;/td&gt;      &lt;td&gt;17.02&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;3&lt;/td&gt;      &lt;td&gt;2&lt;/td&gt;    &lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Wish-List-With-Fastapi</title>
    <id>https://pype.dev/wish-list-with-fastapi/</id>
    <updated>2022-05-06T00:00:00Z</updated>
    <published>2022-05-06T00:00:00Z</published>
    <link href="https://pype.dev/wish-list-with-fastapi/" rel="alternate" type="text/html"></link>
    <summary type="text">Amazon has crossed the line with me just one too many times now so we are looking to drop them like every other Big Tech provider....</summary>
    <content type="html">&lt;p&gt;Amazon has crossed the line with me just one too many times now so we are looking to drop them like every other Big Tech provider&amp;hellip;.&lt;/p&gt;&#xA;&lt;p&gt;However, one key feature of Amazon that has been so useful for us is Lists&amp;hellip; We can just maintain a list for each of us and then family members can login anytime and check it out&amp;hellip;&#xA;This really alleviates any last minute gift idea stress right before a birthday or something.&lt;/p&gt;&#xA;&lt;p&gt;So I need a nice gift list service but I don&amp;rsquo;t want to be locked into one company (like a Target registry or something) and I&amp;rsquo;d like to host it myself&lt;/p&gt;&#xA;&lt;p&gt;The internets had a few options but nothing looked/felt like I wanted to I decided to build my own.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-frontend&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Frontend&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;I have no idea how to do front end so stay tuned&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-backend&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Backend&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;FastAPI for the win on this one&amp;hellip; I followed a few examples online and what I was able to build in just a few minutes is pretty impressive thanks to the design of FastAPI.&lt;/p&gt;&#xA;&lt;p&gt;Some key features are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Auto doc generation&lt;/li&gt;&#xA;&lt;li&gt;Required typing (which makes #1 possible)&lt;/li&gt;&#xA;&lt;li&gt;Built-in api testing in the browser&lt;/li&gt;&#xA;&lt;li&gt;Easy integration with sqlalchemy&lt;/li&gt;&#xA;&lt;li&gt;Development time so short you won&amp;rsquo;t be done with your coffee before having something up and running!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;database&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Database&lt;/span&gt; &lt;a href=&#34;#database&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Starting with a simple &lt;code&gt;database.py&lt;/code&gt; we can create a sqlalchemy session with a base model with about 7 lines of code&amp;hellip;&lt;/p&gt;&#xA;&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;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;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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;SQLALCHEMY_DATABASE_URL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;sqlite:///wishes.sqlite3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&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;n&#34;&gt;SQLALCHEMY_DATABASE_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;SessionLocal&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;autocommit&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;n&#34;&gt;autoflush&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;n&#34;&gt;bind&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;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;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;model&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Model&lt;/span&gt; &lt;a href=&#34;#model&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For my wish list I needed just a simple table:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th style=&#34;text-align:right&#34;&gt;id&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:left&#34;&gt;person&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:left&#34;&gt;item&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:left&#34;&gt;link&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:left&#34;&gt;purchased&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:left&#34;&gt;purchased_by&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:left&#34;&gt;date_added&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;1&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;pypeaday&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;A sweet item&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;http://www.mystore.store&#34;&gt;www.mystore.store&lt;/a&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;False&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;dad&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;2022-05-05 21:55:09&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;2&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;pypeaday&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;A bitter item&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;&lt;a href=&#34;http://www.bitterstore.com&#34;&gt;www.bitterstore.com&lt;/a&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;True&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;Mrs. pypeaday&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:left&#34;&gt;2022-05-06 06:55:54&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The table is simple enough&amp;hellip; A unique key, the person who the wish belongs to, the item (or wish), a link to the item, whether it&amp;rsquo;s been purchased or not and by whom, and the date it was added.&lt;/p&gt;&#xA;&lt;p&gt;To make this model with sqlalchemy we can make a &lt;code&gt;model.py&lt;/code&gt; 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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;database&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sqlalchemy.schema&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Column&lt;/span&gt;&#xA;&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.types&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Integer&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; &lt;span class=&#34;n&#34;&gt;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;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Wishes&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;Wishes&amp;#34;&lt;/span&gt;&#xA;&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;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;n&#34;&gt;Integer&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; &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;person&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;n&#34;&gt;String&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;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;Column&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;link&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;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;purchased&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;n&#34;&gt;Boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;purchased_by&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;n&#34;&gt;String&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;date_added&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;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&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;schema&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Schema&lt;/span&gt; &lt;a href=&#34;#schema&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One of the best things about FastAPI is trivial integration with pydantic.&#xA;We can define a schema to ensure any data posted is not missing anything!&lt;/p&gt;&#xA;&lt;p&gt;Make a &lt;code&gt;schema.py&lt;/code&gt; with 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;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;BaseModel&lt;/span&gt;&#xA;&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;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;Optional&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;wish_schema&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;person&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;item&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;link&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;purchased&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;purchased_by&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; &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;    &lt;span class=&#34;n&#34;&gt;date_added&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; &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;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;%Y-%m-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&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;localtime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;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;n&#34;&gt;orm_mode&lt;/span&gt; &lt;span class=&#34;o&#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;&#xA;&lt;/span&gt;&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;patch_schema&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;purchased&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;purchased_by&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; &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;    &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#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;n&#34;&gt;orm_mode&lt;/span&gt; &lt;span class=&#34;o&#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;/code&gt;&lt;/pre&gt;&lt;p&gt;I have 2 schemas - one for a &lt;code&gt;wish&lt;/code&gt; which you&amp;rsquo;ll see down below is used to validate any &lt;code&gt;post&lt;/code&gt; requests.&lt;/p&gt;&#xA;&lt;p&gt;To simplify things for me I made another schema, &lt;code&gt;patch_schema&lt;/code&gt; which I use for the route that updates the table (ie. marking an existing wish as purchased)&lt;/p&gt;&#xA;&lt;h2 id=&#34;session&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Session&lt;/span&gt; &lt;a href=&#34;#session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One of the last things we need is a Session&lt;/p&gt;&#xA;&lt;p&gt;So make a &lt;code&gt;session.py&lt;/code&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;database&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SessionLocal&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;model&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;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;&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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_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;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;db&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SessionLocal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&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;db&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#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;/code&gt;&lt;/pre&gt;&lt;p&gt;Our routes will depend on this &lt;code&gt;create_get_session&lt;/code&gt; function that will yield a &lt;code&gt;db&lt;/code&gt; object through which we&amp;rsquo;ll udpate our database&lt;/p&gt;&#xA;&lt;h1 id=&#34;ok-just-do-it-already&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Ok just do it already!&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;So our &lt;code&gt;main.py&lt;/code&gt; will have a few routes in it&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;What do we want to support?&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Getting all wishes&lt;/li&gt;&#xA;&lt;li&gt;Getting a specific wish&lt;/li&gt;&#xA;&lt;li&gt;Updating a specific wish&lt;/li&gt;&#xA;&lt;li&gt;Deleting a wish&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I think the script is fairly self explanatory but here&amp;rsquo;s a few notes&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;We decorate each function with &lt;code&gt;@app.&amp;lt;method&amp;gt;&lt;/code&gt; and define &lt;code&gt;response_model&lt;/code&gt; as well as &lt;code&gt;status_code&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;The functions are defined with &lt;code&gt;async&lt;/code&gt; (this was my first exposure to this so I can&amp;rsquo;t go in depth on it yet)&lt;/li&gt;&#xA;&lt;li&gt;The functions all take a &lt;code&gt;db&lt;/code&gt; which is from &lt;code&gt;session.py&lt;/code&gt; and that &lt;code&gt;db&lt;/code&gt; depends on the &lt;code&gt;create_get_session&lt;/code&gt; function&lt;/li&gt;&#xA;&lt;li&gt;If the db is being updtes then we type the object used for the update with the appropriate schema (either &lt;code&gt;wish_schema&lt;/code&gt; or &lt;code&gt;patch_schema&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;From there we&amp;rsquo;re in true python-land where you can basically guess the methods on &lt;code&gt;db&lt;/code&gt; and you&amp;rsquo;d probably be right&amp;hellip; (like &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;upddate&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt; etc.)&lt;/p&gt;&#xA;&lt;pre class=&#34;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;&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;HTTPException&lt;/span&gt;&#xA;&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.orm&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#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;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;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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wishes&lt;/span&gt;&#xA;&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;schema&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wish_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;patch_schema&lt;/span&gt;&#xA;&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;session&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_get_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;&#xA;&lt;/span&gt;&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;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;read_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;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;message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;server is 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;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;/wishes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response_model&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;n&#34;&gt;wish_schema&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;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;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;read_wishes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#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;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_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;wishes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&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;n&#34;&gt;Wishes&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;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wishes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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.post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/wishes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response_model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish_schema&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;201&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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;add_wish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wish_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#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;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_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;new_wish&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wishes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;person&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;person&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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;wish&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;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;purchased&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purchased&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;purchased_by&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purchased_by&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;date_added&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date_added&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db&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;n&#34;&gt;new_wish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;new_wish&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;/wishes/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{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;response_model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish_schema&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;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;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_wish&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; &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;db&lt;/span&gt;&lt;span class=&#34;p&#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;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_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;wish&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&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;n&#34;&gt;Wishes&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;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;n&#34;&gt;wish&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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.patch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/wishes/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{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;response_model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wish_schema&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;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;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;update_wish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&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;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;patch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;patch_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#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;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_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;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db_wish&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&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;n&#34;&gt;Wishes&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;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;n&#34;&gt;db_wish&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purchased&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;patch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purchased&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db_wish&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purchased_by&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;patch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purchased_by&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db&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;&lt;span class=&#34;n&#34;&gt;db_wish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;db_wish&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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.delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/wishes/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{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;status_code&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;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;delete_wish&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; &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;db&lt;/span&gt;&lt;span class=&#34;p&#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;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_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;db_wish&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&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;n&#34;&gt;Wishes&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;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;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db_wish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&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;s2&#34;&gt;&amp;#34;404&amp;#34;&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;Wish id does not exist&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;db_wish&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;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;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;my-code&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Code&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;You can find my repo &lt;a href=&#34;https://github.com/nicpayne713/wish-lists&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll plan to update and maintain for as long as I use it&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Git-Bisect</title>
    <id>https://pype.dev/git-bisect/</id>
    <updated>2022-05-03T00:00:00Z</updated>
    <published>2022-05-03T00:00:00Z</published>
    <link href="https://pype.dev/git-bisect/" rel="alternate" type="text/html"></link>
    <summary type="text">I try to commit a lot, and I also try to write useful tests appropriate for the scope of work I&#39;m focusing on, but sometimes I drop the ball...</summary>
    <content type="html">&lt;p&gt;I try to commit a lot, and I also try to write useful tests appropriate for the scope of work I&amp;rsquo;m focusing on, but sometimes I drop the ball&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Whether by laziness, ignorance, or accepted tech debt I don&amp;rsquo;t always code perfectly and recently I was dozens of commits into a new feature before realizing I broke something along the way that none of my tests caught&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Before today I would&amp;rsquo;ve manually reviewed every commit to see if something obvious slipped by me (talk about a time suck 😩)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;There must be a better way&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;bisect&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bisect?&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;git bisect&lt;/code&gt; is the magic sauce for this exact problem&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;You essentially create a range of commits to consider and let &lt;code&gt;git bisect&lt;/code&gt; guide you through them in a manner akin to Newton&amp;rsquo;s method for finding the root of a continuous function.&lt;/p&gt;&#xA;&lt;h1 id=&#34;how-to-do-it&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;How to do it?&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Start with &lt;code&gt;git bisect start&lt;/code&gt; and then choose the first &lt;code&gt;good&lt;/code&gt; commit (ie. a commit you know the bug isn&amp;rsquo;t present 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox   bisect-post   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯ git bisect start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox   bisect-post &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;BISECTING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯ git bisect good 655332b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bisect-post  HEAD         main         ORIG_HEAD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5b31e1e  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;    add successful print &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; seconds ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;308247b  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD^&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;   init another loop &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;77&lt;/span&gt; seconds ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4555c59  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD^^&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  introduce bug &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;9cf6d55  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~3&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  add successful loop &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bcb41c3  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~4&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  change x to &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3c34aac  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~5&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  init x to &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;m&#34;&gt;4&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;12e53bd  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~6&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  print cwd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;655332b  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~7&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  add example.py &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# &amp;lt;- I want to start at this commit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;59e0048  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~8&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  gitignore &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt; hours ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fb9e1fb  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~9&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  add reqs &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt; hours ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox   bisect-post &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;BISECTING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯ git bisect bad 5b31e1e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bisect-post                                                ORIG_HEAD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HEAD                                                       refs/bisect/good-655332b6c384934c2c00c3d4aba3011ccc1e5b57&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5b31e1e  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;    add successful print &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# &amp;lt;- I start here with the &amp;#34;bad&amp;#34; commit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;308247b  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD^&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;   init another loop &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4555c59  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD^^&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  introduce bug &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;9cf6d55  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~3&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  add successful loop &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bcb41c3  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~4&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  change x to &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3c34aac  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~5&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  init x to &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;m&#34;&gt;9&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;12e53bd  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~6&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  print cwd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;655332b  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~7&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  add example.py &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt; minutes ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;59e0048  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~8&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  gitignore &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt; hours ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fb9e1fb  -- &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;HEAD~9&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  add reqs &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt; hours ago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;After starting bisect with a &amp;ldquo;good&amp;rdquo; start commit and a &amp;ldquo;bad&amp;rdquo; ending commit we can let git to it&amp;rsquo;s thing!&lt;/p&gt;&#xA;&lt;p&gt;Git checksout a commit somewhere about halfway between the good and bad commit so you can see if your bug is there or 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox   bisect-post &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;BISECTING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯ git bisect bad 5b31e1e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Bisecting: &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; revisions left to &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; after this &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;roughly &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; steps&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;bcb41c3854e343eade85353683f2c1c4ddde4e04&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; change x to &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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox   HEAD &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bcb41c38&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;BISECTING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In my example here I have a python script with some loops and print statements - they aren&amp;rsquo;t really relevant, I just wanted an easy to follow git history.&lt;/p&gt;&#xA;&lt;p&gt;So I check to see if the bug is present or not either by running/writing tests or replicating the bug somehow.&lt;/p&gt;&#xA;&lt;p&gt;In this session commit &lt;code&gt;bcb41c38&lt;/code&gt; is actually just fine, so I do &lt;code&gt;git bisect good&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;sandbox   HEAD &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bcb41c38&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;BISECTING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯ git bisect good&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Bisecting: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; revision left to &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; after this &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;roughly &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; step&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;4555c5979268dff6c475365fdc5ce1d4a12bd820&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; introduce bug&#xA;&lt;/span&gt;&lt;/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;And we see that git moves on to checkout another commit&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;In this case the next commit is the one where I introduced a bug&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git bisect bad&lt;/code&gt; then gives 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox   HEAD &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4555c597&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;BISECTING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯ git bisect bad&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Bisecting: &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; revisions left to &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; after this &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;roughly &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; steps&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&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;9cf6d55301560c51e2f55404d0d80b1f1e22a33d&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; add successful loop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At &lt;code&gt;4555c597&lt;/code&gt; the script works as expected so one more &lt;code&gt;git bisect good&lt;/code&gt; yields&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox   HEAD &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;9cf6d553&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;BISECTING&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;   ×1 via   v3.8.11&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  on  &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;❯ git bisect good&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4555c5979268dff6c475365fdc5ce1d4a12bd820 is the first bad commit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit 4555c5979268dff6c475365fdc5ce1d4a12bd820&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: &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;Date:   Tue May &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; 09:00:00 &lt;span class=&#34;m&#34;&gt;2022&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;    introduce bug&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; example.py &lt;span class=&#34;p&#34;&gt;|&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;m&#34;&gt;1&lt;/span&gt; file changed, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; insertion&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;+&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; deletion&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;what-happened&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What happened?&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Git sliced up a range of commits based on me saying of the next one was good or bad and localized the commit that introduced a bug into my workflow!&lt;/p&gt;&#xA;&lt;p&gt;I didn&amp;rsquo;t have to manually review commits, click through logs, etc&amp;hellip; I just let git checkout relevant commits and I ran whatever was appropriate for reproducing the bug to learn when it was comitted!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pandas-String-Contains</title>
    <id>https://pype.dev/pandas-string-contains/</id>
    <updated>2022-05-02T00:00:00Z</updated>
    <published>2022-05-02T00:00:00Z</published>
    <link href="https://pype.dev/pandas-string-contains/" rel="alternate" type="text/html"></link>
    <summary type="text">accepts regular expressions and this is turned on by __!</summary>
    <content type="html">&lt;h1 id=&#34;tl-dr&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;TL;DR&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;pandas.Series.str.contains&lt;/code&gt; accepts regular expressions and this is turned on by &lt;strong&gt;default&lt;/strong&gt;!&lt;/p&gt;&#xA;&lt;h1 id=&#34;use-case&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Use case&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;We often need to filter pandas DataFrames based on several string values in a Series.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice that sweet pyflyby import 😁!&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;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;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;s2&#34;&gt;&amp;#34;A&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;string1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;string2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;string3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;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;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;mi&#34;&gt;0&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;string1&lt;/span&gt;&#xA;&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;string2&lt;/span&gt;&#xA;&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;string3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;df&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;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&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;df&lt;/span&gt;&lt;span class=&#34;o&#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;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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;mi&#34;&gt;0&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;string1&lt;/span&gt;&#xA;&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;string2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;And this isn&amp;rsquo;t the worst thing in the world, especially for such a tiny example&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;But what if we had dozens or more values to filter on?&lt;/p&gt;&#xA;&lt;p&gt;Then it looks so much nicer to create an iterable of the values we want to filter on and join them with an apropriate regex operator (in this case &lt;code&gt;|&lt;/code&gt; for &lt;em&gt;inclusive 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;vals&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;1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# iterable with whatever is appropriate for your use case&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&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;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;df&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;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contains&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;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;regex&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;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;mi&#34;&gt;0&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;string1&lt;/span&gt;&#xA;&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;string2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;h1 id=&#34;fin&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Fin&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;This is a super nice and concise way to do the kind of filtering my team does on a daily basis!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Unpack-Anywhere-With-Star</title>
    <id>https://pype.dev/unpack-anywhere-with-star/</id>
    <updated>2022-04-24T00:00:00Z</updated>
    <published>2022-04-24T00:00:00Z</published>
    <link href="https://pype.dev/unpack-anywhere-with-star/" rel="alternate" type="text/html"></link>
    <summary type="text">Unpacking iterables in python with is a pretty handy trick for writing code that is just a tiny bit more pythonic than not.</summary>
    <content type="html">&lt;p&gt;Unpacking iterables in python with &lt;code&gt;*&lt;/code&gt; is a pretty handy trick for writing code that is just a tiny bit more pythonic than 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;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&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;&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;int&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;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;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;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;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;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;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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 * unpacks the tuple into the individual 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;nb&#34;&gt;print&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;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;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;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;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;c&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;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;z&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;alphas&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# x = 1, y = 2, z = 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;c1&#34;&gt;# alphas = [ &amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;c&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;/code&gt;&lt;/pre&gt;&lt;p&gt;But &lt;a href=&#34;https://twitter.com/nedbat&#34;&gt;@Ned Batchelder&lt;/a&gt; showed me via Twitter than you can arbitrarily unpack arguments based on position - it doesn&amp;rsquo;t have to be done at the beginning or the end!&lt;/p&gt;&#xA;&lt;pre class=&#34;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;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;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mixed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alpha&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# x = 1, y = 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;c1&#34;&gt;# mixed = [3, &amp;#39;a&amp;#39;, &amp;#39;b&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;# alpha = &amp;#39;c&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;m not entirely sure when I&amp;rsquo;ll need this but it definitley shows me another example of how flexible python is!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Htop</title>
    <id>https://pype.dev/htop/</id>
    <updated>2022-04-24T00:00:00Z</updated>
    <published>2022-04-24T00:00:00Z</published>
    <link href="https://pype.dev/htop/" rel="alternate" type="text/html"></link>
    <summary type="text">is a common command line tool for seeing interactive output of your system resource utilization, running processes, etc.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;htop&lt;/code&gt; is a common command line tool for seeing interactive output of your system resource utilization, running processes, etc.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve always been super confused about htop showing seemingly the same process several times though&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Fix…&lt;/span&gt; &lt;a href=&#34;#the-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Just hit &lt;code&gt;H&lt;/code&gt;&amp;hellip;. makes the view a lot nicer 😀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pipx</title>
    <id>https://pype.dev/pipx/</id>
    <updated>2022-04-22T00:00:00Z</updated>
    <published>2022-04-22T00:00:00Z</published>
    <link href="https://pype.dev/pipx/" rel="alternate" type="text/html"></link>
    <summary type="text">is a tool I&#39;ve been using to solve a few problems of mine...</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;pipx&lt;/code&gt; is a tool I&amp;rsquo;ve been using to solve a few problems of mine&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;pinning formatting tools like &lt;code&gt;black&lt;/code&gt;, &lt;code&gt;flake8&lt;/code&gt;, &lt;code&gt;isort&lt;/code&gt;, etc. to the same version for all my projects&lt;/li&gt;&#xA;&lt;li&gt;keeping virtual environments clean of things like &lt;code&gt;cookiecutter&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;python utilities I want system wide but not in the global environment, like &lt;code&gt;visidata&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;what-is-it&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What is it?&lt;/span&gt; &lt;a href=&#34;#what-is-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;pip&lt;/code&gt; itself is just a package manager like &lt;code&gt;homebrew&lt;/code&gt;, &lt;code&gt;apt&lt;/code&gt;, etc. But it is tied to a python environment.&#xA;If you aren&amp;rsquo;t using a virtual environment then &lt;code&gt;pip&lt;/code&gt; will operate inside the global installation of python.&lt;/p&gt;&#xA;&lt;p&gt;Operating within that environment has burned me several times and now I have a strict virtual environment usage policy.&lt;/p&gt;&#xA;&lt;p&gt;But there are still things I don&amp;rsquo;t want to have to put in every virtual environment - enter &lt;code&gt;pipx&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-s-it-do&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What’s it do?&lt;/span&gt; &lt;a href=&#34;#what-s-it-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When you &lt;code&gt;pipx install {package}&lt;/code&gt; a stand alone virtual environment gets created (by default in &lt;code&gt;~/.local/pipx/venvs&lt;/code&gt;).&#xA;THen you can install extra dependencies with &lt;code&gt;pipx inject {package} {dependency}&lt;/code&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;ex. After &lt;code&gt;pipx install visidata&lt;/code&gt; in order to open Excel files you need to &lt;code&gt;pipx inject visidata xlrd&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In the example with &lt;code&gt;visidata&lt;/code&gt;, I can then use it anywhere, in any project, without re-installing with &lt;code&gt;pip&lt;/code&gt; in every env.&lt;/p&gt;&#xA;&lt;p&gt;Also for the formatting tools - I configure vim to run the &lt;code&gt;pipx&lt;/code&gt; versions of them on save - this way I don&amp;rsquo;t have to put them in every project&amp;rsquo;s virtual environment!&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-about-pip&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What about pip?&lt;/span&gt; &lt;a href=&#34;#what-about-pip&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So obviously you can&amp;rsquo;t &lt;code&gt;pipx&lt;/code&gt; everything, nor do you want to.&#xA;I see it as a safe and better alternative to global package installation.&lt;/p&gt;&#xA;&lt;p&gt;How can you then be sure that you never &lt;code&gt;pip install&lt;/code&gt; into the global env?&lt;/p&gt;&#xA;&lt;p&gt;Add &lt;code&gt;require-virtualenv = True&lt;/code&gt; to your &lt;code&gt;pip.conf&lt;/code&gt; and you&amp;rsquo;re good to go!&lt;/p&gt;&#xA;&lt;p&gt;With that set, if you try to &lt;code&gt;pip install pandas&lt;/code&gt; into the global env you&amp;rsquo;ll get a message 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;~ 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&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ pip install pandas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ERROR: Could not find an activated virtualenv &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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;end&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;End&lt;/span&gt; &lt;a href=&#34;#end&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disable your system &lt;code&gt;pip&lt;/code&gt; to keep your base python safe&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;pipx&lt;/code&gt; for tools you want available everywhere or don&amp;rsquo;t have to need in a virtual environment!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Fx-Json</title>
    <id>https://pype.dev/fx-json/</id>
    <updated>2022-04-19T00:00:00Z</updated>
    <published>2022-04-19T00:00:00Z</published>
    <link href="https://pype.dev/fx-json/" rel="alternate" type="text/html"></link>
    <summary type="text">fx is an interactaive JSON viewer for the terminal.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/antonmedv/fx&#34;&gt;fx&lt;/a&gt; is an interactaive JSON viewer for the terminal.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a simple tool built with Charmcli&amp;rsquo;s Bubble Tea.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Installation&lt;/span&gt; &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The installation with go was broken for me - both via the link and direct from the repo.&#xA;Now I&amp;rsquo;m not a gopher so I don&amp;rsquo;t really know how to fix that.&lt;/p&gt;&#xA;&lt;p&gt;Luckily &lt;code&gt;npm install fx&lt;/code&gt; also works and got me what I needed!&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Usage&lt;/span&gt; &lt;a href=&#34;#usage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Usage is simple&amp;hellip; &lt;code&gt;fx &amp;lt;json file&amp;gt;&lt;/code&gt;.&#xA;The Github has a few other ways such as &lt;code&gt;curl ... | fx&lt;/code&gt; etc.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Jellyfin-Media-Players</title>
    <id>https://pype.dev/jellyfin-media-players/</id>
    <updated>2022-04-17T00:00:00Z</updated>
    <published>2022-04-17T00:00:00Z</published>
    <link href="https://pype.dev/jellyfin-media-players/" rel="alternate" type="text/html"></link>
    <summary type="text">I use Jellyfin at home for serving up most of our media - movies and shows etc.</summary>
    <content type="html">&lt;p&gt;I use Jellyfin at home for serving up most of our media - movies and shows etc.&lt;/p&gt;&#xA;&lt;p&gt;My dream is to have a GPU capable of transcoding any and all of our media for smooth playback on any device&amp;hellip;&#xA;Now, I thought I&amp;rsquo;d have that by now with my Nvidia Quadro P400 however I have issues left and right with 4k content.&lt;/p&gt;&#xA;&lt;p&gt;What can I do to still use Jellyfin but get smooth playback?&lt;/p&gt;&#xA;&lt;p&gt;THe first answer is figure out why I suck with GPUs, but pausing that there&amp;rsquo;s shorter solutions -&amp;gt; namely, use a media player that&amp;rsquo;s compatabile with the encoded content!&lt;/p&gt;&#xA;&lt;h2 id=&#34;vlc&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;VLC&lt;/span&gt; &lt;a href=&#34;#vlc&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll keep this one short - VLC is great and if you don&amp;rsquo;t need a netflix like experience, I&amp;rsquo;d recommend just using it to browse your network drives and play whatever you have&lt;/p&gt;&#xA;&lt;h2 id=&#34;jellyfin-web-player&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jellyfin Web Player&lt;/span&gt; &lt;a href=&#34;#jellyfin-web-player&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the reason I&amp;rsquo;m writing this post&amp;hellip; the web player is great but not everything is supported on all devices&lt;/p&gt;&#xA;&lt;h2 id=&#34;jellyfin-mpv-shim&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Jellyfin MPV Shim&lt;/span&gt; &lt;a href=&#34;#jellyfin-mpv-shim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This cross-platform cast client is my answer now.&#xA;You can find the project &lt;a href=&#34;https://github.com/jellyfin/jellyfin-mpv-shim/blob/master/README.md#linux-installation&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The installation instrauctions are super straightforward for Windows, Mac OS, or Linux.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m on Linux and so my install went 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;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 mpv &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install jellyfin-mpv-shim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx inject jellyfin-mpv-shim pystray&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I used &lt;code&gt;pipx&lt;/code&gt; to install the player as I prefer it for stand alone utilities over pip installing anything globally.&lt;/p&gt;&#xA;&lt;p&gt;Afer that I just start the player at the terminal with &lt;code&gt;jellyfin-mpv-shim&lt;/code&gt;&#xA;Then in the web browser I can cast my content to the player and bypass the web player (and thus solve much of my transcoding issues) trivially!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Typeddict</title>
    <id>https://pype.dev/typeddict/</id>
    <updated>2022-04-15T00:00:00Z</updated>
    <published>2022-04-15T00:00:00Z</published>
    <link href="https://pype.dev/typeddict/" rel="alternate" type="text/html"></link>
    <summary type="text">Type hinting has helped me write code almost as much, if not more, than unit testing.</summary>
    <content type="html">&lt;p&gt;Type hinting has helped me write code almost as much, if not more, than unit testing.&lt;/p&gt;&#xA;&lt;p&gt;One thing I love is that with complete type hinting you get a lot more out of your LSP.&#xA;Typing dictionaries can be tricky and I recently learned about &lt;code&gt;TypedDict&lt;/code&gt; to do exactly what I needed!&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Problem&lt;/span&gt; &lt;a href=&#34;#the-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It might not be straight up obvious what the problem is, especially if you don&amp;rsquo;t utilize tools like &lt;code&gt;mypy&lt;/code&gt; or &lt;code&gt;flake8&lt;/code&gt; in your development.&lt;/p&gt;&#xA;&lt;p&gt;My handy-dandy &lt;code&gt;nvim-lsp&lt;/code&gt; gives me a lot of feedback when I&amp;rsquo;m coding and it&amp;rsquo;s immensely helpful.&lt;/p&gt;&#xA;&lt;p&gt;So with the LSP giving me constant feedback here&amp;rsquo;s the 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;&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;&lt;span class=&#34;p&#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;n&#34;&gt;Union&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_dict&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;Union&lt;/span&gt;&lt;span class=&#34;p&#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;nb&#34;&gt;str&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;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;key_1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;val_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;s2&#34;&gt;&amp;#34;key_2&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;ls_1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ls_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;&#xA;&lt;/span&gt;&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_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;key_2&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;pop&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;With the above script you&amp;rsquo;ll get an annoying warning about using &lt;code&gt;pop&lt;/code&gt; on &lt;code&gt;key_2&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/typed-dict-warning.png&#34; alt=&#34;typeddict&#34; title=&#34;Warning in TypedDict&#34; /&gt;&#xA;&lt;h2 id=&#34;the-solution&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Solution&lt;/span&gt; &lt;a href=&#34;#the-solution&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Maybe you can stomach getting yelled at by your LSP but I like complete silence if at all possible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;TypedDict&lt;/code&gt;  was the saving grace.&lt;/p&gt;&#xA;&lt;pre class=&#34;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;typing&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TypedDict&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MyDict&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TypedDict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;MyDict&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;key_1&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;s2&#34;&gt;&amp;#34;key_2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;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;n&#34;&gt;my_typed_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyDict&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;key_1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;val_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;s2&#34;&gt;&amp;#34;key_2&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;ls_1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ls_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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_typed_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;key_2&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;pop&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;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/typed-dict.png&#34; alt=&#34;typeddict&#34; title=&#34;A TypedDict&#34; /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I was able to import TypedDict from typing, mypy_extensions, and typing_extensions&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;With &lt;code&gt;TypedDict&lt;/code&gt; you define your custom type, match the first argument to &lt;code&gt;TypedDict&lt;/code&gt; with the name of the variable (idk why), then type hint each key you expect in the dict!&#xA;It&amp;rsquo;s super easy and I think puts you into a position of being extremely explicit with your dictionary variables.&#xA;This isn&amp;rsquo;t always desired or appropriate but in most of my use cases it is.&lt;/p&gt;&#xA;&lt;h2 id=&#34;rtfm&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;RTFM&lt;/span&gt; &lt;a href=&#34;#rtfm&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s other implementation of &lt;code&gt;TypedDict&lt;/code&gt; and while writing this I saw that most of the docs define a &lt;code&gt;class&lt;/code&gt; for the type 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;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;TypedDict&lt;/span&gt;&#xA;&lt;/span&gt;&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;MyDict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TypedDict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&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_1&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;key_2&lt;/span&gt;&lt;span class=&#34;p&#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;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;n&#34;&gt;my_dict&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyDict&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;key_1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;val_1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;key_2&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;ls_1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ls_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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://peps.python.org/pep-0589/&#34;&gt;pep docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://mypy.readthedocs.io/en/latest/more_types.html#typeddict&#34;&gt;mypy docs&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>And-vs-&amp;</title>
    <id>https://pype.dev/and-vs/</id>
    <updated>2022-04-06T00:00:00Z</updated>
    <published>2022-04-06T00:00:00Z</published>
    <link href="https://pype.dev/and-vs/" rel="alternate" type="text/html"></link>
    <summary type="text">I often struggle to remember the correct way to do type comparisons when working in pandas.</summary>
    <content type="html">&lt;p&gt;I often struggle to remember the correct way to do &lt;code&gt;and&lt;/code&gt; type comparisons when working in pandas.&lt;/p&gt;&#xA;&lt;p&gt;I remember learning long long ago that &lt;code&gt;and&lt;/code&gt; and &lt;code&gt;&amp;amp;&lt;/code&gt; are different, the former being lazy boolean evaluation whereas the latter is a bitwise operation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I learned a lot from &lt;a href=&#34;https://stackoverflow.com/questions/22646463/and-boolean-vs-bitwise-why-difference-in-behavior-with-lists-vs-nump&#34;&gt;this SO post&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;lists&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Lists&lt;/span&gt; &lt;a href=&#34;#lists&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Python &lt;code&gt;list&lt;/code&gt; objects can contain unlike elements - ie. &lt;code&gt;[True, &#39;foo&#39;, 1, &#39;1&#39;, [1,2,3]]&lt;/code&gt; is a valid list with booleans, strings, integers, and another list.&#xA;Because of this, we can&amp;rsquo;t use &lt;code&gt;&amp;amp;&lt;/code&gt; to compare two lists since they can&amp;rsquo;t be combined in a consistent and meaningful way.&lt;/p&gt;&#xA;&lt;p&gt;However we can use &lt;code&gt;and&lt;/code&gt; since it doesn&amp;rsquo;t do bitwise operations, it just evaluates the boolean value of the list (basically if it&amp;rsquo;s non-empty then &lt;code&gt;bool(my_list)&lt;/code&gt; evaluates to &lt;code&gt;True&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an 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;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;my_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;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;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;foo&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;kc&#34;&gt;True&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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;nb&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_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;kc&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If we compare &lt;code&gt;my_list&lt;/code&gt; with &lt;code&gt;another_list&lt;/code&gt; using &lt;code&gt;and&lt;/code&gt; then the comparision will go:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if bool(my_list):&#xA;    if bool(another_list):&#xA;       &amp;lt;operation&amp;gt; &#xA;    else:&#xA;       break&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s see another 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;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;another_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;kc&#34;&gt;False&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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;my_list&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;another_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;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; &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;&lt;code&gt;bool(my_list)&lt;/code&gt; evaluated to &lt;code&gt;True&lt;/code&gt;, and &lt;code&gt;bool(another_list)&lt;/code&gt; &lt;em&gt;also&lt;/em&gt; evaluated to &lt;code&gt;True&lt;/code&gt; even though it&amp;rsquo;s full of &lt;code&gt;False&lt;/code&gt; values because the object is non-empty.&lt;/p&gt;&#xA;&lt;pre class=&#34;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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my_list&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;another_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;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So using &lt;code&gt;and&lt;/code&gt; in this case results in a &lt;code&gt;True&lt;/code&gt; conditional, so the &lt;code&gt;print&lt;/code&gt; statement is executed.&lt;/p&gt;&#xA;&lt;p&gt;Feels kind of counter-intuitive at first glance, to me anyways&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;However, we can&amp;rsquo;t use &lt;code&gt;&amp;amp;&lt;/code&gt; because there isn&amp;rsquo;t a meaningful to do bitwise operations over these two lists:&lt;/p&gt;&#xA;&lt;pre class=&#34;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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;my_list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;another_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;err&#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; &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;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;19&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a2a16cebb3da&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;cell&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;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;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;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;TypeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unsupported&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;operand&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;type&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;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;list&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;list&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;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;numpy&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Numpy&lt;/span&gt; &lt;a href=&#34;#numpy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;numpy&lt;/code&gt; arrays are special and they have a lot of fancy vectorization utilities built-in which make them great and fast for mathematical operations but now our logical comparisons need to be handled with a different kind of care.&lt;/p&gt;&#xA;&lt;p&gt;First thing though - without some trickery they do not hold mixed data types like a &lt;code&gt;list&lt;/code&gt; does (necessary, I think, for the vectorized optimization that numpy is built on top of)&lt;/p&gt;&#xA;&lt;p&gt;With that out of the way here&amp;rsquo;s the main thing for this post, we can&amp;rsquo;t just evaluate the &lt;code&gt;bool&lt;/code&gt; of an array - numpy says no no no.&lt;/p&gt;&#xA;&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;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;arr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&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&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&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;kc&#34;&gt;True&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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;arr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;True&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;False&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;U21&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;nb&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;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; &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;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;25&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;4e8&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c5dd85b93&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;cell&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;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;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;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;ValueError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;The&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;truth&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;an&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;more&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;than&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;one&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;element&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ambiguous&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Use&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;n&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;This means that using &lt;code&gt;and&lt;/code&gt; with &lt;code&gt;numpy&lt;/code&gt; arrays doesn&amp;rsquo;t really make sense because we probably care about the truth value of each element (bitwise), not the truth value of the array.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Notice that when I print &lt;code&gt;arr&lt;/code&gt; all the elements are a string - and the &lt;code&gt;dtype&lt;/code&gt; is &lt;code&gt;&amp;lt;U21&lt;/code&gt; for all elements.&lt;/p&gt;&#xA;&lt;p&gt;This is not how I instantiated the array so be aware of that behavior with numpy.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;lt;U21&lt;/code&gt; is a dtype expressing the values are &amp;lsquo;Little Endian&amp;rsquo;, Unicode, 12 characters. See &lt;a href=&#34;https://numpy.org/doc/stable/reference/arrays.dtypes.html#specifying-and-constructing-data-types&#34;&gt;here&lt;/a&gt; for docs for docs&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So for logical comparisions we should look at the error message then&amp;hellip;&#xA;Our handy error message says to try &lt;code&gt;any&lt;/code&gt; or &lt;code&gt;all&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Because the datatypes in this example are basically strings, using &lt;code&gt;arr.any()&lt;/code&gt; will result in an error that I do not fully understand, but &lt;code&gt;any(arr)&lt;/code&gt; and &lt;code&gt;all(arr)&lt;/code&gt; work&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;o&#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;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;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; &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;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;48&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;n&#34;&gt;ecac52db96&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;cell&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;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;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;err&#34;&gt;│&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;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u_paynen3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;personal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;venv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;python3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&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;numpy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;core&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&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;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_any&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;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;mi&#34;&gt;54&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_any&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;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;axis&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;dtype&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;out&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;keepdims&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;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;where&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;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;mi&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;# Parsing keyword arguments is currently fairly slow, so avoid it for now              │&lt;/span&gt;&#xA;&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;mi&#34;&gt;56&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;   &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;where&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&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;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;err&#34;&gt;❱&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;57&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;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;umr_any&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;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;axis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&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;n&#34;&gt;keepdims&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;err&#34;&gt;│&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;58&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;umr_any&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;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;axis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&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;n&#34;&gt;keepdims&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;where&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;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;mi&#34;&gt;59&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;mi&#34;&gt;60&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_all&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;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;axis&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;dtype&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;out&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;keepdims&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;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;where&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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;UFuncTypeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ufunc&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;logical_or&amp;#39;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;did&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;contain&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loop&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;signature&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;matching&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;types&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;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;numpy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;gt;) -&amp;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;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;&#xA;&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&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;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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&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;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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let&amp;rsquo;s change the example to just use integers 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;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;arr2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&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&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;True&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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;arr2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;array&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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr2&lt;/span&gt;&lt;span class=&#34;o&#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;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr2&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;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;Ah, now some sanity&amp;hellip;&#xA;First, the booleans are stored as integers, which based on this discussion makes sense.&#xA;Next we check if &lt;code&gt;any&lt;/code&gt; values (this is a bitwise operation) are &lt;code&gt;True&lt;/code&gt;, which we see they are so the conditional evaluates to &lt;code&gt;True&lt;/code&gt;.&#xA;Howver, if we check that &lt;code&gt;all&lt;/code&gt; values are &lt;code&gt;True&lt;/code&gt; we see they aren&amp;rsquo;t, the last value is &lt;code&gt;False&lt;/code&gt; or &lt;code&gt;0&lt;/code&gt; so the conditional fails.&lt;/p&gt;&#xA;&lt;p&gt;This is a different way to evaluate logical conditions than with lists and it&amp;rsquo;s because of the special nature of numpy arrays that allows them to be compared bitwise but on the flip side, there isn&amp;rsquo;t a meaningful way to evaluate the &lt;code&gt;truth value&lt;/code&gt; of an array.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pandas&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Pandas&lt;/span&gt; &lt;a href=&#34;#pandas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now for &lt;code&gt;pandas&lt;/code&gt;, which under the hood is a lot of &lt;code&gt;numpy&lt;/code&gt; but not fully.&#xA;&lt;code&gt;pandas.Series&lt;/code&gt; objects can hold mixed data types like lists, however to logically evaluate truth values we have to treat them like numpy arrays.&lt;/p&gt;&#xA;&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;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;s&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;Series&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;s2&#34;&gt;&amp;#34;foo&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; &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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;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;&#xA;&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;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;1&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&#xA;&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;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;mi&#34;&gt;3&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;dtype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;nb&#34;&gt;bool&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;p&#34;&gt;)&lt;/span&gt;&#xA;&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;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; &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;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;60&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;68e48&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e81da14&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;cell&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;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;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;err&#34;&gt;│&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;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u_paynen3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;personal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;venv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;python3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&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;pandas&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;core&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;p&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;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1527&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__nonzero__&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;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;mi&#34;&gt;1524&lt;/span&gt; &lt;span class=&#34;err&#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;err&#34;&gt;│&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;1525&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;   &lt;span class=&#34;nd&#34;&gt;@final&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;mi&#34;&gt;1526&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;__nonzero__&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;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;err&#34;&gt;❱&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;1527&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;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ValueError&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;err&#34;&gt;│&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;1528&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;err&#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;The truth value of a &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;type&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;vm&#34;&gt;__name__&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; is ambiguous. &amp;#34;&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;mi&#34;&gt;1529&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;err&#34;&gt;│&lt;/span&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;Use a.empty, a.bool(), a.item(), a.any() or a.all().&amp;#34;&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;mi&#34;&gt;1530&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;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;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;ValueError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;The&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;truth&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Series&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ambiguous&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Use&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;n&#34;&gt;empty&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;n&#34;&gt;bool&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;n&#34;&gt;item&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;n&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&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;n&#34;&gt;all&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just like with numpy, we can&amp;rsquo;t evaluate the truth value of the series in a meaningful way, but bitwise operations make perfect sense&amp;hellip;&lt;/p&gt;&#xA;&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;err&#34;&gt;❯&lt;/span&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;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;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;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;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;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&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;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;strong&gt;I thought this was about &lt;code&gt;and&lt;/code&gt; and &lt;code&gt;&amp;amp;&lt;/code&gt;&amp;hellip;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Right, so recall that &lt;code&gt;and&lt;/code&gt; is a lazy boolean evaluation (ie. it evaluates the &amp;rsquo;truth value&amp;rsquo; an object) whereas &lt;code&gt;&amp;amp;&lt;/code&gt; does bitwise comparison.&lt;/p&gt;&#xA;&lt;p&gt;What we see then with &lt;code&gt;pandas&lt;/code&gt; and &lt;code&gt;numpy&lt;/code&gt; is that if we want to do logical comparisons, we need to do them bitwise, ie. use &lt;code&gt;&amp;amp;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Keep in mind though that the data types make a big deal - we can&amp;rsquo;t use &lt;code&gt;&amp;amp;&lt;/code&gt; with strings  because the bitwise operation isn&amp;rsquo;t supported, for strings we need to use the boolean evaluation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-original-point&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Original Point&lt;/span&gt; &lt;a href=&#34;#the-original-point&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My main use case for this is finding elements in a dataframe/series based on 2 or more columns aligning row values&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Say I have a dataframe 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;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;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;s&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s2&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&#xA;&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;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&#xA;&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;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;bar&lt;/span&gt;&#xA;&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;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;baz&lt;/span&gt;&#xA;&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;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;fee&lt;/span&gt;&#xA;&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;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Example use case is I want to get the values in &lt;code&gt;s3&lt;/code&gt; where &lt;code&gt;s&lt;/code&gt; is 1 and &lt;code&gt;s2&lt;/code&gt; is &amp;lsquo;a&amp;rsquo;. ie. I&amp;rsquo;m just after &lt;code&gt;bar&lt;/code&gt; for now&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Up until now I&amp;rsquo;ve always just tried &lt;code&gt;df.s3[(df.s == 1) and (df.s2 == &amp;quot;a&amp;quot;)]&lt;/code&gt; the first time and every single time I&amp;rsquo;ve gotten this error that I just haven&amp;rsquo;t ever fully understood:&lt;/p&gt;&#xA;&lt;pre class=&#34;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;ValueError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;The&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;truth&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Series&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ambiguous&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Use&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;n&#34;&gt;empty&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;n&#34;&gt;bool&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;n&#34;&gt;item&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;n&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&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;n&#34;&gt;all&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;But after this deep dive I think I&amp;rsquo;ve grasped that &lt;code&gt;and&lt;/code&gt; doesn&amp;rsquo;t actually do what I want here, and in order to do the bitwise comparision I need to use &lt;code&gt;&amp;amp;&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;sandbox&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VCS&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;via&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.8.11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sandbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;df&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;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;s&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;&amp;amp;&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;s2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;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;&#xA;&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;bar&lt;/span&gt;&#xA;&lt;/span&gt;&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;s3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;end&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;End&lt;/span&gt; &lt;a href=&#34;#end&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hopefully this set of ramblings brings some clarity to &lt;code&gt;and&lt;/code&gt; and &lt;code&gt;&amp;amp;&lt;/code&gt; and you can Google one less error in the future in your logical comparison workflows 😄&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>File-Length</title>
    <id>https://pype.dev/file-length/</id>
    <updated>2022-04-04T00:00:00Z</updated>
    <published>2022-04-04T00:00:00Z</published>
    <link href="https://pype.dev/file-length/" rel="alternate" type="text/html"></link>
    <summary type="text">I have a specific need for counting the number of lines in a file quickly. At work we use S3 for data storage during our Kedro pipeline development, and in...</summary>
    <content type="html">&lt;p&gt;I have a specific need for counting the number of lines in a file quickly.&#xA;At work we use S3 for data storage during our Kedro pipeline development, and in the development process we may end up orphaning several datasets.&#xA;In order to keep our workspace clean I have a short utility that compares the datasets in a Kedro DataCatalog with the files in the relevant S3 location.&lt;/p&gt;&#xA;&lt;p&gt;To get that list I run an internal tool 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;kedro our-liter &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep s3 &amp;gt;&amp;gt; orphaned_datasets.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This simply parses our internal linter for the lines releated to my s3 linter utility and pipes those lines to a file.&lt;/p&gt;&#xA;&lt;p&gt;To get a quick idea of how out of wack a pipeline is I could open the text file in vim, git it with the &lt;code&gt;G&lt;/code&gt; and see what line number I&amp;rsquo;m on but I&amp;rsquo;m way too lazy for that&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;awk&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;AWK&lt;/span&gt; &lt;a href=&#34;#awk&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;awk &#39;END {print NR}&#39; orphaned_datasets.txt&lt;/code&gt; gives me the number of lines and I can alias this to whatever feels appropriate in my &lt;code&gt;zshrc&lt;/code&gt;!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;built-ins for the win!&lt;/strong&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Ipython-Prompt</title>
    <id>https://pype.dev/ipython-prompt/</id>
    <updated>2022-04-02T00:00:00Z</updated>
    <published>2022-04-02T00:00:00Z</published>
    <link href="https://pype.dev/ipython-prompt/" rel="alternate" type="text/html"></link>
    <summary type="text">I have a post on starship where I have some notes on how I use starship to make my zsh experience great with a sweet terminal prompt.</summary>
    <content type="html">&lt;p&gt;I have a &lt;a href=&#34;/starship&#34;&gt;post on starship&lt;/a&gt; where I have some notes on how I use starship to make my zsh experience great with a sweet terminal prompt.&lt;/p&gt;&#xA;&lt;p&gt;Now&amp;hellip; I spend quite a bit of time in ipython every day and I got kind of sick of the vanilla experience and wanted something that more closely matched my starship prompt.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s more to customizing ipython I know for sure but here&amp;rsquo;s 2 things I have going for me&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I use &lt;a href=&#34;https://pypi.org/project/rich/&#34;&gt;&lt;code&gt;rich&lt;/code&gt;&lt;/a&gt; authored by @&lt;a href=&#34;https://twitter.com/willmcgugan&#34;&gt;Will McGugan&lt;/a&gt; which makes much of my ipython experience great.&#xA;I won&amp;rsquo;t write about that here but you can find my &lt;code&gt;rich&lt;/code&gt; config &lt;a href=&#34;https://github.com/nicpayne713/dotfiles/blob/main/ipython/.ipython/profile_default/startup/01-rich_init.py&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I used &lt;code&gt;pygments&lt;/code&gt; to customize the ipython prompt with my &lt;code&gt;ipython_config.py&lt;/code&gt; and a startup script, next to my &lt;code&gt;rich&lt;/code&gt; one, called &lt;code&gt;99-prompt.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The scripts inside &lt;code&gt;~/.ipython/&amp;lt;profile&amp;gt;/startup&lt;/code&gt; are executed in lexigraphical order, so it&amp;rsquo;s nice to name things in the 10&amp;rsquo;s to give room for adding scripts in between others down the line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;my-prompt&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My prompt&lt;/span&gt; &lt;a href=&#34;#my-prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My zsh prompt looks a little something like this:&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/zsh-starship-prompt.png&#34; alt=&#34;starship&#34; title=&#34;A starship prompt&#34; /&gt;&#xA;&lt;p&gt;And after my ipython customiztion it currently (subject to much change but this is as of my dotfiles commit #d22088f6be81a58b5f7dfb73b7a4088cbdd9fece on &lt;code&gt;main&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/ipython-prompt.png&#34; alt=&#34;ipython&#34; title=&#34;A starship inspired ipython prompt&#34; /&gt;&#xA;&lt;p&gt;Now in ipython I have an indicator of my working directory, git branch, python environment, and a note that I&amp;rsquo;m in &lt;code&gt;ipython&lt;/code&gt; and not &lt;code&gt;zsh&lt;/code&gt;.&#xA;I also configured my prompt to warn me if I&amp;rsquo;m &lt;em&gt;not&lt;/em&gt; in a git directory!&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/ipython-prompt-no-git.png&#34; alt=&#34;ipython-ng&#34; title=&#34;A starship inspired ipython prompt without git&#34; /&gt;&#xA;&lt;p&gt;All in all the customization isn&amp;rsquo;t too bad with just 2 specific files.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ipython_config-py&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;ipython_config.py&lt;/span&gt; &lt;a href=&#34;#ipython_config-py&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s several use cases for &lt;code&gt;ipython_config.py&lt;/code&gt; files in several areas on a pc - sometimes you want a common config across users, so you&amp;rsquo;d drop one in &lt;code&gt;/etc/ipython&lt;/code&gt; and othertimes you have your own which is probably at &lt;code&gt;~/.ipython&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;My ipython config mostly has colors defined on &lt;code&gt;pygment tokens&lt;/code&gt; plus a few autorun commands and &lt;code&gt;pyflyby&lt;/code&gt; (see my friend Waylon&amp;rsquo;s post on pyflyby &lt;a href=&#34;https://waylonwalker.com/pyflyby/&#34;&gt;here&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;I wanted to match my ipython somewhat to my tmux and vim color schemes, which I model after the vim-airline theme &lt;code&gt;night owl&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After picking some some colors and saving variables it&amp;rsquo;s a matter of setting colors per token and then referencing those tokens in your version of &lt;code&gt;99-prompt.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You can check out my &lt;code&gt;ipython_config.py&lt;/code&gt; &lt;a href=&#34;https://github.com/nicpayne713/dotfiles/blob/home/ipython/.ipython/profile_default/ipython_config.py&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For example, I can set &lt;code&gt;Token.Name.Function&lt;/code&gt; to black, and in &lt;code&gt;ipython&lt;/code&gt; then a function&amp;rsquo;s definition will appear in black text. I set mine to cyan to match my theme.&lt;/p&gt;&#xA;&lt;p&gt;For the prompt colors just match the keyword in &lt;code&gt;c.TerminalInteractiveShell.highlighting_style_overrides&lt;/code&gt; with what is referenced inside &lt;a href=&#34;https://github.com/nicpayne713/dotfiles/blob/home/ipython/.ipython/profile_default/startup/99-prompt.py&#34;&gt;99-prompt.py&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For example, &lt;code&gt;Token.Prompt&lt;/code&gt; is set to &lt;code&gt;bold grey&lt;/code&gt; which gives me the bold chevron symbol you see in the above image that looks like my zsh prompt&lt;/p&gt;&#xA;&lt;p&gt;Then in &lt;code&gt;99-prompt.py&lt;/code&gt; I have this set for the 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;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;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;99-prompt-py&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;99-prompt.py&lt;/span&gt; &lt;a href=&#34;#99-prompt-py&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You don&amp;rsquo;t need to name your script &lt;code&gt;99-prompt.py&lt;/code&gt;, but I wanted to know that it was for my prompt and I wanted it executed last so it made sense.&lt;/p&gt;&#xA;&lt;p&gt;Here I have &lt;code&gt;MyPrompt&lt;/code&gt; class with the prompt symbol defined as above and several other things&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;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;n&#34;&gt;get_branch&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;&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;Heading&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;&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;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;via &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_venv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice I have 2 custom functions here, &lt;code&gt;get_branch&lt;/code&gt; and &lt;code&gt;get_venv&lt;/code&gt; which grab some git info and python env info and return strings I can dump into my prompt as shown above.&lt;/p&gt;&#xA;&lt;p&gt;To finish you drop &lt;code&gt;ip = get_ipython()&lt;/code&gt; and &lt;code&gt;ip.prompts = MyPrompt(ip)&lt;/code&gt; at the bottom of your prompt script and you should be in custom prompt city!&lt;/p&gt;&#xA;&lt;h2 id=&#34;end&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;End&lt;/span&gt; &lt;a href=&#34;#end&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is more or less notes for myself on how this works - drop by my &lt;a href=&#34;https://github.com/nicpayne713/dotfiles/tree/home/ipython&#34;&gt;ipython config&lt;/a&gt; in my dotfiles repo to see my full configs for ipython!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Vim-Spell-Check</title>
    <id>https://pype.dev/vim-spell-check/</id>
    <updated>2022-04-01T00:00:00Z</updated>
    <published>2022-04-01T00:00:00Z</published>
    <link href="https://pype.dev/vim-spell-check/" rel="alternate" type="text/html"></link>
    <summary type="text">__</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;Did you know you can spell check in Vim?!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;!DOCTYPE html&gt;&#xA;&lt;html&gt;&#xA;   &lt;head&gt;&#xA;      &lt;title&gt;Vim Spell check&lt;/title&gt;&#xA;   &lt;/head&gt;&#xA;   &lt;body&gt;&#xA;      &lt;h3 id=&#34;without&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Without...&lt;/span&gt; &lt;a href=&#34;#without&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;      &lt;p&gt;Here is a missspelled word.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;h3&amp;gt;With!&amp;lt;/h3&amp;gt;&#xA;  &amp;lt;p&amp;gt;Here is a &amp;lt;u&amp;gt;missspelled&amp;lt;/u&amp;gt; word.&amp;lt;/p&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;   &lt;/body&gt;&#xA;&lt;/html&gt;&#xA;&lt;h2 id=&#34;what-is-this-magic&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;What is this magic???&lt;/span&gt; &lt;a href=&#34;#what-is-this-magic&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;set: spell spelllang=en_us&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;custom-words&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Custom words?&lt;/span&gt; &lt;a href=&#34;#custom-words&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes there&amp;rsquo;s things that are words to you but not the default spell checker&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Common example: package names!&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;plotly&lt;/code&gt;, &lt;code&gt;streamlit&lt;/code&gt;, &lt;code&gt;psutil&lt;/code&gt;, etc etc&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;You can easily add these to your vim config by hitting &lt;code&gt;zw&lt;/code&gt; ontop of the word!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Polybar-01</title>
    <id>https://pype.dev/polybar-01/</id>
    <updated>2022-04-01T00:00:00Z</updated>
    <published>2022-04-01T00:00:00Z</published>
    <link href="https://pype.dev/polybar-01/" rel="alternate" type="text/html"></link>
    <summary type="text">polybar is an awesome and super customizable status bar for your desktop environment.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/polybar/polybar&#34;&gt;polybar&lt;/a&gt; is an awesome and super customizable status bar for your desktop environment.&lt;/p&gt;&#xA;&lt;p&gt;I use it with i3-gaps on Ubuntu for work and it makes my day just that much better to have a clean and elegant bar with the things in it that I care about.&lt;/p&gt;&#xA;&lt;p&gt;The GitHub has all the instructions you&amp;rsquo;d need to install and get started with an example.&lt;/p&gt;&#xA;&lt;p&gt;I want to make some notes about how I use polybar and customize it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;organization&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Organization&lt;/span&gt; &lt;a href=&#34;#organization&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First of all, I recently moved my polybar config out of one config file into a modular structure that keeps my config files small and easiser to edit.&lt;/p&gt;&#xA;&lt;p&gt;You can find my config &lt;a href=&#34;https://github.com/nicpayne713/dotfiles/tree/main/polybar&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The apps or services you put into polybar are called &lt;code&gt;modules&lt;/code&gt;.&#xA;I have moved all of my modules into their own config files and I source them with one centralized &lt;code&gt;include-modules.ini&lt;/code&gt; config.&lt;/p&gt;&#xA;&lt;p&gt;This separation also makes it easier for me to keep my home and work polybars as in sync as possible without duplicating a ton of 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;./polybar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── colors.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── config.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── fonts.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── home-modules.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── include-modules.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── launch.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── modules&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── aws.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── battery.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── bluetooth.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── cisco.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── cpu.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── date.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── eth.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── eth_work.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── i3.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── memory.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── nm-editor.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── powermenu.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── pulseaudio-control.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── pulseaudio.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── rofi.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── vpn.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── wlan.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── work-modules.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;24&lt;/span&gt; files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To break this down there are several configs to see:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;colors.ini&lt;/code&gt; is what you&amp;rsquo;d expect - a set of defined colors like &lt;code&gt;foreground&lt;/code&gt;, &lt;code&gt;underline&lt;/code&gt;, etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;config.ini&lt;/code&gt; is the general polybar config file where bars are defined. Currently in mine there is a &lt;code&gt;work&lt;/code&gt; and &lt;code&gt;home&lt;/code&gt; bar defined with the modules sourced in from the explicit config files.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fonts.ini &lt;/code&gt; is like &lt;code&gt;colors.ini&lt;/code&gt; -&amp;gt; you put fonts here. I recommend using a font patched with NerdFont so you get fancy icons! (I use JetBrains Mono)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;include-modules.ini&lt;/code&gt; is where I list out all the config files in &lt;code&gt;modules/&lt;/code&gt; so I can basically source just the &lt;code&gt;include-modules.ini&lt;/code&gt; without explicitly sourcing every module&amp;rsquo;s config in every polybar defintion.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;launch.sh&lt;/code&gt; is a simple shell script to launch the polybar! You&amp;rsquo;ll see mine takes multiple monitors into consideration which I manage via environment variables setup in my &lt;code&gt;.zshenv&lt;/code&gt; file that is different for my work and home setups.&lt;/li&gt;&#xA;&lt;li&gt;Finally there are &lt;code&gt;home-modules.ini&lt;/code&gt; and &lt;code&gt;work-modules.ini&lt;/code&gt; which is where, for each of my bars, I define which modules I want!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;config&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Config&lt;/span&gt; &lt;a href=&#34;#config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My &lt;code&gt;config.ini&lt;/code&gt; file has 2 bar definitions in it - here&amp;rsquo;s my home 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;na&#34;&gt;include-file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;$DOTFILES/polybar/include-modules.ini&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[bar/home]&lt;/span&gt;&#xA;&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;monitor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;${env:MONITOR:}&lt;/span&gt;&#xA;&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;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#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;na&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;25&lt;/span&gt;&#xA;&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;radius&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;8.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;na&#34;&gt;fixed-center&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#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;na&#34;&gt;bottom&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#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;na&#34;&gt;background&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;${colors.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;na&#34;&gt;foreground&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;${colors.foreground}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;include-file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;$DOTFILES/polybar/fonts.ini&lt;/span&gt;&#xA;&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;include-file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;$DOTFILES/polybar/home-modules.ini&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It should be easy to follow - I bring in the &lt;code&gt;include-modules&lt;/code&gt;, set a few colors for the bar like &lt;code&gt;background&lt;/code&gt; and &lt;code&gt;foreground&lt;/code&gt; which are sourced by the &lt;code&gt;colors.ini&lt;/code&gt;, and finally bring in my fonts and home modules via their config files!&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s super easy to then change one or two things in the appropriate places rather than combing through one massive config. This also makes it easy for me to seperate my work and home setups.&lt;/p&gt;&#xA;&lt;h2 id=&#34;modules&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Modules&lt;/span&gt; &lt;a href=&#34;#modules&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are several builtin modules, like &lt;code&gt;wlan&lt;/code&gt; which gives your wifi status right there in polybar.&lt;/p&gt;&#xA;&lt;p&gt;You can also make custom ones.&#xA;A big-time custom one for me is an indicator of whether or not I have an active AWS token for working with the &lt;code&gt;aws&lt;/code&gt; cli.&lt;/p&gt;&#xA;&lt;p&gt;This is defined in&lt;code&gt; modules/aws.ini&lt;/code&gt; and it 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;k&#34;&gt;[module/aws]&lt;/span&gt;&#xA;&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;interval&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;5.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;na&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;custom/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;na&#34;&gt;exec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;has_aws_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;na&#34;&gt;click-left&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;$HOME/.local/bin/auto_get_aws_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;na&#34;&gt;click-right&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;rm -rf ~/.aws/credentials&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Every &lt;code&gt;5&lt;/code&gt; seconds my &lt;code&gt;has_aws_token&lt;/code&gt; script is ran.&#xA;That script 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;nb&#34;&gt;source&lt;/span&gt; auto_proxy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws sts get-caller-identity &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&amp;gt; /dev/null &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;%{T5}%{F#00ff00}  %{F-}%{T-}&amp;#34;&lt;/span&gt;  &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;s2&#34;&gt;&amp;#34;%{T5}%{F#ff0000} %{F-}%{T-}&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;See how the script echos out a colored icon to indicate the status of my token -&amp;gt; that icon is displayed in the polybar so I have real-time (5 second latency) status of whether or not I can do things in my AWS environment.&lt;/p&gt;&#xA;&lt;p&gt;In the module I also configured actions for &lt;code&gt;click-left&lt;/code&gt; and &lt;code&gt;click-right&lt;/code&gt; which are as straight forward as could be.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-issues-with-i3&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My issues with i3&lt;/span&gt; &lt;a href=&#34;#my-issues-with-i3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a few things to be considerate of if you use &lt;code&gt;i3&lt;/code&gt; such as needing a workaround for a centered bar that &lt;strong&gt;is not&lt;/strong&gt; the full width of the monitor.&#xA;Polybar can look really nice by not taking up the full width of the bar which you can configure in &lt;code&gt;config.ini&lt;/code&gt; with these options:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;90%&lt;/span&gt;&#xA;&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;offset-x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;5%  # set to (100 - width) / 2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;However due to an issue with polybar and i3 you need to also set &lt;code&gt;override-redirect = true&lt;/code&gt;.&#xA;BUT then you&amp;rsquo;ll notice that the bar overlaps your i3 windows&amp;hellip; ARGH! what do we do?&lt;/p&gt;&#xA;&lt;p&gt;Quick work around is to set &lt;code&gt;gaps top&lt;/code&gt; in your i3 config if you use i3-gaps&amp;hellip; if not? well, idk&amp;hellip; use gaps&amp;hellip; lol&lt;/p&gt;&#xA;&lt;p&gt;However this introduces another issue - which is then full screen windows will  have polybar sitting on top of them&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;This isn&amp;rsquo;t necessarily a deal breaker, but for me it&amp;rsquo;s worth it to just have the bar go 100% width.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;FIN&lt;/span&gt; &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a tiny intro to polybar and how I organize my config files so things are easy to edit and manage!&#xA;Feel free to grab mine and try it out!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Deques</title>
    <id>https://pype.dev/deques/</id>
    <updated>2022-03-31T00:00:00Z</updated>
    <published>2022-03-31T00:00:00Z</published>
    <link href="https://pype.dev/deques/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working on a project to create a small system monitoring dashboard using the python library.</summary>
    <content type="html">&lt;p&gt;I am working on a project to create a small system monitoring dashboard using the python &lt;code&gt;psutil&lt;/code&gt; library.&lt;/p&gt;&#xA;&lt;p&gt;The repo is &lt;a href=&#34;https://github.com/nicpayne713/not-netdata&#34;&gt;here&lt;/a&gt; (if you want actual system monitoring please use &lt;a href=&#34;https://www.netdata.cloud/&#34;&gt;netdata&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m using &lt;code&gt;streamlit&lt;/code&gt; and &lt;code&gt;plotly&lt;/code&gt; for the webserver, design, and plotting at the moment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-use-case&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;My Use Case&lt;/span&gt; &lt;a href=&#34;#my-use-case&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I needed a way to refresh my plotly charts with a fixed window of time so that I&amp;rsquo;m able to just see relevant recent data instead of cramming all data for all time into one plot that&amp;rsquo;s 500 pixels wide&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Checking the length of arrays or lists every time I get a new piece of data feels kind of dumb and I thought &amp;ldquo;python must have a way to do this&amp;rdquo;&amp;hellip;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;This&amp;rdquo; meaning, update values in a fixed length array without reallocating memory or recreating a copy of the list&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;deques&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Deques&lt;/span&gt; &lt;a href=&#34;#deques&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Enter the &lt;code&gt;deque&lt;/code&gt;.&#xA;It means &amp;ldquo;double ended queue&amp;rdquo; and is in general an &lt;code&gt;Iterable&lt;/code&gt; that you can append values to either side or pop values from either side.&lt;/p&gt;&#xA;&lt;p&gt;The init signature is straightforward enough and I&amp;rsquo;m sure there&amp;rsquo;s more to them than I know yet but here&amp;rsquo;s how I use it&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;deque&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_deque&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;deque&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This gives us &lt;code&gt;my_deque&lt;/code&gt;, created from an iterable, with several familiar methods like &lt;code&gt;index&lt;/code&gt;, &lt;code&gt;extend&lt;/code&gt;, &lt;code&gt;append&lt;/code&gt;, etc.&#xA;However there&amp;rsquo;s some new ones too such as &lt;code&gt;appendleft&lt;/code&gt; and &lt;code&gt;popleft&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;my_deque&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;appendleft&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;p&#34;&gt;)&lt;/span&gt;&#xA;&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;my_dequqe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;deque&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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_deque&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;popleft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&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;s1&#34;&gt;&amp;#39;a&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attribution&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;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_deque&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;deque&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;These are handy ways to manipulate the iterable that I needed for the arrays I plot with plotly!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;See my follow-up to this on using Deques with plotly and streamlit to create a quick &amp;ldquo;dashboard&amp;rdquo; with live streaming data!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/plotly-and-streamlit&#34;&gt;follow-up&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Plotly-And-Streamlit</title>
    <id>https://pype.dev/plotly-and-streamlit/</id>
    <updated>2022-03-31T00:00:00Z</updated>
    <published>2022-03-31T00:00:00Z</published>
    <link href="https://pype.dev/plotly-and-streamlit/" rel="alternate" type="text/html"></link>
    <summary type="text">I use for any EDA I ever have to do at work. It&#39;s super easy to spin up a small dashboard to filter and view dataframes in, live, without the fallbacks of...</summary>
    <content type="html">&lt;h2 id=&#34;streamlit&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Streamlit&lt;/span&gt; &lt;a href=&#34;#streamlit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use &lt;code&gt;streamlit&lt;/code&gt; for any EDA I ever have to do at work.&#xA;It&amp;rsquo;s super easy to spin up a small dashboard to filter and view dataframes in, live, without the fallbacks of Jupyter notebooks (kernels dying, memory bloat, a billion &amp;ldquo;Untitled N.ipynb&amp;rdquo; files, etc.)&lt;/p&gt;&#xA;&lt;p&gt;At the highest level, streamlit lets you write a python script and call &lt;code&gt;streamlit run my_script.py&lt;/code&gt; which will open up a web server with your streamlit stuff.&#xA;The dashboard refreshes whenever you change the script so you can add capabilities in real time, super fast!&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll show an example of using &lt;code&gt;streamlit&lt;/code&gt; and &lt;code&gt;plotly&lt;/code&gt; to make a live dashboard to monitor system memory usage with &lt;code&gt;psutil&lt;/code&gt;.&#xA;This is apart of my posts on &lt;a href=&#34;/psutil&#34;&gt;psutil&lt;/a&gt; and &lt;a href=&#34;/deques&#34;&gt;deques&lt;/a&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;example at the bottom!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;plotly&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Plotly&lt;/span&gt; &lt;a href=&#34;#plotly&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not going to make a big time intro to plotly here - there&amp;rsquo;s a billion resources on the interwebs and the docs are really good.&lt;/p&gt;&#xA;&lt;p&gt;Suffice it to say it&amp;rsquo;s my goto plotting library for basically any and all needs.&#xA;I&amp;rsquo;m currently exploring it for live data streaming as I&amp;rsquo;m not sure it&amp;rsquo;s the best solution but it&amp;rsquo;s the one I&amp;rsquo;m familiar with.&lt;/p&gt;&#xA;&lt;p&gt;For my &lt;a href=&#34;https://github.com/nicpayne713/not-netdata&#34;&gt; not-netdata &lt;/a&gt; project of visualizing live system resource data I  first need a way of appending data and popping data in and out of an array at every data refresh cycle to keep my plots looking nice with a fixed time window.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;/deques&#34;&gt;deques&lt;/a&gt; for a short intro to the datatype I&amp;rsquo;m using.&lt;/p&gt;&#xA;&lt;p&gt;First step is to initialize some objects to store data 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;data&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;MutableSequence&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;float&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;defaultdict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deque&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;arr_size&lt;/span&gt; &lt;span class=&#34;o&#34;&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;&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;time&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;deque&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;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr_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;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;used_memory&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;deque&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;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr_size&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;code&gt;data&lt;/code&gt; is a dictionary that I&amp;rsquo;ll store deques in. The dictionary keys will be the type of data, in this case &lt;code&gt;time&lt;/code&gt; and &lt;code&gt;used_memory&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I fix an array size, &lt;code&gt;arr_size&lt;/code&gt; to just 10 for now&lt;/p&gt;&#xA;&lt;p&gt;Then I initialize the values for &lt;code&gt;time&lt;/code&gt; and &lt;code&gt;used_memory&lt;/code&gt; as &lt;code&gt;deque&lt;/code&gt;s of length &lt;code&gt;arr_size&lt;/code&gt;.&#xA;Simple enough!&lt;/p&gt;&#xA;&lt;p&gt;Next is to fill those deques with some relevant data.&#xA;I&amp;rsquo;m not actually sure if this is the best way to do this but here&amp;rsquo;s what I have done 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;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;refresh_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;global&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;n&#34;&gt;memory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual_memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;time&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;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&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;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;%Y-%m-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&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;localtime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()))&lt;/span&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;used_memory&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;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;used&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;1024&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;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;time&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;popleft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;used_memory&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;popleft&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 you ignore my usage of &lt;code&gt;global&lt;/code&gt; you&amp;rsquo;ll see that I can just &lt;code&gt;append&lt;/code&gt; to each deque like it was a list.&lt;/p&gt;&#xA;&lt;p&gt;But then to keep the relevant data in the deque, and to keep the length fixed, I simply &lt;code&gt;popleft&lt;/code&gt; to remove the oldest datapoint!&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-trivial-dashboard&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;A trivial dashboard&lt;/span&gt; &lt;a href=&#34;#a-trivial-dashboard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now I&amp;rsquo;ll prove just how easy it is to get a live data dashboard up and running with just a few lines of code thanks to streamlit!&lt;/p&gt;&#xA;&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;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;st&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;memory chart&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;stats&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;st&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&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; &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;refresh_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;stats&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plotly_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;n&#34;&gt;px&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;&#xA;&lt;/span&gt;&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;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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;s2&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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;s2&#34;&gt;&amp;#34;used_memory&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Memory usage stored in a deque!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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;mf&#34;&gt;0.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;p&gt;&lt;code&gt;st&lt;/code&gt; is the streamlit alias (imports shows at the bottom full example).&#xA;&lt;code&gt;st.header&lt;/code&gt; puts a nice header on the page.&#xA;&lt;code&gt;st.empty&lt;/code&gt; initializes an empty &lt;code&gt;streamlit container&lt;/code&gt; in which we&amp;rsquo;ll put a &lt;code&gt;plotly.express&lt;/code&gt; figure.&lt;/p&gt;&#xA;&lt;p&gt;At each iteration we&amp;rsquo;ll &lt;code&gt;refresh_data()&lt;/code&gt; which &lt;code&gt;appends&lt;/code&gt; and &lt;code&gt;pops&lt;/code&gt; data in the deques in the &lt;code&gt;data&lt;/code&gt; dictionary.&#xA;Then we update the &lt;code&gt;stats&lt;/code&gt; container with a plotly graph and the refresh happens seamlessly.&lt;/p&gt;&#xA;&lt;p&gt;All in all the script 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;&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;defaultdict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;deque&lt;/span&gt;&#xA;&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;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;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MutableSequence&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Optional&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;plotly&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;express&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;px&lt;/span&gt;&#xA;&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;psutil&lt;/span&gt;&#xA;&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;streamlit&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;st&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;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;MutableSequence&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;float&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;defaultdict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deque&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;arr_size&lt;/span&gt; &lt;span class=&#34;o&#34;&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;&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;time&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;deque&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;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr_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;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;used_memory&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;deque&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;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr_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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_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;global&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;n&#34;&gt;memory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual_memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;time&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;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&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;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;%Y-%m-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&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;localtime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()))&lt;/span&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;used_memory&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;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;used&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;1024&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;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;time&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;popleft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;used_memory&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;popleft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;memory_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;n&#34;&gt;fig&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;px&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;&#xA;&lt;/span&gt;&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;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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;s2&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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;s2&#34;&gt;&amp;#34;used_memory&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&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;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Memory usage stored in a deque!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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;fig&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;st&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;memory chart&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;stats&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;st&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&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; &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;refresh_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;stats&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plotly_chart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;memory_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;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;mf&#34;&gt;0.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;p&gt;You can save this as &lt;code&gt;my_dash.py&lt;/code&gt; and run with &lt;code&gt;streamlit run my_dash.py&lt;/code&gt; and should see something like the following!&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/plotly-streamlit.gif&#34; alt=&#34;plotly&#34; title=&#34;Plotly in Streamlit&#34; /&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Starship</title>
    <id>https://pype.dev/starship/</id>
    <updated>2022-03-25T00:00:00Z</updated>
    <published>2022-03-25T00:00:00Z</published>
    <link href="https://pype.dev/starship/" rel="alternate" type="text/html"></link>
    <summary type="text">If you spend time in the terminal then you&#39;ll want it to look somewhat pleasing to the eye. I used to ssh into servers with no customization, use to edit a...</summary>
    <content type="html">&lt;p&gt;If you spend time in the terminal then you&amp;rsquo;ll want it to look somewhat pleasing to the eye.&#xA;I used to ssh into servers with no customization, use &lt;code&gt;vi&lt;/code&gt;  to edit a file or two, then get back to my regularly scheduled programming in VS C**e&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;One of the first steps for me loving my terminal was a beautiful prompt&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;prompt&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Prompt&lt;/span&gt; &lt;a href=&#34;#prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The default sh/bash/zsh prompts are&amp;hellip; to put it lightly&amp;hellip; garbage&amp;hellip; I can&amp;rsquo;t speak for other shells like fish simply because I do not use them but let me justify my trash talk.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the default &lt;code&gt;sh&lt;/code&gt; prompt&amp;hellip;&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/sh-prompt.png&#34; alt=&#34;sh&#34; title=&#34;A default sh prompt&#34; /&gt;&#xA;&lt;p&gt;Then switching to &lt;code&gt;zsh&lt;/code&gt; you get something marginally better (plus tab completion!)&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/zsh-prompt.png&#34; alt=&#34;zsh&#34; title=&#34;A default zsh prompt&#34; /&gt;&#xA;&lt;p&gt;But this still is super gross&amp;hellip; there&amp;rsquo;s nothing to indicate file types and no status information readily available (ie. &lt;code&gt;git status&lt;/code&gt; etc.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;oh-my-zsh&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Oh-My-Zsh!&lt;/span&gt; &lt;a href=&#34;#oh-my-zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now there are several ways to make your prmompt nicer depending on your shell (terminal emulator plays a role too).&#xA;Now I use &lt;code&gt;zsh&lt;/code&gt; and there&amp;rsquo;s a great tool out there &lt;a href=&#34;https://ohmyz.sh/&#34;&gt;oh-my-zsh&lt;/a&gt; that brings a crazy amount of customization to the terminal experience.&lt;/p&gt;&#xA;&lt;p&gt;I do not use &lt;code&gt;oh-my-zsh&lt;/code&gt; for theming though and that&amp;rsquo;s simply because of my other choices - I use &lt;code&gt;kitty&lt;/code&gt; themes since I understood the implementation better.&#xA;Kitty themes though - do not give me a nice prompt.&lt;/p&gt;&#xA;&lt;p&gt;The default prompt you get with &lt;code&gt;oh-my-zsh&lt;/code&gt; themes isn&amp;rsquo;t bad though (and you can pick from several default themes)&amp;hellip;&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/zsh-oh-my-zsh-prompt.png&#34; alt=&#34;omz&#34; title=&#34;A default oh-my-zsh prompt&#34; /&gt;&#xA;&lt;p&gt;Notice that you get some nice coloring and some default &lt;code&gt;git&lt;/code&gt; status stuff, mainly the branch you are on.&#xA;There&amp;rsquo;s plugins to show you more and that&amp;rsquo;s all well and good, but again it&amp;rsquo;s not my choice&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;If I don&amp;rsquo;t use this then what&amp;rsquo;s my goto?&lt;/p&gt;&#xA;&lt;h2 id=&#34;starship&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Starship&lt;/span&gt; &lt;a href=&#34;#starship&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://starship.rs/&#34;&gt;starship&lt;/a&gt; is a cross-shell prompt with nice default and super easy customizaton!&lt;/p&gt;&#xA;&lt;p&gt;To get started click that link and follow the &amp;ldquo;Getting Started&amp;rdquo; button - it&amp;rsquo;s incredibly fast to get up and running with sane defaults.&lt;/p&gt;&#xA;&lt;p&gt;The default starship config is plenty nice but I got a little tired of emojis in my prompt and wanted to switch to icons instead&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;To get started with your own customizaton you add a &lt;code&gt;starship.toml&lt;/code&gt; file to &lt;code&gt;~/.config&lt;/code&gt;&#xA;My starship config is found &lt;a href=&#34;https://github.com/nicpayne713/dotfiles/blob/main/starship/.config/starship.toml&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note you need a font installed patched with nerdfonts - I use JetBrains Mono&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now I have a beautiful prompt with relevant information that&amp;rsquo;s a dream to look at!&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/zsh-starship-prompt.png&#34; alt=&#34;starship&#34; title=&#34;A starship prompt&#34; /&gt;&#xA;&lt;p&gt;I have configured my starship to show me relevant &lt;code&gt;git status&lt;/code&gt; options (stashes, untracked files, etc etc.)&#xA;I also have starship show me if I&amp;rsquo;m in a git repo, what branch I&amp;rsquo;m on, if I&amp;rsquo;m in a python project and if so what virtual environment is active.&#xA;I do some work in AWS at work and so I have starship show me if my &lt;code&gt;aws cli&lt;/code&gt; is configured to the right region for whichever project I&amp;rsquo;m in!&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a billion more options and after a few minutes of play it becomes really easy and intuitive to customize colors, icons, etc.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>self-hosted-media</title>
    <id>https://pype.dev/self-hosted-media/</id>
    <updated>2022-03-24T00:00:00Z</updated>
    <published>2022-03-24T00:00:00Z</published>
    <link href="https://pype.dev/self-hosted-media/" rel="alternate" type="text/html"></link>
    <summary type="text">Self-hosting 1 or several media servers is another common homelab use-case. Getting content for your media servers is up to you, but I&#39;ll show a few ways...</summary>
    <content type="html">&lt;p&gt;Self-hosting 1 or several media servers is another common homelab use-case.&#xA;Getting content for your media servers is up to you, but I&amp;rsquo;ll show a few ways here to get content somewhat easily!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;YouTube Disclaimer at Bottom&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-get&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;you-get&lt;/span&gt; &lt;a href=&#34;#you-get&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;you-get&lt;/code&gt; is a nice cli for grabbing media content off the web.&lt;/p&gt;&#xA;&lt;h3 id=&#34;installation&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Installation&lt;/span&gt; &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;pip install you-get&lt;/code&gt; or use ad-hoc with &lt;code&gt;pipx run you-get &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Usage&lt;/span&gt; &lt;a href=&#34;#usage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;For example if I wanted to catch up on ancient Chinese military tactics I may go for &lt;code&gt;The Art of War&lt;/code&gt; off the Internet Archive&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox  🌱 main 🗑️  ×3🛤️  ×6via 🐍 v3.8.11 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  took 15s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ you-get https://archive.org/details/art_of_war_librivox -i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Site:       Archive.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Title:      The Art of War : Sun Tzu : Free Download, Borrow, and Streaming : Internet Archive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type:       MP3 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;audio/mpeg&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Size:       3.87 MiB &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4055167&lt;/span&gt; Bytes&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;the &lt;code&gt;-i&lt;/code&gt; is showing me the info of what would be downloaded without the flag (it&amp;rsquo;s like a dry 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;sandbox  🌱 main 🗑️  ×3🛤️  ×6via 🐍 v3.8.11 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ you-get https://archive.org/details/art_of_war_librivox&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Site:       Archive.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Title:      The Art of War : Sun Tzu : Free Download, Borrow, and Streaming : Internet Archive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type:       MP3 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;audio/mpeg&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Size:       3.87 MiB &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4055167&lt;/span&gt; Bytes&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Downloading The Art of War : Sun Tzu : Free Download, Borrow, and Streaming : Internet Archi.mp3 ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 100% &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;  3.9/  3.9MB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ├████████████████████████████████████████████████████████████┤&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1/1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;m&#34;&gt;917&lt;/span&gt; kB/s&#xA;&lt;/span&gt;&lt;/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;Now I can toss that mp3 onto my &lt;code&gt;booksonic&lt;/code&gt; server and study for world domination while I do the dishes!&lt;/p&gt;&#xA;&lt;h2 id=&#34;pytube&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;pytube&lt;/span&gt; &lt;a href=&#34;#pytube&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;pytube&lt;/code&gt; is a python implementation of a &lt;a href=&#34;##YouTube&#34;&gt;youtube downloader &lt;/a&gt; that works at the command line or in python!&lt;/p&gt;&#xA;&lt;h3 id=&#34;installation-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Installation&lt;/span&gt; &lt;a href=&#34;#installation-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pytube.io/en/latest/&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;pip install pytube&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;usage-1&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Usage&lt;/span&gt; &lt;a href=&#34;#usage-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;pytube&lt;/code&gt; has a lot of functionality, but a quick one would be the &lt;code&gt;--list&lt;/code&gt; so you can see what qualities are 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;sandbox   main ️  ×3️  ×7via  v3.8.11 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  took 2m49s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ pytube https://www.youtube.com/watch&lt;span class=&#34;se&#34;&gt;\?&lt;/span&gt;v&lt;span class=&#34;se&#34;&gt;\=&lt;/span&gt;LDU_Txk06tM  --list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Loading video...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;17&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/3gpp&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;8fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4v.20.3&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;18&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.42001E&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;22&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.64001F&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;313&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2160p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;401&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2160p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.12M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;271&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1440p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;400&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1440p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.12M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;137&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1080p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.640028&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;248&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1080p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;399&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1080p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.08M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;136&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d401f&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;247&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;398&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.05M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;135&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;480p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d401f&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;244&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;480p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;397&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;480p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.04M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;134&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d401e&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;243&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;396&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.01M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;133&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;240p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d4015&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;242&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;240p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;395&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;240p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.00M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;160&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d400c&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;278&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;394&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.00M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;video&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;139&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.5&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;audio&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;140&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;128kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;audio&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;249&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;50kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;opus&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;audio&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;250&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;70kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;opus&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;audio&amp;#34;&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;&amp;lt;Stream: &lt;span class=&#34;nv&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;251&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;160kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;opus&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;progressive&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; &lt;span class=&#34;nv&#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;audio&amp;#34;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;pytube &amp;lt;url&amp;gt; --itag &amp;lt;&amp;gt;&lt;/code&gt; will download the specific &lt;code&gt;itag&lt;/code&gt; from the list.&lt;/p&gt;&#xA;&lt;p&gt;Notice that some &lt;code&gt;itags&lt;/code&gt; are videos and others audio - so you can download just the music of a YT video.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;pytube&lt;/code&gt; also works in python&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;sandbox&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;n&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.8.11&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pytube&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YouTube&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sandbox&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;n&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.8.11&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&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;YouTube&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://www.youtube.com/watch?v=LDU_Txk06tM&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;streams&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&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;Stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;17&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/3gpp&amp;#34;&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;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;8fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4v.20.3&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;18&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.42001E&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;22&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.64001F&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;313&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;2160p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;401&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;2160p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.12M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;271&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;1440p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;400&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;1440p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.12M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;137&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;1080p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.640028&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;248&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;1080p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;399&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;1080p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.08M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;136&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d401f&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;247&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;398&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;720p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.05M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;135&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;480p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d401f&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;244&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;480p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;397&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;480p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.04M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;134&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d401e&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;243&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;396&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;360p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.01M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;133&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;240p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d4015&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;242&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;240p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;395&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;240p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.00M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;160&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;avc1.4d400c&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;278&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/webm&amp;#34;&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;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vp9&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;394&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;video/mp4&amp;#34;&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;s2&#34;&gt;&amp;#34;144p&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;30fps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vcodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;av01.0.00M.08&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;video&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;139&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.5&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;audio&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;140&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/mp4&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;128kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mp4a.40.2&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;audio&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;249&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;50kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;opus&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;audio&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;250&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;70kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;opus&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;audio&amp;#34;&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;o&#34;&gt;&amp;lt;&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;n&#34;&gt;itag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;251&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mime_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;audio/webm&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;160kbps&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acodec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;opus&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progressive&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; &lt;span class=&#34;nb&#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;audio&amp;#34;&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;youtube-frontends&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;YouTube Frontends&lt;/span&gt; &lt;a href=&#34;#youtube-frontends&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s 2 really good options for self-hosting a YT front-end&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/bbilly1/tubearchivist&#34;&gt;Tube Archivist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/Tzahi12345/YoutubeDL-Material&#34;&gt;YouTubeDL-Material&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;They have their pros and cons.&#xA;You can also build yourself with the above utilities and use Plex or Jellyfin to serve up videos&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Your self-hosting journey is up to you!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;youtube&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;YouTube&lt;/span&gt; &lt;a href=&#34;#youtube&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Downloading YouTube videos is a bit of a sore topic&amp;hellip; Mainly you don&amp;rsquo;t to hurt creators who rely on YT ad revenue for their livlihood.&lt;/p&gt;&#xA;&lt;p&gt;Then again, maybe you&amp;rsquo;re a vigilante who knows that YT also monetizes videos for their &lt;em&gt;own&lt;/em&gt; gain and that the creators don&amp;rsquo;t see that money either!&lt;/p&gt;&#xA;&lt;p&gt;The solution is pretty easy and is 2-fold&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download YT videos&lt;/li&gt;&#xA;&lt;li&gt;Personally support the content creators you follow via paypall, patreon, or whatever else they might have set-up&amp;hellip;. even a buck or two a month is more than they&amp;rsquo;d get from your ad revenue explicitly plus it all goes to them!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Skimpy</title>
    <id>https://pype.dev/skimpy/</id>
    <updated>2022-03-23T00:00:00Z</updated>
    <published>2022-03-23T00:00:00Z</published>
    <link href="https://pype.dev/skimpy/" rel="alternate" type="text/html"></link>
    <summary type="text">I work with data a lot, but the nature of my job isn&#39;t to dive super deep into a small amount of datasets, I&#39;m often jumping between several projects every...</summary>
    <content type="html">&lt;h2 id=&#34;eda&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;EDA&lt;/span&gt; &lt;a href=&#34;#eda&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I work with data a lot, but the nature of my job isn&amp;rsquo;t to dive super deep into a small amount of datasets,&#xA;I&amp;rsquo;m often jumping between several projects every day and need to just get a super quick glance at some tables to get a high level view.&lt;/p&gt;&#xA;&lt;p&gt;When I&amp;rsquo;m doing more interactive exploration I&amp;rsquo;ve graduated from Jupyter cells with &lt;code&gt;df_N.head()&lt;/code&gt; to using an amazing tool called &lt;a href=&#34;https://www.visidata.org/&#34;&gt;visidata&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, Visidata is a terminal based application and I&amp;rsquo;m often in an iPython console&amp;hellip; so is there a way to move even faster for my super quick summary views?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;yes!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;skimpy&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Skimpy&lt;/span&gt; &lt;a href=&#34;#skimpy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First thing to do is &lt;code&gt;pip install skimpy&lt;/code&gt; and then it&amp;rsquo;s as easy to get some summary stats with &lt;code&gt;skimpy &amp;lt;data&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/skimpy-zsh.png&#34; alt=&#34;Skimpy ZSH&#34; title=&#34;A fancy data summary in the shell&#34; /&gt;&#xA;&lt;p&gt;This is super nice for seeing missing values in particular as well as the distribution shape of the data.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ipython&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;iPython&lt;/span&gt; &lt;a href=&#34;#ipython&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;But wait&amp;hellip; I just said I&amp;rsquo;m normally in an iPython session but that was called from zsh.. If I&amp;rsquo;m hoping back into zsh I might as well use visidata to have more powerful exploration at my fingertips.&#xA;So&amp;hellip; can I see this table quickly without breaking my iPython workflow?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Of course you can with magic!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/skimpy-ipython.png&#34; alt=&#34;Skimpy iPython&#34; title=&#34;A fancy data summary in iPython&#34; /&gt;&#xA;&lt;p&gt;The above assumes you&amp;rsquo;re looking at a file, like you would in the terminal.&#xA;&lt;code&gt;skimpy&lt;/code&gt; works even better in iPython with &lt;code&gt;from skimpy import skim&lt;/code&gt; then pass any DataFrame to &lt;code&gt;skim&lt;/code&gt;!&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/skimpy-ipython2.png&#34; alt=&#34;Skimpy iPython2&#34; title=&#34;A fancy data summary in iPython&#34; /&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Truenas-And-Wireguard</title>
    <id>https://pype.dev/truenas-and-wireguard/</id>
    <updated>2022-03-23T00:00:00Z</updated>
    <published>2022-03-23T00:00:00Z</published>
    <link href="https://pype.dev/truenas-and-wireguard/" rel="alternate" type="text/html"></link>
    <summary type="text">One of the most common use cases for self-hosting anything is a file share system. I have been a fan of TrueNAS for a while. I currently use TrueNAS Core at...</summary>
    <content type="html">&lt;h2 id=&#34;nas&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;NAS&lt;/span&gt; &lt;a href=&#34;#nas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One of the most common use cases for self-hosting anything is a file share system.&#xA;I have been a fan of &lt;a href=&#34;https://www.truenas.com/&#34;&gt;TrueNAS&lt;/a&gt; for a while.&#xA;I currently use TrueNAS Core at home, and plan to consider transitioning to TrueNAS Scale soon.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Blog post forthcoming on that!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;vpn&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;VPN&lt;/span&gt; &lt;a href=&#34;#vpn&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t write a ton about homelabbing yet but one of the first things to set up whether you have a massive homelab or a little raspberry pi would be a self-hosted VPN.&#xA;I have notes on wireguard &lt;a href=&#34;%22/wireguard%22&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I finally have a need to put my TrueNAS box on my wireguard network in order to transfer files to other devices that are outside my LAN.&lt;/p&gt;&#xA;&lt;p&gt;There is a handy tutorial on setting this up via the GUI &lt;a href=&#34;https://www.truenas.com/docs/core/network/wireguard/&#34;&gt;here&lt;/a&gt;.&#xA;They walk you through setting up 2 tunables wireguard. One to enable the the connection and one to setup the network interface.&#xA;Next you create a &lt;code&gt;Post Init&lt;/code&gt; script which will check that the right directories exist and will copy the wireguard config that hasn&amp;rsquo;t been made yet to the proper location and finally starts wireguard.&lt;/p&gt;&#xA;&lt;p&gt;The above is just copy/paste from the tutorial but the final step, although not super tricky, isn&amp;rsquo;t the same for everyone as it depends on your wireguard config and network setup.&lt;/p&gt;&#xA;&lt;p&gt;The final step is for you create the relevant wireguard config (see my post but I just use &lt;code&gt;pivpn -a&lt;/code&gt;) and send that config over to your TrueNAS box!&lt;/p&gt;&#xA;&lt;p&gt;For me this final work flow looked 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;ssh user@vpn-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pivpn -a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;follow prompts&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;scp ~/configs/truenas.conf root@&amp;lt;truenas ip&amp;gt;:/root/wg0.conf&#xA;&lt;/span&gt;&lt;/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;bug&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bug?&lt;/span&gt; &lt;a href=&#34;#bug&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The script in the tutorial for starting the wireguard service is straight forward enough however my TrueNAS box didn&amp;rsquo;t get the wireguard interface up and running on reboot.&lt;/p&gt;&#xA;&lt;p&gt;Easy enough solution:&lt;/p&gt;&#xA;&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 root@&amp;lt;truenas ip&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/etc/rc.d/wireguard start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We can check that the interface is now working with &lt;code&gt;ifconfig&lt;/code&gt; and should 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;wg0: &lt;span class=&#34;nv&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;8051&amp;lt;UP,POINTOPOINT,RUNNING,MULTICAST&amp;gt; metric &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mtu &lt;span class=&#34;m&#34;&gt;1420&lt;/span&gt;&#xA;&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;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;80000&amp;lt;LINKSTATE&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        inet x.x.x.x --&amp;gt; x.x.x.x netmask 0xffffff00&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        groups: tun&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        nd6 &lt;span class=&#34;nv&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;101&amp;lt;PERFORMNUD,NO_DAD&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Opened by PID &lt;span class=&#34;m&#34;&gt;1325&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;gotcha&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Gotcha!&lt;/span&gt; &lt;a href=&#34;#gotcha&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s another thing I had to navigate when setting this up.&lt;/p&gt;&#xA;&lt;p&gt;My &lt;code&gt;pivpn&lt;/code&gt; configuration sets the endpoint for my wireguard clients to &lt;code&gt;paynepride.com:&amp;lt;port forwarded to wireguard server&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;What this means is that when I check the wireguard config for TrueNAS which is on my home network it resolves &lt;code&gt;paynepride.com&lt;/code&gt; to the server I have running my reverse proxy.&#xA;However! My reverse proxy is not responsible for my vpn traffic and so the traffic was just getting dropped - instead I needed to change the wireguard config just for my truenas box to piont to the local address of my vpn server.&#xA;This really threw me for a loop today but is just another reminder that if you have network problems it&amp;rsquo;s probably DNS&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Give her the &amp;lsquo;ol reboot and now if I check &lt;code&gt;wg&lt;/code&gt; I should see some traffic on my wireguard tunnel!&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/truenas-wireguard.png&#34; alt=&#34;TrueNAS Wireguard&#34; title=&#34;TrueNAS and Wireguard&#34; /&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pyclean</title>
    <id>https://pype.dev/pyclean/</id>
    <updated>2022-03-22T00:00:00Z</updated>
    <published>2022-03-22T00:00:00Z</published>
    <link href="https://pype.dev/pyclean/" rel="alternate" type="text/html"></link>
    <summary type="text">I like to keep my workspace clean and one thing that I don&#39;t personally love looking at is the directory that pops up after running some code. The files that...</summary>
    <content type="html">&lt;p&gt;I like to keep my workspace clean and one thing that I don&amp;rsquo;t personally love looking at is the &lt;code&gt;__pycache__&lt;/code&gt; directory that pops up after running some code.&#xA;The &lt;code&gt;*.pyc&lt;/code&gt; files that show up there are python bytecode and they are cached to make subsequent runs a tad faster.&#xA;My stuff never really needs this bonus speed boost and so I came across a neat tool called &lt;code&gt;pyclean&lt;/code&gt;!&lt;/p&gt;&#xA;&lt;h2 id=&#34;pyclean&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Pyclean&lt;/span&gt; &lt;a href=&#34;#pyclean&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The easiest way (&lt;strong&gt;in my opinion&lt;/strong&gt;) to run &lt;code&gt;pyclean&lt;/code&gt; is to just use &lt;code&gt;pipx 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;sandbox/src  🌱 main 🗑️  ×3🛤️  ×2via 🐍 v3.8.11 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  took 9s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;abcmeta.py  __pycache__  python-print-align.py  system-monitor-psutils.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;sandbox/src  🌱 main 🗑️  ×3🛤️  ×2via 🐍 v3.8.11 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&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 pyclean .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⚠️  pyclean is already on your PATH and installed at /usr/bin/pyclean. Downloading and running anyway.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cleaning directory .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Total &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; files, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; directories removed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sandbox/src  🌱 main 🗑️  ×3🛤️  ×2via 🐍 v3.8.11 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sandbox&lt;span class=&#34;o&#34;&gt;)&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&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;abcmeta.py  python-print-align.py  system-monitor-psutils.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;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-not-bash&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Why not bash?&lt;/span&gt; &lt;a href=&#34;#why-not-bash&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You could accomplish something similar with &lt;code&gt;rm **/*.pyc&lt;/code&gt; or &lt;code&gt;find -n &#39;*.py?&#39; -delete&lt;/code&gt; but there&amp;rsquo;s a chance you&amp;rsquo;ll find something you don&amp;rsquo;t love gone.&#xA;Also this won&amp;rsquo;t help our poor Windows friends out there!&#xA;&lt;code&gt;pyclean&lt;/code&gt; is fully python so it&amp;rsquo;s OS independent.&lt;/p&gt;&#xA;&lt;h2 id=&#34;credits&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Credits!&lt;/span&gt; &lt;a href=&#34;#credits&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/bittner/pyclean&#34;&gt;repo&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Psutil-01</title>
    <id>https://pype.dev/psutils-01/</id>
    <updated>2022-03-16T00:00:00Z</updated>
    <published>2022-03-16T00:00:00Z</published>
    <link href="https://pype.dev/psutils-01/" rel="alternate" type="text/html"></link>
    <summary type="text">Mike Driscoll has been posting some awesome posts about lately. I&#39;m interested in making my own system monitoring dashboard now using this library. I don&#39;t...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://twitter.com/driscollis&#34;&gt;Mike Driscoll&lt;/a&gt; has been posting some awesome posts about &lt;code&gt;psutil&lt;/code&gt; lately.&#xA;I&amp;rsquo;m interested in making my own system monitoring dashboard now using this library.&#xA;I don&amp;rsquo;t expect it to compete with Netdata or Glances but it&amp;rsquo;ll just be for fun to see how Python can solve this problem!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Repo coming soon&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-code&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Example code:&lt;/span&gt; &lt;a href=&#34;#example-code&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a short snippit to get used/available/total RAM and disk space (on partitions that you probably care about)&lt;/p&gt;&#xA;&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;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;psutil&lt;/span&gt;&#xA;&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;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;System Memory used: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;psutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual_memory&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;used&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;1024&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;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; GB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;System Memory available: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;psutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual_memory&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;available&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;1024&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;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; GB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;System Memory total: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;psutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual_memory&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;total&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;1024&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;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; GB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hostname: &lt;/span&gt;&lt;span class=&#34;si&#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;gethostname&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;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;partitions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;disk_partitions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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;part&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;partitions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mountpoint&lt;/span&gt;&#xA;&lt;/span&gt;&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;snap&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;boot&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;disk&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;disk_usage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;Usage at &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; on &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;device&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;disk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;used&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;1024&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;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; GB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;Free at &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; on &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;device&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;disk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;free&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;1024&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;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;GB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&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;Total at &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; on &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;part&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;device&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;disk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total&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;1024&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;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;GB&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;Bonus Ipython tip! Save this to a script called my_script.py and in Ipython you can %run -m my_script to run 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;project ↪ main v3.8.11 ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ %run -m system-monitor-psutils&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;System Memory used: &lt;span class=&#34;m&#34;&gt;25&lt;/span&gt; GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;System Memory available: &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;System Memory total: &lt;span class=&#34;m&#34;&gt;31&lt;/span&gt; GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hostname: ryzen-3600x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Usage at / on /dev/nvme1n1p2: &lt;span class=&#34;m&#34;&gt;81&lt;/span&gt; GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Free at / on /dev/nvme1n1p2: &lt;span class=&#34;m&#34;&gt;351&lt;/span&gt; GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Total at / on /dev/nvme1n1p2: &lt;span class=&#34;m&#34;&gt;456&lt;/span&gt; GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Mu</title>
    <id>https://pype.dev/mu/</id>
    <updated>2022-03-15T00:00:00Z</updated>
    <published>2022-03-15T00:00:00Z</published>
    <link href="https://pype.dev/mu/" rel="alternate" type="text/html"></link>
    <summary type="text">If you work with a template for several projects then you might sometimes need to do the same action across all repos. A good example of this is updating a...</summary>
    <content type="html">&lt;p&gt;If you work with a template for several projects then you might sometimes need to do the same action across all repos.&#xA;A good example of this is updating a package in &lt;code&gt;requirements.txt&lt;/code&gt; in every project, or refactoring a common module.&#xA;If you have several repos to do this across then it can be time consuming&amp;hellip; enter &lt;code&gt;mu-repo&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;mu&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Mu&lt;/span&gt; &lt;a href=&#34;#mu&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://fabioz.github.io/mu-repo/&#34;&gt;mu-repo&lt;/a&gt; is an awesome cli tool for working with multiple git repositories at the same time.&#xA;There are several things you can do:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;mu status&lt;/code&gt; will give you the &lt;code&gt;git status&lt;/code&gt; of every registered repo (see below)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mu sh&lt;/code&gt; will let you execute system level commands in every repo&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mu stash&lt;/code&gt; will stash all changes across all registered repos&lt;/li&gt;&#xA;&lt;li&gt;There&amp;rsquo;s literally a ton more but these are some handy ones&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;registration&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Registration&lt;/span&gt; &lt;a href=&#34;#registration&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;mu&lt;/code&gt; tracks its own &lt;code&gt;groups&lt;/code&gt;, and there is a default group when no particular one is active.&#xA;It&amp;rsquo;s as simple as &lt;code&gt;mu register proj1 prog2 ...&lt;/code&gt; to get repos registered&lt;/p&gt;&#xA;&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;❯ mu register proj1 proj2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Repository: proj1 registered&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Repository: proj2 registered&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mu 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;  proj1 : 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    No commits yet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Untracked files:&#xA;&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 include in 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;    requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    nothing added to commit but untracked files present &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add&amp;#34;&lt;/span&gt; to track&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  proj2 : 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    No commits yet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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 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 rm --cached &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;    new file:   requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;working-with-mu&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Working with mu&lt;/span&gt; &lt;a href=&#34;#working-with-mu&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As you can see above I have two projects each with a &lt;code&gt;requirements.txt&lt;/code&gt; added but not committed yet.&#xA;Using &lt;code&gt;mu&lt;/code&gt; I can stage this change across both repos at 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mu add requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  proj1 : git add requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  proj2 : git add requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then as you might imagine, I can make the commit in each 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mu commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Add requirements.txts&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  proj1 : git commit -m Add requirements.txts&#xA;&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;main &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;root-commit&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 18376d7&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Add requirements.txts&#xA;&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; file changed, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; insertion&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;    create mode &lt;span class=&#34;m&#34;&gt;100644&lt;/span&gt; requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  proj2 : git commit -m Add requirements.txts&#xA;&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;main &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;root-commit&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 18376d7&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Add requirements.txts&#xA;&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; file changed, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; insertion&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;    create mode &lt;span class=&#34;m&#34;&gt;100644&lt;/span&gt; requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mu-groups&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;mu groups&lt;/span&gt; &lt;a href=&#34;#mu-groups&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The other thing I got a lot of use out of recently was &lt;code&gt;mu&lt;/code&gt;&amp;rsquo;s groups.&#xA;At work I have about 40 repos cloned that are all based on the same kedro pipeline template.&#xA;Some of these projects have been deprecated.&#xA;I also have several more repos that are not kedro template - custom libraries or something.&#xA;&lt;code&gt;group&lt;/code&gt; let me utilize &lt;code&gt;mu&lt;/code&gt; across different groups of repos.&lt;/p&gt;&#xA;&lt;p&gt;Say &lt;code&gt;proj2&lt;/code&gt; is a deprecated project that I don&amp;rsquo;t need to worry about making changes to anymore.&#xA;I don&amp;rsquo;t just have to unregister it, instead I can make a group called &amp;ldquo;active&amp;rdquo; and register &lt;code&gt;proj1&lt;/code&gt; in that 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mu group add active --empty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/personal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mu group add deprecated --empty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/personal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mu group&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  active&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* deprecated&#xA;&lt;/span&gt;&lt;/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;The &lt;code&gt;*&lt;/code&gt; tells me which group is active.&#xA;The &lt;code&gt;--empty&lt;/code&gt; flag tells &lt;code&gt;mu&lt;/code&gt; to not add all registered repos to that group.&#xA;If I don&amp;rsquo;t want to use any groups then &lt;code&gt;mu group reset&lt;/code&gt; will go back to the default group with all registered repos.&lt;/p&gt;&#xA;&lt;p&gt;With groups I can register only the repos that I want to be working across in their own group and not worry about affecting other repos with my batch changes!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Wireguard</title>
    <id>https://pype.dev/wireguard/</id>
    <updated>2022-03-12T00:00:00Z</updated>
    <published>2022-03-12T00:00:00Z</published>
    <link href="https://pype.dev/wireguard/" rel="alternate" type="text/html"></link>
    <summary type="text">Virtual Private Networks are a big deal, and this shouldn&#39;t be considered anything even close to a guide on using them. Here are just my notes and some setup...</summary>
    <content type="html">&lt;h2 id=&#34;vpn&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;VPN&lt;/span&gt; &lt;a href=&#34;#vpn&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Virtual Private Networks are a big deal, and this shouldn&amp;rsquo;t be considered anything even close to a guide on using them.&#xA;Here are just my notes and some setup for how I use &lt;a href=&#34;https://www.wireguard.com/&#34;&gt;wireguard&lt;/a&gt; at home.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wireguard&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Wireguard&lt;/span&gt; &lt;a href=&#34;#wireguard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wireguard is an awesome peer-to-peer VPN tunnel that makes it really easy for me to get into my home network when I&amp;rsquo;m out and about.&#xA;My main reasons for this are 1. I don&amp;rsquo;t trust public wi-fi and 2. I want to use pi-hole for ad blocking when I&amp;rsquo;m not at home&lt;/p&gt;&#xA;&lt;p&gt;Wireguard can be configured as a &amp;ldquo;peer-to-site&amp;rdquo; VPN tunnel as well.&#xA;My vpn setup let&amp;rsquo;s me jump to various machines on my network from anywhere!&lt;/p&gt;&#xA;&lt;p&gt;I use &lt;a href=&#34;https://pivpn.io/&#34;&gt;pivpn&lt;/a&gt; in a VM that&amp;rsquo;s already running &lt;code&gt;pi-hole&lt;/code&gt; to host my wireguard server.&#xA;It&amp;rsquo;s super easy to setup just by following the instructions on the pivpn site.&lt;/p&gt;&#xA;&lt;p&gt;The reason I like it is that I have a nice &lt;code&gt;cli&lt;/code&gt; for managing wireguard configs.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dumbledore@pihole-vpn:~$ pivpn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;::: Control all PiVPN specific functions!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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: pivpn &amp;lt;command&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;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;:::    -a, add              Create a client conf profile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::    -c, clients          List any connected clients to the server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::    -d, debug            Start a debugging session &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; having trouble&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::    -l, list             List all clients&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::   -qr, qrcode           Show the qrcode of a client &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; use with the mobile app&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::    -r, remove           Remove a client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::  -off, off              Disable a user&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::   -on, on               Enable a user&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::    -h, &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;             Show this &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt; dialog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::    -u, uninstall        Uninstall pivpn from your system!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::   -up, update           Updates PiVPN Scripts&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:::   -bk, backup           Backup VPN configs and user profiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When I&amp;rsquo;m ready to add a new client to my &lt;code&gt;wg&lt;/code&gt; network, it&amp;rsquo;s as easy as &lt;code&gt;pivpn add&lt;/code&gt; and follow the instructions.&#xA;The easiest part here is that you&amp;rsquo;ll be given a QR code in the terminal that you can just scan with the client (like a smart phone) and you&amp;rsquo;ll have your wireguard config handled by the app (oh right, download the wireguard app) in no time!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Abstract-Base-Class</title>
    <id>https://pype.dev/abstract-base-class/</id>
    <updated>2022-03-09T00:00:00Z</updated>
    <published>2022-03-09T00:00:00Z</published>
    <link href="https://pype.dev/abstract-base-class/" rel="alternate" type="text/html"></link>
    <summary type="text">I don&#39;t do a lot of OOP currently, but I have been on a few heavy OOP projects and this and from would&#39;ve been super nice to know about!</summary>
    <content type="html">&lt;h2 id=&#34;abcmeta&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;ABCMeta&lt;/span&gt; &lt;a href=&#34;#abcmeta&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t do a lot of OOP currently, but I have been on a few heavy OOP projects and this &lt;code&gt;ABCMeta&lt;/code&gt; and &lt;code&gt;abstractmethod&lt;/code&gt; from &lt;code&gt;abc&lt;/code&gt; would&amp;rsquo;ve been super nice to know about!&lt;/p&gt;&#xA;&lt;p&gt;If you are creating a library with classes that you expect your users to extend, but you want to ensure that any extension has explicit methods defined then this is 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;abc&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ABCMeta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abstractmethod&lt;/span&gt;&#xA;&lt;/span&gt;&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;Family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metaclass&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ABCMeta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&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;@abstractmethod&lt;/span&gt;&#xA;&lt;/span&gt;&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_dad&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;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Any extension of the Family class must implement a `get_dad` method&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;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyFamily&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&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;/code&gt;&lt;/pre&gt;&lt;p&gt;If I try to instantiate &lt;code&gt;MyFamily&lt;/code&gt; I will not be allowed:&lt;/p&gt;&#xA;&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;err&#34;&gt;❯&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my_fam&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyFamily&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&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;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; &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;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;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ecb8e21ce815&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;                                                     &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;&#xA;&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;Can&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;t instantiate abstract class MyFamily with abstract methods get_dad&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/py-abc-meta.png&#34; alt=&#34;abcmetadata&#34; title=&#34;ABC Metadata&#34; /&gt;&#xA;&lt;p&gt;In order for me to extend &lt;code&gt;Family&lt;/code&gt; I have to implement the method &lt;code&gt;get_dad&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;MyFamily&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&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_dad&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;s2&#34;&gt;&amp;#34;Me&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now everything works as expected and I can sleep well knowing no one can extend my base class without creating methods I know they 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;&#xA;&lt;/span&gt;&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_fam&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyFamily&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&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_fam&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_dad&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&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;Me&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;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Python-F-String-Align</title>
    <id>https://pype.dev/python-f-string-align/</id>
    <updated>2022-03-08T00:00:00Z</updated>
    <published>2022-03-08T00:00:00Z</published>
    <link href="https://pype.dev/python-f-string-align/" rel="alternate" type="text/html"></link>
    <summary type="text">I am personally trying to use instead of in all of my code, however I learned from [@Python-Hub] that you can align printouts using with -strings!.</summary>
    <content type="html">&lt;p&gt;I am personally trying to use &lt;code&gt;logger&lt;/code&gt; instead of &lt;code&gt;print&lt;/code&gt; in all of my code,&#xA;however I learned from [@Python-Hub] that you can align printouts using &lt;code&gt;print&lt;/code&gt; with &lt;code&gt;f&lt;/code&gt;-strings!.&lt;/p&gt;&#xA;&lt;p&gt;This little python script shows how options in the &lt;code&gt;f&lt;/code&gt;-string can format the printout.&lt;/p&gt;&#xA;&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;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;random&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;variables&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Foo Bar Baz Bing&amp;#34;&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;scores&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;random&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sample&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;1&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;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;variables&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&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;*&amp;#34;&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;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&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;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;With &amp;#39;varable&amp;#39; left aligned&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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;varable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;zip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;variables&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scores&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&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;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;varable&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;10&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;score&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;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;*&amp;#34;&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;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&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;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;With &amp;#39;varable&amp;#39; right aligned&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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;varable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;zip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;variables&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scores&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&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;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;varable&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;gt;15&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;score&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;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;*&amp;#34;&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;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&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;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;With &amp;#39;varable&amp;#39; center aligned&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&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;varable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;zip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;variables&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scores&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&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;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;varable&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;^5&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;score&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;/code&gt;&lt;/pre&gt;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/py-print-align.png&#34; alt=&#34;pyprintalign&#34; title=&#34;Align f-string printing&#34; /&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Python-Builtin-Calendar</title>
    <id>https://pype.dev/python-builtin-calendar/</id>
    <updated>2022-03-08T00:00:00Z</updated>
    <published>2022-03-08T00:00:00Z</published>
    <link href="https://pype.dev/python-builtin-calendar/" rel="alternate" type="text/html"></link>
    <summary type="text">I almost exclusively use Python for my job and have been eye-balls deep in it for almost 5 years but I really lack in-depth knowledge of builtins. I recently...</summary>
    <content type="html">&lt;h2 id=&#34;being-lazy&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Being lazy&lt;/span&gt; &lt;a href=&#34;#being-lazy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I almost exclusively use Python for my job and have been eye-balls deep in it for almost 5 years but I really lack in-depth knowledge of builtins.&#xA;I recently learned of an awesome builtin called &lt;code&gt;calendar&lt;/code&gt;  that has way more than I know about for sure but I&amp;rsquo;m glad I know it&amp;rsquo;s here now!&lt;/p&gt;&#xA;&lt;p&gt;I only needed it because I was too lazy to hard code the 7 weekdays into my module but it turns out there&amp;rsquo;s a lot of useful things like &lt;code&gt;calendar.isleap()&lt;/code&gt;!&lt;/p&gt;&#xA;&lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/builtin-calendar.png&#34; alt=&#34;builtin&#34; title=&#34;Python&#39;s builtin calendar&#34; /&gt;&#xA;## Future use&#xA;&lt;p&gt;I&amp;rsquo;m not exactly sure what will come my way where &lt;code&gt;calendar&lt;/code&gt; will be super relevant but like anything, I&amp;rsquo;m just glad to know it exists for when the time arises!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Dataframe-Memory-Usage</title>
    <id>https://pype.dev/dataframe-memory-usage/</id>
    <updated>2022-03-07T00:00:00Z</updated>
    <published>2022-03-07T00:00:00Z</published>
    <link href="https://pype.dev/dataframe-memory-usage/" rel="alternate" type="text/html"></link>
    <summary type="text">I have often wanted to dive into memory usage for pandas DataFrames when it comes to cloud deployment. If I have a python process running on a server at home...</summary>
    <content type="html">&lt;p&gt;I have often wanted to dive into memory usage for pandas DataFrames when it comes to cloud deployment.&#xA;If I have a python process running on a server at home I can use &lt;code&gt;glances&lt;/code&gt; or a number of other tools to diagnose a memory issue&amp;hellip;&#xA;However at work I normally deploy dockerized processes on AWS Batch and it&amp;rsquo;s much more challenging to get info on the dockerized process without more AWS integration that my team isn&amp;rsquo;t quite ready for.&#xA;So TIL that I can get some of the info I want from pandas directly!&lt;/p&gt;&#xA;&lt;h1 id=&#34;dataframe-info&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;DataFrame.info()&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I didn&amp;rsquo;t realize that &lt;code&gt;df.info()&lt;/code&gt; was able to give me more info than just dtypes and some summary stats&amp;hellip;&#xA;There is a kwarg &lt;code&gt;memory_usage&lt;/code&gt; that can configure what you need to get back, so &lt;code&gt;df.memory_usage=&amp;quot;deep&amp;quot;&lt;/code&gt; will give you how much RAM any given DataFrame is using!&#xA;Amazing tool for finding issues with joins or renegade source data 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;&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;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;&#xA;&lt;/span&gt;&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;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;memory_usage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;deep&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;img src=&#34;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/blog-media/df-memory-usage.png&#34; alt=&#34;DataFrame Memory Usage&#34; title=&#34;DataFrame Memory Usage&#34; /&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Adblock-Coverage</title>
    <id>https://pype.dev/adblock-coverage/</id>
    <updated>2022-03-07T00:00:00Z</updated>
    <published>2022-03-07T00:00:00Z</published>
    <link href="https://pype.dev/adblock-coverage/" rel="alternate" type="text/html"></link>
    <summary type="text">I run pi-hole at home for ad blocking and some internal DNS/DHCP handling.</summary>
    <content type="html">&lt;p&gt;I run pi-hole at home for ad blocking and some internal DNS/DHCP handling.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;pi hole posts on the way&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;One thing I&amp;rsquo;ve never put too much thought in is asking &amp;ldquo;how well am I doing at blocking?&amp;rdquo;&#xA;There&amp;rsquo;s lots of ways to measure that depending on what you care about but I just learned of &lt;a href=&#34;https://d3ward.github.io/toolz/adblock&#34;&gt;adblock tester&lt;/a&gt;.&#xA;It&amp;rsquo;s awesome and gave me a quick glimpse into how my pi-hole is performing on keeping my webpages clean and my DNS history private!&lt;/p&gt;&#xA;&lt;p&gt;Credits to &lt;a href=&#34;https://github.com/d3ward/toolz&#34;&gt;d3ward&lt;/a&gt; for the awesome tool!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Webservers-And-Indexes</title>
    <id>https://pype.dev/webservers-and-indexes/</id>
    <updated>2022-03-06T00:00:00Z</updated>
    <published>2022-03-06T00:00:00Z</published>
    <link href="https://pype.dev/webservers-and-indexes/" rel="alternate" type="text/html"></link>
    <summary type="text">I host a lot of services in my homelab, but they&#39;re mostly dockerized applications so I have never had to care much about how content gets served up. Today I...</summary>
    <content type="html">&lt;p&gt;I host a lot of services in my homelab, but they&amp;rsquo;re mostly dockerized applications so I have never had to care much about how content gets served up.&#xA;Today I had several little concepts click into place regarding webservers, and it was a similar experience to when I started homelabing and didn&amp;rsquo;t know what a &amp;ldquo;server&amp;rdquo; was in the first place.&lt;/p&gt;&#xA;&lt;h1 id=&#34;servers&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Servers&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;A &amp;ldquo;server&amp;rdquo; can have a lot of different meanings but specifically in my world it was a physical server, like my PowerEdge R610 which acts as my main &amp;ldquo;home server&amp;rdquo;.&#xA;But then on my server, I have other servers&amp;hellip; Jellyfin is my main media server - but that&amp;rsquo;s obviously not a hardware thing, that&amp;rsquo;s software.&#xA;This is certainly not a groundbreaking thing but it was a tiny piece to the puzzle that I was missing&amp;hellip; that &amp;ldquo;server&amp;rdquo; is highly contextual.&lt;/p&gt;&#xA;&lt;h1 id=&#34;webservers&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Webservers&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Something that confused the heck out of me when I first started down the road of having a server was what a webserver even was&amp;hellip;&#xA;I always thought the &amp;ldquo;webserver&amp;rdquo; was just &amp;ldquo;a server that hosts a website&amp;rdquo;&amp;hellip; and yes, that&amp;rsquo;s true, but also it wasn&amp;rsquo;t true in how I understood &amp;ldquo;server&amp;rdquo;.&#xA;It turns out that across my 40-odd dockerized services I have at home that I must have about 40-odd web servers running, each docker container is spinning up its own!&lt;/p&gt;&#xA;&lt;p&gt;So something I have wanted to do for a long time is put my theology notes online for my small group to access whenever they might want&amp;hellip; it doesn&amp;rsquo;t need to be fancy or anything.&#xA;My issue was not knowing what to even Google. I tried &amp;ldquo;How to serve up static html&amp;rdquo; but that kind of search is for people who know what a &amp;ldquo;static&amp;rdquo; site is - I am not one of those people.&#xA;I kept running across nginx and apache things, wordpress and other website building tools, etc.&#xA;In fact I only recently learned that JavaScript assets cann still be considered static so I am a complete baby in the web-dev space.&lt;/p&gt;&#xA;&lt;p&gt;What I really wanted was just a simple landing page with a link to each of my &amp;ldquo;posts&amp;rdquo; which are in the form of a single html file each that I can easily export from my tiddlywiki (I have a post about tiddlywiki &lt;a href=&#34;/tiddly-wiki&#34;&gt;here&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The first win &lt;code&gt;python -m http.server&lt;/code&gt; right in the directory I kept my html files in and that got me what I wanted functionally.&#xA;But then I wanted just a hair more organization&amp;hellip;&#xA;I started looking for a way to dynamically generate an index for a directory of html files but again the verbiage of that Google search just wasn&amp;rsquo;t helping me - I didn&amp;rsquo;t want anything complicated and I knew that what I wanted had to be easy&amp;hellip;&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-index&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;The Index&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Luckily I randomly came across a SO that mentioned a Linux utility called &lt;code&gt;tree&lt;/code&gt; which does exactly what I wanted!&lt;/p&gt;&#xA;&lt;p&gt;See my TIL on &lt;code&gt;tree&lt;/code&gt; &lt;a href=&#34;&#39;/tree&#39;&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So now it goes like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Take notes on X in my tiddlywiki&lt;/li&gt;&#xA;&lt;li&gt;Export that tiddler to a html file&lt;/li&gt;&#xA;&lt;li&gt;Put that html file into a &lt;code&gt;notes&lt;/code&gt; folder in my github repo for small group notes&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;tree&lt;/code&gt; to generate an &lt;code&gt;index.html&lt;/code&gt; of each of those files in the &lt;code&gt;notes&lt;/code&gt; directory&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;python -m http.server&lt;/code&gt; to start a web server that lands me at the &lt;code&gt;index.html&lt;/code&gt; and now I can click through to any post!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not fancy but it&amp;rsquo;s functional&amp;hellip;&#xA;This site/blog is built with markdown and &lt;a href=&#34;https://www.markata.dev&#34;&gt;markata&lt;/a&gt; and I wanted way more functionality in my tech notes.&#xA;But for this simple use case I learned a ton about &lt;em&gt;how&lt;/em&gt; content gets served up on a webpage and my small group benefits from the easy access as well!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Tree</title>
    <id>https://pype.dev/tree/</id>
    <updated>2022-03-06T00:00:00Z</updated>
    <published>2022-03-06T00:00:00Z</published>
    <link href="https://pype.dev/tree/" rel="alternate" type="text/html"></link>
    <summary type="text">I wanted a quick way to generate an for a directory of html files that grows by 1 or 2 files a week. I don&#39;t know any html (the files are exports from my...</summary>
    <content type="html">&lt;p&gt;I wanted a quick way to generate an &lt;code&gt;index.html&lt;/code&gt; for a directory of html files that grows by 1 or 2 files a week.&#xA;I don&amp;rsquo;t know any html (the files are exports from my &lt;a href=&#34;/tiddly-wiki&#34;&gt;tiddlywiki&lt;/a&gt;)&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;tree&lt;/code&gt; is just the answer.&lt;/p&gt;&#xA;&lt;p&gt;Say I have a file structure like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;./html-files&#xA;├── file1.html&#xA;└── file2.html&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To generate a barebones simple &lt;code&gt;index.html&lt;/code&gt; we can use tree as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;tree ./html-files -H &amp;quot;.&amp;quot; -L 1 -P &amp;quot;*.html&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;and get 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;&#xA;&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;&amp;lt;!DOCTYPE html&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;html&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;head&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;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/html; charset=UTF-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;meta&lt;/span&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;Author&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Made by &amp;#39;tree&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; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&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;GENERATOR&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;$Version: $ tree v1.8.0 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro $&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;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Directory Tree&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&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;style&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;text/css&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;o&#34;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;--&lt;/span&gt;&#xA;&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;k&#34;&gt;font-family&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ariel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;monospace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;sans-serif&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;P&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;normal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;font-family&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ariel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;monospace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;sans-serif&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;black&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;&#xA;&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;B&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;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;black&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;&#xA;&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;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;visited&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;normal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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; &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;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;mi&#34;&gt;0&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;kt&#34;&gt;px&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; &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;kt&#34;&gt;px&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;mi&#34;&gt;0&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;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;inline&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;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;link&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;normal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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; &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;mi&#34;&gt;0&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;kt&#34;&gt;px&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; &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;kt&#34;&gt;px&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;mi&#34;&gt;0&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;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;inline&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;A&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; &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;font-weight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;normal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;underline&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;yellow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;mi&#34;&gt;0&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;kt&#34;&gt;px&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; &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;kt&#34;&gt;px&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;mi&#34;&gt;0&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;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;inline&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;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;active&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;font-weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;normal&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;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;mi&#34;&gt;0&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;kt&#34;&gt;px&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; &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;kt&#34;&gt;px&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;mi&#34;&gt;0&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;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;inline&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;VERSION&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&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;kc&#34;&gt;small&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;font-family&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arial&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;sans-serif&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;NORM&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;black&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;FIFO&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;purple&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;CHAR&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;yellow&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;DIR&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;blue&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;BLOCK&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;yellow&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;LINK&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;aqua&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;SOCK&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;fuchsia&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;EXEC&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;green&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;&#xA;&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;--&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;&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;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&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;body&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;p&#34;&gt;&amp;gt;&lt;/span&gt;Directory Tree&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;&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;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;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&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;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&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;#34;./file1.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;file1.html&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;br&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;#34;./file2.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;file2.html&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;br&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;br&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0 directories, 2 files&#xA;&lt;/span&gt;&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;br&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&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;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;hr&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;VERSION&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;                 tree v1.8.0 © 1996 - 2018 by Steve Baker and Thomas Moore &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&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;                 HTML output hacked and copyleft © 1998 by Francesc Rocher &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&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;                 JSON output hacked and copyleft © 2014 by Florian Sesser &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&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;                 Charsets / OS/2 support © 2001 by Kyosuke Tokoro&#xA;&lt;/span&gt;&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;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;body&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;html&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;p&gt;which &lt;a href=&#34;/tree-index-example.html&#34;&gt;looks like this&lt;/a&gt; when you serve it up with &lt;code&gt;python -m http.server&lt;/code&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Traefik</title>
    <id>https://pype.dev/traefik/</id>
    <updated>2022-03-06T00:00:00Z</updated>
    <published>2022-03-06T00:00:00Z</published>
    <link href="https://pype.dev/traefik/" rel="alternate" type="text/html"></link>
    <summary type="text">If you don&#39;t know about traefik and you need a reverse-proxy then you might want to check it out. I used to use nginx for my reverse proxy but the config was...</summary>
    <content type="html">&lt;h1 id=&#34;traefik&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Traefik&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;If you don&amp;rsquo;t know about &lt;a href=&#34;https://doc.traefik.io/traefik/&#34;&gt;traefik&lt;/a&gt; and you need a reverse-proxy then you might want to check it out.&#xA;I used to use nginx for my reverse proxy but the config was over my head, and once it was working I was afraid to touch it.&#xA;Traefik brings a lot to the table, my main uses are reverse proxy and ip whitelisting, but it&amp;rsquo;s doing even more under the hood that I don&amp;rsquo;t have a full-grasp of yet.&lt;/p&gt;&#xA;&lt;p&gt;I like Traefik a lot because once I get some basic config up it&amp;rsquo;s incredibly easy to add services into my homelab whether they run on my primary server or not.&#xA;This will not be exhaustive but I&amp;rsquo;ll outline my simple setup process of traefik and how I add services whether they are in docker or not.&lt;/p&gt;&#xA;&lt;h1 id=&#34;docker&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Docker&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;In 2022 I&amp;rsquo;m still a docker fan-boy and I run my traefik instance in a docker container.&#xA;This isn&amp;rsquo;t necessary but I love the portability since my homelab is very dynamic at the moment.&#xA;And even if it wasn&amp;rsquo;t I&amp;rsquo;d still want to keep traefik in docker because deployment and updating are just so flipping easy&lt;/p&gt;&#xA;&lt;p&gt;A simple docker-compose file for traefik might 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;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;traefik&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&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;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;s2&#34;&gt;&amp;#34;traefik:v2.4&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;nt&#34;&gt;network_mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&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;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;s2&#34;&gt;&amp;#34;docker-data/traefik/traefik.toml:/etc/traefik/traefik.toml:ro&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;docker-data/traefik/config.yml:/etc/traefik/config.yml:ro&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;docker-data/traefik/letsencrypt:/letsencrypt:rw&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;/var/run/docker.sock:/var/run/docker.sock:ro&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# for auto-discovery&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&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;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;s2&#34;&gt;&amp;#34;{{ traefik_environment_variables }}&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;nt&#34;&gt;restart_policy&lt;/span&gt;&lt;span class=&#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;nt&#34;&gt;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;1g&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;h1 id=&#34;ansible-deployment&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Ansible deployment&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;I plan to have more on my homelab and Ansible on this site eventually&amp;hellip;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I use Ansible to deploy most of my services at home, including traefik. My main homelab repo is &lt;a href=&#34;https://github.com/nicpayne713/ansible-nas&#34;&gt;here&lt;/a&gt; which is a fork of &lt;a href=&#34;https://github.com/davestephens/ansible-nas&#34;&gt;Ansible NAS&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you want my stuff then be sure to go to the &lt;code&gt;user/nic&lt;/code&gt; branch on my fork&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can see the ansible stuff for traefik &lt;a href=&#34;https://github.com/davestephens/ansible-nas/tree/master/roles/traefik&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;config&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Config&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;I use a &lt;code&gt;traefik.toml&lt;/code&gt; as the main config and it looks something like this.&#xA;With ansible a lot of this is done through template variables but this is the general idea.&#xA;This config tells traefik what ports to listen and forward on, and gives the names to be referenced by docker labels (down below).&lt;/p&gt;&#xA;&lt;p&gt;Traefik also has a handy web ui that with this config you can find on port &lt;code&gt;8080&lt;/code&gt;.&#xA;There is a &lt;code&gt;providers&lt;/code&gt; section - which is one of the biggest selling points of traefik for me.&#xA;I have a docker provider configured  and a static file.&lt;/p&gt;&#xA;&lt;p&gt;The docker provider lets traefik auto-discover new services that I deploy and automatically handle the routing!&#xA;The static file lets me easily add non-dockerized service routing, or routing to dockerized services on another host (I think traefik has an easier way to do this automatically but I don&amp;rsquo;t do it often enough to need that kind of automation).&#xA;Then at the bottom is the SSL cert stuff.&#xA;Using Let&amp;rsquo;s Encrypt is pretty easy and I use Cloudflare as my DNS provider&lt;/p&gt;&#xA;&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;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;address&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;:80&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;redirections&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;entryPoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;to&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;websecure&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;websecure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;address&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;:443&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;websecure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;certResolver&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;letsencrypt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;websecure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;domains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;main&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;example.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;nx&#34;&gt;sans&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;*.example.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;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;traefik&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;address&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;:8080&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;providers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;providersThrottleDuration&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1s&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;providers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;exposedbydefault&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;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;providers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;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;&lt;span class=&#34;nx&#34;&gt;filename&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/traefik/config.yml&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;insecure&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;dashboard&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;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;nx&#34;&gt;level&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;INFO&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;ping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;terminatingStatusCode&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;certificatesResolvers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;certificatesResolvers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;letsencrypt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;certificatesResolvers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;letsencrypt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;acme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;email&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;my_email@example.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;nx&#34;&gt;storage&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/letsencrypt/acme.json&amp;#34;&lt;/span&gt;&#xA;&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;caserver&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://acme-staging-v02.api.letsencrypt.org/directory&amp;#34;&lt;/span&gt;  &lt;span class=&#34;c&#34;&gt;# le staging, not prod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;certificatesResolvers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;letsencrypt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;acme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dnsChallenge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&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;provider&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cloudflare&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;providers-file&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Providers.file&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;To my knowledge there isn&amp;rsquo;t much to configure on the docker provider side of things until you deploy a service.&#xA;But the provider config file should get a little screen time here.&lt;/p&gt;&#xA;&lt;p&gt;The file defines a traefik http router for each service you define, in this case just &lt;code&gt;pihole&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here I am adding my pihole instance which is not run inside docker but is inside a VM on another host.&#xA;I want the &lt;code&gt;entryPoints&lt;/code&gt; to be set to &lt;code&gt;websecure&lt;/code&gt; which is configured above in the http redirects.&#xA;I want some middlewares, &lt;code&gt;addprefix-pihole&lt;/code&gt; and &lt;code&gt;default-headers&lt;/code&gt;, which I&amp;rsquo;ll explain below.&#xA;I set letsencrypt as the cert certResolver.&#xA;Finally I name the service &lt;code&gt;pihole&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Then in the &lt;code&gt;services&lt;/code&gt; section I configure where pihole is located by just giving the internal IP for traefik to route to.&#xA;Finally I define my middlewares.&#xA;To get to the pihole homepage you need to use the route &lt;code&gt;/admin&lt;/code&gt; so I want that added automatically when I go to &lt;code&gt;pihole.example.com&lt;/code&gt; so I come to &lt;code&gt;pihole.example.com/admin&lt;/code&gt;.&#xA;And I wanted to restrict access to just my internal network and my wireguard network - this is done with the &lt;code&gt;default-whitelist&lt;/code&gt;.&#xA;The last thing is to configure a chain of middlewares that I called &lt;code&gt;secured&lt;/code&gt; which is just easier for the docker labels later on.&lt;/p&gt;&#xA;&lt;p&gt;With this config in play though, traefik will know about the route &lt;code&gt;pihole.example.com&lt;/code&gt; and handle the ip whitelisting and load balancing 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;nt&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;#region routers &lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;routers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pihole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;entryPoints&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;websecure&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;rule&lt;/span&gt;&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;Host(`pihole.example.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;middlewares&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;# - default-headers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;addprefix-pihole&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;default-whitelist&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;certResolver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;letsencrypt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;pihole&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;#region services&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;pihole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;loadBalancer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;servers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;s2&#34;&gt;&amp;#34;http://192.168.1.3: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;nt&#34;&gt;passHostHeader&lt;/span&gt;&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;c&#34;&gt;#endregion&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;middlewares&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addprefix-pihole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addPrefix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;prefix&lt;/span&gt;&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;/admin&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;https-redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;redirectScheme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;scheme&lt;/span&gt;&lt;span class=&#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&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&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;default-headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;frameDeny&lt;/span&gt;&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;sslRedirect&lt;/span&gt;&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;browserXssFilter&lt;/span&gt;&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;contentTypeNosniff&lt;/span&gt;&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;forceSTSHeader&lt;/span&gt;&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;stsIncludeSubdomains&lt;/span&gt;&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;stsPreload&lt;/span&gt;&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;stsSeconds&lt;/span&gt;&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;15552000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;customFrameOptionsValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;SAMEORIGIN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&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;default-whitelist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ipWhiteList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sourceRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;10.6.0.0/24&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# wg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;192.168.1.0/24&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# lan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;172.17.0.0/16&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# 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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;secured&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;chain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;middlewares&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;default-whitelist&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;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;default-headers&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;h1 id=&#34;docker-labels&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Docker labels&lt;/span&gt;&lt;/h1&gt;&#xA;&lt;p&gt;Now the real magic is with Docker.&#xA;Here is an example docker-compose file for spinning up a &lt;a href=&#34;https://jellyfin.org/&#34;&gt;jellyfin&lt;/a&gt; server that you want to expose to the world, or at least access at home with &lt;code&gt;jellyfin.example.com&lt;/code&gt; instead of &lt;code&gt;http://192.168.1.N:8096&lt;/code&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I left some of the ansible variable stuff in here, but the main part to be concerned with is the &lt;code&gt;labels&lt;/code&gt; section&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;We define just a few labels to throw onto this docker container which let&amp;rsquo;s traefik discover it automatically and apply any settings necessary (like my &lt;code&gt;ipWhiteList&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;traefik.enable&lt;/code&gt; is either True or False.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;traefik.http.router.jellyfin.rule&lt;/code&gt; defines an http router called jellyfin and sets the url to &lt;code&gt;jellyfin.example.com&lt;/code&gt; (if example.com was my &lt;code&gt;ansible_nas_domain&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;traefik.http.routers.jellyfin.tls.certresolver&lt;/code&gt; is set to letsencrypt since I use LE for my wildcard certs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;traefik.http.routers.jellyfin.tls.domains[0].main&lt;/code&gt; will just be &lt;code&gt;example.com&lt;/code&gt; -&amp;gt; and this should remind you of the toml file above&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;traefik.http.routers.jellyfin.tls.domains[0].sans&lt;/code&gt; is set to &lt;code&gt;*.example.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;traefik.http.services.jellyfin.loadbalancer.server.port&lt;/code&gt; is set to jellyfin&amp;rsquo;s default http port of 8096, which tells traefik which port to point to for this service.&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;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;jellyfin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&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;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;linuxserver/jellyfin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&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;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;s2&#34;&gt;&amp;#34;{{ jellyfin_config_directory }}:/config:rw&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;{{ jellyfin_movies_directory }}:/movies:{{ jellyfin_movies_permissions }}&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;{{ jellyfin_music_directory }}:/music:{{ jellyfin_music_permissions }}&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;{{ jellyfin_photos_directory }}:/photos:{{ jellyfin_photos_permissions }}&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;{{ jellyfin_tv_directory }}:/tv:{{ jellyfin_tv_permissions }}&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;{{ jellyfin_books_directory }}:/books:{{ jellyfin_books_permissions }}&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;{{ jellyfin_audiobooks_directory }}:/audiobooks:{{ jellyfin_audiobooks_permissions }}&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;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;{{ jellyfin_port_http }}:8096&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;{{ jellyfin_port_https }}:8920&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;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;TZ&lt;/span&gt;&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;{{ ansible_nas_timezone }}&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;PUID&lt;/span&gt;&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;{{ jellyfin_user_id }}&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;PGID&lt;/span&gt;&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;{{ jellyfin_group_id }}&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;nt&#34;&gt;restart_policy&lt;/span&gt;&lt;span class=&#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;nt&#34;&gt;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;l&#34;&gt;1g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&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;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;traefik.enable&lt;/span&gt;&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;{{ jellyfin_available_externally }}&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;traefik.http.routers.jellyfin.rule&lt;/span&gt;&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;Host(`jellyfin.{{ ansible_nas_domain }}`)&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;traefik.http.routers.jellyfin.tls.certresolver&lt;/span&gt;&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;letsencrypt&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;traefik.http.routers.jellyfin.tls.domains[0].main&lt;/span&gt;&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;{{ ansible_nas_domain }}&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;traefik.http.routers.jellyfin.tls.domains[0].sans&lt;/span&gt;&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;*.{{ ansible_nas_domain }}&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;traefik.http.services.jellyfin.loadbalancer.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;s2&#34;&gt;&amp;#34;8096&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 just like that traefik will automagically find your jellyfin container and route &lt;code&gt;jellyfin.example.com&lt;/code&gt; to it!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Pandas-Select-Dtypes</title>
    <id>https://pype.dev/pandas-select-dtypes/</id>
    <updated>2022-03-05T00:00:00Z</updated>
    <published>2022-03-05T00:00:00Z</published>
    <link href="https://pype.dev/pandas-select-dtypes/" rel="alternate" type="text/html"></link>
    <summary type="text">On my team we often have to change data types of columns in a for a variety of reasons. The main one is it tends to be an artifact of EDA whereby a file is...</summary>
    <content type="html">&lt;p&gt;On my team we often have to change data types of columns in a &lt;code&gt;pandas.DataFrame&lt;/code&gt; for a variety of reasons.&#xA;The main one is it tends to be an artifact of EDA whereby a file is read in via &lt;code&gt;pandas&lt;/code&gt; but the data types are somewhat wonky (ie. dates show up as strings, or a column that &lt;em&gt;should&lt;/em&gt; be a integer comes in as float, etc.).&#xA;The best solution I think is to leverage the &lt;code&gt;dtypes&lt;/code&gt; keyword argument in which &lt;code&gt;pd.read_X&lt;/code&gt; method is used.&#xA;However there is another way which is to coerce the data types at runtime instead of loadtime.&lt;/p&gt;&#xA;&lt;p&gt;A handy way to do this is by using &lt;code&gt;pandas.DataFrame.select_dtypes&lt;/code&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Here is an example of finding columns read in as &lt;code&gt;datetime64&lt;/code&gt; and the developer would prefer to use pandas datetimes.&lt;/p&gt;&#xA;&lt;pre class=&#34;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;./file-with-confusing-dtypes.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;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&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;    &lt;span class=&#34;k&#34;&gt;if&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;c&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;dtype&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;datetime64&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&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;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_datetime&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;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;Here is the difference in code flow between &lt;code&gt;select_dtypes&lt;/code&gt; and manually finding the &lt;code&gt;datetype64&lt;/code&gt; 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;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;./file-with-confusing-dtypes.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;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&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;select_dtypes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;datetime64&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&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;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_datetime&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;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/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;The difference isn&amp;rsquo;t huge but it&amp;rsquo;s the little steps in leveling up that turn script-kitty scripts into clean looking functions.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Tiddly-Wiki</title>
    <id>https://pype.dev/tiddly-wiki/</id>
    <updated>2022-03-05T00:00:00Z</updated>
    <published>2022-03-05T00:00:00Z</published>
    <link href="https://pype.dev/tiddly-wiki/" rel="alternate" type="text/html"></link>
    <summary type="text">Tiddly Wiki is a great note taking utility for organizing non-linear notes. I used it to replace my OneNote workflow and my only complaint is I don&#39;t have an...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://tiddlywiki.com/&#34;&gt;Tiddly Wiki&lt;/a&gt; is a great note taking utility for organizing non-linear notes.&#xA;I used it to replace my OneNote workflow and my only complaint is I don&amp;rsquo;t have an easy way to access and edit my tiddlers (posts) if I&amp;rsquo;m not at home.&lt;/p&gt;&#xA;&lt;p&gt;The tiddlywiki is just an &lt;code&gt;html&lt;/code&gt; file with a ton of stuff above my head baked in.&#xA;I have a barebones repo with some notes and a nice starter tiddly wiki init on &lt;a href=&#34;https://github.com/nicpayne713/tiddlywiki-tutorial&#34;&gt;my github&lt;/a&gt;.&#xA;Usage is pretty basic&amp;hellip; Just grab the &lt;code&gt;notebook/template.htlm&lt;/code&gt; and save it to anywhere convenient on your computer.&#xA;I put mine on my NAS to have the security of backups since I don&amp;rsquo;t keep my tidldlywiki in a git repo (I don&amp;rsquo;t really want to look at the diff).&lt;/p&gt;&#xA;&lt;p&gt;Taking notes in the tidlywiki is nice because it supports a format similar to Markdown although it is specific to tidlywiki.&#xA;Tiddlers (each post in the wiki) can be tagged and linked together and it&amp;rsquo;s really easy to send notes to someone by just exporting an html file and emailing it since it&amp;rsquo;ll open up by default in a broswer with all the nice formatting already apart of it.&#xA;I was using it primarily for taking notes for a small group I lead and sending those notes each week.&#xA;The group benefited from nicely formatted notes and I benefited from a centralized place to keep them all that Microsoft didn&amp;rsquo;t own!&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an example of the body of a tiddler with some tiddlywiki specific formatting:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;! Static IPs on Linux&#xA;&#xA;//Ubuntu 20//&#xA;&#xA;Setting static IP on Ubuntu 20.04&#xA;&#xA;# Navigate to /etc/netplan&#xA;# Open the yaml file (the name seems to be kind of random but it seems to starts with 00 or 05)&#xA;# Change the file as below with your desired settings&#xA;# Run `sudo netplan apply` to have changes reflected&#xA;&#xA;    ```yaml&#xA;    network:&#xA;      version: 2&#xA;      ethernets:&#xA;        enp0s4:&#xA;          addresses: [192.168.1.{Static IP}/24]&#xA;          gateway4: 192.168.1.1&#xA;          nameservers:&#xA;            addresses: [8.8.4.4, 8.8.8.8]&#xA;    ```&#xA;&#xA;&#xA;&#xA;&amp;lt;img src=&amp;quot;https://cdn.statically.io/gh/pypeaday/images.pype.dev/main/tiddlywiki-example.png&amp;quot; alt=&amp;quot;tiddlywiki&amp;quot; title=&amp;quot;A TiddlyWiki Example&amp;quot; /&amp;gt;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The &lt;code&gt;#&lt;/code&gt; create a numbered list, &lt;code&gt;//&lt;/code&gt; creates an italicized heading, and &lt;code&gt;!&lt;/code&gt; creates headings similar to Markdown&amp;rsquo;s &lt;code&gt;#&lt;/code&gt;. The differences aren&amp;rsquo;t too bad to keep in mind and what renders out is totally depenent on the tidlywiki itself.&#xA;My template has a nice nord feel to it, feel free to download from my github and try it out!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have moved away from my tiddlywiki workflow in favor of sites like this since I can git commit markdown files and build with &lt;a href=&#34;https://markata.dev/&#34;&gt;markata&lt;/a&gt; pretty easily (credit &lt;a href=&#34;www.waylonwalker.com&#34;&gt;waylon walker&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I still use tiddlywiki for tracking some todo items and questions &amp;mdash; I may have another solution in the future&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Vim-Auto-Space</title>
    <id>https://pype.dev/vim-auto-space/</id>
    <updated>2022-03-04T00:00:00Z</updated>
    <published>2022-03-04T00:00:00Z</published>
    <link href="https://pype.dev/vim-auto-space/" rel="alternate" type="text/html"></link>
    <summary type="text">I ran into an issue where I had some copy-pasta markdown tables in a docstring but the generator I used to make the table gave me tabs instead of spaces in...</summary>
    <content type="html">&lt;p&gt;I ran into an issue where I had some copy-pasta markdown tables in a docstring but the generator I used to make the table gave me tabs instead of spaces in odd places which caused &lt;code&gt;black&lt;/code&gt; to throw a fit.&#xA;Instead of manually changing all tabs to spaes, or trying some goofy &lt;code&gt;:%s/&amp;lt;magic tab character&amp;gt;/&amp;lt;%20 maybe?&amp;gt;/g&lt;/code&gt; I learned that Vim has my back&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;:retab&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Stow</title>
    <id>https://pype.dev/stow/</id>
    <updated>2022-03-04T00:00:00Z</updated>
    <published>2022-03-04T00:00:00Z</published>
    <link href="https://pype.dev/stow/" rel="alternate" type="text/html"></link>
    <summary type="text">Stow is a great tool for managing dotfiles. My usage looks like cloning my dotfiles to my home directory, setting some environment variables via a script,...</summary>
    <content type="html">&lt;p&gt;Stow is a great tool for managing dotfiles. My usage looks like cloning my dotfiles to my home directory, setting some environment variables via a script, then stowing relevant packages and boom my config is good to go&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;git clone &amp;lt;my dotfiles repo&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;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;&lt;span class=&#34;c1&#34;&gt;# env variable stuff ignored 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;stow zsh  &lt;span class=&#34;c1&#34;&gt;# This will symlink my .zshrc file which is in ~/dotfiles/zsh to ~/.zshrc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;By default stow will stow packages up one directory from the root directory.&#xA;In this example the root directory is &lt;code&gt;~/dotfiles&lt;/code&gt; and the package is &lt;code&gt;zsh&lt;/code&gt;.&#xA;So the files in the &lt;code&gt;zsh&lt;/code&gt; package will symlinked into &lt;code&gt;~/&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;stow&lt;/code&gt; makes it easy to share dotfiles across machines, or safely experiment with config changes while always being protected by &lt;code&gt;git&lt;/code&gt; since your dotfiles are in a git repo!&#xA;&amp;hellip;They are in a git repo&amp;hellip; right?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Stow-Target</title>
    <id>https://pype.dev/stow-target/</id>
    <updated>2022-03-04T00:00:00Z</updated>
    <published>2022-03-04T00:00:00Z</published>
    <link href="https://pype.dev/stow-target/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out stow for a brief introduction to</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;/stow&#34;&gt;stow&lt;/a&gt; for a brief introduction to &lt;code&gt;stow&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;What if I want to stow a package somewhere else?&#xA;Boom, that&amp;rsquo;s where &lt;code&gt;-t&lt;/code&gt; comes in&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Maybe I don&amp;rsquo;t like having my &lt;code&gt;dotfiles&lt;/code&gt; repo at &lt;code&gt;$HOME&lt;/code&gt; and instead I want it in &lt;code&gt;~/git&lt;/code&gt; or &lt;code&gt;~/personal&lt;/code&gt; just to stay organized&amp;hellip;&#xA;Well then I could have the same workflow except the &lt;code&gt;stow&lt;/code&gt; command 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;stow zsh -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;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;stow zsh -t &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Git ammend to a commit</title>
    <id>https://pype.dev/git-ammend-no-edit/</id>
    <updated>2022-03-04T00:00:00Z</updated>
    <published>2022-03-04T00:00:00Z</published>
    <link href="https://pype.dev/git-ammend-no-edit/" rel="alternate" type="text/html"></link>
    <summary type="text">After carefully staging only lines related to a specific change and comitting I suddenly realized I missed one... darn, what do I do?</summary>
    <content type="html">&lt;p&gt;After carefully staging only lines related to a specific change and comitting I suddenly realized I missed one&amp;hellip; darn, what do I do?&lt;/p&gt;&#xA;&lt;p&gt;Old me would have soft reset my branch to the previous commit and redone all my careful staging&amp;hellip; what a PIA&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;New me (credit: ThePrimeagen)&amp;hellip;&lt;/p&gt;&#xA;&lt;pre class=&#34;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;# stage other changes I missed&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 commit --amend --no-edit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
  <entry>
    <title>Ubuntu-Static-Ip</title>
    <id>https://pype.dev/ubuntu-static-ip/</id>
    <updated>2022-03-03T00:00:00Z</updated>
    <published>2022-03-03T00:00:00Z</published>
    <link href="https://pype.dev/ubuntu-static-ip/" rel="alternate" type="text/html"></link>
    <summary type="text">Sometimes I need to manually set a static IP of a Linux machine. I generally run the latest version of Ubuntu server in my VMs at home.</summary>
    <content type="html">&lt;p&gt;Sometimes I need to manually set a static IP of a Linux machine. I generally run the latest version of Ubuntu server in my VMs at home.&lt;/p&gt;&#xA;&lt;p&gt;In Ubuntu 20 I&amp;rsquo;m able to change up &lt;code&gt;/etc/netplan/&amp;lt;something&amp;gt;.yml&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;network&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&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;m&#34;&gt;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;ethernets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;enp0s4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addresses&lt;/span&gt;&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;192.168.1&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.{Static IP}/24]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gateway4&lt;/span&gt;&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;192.168.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;nameservers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;addresses&lt;/span&gt;&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;192.168.1.1&lt;/span&gt;&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.1.1.1&lt;/span&gt;&lt;span class=&#34;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;&lt;code&gt;gateway4&lt;/code&gt; is your router address&#xA;&lt;code&gt;nameservers&lt;/code&gt; is a list of desired DNS servers for that machine to use. I  usually use my router which is configured to use my pi-hole as my primary DNS, then set  &lt;code&gt;1.1.1.1&lt;/code&gt; (CloudFlare) as a backup&lt;/p&gt;&#xA;&lt;p&gt;Hit it with the &lt;code&gt;sudo netplan apply&lt;/code&gt; and you should be good to go!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
</feed>