<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>thinking in bits by tiff – Blog</title><link>http://blog.tiff.run/blog/</link><description>Recent content in Blog on thinking in bits by tiff</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="http://blog.tiff.run/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Everything, everywhere, all at once</title><link>http://blog.tiff.run/blog/everything-everywhere-all/</link><pubDate>Fri, 04 Jul 2025 22:22:38 +0000</pubDate><guid>http://blog.tiff.run/blog/everything-everywhere-all/</guid><description>
&lt;p>From &lt;a href="https://rafaelcamargo.com/blog/principles-i-keep-in-mind-when-starting-a-side-project/"target="_blank" rel="noopener">Rafael Carmargo&amp;rsquo;s blog&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>Microscopic scope
The fastest way to kill your motivation is trying to build something big.&lt;/p>
&lt;/blockquote>
&lt;p>This is where I find myself getting stuck and then distracted because making the kind of progress I want to ship something is too large of a scope.&lt;/p>
&lt;blockquote>
&lt;p>And by big, I don&amp;rsquo;t mean how successful the project could be — I&amp;rsquo;m talking about the number of features you try to cram into it. Aim small. Even better, aim microscopic.&lt;/p>
&lt;/blockquote>
&lt;p>We sure don&amp;rsquo;t do open source for the paycheck but even if we did, small &amp;gt; repo graveyards.&lt;/p>
&lt;p>For example, don&amp;rsquo;t try to build a Finance Manager. That&amp;rsquo;s way too broad. There are zero boundaries. It could have 5 features, or 50.&lt;/p>
&lt;blockquote>
&lt;p>Shrink that idea down hard until you can see the whole product in one glance. Here&amp;rsquo;s how: take that Finance Manager and narrow it down to a Retirement Calculator. It takes in 5 or 6 parameters and tells you when you can retire.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;em>This is the way&lt;/em>.&lt;/p>
&lt;h2>Solve your own problem&lt;span class="hx:absolute hx:-mt-20" id="solve-your-own-problem">&lt;/span>
&lt;a href="#solve-your-own-problem" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>From his blog:&lt;/p>
&lt;blockquote>
&lt;p>Don&amp;rsquo;t build something you wouldn&amp;rsquo;t actually use.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>If trying to build something big may kill your motivation, being your own customer does the opposite. When you create something that solves your problem, improving it over time is a natural consequence. Plus, you&amp;rsquo;ll be way more willing to spend time on it because it genuinely helps your life or gives you a competitive edge.&lt;/p>
&lt;/blockquote>
&lt;p>This is also the way. And I have ideas but they are too far out of scope for my skillset.&lt;/p>
&lt;p>For instance, I want to make a service to ping the network at different intervals to record when there is the most latency in the network and record it to a csv file in Go. Can I do that? Am I able to do that? I think so.&lt;/p>
&lt;p>But I start by looking at the Standard Library and looking ahead to what libraries I should be using when really I think the first step is building a web server, which I just now figured out. It is the simplest thing you can build in Go.&lt;/p>
&lt;h2>And finally&lt;span class="hx:absolute hx:-mt-20" id="and-finally">&lt;/span>
&lt;a href="#and-finally" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;blockquote>
&lt;p>Your job is to put together a great dish — not to set the table or wash the dishes.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>Time is super limited when you&amp;rsquo;re working on side projects. If you burn too much of it on boring or repetitive tasks, the project won&amp;rsquo;t last. Promise.&lt;/p>
&lt;/blockquote>
&lt;p>This makes complete sense.&lt;/p>
&lt;hr />
&lt;h2>Too many websites&lt;span class="hx:absolute hx:-mt-20" id="too-many-websites">&lt;/span>
&lt;a href="#too-many-websites" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I run far too many websites. I have one for random tech thoughts, one for my thoughts on the intersection of tech and media literacy, I have one for electronics lab and experiments, one for books, and a personal one as well as this one, and one for photos.&lt;/p>
&lt;p>I &lt;strong>cannot&lt;/strong> keep this up. Some of these will need to be consolidated to one or two. I don&amp;rsquo;t need to fracture my attention this way so I&amp;rsquo;ve cut down the amount of sites I write on significantly.&lt;/p></description></item><item><title>Create your own GitHub alternative with Gitea, Opengist, and Forgejo</title><link>http://blog.tiff.run/blog/create-your-own-github-alt/</link><pubDate>Fri, 21 Mar 2025 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/create-your-own-github-alt/</guid><description>
&lt;p>I mentioned on Mastodon that I was trying to move most of my projects off of Big Tech™️ and one of the ways I am doing that is &lt;a href="http://blog.tiff.run/posts/selfhosting-coolify">hosting similar platforms on my own servers&lt;/a>.&lt;/p>
&lt;p>Recently I decided to use decentralized and open source platforms for my website deployment and hosting, where I can create a webhook from my GitHub-like platform of choice and instantly deploy that site to Coolify.&lt;/p>
&lt;h2>Another option&lt;span class="hx:absolute hx:-mt-20" id="another-option">&lt;/span>
&lt;a href="#another-option" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I also use &lt;a href="https://pikapods.com"target="_blank" rel="noopener">PikaPods&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> to deploy more resource intensive apps like Nextcloud as PikaPods doesn&amp;rsquo;t bill you; you just top up your account. This way you&amp;rsquo;re not saddled with an unexpected server bill.&lt;/p>
&lt;h2>First pick a platform&lt;span class="hx:absolute hx:-mt-20" id="first-pick-a-platform">&lt;/span>
&lt;a href="#first-pick-a-platform" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I am using both &lt;a href="https://github.com/go-gitea/gitea"target="_blank" rel="noopener">Gitea&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> and &lt;a href="https://forgejo.org/"target="_blank" rel="noopener">Forgejo&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>, both for very different things. But the idea is to decentralize &lt;em>git&lt;/em> as a hosted service that doesn&amp;rsquo;t need to funnel through Big Tech™️ infrastructure.&lt;/p>
&lt;p>Both of these options are extremely lightweight and don&amp;rsquo;t require a ton of resources. Neither will bog down your server.&lt;/p>
&lt;p>Both are using the Gitea &lt;em>framework&lt;/em>, or &lt;em>platform&lt;/em> if you want to call it that. You can do pretty much the same &lt;em>GitHub-like&lt;/em> things on both.&lt;/p>
&lt;h3>Simple way of installing&lt;span class="hx:absolute hx:-mt-20" id="simple-way-of-installing">&lt;/span>
&lt;a href="#simple-way-of-installing" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Either using &lt;code>docker-compose.yaml&lt;/code> or a service like PikaPods.&lt;/p>
&lt;p>An example of a docker compose file:&lt;/p>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">networks&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">forgejo&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">external&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">server&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">codeberg.org/forgejo/forgejo:10&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">container_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">environment&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">USER_UID=1000&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">USER_GID=1000&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - FORGEJO__database__DB_TYPE=postgres&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - FORGEJO__database__HOST=db:5432&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - FORGEJO__database__NAME=forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - FORGEJO__database__USER=forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - FORGEJO__database__PASSWD=forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">restart&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">always&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">networks&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">volumes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">./forgejo:/data&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/etc/timezone:/etc/timezone:ro&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/etc/localtime:/etc/localtime:ro&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">ports&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;3000:3000&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;222:22&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">+ depends_on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - db&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">+ db&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">+ image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">postgres:14&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">+ restart&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">always&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">+ environment&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - POSTGRES_USER=forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - POSTGRES_PASSWORD=forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - POSTGRES_DB=forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">+ networks&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - forgejo&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">+ volumes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">+ - ./postgres:/var/lib/postgresql/data&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>Example of a docker-compose file from the Forgejo website&lt;/em>&lt;/p>
&lt;p>Usually you wouldn&amp;rsquo;t need a full-on database for this; the initial setup just needs sqlite, most self-hosted projects using Forgejo don&amp;rsquo;t need a database like Postgres because most of the time, the scale is smaller&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.&lt;/p>
&lt;p>This process is similar for Gitea as well.&lt;/p>
&lt;h2>Opengist for hosting your own code snippets&lt;span class="hx:absolute hx:-mt-20" id="opengist-for-hosting-your-own-code-snippets">&lt;/span>
&lt;a href="#opengist-for-hosting-your-own-code-snippets" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I discovered &lt;a href="https://opengist.io/"target="_blank" rel="noopener">Opengist&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> sometime last year. The end of last year was an absolute &lt;em>nightmare&lt;/em> so I didn&amp;rsquo;t install it, I didn&amp;rsquo;t have the energy. It wasn&amp;rsquo;t until recent events in the US that I thought it might be a good idea to bring all my projects over to Gitea, Forgejo, and host my gists on Opengist.&lt;/p>
&lt;p>Their docker compose example is simple:&lt;/p>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">opengist&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ghcr.io/thomiceli/opengist:1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">container_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">opengist&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">restart&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">unless-stopped&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">ports&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;6157:6157&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># HTTP port&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;2222:2222&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># SSH port, can be removed if you don&amp;#39;t use SSH&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">volumes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;$HOME/.opengist:/opengist&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">environment&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># OG_LOG_LEVEL: info&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># other configuration options&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>You can configure auth and permissions when you first login or you can add environment variables in a &lt;code>secrets.env&lt;/code> file on your server. Then run &lt;code>docker compose up -d&lt;/code> and off you go.&lt;/p>
&lt;p>You can also just run: &lt;code>docker run --name opengist -p 6157:6157 -v &amp;quot;$HOME/.opengist:/opengist&amp;quot; ghcr.io/thomiceli/opengist:1&lt;/code>&lt;/p>
&lt;h3>Opengist embed example&lt;span class="hx:absolute hx:-mt-20" id="opengist-embed-example">&lt;/span>
&lt;a href="#opengist-embed-example" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;script src="https://gists.tiff.run/tiffmin/4fd4968134134677be6a86c6461c0e5f.js">&lt;/script>
&lt;h2>Your choice&lt;span class="hx:absolute hx:-mt-20" id="your-choice">&lt;/span>
&lt;a href="#your-choice" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I know there is a lot of chatter about self-hosting and decentralized networks in general lately and it is definitely a time commitment to roll your own tech stack but I find it works for me. You can do it cheaply or in your own home using your own hardware and internet service&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>. Either way, there are choices. Self-host is the best one, and I want to convince you of this. But it &lt;em>is&lt;/em> your choice to make.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Unless you&amp;rsquo;re uploading large files then maybe something like Postgres is needed.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Be careful; some ISPs don&amp;rsquo;t like giving out static IP addresses on home networks so check with them before doing it. Or, just try it and see what happens.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Deploying my websites on Coolify</title><link>http://blog.tiff.run/blog/selfhosting-coolify/</link><pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/selfhosting-coolify/</guid><description>
&lt;p>As the US collapses under the weight of its runaway tech oligarchy, I&amp;rsquo;ve decided to migrate as much of my code, writing, and data far away from the Big Tech™️ and VC hungry vultures ruining the internet.&lt;/p>
&lt;p>I&amp;rsquo;d been self-hosting stuff for over a year on-prem but since I no longer have the luxury of running my servers on my own hardware, I decided to grab a couple cheap VPS servers from Hetzner with the minimal amount of compute I&amp;rsquo;d need to run a couple services and host my websites.&lt;/p>
&lt;p>This very site is hosted by me. Where? Hetzner, of course. How? &lt;a href="https://coolify.io/"target="_blank" rel="noopener">Coolify&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>.&lt;/p>
&lt;h2>A couple things to note&lt;span class="hx:absolute hx:-mt-20" id="a-couple-things-to-note">&lt;/span>
&lt;a href="#a-couple-things-to-note" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>You &lt;em>have&lt;/em> to pay to do this &lt;em>unless&lt;/em> you can run servers in your house. That&amp;rsquo;s free, as in you don&amp;rsquo;t need to pay to use the services you host, but it &lt;em>does cost&lt;/em> something- energy, internet service, and the &lt;a href="https://github.com/twhite96/homelab-config#these-are-the-tools-and-settings-i-am-using-in-my-home-lab"target="_blank" rel="noopener">rabbit hole of hardware&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> you can buy just to do something like this. If you have the means and the stomach, go for it. Depending on your level of interest and patience when things break, I think you&amp;rsquo;d enjoy it. I know I did.&lt;/p>
&lt;h2>Setting up Coolify&lt;span class="hx:absolute hx:-mt-20" id="setting-up-coolify">&lt;/span>
&lt;a href="#setting-up-coolify" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I&amp;rsquo;m not going to be writing here about setting up a VPS and getting your server up and running. For that, I&amp;rsquo;ll point you to &lt;a href="https://www.youtube.com/watch?v=kTgu4wJ7v-0&amp;amp;pp=ygUHaGV0em5lcg%3D%3D"target="_blank" rel="noopener">this video&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>.&lt;/p>
&lt;p>For the most part, setting up a Coolify instance is as simple as a bash script:&lt;/p>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sh" data-lang="sh">&lt;span class="line">&lt;span class="cl">sh curl -fsSL https://cdn.coollabs.io/coolify/install.sh &lt;span class="p">|&lt;/span> sudo bash&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>When you&amp;rsquo;re setting it up, you have the option of using a remote server or localhost. For simplicity&amp;rsquo;s sake, choose &lt;code>localhost&lt;/code>.&lt;/p>
&lt;p>Once that is done, you&amp;rsquo;ll hit a screen that looks kinda like this:&lt;/p>
&lt;p>&lt;img src="../../assets/images/choose-your-fighter.png" alt="" data-zoomable loading="lazy" />&lt;/p>
&lt;p>You can create as many projects as you want&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>. From there, you can deploy and serve your websites from here.&lt;/p>
&lt;h3>Inside the projects tab&lt;span class="hx:absolute hx:-mt-20" id="inside-the-projects-tab">&lt;/span>
&lt;a href="#inside-the-projects-tab" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>The first thing you&amp;rsquo;ll notice is that you&amp;rsquo;ll need to add an environment. There is already a default one there for you to work with called &lt;code>production&lt;/code>. You can choose this as a starting place.&lt;/p>
&lt;p>&lt;img src="../../assets/images/environs.png" alt="" data-zoomable loading="lazy" />&lt;/p>
&lt;p>Here you can add your resources, which are basically apps, websites, containers, and services you can host on Coolify.&lt;/p>
&lt;p>&lt;img src="../../assets/images/resources.png" alt="" data-zoomable loading="lazy" />&lt;/p>
&lt;p>From here, choose a Git based service to deploy your app from GitHub or wherever on Coolify.&lt;/p>
&lt;p>&lt;img src="../../assets/images/applications.png" alt="" data-zoomable loading="lazy" />&lt;/p>
&lt;p>Then you can start cooking.&lt;/p>
&lt;p>&lt;img src="../../assets/images/example-server.png" alt="" data-zoomable loading="lazy" />&lt;/p>
&lt;h2>Further things to research&lt;span class="hx:absolute hx:-mt-20" id="further-things-to-research">&lt;/span>
&lt;a href="#further-things-to-research" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>Check out this cool (no pun intended, honest) &lt;a href="https://youtu.be/taJlPG82Ucw?si=8QJXhsblhgfGJddb"target="_blank" rel="noopener">video&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> on how to get this set up in your own server environment.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Be mindful of server resources.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>The end of my huge projects</title><link>http://blog.tiff.run/blog/the-end-of-big-projects/</link><pubDate>Fri, 14 Mar 2025 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/the-end-of-big-projects/</guid><description>
&lt;p>I&amp;rsquo;ve long been one of those developers who start projects and overengineer them before they are properly started. This leads to stretching past my stretch goals and capabilities causing me to burnout on the project and never shipping.&lt;/p>
&lt;p>I know I am never going to be able to do this thing as a steady career proper. As a disabled person in this country that isn&amp;rsquo;t going to happen. But I can&amp;rsquo;t stop doing it; I don&amp;rsquo;t know what else to do that scratches my brain the way this thing does. So I&amp;rsquo;ve decided to just work on small little projects and libraries. If they take off, cool! I&amp;rsquo;ll try to maintain them as best as I can. If not, it&amp;rsquo;s practice and cool things I can show my prospective clients when I launch &lt;a href="https://pxlandcircuit.shop"target="_blank" rel="noopener">Pixel &amp;amp; Circuit&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>, which is a local to PA, hyperlocal to &lt;em>me&lt;/em> specifically, WordPress and custom site shop as well as taking a look at broken tech and fixing it if I can.&lt;/p>
&lt;p>That&amp;rsquo;s where I am at the moment.&lt;/p></description></item><item><title>I hated social media before it was cool</title><link>http://blog.tiff.run/blog/i-hated-social-media/</link><pubDate>Sat, 08 Mar 2025 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/i-hated-social-media/</guid><description>
&lt;p>One of the things I&amp;rsquo;ve noticed about myself as I&amp;rsquo;ve gotten older is that I don&amp;rsquo;t enjoy social media. Hardly ever did. The last time I was excited on social media was on Twitter circa 2009-2013, and then from 2014-2016.&lt;/p>
&lt;p>I had a Facebook account because that is how you networked as a broke writer trying to forge her way into the prestigious Iowa Writer&amp;rsquo;s Workshop MFA program&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.&lt;/p>
&lt;p>I had a public account and was on my phone way more than I should have been. Facebook was decent enough back then with apps like NetworkedBlogs to grab feeds from your favorite writer&amp;rsquo;s blogs. A lot of folks were on BlogTalkRadio Network talking about their work.&lt;/p>
&lt;p>There was even a time when I was working out a bunch and was into watching The Biggest Loser and following fitness channels on YouTube and Clean Eating Facebook groups. It felt like I belonged somewhere. A neurodivergent nerd without money whose close friends didn&amp;rsquo;t really give a shit about her interests nor did they understand them? It felt like I &amp;ldquo;found my tribe&amp;rdquo;.&lt;/p>
&lt;p>But around 2012, 2013 I noticed a shift in the way I interacted with it. I was on it too much, I was saying too much, and I was noticing some awful stuff being said by people I formerly respected and bought their work. I wanted to delete my account. I said it on my &amp;ldquo;Wall&amp;rdquo;.&lt;/p>
&lt;p>One of my favorite people there messaged me and told me to stay; not having a Facebook account was career suicide and I really needed to stay. And so, like an addict, I kept my account.&lt;/p>
&lt;h2>Nothing changed&lt;span class="hx:absolute hx:-mt-20" id="nothing-changed">&lt;/span>
&lt;a href="#nothing-changed" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I kept opening the app. I kept getting swept up into arguments with people who would dig in even if they were shown new evidence. 2016 happened and I was disillusioned. I deactivated my account several times. But I would come back, thinking that while I culled my friends list, these people &lt;em>were&lt;/em> my friends and they actually really care about me.&lt;/p>
&lt;p>But when I logged back in, most people hadn&amp;rsquo;t even noticed I was gone. They didn&amp;rsquo;t know until I said that I was back; they didn&amp;rsquo;t know I left in the first place. It was eye-opening. What I thought were my friends were people who had their own lives and shit to do that my absence didn&amp;rsquo;t register because at the end of the day, most of those people have never met me and don&amp;rsquo;t really know me, despite the amount of oversharing I did there.&lt;/p>
&lt;p>When the shit jumped off after That Car Guy bought That Social Media Site I deleted my Facebook account, I deleted my Twitter accounts, and I signed up for Fediverse accounts, securing my username for the future.&lt;/p>
&lt;p>Initially I liked it; it was new and cool and people were pretty awesome. But no one really interacted there. On my two most active accounts only one is enjoyable to use when it isn&amp;rsquo;t football season. I feel broken every time I open my personal Mastodon account.&lt;/p>
&lt;p>I get hardly any traction on my Bluesky account where I would like it, and the people I follow who I used to follow on Twitter are the same people with the same perspectives but being in the fray there just isn&amp;rsquo;t appealing to me. I hate seeing the world burn on a neverending firehose of timelines. I already have my mental health challenges and watching, and reading, all of this is doing a number on me. I can&amp;rsquo;t do it.&lt;/p>
&lt;h2>RSS, blogs, and FreeTube&lt;span class="hx:absolute hx:-mt-20" id="rss-blogs-and-freetube">&lt;/span>
&lt;a href="#rss-blogs-and-freetube" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>&lt;img src="../../assets/images/rss-fresh-rss-reader.png" alt="" data-zoomable loading="lazy" />
&lt;em>RSS in Reeder Classic&lt;/em>&lt;/p>
&lt;p>Fortunately RSS is still alive and kicking. I&amp;rsquo;ve found some pretty interesting blogs by using Kagi&amp;rsquo;s version of what the oldheads used to &lt;a href="https://en.wikipedia.org/wiki/StumbleUpon"target="_blank" rel="noopener">call&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> &lt;a href="https://web.archive.org/web/20090918020125/http://www.stumbleupon.com/"target="_blank" rel="noopener">StumbleUpon&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> called &lt;a href="https://kagi.com/smallweb/"target="_blank" rel="noopener">Kagi Small Web&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> where it will serve you up a random blog post and you can decide to &amp;ldquo;Appreciate&amp;rdquo; the post by visiting the website/blog.&lt;/p>
&lt;p>&lt;img src="../../assets/images/kagi-small-web.png" alt="" data-zoomable loading="lazy" />
&lt;em>Kagi Small Web landing page&lt;/em>&lt;/p>
&lt;p>What a revelation to me and I am glad I found it. It is a bookmark in my browser that I click whenever I need something interesting to read. If the post is interesting or thought-provoking, I&amp;rsquo;ll visit the site and look through it, and if I like what I&amp;rsquo;m reading I&amp;rsquo;ll add it to my RSS reader of choice and check in daily.&lt;/p>
&lt;p>&lt;a href="https://github.com/FreeTubeApp/FreeTube"target="_blank" rel="noopener">FreeTube&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> is an app to scrape YouTube and it is such a powerful tool because of YouTube&amp;rsquo;s RSS feeds and a proxy service I won&amp;rsquo;t name here.&lt;/p>
&lt;p>But I use FreeTube as a way to keep the channels I actually learn things from separate from the random sports and game clips I watch to fill time.&lt;/p>
&lt;h2>What this means for my social media usage&lt;span class="hx:absolute hx:-mt-20" id="what-this-means-for-my-social-media-usage">&lt;/span>
&lt;a href="#what-this-means-for-my-social-media-usage" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>A lot of people I&amp;rsquo;ve seen on the internet have completely removed themselves from social media entirely, keeping a small circle of people they care about and who care about them updated in a newsletter or private blog post. This makes sense and something I may look into.&lt;/p>
&lt;p>I will be deleting most of my social accounts except for Reddit, YouTube, and a one or two Mastodon servers. That&amp;rsquo;s where I am at the moment.&lt;/p>
&lt;p>My brain is tired of rot and craves learning new things. I may be old but I am forever curious and wanting to tinker with things. I also miss reading books and working with my hands, as well as writing software.&lt;/p>
&lt;p>I have IRL friends and family that &lt;em>actually&lt;/em> know me and who I am and so I don&amp;rsquo;t need to perform on these social apps and I don&amp;rsquo;t need to watch the world burn around me in real-time, in 4K.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Little did I know, or understand, that you have to have money to get your MFA, that or at least &lt;em>come&lt;/em> from money. Trust fund babies get MFAs, not late 20 something poor people.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Working with Linux, Part One</title><link>http://blog.tiff.run/blog/working-through-linux/</link><pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/working-through-linux/</guid><description>
&lt;p>&lt;img src="../../assets/images/linux-series/workspace.jpg" alt="Me at my desk with Fedora and macOS" data-zoomable loading="lazy" />&lt;small>&lt;em>My messy desk working on setting up Fedora with Hyprland and Waybar&lt;/em>&lt;/small>&lt;/p>
&lt;p>I&amp;rsquo;ve been living that motel life now for a couple months. While it is just a room, it is bigger, cleaner, and better for me all around.&lt;/p>
&lt;p>I was able to salvage most of the important things from storage while we get that shutdown; ain&amp;rsquo;t nobody got money for that. This is 2025 and you need to take out a loan to buy a bottle of ketchup so spending $260 on a storage unit when you can barely afford to eat is absolutely not it.&lt;/p>
&lt;p>Regardless, I grabbed all my NUCs, my old Dell Inspiron laptop, all my keyboards, and after tomorrow my PC parts. I am not sure when I&amp;rsquo;ll ever be able to afford another apartment, especially now, and I am not mentally capable of handling a job currently. Long story and not for this blog, anyhow. Ok, this post is about Linux, huh. Yeah, right.&lt;/p>
&lt;h2>Okay, back up&lt;span class="hx:absolute hx:-mt-20" id="okay-back-up">&lt;/span>
&lt;a href="#okay-back-up" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I mainly work on my M1 Mac Mini. It is a great machine, but like I&amp;rsquo;ve said on Mastodon, I am not going to be able to replace it when it dies. This means I need to find an alternative I feel comfortable with &lt;em>right now&lt;/em>, learn it, and prepare to switch to it full time.&lt;/p>
&lt;p>I am extremely lucky that I went full bore into sysadmin work for the past year and a half. It meant that I needed to go through with learning the terminal, terminal commands, and being comfortable with keyboard shortcuts and keybindings.&lt;/p>
&lt;p>I also switched full time to Neovim using LazyVim wrapper and a couple of other TUIs, such as Yazi, fzf, and zoxide.&lt;/p>
&lt;p>Writing code explicitly inside my terminal for the past 6 months has been a hard fought battle but now I can&amp;rsquo;t go back. Now that I have that skill, moving my work from macOS, with its unix underpinnings to Linux is not going to be as hard.&lt;/p>
&lt;h2>Distro Hopping&lt;span class="hx:absolute hx:-mt-20" id="distro-hopping">&lt;/span>
&lt;a href="#distro-hopping" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I&amp;rsquo;ve tried all the usual distros like Ubuntu and Debian. I also tried &lt;a href="https://nixos.org/"target="_blank" rel="noopener">NixOS&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> which didn&amp;rsquo;t quite fit my workflow.&lt;/p>
&lt;p>Learning &lt;em>how&lt;/em> Linux works takes a good amount of time and research. I only suggest switching to it if you meet the following criteria:&lt;/p>
&lt;ol>
&lt;li>You need to have a computer for work and can&amp;rsquo;t afford a Mac or a decent PC&lt;/li>
&lt;li>You have time to invest in learning about Desktop Environments, Distros, File Managers, and all the other necessary things to fully get a grip on Linux&lt;/li>
&lt;li>You hate Windows and are a masochist&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="https://youtu.be/CJ41KZ0fBMc?si=yb8HJ_CsyfjGUt2k"target="_blank" rel="noopener">Distro Hopping is advised against&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>; you lose time and productivity when you do this. And now that I&amp;rsquo;ve got a system setup that I actually &lt;em>like&lt;/em>, I refuse to hop unless I absolutely &lt;em>have to&lt;/em>.&lt;/p>
&lt;h2>My current setup&lt;span class="hx:absolute hx:-mt-20" id="my-current-setup">&lt;/span>
&lt;a href="#my-current-setup" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;h3>On the Dell&lt;span class="hx:absolute hx:-mt-20" id="on-the-dell">&lt;/span>
&lt;a href="#on-the-dell" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Fedora 41 Workstation with GNOME Desktop
&lt;img src="../../assets/images/linux-series/fedora-gnome-laptop.png" alt="" data-zoomable loading="lazy" />&lt;/p>
&lt;h3>On Beelink NUC&lt;span class="hx:absolute hx:-mt-20" id="on-beelink-nuc">&lt;/span>
&lt;a href="#on-beelink-nuc" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Fedora 41 with KDE Plasma DE and Hyprland Tiling Window Manager.
&lt;img src="../../assets/images/linux-series/hyprland-ohmyposh-grim.png" alt="" data-zoomable loading="lazy" />
&lt;img src="../../assets/images/linux-series/fedora-kde-nuc.png" alt="" data-zoomable loading="lazy" />&lt;/p>
&lt;h2>Till next time&lt;span class="hx:absolute hx:-mt-20" id="till-next-time">&lt;/span>
&lt;a href="#till-next-time" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I&amp;rsquo;ll probably talk more about setting up Hyprland and all that is involved with that.&lt;/p></description></item><item><title>On Personal Websites</title><link>http://blog.tiff.run/blog/on-personal-websites/</link><pubDate>Tue, 28 Jan 2025 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/on-personal-websites/</guid><description>
&lt;p>I am really struggling with the direction I want this site to go. Do I just write about my side projects when they are finished or something else?&lt;/p></description></item><item><title>Go Blueprint: An Easy Way to Scoffold Your Go Project</title><link>http://blog.tiff.run/blog/go-blueprint-easy/</link><pubDate>Sat, 28 Dec 2024 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/go-blueprint-easy/</guid><description>
&lt;p>Starting a new Go project is cumbersome; you have to create multiple directories with subdirectories, different modules depending on the thing you&amp;rsquo;re building, and more.&lt;/p>
&lt;p>I am starting a Go project that I won&amp;rsquo;t talk about here. I was looking for a way to scaffold the project with the necessary directories and barebones files so I can get into the project and start building.&lt;/p>
&lt;h2>Go Blueprint&lt;span class="hx:absolute hx:-mt-20" id="go-blueprint">&lt;/span>
&lt;a href="#go-blueprint" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>There is a developer I&amp;rsquo;ve come across on YouTube who does a lot of Go programming. While searching for a good scaffold, I came across his repo, &lt;a href="https://github.com/Melkeydev/go-blueprint"target="_blank" rel="noopener">Go Blueprint&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> which is everything I was looking for and more. It has around 6,4000 stargazers so that can give you an idea of its usefulness.&lt;/p>
&lt;h2>Off to build a thing&lt;span class="hx:absolute hx:-mt-20" id="off-to-build-a-thing">&lt;/span>
&lt;a href="#off-to-build-a-thing" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>I&amp;rsquo;ve been consuming lots of Go content to get a feel for things with the &lt;a href="https://devdocs.io"target="_blank" rel="noopener">docs&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> open and Neovim ready to go. I&amp;rsquo;m hoping to have this next project built by the middle of January. I am uncertain about this as I have to attend group therapy for a little while, which I don&amp;rsquo;t want to do but alas.&lt;/p></description></item><item><title>Back Again</title><link>http://blog.tiff.run/blog/back-again/</link><pubDate>Fri, 18 Oct 2024 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/back-again/</guid><description>
&lt;blockquote>
&lt;p>This is going to be a brief post; I have not gathered my thoughts on my current career situation, however that will come.&lt;/p>
&lt;/blockquote>
&lt;h2>What&amp;rsquo;s Up?&lt;span class="hx:absolute hx:-mt-20" id="whats-up">&lt;/span>
&lt;a href="#whats-up" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>Well, I&amp;rsquo;ve given up on pivoting to cybersecurity. I have also given up on IT/DevOps as a career. I will be talking about this
more in another post somewhere else which I&amp;rsquo;ll link to, but it is what it is for me.&lt;/p>
&lt;p>This means I have more time to build software when I get a chance and for fun and for my next endeavour which means
this blog is my main one for software dev for the foreseeable future.&lt;/p>
&lt;p>I am glad to consolidate things and pare things down to just this blog and my next endeavour &lt;a href="https://tifflabs.org"target="_blank" rel="noopener">Tiff Labs&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>.&lt;/p>
&lt;h2>What is Tiff Labs?&lt;span class="hx:absolute hx:-mt-20" id="what-is-tiff-labs">&lt;/span>
&lt;a href="#what-is-tiff-labs" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>First, I&amp;rsquo;ve quit trying to have a career in tech proper. It&amp;rsquo;s just not going to happen for someone my age during a recession
like this. I don&amp;rsquo;t have a degree and am fully self-taught. This is a big strike against me returning to the workforce in tech and
if I can&amp;rsquo;t do that, I will do my own thing. I have income from other sources to be able to do this so I am not too concerned about
making ends meet for now.&lt;/p>
&lt;p>Tiff Labs is an umbrella of things- a YouTube channel, a blog, a smart home resource, and a homelab resource. I can make money from that once I get more content up and posted&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.&lt;/p>
&lt;p>I will also be doing more DIY repairing of devices and DIY building of things in general. I enjoy working with my hands more than working with code. I love both, don&amp;rsquo;t get me wrong. However working with my hands gives me immense joy I don&amp;rsquo;t find while writing software.&lt;/p>
&lt;h2>What this blog will be&lt;span class="hx:absolute hx:-mt-20" id="what-this-blog-will-be">&lt;/span>
&lt;a href="#what-this-blog-will-be" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>It will be a place for me to talk about the software I build for my other projects and hopefully a small business at some point. That&amp;rsquo;s it.&lt;/p>
&lt;p>Here is a project I&amp;rsquo;d like to build in Go:&lt;/p>
&lt;blockquote class="reddit-embed-bq" data-embed-height="364">&lt;a href="https://www.reddit.com/r/golang/comments/1e6cwgi/comment/lds2v63/">Comment&lt;/a>&lt;br> by&lt;a href="https://www.reddit.com/user/TheBrownViking20/">u/TheBrownViking20&lt;/a> from discussion&lt;a href="https://www.reddit.com/r/golang/comments/1e6cwgi/what_is_the_most_interesting_golang_cli_app_youve/">&lt;/a>&lt;br> in&lt;a href="https://www.reddit.com/r/golang/">golang&lt;/a>&lt;/blockquote>&lt;script async="" src="https://embed.reddit.com/widgets.js" charset="UTF-8">&lt;/script>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>I know that affiliate links are frowned upon but other than ads which I don&amp;rsquo;t want to run, this will have to do for now.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>This Week's Update</title><link>http://blog.tiff.run/blog/this-week-update/</link><pubDate>Tue, 23 Apr 2024 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/this-week-update/</guid><description>
&lt;p>Things I have been up to while off LinkedIn:&lt;/p>
&lt;ul>
&lt;li>Working on my &lt;a href="http://homelab.tifflabs.org"target="_blank" rel="noopener">home lab&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> by setting up k3s for High Availabilty servers for critical services in the lab&lt;/li>
&lt;li>Learning more about VMs, &lt;a href="https://notes.0x8c.org/home-lab/nginx-configs/"target="_blank" rel="noopener">Nginx&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>, and Reverse Proxies&lt;/li>
&lt;li>Learning about &lt;a href="https://certbot.eff.org/"target="_blank" rel="noopener">Certbot&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>&lt;/li>
&lt;li>Failing to set up &lt;a href="https://github.com/tobychui/zoraxy"target="_blank" rel="noopener">TWO &amp;ldquo;beginner-friendly&amp;rdquo;&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> &lt;a href="https://nginxproxymanager.com/"target="_blank" rel="noopener">reverse proxy managers&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> and realizing that &lt;a href="https://lemmy.brendan.ie/comment/223126"target="_blank" rel="noopener">learning how to use the CLI more&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> is the best course of action&lt;/li>
&lt;li>Learning how to &lt;a href="https://gist.github.com/twhite96/2ed4c6f3d50ed0009947c69e7bded6ca"target="_blank" rel="noopener">reconfigure Proxmox IP addresses&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>, failing to keep the cluster, and wiping three nodes clean&lt;/li>
&lt;li>Deciding that I&amp;rsquo;d keep one node out of the cluster for having one less entrypoint to my network&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/li>
&lt;li>Setting up InfluxDB for use of monitoring my Proxmox cluster and separate node in Grafana&lt;/li>
&lt;li>Learning Linux commands such as &lt;code>fstab&lt;/code>, &lt;code>lsblk&lt;/code>, and that you can pretty much do everything you need system wide (rebooting, etc), by prefixing &lt;code>systemctl&lt;/code> to those commands&lt;/li>
&lt;li>Creating my own Docker image and container to fix a bug in a repo I want to use but want it to install dependencies and &amp;ldquo;just work&amp;rdquo;, as they say&lt;/li>
&lt;li>Installing a self-hosted Git client/website&lt;/li>
&lt;li>Learning that &lt;code>ini&lt;/code> files are basically the same as &lt;code>toml&lt;/code> files&lt;/li>
&lt;li>Researching how to use WebSockets in Python or Go to understand how someone could use that to exploit a website/machine by keeping the socket alive and using the website/machine as a C2 server&lt;/li>
&lt;li>Working on creating my own C2 server&lt;/li>
&lt;/ul>
&lt;p>I&amp;rsquo;ve been at it nonstop these past two weeks, but I am having serious fun.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>I have too many VMs and LXCs now or I&amp;rsquo;d change the IP to help with this as well.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Go Project Structure for gURL</title><link>http://blog.tiff.run/blog/go-project-structure/</link><pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/go-project-structure/</guid><description>
&lt;p>Over the past week I&amp;rsquo;ve been working on changing the structure of gURL.&lt;/p>
&lt;p>One of my old CodeNewbie friends on LinkedIn gave me a template to start from on GitHub called &lt;a href="https://github.com/golang-standards/project-layout"target="_blank" rel="noopener">Standard Go Project Layout&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>. I intend to use this as a guide.&lt;/p></description></item><item><title>gURL: A cURL Wrapper Written in Go</title><link>http://blog.tiff.run/blog/gurl-cli/</link><pubDate>Sun, 24 Mar 2024 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/gurl-cli/</guid><description>
&lt;p>Briefly: I am writing a CLI tool that fetches info from GitHub&amp;rsquo;s REST API as a wrapper around cURL.&lt;/p>
&lt;p>Why?&lt;/p>
&lt;p>Just to keep my finger on the pulse of software development and to practice my programming skills because believe it or not, being able to code as a cybersecurity professional is extremely useful, even though it isn&amp;rsquo;t &lt;em>technically necessary&lt;/em>.&lt;/p>
&lt;p>I&amp;rsquo;m currently wading though documentation on Go modules and Go standard library packages, as well as reading other code examples to see how I want to structure my application.&lt;/p>
&lt;p>First, I found a &lt;a href="https://github.com/wick3dr0se/github-api-curl/tree/master"target="_blank" rel="noopener">repo that&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> uses shell scripts to wrap around the GitHub API. This gave me the idea for splitting up my tool into different directories.&lt;/p>
&lt;p>Then, I fiddled around with &lt;a href="https://github.com/google/go-github/tree/master"target="_blank" rel="noopener">Google&amp;rsquo;s GitHub Go library&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> to see how they used Go to build the library.&lt;/p>
&lt;h2>Fits and Starts&lt;span class="hx:absolute hx:-mt-20" id="fits-and-starts">&lt;/span>
&lt;a href="#fits-and-starts" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>My first inkling was to crib this code from the Google repo:&lt;/p>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">var&lt;/span> &lt;span class="nx">defaultBaseURL&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">&amp;#34;https://github.com/&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Client is a GitHub scraping client.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">type&lt;/span> &lt;span class="nx">Client&lt;/span> &lt;span class="kd">struct&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="nx">http&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Client&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// base URL for github.com pages. Exposed primarily for testing. Also&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// used for saving and restoring cookies on the Client.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">baseURL&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">url&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">URL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>I wasn&amp;rsquo;t exactly sure what I was looking at; I have a &lt;code>baseURL&lt;/code> variable that is assigned the GitHub url. I&amp;rsquo;ve imported the &lt;code>net/http&lt;/code> package, as it would have been in this example. We have a &lt;code>Client&lt;/code> type that is also a &lt;code>struct&lt;/code> which I have forgetten what they are exactly, as it has been a while since I&amp;rsquo;ve read the C++ docs, which also has a &lt;code>struct&lt;/code> but I think that &lt;code>struct&lt;/code> in this instance has the &lt;code>type&lt;/code> keyword to denote that it is a &lt;code>class&lt;/code> or something.&lt;/p>
&lt;p>In any case, I was trying to figure out how to use string interpolation in the URL parameters like you would in JavaScript template strings:&lt;/p>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Octokit.js
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// https://github.com/octokit/core.js#readme
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">octokit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">Octokit&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">auth&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;YOUR-TOKEN&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// the request method contains template strings which is
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// JavaScript&amp;#39;s way of doing string interpolation
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">await&lt;/span> &lt;span class="nx">octokit&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">request&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;GET /repos/{owner}/{repo}&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">owner&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;OWNER&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">repo&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;REPO&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">headers&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;X-GitHub-Api-Version&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;2022-11-28&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>How does that work in Go?&lt;/p>
&lt;p>At first I was thinking of using &lt;code>Stripln()&lt;/code> to do string interpolation but as a &lt;a href="https://stackoverflow.com/a/71181938/3800146"target="_blank" rel="noopener">StackOverflow user said&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>, to put that junk in a query parameter would be messy and unsafe. The user suggested the op use the &lt;code>net/http&lt;/code> library which solves all the issues I&amp;rsquo;d face trying to make &lt;code>GET&lt;/code> requests to GitHub&amp;rsquo;s REST API.&lt;/p>
&lt;p>The example given:&lt;/p>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">params&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">url&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Values&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;page[size]&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[]&lt;/span>&lt;span class="kt">string&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="s">&amp;#34;100&amp;#34;&lt;/span>&lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;page[&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">key&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s">&amp;#34;]&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[]&lt;/span>&lt;span class="kt">string&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="s">&amp;#34;1&amp;#34;&lt;/span>&lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">u&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="nx">url&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">URL&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">Scheme&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s">&amp;#34;https&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">Host&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s">&amp;#34;url.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">Path&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s">&amp;#34;/path&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">RawQuery&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nx">params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Encode&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">http&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">NewRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">u&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">String&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="kc">nil&lt;/span>&lt;span class="p">)&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>This should do it for now.&lt;/p></description></item><item><title>Hello, y'all</title><link>http://blog.tiff.run/blog/hello/</link><pubDate>Sun, 17 Mar 2024 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/hello/</guid><description>
&lt;p>This is a learning and accountability blog.&lt;/p>
&lt;p>This is my first post. It will be updated as time permits.&lt;/p>
&lt;p>One of the things frustrating me lately is when I was just starting out, I blogged about literally everything; the industry was new to me and everyone was excited, I was excited at the possibility of pulling myself out of extreme poverty. I was younger, bright-eyed, without any cynicism.&lt;/p>
&lt;p>Fast forward 10 years and a lot has changed. I won&amp;rsquo;t get into the gory details but y&amp;rsquo;all know. Tech is not what it used to be, I&amp;rsquo;ve grown to despise most JavaScript anything, and I&amp;rsquo;m an industry vet who is disillusioned by the state of the industry and the world in general. That kind of pessimism weighs on me daily, so much so I don&amp;rsquo;t write about anything I learn. It sucks.&lt;/p>
&lt;p>So this is my blog post I&amp;rsquo;m sending you, I hope you read it. (Bonus points is you get that reference).&lt;/p></description></item><item><title>Markdown Syntax Guide</title><link>http://blog.tiff.run/blog/markdown/</link><pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate><guid>http://blog.tiff.run/blog/markdown/</guid><description>
&lt;p>This article offers a sample of basic Markdown syntax that can be used in Hugo content files.&lt;/p>
&lt;h2>Basic Syntax&lt;span class="hx:absolute hx:-mt-20" id="basic-syntax">&lt;/span>
&lt;a href="#basic-syntax" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;h3>Headings&lt;span class="hx:absolute hx:-mt-20" id="headings">&lt;/span>
&lt;a href="#headings" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;pre>&lt;code># Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6&lt;/code>&lt;/pre>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;h2>Heading 2&lt;span class="hx:absolute hx:-mt-20" id="heading-2">&lt;/span>
&lt;a href="#heading-2" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;h3>Heading 3&lt;span class="hx:absolute hx:-mt-20" id="heading-3">&lt;/span>
&lt;a href="#heading-3" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;h4>Heading 4&lt;span class="hx:absolute hx:-mt-20" id="heading-4">&lt;/span>
&lt;a href="#heading-4" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h4>&lt;h5>Heading 5&lt;span class="hx:absolute hx:-mt-20" id="heading-5">&lt;/span>
&lt;a href="#heading-5" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h5>&lt;h6>Heading 6&lt;span class="hx:absolute hx:-mt-20" id="heading-6">&lt;/span>
&lt;a href="#heading-6" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h6>&lt;h3>Emphasis&lt;span class="hx:absolute hx:-mt-20" id="emphasis">&lt;/span>
&lt;a href="#emphasis" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">*This text will be italic*
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">_This will also be italic_
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">**This text will be bold**
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">__This will also be bold__
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">_You **can** combine them_&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>This text will be italic&lt;/em>&lt;/p>
&lt;p>&lt;em>This will also be italic&lt;/em>&lt;/p>
&lt;p>&lt;strong>This text will be bold&lt;/strong>&lt;/p>
&lt;p>&lt;strong>This will also be bold&lt;/strong>&lt;/p>
&lt;p>&lt;em>You &lt;strong>can&lt;/strong> combine them&lt;/em>&lt;/p>
&lt;h3>Lists&lt;span class="hx:absolute hx:-mt-20" id="lists">&lt;/span>
&lt;a href="#lists" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;h4>Unordered&lt;span class="hx:absolute hx:-mt-20" id="unordered">&lt;/span>
&lt;a href="#unordered" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h4>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;pre>&lt;code>* Item 1
* Item 2
* Item 2a
* Item 2b&lt;/code>&lt;/pre>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;ul>
&lt;li>Item 1&lt;/li>
&lt;li>Item 2
&lt;ul>
&lt;li>Item 2a&lt;/li>
&lt;li>Item 2b&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4>Ordered&lt;span class="hx:absolute hx:-mt-20" id="ordered">&lt;/span>
&lt;a href="#ordered" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h4>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;pre>&lt;code>1. Item 1
2. Item 2
3. Item 3
1. Item 3a
2. Item 3b&lt;/code>&lt;/pre>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;h3>Images&lt;span class="hx:absolute hx:-mt-20" id="images">&lt;/span>
&lt;a href="#images" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">![&lt;span class="nt">GitHub Logo&lt;/span>](&lt;span class="na">https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png&lt;/span>)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>&lt;img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="GitHub Logo" data-zoomable loading="lazy" />&lt;/p>
&lt;h3>Links&lt;span class="hx:absolute hx:-mt-20" id="links">&lt;/span>
&lt;a href="#links" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">[&lt;span class="nt">Hugo&lt;/span>](&lt;span class="na">https://gohugo.io&lt;/span>)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>&lt;a href="https://gohugo.io"target="_blank" rel="noopener">Hugo&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>&lt;/p>
&lt;h3>Blockquotes&lt;span class="hx:absolute hx:-mt-20" id="blockquotes">&lt;/span>
&lt;a href="#blockquotes" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">As Newton said:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; If I have seen further it is by standing on the shoulders of Giants.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;blockquote>
&lt;p>If I have seen further it is by standing on the shoulders of Giants.&lt;/p>
&lt;/blockquote>
&lt;h3>Inline Code&lt;span class="hx:absolute hx:-mt-20" id="inline-code">&lt;/span>
&lt;a href="#inline-code" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">Inline &lt;span class="sb">`code`&lt;/span> has &lt;span class="sb">`back-ticks around`&lt;/span> it.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;p>Inline &lt;code>code&lt;/code> has &lt;code>back-ticks around&lt;/code> it.&lt;/p>
&lt;h3>Code Blocks&lt;span class="hx:absolute hx:-mt-20" id="code-blocks">&lt;/span>
&lt;a href="#code-blocks" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;h4>Syntax Highlighting&lt;span class="hx:absolute hx:-mt-20" id="syntax-highlighting">&lt;/span>
&lt;a href="#syntax-highlighting" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h4>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="s">```go
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">&lt;/span>&lt;span class="kd">func&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fmt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello World&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">```&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">func&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fmt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello World&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;h3>Tables&lt;span class="hx:absolute hx:-mt-20" id="tables">&lt;/span>
&lt;a href="#tables" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">
&lt;div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">| Syntax | Description |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| --------- | ----------- |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Header | Title |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| Paragraph | Text |&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
>
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4">&lt;/div>
&lt;/button>
&lt;/div>
&lt;/div>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Syntax&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Header&lt;/td>
&lt;td>Title&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Paragraph&lt;/td>
&lt;td>Text&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2>References&lt;span class="hx:absolute hx:-mt-20" id="references">&lt;/span>
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.markdownguide.org/basic-syntax/"target="_blank" rel="noopener">Markdown Syntax&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://gohugo.io/content-management/formats/#markdown"target="_blank" rel="noopener">Hugo Markdown&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>