<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CC-by-4.0 on Tom Webster</title><link>https://www.samurailink3.com/licenses/cc-by-4.0/</link><description>Recent content in CC-by-4.0 on Tom Webster</description><generator>Hugo</generator><language>en-us</language><copyright>CC-BY-4.0</copyright><lastBuildDate>Fri, 19 Jun 2026 00:00:00 -0500</lastBuildDate><atom:link href="https://www.samurailink3.com/licenses/cc-by-4.0/index.xml" rel="self" type="application/rss+xml"/><item><title>New Site! Again!</title><link>https://www.samurailink3.com/blog-posts/2026-06-19-new-site-again/</link><pubDate>Fri, 19 Jun 2026 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2026-06-19-new-site-again/</guid><description>&lt;p&gt;Well.. the &lt;a href="https://www.samurailink3.com/blog-posts/2024-10-07-new-site/"&gt;old new site&lt;/a&gt; didn&amp;rsquo;t last as long
as I thought it would. The core intention of using a platform I couldn&amp;rsquo;t
control, somewhat worked. I did write more, I did post more. Notion also gave me
a limited palette to work with, which was extremely helpful when designing how
the content-flow would work. Editing from my phone and making drafts was great.
Notion databases are still pretty damn great and very versatile.&lt;/p&gt;
&lt;p&gt;But&amp;hellip; I ran into limitations, and &lt;a href="https://developers.notion.com/guides/get-started/overview"&gt;Notion has a pretty decent
API&lt;/a&gt;&amp;hellip; When I wanted
to &lt;a href="https://www.samurailink3.com/projects/2026-05-08-notionrssgenerator/"&gt;add RSS to my Notion site&lt;/a&gt;, &lt;em&gt;I
could&lt;/em&gt;. So the &amp;ldquo;lack of tinkering&amp;rdquo; objective started to fall apart. I &lt;em&gt;could&lt;/em&gt;
fix limitations, so I &lt;em&gt;did&lt;/em&gt;. So, I was still doing the work, but on someone
else&amp;rsquo;s platform that is &lt;em&gt;not cheap&lt;/em&gt;. As of this writing, having a custom domain
on a Notion site costs $96USD/year.&lt;/p&gt;
&lt;p&gt;Combine that with my push to move more of my web services to self-hosted ones,
going back to building my own site was easy enough to fall back into. This time
I chose &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;. Go is my main language and I&amp;rsquo;ve used Hugo in
smaller projects before. So far, I like it. I took the time to develop my own
theme using &lt;a href="https://picocss.com/"&gt;PicoCSS&lt;/a&gt; and modeled it after how the Notion
site looked and worked.&lt;/p&gt;
&lt;p&gt;So far, I like it. The extremely-simple HTML+CSS keeps the site fast. I don&amp;rsquo;t
need any fancy JS with all the pre-processing Hugo enables. I added a ton of
parameters and taxonomies to help keep the site oragnized. Its not quite as
flexible as a Notion database, but &lt;a href="https://gohugo.io/content-management/taxonomies/"&gt;Hugo&amp;rsquo;s Taxonomy
system&lt;/a&gt; is pretty flexible.
Currently, you can filter by &lt;a href="https://www.samurailink3.com/licenses/"&gt;licenses&lt;/a&gt;, &lt;a href="https://www.samurailink3.com/tags/"&gt;tags&lt;/a&gt;, or content
type (like &lt;a href="https://www.samurailink3.com/blog-posts/"&gt;blog posts&lt;/a&gt;), &lt;a href="https://www.samurailink3.com/projects/"&gt;projects&lt;/a&gt;, or &lt;a href="https://www.samurailink3.com/game-clips/"&gt;game
clips&lt;/a&gt;). I&amp;rsquo;d like to eventually dig into how I could combine
taxonomies so people could make hyper-specific filters, but that&amp;rsquo;s a project for
another day.&lt;/p&gt;
&lt;p&gt;One thing I did get for free was RSS support &lt;em&gt;everywhere&lt;/em&gt;. Want an RSS feed for
&lt;a href="https://www.samurailink3.com/projects/index.xml"&gt;just projects? Sure.&lt;/a&gt; What about an RSS feed &lt;a href="https://www.samurailink3.com/tags/3d-design/index.xml"&gt;just for my
3D design? Yep, right here.&lt;/a&gt; Maybe you&amp;rsquo;re broken in
the same way I am and just love &lt;a href="https://www.samurailink3.com/licenses/public-domain/index.xml"&gt;Public Domain. Yeah, there&amp;rsquo;s an RSS feed for
that.&lt;/a&gt; Its seriously cool. Great for readers
who only want specific things for me, and also &lt;a href="https://www.samurailink3.com/index.xml"&gt;pretty good for those who want
to see everything I do&lt;/a&gt;. I configured the RSS feeds to have full
articles, no click-throughs required here. Use this site how you want. Let me
know if I can make it better.&lt;/p&gt;
&lt;p&gt;Powering the site is my tried-and-true &lt;a href="https://www.samurailink3.com/projects/2024-09-15-wireguard-backhaul/"&gt;Wireguard
Backhaul&lt;/a&gt;, connected back to an nginx
container that gets built by self-hosted &lt;a href="https://docs.gitea.com/usage/actions/"&gt;Gitea
Actions&lt;/a&gt;. Updates to my site are a &lt;code&gt;git push&lt;/code&gt; away. It limits what I can do away from my computer, but I hardly ever
wrote full posts on my phone, so this seems like a fine tradeoff.&lt;/p&gt;
&lt;p&gt;I hope the content organization I&amp;rsquo;ve designed with Hugo is flexible-enough to
last and less-brittle than &lt;a href="https://codeberg.org/SamuraiLink3/samurailink3.com"&gt;my aging Jekyll
site&lt;/a&gt; was. Only time will
tell.&lt;/p&gt;
&lt;p&gt;So.. One this is &lt;em&gt;missing&lt;/em&gt; here, right? &lt;em&gt;Where&amp;rsquo;s the source, Tom?&lt;/em&gt; Well&amp;hellip; I&amp;rsquo;m
not publishing it. At least, not like this, and not right now. Its not that I&amp;rsquo;m
embarrassed by the code. Its kinda trash in places, but that&amp;rsquo;s fine, people know
my code can be a trainwreck. Its actually because I really want to use the git
repo for in-progress posts, notes, and private-drafts. Putting all that out
there would force me to store drafts somewhere outside the repo, or not push
them anywhere. Those two things would greatly hurt the workflow I&amp;rsquo;ve built up. I
have so many half-written posts in Notion, and its fine because they&amp;rsquo;re just for
me. I can include dumb questions, notes to myself, references to old memories
that drive the themes in my writing, and I don&amp;rsquo;t really want any of that &amp;ldquo;on the
record&amp;rdquo;. I want a distinct line between &amp;ldquo;my thoughts&amp;rdquo; and &amp;ldquo;my publications&amp;rdquo;.
Thoughts are messy, I want to at least &lt;em&gt;try&lt;/em&gt; to clean up my nonsense before
putting it out into the world.&lt;/p&gt;
&lt;p&gt;So.. No code. At least not right now. I&amp;rsquo;ll likely publish the site without any
content one day in case someone wants to see how its built. It will be
permissively-licensed like most of my other projects.&lt;/p&gt;
&lt;p&gt;So, lets see if I can keep up occasional writing and project releases. At the
very least, the site is much faster and more searchable. If you see any bugs or
typos and want to do me a favor &lt;a href="https://bsky.app/profile/samurailink3.com"&gt;hit me up on
Bluesky&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Hunt Clip: Why Am I So Fucking Good?</title><link>https://www.samurailink3.com/game-clips/2026-06-13-hunt-clip-why-am-i-so-fucking-good/</link><pubDate>Sat, 13 Jun 2026 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2026-06-13-hunt-clip-why-am-i-so-fucking-good/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260613_Why-Am-I-So-Fucking-Good/20260613_Why-Am-I-So-Fucking-Good.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260613_Why-Am-I-So-Fucking-Good/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The Bushman</title><link>https://www.samurailink3.com/game-clips/2026-04-18-hunt-clip-the-bushman/</link><pubDate>Sat, 18 Apr 2026 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2026-04-18-hunt-clip-the-bushman/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20260425_The-Bushman/20260425_The-Bushman.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260425_The-Bushman/20260425_The-Bushman.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260425_The-Bushman/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Arrowed</title><link>https://www.samurailink3.com/game-clips/2026-02-21-hunt-clip-arrowed/</link><pubDate>Sat, 21 Feb 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-02-21-hunt-clip-arrowed/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260501_Arrowed/20260501_Arrowed.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260501_Arrowed/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bully</title><link>https://www.samurailink3.com/game-clips/2026-02-21-hunt-clip-bully/</link><pubDate>Sat, 21 Feb 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-02-21-hunt-clip-bully/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260501_Bully/20260501_Bully.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260501_Bully/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The Reverse Scan and Ban</title><link>https://www.samurailink3.com/game-clips/2026-02-19-hunt-clip-the-reverse-scan-and-ban/</link><pubDate>Thu, 19 Feb 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-02-19-hunt-clip-the-reverse-scan-and-ban/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260401_The-Reverse-Scan-and-Ban/20260401_The-Reverse-Scan-and-Ban.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260401_The-Reverse-Scan-and-Ban/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Yeet then Delete</title><link>https://www.samurailink3.com/game-clips/2026-02-19-hunt-clip-yeet-then-delete/</link><pubDate>Thu, 19 Feb 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-02-19-hunt-clip-yeet-then-delete/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260401_Yeet-then-Delete/20260401_Yeet-then-Delete.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260401_Yeet-then-Delete/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Revive Lick</title><link>https://www.samurailink3.com/game-clips/2026-02-07-hunt-clip-revive-lick/</link><pubDate>Sat, 07 Feb 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-02-07-hunt-clip-revive-lick/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260401_Revive-Lick/20260401_Revive-Lick.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260401_Revive-Lick/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Brought a Sword to a Gun Fight</title><link>https://www.samurailink3.com/game-clips/2026-01-31-hunt-clip-brought-a-sword-to-a-gun-fight/</link><pubDate>Sat, 31 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-31-hunt-clip-brought-a-sword-to-a-gun-fight/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260401_Brought-a-Sword-to-a-Gun-Fight/20260401_Brought-a-Sword-to-a-Gun-Fight.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260401_Brought-a-Sword-to-a-Gun-Fight/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Disturbing the Peace</title><link>https://www.samurailink3.com/game-clips/2026-01-28-hunt-clip-disturbing-the-peace/</link><pubDate>Wed, 28 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-28-hunt-clip-disturbing-the-peace/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260401_Disturbing-the-Peace/20260401_Disturbing-the-Peace.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260401_Disturbing-the-Peace/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Springfield Cleanup</title><link>https://www.samurailink3.com/game-clips/2026-01-27-hunt-clip-springfield-cleanup/</link><pubDate>Tue, 27 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-27-hunt-clip-springfield-cleanup/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260401_Springfield-Cleanup/20260401_Springfield-Cleanup.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260401_Springfield-Cleanup/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Cooking Frag vs Fusee</title><link>https://www.samurailink3.com/game-clips/2026-01-21-hunt-clip-cooking-frag-vs-fusee/</link><pubDate>Wed, 21 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-21-hunt-clip-cooking-frag-vs-fusee/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260401_Cooking-Frag-vs-Fusee/20260401_Cooking-Frag-vs-Fusee.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260401_Cooking-Frag-vs-Fusee/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Quick And Easy</title><link>https://www.samurailink3.com/game-clips/2026-01-20-hunt-clip-quick-and-easy/</link><pubDate>Tue, 20 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-20-hunt-clip-quick-and-easy/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260328_Quick-And-Easy/20260328_Quick-And-Easy.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260328_Quick-And-Easy/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Just A Mini Bonk</title><link>https://www.samurailink3.com/game-clips/2026-01-06-hunt-clip-just-a-mini-bonk/</link><pubDate>Tue, 06 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-06-hunt-clip-just-a-mini-bonk/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260328_Just-A-Mini-Bonk/20260328_Just-A-Mini-Bonk.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260328_Just-A-Mini-Bonk/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Blind Fire</title><link>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-blind-fire/</link><pubDate>Sun, 04 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-blind-fire/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260328_Blind-Fire/20260328_Blind-Fire.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260328_Blind-Fire/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Delicious</title><link>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-delicious/</link><pubDate>Sun, 04 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-delicious/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260328_Delicious/20260328_Delicious.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260328_Delicious/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Lightfoot Value</title><link>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-lightfoot-value/</link><pubDate>Sun, 04 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-lightfoot-value/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260328_Lightfoot-Value/20260328_Lightfoot-Value.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260328_Lightfoot-Value/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Right Behind You</title><link>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-right-behind-you/</link><pubDate>Sun, 04 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-right-behind-you/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260328_Right-Behind-You/20260328_Right-Behind-You.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260328_Right-Behind-You/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The Lobby</title><link>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-the-lobby/</link><pubDate>Sun, 04 Jan 2026 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2026-01-04-hunt-clip-the-lobby/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20260328_The-Lobby/20260328_The-Lobby.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20260328_The-Lobby/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Debian: Waterfox Flatpak and KDE Plasma Browser Integration</title><link>https://www.samurailink3.com/blog-posts/2025-12-24-debian-waterfox-flatpak-and-kde-plasma-browser-integration/</link><pubDate>Wed, 24 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2025-12-24-debian-waterfox-flatpak-and-kde-plasma-browser-integration/</guid><description>&lt;p&gt;If you’re moving to &lt;a href="https://www.waterfox.com/"&gt;Waterfox&lt;/a&gt; because of the &lt;a href="https://blog.mozilla.org/en/mozilla/leadership/mozillas-next-chapter-anthony-enzor-demeo-new-ceo/"&gt;Mozilla CEO’s recent threat that “[Firefox] will evolve into a modern AI browser…”&lt;/a&gt; and you use &lt;a href="https://kde.org/plasma-desktop/"&gt;KDE Plasma&lt;/a&gt;, you may be surprised to see that the native browser integration doesn’t work. Don’t fret though, the problem is actually because Waterfox is looking for files that haven’t been copied to the right place. Let’s fix that.&lt;/p&gt;
&lt;h1 id="the-workaround"&gt;The Workaround&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_01.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_01.png" alt="A screenshot of the Waterfox browser with the Plasma Browser Integration add-on installed. The add-on shows an error message that reads “Failed to connect to the native host.” and gives some troubleshooting options and a link to the project wiki."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The error message you may have seen.&lt;/p&gt;
&lt;p&gt;The most convenient way to install Waterfox and keep it updated automatically is through &lt;a href="https://flathub.org/en/apps/net.waterfox.waterfox"&gt;Flathub&lt;/a&gt;. The files we need will be created once &lt;em&gt;the Firefox Flatpak is installed&lt;/em&gt;. Go ahead and install the &lt;a href="https://flathub.org/en/apps/org.mozilla.firefox"&gt;Firefox Flatpak&lt;/a&gt; as well. You’ll also need &lt;a href="https://flathub.org/en/apps/com.github.tchx84.Flatseal"&gt;Flatseal&lt;/a&gt; to add a permission to Waterfox.&lt;/p&gt;
&lt;p&gt;Open your application launcher and search for “Background Services”. In the search bar, type &amp;ldquo;browser”. You should see two services:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_02.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_02.png" alt="A screenshot of the KDE Background Services options window. The search bar has the word “browser” typed in it. There are two services listed: Plasma Browser Integration Flatpak Integration and Plasma Browser Integration Installation Reminder. Both are enabled and currently running."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The two background services we need.&lt;/p&gt;
&lt;p&gt;Pause and unpause the &lt;em&gt;Plasma Browser Integration Flatpak Integration&lt;/em&gt; service. This step may be unnecessary, but will speed things up if you’re between polling cycles (this is mostly an assumption).&lt;/p&gt;
&lt;p&gt;Now, let’s copy some files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Copy the integration host to Waterfox&amp;#39;s flatpak data directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp ~/.var/app/org.mozilla.firefox/plasma-browser-integration-host ~/.var/app/net.waterfox.waterfox/plasma-browser-integration-host
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Make a director for the next file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir ~/.var/app/net.waterfox.waterfox/.waterfox/native-messaging-hosts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Use sed to replace the Firefox flatpak app id with Waterfox&amp;#39;s flatpak app id,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# then output that file to where Waterfox will look for native-messaging-hosts.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Ref: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sed &lt;span style="color:#e6db74"&gt;&amp;#39;s/org\.mozilla\.firefox/net\.waterfox\.waterfox/&amp;#39;&lt;/span&gt; ~/.var/app/org.mozilla.firefox/.mozilla/native-messaging-hosts/org.kde.plasma.browser_integration.json &amp;gt; ~/.var/app/net.waterfox.waterfox/.waterfox/native-messaging-hosts/org.kde.plasma.browser_integration.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, open Flatseal and select Waterfox to edit its settings. We need to go to &lt;em&gt;Session Bus → Talks&lt;/em&gt; and add a new item: &lt;code&gt;org.kde.plasma.browser.integration&lt;/code&gt; .&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_03.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_03.png" alt="A screenshot of Flatseal with Waterfox selected. In the window, you can see the “Session Bus” section. Added to the “Talks” subsection is a new string with the contents “org.kde.plasma.browser.integration”. A warning symbol is shown next to the value to indicate the default permissions have been changed."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When you’re done, Waterfox should look like this in Flatseal.&lt;/p&gt;
&lt;p&gt;Now, when you manage the &lt;em&gt;Plasma Integration&lt;/em&gt; add-on and go to &lt;em&gt;Preferences&lt;/em&gt;, you’ll see options! Furthermore, you can control your browser’s media with your media keys and system tray icons.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_04.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_04.png" alt="A screen shot of Waterfox showing the “about:addons” page with “Plasma Integration” selected. The “Preferences” tab is selected with various options showing. This indicates that the extension can talk to our local messaging host."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Plasma Integration add-on works in Waterfox Flatpak!&lt;/p&gt;
&lt;h1 id="the-real-fix"&gt;The Real Fix&lt;/h1&gt;
&lt;p&gt;This is a cool workaround, but the real issue lies in &lt;a href="https://invent.kde.org/plasma/plasma-browser-integration"&gt;https://invent.kde.org/plasma/plasma-browser-integration&lt;/a&gt;. The application watches for many different browsers, but not Waterfox… for now… hopefully… I have a merge request out to KDE with the fix for Waterfox, both Flatpak and native versions:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://invent.kde.org/plasma/plasma-browser-integration/-/merge_requests/180"&gt;feat: add waterfox support (!180) · Merge requests · Plasma / Plasma Browser Integration · GitLab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;If this is accepted&lt;/del&gt;, THIS WAS MERGED - it will eventually trickle down to various Linux distributions, fixing this problem without needing the tinkering shown here.&lt;/p&gt;
&lt;h1 id="personal-rant"&gt;&lt;strong&gt;Personal Rant&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;This move by Anthony Enzor-DeMeo is extremely disappointing and disheartening. Honestly, this &lt;em&gt;&lt;strong&gt;dank meme&lt;/strong&gt;&lt;/em&gt; is the best way to sum up how I feel about the situation:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_05.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-12-24-Debian-Waterfox-Flatpak-and-KDE-Plasma-Browser-Integration_05.png" alt="A message on mastodon.social from @TheZeldaZone@mastodon.social with the text &amp;ldquo;Hello, We&amp;rsquo;re Firefox, The Only Browser That Hasn&amp;rsquo;t Hit Itself In The Dick With A Hammer. For years now, folks use us because of our un-hammered dick. Now, you may be wondering why today we&amp;rsquo;ve brought this hammer and pulled out our dick. Well I&amp;rsquo;m glad you asked&amp;ndash;”. It has 2.1K boosts and 3.4K favorites."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ref: &lt;a href="https://mastodon.social/@TheZeldaZone/114082180124431864"&gt;https://mastodon.social/@TheZeldaZone/114082180124431864&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In return Alex Kontos of Waterfox replied with this:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.waterfox.com/blog/no-ai-here-response-to-mozilla/"&gt;No AI* Here - A Response to Mozilla&amp;rsquo;s Next Chapter - Waterfox Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So I installed Waterfox, imported my data, and tried it out. &lt;em&gt;Its just Firefox with all the bullshit removed.&lt;/em&gt; Exactly how it was advertised. Exactly what I wanted. No Pocket, no sponsored stories on the new-tab page, no VPN ads in my menus, no telemetry. Sensible defaults that just work. It even has Tree-Style Tabs right out of the box. Its been a few days, but so far, I’m happy with this being my daily driver.&lt;/p&gt;</description></item><item><title>Hunt Clip: Relatable Content</title><link>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-relatable-content/</link><pubDate>Wed, 17 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-relatable-content/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251221_Relatable-Content/20251221_Relatable-Content.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251221_Relatable-Content/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Saved by the Bell</title><link>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-saved-by-the-bell/</link><pubDate>Wed, 17 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-saved-by-the-bell/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251222_Saved-by-the-Bell/20251222_Saved-by-the-Bell.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251222_Saved-by-the-Bell/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Single Boss Salter’s Pork</title><link>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-single-boss-salters-pork/</link><pubDate>Wed, 17 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-single-boss-salters-pork/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251222_Single-Boss-Salters-Pork/20251222_Single-Boss-Salters-Pork.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251222_Single-Boss-Salters-Pork/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The Aggressive Push</title><link>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-the-aggressive-push/</link><pubDate>Wed, 17 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-the-aggressive-push/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251222_The-Aggressive-Push/20251222_The-Aggressive-Push.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251222_The-Aggressive-Push/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The Delayed Double</title><link>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-the-delayed-double/</link><pubDate>Wed, 17 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-17-hunt-clip-the-delayed-double/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251222_The-Delayed-Double/20251222_The-Delayed-Double.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251222_The-Delayed-Double/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Akro’s Return</title><link>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-akros-return/</link><pubDate>Tue, 16 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-akros-return/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251221_Akros-Return/20251221_Akros-Return.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251221_Akros-Return/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Friendliest Hunt Match Ever</title><link>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-friendliest-hunt-match-ever/</link><pubDate>Tue, 16 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-friendliest-hunt-match-ever/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20251221_Friendliest-Hunt-Match-Ever/20251221_Friendliest-Hunt-Match-Ever.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251221_Friendliest-Hunt-Match-Ever/20251221_Friendliest-Hunt-Match-Ever.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251221_Friendliest-Hunt-Match-Ever/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: It Could Only Be a Solo</title><link>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-it-could-only-be-a-solo/</link><pubDate>Tue, 16 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-it-could-only-be-a-solo/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251221_It-Could-Only-Be-a-Solo/20251221_It-Could-Only-Be-a-Solo.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251221_It-Could-Only-Be-a-Solo/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Peak Malicious</title><link>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-peak-malicious/</link><pubDate>Tue, 16 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-16-hunt-clip-peak-malicious/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251221_Peak-Malicious/20251221_Peak-Malicious.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251221_Peak-Malicious/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Changing Minds and Staking Claims</title><link>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-changing-minds-and-staking-claims/</link><pubDate>Sun, 14 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-changing-minds-and-staking-claims/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251215_Changing-Minds-and-Staking-Claims/20251215_Changing-Minds-and-Staking-Claims.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251215_Changing-Minds-and-Staking-Claims/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: HIVEmind</title><link>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-hivemind/</link><pubDate>Sun, 14 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-hivemind/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251215_HIVEmind/20251215_HIVEmind.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251215_HIVEmind/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Poke-y Man</title><link>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-poke-y-man/</link><pubDate>Sun, 14 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-poke-y-man/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251215_Poke-y-Man/20251215_Poke-y-Man.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251215_Poke-y-Man/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Ya Dig?</title><link>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-ya-dig/</link><pubDate>Sun, 14 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-14-hunt-clip-ya-dig/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251215_Ya-Dig/20251215_Ya-Dig.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251215_Ya-Dig/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Fort Ambush</title><link>https://www.samurailink3.com/game-clips/2025-12-13-hunt-clip-fort-ambush/</link><pubDate>Sat, 13 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-13-hunt-clip-fort-ambush/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251214_Fort-Ambush/20251214_Fort-Ambush.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251214_Fort-Ambush/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Coal Carnage</title><link>https://www.samurailink3.com/game-clips/2025-12-12-hunt-clip-coal-carnage/</link><pubDate>Fri, 12 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-12-hunt-clip-coal-carnage/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251214_Coal-Carnage/20251214_Coal-Carnage.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251214_Coal-Carnage/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Two Pretty Good Shots</title><link>https://www.samurailink3.com/game-clips/2025-12-09-hunt-clip-two-pretty-good-shots/</link><pubDate>Tue, 09 Dec 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-12-09-hunt-clip-two-pretty-good-shots/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251214_Two-Pretty-Good-Shots/20251214_Two-Pretty-Good-Shots.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251214_Two-Pretty-Good-Shots/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>How to ruin your domain’s email reputation with ONE EASY TRICK!</title><link>https://www.samurailink3.com/blog-posts/2025-11-24-how-to-ruin-your-domains-email-reputation-with-one-easy-trick/</link><pubDate>Mon, 24 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2025-11-24-how-to-ruin-your-domains-email-reputation-with-one-easy-trick/</guid><description>&lt;p&gt;A shop I regularly go to restructured their loyalty program and made you opt-in to marketing emails. Sure, fine, whatever, juice the numbers. The person at the counter told me I could instantly unsubscribe, so no real harm.&lt;/p&gt;
&lt;p&gt;Later, when I tried to unsubscribe, the site gave me this message:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hold on!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You must have at least one marketing notification option enabled to participate in the loyalty program. Disabling all marketing notifications will remove you from the loyalty program, you will no longer be able to earn or use your points. Are you sure you want to disable all marketing notifications?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I shop here regularly. I gain and use my points quite often. Its a nice bonus for being a consistent customer. This is extremely fucking scammy. Its also a &lt;em&gt;fucking great way&lt;/em&gt; to destroy your domain’s email reputation.&lt;/p&gt;
&lt;p&gt;Actually, that’s a great idea. I made an email rule on Fastmail that automatically sends emails from this address directly to spam. I keep my points, I don’t get spammed, and in the process, I hurt their domain’s email reputation.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-11-24-How-to-ruin-your-domains-email-reputation-with-ONE-EASY-TRICK_01.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-11-24-How-to-ruin-your-domains-email-reputation-with-ONE-EASY-TRICK_01.png" alt="A screenshot of a Fastmail email rule. The rule indicates that emails from a “hello@” [the rest is censored with a black bar] are immediately marked as read and sent to spam. The rule is named “Spam [redacted] Marketing”."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I also sent off an email to their support channel. I don’t expect it will do anything to change their minds, but it won’t impact me.&lt;/p&gt;
&lt;p&gt;A lot of tech gives you control over your experience. Don’t let idiotic product decisions hurt you without a fight. Dig into your options menu. Use email rules. Block viciously.&lt;/p&gt;</description></item><item><title>Hunt Clip: Please Tell Me You Have Clips</title><link>https://www.samurailink3.com/game-clips/2025-11-24-hunt-clip-please-tell-me-you-have-clips/</link><pubDate>Mon, 24 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-24-hunt-clip-please-tell-me-you-have-clips/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251201_Please-Tell-Me-You-Have-Clips/20251201_Please-Tell-Me-You-Have-Clips.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251201_Please-Tell-Me-You-Have-Clips/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bang</title><link>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-bang/</link><pubDate>Sun, 23 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-bang/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251201_Bang/20251201_Bang.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251201_Bang/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Clip That Chat</title><link>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-clip-that-chat/</link><pubDate>Sun, 23 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-clip-that-chat/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251201_Clip-That-Chat/20251201_Clip-That-Chat.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251201_Clip-That-Chat/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Risky Revive Into Clutch</title><link>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-risky-revive-into-clutch/</link><pubDate>Sun, 23 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-risky-revive-into-clutch/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251201_Risky-Revive-Into-Clutch/20251201_Risky-Revive-Into-Clutch.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251201_Risky-Revive-Into-Clutch/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Trigger Control</title><link>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-trigger-control/</link><pubDate>Sun, 23 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-trigger-control/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251201_Trigger-Control/20251201_Trigger-Control.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251201_Trigger-Control/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Walk in the Woods</title><link>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-walk-in-the-woods/</link><pubDate>Sun, 23 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-23-hunt-clip-walk-in-the-woods/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251201_Walk-in-the-Woods/20251201_Walk-in-the-Woods.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251201_Walk-in-the-Woods/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Saving Private An Actual Frog</title><link>https://www.samurailink3.com/game-clips/2025-11-19-hunt-clip-saving-private-an-actual-frog/</link><pubDate>Wed, 19 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-19-hunt-clip-saving-private-an-actual-frog/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251130_Saving-Private-An-Actual-Frog/20251130_Saving-Private-An-Actual-Frog.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251130_Saving-Private-An-Actual-Frog/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The YEET of Fort Carmick</title><link>https://www.samurailink3.com/game-clips/2025-11-15-hunt-clip-the-yeet-of-fort-carmick/</link><pubDate>Sat, 15 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-15-hunt-clip-the-yeet-of-fort-carmick/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251125_The-YEET-of-Fort-Carmick/20251125_The-YEET-of-Fort-Carmick.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251125_The-YEET-of-Fort-Carmick/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Crematorium Combat</title><link>https://www.samurailink3.com/game-clips/2025-11-14-hunt-clip-crematorium-combat/</link><pubDate>Fri, 14 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-14-hunt-clip-crematorium-combat/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Crematorium-Combat/20251123_Crematorium-Combat.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Crematorium-Combat/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Your Chariot Awaits</title><link>https://www.samurailink3.com/game-clips/2025-11-14-hunt-clip-your-chariot-awaits/</link><pubDate>Fri, 14 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-11-14-hunt-clip-your-chariot-awaits/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251125_Your-Chariot-Awaits/20251125_Your-Chariot-Awaits.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251125_Your-Chariot-Awaits/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Halloween 2025 Data Analysis</title><link>https://www.samurailink3.com/blog-posts/2025-11-01-halloween-2025-data-analysis/</link><pubDate>Sat, 01 Nov 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2025-11-01-halloween-2025-data-analysis/</guid><description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post was originally made on the Notion version of my site. The post contains several linked Notion database views that are just not-easy to port over to Hugo without restructuring the entire data and visualization flow. That project is on my list, but its a very low priority. For now, please read this post over on Notion, linked below.&lt;/p&gt;
&lt;p&gt;Halloween 2025 Data Analysis: &lt;a href="https://samurailink3.notion.site/Halloween-2025-Data-Analysis-29eb67864241806d8f1afc53f9894af7"&gt;https://samurailink3.notion.site/Halloween-2025-Data-Analysis-29eb67864241806d8f1afc53f9894af7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Halloween 2025 Dataset: &lt;a href="https://samurailink3.notion.site/Halloween-2025-29cb67864241812ab694da0e8228530b"&gt;https://samurailink3.notion.site/Halloween-2025-29cb67864241812ab694da0e8228530b&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hunt Clip: Fast Fingers</title><link>https://www.samurailink3.com/game-clips/2025-10-22-hunt-clip-fast-fingers/</link><pubDate>Wed, 22 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-22-hunt-clip-fast-fingers/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Fast-Fingers/20251123_Fast-Fingers.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Fast-Fingers/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: A Fucking Terrible Idea</title><link>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-a-fucking-terrible-idea/</link><pubDate>Sun, 19 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-a-fucking-terrible-idea/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_A-Fucking-Terrible-Idea/20251123_A-Fucking-Terrible-Idea.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_A-Fucking-Terrible-Idea/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Arrow Dynamic</title><link>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-arrow-dynamic/</link><pubDate>Sun, 19 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-arrow-dynamic/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Arrow-Dynamic/20251123_Arrow-Dynamic.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Arrow-Dynamic/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Rob is the Best in the World</title><link>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-rob-is-the-best-in-the-world/</link><pubDate>Sun, 19 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-rob-is-the-best-in-the-world/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Rob-is-the-Best-in-the-World/20251123_Rob-is-the-Best-in-the-World.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Rob-is-the-Best-in-the-World/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The Oreo Gordito Standoff</title><link>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-the-oreo-gordito-standoff/</link><pubDate>Sun, 19 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-the-oreo-gordito-standoff/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_The-Oreo-Gordito-Standoff/20251123_The-Oreo-Gordito-Standoff.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_The-Oreo-Gordito-Standoff/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: This is Gonna be Fun</title><link>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-this-is-gonna-be-fun/</link><pubDate>Sun, 19 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-19-hunt-clip-this-is-gonna-be-fun/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_This-is-Gonna-be-Fun/20251123_This-is-Gonna-be-Fun.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_This-is-Gonna-be-Fun/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bleeding Scupper</title><link>https://www.samurailink3.com/game-clips/2025-10-18-hunt-clip-bleeding-scupper/</link><pubDate>Sat, 18 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-18-hunt-clip-bleeding-scupper/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Bleeding-Scupper/20251123_Bleeding-Scupper.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Bleeding-Scupper/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Quickplay Contusion</title><link>https://www.samurailink3.com/game-clips/2025-10-18-hunt-clip-quickplay-contusion/</link><pubDate>Sat, 18 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-18-hunt-clip-quickplay-contusion/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Quickplay-Contusion/20251123_Quickplay-Contusion.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Quickplay-Contusion/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Back to Back Bonks</title><link>https://www.samurailink3.com/game-clips/2025-10-14-hunt-clip-back-to-back-bonks/</link><pubDate>Tue, 14 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-14-hunt-clip-back-to-back-bonks/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Back-to-Back-Bonks/20251123_Back-to-Back-Bonks.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Back-to-Back-Bonks/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Double Kill</title><link>https://www.samurailink3.com/game-clips/2025-10-14-hunt-clip-double-kill/</link><pubDate>Tue, 14 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-14-hunt-clip-double-kill/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Double-Kill/20251123_Double-Kill.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Double-Kill/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: They Fly Now</title><link>https://www.samurailink3.com/game-clips/2025-10-13-hunt-clip-they-fly-now/</link><pubDate>Mon, 13 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-13-hunt-clip-they-fly-now/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_They-Fly-Now/20251123_They-Fly-Now.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_They-Fly-Now/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Trauma Value</title><link>https://www.samurailink3.com/game-clips/2025-10-13-hunt-clip-trauma-value/</link><pubDate>Mon, 13 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-13-hunt-clip-trauma-value/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251123_Trauma-Value/20251123_Trauma-Value.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251123_Trauma-Value/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Death’s Door</title><link>https://www.samurailink3.com/game-clips/2025-10-08-hunt-clip-deaths-door/</link><pubDate>Wed, 08 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-08-hunt-clip-deaths-door/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251010_Deaths-Door/20251010_Deaths-Door.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251010_Deaths-Door/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Front Towards Enemy</title><link>https://www.samurailink3.com/game-clips/2025-10-07-hunt-clip-front-towards-enemy/</link><pubDate>Tue, 07 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-07-hunt-clip-front-towards-enemy/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251010_Front-Towards-Enemy/20251010_Front-Towards-Enemy.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251010_Front-Towards-Enemy/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Slot Shot</title><link>https://www.samurailink3.com/game-clips/2025-10-07-hunt-clip-slot-shot/</link><pubDate>Tue, 07 Oct 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-10-07-hunt-clip-slot-shot/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251010_Slot-Shot/20251010_Slot-Shot.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251010_Slot-Shot/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I’m Completely Fine</title><link>https://www.samurailink3.com/game-clips/2025-09-28-hunt-clip-im-completely-fine/</link><pubDate>Sun, 28 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-28-hunt-clip-im-completely-fine/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20251010_Im-Completely-Fine/20251010_Im-Completely-Fine.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20251010_Im-Completely-Fine/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Baby Rage Streamers</title><link>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-baby-rage-streamers/</link><pubDate>Tue, 23 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-baby-rage-streamers/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Baby-Rage-Streamers/20250927_Baby-Rage-Streamers.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Baby-Rage-Streamers/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Come On</title><link>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-come-on/</link><pubDate>Tue, 23 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-come-on/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Come-On/20250927_Come-On.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Come-On/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Out With a Bang</title><link>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-out-with-a-bang/</link><pubDate>Tue, 23 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-out-with-a-bang/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Out-with-a-Bang/20250927_Out-with-a-Bang.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Out-with-a-Bang/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: That’s a Team</title><link>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-thats-a-team/</link><pubDate>Tue, 23 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-thats-a-team/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Thats-a-Team/20250927_Thats-a-Team.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Thats-a-Team/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Whiff</title><link>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-whiff/</link><pubDate>Tue, 23 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-23-hunt-clip-whiff/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Whiff/20250927_Whiff.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Whiff/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Expert Timing</title><link>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-expert-timing/</link><pubDate>Fri, 19 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-expert-timing/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Expert-Timing/20250927_Expert-Timing.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Expert-Timing/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I Said STOP IT</title><link>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-i-said-stop-it/</link><pubDate>Fri, 19 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-i-said-stop-it/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_I-Said-STOP-IT/20250927_I-Said-STOP-IT.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_I-Said-STOP-IT/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: New Tech</title><link>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-new-tech/</link><pubDate>Fri, 19 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-new-tech/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_New-Tech/20250927_New-Tech.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_New-Tech/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: OK</title><link>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-ok/</link><pubDate>Fri, 19 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-ok/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_OK/20250927_OK.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_OK/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Burning Man</title><link>https://www.samurailink3.com/game-clips/2025-09-17-hunt-clip-burning-man/</link><pubDate>Wed, 17 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-17-hunt-clip-burning-man/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Burning-Man/20250927_Burning-Man.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Burning-Man/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Run</title><link>https://www.samurailink3.com/game-clips/2025-09-17-hunt-clip-run/</link><pubDate>Wed, 17 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-17-hunt-clip-run/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_Run/20250927_Run.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_Run/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: No Aiming Round</title><link>https://www.samurailink3.com/game-clips/2025-09-16-hunt-clip-no-aiming-round/</link><pubDate>Tue, 16 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-16-hunt-clip-no-aiming-round/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250917_No-Aiming-Round/20250917_No-Aiming-Round.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250917_No-Aiming-Round/20250917_No-Aiming-Round.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250917_No-Aiming-Round/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Typical Salter's Pork</title><link>https://www.samurailink3.com/game-clips/2025-09-16-hunt-clip-typical-salters-pork/</link><pubDate>Tue, 16 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-16-hunt-clip-typical-salters-pork/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250917_Typical-Salters-Pork/20250917_Typical-Salters-Pork.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250917_Typical-Salters-Pork/20250917_Typical-Salters-Pork.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250917_Typical-Salters-Pork/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: STELF</title><link>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-stelf/</link><pubDate>Mon, 15 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-19-hunt-clip-stelf/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250927_STELF/20250927_STELF.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250927_STELF/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Almost</title><link>https://www.samurailink3.com/game-clips/2025-09-14-hunt-clip-almost/</link><pubDate>Sun, 14 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-14-hunt-clip-almost/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250917_Almost/20250917_Almost.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250917_Almost/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Surgical</title><link>https://www.samurailink3.com/game-clips/2025-09-14-hunt-clip-surgical/</link><pubDate>Sun, 14 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-14-hunt-clip-surgical/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250917_Surgical/20250917_Surgical.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250917_Surgical/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bullshit Shots</title><link>https://www.samurailink3.com/game-clips/2025-09-13-hunt-clip-bullshit-shots/</link><pubDate>Sat, 13 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-13-hunt-clip-bullshit-shots/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250914_Bullshit-Shots/20250914_Bullshit-Shots.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250914_Bullshit-Shots/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Can I Do Something Dumb</title><link>https://www.samurailink3.com/game-clips/2025-09-13-hunt-clip-can-i-do-something-dumb/</link><pubDate>Sat, 13 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-13-hunt-clip-can-i-do-something-dumb/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250914_Can-I-Do-Something-Dumb/20250914_Can-I-Do-Something-Dumb.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250914_Can-I-Do-Something-Dumb/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Cat Cowboy Things</title><link>https://www.samurailink3.com/game-clips/2025-09-13-hunt-clip-cat-cowboy-things/</link><pubDate>Sat, 13 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-13-hunt-clip-cat-cowboy-things/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250914_Cat-Cowboy-Things/20250914_Cat-Cowboy-Things.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250914_Cat-Cowboy-Things/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Healing Waters Brawl</title><link>https://www.samurailink3.com/game-clips/2025-09-12-hunt-clip-healing-waters-brawl/</link><pubDate>Fri, 12 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-12-hunt-clip-healing-waters-brawl/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250913_Healing-Waters-Brawl/20250913_Healing-Waters-Brawl.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250913_Healing-Waters-Brawl/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Lower DeSalle Smackdown</title><link>https://www.samurailink3.com/game-clips/2025-09-12-hunt-clip-lower-desalle-smackdown/</link><pubDate>Fri, 12 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-12-hunt-clip-lower-desalle-smackdown/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250913_Lower-DeSalle-Smackdown/20250913_Lower-DeSalle-Smackdown.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250913_Lower-DeSalle-Smackdown/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Uno Reverse</title><link>https://www.samurailink3.com/game-clips/2025-09-12-hunt-clip-uno-reverse/</link><pubDate>Fri, 12 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-12-hunt-clip-uno-reverse/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250913_Uno-Reverse/20250913_Uno-Reverse.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250913_Uno-Reverse/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Friends</title><link>https://www.samurailink3.com/game-clips/2025-09-11-hunt-clip-friends/</link><pubDate>Thu, 11 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-11-hunt-clip-friends/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250913_Friends/20250913_Friends.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250913_Friends/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Gunrunner</title><link>https://www.samurailink3.com/game-clips/2025-09-04-hunt-clip-gunrunner/</link><pubDate>Thu, 04 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-04-hunt-clip-gunrunner/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250913_Gunrunner/20250913_Gunrunner.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250913_Gunrunner/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: RNJesus</title><link>https://www.samurailink3.com/game-clips/2025-09-04-hunt-clip-rnjesus/</link><pubDate>Thu, 04 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-04-hunt-clip-rnjesus/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250913_RNJesus/20250913_RNJesus.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250913_RNJesus/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The GOAT</title><link>https://www.samurailink3.com/game-clips/2025-09-04-hunt-clip-the-goat/</link><pubDate>Thu, 04 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-04-hunt-clip-the-goat/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250913_The-GOAT/20250913_The-GOAT.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250913_The-GOAT/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Hold</title><link>https://www.samurailink3.com/game-clips/2025-09-03-hunt-clip-hold/</link><pubDate>Wed, 03 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-03-hunt-clip-hold/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250904_Hold/20250904_Hold.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250904_Hold/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I’ll Kill Us All</title><link>https://www.samurailink3.com/game-clips/2025-09-02-hunt-clip-ill-kill-us-all/</link><pubDate>Tue, 02 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-02-hunt-clip-ill-kill-us-all/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250904_Ill-Kill-Us-All/20250904_Ill-Kill-Us-All.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250904_Ill-Kill-Us-All/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>The Best Game Clipping Setup</title><link>https://www.samurailink3.com/blog-posts/2025-09-02-the-best-game-clipping-setup/</link><pubDate>Tue, 02 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2025-09-02-the-best-game-clipping-setup/</guid><description>&lt;p&gt;I’m gonna try some YouTube stuff for a while. A lot of my projects are kinda cool and I want to talk about them and maybe inspire people to build stuff for themselves too.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ewral02JWVg"&gt;YouTube - Tom Webster - The Best Game Clipping Setup (with only OBS!)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Download this Video (Right-Click, Save-Link As): &lt;a href="https://s3.samurailink3.com/tom-webster-videos/TomWebster-TheBestClippingSetup.mp4"&gt;https://s3.samurailink3.com/tom-webster-videos/TomWebster-TheBestClippingSetup.mp4&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hunt Clip: Decent</title><link>https://www.samurailink3.com/game-clips/2025-09-01-hunt-clip-decent/</link><pubDate>Mon, 01 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-01-hunt-clip-decent/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250904_Decent/20250904_Decent.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250904_Decent/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Three Fine Kills</title><link>https://www.samurailink3.com/game-clips/2025-09-01-hunt-clip-three-fine-kills/</link><pubDate>Mon, 01 Sep 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-09-01-hunt-clip-three-fine-kills/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250904_Three-Fine-Kills/20250904_Three-Fine-Kills.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250904_Three-Fine-Kills/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Sandwich</title><link>https://www.samurailink3.com/game-clips/2025-08-28-hunt-clip-sandwich/</link><pubDate>Thu, 28 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-28-hunt-clip-sandwich/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250904_Sandwich/20250904_Sandwich.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250904_Sandwich/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Killing Spree</title><link>https://www.samurailink3.com/game-clips/2025-08-27-hunt-clip-killing-spree/</link><pubDate>Wed, 27 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-27-hunt-clip-killing-spree/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250904_Killing-Spree/20250904_Killing-Spree.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250904_Killing-Spree/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Annoying Bug</title><link>https://www.samurailink3.com/game-clips/2025-08-25-hunt-clip-annoying-bug/</link><pubDate>Mon, 25 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-25-hunt-clip-annoying-bug/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250827_Annoying-Bug/20250827_Annoying-Bug.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250827_Annoying-Bug/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Let ‘Em Have It</title><link>https://www.samurailink3.com/game-clips/2025-08-25-hunt-clip-let-em-have-it/</link><pubDate>Mon, 25 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-25-hunt-clip-let-em-have-it/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250827_Let-Em-Have-It/20250827_Let-Em-Have-It.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250827_Let-Em-Have-It/20250827_Let-Em-Have-It.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250827_Let-Em-Have-It/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: A Little Mean</title><link>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-a-little-mean/</link><pubDate>Sat, 23 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-a-little-mean/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250824_A-Little-Mean/20250824_A-Little-Mean.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250824_A-Little-Mean/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Dwarf Fortress</title><link>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-dwarf-fortress/</link><pubDate>Sat, 23 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-dwarf-fortress/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250823_Dwarf-Fortress/20250823_Dwarf-Fortress.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250823_Dwarf-Fortress/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: He's Dead</title><link>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-hes-dead/</link><pubDate>Sat, 23 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-hes-dead/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250824_Hes-Dead/20250824_Hes-Dead.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250824_Hes-Dead/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Trained Aim</title><link>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-trained-aim/</link><pubDate>Sat, 23 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-23-hunt-clip-trained-aim/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250823_Trained-Aim/20250823_Trained-Aim.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250823_Trained-Aim/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Fuck You Bitch</title><link>https://www.samurailink3.com/game-clips/2025-08-20-hunt-clip-fuck-you-bitch/</link><pubDate>Wed, 20 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-20-hunt-clip-fuck-you-bitch/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250822_Fuck-You-Bitch/20250822_Fuck-You-Bitch.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250822_Fuck-You-Bitch/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Seven Sisters Fight</title><link>https://www.samurailink3.com/game-clips/2025-08-20-hunt-clip-seven-sisters-fight/</link><pubDate>Wed, 20 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-20-hunt-clip-seven-sisters-fight/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250821_Seven-Sisters-Fight/20250821_Seven-Sisters-Fight.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250821_Seven-Sisters-Fight/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bait</title><link>https://www.samurailink3.com/game-clips/2025-08-16-hunt-clip-bait/</link><pubDate>Sat, 16 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-16-hunt-clip-bait/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250817_Bait/20250817_Bait.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250817_Bait/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Check This One Out</title><link>https://www.samurailink3.com/game-clips/2025-08-16-hunt-clip-check-this-one-out/</link><pubDate>Sat, 16 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-16-hunt-clip-check-this-one-out/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250817_Check-This-One-Out/20250817_Check-This-One-Out.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250817_Check-This-One-Out/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Sneak Squad</title><link>https://www.samurailink3.com/game-clips/2025-08-16-hunt-clip-sneak-squad/</link><pubDate>Sat, 16 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-16-hunt-clip-sneak-squad/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250817_Sneak-Squad/20250817_Sneak-Squad.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250817_Sneak-Squad/20250817_Sneak-Squad.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250817_Sneak-Squad/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Just Rat Things</title><link>https://www.samurailink3.com/game-clips/2025-08-08-hunt-clip-just-rat-things/</link><pubDate>Fri, 08 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-08-hunt-clip-just-rat-things/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250810_Just-Rat-Things/20250810_Just-Rat-Things.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250810_Just-Rat-Things/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Are We Playing Trios</title><link>https://www.samurailink3.com/game-clips/2025-08-05-hunt-clip-are-we-playing-trios/</link><pubDate>Tue, 05 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-05-hunt-clip-are-we-playing-trios/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250808_Are-We-Playing-Trios/20250808_Are-We-Playing-Trios.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250808_Are-We-Playing-Trios/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Low Light High Light</title><link>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-low-light-high-light/</link><pubDate>Sat, 02 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-low-light-high-light/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250803_Low-Light-High-Light/20250803_Low-Light-High-Light.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250803_Low-Light-High-Light/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: No U</title><link>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-no-u/</link><pubDate>Sat, 02 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-no-u/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250803_No-U/20250803_No-U.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250803_No-U/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Shove Off</title><link>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-shove-off/</link><pubDate>Sat, 02 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-shove-off/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250803_Shove-Off/20250803_Shove-Off.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250803_Shove-Off/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Solo Shit</title><link>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-solo-shit/</link><pubDate>Sat, 02 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-solo-shit/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250803_Solo-Shit/20250803_Solo-Shit.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250803_Solo-Shit/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Weeping Stone Walloping</title><link>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-weeping-stone-walloping/</link><pubDate>Sat, 02 Aug 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-08-02-hunt-clip-weeping-stone-walloping/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250803_Weeping-Stone-Walloping/20250803_Weeping-Stone-Walloping.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250803_Weeping-Stone-Walloping/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bleed</title><link>https://www.samurailink3.com/game-clips/2025-07-15-hunt-clip-bleed/</link><pubDate>Tue, 15 Jul 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-07-15-hunt-clip-bleed/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250716_Bleed/20250716_Bleed.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250716_Bleed/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Nifty Angle</title><link>https://www.samurailink3.com/game-clips/2025-07-15-hunt-clip-nifty-angle/</link><pubDate>Tue, 15 Jul 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-07-15-hunt-clip-nifty-angle/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250716_Nifty-Angle/20250716_Nifty-Angle.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250716_Nifty-Angle/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: GGWP</title><link>https://www.samurailink3.com/game-clips/2025-07-10-hunt-clip-ggwp/</link><pubDate>Thu, 10 Jul 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-07-10-hunt-clip-ggwp/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250711_GGWP/20250711_GGWP.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250711_GGWP/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Style Points</title><link>https://www.samurailink3.com/game-clips/2025-07-02-hunt-clip-style-points/</link><pubDate>Wed, 02 Jul 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-07-02-hunt-clip-style-points/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250702_Style-Points/20250702_Style-Points.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250702_Style-Points/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip Wait, I Might Die Too</title><link>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-wait-i-might-die-too/</link><pubDate>Sun, 29 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-wait-i-might-die-too/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250630_Wait-I-might-die-too/20250630_Wait-I-might-die-too.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250630_Wait-I-might-die-too/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: 5000 IQ</title><link>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-5000-iq/</link><pubDate>Sun, 29 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-5000-iq/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250630_5000-IQ/20250630_5000-IQ.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250630_5000-IQ/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Desync Saved My Life</title><link>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-desync-saved-my-life/</link><pubDate>Sun, 29 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-desync-saved-my-life/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250630_Desync-saved-my-life/20250630_Desync-saved-my-life.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250630_Desync-saved-my-life/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Not Sure What Happened Here</title><link>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-not-sure-what-happened-here/</link><pubDate>Sun, 29 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-not-sure-what-happened-here/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250630_Not-sure-what-happened-here/20250630_Not-sure-what-happened-here.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250630_Not-sure-what-happened-here/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: RIP AND TEAR</title><link>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-rip-and-tear/</link><pubDate>Sun, 29 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-rip-and-tear/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250630_RIP-AND-TEAR/20250630_RIP-AND-TEAR.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250630_RIP-AND-TEAR/20250630_RIP-AND-TEAR.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250630_RIP-AND-TEAR/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Vision Is Based On Movement</title><link>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-vision-is-based-on-movement/</link><pubDate>Sun, 29 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-29-hunt-clip-vision-is-based-on-movement/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250630_Vision-is-based-on-movement/20250630_Vision-is-based-on-movement.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250630_Vision-is-based-on-movement/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: That’s Not Okay</title><link>https://www.samurailink3.com/game-clips/2025-06-26-hunt-clip-thats-not-okay/</link><pubDate>Thu, 26 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-26-hunt-clip-thats-not-okay/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250627_Thats-Not-Okay/20250627_Thats-Not-Okay.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250627_Thats-Not-Okay/20250627_Thats-Not-Okay.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250627_Thats-Not-Okay/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Classic Double</title><link>https://www.samurailink3.com/game-clips/2025-06-20-hunt-clip-classic-double/</link><pubDate>Fri, 20 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-20-hunt-clip-classic-double/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250621_Classic-Double/20250621_Classic-Double.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250621_Classic-Double/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Long and Drawn Out</title><link>https://www.samurailink3.com/game-clips/2025-06-09-hunt-clip-long-and-drawn-out/</link><pubDate>Mon, 09 Jun 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-06-09-hunt-clip-long-and-drawn-out/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250613_Long-and-Drawn-Out/20250613_Long-and-Drawn-Out.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250613_Long-and-Drawn-Out/20250613_Long-and-Drawn-Out.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250613_Long-and-Drawn-Out/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I Thought I Was Playing DOOM</title><link>https://www.samurailink3.com/game-clips/2025-05-26-hunt-clip-i-thought-i-was-playing-doom/</link><pubDate>Mon, 26 May 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-05-26-hunt-clip-i-thought-i-was-playing-doom/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250527_I-Thought-I-Was-Playing-DOOM/20250527_I-Thought-I-Was-Playing-DOOM.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250527_I-Thought-I-Was-Playing-DOOM/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: 5D Chess</title><link>https://www.samurailink3.com/game-clips/2025-04-27-hunt-clip-5d-chess/</link><pubDate>Sun, 27 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-27-hunt-clip-5d-chess/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250426_5D-Chess/20250426_5D-Chess.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250426_5D-Chess/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Got 'Im</title><link>https://www.samurailink3.com/game-clips/2025-04-27-hunt-clip-got-im/</link><pubDate>Sun, 27 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-27-hunt-clip-got-im/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250426_Got-Im/20250426_Got-Im.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250426_Got-Im/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Rat</title><link>https://www.samurailink3.com/game-clips/2025-04-27-hunt-clip-rat/</link><pubDate>Sun, 27 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-27-hunt-clip-rat/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250426_Rat/20250426_Rat.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250426_Rat/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I Really Want That to Work</title><link>https://www.samurailink3.com/game-clips/2025-04-16-hunt-clip-i-really-want-that-to-work/</link><pubDate>Wed, 16 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-16-hunt-clip-i-really-want-that-to-work/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250416_I-Really-Want-That-to-Work/20250416_I-Really-Want-That-to-Work.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250416_I-Really-Want-That-to-Work/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: VAC</title><link>https://www.samurailink3.com/game-clips/2025-04-16-hunt-clip-vac/</link><pubDate>Wed, 16 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-16-hunt-clip-vac/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250416_VAC/20250416_VAC.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250416_VAC/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Wombo Combo</title><link>https://www.samurailink3.com/game-clips/2025-04-16-hunt-clip-wombo-combo/</link><pubDate>Wed, 16 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-16-hunt-clip-wombo-combo/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250416_Wombo-Combo/20250416_Wombo-Combo.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250416_Wombo-Combo/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Big Mad</title><link>https://www.samurailink3.com/game-clips/2025-04-15-hunt-clip-big-mad/</link><pubDate>Tue, 15 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-15-hunt-clip-big-mad/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250416_Big-Mad/20250416_Big-Mad.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250416_Big-Mad/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Fever Dream</title><link>https://www.samurailink3.com/game-clips/2025-04-10-hunt-clip-fever-dream/</link><pubDate>Thu, 10 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-10-hunt-clip-fever-dream/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250410_Fever-Dream/20250410_Fever-Dream.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250410_Fever-Dream/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Elbow</title><link>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-elbow/</link><pubDate>Wed, 02 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-elbow/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250403_Elbow/20250403_Elbow.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250403_Elbow/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: In the middle of Nowhere</title><link>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-in-the-middle-of-nowhere/</link><pubDate>Wed, 02 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-in-the-middle-of-nowhere/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250403_In-the-middle-of-Nowhere/20250403_In-the-middle-of-Nowhere.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250403_In-the-middle-of-Nowhere/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Ping</title><link>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-ping/</link><pubDate>Wed, 02 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-ping/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250403_Ping/20250403_Ping.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250403_Ping/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Whiff</title><link>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-whiff/</link><pubDate>Wed, 02 Apr 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-04-02-hunt-clip-whiff/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250403_Whiff/20250403_Whiff.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250403_Whiff/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Springy Headshot</title><link>https://www.samurailink3.com/game-clips/2025-03-16-hunt-clip-springy-headshot/</link><pubDate>Sun, 16 Mar 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-03-16-hunt-clip-springy-headshot/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250320_Springy-Headshot/20250320_Springy-Headshot.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250320_Springy-Headshot/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: You’re a Mile Away</title><link>https://www.samurailink3.com/game-clips/2025-03-16-hunt-clip-youre-a-mile-away/</link><pubDate>Sun, 16 Mar 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2025-03-16-hunt-clip-youre-a-mile-away/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250320_Youre-a-Mile-Away/20250320_Youre-a-Mile-Away.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250320_Youre-a-Mile-Away/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Things that make me uncomfortable: Missionaries vs Mercenaries</title><link>https://www.samurailink3.com/blog-posts/2025-03-11-things-that-make-me-uncomfortable-missionaries-vs-mercenaries/</link><pubDate>Tue, 11 Mar 2025 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2025-03-11-things-that-make-me-uncomfortable-missionaries-vs-mercenaries/</guid><description>&lt;p&gt;I want to talk about something that makes me professionally uncomfortable: &lt;em&gt;Missionaries vs Mercenaries&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I’ve worked for a few larger tech firms over my career and have experienced both sides of this coin rather viscerally. Before I get into how these two concepts play into the larger organization, let’s take a look at what they are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Missionaries - People who take the job because they enjoy the work. Missionaries aren’t in it for the money or prestige, they’re in it for the work itself, the challenge, because they believe in the vision. Missionaries largely thrive on intrinsic rewards.&lt;/li&gt;
&lt;li&gt;Mercenaries - People who take the job &lt;em&gt;because of&lt;/em&gt; the extrinsic rewards, aka: They’re in it for the money/prestige. The work and mission don’t really matter, they’re gonna do a good job because it pays well and they want to keep that gravy-train rolling.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m gonna try to keep this post generic, if you want to compare this article to my &lt;a href="https://www.samurailink3.com/resume"&gt;Resume&lt;/a&gt; and draw conclusions about which company is which, feel free. Just know that my intent isn’t to disparage or promote one company over another. If given the opportunity, I wouldn’t work for &lt;em&gt;either&lt;/em&gt; company today. One other note, this post talks about &lt;em&gt;money&lt;/em&gt;, a lot. I want you to know I understand that having this “debate” at all comes from a place of extreme privilege. A lot of people would be lucky to have a “problem” like this.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;missionary&lt;/em&gt; &lt;em&gt;company&lt;/em&gt; was &lt;em&gt;a weird place&lt;/em&gt;. Pretty cult-like, but that &lt;em&gt;mostly&lt;/em&gt; resulted in better experiences for the users. The job paid very well compared to &lt;em&gt;all jobs&lt;/em&gt;, but was actually pretty poor compared to other tech jobs of the same caliber. People successful at this company are hired as Staff/Principal roles at other firms. Ultimately, the people that were there were underpaid for the job they were doing.&lt;/p&gt;
&lt;p&gt;This was &lt;em&gt;by design&lt;/em&gt;. According to longtime employees and leadership, the “Missionary vs Mercenary” problem was “solved” by under-paying. It ensured the people at the company weren’t in it for the money. If they wanted money, they could find it easier at other companies. The people here were in it for the mission, for the customers, for the work. They &lt;em&gt;couldn’t&lt;/em&gt; be in it for the money, the money wasn’t there.&lt;/p&gt;
&lt;p&gt;This was bullshit, I knew it, everyone around me knew it. The whole “Missionaries vs Mercenaries” argument was an excuse to pay people less than they were worth. Here’s the part that makes me uncomfortable though: It worked.&lt;/p&gt;
&lt;p&gt;It’s gross to look back and admit this, but, yeah, it worked. The people I worked with at &lt;em&gt;missionary company&lt;/em&gt; largely didn’t care about the paycheck. It was hard work full of challenging problems, burnout, sociopathic leadership, and anti-employee rhetoric and systems. But people stayed because the work was so engrossing. Years later, I’m still referencing old projects and lessons learned there. I’m still friends with many people I met, and they’re &lt;em&gt;still&lt;/em&gt; among the very best people I’ve ever worked with.&lt;/p&gt;
&lt;p&gt;I ended up leaving &lt;em&gt;missionary company&lt;/em&gt; to work at &lt;em&gt;mercenary company&lt;/em&gt;. Mostly due to burn-out, but it helped that &lt;em&gt;mercenary company&lt;/em&gt; offered to double my salary, give me unlimited time off, and allow me to work from wherever I wanted. At this time, I never looked kindly on the “Missionary vs Mercenary” debate. It was a line given by company leadership to justify underpaying their workforce. It was bullshit, right?&lt;/p&gt;
&lt;p&gt;Working for &lt;em&gt;mercenary company&lt;/em&gt; was extremely enlightening for all the wrong reasons. Within the first month, I understood what happens to companies that fall far into that &lt;em&gt;mercenary&lt;/em&gt; spectrum. People were paid &lt;em&gt;extremely well&lt;/em&gt; and &lt;em&gt;the benefits were outlandish.&lt;/em&gt; It was pretty insane, comparatively. I was working less and getting paid more than I ever had before. I wondered how this could be sustainable. Then the honeymoon period wore off and I realized: It wasn’t.&lt;/p&gt;
&lt;p&gt;The company was &lt;em&gt;suffering&lt;/em&gt;. Everything around me was lazily constructed. Hardly anyone took pride in their work, many people openly despised what they were building, but the work continued. No one fought for lower tech-debt, no one strove to change the company, leadership was completely absent. The excuse was “Mercenary company is a grass-roots type of place, we rely on teams to set roadmaps and set direction”. This meant that the leaf-node teams ended up running things without any sense of collaboration, wider vision, or cohesive direction. Teams largely built what was easy without any sense of what the company or customers needed. They built purely to justify their own existence and that’s it.&lt;/p&gt;
&lt;p&gt;This begs the question: Why have leadership at all if they’re just going to bury their heads in the sand? The company would have been better off without any senior leadership at all. The people running the company were also caught up in the mercenary-centric “rest and vest” cycle.&lt;/p&gt;
&lt;p&gt;This type of thinking was a constant problem for me. I was interested in &lt;em&gt;good engineering&lt;/em&gt;, building sustainable solutions to real problems. For the most part, the people around me were interested in playing politics to justify their paychecks. No one gave a shit about the customer. No one gave a shit about the product. Everyone gave a shit about the stock price. The mercenaries were running the show and no one in leadership was inconvenienced &lt;em&gt;enough&lt;/em&gt; to stop them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mercenary company&lt;/em&gt; was directionless and failing. Instead of taking a hard look at what their customers wanted or needed, they ended up choosing to build something easier. A shortcut to more money. They chose poorly because they didn’t care about the work and they didn’t care about their customers. They cared about the paycheck. So they built the easiest thing to justify that paycheck.&lt;/p&gt;
&lt;p&gt;Here’s the part that makes me uncomfortable: &lt;em&gt;Mercenary company&lt;/em&gt; did the “right thing” by paying people well and offering stellar benefits, but it attracted exactly the wrong type of person. It attracted vultures and burn-out refugees (👋). The vultures ended up running the show and destroying the company from the inside-out. &lt;em&gt;Missionary company&lt;/em&gt; did the “wrong thing” and made excuses to pay people poorly, but it attracted the right type of person. It attracted people who wanted to build better experiences for customers. Largely, those people are chewed up and spat out after the company gets what they can out of them before significant burnout sets in.&lt;/p&gt;
&lt;p&gt;I’ve tried to come to a conclusion here a few times. This draft has been in my folder for &lt;em&gt;months&lt;/em&gt;. Ultimately, I’m just frustrated that doing the “right thing” (albeit, poorly) resulted in such dire conclusions. And I’m frustrated that doing the “wrong thing” keeps working.&lt;/p&gt;
&lt;p&gt;Personally, I believe you can pay people well &lt;em&gt;and&lt;/em&gt; curate a &lt;em&gt;missionary&lt;/em&gt; culture without devolving as long as you have good leadership that cares about the customer and the company (in that order).&lt;/p&gt;</description></item><item><title>Hunt Clip: That Was Quick</title><link>https://www.samurailink3.com/game-clips/2025-03-04-hunt-clip-that-was-quick/</link><pubDate>Tue, 04 Mar 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-03-04-hunt-clip-that-was-quick/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250305_That-Was-Quick/20250305_That-Was-Quick.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250305_That-Was-Quick/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I’m on fire, I ain’t dead</title><link>https://www.samurailink3.com/game-clips/2025-02-21-hunt-clip-im-on-fire-i-aint-dead/</link><pubDate>Fri, 21 Feb 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-02-21-hunt-clip-im-on-fire-i-aint-dead/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250222_Im-on-fire-I-aint-dead/20250222_Im-on-fire-I-aint-dead.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250222_Im-on-fire-I-aint-dead/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Oh My God</title><link>https://www.samurailink3.com/game-clips/2025-02-21-hunt-clip-oh-my-god/</link><pubDate>Fri, 21 Feb 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2025-02-21-hunt-clip-oh-my-god/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20250222_Oh-My-God/20250222_Oh-My-God.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250222_Oh-My-God/20250222_Oh-My-God.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250222_Oh-My-God/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Recommendation: The Weather Channel</title><link>https://www.samurailink3.com/blog-posts/2025-02-12-recommendation-the-weather-channel/</link><pubDate>Wed, 12 Feb 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2025-02-12-recommendation-the-weather-channel/</guid><description>&lt;p&gt;If you need some chill vaporwave vibes like the music you used to hear on The Weather Channel, check this out:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://open.spotify.com/playlist/1GBjjbfu5KL5goVR4Bd7qs?si=b53eab93409b4c59"&gt;Spotify - Playlist - The Weather Channel&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Stupid Slicer Tricks: Model Mashup</title><link>https://www.samurailink3.com/blog-posts/2025-02-11-stupid-slicer-tricks-model-mashup/</link><pubDate>Tue, 11 Feb 2025 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2025-02-11-stupid-slicer-tricks-model-mashup/</guid><description>&lt;p&gt;Sometimes you don’t need a full CAD workflow to make modifications to a model, your slicer is capable of some truly amazing feats! Here’s a story about a time where I had a model that I loved that didn’t quite meet my requirements and a remix that &lt;em&gt;also&lt;/em&gt; didn’t meet my requirements. The “only” solution was to mash up the two models to make something a bit more customized.&lt;/p&gt;
&lt;p&gt;I’ve been trying to upgrade my &lt;em&gt;domains of nerddom&lt;/em&gt; and one area I’ve always been mostly-blind to is the physical craft of electronics. I know just enough to be dangerous and spot obvious problems (after they’ve combusted), but I’ve never delved into the practice of soldering or building/repairing my own electronics. Luckily, I have friends well-versed in this domain. I bought a &lt;a href="https://pine64.com/product/pinecil-smart-mini-portable-soldering-iron/"&gt;PINECIL&lt;/a&gt; and had a friend walk me through the very basics of soldering.&lt;/p&gt;
&lt;p&gt;He recommended &lt;a href="https://www.printables.com/model/345083-rugged-multipart-pinecilts100ts80-case-v2"&gt;this PINECIL case on Printables&lt;/a&gt;, which is an &lt;em&gt;extremely nice model&lt;/em&gt;. Functional and beautiful. The only issue with it is: I’m not gonna use those extra iron tips. While I have another tip, I have neither the experience nor knowledge to use them effectively yet. I’m still an absolute beginner at this stage, I just don’t know what I don’t know.&lt;/p&gt;
&lt;p&gt;My friend recommended a flux pen for my beginner soldering kit, but the default case didn’t come with a spot for it. Luckily, &lt;a href="https://www.printables.com/model/440145-rugged-multipart-pinecilts100ts80-case-flux-pensol"&gt;this remix of the PINECIL case&lt;/a&gt; had a socket that fit perfectly, but &lt;em&gt;it was mashed up with the soldering iron tip holder that I didn’t need&lt;/em&gt;. I wanted to blend the models together so I could replace the spare-tip holder with the flux pen socket. Normally, I’d just take this out to &lt;a href="https://www.tinkercad.com/"&gt;TinkerCAD&lt;/a&gt;, but I wanted to see if I could get away with a more “low-tech” solution.&lt;/p&gt;
&lt;p&gt;For better or worse, that low-tech solution was some &lt;em&gt;goblin engineering shit&lt;/em&gt; with PrusaSlicer:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_01.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_01.jpg" alt="A screenshot of PrusaSlicer showing two models overlaid on top of each other. The models are overlaid with several negative-volume modifier cubes. It looks like a chaotic mess."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_02.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_02.png" alt="A screenshot of the PrusaSlicer part detail window. This shows the original PINECIL case model with a couple negative volume boxes added. Under that, a model named “THIS_IS_FINE.JPG” has SIX negative volume boxes added."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What have I done??&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Instead of solving this problem “correctly”, I decided to solve it “good enough”. PrusaSlicer has a great feature called “Negative Volume Modifiers”. You can do a lot of different functions with these simple shapes, even adding text to models easily. This particular modifier just removed areas of a model, kinda like a big boxy 3D eraser.&lt;/p&gt;
&lt;p&gt;Let’s dive into what this mess actually does:&lt;/p&gt;
&lt;p&gt;The first model uses negative volumes to remove the spare tip holders from the model. It isn’t perfect and leaves some gaps in the original filet of the case, but it’s good enough:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_03.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_03.png" alt="A screenshot of PrusaSlicer focusing on a single model with a couple negative volume boxes added. These negative volumes remove the spare soldering iron tip holders."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_04.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_04.jpg" alt="A screenshot of PrusaSlicer showing the sliced model after the negative volume boxes were added. The slicer preview shows the soldering iron tip holders are not printed. Instead a blank space is left behind."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This leaves us a space to add the flux pen socket!&lt;/p&gt;
&lt;p&gt;The second model just removes the entire case &lt;em&gt;around&lt;/em&gt; the flux pen socket, leaving just the socket behind:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_05.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_05.png" alt="A screenshot of PrusaSlicer showing the second sliced model after several negative volume boxes were added. The resultant print is just the flux pen holder without the case around it."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, we just gotta overlay those models &lt;em&gt;just right&lt;/em&gt; and….&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_06.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_06.jpg" alt="A screenshot of PrusaSlicer showing the print preview of the two models mashed up. The soldering iron tip holders of the original model have been replaced with the flux pen holder from the second model."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voila! We’ve now mashed up both of these models to come up with a jankier third option. Slicing this model &lt;em&gt;does result in some problematic g-code&lt;/em&gt; and PrusaSlicer isn’t too happy about it:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_07.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_07.png" alt="A screenshot of a PrusaSlicer warning message. The text reads:
ERROR:
Conflicts in G-code paths have been detected at layer 78, z=0.00mm. Please reposition the conflicting objects (THIS_IS_FINE.JPG &amp;lt;-&amp;gt; TS100_Pinecil Top Large A - My Edits) further apart.
Jump to [TS100 Pinecil Top Large A - My Edits]"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sadly, this is actually &lt;em&gt;exactly what we want&lt;/em&gt;. We have two different models that &lt;em&gt;should be&lt;/em&gt; printed on top of each other. The only question was: Would this print correctly? Let’s take a closer look at the g-code preview and try to discern what’s going on.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_08.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_08.jpg" alt="A zoomed-in screenshot of PrusaSlicer showing multiple print paths overlaid on top of each other. The double-printed sections are drawn with a diagonally-hashed line."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_09.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_09.jpg" alt="A zoomed-in screenshot of PrusaSlicer showing multiple print paths overlaid on top of each other. This preview shows the exact layer where the conflict is occurring. The double-printed sections are drawn with a diagonally-hashed line."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is just a guess, but it appears that one layer of the model is printed &lt;em&gt;twice&lt;/em&gt; in the same location. Obviously, this isn’t optimal, but as long as it doesn’t fail the print completely, it should be fine. This is actually the first time I’m seeing this type of error in PrusaSlicer. Lucky for me, PrusaSlicer complains, but doesn’t actually stop me from doing some absolutely hacky bullshit.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I absolutely love this.&lt;/em&gt; While it may be conventional to just hard-stop the user from doing something dumb, the fact that it complains, &lt;em&gt;then allows the behavior anyway&lt;/em&gt; is fucking fantastic. This is how open-source software should work: Tell me what I’m doing is dumb as hell, but then let me do it anyway, consequences be damned.&lt;/p&gt;
&lt;p&gt;I sent the job off to the printer and watched as it double-printed the flux pen socket. The nozzle tried to put down molten plastic into already-solidified plastic, and that didn’t work too well. It squiggled out and made a small mess, but didn’t actually fail or nozzle-crash. The next layer went down perfectly well. No complaints, no issues. It just did the job.&lt;/p&gt;
&lt;p&gt;Check out the final product to see the results:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_10.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_10.jpg" alt="A photograph of a complete PINECIL carrying case that is latched shut. The case is resting on the print bed of a Prusa MK4. The case is black with a gold logo peeking through from underneath."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_11.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_11.jpg" alt="A photograph of an open PINECIL case with the complete kit organized inside. Of note is the flux pen holder that we added to the original design."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_12.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_12.jpg" alt="A close-up photograph of the PINECIL case, showcasing the flux pen holder."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_13.jpg"&gt;&lt;img src="https://www.samurailink3.com/img/content/2025-02-11-Stupid-Slicer-Tricks-Model-Mashup_13.jpg" alt="A close-up photograph of the PINECIL case, showcasing the flux pen holder from an alternative angle."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Don’t get me wrong, this is &lt;em&gt;absolutely&lt;/em&gt; a hack/goblin-engineering/mess, but the bottom line is that &lt;strong&gt;IT WORKS&lt;/strong&gt;. Your projects may not need so many messy hacks or slicer trickery, but its always good to have these skills in your back pocket. Even if its not the “right way” to do something, its often the faster way.&lt;/p&gt;
&lt;p&gt;For more slicer trickery, check out these great videos from some of my favorite 3D printing YouTubers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=o-NYbUFzxLw"&gt;YouTube - Teaching Tech - 8 great 3D printer slicer features you might not know about
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=DaU8-2XadIE"&gt;YouTube - Made with Layers (Thomas Sanladerer) - Slicer Hacks to improve your 3D Printing Game&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=iziTcOLKfFc"&gt;YouTube - Maker&amp;rsquo;s Muse - How to 3D Print like a Pro using Custom Modifier Meshes!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you would like to print this model (or the remix), check out the following links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.printables.com/model/345083-rugged-multipart-pinecilts100ts80-case-v2"&gt;https://www.printables.com/model/345083-rugged-multipart-pinecilts100ts80-case-v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.printables.com/model/440145-rugged-multipart-pinecilts100ts80-case-flux-pensol"&gt;https://www.printables.com/model/440145-rugged-multipart-pinecilts100ts80-case-flux-pensol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Hunt Clip Oh</title><link>https://www.samurailink3.com/game-clips/2024-12-31-hunt-clip-oh/</link><pubDate>Tue, 31 Dec 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-12-31-hunt-clip-oh/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20250101_Oh/20250101_Oh.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20250101_Oh/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Drilled</title><link>https://www.samurailink3.com/game-clips/2024-12-30-hunt-clip-drilled/</link><pubDate>Mon, 30 Dec 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-12-30-hunt-clip-drilled/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20241230_Drilled/20241230_Drilled.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241230_Drilled/20241230_Drilled.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241230_Drilled/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bonktage And Or Bonkilation</title><link>https://www.samurailink3.com/game-clips/2024-11-25-hunt-clip-bonktage-and-or-bonkilation/</link><pubDate>Mon, 25 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-25-hunt-clip-bonktage-and-or-bonkilation/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20241126_Bonktage-And-Or-Bonkilation/20241126_Bonktage-And-Or-Bonkilation.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241126_Bonktage-And-Or-Bonkilation/20241126_Bonktage-And-Or-Bonkilation.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241126_Bonktage-And-Or-Bonkilation/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Bonk then Yoink</title><link>https://www.samurailink3.com/game-clips/2024-11-24-hunt-clip-bonk-then-yoink/</link><pubDate>Sun, 24 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-24-hunt-clip-bonk-then-yoink/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20241126_Bonk-then-Yoink/20241126_Bonk-then-Yoink.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241126_Bonk-then-Yoink/20241126_Bonk-then-Yoink.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241126_Bonk-then-Yoink/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Malicious Intent</title><link>https://www.samurailink3.com/game-clips/2024-11-24-hunt-clip-malicious-intent/</link><pubDate>Sun, 24 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-24-hunt-clip-malicious-intent/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20241126_Malicious-Intent/20241126_Malicious-Intent.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241126_Malicious-Intent/20241126_Malicious-Intent.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241126_Malicious-Intent/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: You Ready</title><link>https://www.samurailink3.com/game-clips/2024-11-22-hunt-clip-you-ready/</link><pubDate>Fri, 22 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-22-hunt-clip-you-ready/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241123_You-Ready/20241123_You-Ready.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241123_You-Ready/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Why are all the publish dates 'wrong'?</title><link>https://www.samurailink3.com/blog-posts/2024-11-22-why-are-all-the-publish-dates-wrong/</link><pubDate>Fri, 22 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-22-why-are-all-the-publish-dates-wrong/</guid><description>&lt;p&gt;If you’ve been following this site and/or &lt;a href="https://bsky.app/profile/samurailink3.com"&gt;my posts on BlueSky&lt;/a&gt;, you’ve probably seen projects pop up with &lt;em&gt;weird dates&lt;/em&gt;. The best example is my &lt;a href="https://www.samurailink3.com/projects/2024-03-05-door-handle-slammer-stopper/"&gt;Door Handle Slammer Stopper - My Stupidest Useful 3D Print&lt;/a&gt; posted on 2024-11-20, but with a publish date of 2024-03-05, what’s up with that?&lt;/p&gt;
&lt;p&gt;I’d like to treat this site as part-blog/part-portfolio. For the Slammer Stopper, I finalized the design in March, but didn’t write or post about it publicly until a couple days ago. Because I view my projects as portfolio artifacts, I’d like to keep the dates accurate to when they were actually completed. It gives me (and readers) a more-accurate timeline of what I’ve worked on and when.&lt;/p&gt;
&lt;p&gt;I’ve played around with adding separating “publish date” and “project date”, but this adds a lot of confusion around what means what to readers and around how I should the posts. In the end, I’ve decided that its fine to “lose” the data as to when the article was published, because it has pretty limited value. The real value is the timeline and content itself.&lt;/p&gt;</description></item><item><title>Do Dollars Make Sense for Incident Management?</title><link>https://www.samurailink3.com/blog-posts/2024-11-21-do-dollars-make-sense-for-incident-management/</link><pubDate>Thu, 21 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-21-do-dollars-make-sense-for-incident-management/</guid><description>&lt;p&gt;I did some writing for the blog on &lt;a href="https://rootly.com/"&gt;https://rootly.com/&lt;/a&gt; and I’m very happy with how it turned out. Go check out the full article here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://rootly.com/blog/do-dollars-make-sense-for-incident-management"&gt;https://rootly.com/blog/do-dollars-make-sense-for-incident-management&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hunt Clip: Adam Clutch</title><link>https://www.samurailink3.com/game-clips/2024-11-21-hunt-clip-adam-clutch/</link><pubDate>Thu, 21 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-21-hunt-clip-adam-clutch/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20241122_Adam-Clutch/20241122_Adam-Clutch.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241122_Adam-Clutch/20241122_Adam-Clutch.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241122_Adam-Clutch/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Dauntless Value</title><link>https://www.samurailink3.com/game-clips/2024-11-21-hunt-clip-dauntless-value/</link><pubDate>Thu, 21 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-21-hunt-clip-dauntless-value/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241122_Dauntless-Value/20241122_Dauntless-Value.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241122_Dauntless-Value/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Panic</title><link>https://www.samurailink3.com/game-clips/2024-11-21-hunt-clip-panic/</link><pubDate>Thu, 21 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-21-hunt-clip-panic/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20241122_Panic/20241122_Panic.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241122_Panic/20241122_Panic.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241122_Panic/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: A Real Fight</title><link>https://www.samurailink3.com/game-clips/2024-11-16-hunt-clip-a-real-fight/</link><pubDate>Sat, 16 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-16-hunt-clip-a-real-fight/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20241119_A-Real-Fight/20241119_A-Real-Fight.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241119_A-Real-Fight/20241119_A-Real-Fight.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241119_A-Real-Fight/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Software Engineering Essentials: Flags</title><link>https://www.samurailink3.com/blog-posts/2024-11-14-software-engineering-essentials-flags/</link><pubDate>Thu, 14 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-14-software-engineering-essentials-flags/</guid><description>&lt;p&gt;&lt;em&gt;Software Engineering Essentials&lt;/em&gt; is a series of blog posts designed to help you get started with a wide variety of software engineering topics. This post was originally part of my &lt;a href="https://gitlab.com/samurailink3/go-twitter/"&gt;Go-Twitter project&lt;/a&gt;, a project-based curriculum designed to take someone from “zero” to “competent” in the world of software engineering.&lt;/p&gt;
&lt;p&gt;All writing for this post is licensed under &lt;code&gt;CC-BY-4.0&lt;/code&gt;, while all code is licensed under the &lt;code&gt;MIT&lt;/code&gt; license.&lt;/p&gt;
&lt;h1 id="flags"&gt;Flags&lt;/h1&gt;
&lt;h2 id="flag-usage"&gt;Flag Usage&lt;/h2&gt;
&lt;p&gt;Flags are effectively &lt;em&gt;named arguments&lt;/em&gt;, with some extra features. Instead of
needing to remember the order of your program&amp;rsquo;s arguments, you can just specify
the name of the flag and what that variable should be set to. Let&amp;rsquo;s take a look
at a simple example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;01-simple-flags/main.go&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;flag&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;greeting&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;greeting&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Parse&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;%s, %s!\\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;greeting&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, if we run this program:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; !
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Huh, that looks weird. This is because our &lt;code&gt;greeting&lt;/code&gt; and &lt;code&gt;name&lt;/code&gt; variables are
empty. We never specified the flags. How do we know what the flags are? Flags
have built-in help functionality that will display all of the options available.
Most programs use &lt;code&gt;-h&lt;/code&gt; or &lt;code&gt;--help&lt;/code&gt; to display program usage text, including
flags and arguments.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Usage of /tmp/go-build1913891522/b001/exe/main:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -greeting string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -name string
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So now we can see that this program accepts the &lt;code&gt;-greeting&lt;/code&gt; and &lt;code&gt;-name&lt;/code&gt; flags.
Let&amp;rsquo;s set some values:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -greeting=&amp;#34;Sup&amp;#34; -name Tom
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sup, Tom!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Flag arguments can be set with some optional grammar to help avoid problems with
ambiguity or spaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;flag value&lt;/code&gt;: For one-word values
&lt;ul&gt;
&lt;li&gt;Unquoted spaces can change how your command is interpreted, leading to
missing values and skipped flags. See the appendix section &lt;em&gt;How Spaces Can
Affect Flags&lt;/em&gt; for an example.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flag &amp;quot;value with spaces or special characters&amp;quot;&lt;/code&gt;: For multi-word values or
values that contain some special characters.
&lt;ul&gt;
&lt;li&gt;If your value has a &lt;code&gt;$&lt;/code&gt; symbol, you may need to use single-quotes (&lt;code&gt;'&lt;/code&gt;) to
avoid the shell interpreting &lt;code&gt;$&lt;/code&gt; as the start of a shell variable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flag=&amp;quot;value&amp;quot;&lt;/code&gt;: This is the &lt;em&gt;belt-and-suspenders&lt;/em&gt; of flag declaration.
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;=&lt;/code&gt; just removes space from the declaration and makes it &lt;em&gt;very&lt;/em&gt; clear
that this particular value belongs to that particular flag. This can be
helpful to aid in readability, especially if you&amp;rsquo;re writing out examples
or documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can also specify the flags in any order:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -name=&amp;#34;General&amp;#34; -greeting=&amp;#34;Hello There&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello There, General!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or not specify a value for &lt;code&gt;-name&lt;/code&gt; at all!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -greeting=&amp;#34;Hello There&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello There, !
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can even abuse the flags to make the program finish the meme:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -greeting=&amp;#34;General Kenobi\\!&amp;#34; -name=&amp;#34;You are a bold one&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;General Kenobi!, You are a bold one!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="defaults"&gt;Defaults&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s re-create the program that inserted profiles into a database from the end
of the &lt;em&gt;Command Line Arguments&lt;/em&gt; chapter, but with flags instead:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;02-profile-saver/main.go&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;flag&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;first-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;last-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;fruit&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;veg&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;pasta&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;meal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;rice-or-beans&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;desert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;dessert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Parse&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;`Profile Name: %s %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Rice or Beans: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Favorites:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Fruit: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Vegetable: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Pasta: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Desert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Dessert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Meal: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Right now if we run this program with no flags set, we get this results:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/02-profile-saver/main.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Profile Name:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Rice or Beans:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Favorites:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Fruit:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Vegetable:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Pasta:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Desert:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Dessert:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Meal:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lots of blank spaces here. We don&amp;rsquo;t want to commit empty values to the database,
it can introduce &lt;em&gt;ambiguity&lt;/em&gt;. Did this person not have a favorite pasta or did
we just forget to add the data? Being &lt;em&gt;explicit&lt;/em&gt; in programming has several
benefits, including clarity-of-intent, so let&amp;rsquo;s add some &lt;em&gt;defaults&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Default values can provide the &lt;em&gt;usual&lt;/em&gt; options or placeholder data. Flags make
this easy. For now, let&amp;rsquo;s just use &lt;code&gt;UNKNOWN&lt;/code&gt; as the profile placeholder. With
the stanadrd &lt;code&gt;flag&lt;/code&gt; package, setting defaults is easy. Let&amp;rsquo;s take a look at the
GoDocs for &lt;code&gt;flag.String&lt;/code&gt;, available &lt;a href="https://pkg.go.dev/flag#String"&gt;here&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;func String&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;func String(name string, value string, usage string) *string
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;String defines a string flag with specified name, default value, and usage
string. The return value is the address of a string variable that stores the
value of the flag.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So the &lt;em&gt;second&lt;/em&gt; function argument allows us to specify a default value for that particular flag. Let&amp;rsquo;s do that now:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;02-profile-saver/main.go&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;flag&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;first-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;last-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;fruit&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;veg&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;pasta&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;meal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;rice-or-beans&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;desert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;dessert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Parse&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;`Profile Name: %s %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Rice or Beans: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Favorites:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Fruit: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Vegetable: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Pasta: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Desert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Dessert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Meal: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now when we run this program without any flags set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/02-profile-saver/main.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Profile Name: UNKNOWN UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Rice or Beans: UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Favorites:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Fruit: UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Vegetable: UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Pasta: UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Desert: UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Dessert: UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Meal: UNKNOWN
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There we go, that at least looks more complete.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s actually use those flags to set some values&amp;hellip; but wait, what were the
flags again? Let&amp;rsquo;s use &lt;code&gt;-h&lt;/code&gt; to see what options we have:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/02-profile-saver/main.go -h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Usage of /tmp/go-build261536590/b001/exe/main:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -desert string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dessert string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -first-name string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -fruit string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -last-name string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -meal string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -pasta string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -rice-or-beans string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -veg string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ah, got it. Now let&amp;rsquo;s actually use these:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/02-profile-saver/main.go -first-name Bob -last-name Sacamano -fruit Apple -veg &lt;span style="color:#e6db74"&gt;&amp;#34;Green Beans&amp;#34;&lt;/span&gt; -pasta Manicotti -meal Steak -desert Sahara -dessert Sundae -ri
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ce-or-beans Rice
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Profile Name: Bob Sacamano
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Rice or Beans: Rice
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Favorites:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Fruit: Apple
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Vegetable: Green Beans
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Pasta: Manicotti
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Desert: Sahara
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Dessert: Sundae
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Meal: Steak
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So now we&amp;rsquo;re able to print out all of the profile information using flags. Its
still a lot of flags to remember, but at least we have the default help text and
the order of options doesn&amp;rsquo;t matter.&lt;/p&gt;
&lt;h2 id="help-text"&gt;Help Text&lt;/h2&gt;
&lt;p&gt;As we saw above, &lt;code&gt;-h&lt;/code&gt; is pretty helpful to understand which flags are available,
what type is expected, and what the defaults are, but we can add some more
context through &lt;em&gt;help text&lt;/em&gt;. As always, &lt;a href="https://pkg.go.dev/flag#String"&gt;reading the documentation&lt;/a&gt; can help us find the right place to add help text to our flags. For
now, let&amp;rsquo;s just add one piece of help text and see how it compares to the rest
of the flags:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;02-profile-saver/main.go&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;flag&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;first-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the first name of the user profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;last-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;fruit&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;veg&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;pasta&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;meal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;rice-or-beans&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;desert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;dessert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Parse&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;`Profile Name: %s %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Rice or Beans: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Favorites:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Fruit: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Vegetable: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Pasta: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Desert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Dessert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Meal: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now let&amp;rsquo;s check out the help text:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/02-profile-saver/main.go -h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Usage of /tmp/go-build1166983742/b001/exe/main:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -desert string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dessert string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -first-name string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the first name of the user profile &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -fruit string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -last-name string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -meal string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -pasta string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -rice-or-beans string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -veg string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;default &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Neat! Now let&amp;rsquo;s add the rest:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;02-profile-saver/main.go&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;flag&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;first-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the first name of the user profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;last-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the last name of the user profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;fruit&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite fruit&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;veg&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite vegetable&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;pasta&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite type of pasta&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;meal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s all-time favorite meal&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;rice-or-beans&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;whether the user prefers a side of rice or beans&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;desert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite desert (usually hot and sandy)&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;dessert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite dessert (usually a sweet after-meal treat)&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Parse&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;`Profile Name: %s %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Rice or Beans: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;	Favorites:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Fruit: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Vegetable: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Pasta: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Desert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Dessert: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;		Meal: %s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt;, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And if we check out help text:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/02-profile-saver/main.go -h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Usage of /tmp/go-build2677080627/b001/exe/main:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -desert string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the user&amp;#39;s favorite desert (usually hot and sandy) (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -dessert string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the user&amp;#39;s favorite dessert (usually a sweet after-meal treat) (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -first-name string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the first name of the user profile (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -fruit string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the user&amp;#39;s favorite fruit (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -last-name string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the last name of the user profile (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -meal string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the user&amp;#39;s all-time favorite meal (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -pasta string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the user&amp;#39;s favorite type of pasta (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -rice-or-beans string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; whether the user prefers a side of rice or beans (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -veg string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; the user&amp;#39;s favorite vegetable (default &amp;#34;UNKNOWN&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So much better. Now our program has clear flagged arguments, defaults set, and
some help text to explain what each flag is intended for. However, this could be
cleaned up a bit more. To clean up the help text, let&amp;rsquo;s dig into &lt;em&gt;constants&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="constants"&gt;Constants&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Constants&lt;/em&gt; work very similarly to variables, but with one critical difference:
They cannot be changed at runtime. Constants are set in your source code and
compiled-in, after that, the value cannot be changed. Constants are helpful to
document and organize variables that control large pieces of your application or
that are used in a variety of places, but the values won&amp;rsquo;t change.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dig in with an example. Let&amp;rsquo;s say you were making a program that talks to
a website to get information. The functions you write to talk to the website are
all going to use the same address over and over and over again. Instead of
typing &lt;code&gt;https://www.example.com&lt;/code&gt; over and over again, you can put this address
in a &lt;em&gt;constant declaration&lt;/em&gt; near the top of your file, then just reference it
using the constant name:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;website&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;https://www.example.com&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;website&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So constants work kinda like variables, but let&amp;rsquo;s see what happens when we try
to change the value in our &lt;code&gt;main&lt;/code&gt; function:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;website&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;https://www.example.com&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;website&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;website&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;A new value&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;website&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When we run it, we get this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;main.go:13:2: cannot assign to website &lt;span style="color:#f92672"&gt;(&lt;/span&gt;untyped string constant &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;https://www.example.com&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The constants must remain constant. Trying to change them results in the program
refusing to build.&lt;/p&gt;
&lt;p&gt;So, constants can be useful to help avoid re-typing, but they can also help
generally clean up your code. Right now in our profile-saver program, we have a
lot of loose help text that we can clean up by moving those help strings from
the &lt;code&gt;flag.String&lt;/code&gt; functions into a constant declaration. So we can turn this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;first-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the first name of the user profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;last-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the last name of the user profile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;fruit&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite fruit&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;veg&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite vegetable&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;pasta&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite type of pasta&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;meal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s all-time favorite meal&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;rice-or-beans&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;whether the user prefers a side of rice or beans&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;desert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite desert (usually hot and sandy)&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;dessert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite dessert (usually a sweet after-meal treat)&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Into this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;firstNameHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the first name of the user profile&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;lastNameHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the last name of the user profile&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;fruitHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite fruit&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;vegHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite vegetable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;pastaHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite type of pasta&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;mealHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s all-time favorite meal&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;riceOrBeansHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;whether the user prefers a side of rice or beans&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;desertHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite desert (usually hot and sandy)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;dessertHelp&lt;/span&gt; = &lt;span style="color:#e6db74"&gt;&amp;#34;the user&amp;#39;s favorite dessert (usually a sweet after-meal treat)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;firstName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;first-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;firstNameHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;lastName&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;last-name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;lastNameHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favFruit&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;fruit&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;fruitHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favVeg&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;veg&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;vegHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favPasta&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;pasta&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;pastaHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favMeal&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;meal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;mealHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;riceOrBeans&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;rice-or-beans&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;riceOrBeansHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDesert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;desert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;desertHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;favDessert&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;flag&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;String&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;dessert&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;UNKNOWN&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;dessertHelp&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There&amp;rsquo;s still a lot of text, but its a bit more organized and easier to work
with. This is one of the nicest bonus features of constants: They make great
organizational tools. If you have certain aspects of your program that can be
tuned by yourself or another developer, it may be a good idea to put them in a
&lt;code&gt;const&lt;/code&gt; declaration at the top of the file so they&amp;rsquo;re easy to access and
conveniently grouped.&lt;/p&gt;
&lt;p&gt;Its worth keeping in mind that not everything can be a constant. Due to the way
the Go compiler works, complex expressions cannot be pre-evaluated. Said another
way: Constants are &lt;em&gt;baked into&lt;/em&gt; your application when you run &lt;code&gt;go build&lt;/code&gt;.
According to the &lt;a href="https://go.dev/ref/spec#Constants"&gt;Go language spec&lt;/a&gt;, the only
valid constant types are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Runes (characters)&lt;/li&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Booleans (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Numeric types (&lt;code&gt;int&lt;/code&gt;s, &lt;code&gt;float&lt;/code&gt;s, etc&amp;hellip;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want the same style of organization for types that don&amp;rsquo;t work as
constants, you can use a &lt;code&gt;var&lt;/code&gt; declaration instead:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;aMap&lt;/span&gt; = &lt;span style="color:#66d9ef"&gt;map&lt;/span&gt;[&lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;]&lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;one&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;two&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;three&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="appendix-and-references"&gt;Appendix and References&lt;/h2&gt;
&lt;h3 id="references"&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/flag#String"&gt;GoDocs: flag.String&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://go.dev/ref/spec#Constants"&gt;Go Language Reference: Constants&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="appendix"&gt;Appendix&lt;/h3&gt;
&lt;h3 id="how-spaces-can-affect-flags"&gt;How Spaces Can Affect Flags&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -greeting Hello There -name General
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello, !
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -greeting &lt;span style="color:#e6db74"&gt;&amp;#34;Hello There&amp;#34;&lt;/span&gt; -name General
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello There, General!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/02-flags/01-simple-flags/main.go -greeting&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Hello There&amp;#34;&lt;/span&gt; -name General
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello There, General!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Software Engineering Essentials: Command Line Arguments</title><link>https://www.samurailink3.com/blog-posts/2024-11-13-software-engineering-essentials-command-line-arguments/</link><pubDate>Wed, 13 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-13-software-engineering-essentials-command-line-arguments/</guid><description>&lt;p&gt;&lt;em&gt;Software Engineering Essentials&lt;/em&gt; is a series of blog posts designed to help you get started with a wide variety of software engineering topics. This post was originally part of my &lt;a href="https://gitlab.com/samurailink3/go-twitter/"&gt;Go-Twitter project&lt;/a&gt;, a project-based curriculum designed to take someone from “zero” to “competent” in the world of software engineering.&lt;/p&gt;
&lt;p&gt;All writing for this post is licensed under &lt;code&gt;CC-BY-4.0&lt;/code&gt;, while all code is licensed under the &lt;code&gt;MIT&lt;/code&gt; license.&lt;/p&gt;
&lt;h1 id="command-line-arguments"&gt;Command Line Arguments&lt;/h1&gt;
&lt;h2 id="what-are-command-line-arguments"&gt;What are command line arguments?&lt;/h2&gt;
&lt;p&gt;Command line arguments are one way to pass user input into your application.
Let&amp;rsquo;s take a look at the common Unix utility &lt;code&gt;ls&lt;/code&gt;. &lt;code&gt;ls&lt;/code&gt; is a small application
that lists files and directories, just like double-clicking on a folder in
Windows Explorer, &lt;code&gt;ls&lt;/code&gt; allows you to peer into directories and get additional
information about files, like ownership information, size, last modification
timestamps, and more. &lt;code&gt;ls&lt;/code&gt;, like many command line applications, can take in
&lt;em&gt;arguments&lt;/em&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ls some-directory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this example &lt;code&gt;ls&lt;/code&gt; is the application you are running and &lt;code&gt;some-directory&lt;/code&gt; is
the &lt;em&gt;argument&lt;/em&gt;. What you&amp;rsquo;re asking &lt;code&gt;ls&lt;/code&gt; to do is give you a listing of all files
and folders inside of &lt;code&gt;some-directory&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="how-can-my-program-use-arguments"&gt;How can my program use arguments?&lt;/h2&gt;
&lt;p&gt;Because programming is generally open-ended, you can utilize command line
arguments to control any aspect of your program. You could use an argument to
control which IP address and port your application listens for requests on, or
what to print, or if an operation should target your test or production
environments. Let&amp;rsquo;s take a look at a simple example:&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a simple Go program that will print a person&amp;rsquo;s name and age on the
command line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;01-simple-arguments/main.go&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;os&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;My name is %s and my age is %s.&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], &lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So if we run &lt;code&gt;go run example-code/02-command-line-arguments-and-flags/01-command-line-arguments/01-simple-arguments/main.go Bob 99&lt;/code&gt;, we&amp;rsquo;ll see: &lt;code&gt;My name is Bob and my age is 99.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In this example, we use the &lt;code&gt;os&lt;/code&gt; package to get an array of arguments provided
on the command line. Arrays in Go start at &lt;code&gt;0&lt;/code&gt;, so we&amp;rsquo;re actually printing the
second and third argument. The first argument is the location of the program
we&amp;rsquo;re running. Since we&amp;rsquo;re using &lt;code&gt;go run&lt;/code&gt;, it will be in a temporary,
auto-generated location. Let&amp;rsquo;s add this block of code to our program and look at
each argument individually:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Our program&amp;#39;s arguments:&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;i&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;arg&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;range&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Printf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;os.Args[%d]: &amp;#39;%s&amp;#39;\\n&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;i&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;arg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This code will print out each argument and its number:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Our program&amp;#39;s arguments:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;os.Args[0]: &amp;#39;/tmp/go-build201851007/b001/exe/main&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;os.Args[1]: &amp;#39;Bob&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;os.Args[2]: &amp;#39;99&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So &lt;code&gt;/tmp/go-build201851007/b001/exe/main&lt;/code&gt; is the temporary compiled version of
our program, made by the &lt;code&gt;go run&lt;/code&gt; command. The other arguments, &lt;code&gt;Bob&lt;/code&gt; and &lt;code&gt;99&lt;/code&gt;
are the arguments we provided on the command line.&lt;/p&gt;
&lt;p&gt;So, what happens if we provide less than 2 arguments to our program?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/01-command-line-arguments/01-simple-arguments/main.go Bob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;panic: runtime error: index out of range [2] with length 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;goroutine 1 [running]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;main.main()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; /home/samurailink3/git/go-twitter/example-code/02-command-line-arguments-and-flags/01-command-line-arguments/01-simple-arguments/main.go:9 +0x21c
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;exit status 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Uh oh&amp;hellip; &lt;code&gt;panic: runtime error: index out of range [2] with length 2&lt;/code&gt;&amp;hellip; That
doesn&amp;rsquo;t look good. What happened is we tried to access a variable that was
outside of the array. Here&amp;rsquo;s a simple diagram of the &lt;code&gt;os.Args&lt;/code&gt; array and what we&amp;rsquo;re trying to access:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Arg 0: Our program Arg 1: Our provided name Arg 2: What we&amp;#39;re trying to access
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | | |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; v v v
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[ &amp;#34;/tmp/go-build201851007/b001/exe/main&amp;#34;, &amp;#34;Bob&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;os.Args&lt;/code&gt; array only contains 2 items (&lt;code&gt;os.Args[0]&lt;/code&gt; and &lt;code&gt;os.Args[1]&lt;/code&gt;), but
we&amp;rsquo;re trying to access something in the &lt;em&gt;third&lt;/em&gt; place (&lt;code&gt;os.Args[2]&lt;/code&gt;), beyond the
end of the array. This is an issue, so the code &lt;code&gt;panic&lt;/code&gt;s. How can we defend
against that? We want to avoid &lt;code&gt;panic&lt;/code&gt;ing and let the user know they&amp;rsquo;re missing
a required field.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;len&lt;/code&gt; check:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(&lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt;) &amp;lt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Do something here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can get the number of items present in the &lt;code&gt;os.Args&lt;/code&gt; array and do something
if we don&amp;rsquo;t have enough. First, let&amp;rsquo;s print out a helpful message for the user:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(&lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt;) &amp;lt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;This program requires two arguments: Name and Age, you have&amp;#34;&lt;/span&gt;, len(&lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt;)&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When we run this with only the first argument, we get:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/01-command-line-arguments/01-simple-arguments/main.go Bob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;This program requires two arguments: Name and Age, you have 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;panic: runtime error: index out of range [2] with length 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;goroutine 1 [running]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;main.main()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; /home/samurailink3/git/go-twitter/example-code/02-command-line-arguments-and-flags/01-command-line-arguments/01-simple-arguments/main.go:13 +0x29b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;exit status 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Generally, we don&amp;rsquo;t want to show panics to the user, so let&amp;rsquo;s exit with a
non-successful error code (to learn more about error codes, check out &lt;a href="https://tldp.org/LDP/abs/html/exitcodes.html"&gt;the
Advanced Bash-Scripting Guide&lt;/a&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(&lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt;) &amp;lt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;This program requires two arguments: Name and Age, you have&amp;#34;&lt;/span&gt;, len(&lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Args&lt;/span&gt;)&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#75715e"&gt;// See &amp;#34;Advanced Bash-Scripting Guide: Exit Codes With Special Meanings&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#75715e"&gt;// in the References section for why we use &amp;#34;2&amp;#34; here.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#a6e22e"&gt;os&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Exit&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now when we run our program with the missing argument, we get:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/01-command-line-arguments/01-simple-arguments/main.go Bob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;This program requires two arguments: Name and Age, you have 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;exit status 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s &lt;em&gt;way&lt;/em&gt; cleaner. Now if we run it with the right number of arguments, we see:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go run example-code/02-command-line-arguments-and-flags/01-command-line-arguments/01-simple-arguments/main.go Bob 99
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;My name is Bob and my age is 99.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Our program&amp;#39;s arguments:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;os.Args[0]: &amp;#39;/tmp/go-build1771918657/b001/exe/main&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;os.Args[1]: &amp;#39;Bob&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;os.Args[2]: &amp;#39;99&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="when-should-i-use-arguments"&gt;When should I use arguments?&lt;/h2&gt;
&lt;p&gt;Arguments are best used when an application has a limited number of distinct
options or your program operates on an unlimited number of the same argument.
Let&amp;rsquo;s expand that previous statement:&lt;/p&gt;
&lt;p&gt;So &lt;code&gt;git&lt;/code&gt; is a great example of having a limited (and segmented) number of
distinct options. It can do &lt;strong&gt;a lot&lt;/strong&gt;, but the options are &lt;em&gt;segmented&lt;/em&gt; by
sub-command. So, something &lt;code&gt;git branch&lt;/code&gt; would have pretty simple arguments, like
&lt;code&gt;git branch -D branch-name&lt;/code&gt; and &lt;code&gt;git branch --track local-branch remote-branch&lt;/code&gt;.
There are a couple of arguments to keep in your head, not too bad.&lt;/p&gt;
&lt;p&gt;Another program we talked about earlier, &lt;code&gt;ls&lt;/code&gt;, is a great example of having an
unlimited number of the same argument. So you can run &lt;code&gt;ls&lt;/code&gt; with zero arguments,
which just shows the files and folders present in your current directory, but we
can also run &lt;code&gt;ls some-directory and-another-one but-also-a-third&lt;/code&gt; to see what&amp;rsquo;s
inside those three distinct directories. &lt;code&gt;ls&lt;/code&gt; supports an unlimited number of
arguments, but each one does the same thing, so its not hard to remember or
think about.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say you had a program to insert profile information into a database. You
track the following information about people:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First Name&lt;/li&gt;
&lt;li&gt;Last Name&lt;/li&gt;
&lt;li&gt;Favorite Fruit&lt;/li&gt;
&lt;li&gt;Favorite Vegetable&lt;/li&gt;
&lt;li&gt;Favorite Pasta&lt;/li&gt;
&lt;li&gt;Favorite Meal&lt;/li&gt;
&lt;li&gt;Rice or Beans&lt;/li&gt;
&lt;li&gt;Favorite Desert&lt;/li&gt;
&lt;li&gt;Favorite Dessert&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your application in use may look like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;new-profile Bob Sacamano Apple GreenBeans Manicotti Steak Sahara Sundae
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Your users will need to keep this whole list in their heads &lt;em&gt;in order&lt;/em&gt;. That&amp;rsquo;s a
pretty bad user experience and its likely that someone will forget a field or
worse, get the order of the arguments wrong. This would add data into the wrong
fields in your database. There are too many options to keep track of here,
arguments aren&amp;rsquo;t a good choice for this program. Case-in-point: The above
example forgets the &amp;ldquo;Rice or Beans&amp;rdquo; field. Did you catch it?&lt;/p&gt;
&lt;p&gt;This application would be perfect for &lt;em&gt;flags&lt;/em&gt;, so we&amp;rsquo;ll cover that in the next
section.&lt;/p&gt;
&lt;h2 id="appendix-and-references"&gt;Appendix and References&lt;/h2&gt;
&lt;h3 id="references"&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tldp.org/LDP/abs/html/exitcodes.html"&gt;Advanced Bash-Scripting Guide: Exit Codes With Special Meanings&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;There are few hard rules for exit codes. Exit 0 usually means everything
worked as expected, no errors. Exit 1 usually means something went wrong.
Exit 2 is commonly used to indicate a problem with the command itself (too
many arguments, too few, etc). These &amp;ldquo;rules&amp;rdquo; and prefaced with
&amp;ldquo;usually/commonly&amp;rdquo; because exit codes are ultimately up to the whims of
the developer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Software Engineering Essentials: Working with GitLab (and GitHub)</title><link>https://www.samurailink3.com/blog-posts/2024-11-12-software-engineering-essentials-working-with-gitlab-and-github/</link><pubDate>Wed, 13 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-12-software-engineering-essentials-working-with-gitlab-and-github/</guid><description>&lt;p&gt;&lt;em&gt;Software Engineering Essentials&lt;/em&gt; is a series of blog posts designed to help you get started with a wide variety of software engineering topics. This post was originally part of my &lt;a href="https://gitlab.com/samurailink3/go-twitter/"&gt;Go-Twitter project&lt;/a&gt;, a project-based curriculum designed to take someone from “zero” to “competent” in the world of software engineering.&lt;/p&gt;
&lt;p&gt;All writing for this post is licensed under &lt;code&gt;CC-BY-4.0&lt;/code&gt;, while all code is licensed under the &lt;code&gt;MIT&lt;/code&gt; license.&lt;/p&gt;
&lt;h1 id="gitlab"&gt;GitLab&lt;/h1&gt;
&lt;h2 id="branch-etiquette"&gt;Branch Etiquette&lt;/h2&gt;
&lt;p&gt;Git makes working in groups much easier than manually copying and pasting code
together from multiple sources. A centralized Git hosting service can make it
even easier. Most of the time when multiple people work on a project, changes
are committed to feature-specific branches. These can be bug-fixes, new
features, refactors, or anything else. The important thing to keep in mind is to
keep your changes organized in the proper branches.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re working on a bug-fix on a branch named &lt;code&gt;front-page-css-bugfix&lt;/code&gt;, don&amp;rsquo;t
pollute that branch with unnecessary changes like fixing test cases in an
unrelated function. The changes in a branch should correspond to that branch. If
you &lt;em&gt;really&lt;/em&gt; want to do that work and save it somewhere, feel free to create a
new branch. Branches are free and easy to use, feel free to make new ones as you
need.&lt;/p&gt;
&lt;h2 id="merge-requests"&gt;Merge Requests&lt;/h2&gt;
&lt;p&gt;Merge Requests (or Pull Requests in GitHub lingo) are a mechanism in most Git
hosting services designed to make it easier to handle merging in new changes.
While Git has a lot of tools for managing changes and merges, the web interface
is a bit easier to get started with for newcomers.&lt;/p&gt;
&lt;p&gt;More important than the change itself is the Code Review process that merge
requests assist with. Chances are, your merge request won&amp;rsquo;t be accepted
immediately and without question. Most of the time, we have something to fix or
something to change. The merge request view allows other team members to comment
on your diff and even highlight individual lines or blocks of changes to leave
comments. If you&amp;rsquo;ve ever used the &amp;ldquo;Track Changes&amp;rdquo; feature of Microsoft Office
product, you&amp;rsquo;ll be well-acquainted with this interface.&lt;/p&gt;
&lt;p&gt;When a merge request is accepted, your commits in the merge request will be
applied to the branch your request targets (usually the main development
branch). Then, whenever people fetch and pull changes, your commits will be
pulled down to their local repositories. This keeps everyone in lock-step with
each other while you all work on the same codebase.&lt;/p&gt;
&lt;p&gt;Your old branches should be deleted once merged. This isn&amp;rsquo;t a technical
requirement, it just keeps things clean.&lt;/p&gt;
&lt;h2 id="protecting-branches"&gt;Protecting Branches&lt;/h2&gt;
&lt;p&gt;Because the main development branch is used for collaboration and keeping
everyone on the project on the same page, you usually don&amp;rsquo;t want to commit
changes directly to it. Instead, you commit changes to the main development
branch through &lt;em&gt;merge requests&lt;/em&gt;. This ensures that the commits people are adding
are reviewed and communicated before they are added to the main branch.&lt;/p&gt;
&lt;p&gt;Most Git hosting services have a feature that will allow you to &lt;em&gt;protect&lt;/em&gt;
certain branches. Protecting a branch can prevent things like deletion and/or
directly pushing changes onto that branch. Instead changes are added in through
merge requests.&lt;/p&gt;</description></item><item><title>Software Engineering Essentials: Version Control with Git</title><link>https://www.samurailink3.com/blog-posts/2024-11-11-software-engineering-essentials-version-control-with-git/</link><pubDate>Mon, 11 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-11-software-engineering-essentials-version-control-with-git/</guid><description>&lt;p&gt;&lt;em&gt;Software Engineering Essentials&lt;/em&gt; is a series of blog posts designed to help you get started with a wide variety of software engineering topics. This post was originally part of my &lt;a href="https://gitlab.com/samurailink3/go-twitter/"&gt;Go-Twitter project&lt;/a&gt;, a project-based curriculum designed to take someone from “zero” to “competent” in the world of software engineering.&lt;/p&gt;
&lt;p&gt;All writing for this post is licensed under &lt;code&gt;CC-BY-4.0&lt;/code&gt;, while all code is licensed under the &lt;code&gt;MIT&lt;/code&gt; license.&lt;/p&gt;
&lt;h1 id="git"&gt;Git&lt;/h1&gt;
&lt;h2 id="what-is-git"&gt;What is Git?&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;Git is a free and open source distributed version control system designed to
handle everything from small to very large projects with speed and efficiency.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Git is an application designed to manage your source code and make it easy to
keep version history, but why would you want this? Programming gets messy,
especially in large projects. Let&amp;rsquo;s say you&amp;rsquo;re testing an experimental bugfix,
you may be tempted to copy/paste your code into a different folder and name it,
&lt;code&gt;my-project_bugfix&lt;/code&gt;, but what happens when you have &lt;code&gt;my-project_bugfix2&lt;/code&gt; or
&lt;code&gt;my-project_bugfix_real&lt;/code&gt;. Copying around folders of source code might work
initially, but will quickly get messy, especially if you need to work with other
people. Git provides a system to help keep your code organized, easy to work
with, and easy to collaborate on.&lt;/p&gt;
&lt;p&gt;A Git repository is essentially a place where you can store files to track and
share changes to those files. Git repositories (or &lt;em&gt;repos&lt;/em&gt;, for short) are
usually used to store and track changes to source code files.&lt;/p&gt;
&lt;h2 id="installing-git"&gt;Installing Git&lt;/h2&gt;
&lt;p&gt;Git is available on a wide variety of platforms and you can find an installer
&lt;a href="https://git-scm.com/download/"&gt;here&lt;/a&gt;. There are some options to pick during setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Select Components:&lt;/strong&gt; Default&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choosing the default editor used by Git:&lt;/strong&gt; Use Visual Studio Code as Git&amp;rsquo;s
default editor
&lt;ul&gt;
&lt;li&gt;If you don&amp;rsquo;t have Visual Studio Code, exit the Git installer, &lt;a href="https://code.visualstudio.com/Download"&gt;install
vscode&lt;/a&gt;, then re-launch the Git
installer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adjusting the name of the initial branch in new repositories:&lt;/strong&gt; Override the
default branch name for new repositories: &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adjusting your PATH environment:&lt;/strong&gt; Git from the command line and also from
3rd-party software&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choosing the SSH executable:&lt;/strong&gt; Use external OpenSSH
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/terminal/tutorials/ssh"&gt;SSH is now included in Windows 10 and Windows 11 by
default&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choosing HTTPS transport backend:&lt;/strong&gt; UUse the OpenSSL library&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuring the line ending conversions:&lt;/strong&gt; Checkout as-is, commit as-is&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuring the terminal emulator to use with Git Bash:&lt;/strong&gt; Use MinTTY (the
default terminal of MSYS2)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose the default behavior of &lt;code&gt;git pull&lt;/code&gt;:&lt;/strong&gt; Only ever fast-forward&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose a credential helper:&lt;/strong&gt; Git Credential Manager&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuring extra options:&lt;/strong&gt; Check both &lt;em&gt;Enable file system caching&lt;/em&gt; and
&lt;em&gt;Enable symbolic links&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuring experimental options:&lt;/strong&gt; Leave all options unchecked&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configuring-ssh-and-setting-up-your-gitlab-account"&gt;Configuring SSH and Setting Up Your GitLab Account&lt;/h2&gt;
&lt;p&gt;First &lt;a href="https://gitlab.com/users/sign_up"&gt;register for GitLab&lt;/a&gt;. Next, we need to create an SSH
key so we can authenticate to GitLab.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Windows+R&lt;/code&gt; to bring up the &amp;ldquo;Run&amp;rdquo; dialog box.&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;powershell&lt;/code&gt; and press &lt;code&gt;Enter&lt;/code&gt; to open up the PowerShell prompt.&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;ssh-keygen&lt;/code&gt; and press &lt;code&gt;Enter&lt;/code&gt; to start the key creation process
&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Enter&lt;/code&gt; to accept the default file path&lt;/li&gt;
&lt;li&gt;Type a passphrase to protect your key and press &lt;code&gt;Enter&lt;/code&gt;.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Your passphrase will not appear in the terminal window as
you type it. This is a security feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Re-type your passphrase and press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The key is generated and a list of file paths is printed out. Make note of
where the public key has been saved.&lt;/li&gt;
&lt;li&gt;Use VSCode to open that &lt;strong&gt;public key&lt;/strong&gt; file. Keep powershell and vscode
open for the next section.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/-/profile/keys"&gt;Click here&lt;/a&gt; to go to your GitLab User Settings to
manage your SSH keys. In the &lt;em&gt;Add an SSH key&lt;/em&gt; section, copy and paste the entire
&lt;em&gt;public key file&lt;/em&gt; from before into the &lt;em&gt;Key&lt;/em&gt; text box, then click &lt;em&gt;Add key&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Now bring up the &lt;code&gt;powershell&lt;/code&gt; window you had open before and use the &lt;code&gt;ssh-add&lt;/code&gt;
command. Type your key passphrase and press &lt;code&gt;Enter&lt;/code&gt;. Remember: Your passphrase
will not be shown here as you type it.&lt;/p&gt;
&lt;p&gt;This command will add your key to an &lt;code&gt;ssh-agent&lt;/code&gt;. This program just makes it
easier to use your key. Instead of needing to type your passphrase every time
you use the key, you just add it to the agent and use the passphrase only once.
You&amp;rsquo;ll need to do this each time the computer reboots.&lt;/p&gt;
&lt;p&gt;You can see what keys the agent has with the command: &lt;code&gt;ssh-add -l&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can remove keys from the agent, thereby &amp;ldquo;re-locking&amp;rdquo; them, with the command:
&lt;code&gt;ssh-add -D&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="how-git-views-the-world"&gt;How Git views the World&lt;/h2&gt;
&lt;h3 id="a-brief-introduction-to-hashes"&gt;A Brief Introduction to Hashes&lt;/h3&gt;
&lt;p&gt;Git&amp;rsquo;s view of the world is through &lt;em&gt;hashes&lt;/em&gt;. A hash function is a way to &amp;ldquo;boil
down&amp;rdquo; data to a fixed-length value. This sounds complex, but its simple in
practice. Let&amp;rsquo;s look at the current hash of this file I&amp;rsquo;m writing now:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;~ sha1sum Handouts/01-source-code-version-control-and-hosting/01-git.md
0b4597c1d9294a633ea584d715ce6681e57cb82a Handouts/01-source-code-version-control-and-hosting/01-git.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But as I write more, change the content, and save, the hash will change:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;~ sha1sum Handouts/01-source-code-version-control-and-hosting/01-git.md
8393d5018367212dcfe4fa6e477fdf5deff28576 Handouts/01-source-code-version-control-and-hosting/01-git.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So hashing is a way to take data of any amount and get a fixed-length value that
is unique to that data&amp;rsquo;s content. Some practical uses involve things like &lt;em&gt;error
checking, data deduplication, and protection against corruption or tampering&lt;/em&gt;.
Git uses hashes to identify individual objects like files, directories,
references, commits, and more.&lt;/p&gt;
&lt;h3 id="diffs-on-diffs-on-diffs"&gt;Diffs on Diffs on Diffs&lt;/h3&gt;
&lt;p&gt;Git heavily utilizes the concept of &lt;code&gt;diff&lt;/code&gt;s as a way to understand the
differences between files (and multiple historical versions of the same file).
This makes merges easier to manage and makes for more efficient file storage.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s check out &lt;code&gt;diff&lt;/code&gt; in action:&lt;/p&gt;
&lt;p&gt;I have two files, &lt;code&gt;a.txt&lt;/code&gt; and &lt;code&gt;b.txt&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;a.txt:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Test
This is file a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;b.txt:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Test
This is file b
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here&amp;rsquo;s what I get when I run &lt;code&gt;diff a.txt b.txt&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;2c2
&amp;lt; This is file a
---
&amp;gt; This is file b
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;diff&lt;/code&gt; only shows us the differences between the files. Git can use this to
figure out what changed between different objects. A &lt;em&gt;commit&lt;/em&gt; in Git is like
taking a snapshot of the diff of the entire repository. As you make more
commits, you are creating historical records of what changed in that repository
at that moment in time. By playing the diffs in reverse, you can effectively
wind back the clock and travel to past, undoing changes.&lt;/p&gt;
&lt;p&gt;So how does git &amp;ldquo;play back&amp;rdquo; those diffs? This is an operation called &lt;em&gt;patching&lt;/em&gt;.
A patch is a series of changes intended to be applied to an existing system.&lt;/p&gt;
&lt;p&gt;So if I had a program and someone found a typo: &lt;code&gt;hello.go&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;package main

import &amp;#34;fmt&amp;#34;

func main() {
	fmt.Println(&amp;#34;henlo world&amp;#34;)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;They could send me a small patch to fix it:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;typo-fix.patch&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;--- hello.go	2023-01-01 21:25:05.694853862 +0000
+++ hello.go	2023-01-01 21:26:15.863385402 +0000
@@ -3,5 +3,5 @@
 import &amp;#34;fmt&amp;#34;

 func main() {
-	fmt.Println(&amp;#34;henlo world&amp;#34;)
+	fmt.Println(&amp;#34;hello world&amp;#34;)
 }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And I could use &lt;code&gt;patch hello.go typo-fix.patch&lt;/code&gt; or &lt;code&gt;git apply typo-fix.patch&lt;/code&gt; to
apply the diff. Now my application will print &lt;code&gt;hello world&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;A Git repository is just hashed objects and diffs stacked on top of diffs.&lt;/p&gt;
&lt;h3 id="extra-reading"&gt;Extra Reading&lt;/h3&gt;
&lt;p&gt;If you enjoyed this section, feel free to check out &lt;a href="https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain"&gt;Git Internals&lt;/a&gt; chapter in the official book for an ever deeper dive.&lt;/p&gt;
&lt;h2 id="using-git-on-the-command-line"&gt;Using Git on the Command Line&lt;/h2&gt;
&lt;p&gt;Git is an open source application and there are a ton of products and graphical
interfaces designed to make working with it easier. While these can work well in
some straight-forward circumstances, they all tend to fall apart pretty badly
when things go off the &amp;ldquo;happy path&amp;rdquo;, and &lt;a href="https://xkcd.com/1597/"&gt;it can be difficult to get back to a
good state&lt;/a&gt;. For this reason, we&amp;rsquo;ll focus on using the command-line
version of Git. Once you&amp;rsquo;re comfortable with this interface, you can absolutely
use any Git-compatible application you want, including &lt;a href="https://code.visualstudio.com/docs/sourcecontrol/overview"&gt;VS Code&amp;rsquo;s excellent Git
integration&lt;/a&gt;, just don&amp;rsquo;t skip learning the CLI basics first.&lt;/p&gt;
&lt;h3 id="project-creation"&gt;Project Creation&lt;/h3&gt;
&lt;p&gt;A Git repository is just a folder with another &lt;code&gt;.git&lt;/code&gt; folder inside of it. In
the &lt;code&gt;.git&lt;/code&gt; folder are a bunch of directories and files that Git uses to make
sense of your codebase. These include hashed objects, diffs, and metadata used
to keep things organized and human-compatible. You shouldn&amp;rsquo;t need to dive into
this directory or change anything.&lt;/p&gt;
&lt;p&gt;The command to instantiate a new Git repository on your local system is: &lt;code&gt;git init my-project-name&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once you run this command, you&amp;rsquo;ll need a folder named &lt;code&gt;my-project-name&lt;/code&gt;. All of
your code, as well as anything you want to keep under version control (like
documentation files), should go here.&lt;/p&gt;
&lt;h3 id="cloning-an-existing-project"&gt;Cloning an Existing Project&lt;/h3&gt;
&lt;p&gt;Git is a distributed system, which means projects don&amp;rsquo;t have to live purely on
your local system. Many programmers utilize a Git-hosting service to store and
share their code with other contributors. These include services like
&lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;, &lt;a href="https://about.gitlab.com/"&gt;GitLab&lt;/a&gt;, and &lt;a href="https://bitbucket.org/product"&gt;Bitbucket&lt;/a&gt;. Don&amp;rsquo;t worry
about signing up for any of these services just yet, the next section will walk
you through the basics of &lt;a href="https://about.gitlab.com/"&gt;GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Git hosting services give you an easy way to interact with other contributors,
report and accept issues, manage merge requests, and most importantly: Share
your code with the world. Its important to understand that Git is a distributed
system &lt;em&gt;by default&lt;/em&gt;, you don&amp;rsquo;t &lt;em&gt;need&lt;/em&gt; these hosting sites to share or
collaborate on code, but they do make it easier.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You can think about Git hosting services like YouTube or Vimeo. You can
absolutely share video files with people or even make your own video hosting
service, but using someone else&amp;rsquo;s service is so much easier. It is important to
keep in mind that Git is not GitHub. GitHub can be used to host a Git
repository, just like YouTube can be used to host a video. The hosting service
and the core technology are two different things.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Most Git hosting sites will give you one or two &lt;em&gt;Clone&lt;/em&gt; addresses you can use to
copy down the project locally. Most often these addresses are &lt;em&gt;SSH&lt;/em&gt; and/or
&lt;em&gt;HTTPS&lt;/em&gt; links. You can use these addresses in this command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone &amp;lt;https://github.com/torvalds/linux.git&lt;/code&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;or like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone git@github.com:torvalds/linux.git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Typically&lt;/em&gt;, an &lt;code&gt;https&lt;/code&gt; repository link is going to be &lt;em&gt;read-only&lt;/em&gt;. You can pull
down changes, but won&amp;rsquo;t be able to push your own changes (unless you set up
HTTPS authentication). An &lt;code&gt;ssh&lt;/code&gt; repository link (the one that looks like
&lt;code&gt;git@gitlab&lt;/code&gt;) is &lt;em&gt;typically&lt;/em&gt; going to be &lt;em&gt;read+write&lt;/em&gt;. You will be able to push
your changes to the remote repository.&lt;/p&gt;
&lt;p&gt;This will clone the repository hosted on &lt;em&gt;GitHub&lt;/em&gt;, by the user &lt;em&gt;torvalds&lt;/em&gt;, with
the project name &lt;em&gt;linux&lt;/em&gt;, into a directory on your local system called &lt;em&gt;linux&lt;/em&gt;.
After you run that command, you can browse the Linux source code on your own
system. Because Git is decentralized, you obtain a &lt;em&gt;full copy&lt;/em&gt; of the source
code repository, including history, commits, branches, tags, and other Git
metadata. If you want, you can see what the code looked like last year, or even
before then. You can see when certain features were merged in, or when a certain
version-number was tagged.&lt;/p&gt;
&lt;p&gt;One thing to keep in mind is some data found on the Git host site &lt;em&gt;isn&amp;rsquo;t
included with the repository&lt;/em&gt;. These would be things like merge request
discussions, issues and bug reports, and project milestones and planning
features. By default, Git does not track these items in the repository, so they
are instead hosted directly by the Git hosting service.&lt;/p&gt;
&lt;h3 id="viewing-and-committing-changes"&gt;Viewing and Committing Changes&lt;/h3&gt;
&lt;p&gt;Git&amp;rsquo;s version control isn&amp;rsquo;t automated, users need to manually make &amp;ldquo;checkpoints&amp;rdquo;
of their changes to let Git know &amp;ldquo;these changes are important to track&amp;rdquo;. In Git,
these &amp;ldquo;checkpoints&amp;rdquo; are called &lt;em&gt;commits&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;em&gt;commit&lt;/em&gt; is a way to tell Git &amp;ldquo;here are the changes I want to track&amp;rdquo;. Not
everything in a repository folder is automatically tracked. We need to tell Git
what files we want to track. For now though, let&amp;rsquo;s see how Git see&amp;rsquo;s the world:&lt;/p&gt;
&lt;p&gt;In this example, I have a new repository and I&amp;rsquo;ve created my first file with
some &amp;ldquo;Hello, World!&amp;rdquo; text in it. I can use &lt;code&gt;git status&lt;/code&gt; to see what Git thinks
of the files in the repository:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;~/git/my-project-name git status
On branch main

No commits yet

Untracked files:
 (use &amp;#34;git add &amp;lt;file&amp;gt;...&amp;#34; to include in what will be committed)
 my-first-file.txt

nothing added to commit but untracked files present (use &amp;#34;git add&amp;#34; to track)&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Git sees a new file that it has never tracked before: &lt;code&gt;my-first-file.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now, let&amp;rsquo;s follow Git&amp;rsquo;s helpful advice, add the file, and re-run the status
command to see what changes:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;~/git/my-project-name git add my-first-file.txt
~/git/my-project-name git status
On branch main

No commits yet

Changes to be committed:
 (use &amp;#34;git rm --cached &amp;lt;file&amp;gt;...&amp;#34; to unstage)
 new file: my-first-file.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now it looks like we have added the file to our &lt;em&gt;staging area&lt;/em&gt;, but we haven&amp;rsquo;t
committed. We&amp;rsquo;re only preparing the files for commit, we haven&amp;rsquo;t made the
&amp;ldquo;checkpoint&amp;rdquo; yet. To do that, let&amp;rsquo;s use &lt;code&gt;git commit&lt;/code&gt;. By default, a text editor
will pop up or display in your terminal. This is used for writing a &lt;em&gt;commit
message&lt;/em&gt;. A &lt;em&gt;commit message&lt;/em&gt; is what will be logged with your code changes into
Git history. So if you&amp;rsquo;re working on a shared project, what you write here will
be viewable by anyone with access to the repository.&lt;/p&gt;
&lt;p&gt;Writing good commit messages is an art form and practice makes perfect. Try to
include enough context with your messages, so a &amp;ldquo;code detective&amp;rdquo; down the line
can figure out what your change did without needing to read the code itself.
Keep in mind that &lt;strong&gt;you&lt;/strong&gt; will be that &amp;ldquo;code detective&amp;rdquo; one day, and &lt;strong&gt;the code
you&amp;rsquo;ll be digging into may very well be your own&lt;/strong&gt;. Trying to track down a bug
and running into a commit that just says &amp;ldquo;fix&amp;rdquo; is infuriating. Make it easy on
yourself, write good commit messages.&lt;/p&gt;
&lt;p&gt;A good Git commit message explains &lt;em&gt;what changed&lt;/em&gt; and &lt;em&gt;why&lt;/em&gt;. The first line is
reserved for a title, the second line skipped, and the third line and beyond is
for your longer write-up. This is so &lt;code&gt;git log --oneline&lt;/code&gt; and other Git tools can
display text nicely. This isn&amp;rsquo;t a hard rule though, people can (and will)
disregard good commit message etiquette, the software will work with it all the
same. &lt;a href="https://zachholman.com/posts/git-commit-history/"&gt;Zach Holman has a great post about commit messages and why they just
don&amp;rsquo;t matter&lt;/a&gt;, so there are
multiple schools of thought on the subject.&lt;/p&gt;
&lt;p&gt;Back to the example. So I&amp;rsquo;ve written this as my commit message:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Added my-first-file.txt to use in a Git example

I&amp;#39;ve added this file with default text in order to show Git examples
using commit messages.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I saved the file and exited the text editor. Git then uses this to construct a
commit. It returned this text:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[main (root-commit) 3fa8cef] Added my-first-file.txt to use in a Git example
 1 file changed, 1 insertion(+)
 create mode 100644 my-first-file.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now I can use &lt;code&gt;git log&lt;/code&gt; to see my history:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;commit 3fa8cefb1c854a550158a58d6443ec2b27e957fe (HEAD -&amp;gt; main)
Author: Tom Webster &amp;lt;tom@samurailink3.com&amp;gt;
Date: Wed Jan 4 00:17:48 2023 +0000

 Added my-first-file.txt to use in a Git example

 I&amp;#39;ve added this file with default text in order to show Git examples
 using commit messages.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To get a more compact view, you can use &lt;code&gt;git log --oneline&lt;/code&gt; and that will
display your commit titles in a list:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;3fa8cef (HEAD -&amp;gt; main) Added my-first-file.txt to use in a Git example
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You may have noticed that long string of jumbled text above:
&lt;code&gt;3fa8cefb1c854a550158a58d6443ec2b27e957fe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is a &lt;em&gt;commit ID&lt;/em&gt;. A &lt;code&gt;commit ID&lt;/code&gt; is a hash used to identify the change
you&amp;rsquo;ve added to history. Since hashes are designed to be unique, we only need to
display enough characters to identify a single commit, we don&amp;rsquo;t need to display
the full ID from above, we can just display &lt;code&gt;3fa8cef&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A simple example of this is like an ID system with too many digits. Let&amp;rsquo;s say
you have a list of the best fruits, but each ID has 10 digits, so you end up
with a table like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Fruit - ID Number

Apple - 0000000001
Orange - 0000000002
Banana - 0000000003
Strawberry - 0000000004
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So much wasted space in that ID number. If we think we&amp;rsquo;ll have less than 100
fruits in this list, we can just use 2 digits to display the ID instead of the
full 10:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Fruit - ID Number

Apple - 01
Orange - 02
Banana - 03
Strawberry - 04
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Hashes in Git operate in mostly the same way: It will give you the shortest
unambiguous hash, but the minimum number of digits is &lt;strong&gt;4&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="git-remotes"&gt;Git Remotes&lt;/h3&gt;
&lt;p&gt;Git Remotes are &lt;em&gt;remote repositories&lt;/em&gt;. Because Git is a distributed system, you
can have multiple remote repositories you can read from or write to. If you
cloned this course repository from GitLab, you&amp;rsquo;ll probably see this when you run
&lt;code&gt;git remote -v&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;origin &amp;lt;https://gitlab.com/samurailink3/go-twitter&amp;gt; (fetch)
origin &amp;lt;https://gitlab.com/samurailink3/go-twitter&amp;gt; (push)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;By convention, the first remote added to a Git repository is named &lt;em&gt;origin&lt;/em&gt;, but
this is only a general convention, not a hard rule.&lt;/p&gt;
&lt;p&gt;You can have multiple remotes and custom rules for pushing and pulling changes
for each of them if you want. Most often you&amp;rsquo;ll just have one remote, hosted by
one of the popular Git hosting services. This setup will allow you to push
changes to an online repository and/or pull changes that have been pushed, but
you haven&amp;rsquo;t pulled to your local repository.&lt;/p&gt;
&lt;p&gt;If your repository was created on your local system only, without cloning from a
Git hosting service, you won&amp;rsquo;t have any remotes configured initially. You can
always add a remote with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git remote add remote-name remote-address&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git remote add origin git@gitlab.com:samurailink3/go-twitter.git&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="pulling-changes"&gt;Pulling Changes&lt;/h3&gt;
&lt;p&gt;Git has two different methods to pull changes into your local repository:
&lt;code&gt;fetch&lt;/code&gt; and &lt;code&gt;pull&lt;/code&gt;. Fetching changes pulls down new objects, diffs, and
references from a Git remote down to your local repository. &lt;em&gt;Its important to
keep keep in mind that fetching won&amp;rsquo;t change files in your local workspace.&lt;/em&gt; The
changes are instead cached as part of that Git remote.&lt;/p&gt;
&lt;p&gt;To fetch changes from the &lt;code&gt;origin&lt;/code&gt; remote, you can run:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git fetch origin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to fetch changes from &lt;em&gt;all&lt;/em&gt; remotes, you can use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git fetch --all&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To actually update files in your local workspace, you would use &lt;code&gt;git pull&lt;/code&gt;. This
will import changes from the configured remote branch into your local branch.
This means things like viewing history or checking diffs is near-instantaneous
because all of the changes are cached locally, Git doesn&amp;rsquo;t need to go back to
the internet to get more data. Once you fetch, those changes are stored locally.&lt;/p&gt;
&lt;h3 id="pushing-changes"&gt;Pushing Changes&lt;/h3&gt;
&lt;p&gt;Once you have commits you would like to push to your configured remote, you can
use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git push remote-name branch-name&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git push origin main&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This tells Git, &amp;ldquo;Take my local commits and push them to the &lt;code&gt;origin&lt;/code&gt; remote on
the &lt;code&gt;main&lt;/code&gt; branch. Git will automatically figure out which commits are missing
on the remote and push only what&amp;rsquo;s needed to make them match.&lt;/p&gt;
&lt;h3 id="branches-and-checkouts"&gt;Branches and Checkouts&lt;/h3&gt;
&lt;p&gt;Branches in Git are a way to create other &amp;ldquo;timelines&amp;rdquo; of history in your
repository. So, if your main development branch is &lt;code&gt;main&lt;/code&gt;, but you want to work
on a complex feature without introducing bugs or breakages on the &lt;code&gt;main&lt;/code&gt; branch,
you can create a new branch named &lt;code&gt;my-new-feature&lt;/code&gt; and start committing changes
to that branch. By default, the first branch of a new Git repository is called
&lt;code&gt;main&lt;/code&gt;, or in older versions of Git, &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To see a list of branches in your local repository, you can use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git branch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To see &lt;em&gt;all&lt;/em&gt; branches, even those present on remotes, you can use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git branch --all&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To create a new branch, you can just use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git branch my-new-branch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now, if you look at your list of branches with &lt;code&gt;git branch&lt;/code&gt;, you&amp;rsquo;ll see it in
your list of local branches:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;* main
 my-new-branch
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But if you look, you can see the &lt;code&gt;*&lt;/code&gt; next to &lt;code&gt;main&lt;/code&gt;, and if you run &lt;code&gt;git status&lt;/code&gt;, you&amp;rsquo;ll see that you&amp;rsquo;re still on the &lt;code&gt;main&lt;/code&gt; branch:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;On branch main
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So how do we switch branches?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git checkout my-new-branch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now when you run &lt;code&gt;git status&lt;/code&gt;, you&amp;rsquo;ll see:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;On branch my-new-branch
nothing to commit, working tree clean
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now, when you commit changes, you&amp;rsquo;ll be committing to &lt;code&gt;my-new-branch&lt;/code&gt; instead of
&lt;code&gt;main&lt;/code&gt;. To get back to the &lt;code&gt;main&lt;/code&gt; branch, run &lt;code&gt;git checkout main&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To save time, you can create and check out a new branch with one command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git checkout -b my-new-branch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to base your branch on a specific branch, you can use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git checkout -b my-new-branch main&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git checkout -b my-new-branch origin/some-other-branch&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="additional-reading-and-git-workflows"&gt;Additional Reading and Git Workflows&lt;/h3&gt;
&lt;p&gt;There are many strategies and theories on when you should make new branches and
how you should organize them. When starting out: simpler is better. I&amp;rsquo;d
recommend reading about &lt;a href="https://docs.github.com/en/get-started/quickstart/github-flow"&gt;GitHub Flow&lt;/a&gt;. The quick reference for this
workflow is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a new branch for your specific change&lt;/li&gt;
&lt;li&gt;Make your commits&lt;/li&gt;
&lt;li&gt;Push your branch to your remote&lt;/li&gt;
&lt;li&gt;Create a merge request (called a Pull Request in GitHub&amp;rsquo;s terminology)&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re working in a group: Get sign off from your team and address any
comments or requests&lt;/li&gt;
&lt;li&gt;Merge your changes&lt;/li&gt;
&lt;li&gt;Delete your branch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are working on software that needs multiple versions and maintenance
releases (like operating systems or desktop software), something a bit more
complex, like &lt;a href="https://nvie.com/posts/a-successful-git-branching-model/"&gt;git-flow&lt;/a&gt;, could help.&lt;/p&gt;
&lt;h2 id="appendix-and-references"&gt;Appendix and References&lt;/h2&gt;
&lt;h3 id="references"&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/"&gt;The Git Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/download/"&gt;Download Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository"&gt;Git Basics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codecademy.com/learn/learn-git-introduction"&gt;Codecademy Interactive Git Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/users/sign_up"&gt;Register for GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/-/profile/keys"&gt;GitLab Profile SSH Keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain"&gt;Git Internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://xkcd.com/1597/"&gt;XKCD: Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/sourcecontrol/overview"&gt;VS Code: Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://about.gitlab.com/"&gt;GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/product"&gt;Bitbucket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zachholman.com/posts/git-commit-history/"&gt;Zach Holman: Utter Disregard for Git Commit History&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/get-started/quickstart/github-flow"&gt;GitHub Flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nvie.com/posts/a-successful-git-branching-model/"&gt;git-flow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>WEBFISHING</title><link>https://www.samurailink3.com/blog-posts/2024-11-09-webfishing/</link><pubDate>Sat, 09 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-09-webfishing/</guid><description>&lt;p&gt;&lt;a href="https://store.steampowered.com/app/3146520/WEBFISHING/"&gt;WEBFISHING&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;WEBFISHING is a super-casual cute game that’s basically a chat room with an Animal Crossing-style fishing minigame layered on top of it. You can interact with the systems as casually or critically as you’d like. You can play offline or online with a variety of lobby privacy/access controls. Even the fishing minigame was made with care, as it uses colorblind-friendly color/pattern combinations for the fishing.&lt;/p&gt;
&lt;p&gt;On top of this, it was made with the completely open-source &lt;a href="https://godotengine.org/"&gt;Godot Engine&lt;/a&gt;, which I’m a huge fan of.&lt;/p&gt;</description></item><item><title>Halloween 2024 Data Analysis</title><link>https://www.samurailink3.com/blog-posts/2024-11-04-halloween-2024-data-analysis/</link><pubDate>Mon, 04 Nov 2024 00:00:00 -0600</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-11-04-halloween-2024-data-analysis/</guid><description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This post was originally made on the Notion version of my site. The post contains several linked Notion database views that are just not-easy to port over to Hugo without restructuring the entire data and visualization flow. That project is on my list, but its a very low priority. For now, please read this post over on Notion, linked below.&lt;/p&gt;
&lt;p&gt;Halloween 2024 Data Analysis: &lt;a href="https://samurailink3.notion.site/Halloween-2024-Data-Analysis-131b6786424180bc906ee3a5984d251c"&gt;https://samurailink3.notion.site/Halloween-2024-Data-Analysis-131b6786424180bc906ee3a5984d251c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Halloween 2024 Dataset: &lt;a href="https://samurailink3.notion.site/Halloween-2024-10bb67864241803e8d5cdb5fd62dfc34"&gt;https://samurailink3.notion.site/Halloween-2024-10bb67864241803e8d5cdb5fd62dfc34&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hunt Clip: Surely</title><link>https://www.samurailink3.com/game-clips/2024-11-03-hunt-clip-surely/</link><pubDate>Sun, 03 Nov 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-11-03-hunt-clip-surely/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241104_Surely/20241104_Surely.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241104_Surely/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Are We The Baddies?</title><link>https://www.samurailink3.com/game-clips/2024-10-25-hunt-clip-are-we-the-baddies/</link><pubDate>Fri, 25 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-10-25-hunt-clip-are-we-the-baddies/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241026_Are-We-The-Baddies/20241026_Are-We-The-Baddies.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241026_Are-We-The-Baddies/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Take Your Time</title><link>https://www.samurailink3.com/game-clips/2024-10-25-hunt-clip-take-your-time/</link><pubDate>Fri, 25 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-10-25-hunt-clip-take-your-time/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241026_Take-Your-Time/20241026_Take-Your-Time.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241026_Take-Your-Time/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Rom Browser</title><link>https://www.samurailink3.com/blog-posts/2024-10-24-rom-browser/</link><pubDate>Thu, 24 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-24-rom-browser/</guid><description>&lt;p&gt;aka: TAHMS RAHMS&lt;/p&gt;
&lt;p&gt;I finished a project over the weekend: Rom Browser - A simple web app designed to let my friends easily browse rom collections.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2024-10-24-Rom-Browser_01.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2024-10-24-Rom-Browser_01.png" alt="A screenshot of a web browser showing a simple webpage with a list of fake video game titles to browse and download."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="why-what-where-can-i-get-it"&gt;Why? What? Where can I get it?&lt;/h1&gt;
&lt;p&gt;I &lt;em&gt;fucking love&lt;/em&gt; classic games. Whatever “classic gaming” means to you, love it, hell yeah, 10/10, can’t get enough. I love the idea of shared and open culture, freedom of information, and a more limited copyright system. I love roms, emulation, and game preservation. Now that you know where I’m coming from, let’s talk about the &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;A lot of people I know spent a very long time collecting and organizing rom packs for a wide variety of systems. Conveniently, I recently purchased a storage server for my homelab:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.samurailink3.com/img/content/2024-10-24-Rom-Browser_02.png"&gt;&lt;img src="https://www.samurailink3.com/img/content/2024-10-24-Rom-Browser_02.png" alt="Two servers mounted in a server rack. A 1U Dell PowerEdge R630 and a 2U PowerEdge R730."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So now my friends had a place to back up their collections. But we wanted more than just backups, we wanted an easy way to share these collections. At first, I tried issuing everyone &lt;del&gt;S3&lt;/del&gt; &lt;del&gt;MinIO&lt;/del&gt; &lt;a href="https://silo.pigsty.io/"&gt;Silo&lt;/a&gt; keys, but, believe it or not, most people don’t use the AWS CLI on a daily basis. They wanted something easier to browse.&lt;/p&gt;
&lt;p&gt;Thus, &lt;em&gt;Rom Browser&lt;/em&gt;. I’ve needed to get deeper into frontend development for a while, and this project was just complicated enough to get really hands-on with something.&lt;/p&gt;
&lt;p&gt;So… where can you get it? You &lt;em&gt;can’t.&lt;/em&gt; This project is &lt;em&gt;extremely specific&lt;/em&gt; to my particular hosting setup. From networking to the folder structures, its just not generic enough to be easily hosted. There are a few useful things to share that I’ll post below, but right now there isn’t any linked GitLab project. So this isn’t a &lt;em&gt;project announcement&lt;/em&gt;, its just a &lt;em&gt;blog post&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id="the-requirements"&gt;The Requirements&lt;/h1&gt;
&lt;h2 id="private-access"&gt;Private Access&lt;/h2&gt;
&lt;p&gt;I’m not &lt;em&gt;trying&lt;/em&gt; to get in trouble, and hosting a roms site on the open internet is an easy way to do that. This needs to be Wireguard-only, completely private network.&lt;/p&gt;
&lt;h2 id="simple-backend-learn-frontend"&gt;Simple Backend, Learn Frontend&lt;/h2&gt;
&lt;p&gt;This project shouldn’t be overly-complex on the backend. I have plenty of experience there, what I need to concentrate on is building the site itself. The backend can be dumb and shortcut-filled in an effort to prioritize frontend-learning.&lt;/p&gt;
&lt;h2 id="provide-a-good-user-experience"&gt;Provide a Good User Experience&lt;/h2&gt;
&lt;p&gt;The entire point of this project is to be more usable than the AWS CLI. The site should be intuitive and make users happy. Use domain names, not IPs. Use HTTPS to avoid scary browser warnings.&lt;/p&gt;
&lt;h2 id="make-minio-transparent"&gt;Make MinIO Transparent&lt;/h2&gt;
&lt;p&gt;The user should never be aware that they’re interacting with MinIO. I won’t use pre-signed URLs or bucket rules to provide direct access. This will run through a pass-through downloader.&lt;/p&gt;
&lt;h1 id="the-tech"&gt;The Tech&lt;/h1&gt;
&lt;p&gt;Rom Browser is broken up into three components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data Exporter - This just lists every object in the bucket, marshals the folder structure into struct variables, then exports this big-ass list of games as a JSON file.&lt;/li&gt;
&lt;li&gt;File Server - This handles distributing that JSON cache file and serving rom downloads to users.&lt;/li&gt;
&lt;li&gt;Frontend - This takes in that games cache file, then provides several useful views into the games data complete with download links.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of the benefits of this design are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No MinIO keys in the frontend, no chance of leaks.
&lt;ul&gt;
&lt;li&gt;While the risk here is low, especially with per-key policies, I don’t want to introduce bad habits here.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Users that have MinIO access can independently add new roms to the collection and this will be reflected on the site automatically when Data Exporter runs.&lt;/li&gt;
&lt;li&gt;No need for a complicated backend database scheme or anything. Its just a 5MB JSON blob. Not ideal, but good enough for casual use.
&lt;ul&gt;
&lt;li&gt;I &lt;em&gt;could&lt;/em&gt; do things like more aggressive caching/lazy loading/data sharding/etc, but this is a very small private site, its fine.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Keeps me focused on the frontend and user experience, not on backend optimization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the frontend, I decided to try out &lt;a href="https://vuejs.org/"&gt;https://vuejs.org/&lt;/a&gt;. I didn’t need the complexity of React, but wanted something a bit opinionated because I just don’t know enough about frontend development to have strong opinions yet.&lt;/p&gt;
&lt;h1 id="networking-certificates-and-architecture"&gt;Networking, Certificates, and Architecture&lt;/h1&gt;
&lt;p&gt;This site would be hosted on Wireguard at a private &lt;code&gt;10.x.x.x&lt;/code&gt; address. To support my “Good UX” goal, I bound this &lt;code&gt;10.&lt;/code&gt; address to a DNS name. Then, there was a new problem: HTTP-only sites give scary warnings in modern browsers. If I really want to provide the best user experience, I need HTTPS. I love &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt;, but had only ever used it for internet-accessible sites. Never for anything internal.&lt;/p&gt;
&lt;p&gt;After some poking around, I found &lt;a href="https://go-acme.github.io/lego/"&gt;LEGO&lt;/a&gt;, a Let’s Encrypt client that supports ACME DNS challenges. I plugged in my DNS-provider’s API key and it was able to issue a cert for my internal site without a problem. I then wrote a simple bash script to automate the renewal process and move the certs into the correct location.&lt;/p&gt;
&lt;p&gt;The Data Exporter would be cron’d out to run once per hour. Doing the full list command, even on the local network, takes a bit over a minute. That’s &lt;em&gt;far too long&lt;/em&gt; to make a user wait. So we need to run this ahead of time and cache the result. To avoid needing to write any sync-scripts to keep the cache file consistent across container volumes, I just &lt;a href="https://www.redhat.com/en/blog/hard-links-linux"&gt;hard-linked&lt;/a&gt; it.&lt;/p&gt;
&lt;p&gt;The File Server is pretty simple. It listens for any requests to &lt;code&gt;/download&lt;/code&gt;, then calls the appropriate handler. If the client asks for &lt;code&gt;/download/games.json&lt;/code&gt;, the File Server reads the cache file into memory and provides it to the user. For anything else, it checks the path against a filename map to ensure it is in the dataset, downloads the object into memory, then hands it to the user. This helps obfuscate-away MinIO.&lt;/p&gt;
&lt;p&gt;The frontend is just a simple &lt;a href="https://vuejs.org/"&gt;https://vuejs.org/&lt;/a&gt; site and uses &lt;a href="https://get.foundation/index.html"&gt;Foundation&lt;/a&gt; for the styling. All of this is served from a single domain and backed by a Let’s Encrypt cert.&lt;/p&gt;
&lt;h1 id="cool-stuff"&gt;Cool Stuff&lt;/h1&gt;
&lt;h2 id="use-caddy-to-bind-multiple-containers-under-same-domain"&gt;Use Caddy to bind multiple containers under same domain&lt;/h2&gt;
&lt;p&gt;I discovered that you can use Caddy to bind multiple servers together under one domain, then just switch who gets the request based on the path. In the example below, I’m serving the site through the frontend container, but any calls to &lt;code&gt;emulation.example.com/download/&lt;/code&gt; is passed through to the File Server container.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://emulation.example.com {
 tls /etc/caddy/certificates/emulation.example.com.crt /etc/caddy/certificates/emulation.example.com.key
 reverse_proxy 10.1.2.3:3000
 reverse_proxy /download/* 10.1.2.3:8080
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="use-dockerfile-to-compile-and-containerize-your-software"&gt;Use Dockerfile to compile and containerize your software&lt;/h2&gt;
&lt;p&gt;I wanted to just &lt;code&gt;git push&lt;/code&gt; from my local machine and actually build the software on my server, but I didn’t want to clutter it up with a bunch of NodeJS stuff. Luckily, Docker makes this process pretty clean and easy. You can actually use a multi-step Dockerfile to build &lt;em&gt;and then&lt;/em&gt; containerize your software. Here’s an example for a simple Go program:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-docker" data-lang="docker"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#e6db74"&gt;golang:1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; &lt;span style="color:#e6db74"&gt;builder&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;WORKDIR&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/opt/builder&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COPY&lt;/span&gt; . ./&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RUN&lt;/span&gt; CGO_ENABLED&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; GOOS&lt;span style="color:#f92672"&gt;=&lt;/span&gt;linux go build&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#e6db74"&gt;alpine:latest&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;EXPOSE&lt;/span&gt; &lt;span style="color:#e6db74"&gt;8080&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COPY&lt;/span&gt; --from&lt;span style="color:#f92672"&gt;=&lt;/span&gt;builder /opt/builder/fileserver /bin/fileserver&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CMD&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;/bin/fileserver&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;-config&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;/data/config.toml&amp;#34;&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And here’s what I used for the frontend:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-docker" data-lang="docker"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#e6db74"&gt;node:23&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; &lt;span style="color:#e6db74"&gt;builder&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;WORKDIR&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/opt/builder&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COPY&lt;/span&gt; . ./&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RUN&lt;/span&gt; npm install&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RUN&lt;/span&gt; npm run build&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#e6db74"&gt;nginx:latest&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;EXPOSE&lt;/span&gt; &lt;span style="color:#e6db74"&gt;80&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COPY&lt;/span&gt; --from&lt;span style="color:#f92672"&gt;=&lt;/span&gt;builder /opt/builder/dist/ /usr/share/nginx/html/&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I then wrote a bash file to build all components in a single command.&lt;/p&gt;
&lt;h1 id="so-did-it-work-was-this-better-than-the-aws-cli"&gt;So… did it work? Was this better than the AWS CLI?&lt;/h1&gt;
&lt;p&gt;My friends absolutely loved it. The site is easy to use, fast, and provided me with a perfect opportunity to jump into frontend development. I’m extremely happy with VueJS, Foundation, &lt;a href="https://www.truenas.com/"&gt;TrueNAS&lt;/a&gt;, MinIO, and the work I put into gluing all these together.&lt;/p&gt;
&lt;p&gt;Until next time, thanks for reading!&lt;/p&gt;</description></item><item><title>Notion Calendar Exporter Update Assignees in Title</title><link>https://www.samurailink3.com/blog-posts/2024-10-19-notion-calendar-exporter-update-assignees-in-title/</link><pubDate>Sat, 19 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-19-notion-calendar-exporter-update-assignees-in-title/</guid><description>&lt;p&gt;I’ve made updates to my &lt;a href="https://www.samurailink3.com/projects/2024-10-09-notion-calendar-exporter/"&gt;Notion Calendar Exporter&lt;/a&gt; project: You can now elect to show the names of assignees in the event title.&lt;/p&gt;
&lt;p&gt;Before, your event would look like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Build PC&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But now it can be:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[Tom Webster] Build PC&lt;/code&gt; or even &lt;code&gt;[Tom] Build PC&lt;/code&gt; if you set the option.&lt;/p&gt;
&lt;p&gt;Check out the read me on the GitLab page for the details:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeberg.org/SamuraiLink3/notioncalendarexporter/"&gt;https://codeberg.org/SamuraiLink3/notioncalendarexporter/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Recommendation: Hyperpop</title><link>https://www.samurailink3.com/blog-posts/2024-10-11-recommendation-hyperpop/</link><pubDate>Fri, 11 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-11-recommendation-hyperpop/</guid><description>&lt;p&gt;Here are my two Hyperpop playlists. First, my general favorites:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://open.spotify.com/playlist/5QfCJrfXwqaGjVhlBfTGfM?si=e27572978f0b4c41"&gt;Spotify - Playlist - hyperpop bangers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then a Hyperpop playlist featuring noise-heavy tunes:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://open.spotify.com/playlist/1ovRYoDBM5FlKxgCJDW6xe?si=41cd34eee65b499e"&gt;Spotify - Playlist - HYPERPOP_NOISE&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Recommendation: Nintendo Study Lofi</title><link>https://www.samurailink3.com/blog-posts/2024-10-09-recommendation-nintendo-study-lofi/</link><pubDate>Wed, 09 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-09-recommendation-nintendo-study-lofi/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/playlist/2eTzkFZPziAq7FiBCOvwDU?si=189de03628cc421a"&gt;Spotify - Playlist - nintendo study lofi&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Recommendation: ZFG</title><link>https://www.samurailink3.com/blog-posts/2024-10-09-recommendation-zfg/</link><pubDate>Wed, 09 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-09-recommendation-zfg/</guid><description>&lt;p&gt;&lt;a href="https://www.twitch.tv/zfg1"&gt;https://www.twitch.tv/zfg1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://m.youtube.com/@ZFG"&gt;https://m.youtube.com/@ZFG&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ZFG is a classic N64 Zelda speedrunner.&lt;/p&gt;
&lt;p&gt;Super chill streams, entertaining gameplay, just good classic gaming vibes. Highly recommend his YouTube channel as well.&lt;/p&gt;</description></item><item><title>New Site!</title><link>https://www.samurailink3.com/blog-posts/2024-10-07-new-site/</link><pubDate>Mon, 07 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-07-new-site/</guid><description>&lt;p&gt;I’ve moved my personal website to &lt;a href="https://www.notion.so/"&gt;Notion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For a while, I’ve been struggling to figure out what to do with my site. I always wanted it to be part blog, part project portfolio, part technical resource, but I kept running into distractions to make any kind of content-flow sustainable. I was always finding something to fix, something to optimize, something to build. For a person like me, this is simply too alluring to ignore:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Of course I could buckle down and write that guide for my new open source project, but it’ll look bad next to this janky menu system. Also, my analytics system is kinda busted, I should re-visit that, also the underlying server could use some workflow updates…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And it would just go on.. and on… and on!&lt;/p&gt;
&lt;p&gt;I never ended up writing much because I was too “busy” fiddling around. While there is benefit in just playing around and exploring various aspects of tech, it wasn’t solving my core need: Be a place where I can write and publish. Working on the writing platform was too tempting, especially compared to the “less fun” aspects, like, you know, actually writing things down.&lt;/p&gt;
&lt;p&gt;So, I’m trying out Notion.&lt;/p&gt;
&lt;p&gt;At some point I need to write up a more in-depth review of Notion, but for now, here’s the pitch/justification: Hosting my site on Notion removes (most of) the temptations around fiddling with the site-tech itself. Notion should be &lt;em&gt;just-extendable-enough&lt;/em&gt; to power my site, get it organized roughly the way I want, and get out of the way. It &lt;em&gt;should&lt;/em&gt; allow me to focus more on actually putting stuff out there and less on the systems around that content delivery.&lt;/p&gt;
&lt;p&gt;Will it actually work out that way? Who knows?! But its interesting enough to be worth the try. So that’s why the site looks different (although showing anything other than an SSL error from a server that was ignored for far too long is better).&lt;/p&gt;</description></item><item><title>Recommendation: Breakcore Heaven</title><link>https://www.samurailink3.com/blog-posts/2024-10-07-recommendation-breakcore-heaven/</link><pubDate>Mon, 07 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-07-recommendation-breakcore-heaven/</guid><description>&lt;p&gt;Like PS2-era racing game menu music, but in a playlist.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://open.spotify.com/playlist/6ZGwWXpgrETNZLCft7tY4x?si=1f5a2439d1c6406f"&gt;Spotify - Playlist - Breakcore Heaven&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Recommendation: DOOM Metal</title><link>https://www.samurailink3.com/blog-posts/2024-10-07-recommendation-doom-metal/</link><pubDate>Mon, 07 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/blog-posts/2024-10-07-recommendation-doom-metal/</guid><description>&lt;p&gt;Music from DOOM 2016, DOOM Eternal, and other DOOM-likes. Perfect for programming.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://open.spotify.com/playlist/64bk95BtaFNmx3cC0Cq4NU?si=72c2a772dda049c1"&gt;Spotify - Playlist - Doom Metal&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hunt Clip: Clean</title><link>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-clean/</link><pubDate>Tue, 01 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-clean/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241001_Clean/20241001_Clean.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241001_Clean/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Decent Headshot</title><link>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-decent-headshot/</link><pubDate>Tue, 01 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-decent-headshot/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241001_Decent-Headshot/20241001_Decent-Headshot.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241001_Decent-Headshot/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Duo Boom</title><link>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-duo-boom/</link><pubDate>Tue, 01 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-duo-boom/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241001_Duo-Boom/20241001_Duo-Boom.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241001_Duo-Boom/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Flick</title><link>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-flick/</link><pubDate>Tue, 01 Oct 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-10-01-hunt-clip-flick/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20241001_Flick/20241001_Flick.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20241001_Flick/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: East Mountain Rat</title><link>https://www.samurailink3.com/game-clips/2024-09-15-hunt-clip-east-mountain-rat/</link><pubDate>Sun, 15 Sep 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-09-15-hunt-clip-east-mountain-rat/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240915_East-Mountain-Rat/20240915_East-Mountain-Rat.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240915_East-Mountain-Rat/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Mountain Three Stack</title><link>https://www.samurailink3.com/game-clips/2024-09-15-hunt-clip-mountain-three-stack/</link><pubDate>Sun, 15 Sep 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-09-15-hunt-clip-mountain-three-stack/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240915_Mountain-Three-Stack/20240915_Mountain-Three-Stack.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240915_Mountain-Three-Stack/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Wireguard Backhaul</title><link>https://www.samurailink3.com/projects/2024-09-15-wireguard-backhaul/</link><pubDate>Sun, 15 Sep 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/projects/2024-09-15-wireguard-backhaul/</guid><description>&lt;p&gt;If you’ve ever wanted to host your own sites on a Raspberry Pi in your house, but ran into complications with port forwarding, CG-NAT, blocked public ports, or other ISP nonsense, &lt;em&gt;Wireguard Backhaul&lt;/em&gt; can fix this for you quickly and easily.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Wireguard Backhaul&lt;/em&gt; is my chosen strategy to host things on the public internet from my CG-NAT home internet connection. These tips will allow you to host things like websites, game servers, and anything else from your home, but still make them internet-accessible. Additionally, if you’d like to make your services accessible &lt;em&gt;only&lt;/em&gt; to select people with the proper VPN profile*,* I’ll show you how.&lt;/p&gt;
&lt;h1 id="where-to-get-it"&gt;Where to get it&lt;/h1&gt;
&lt;p&gt;Since this project is really just a list of instructions and some configuration files, there isn’t a central GitLab repo for it, just this post and this script: &lt;a href="https://codeberg.org/SamuraiLink3/TomsEasyWireguardSetupScript"&gt;Tom’s Easy Wireguard Setup Script&lt;/a&gt;. Feel free to use and share this! All code is &lt;a href="https://unlicense.org/"&gt;Public Domain&lt;/a&gt; and all written content is under &lt;code&gt;CC-BY-4.0&lt;/code&gt;. This is all open-source goodness.&lt;/p&gt;
&lt;h1 id="instructions"&gt;Instructions&lt;/h1&gt;
&lt;h2 id="initial-setup"&gt;Initial Setup&lt;/h2&gt;
&lt;p&gt;First, you’ll need something to host from your home network. This can be as simple or as complex as you’d like. For this example, I’ll be using nginx on a Debian virtual machine to host a site. I’ll start by showing how to host this site completely privately to those with a corresponding Wireguard profile, then I’ll show you how we can publish this to the public internet.&lt;/p&gt;
&lt;p&gt;Next, you’ll need a cheap VPS. The Wireguard service and traffic-backhaul won’t take much CPU or RAM, but (maybe obviously?) will require bandwidth. If you pay by the gig for bandwidth on your VPS host and stream 24/7 8k 240FPS video streams, this will get expensive quickly. For websites and game servers, it’ll be cheap. I use &lt;a href="https://www.digitalocean.com/"&gt;Digital Ocean&lt;/a&gt; for my personal VPS needs and have been using their ~$5/month VPS with no issues.&lt;/p&gt;
&lt;h2 id="vps-setup"&gt;VPS Setup&lt;/h2&gt;
&lt;p&gt;I chose the cheapest Digital Ocean VPS running the latest stable Debian image. After you get it launched, configure your VPS firewall and allow the following ports:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;22/TCP - Open to your IP address only
(you can remove this rule once Wireguard is running)

51820/UDP - Allow All
80/TCP - Allow All (optional, for public website hosting)
443/TCP - Allow All (optional, for public website hosting)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then ssh to it, install Vim, Git, Caddy, and Wireguard: &lt;code&gt;apt install caddy wireguard git vim&lt;/code&gt;. I wrote a very simple script to help automate the creation of Wireguard profiles for game servers, its available here: &lt;a href="https://github.com/samurailink3/TomsEasyWireguardSetupScript"&gt;https://github.com/samurailink3/TomsEasyWireguardSetupScript&lt;/a&gt;. Follow these commands to clone the script and set it up for convenient use in our Wireguard config folder:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /etc/wireguard
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://codeberg.org/SamuraiLink3/TomsEasyWireguardSetupScript
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s TomsEasyWireguardSetupScript/install-wireguard.bash ./
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, just run the script and follow the prompts: &lt;code&gt;./install-wireguard.bash&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;What is the public IP address of your server? &amp;lt;-- This is the public IP of your VPS
How many people need a VPN profile (including you)? &amp;lt;-- 2 (one for the server, one for your test client)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Restart the Wireguard service to pick up the new keys: &lt;code&gt;systemctl restart wg-quick@wg0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Take a look at the files we generated: &lt;code&gt;ls -l /etc/wireguard/wg0/&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;client_1.conf &amp;lt;-- Your home server wireguard config file.
client_1.priv &amp;lt;-- Ignore this. Your home server private key.
client_1.pub &amp;lt;-- Ignore this. Your home server public key.
client_2.conf &amp;lt;-- Your test client wireguard config file.
client_2.priv &amp;lt;-- Ignore this. Your test client private key.
client_2.pub &amp;lt;-- Ignore this. Your test client public key.
server.priv &amp;lt;-- Ignore this. Your VPS private key.
server.pub &amp;lt;-- Ignore this. Your VPS public key.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We only want the two &lt;code&gt;*.conf&lt;/code&gt; files, those contain all the information Wireguard needs to make a connection.&lt;/p&gt;
&lt;h2 id="wireguard-testing"&gt;Wireguard Testing&lt;/h2&gt;
&lt;p&gt;Let’s make sure Wireguard is working properly. First, make sure the machine you’re on now has &lt;a href="https://www.wireguard.com/"&gt;Wireguard installed&lt;/a&gt;. Then copy out &lt;code&gt;client_2.conf&lt;/code&gt; and load it into your Wireguard client.&lt;/p&gt;
&lt;p&gt;Once the Wireguard tunnel is activated, you can run &lt;code&gt;ping 10.11.12.1&lt;/code&gt; and should see responses. If you don’t, make sure your firewall is configured to allow 51820/UDP and restart the Wireguard service if you missed that step.&lt;/p&gt;
&lt;h2 id="server-setup-and-private-hosting"&gt;Server Setup and Private Hosting&lt;/h2&gt;
&lt;p&gt;On your home network server, make sure you have Wireguard installed and install the &lt;code&gt;client_1.conf&lt;/code&gt; profile. Once Wireguard is configured and started, ping &lt;code&gt;10.11.12.1&lt;/code&gt; to make sure everything is hooked up correctly.&lt;/p&gt;
&lt;p&gt;By default, most webservers will listen on &lt;code&gt;0.0.0.0&lt;/code&gt; (essentially “every configured interface on this machine”). We can isolate services to specific Wireguard IP addresses by specifying that in the config file. This is both cleaner and more expandable because we can host multiple Wireguard tunnels on this machine, each with their own underlying web services.&lt;/p&gt;
&lt;p&gt;Here’s a snippet of the nginx config showing how this is done:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;server {
				listen 10.11.12.2:80 default_server;
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So now, nginx will only listen on our configured Wireguard IP address. If we had multiple Wireguard tunnels configured, we’d just use &lt;em&gt;that&lt;/em&gt; IP address instead.&lt;/p&gt;
&lt;p&gt;Now, if both your server and test client are connected to the Wireguard network, you can click on &lt;a href="http://10.11.12.2/"&gt;http://10.11.12.2/&lt;/a&gt; and see that the default nginx page is loaded. When you disable Wireguard on your test client and try to access the site, it times out. &lt;em&gt;This means you now have a fully-private website, accessible over the internet to anyone you give a Wireguard profile to.&lt;/em&gt; This can be extremely helpful when hosting services for your family and friends, but don’t want the wider internet to have access.&lt;/p&gt;
&lt;p&gt;If you want to make this even easier for your users, you can add a DNS record to point a domain name to &lt;code&gt;10.11.12.2&lt;/code&gt; . The DNS records &lt;em&gt;are public&lt;/em&gt;, so don’t leak information by naming your site &lt;code&gt;super-secret-stuff.example.com&lt;/code&gt;. You can even use &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt; and a &lt;a href="https://letsencrypt.org/docs/challenge-types/#dns-01-challenge"&gt;DNS-01 challenge&lt;/a&gt; to add HTTPS to this internal site. For a more practical example, check out &lt;a href="https://www.samurailink3.com/blog-posts/2024-10-24-rom-browser/"&gt;Rom Browser&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;But what if you &lt;strong&gt;do&lt;/strong&gt; want to make it public on the internet?&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="public-hosting-with-the-wireguard-backhaul"&gt;Public Hosting with the Wireguard Backhaul&lt;/h2&gt;
&lt;p&gt;Luckily, making your site publicly-accessible is pretty quick and simple!&lt;/p&gt;
&lt;p&gt;SSH to your VPS and configure Caddy: &lt;code&gt;vim /etc/caddy/Caddyfile&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;https://public.example.com {
 reverse_proxy 10.11.12.2:80
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then restart the service: &lt;code&gt;systemctl restart caddy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In this config file, we’ve instructed Caddy to host an HTTPS site on public.example.com. Every request made to this server is then passed to our home server over Wireguard (that’s the &lt;code&gt;10.11.12.2&lt;/code&gt; address). So the request starts here at our Wireguard Backhaul VPS, then is proxied over the Wireguard tunnel to our home network server, where the request is actually responded to. The cherry on top is because this is using Caddy, we get automatic HTTPS courtesy of &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And… that’s it! Really, its a simple as that. It does cost some money to have a publicly-accessible VPS to hook into, but you can easily spend the bare-minimum on the VPS, then more efficiently spend money on local hardware that does the real work of hosting. I’ve been using this for a few months and have moved nearly all of my cloud-based hosting to this model, saving a pile of money. Hopefully it works for you!&lt;/p&gt;</description></item><item><title>Hunt Clip: Flying Sticky Bomb</title><link>https://www.samurailink3.com/game-clips/2024-09-02-hunt-clip-flying-sticky-bomb/</link><pubDate>Mon, 02 Sep 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-09-02-hunt-clip-flying-sticky-bomb/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20240902_Flying-Sticky-Bomb/20240902_Flying-Sticky-Bomb.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240902_Flying-Sticky-Bomb/20240902_Flying-Sticky-Bomb.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240902_Flying-Sticky-Bomb/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Double Cart Kill</title><link>https://www.samurailink3.com/game-clips/2024-08-31-hunt-clip-double-cart-kill/</link><pubDate>Sat, 31 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-31-hunt-clip-double-cart-kill/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240831_Double-Cart-Kill/20240831_Double-Cart-Kill.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240831_Double-Cart-Kill/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Poke Poke</title><link>https://www.samurailink3.com/game-clips/2024-08-31-hunt-clip-poke-poke/</link><pubDate>Sat, 31 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-31-hunt-clip-poke-poke/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20240831_Poke-Poke/20240831_Poke-Poke.png" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240831_Poke-Poke/20240831_Poke-Poke.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240831_Poke-Poke/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Yeet</title><link>https://www.samurailink3.com/game-clips/2024-08-31-hunt-clip-yeet/</link><pubDate>Sat, 31 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-31-hunt-clip-yeet/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240831_Yeet/20240831_Yeet.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240831_Yeet/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I’m Getting Meme’d</title><link>https://www.samurailink3.com/game-clips/2024-08-22-hunt-clip-im-getting-memed/</link><pubDate>Thu, 22 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-22-hunt-clip-im-getting-memed/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240822_Im-Getting-Memed-On/20240822_Im-Getting-Memed-On.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240822_Im-Getting-Memed-On/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Highlight Reel</title><link>https://www.samurailink3.com/game-clips/2024-08-20-hunt-clip-highlight-reel/</link><pubDate>Tue, 20 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-20-hunt-clip-highlight-reel/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240821_2024-08-20-Highlight-Reel-Tom/20240821_2024-08-20-Highlight-Reel-Tom.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240821_2024-08-20-Highlight-Reel-Tom/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: I See People Up By The Cart</title><link>https://www.samurailink3.com/game-clips/2024-08-19-hunt-clip-i-see-people-up-by-the-cart/</link><pubDate>Mon, 19 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-19-hunt-clip-i-see-people-up-by-the-cart/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240819_I-See-People-Up-By-The-Cart/20240819_I-See-People-Up-By-The-Cart.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240819_I-See-People-Up-By-The-Cart/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Flying Tom Hidden Romero</title><link>https://www.samurailink3.com/game-clips/2024-08-15-hunt-clip-flying-tom-hidden-romero/</link><pubDate>Thu, 15 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-15-hunt-clip-flying-tom-hidden-romero/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240815_Flying-Tom-Hidden-Romero/20240815_Flying-Tom-Hidden-Romero.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240815_Flying-Tom-Hidden-Romero/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: A Couple Cool Winfield Kills</title><link>https://www.samurailink3.com/game-clips/2024-08-10-hunt-clip-a-couple-cool-winfield-kills/</link><pubDate>Sat, 10 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-10-hunt-clip-a-couple-cool-winfield-kills/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240810_A-Couple-Cool-Winfield-Kills/20240810_A-Couple-Cool-Winfield-Kills.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240810_A-Couple-Cool-Winfield-Kills/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Team Down</title><link>https://www.samurailink3.com/game-clips/2024-08-10-hunt-clip-team-down/</link><pubDate>Sat, 10 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-10-hunt-clip-team-down/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240810_Team-Down/20240810_Team-Down.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240810_Team-Down/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: The Scupper Beat Down</title><link>https://www.samurailink3.com/game-clips/2024-08-10-hunt-clip-the-scupper-beat-down/</link><pubDate>Sat, 10 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-10-hunt-clip-the-scupper-beat-down/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240810_The-Scupper-Beat-Down/20240810_The-Scupper-Beat-Down.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240810_The-Scupper-Beat-Down/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Romero Three Stack</title><link>https://www.samurailink3.com/game-clips/2024-08-04-hunt-clip-romero-three-stack/</link><pubDate>Sun, 04 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-04-hunt-clip-romero-three-stack/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240804_Romero-Three-Stack/20240804_Romero-Three-Stack.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240804_Romero-Three-Stack/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Run Away From Me</title><link>https://www.samurailink3.com/game-clips/2024-08-04-hunt-clip-run-away-from-me/</link><pubDate>Sun, 04 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-04-hunt-clip-run-away-from-me/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240804_Run-Away-From-Me/20240804_Run-Away-From-Me.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240804_Run-Away-From-Me/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Sparks Dualie Fishy Fight</title><link>https://www.samurailink3.com/game-clips/2024-08-02-hunt-clip-sparks-dualie-fishy-fight/</link><pubDate>Fri, 02 Aug 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-08-02-hunt-clip-sparks-dualie-fishy-fight/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240802_Sparks-Dualie-Fishy-Fight/20240802_Sparks-Dualie-Fishy-Fight.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240802_Sparks-Dualie-Fishy-Fight/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Absolute Tom Fuckery</title><link>https://www.samurailink3.com/game-clips/2024-07-30-hunt-clip-absolute-tom-fuckery/</link><pubDate>Tue, 30 Jul 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-07-30-hunt-clip-absolute-tom-fuckery/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/20240730_AbsoluteTomFuckery/20240730_AbsoluteTomFuckery.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240730_AbsoluteTomFuckery/20240730_AbsoluteTomFuckery.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240730_AbsoluteTomFuckery/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Shot Bolt Pretty Good</title><link>https://www.samurailink3.com/game-clips/2024-07-27-hunt-clip-shot-bolt-pretty-good/</link><pubDate>Sat, 27 Jul 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-07-27-hunt-clip-shot-bolt-pretty-good/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240727_Shot-Bolt-Pretty-Good/20240727_Shot-Bolt-Pretty-Good.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240727_Shot-Bolt-Pretty-Good/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Pointy Stick Pretty Good</title><link>https://www.samurailink3.com/game-clips/2024-07-25-hunt-clip-pointy-stick-pretty-good/</link><pubDate>Thu, 25 Jul 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-07-25-hunt-clip-pointy-stick-pretty-good/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240725_Pointy-Stick-Pretty-Good/20240725_Pointy-Stick-Pretty-Good.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240725_Pointy-Stick-Pretty-Good/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: More Fire Pax Shenanigans</title><link>https://www.samurailink3.com/game-clips/2024-07-21-hunt-clip-more-fire-pax-shenanigans/</link><pubDate>Sun, 21 Jul 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-07-21-hunt-clip-more-fire-pax-shenanigans/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240721_More-Fire-Pax-Shenanigans/20240721_More-Fire-Pax-Shenanigans.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240721_More-Fire-Pax-Shenanigans/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Pax Fire Three Stack</title><link>https://www.samurailink3.com/game-clips/2024-07-21-hunt-clip-pax-fire-three-stack/</link><pubDate>Sun, 21 Jul 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-07-21-hunt-clip-pax-fire-three-stack/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240721_Pax-Fire-Three-Stack/20240721_Pax-Fire-Three-Stack.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240721_Pax-Fire-Three-Stack/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item><item><title>Hunt Clip: Prison Fight</title><link>https://www.samurailink3.com/game-clips/2024-07-21-hunt-clip-prison-fight/</link><pubDate>Sun, 21 Jul 2024 00:00:00 -0500</pubDate><guid>https://www.samurailink3.com/game-clips/2024-07-21-hunt-clip-prison-fight/</guid><description>





&lt;div class="gameclip"&gt;
 &lt;video id="video" height="60%" width="60%" poster="https://s3.72pinconnector.com/gameclips/preview.gif" controls&gt;
 &lt;source src="https://s3.72pinconnector.com/gameclips/20240721_Prison-Fight/20240721_Prison-Fight.mp4" type="video/mp4"&gt;
 Your browser does not support the video tag.
 &lt;/video&gt;
&lt;/div&gt;
&lt;p class="text-center"&gt;&lt;i&gt;&lt;a href="https://s3.72pinconnector.com/gameclips/20240721_Prison-Fight/watch.html"&gt;Open in 72PC Game Clips&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

</description></item></channel></rss>