<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>posts on franfabrizio.dev</title>
    <link>http://franfabrizio.dev/posts/</link>
    <description>Recent content in posts on franfabrizio.dev</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 03 Jun 2026 22:00:13 -0500</lastBuildDate>
    <atom:link href="http://franfabrizio.dev/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The AM4 Dual Tesla P40 Buildout</title>
      <link>http://franfabrizio.dev/posts/am4-tesla-p40-buildout/</link>
      <pubDate>Wed, 03 Jun 2026 22:00:13 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/am4-tesla-p40-buildout/</guid>
      <description>&lt;p&gt;This is Part 2 in my series about building a cheap VRAM AI machine with used Tesla P40 GPUs. If you haven&amp;rsquo;t already, check out &lt;a href=&#34;http://franfabrizio.dev/posts/tesla-p40-ai-server-project/&#34;&gt;Part 1: When Cheap VRAM Gets Complicated&lt;/a&gt; for the backstory on why I needed P40s, and optionally, &lt;a href=&#34;http://franfabrizio.dev/posts/troubleshooting-tesla-p40-dell-precision-t7820/&#34;&gt;the troubleshooting post&lt;/a&gt; for the technical details of the dead end that led to this build.&lt;/p&gt;&#xA;&lt;p&gt;In the first post, I explained why I went chasing cheap VRAM in the first place. The short version: local LLMs love VRAM, modern high-VRAM GPUs are painfully expensive, and used Tesla P40s offer 24GB of CUDA-compatible VRAM for a price that justifies using 10-year-old datacenter hardware for this project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Troubleshooting the Tesla P40 on the Dell Precision T7820 Workstation</title>
      <link>http://franfabrizio.dev/posts/troubleshooting-tesla-p40-dell-precision-t7820/</link>
      <pubDate>Wed, 03 Jun 2026 08:48:10 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/troubleshooting-tesla-p40-dell-precision-t7820/</guid>
      <description>&lt;p&gt;This is the optional troubleshooting appendix to my &lt;a href=&#34;http://franfabrizio.dev/posts/tesla-p40-ai-server-project/&#34;&gt;first Tesla P40 post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you only care about the build that eventually worked, you can skip this one. The short version is: I could not get my Dell Precision T7820 to reliably initialize a Tesla P40 as a usable CUDA device, so I eventually stopped fighting it and moved to an AM4 consumer platform instead.&lt;/p&gt;&#xA;&lt;p&gt;But if you are here because you searched for something like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>When Cheap VRAM Gets Complicated: My Tesla P40 AI Server Project Part 1</title>
      <link>http://franfabrizio.dev/posts/tesla-p40-ai-server-project/</link>
      <pubDate>Tue, 02 Jun 2026 15:48:41 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/tesla-p40-ai-server-project/</guid>
      <description>&lt;p&gt;I believe that the future of AI is local.&lt;/p&gt;&#xA;&lt;p&gt;Some of that is practical: I don&amp;rsquo;t want every question, experiment, and coding session routed through someone&amp;rsquo;s cloud service. Some of that is financial: I don&amp;rsquo;t think the cloud-based AI business models are friendly to individuals or sustainable more generally. And a lot of it is ethical: I don&amp;rsquo;t believe that AI, and our interaction with it, is something that should be centralized, scaled and controlled by IT megacorps. I want AI that I control and that puts my interests front and center.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Generative AI and LLMs Actually Work: Everything I Wish I Knew When I Started</title>
      <link>http://franfabrizio.dev/posts/how-generative-ai-and-llms-actually-work/</link>
      <pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate>
      <guid>http://franfabrizio.dev/posts/how-generative-ai-and-llms-actually-work/</guid>
      <description>&lt;p&gt;When using modern generative AI, it can sometimes feel a little magical. How does it know so much&amp;ndash;and sound so convincingly human? Ever wonder how it works? Ever wonder how the AI can not only give you a response that makes sense but also seems to &amp;ldquo;understand&amp;rdquo; what you meant, knows details you didn&amp;rsquo;t actually type in, seems to be an expert on every topic under the sun, and sometimes seems to know what you really were wanting it to do better than you did yourself?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures in Local LLMs Part 4: Choosing a Model for Your Setup</title>
      <link>http://franfabrizio.dev/posts/adventures-in-local-llms-part-4/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/adventures-in-local-llms-part-4/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;http://franfabrizio.dev/posts/adventures-in-local-llms-part-3/&#34;&gt;Part 3&lt;/a&gt;, I walked through the software stack I ended up running — Ollama, Open WebUI, paperless-gpt, and a handful of other tools — and how much of it felt like a science experiment. The stack worked, mostly, but it was only half the equation. The other half is the model itself.&lt;/p&gt;&#xA;&lt;p&gt;Once you&amp;rsquo;ve got your hardware constraints figured out (we covered those exhaustively in &lt;a href=&#34;http://franfabrizio.dev/posts/adventures-in-local-llms-part-2/&#34;&gt;Part 2&lt;/a&gt;) and your software stack in place, you&amp;rsquo;re left with a deceptively simple question: &lt;em&gt;which model do you actually run?&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures in Local LLMs Part 3: The Software Stack is a Science Experiment</title>
      <link>http://franfabrizio.dev/posts/adventures-in-local-llms-part-3/</link>
      <pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate>
      <guid>http://franfabrizio.dev/posts/adventures-in-local-llms-part-3/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;After working through the hardware constraints, I had a pretty clear next step:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Install the “standard” local LLM stack and see how it feels.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you spend about five minutes in this space, you’ll quickly converge on a default answer:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use Ollama to run models&lt;/li&gt;&#xA;&lt;li&gt;Pair it with Open WebUI for a UI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That’s the path I took.&lt;/p&gt;&#xA;&lt;p&gt;And to be fair—this stack &lt;strong&gt;does work&lt;/strong&gt;. But it also exposed a lot of the rough edges that weren’t obvious until I lived with it for a bit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures in Local LLMs Part 2: The Hard Truth about Hardware</title>
      <link>http://franfabrizio.dev/posts/adventures-in-local-llms-part-2/</link>
      <pubDate>Tue, 28 Apr 2026 10:02:18 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/adventures-in-local-llms-part-2/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;After deciding that local LLMs were worth exploring, the next obvious question was: &lt;em&gt;can I even run these things with the hardware I already have?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-baseline&#34;&gt;My Baseline&lt;/h2&gt;&#xA;&lt;p&gt;Before going any further, here’s what I’m working with:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ryzen 5900X&lt;/li&gt;&#xA;&lt;li&gt;32GB system RAM&lt;/li&gt;&#xA;&lt;li&gt;NVIDIA 3060ti 8GB VRAM GPU&lt;/li&gt;&#xA;&lt;li&gt;Windows 11&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Nothing exotic. A solid build from a few years ago. Importantly, this is not a purpose-built AI box. It’s my daily driver that I’m trying to repurpose into a usable AI server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures in Local LLMs, Part 1: I Really Didn&#39;t Want to Do This</title>
      <link>http://franfabrizio.dev/posts/adventures-in-local-llms-part-1/</link>
      <pubDate>Mon, 27 Apr 2026 21:40:15 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/adventures-in-local-llms-part-1/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;I admit I&amp;rsquo;m late to the Large Language Model (LLM) game, as it&amp;rsquo;s been fueling the current AI boom for a few years now. Modern AI simply hasn&amp;rsquo;t held my interest up to now. I have to keep somewhat up to date with AI and LLM developments because of my day job as an IT Director, but after that I had no curiosity left to play with it in my spare time. Part of the reason for that is that I&amp;rsquo;m quite torn on AI in general. It has immense potential to do good, and yet it is undeniable that it is and will continue fueling a massive amount of societal harm as well (misinformation and deepfakes, automated fraud and scams, unapproved use of others&amp;rsquo; intellectual property, devaluing artistic output, contributions to addiction/mental illness, amplifying systemic bias, concentrating more power in the hands of the few, cybersecurity risks, and job market upheaval, to name a few). Some of the characteristics of modern AI that concern me the most are privacy, sustainability and cost.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DIY 3D Printer Ventilation</title>
      <link>http://franfabrizio.dev/posts/diy-3d-printer-ventilation/</link>
      <pubDate>Sat, 13 Dec 2025 09:48:48 -0600</pubDate>
      <guid>http://franfabrizio.dev/posts/diy-3d-printer-ventilation/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Some 3d printing filaments are considered safer (PLA, PETG, TPU) than others (ABS, ASA, PC, anything with carbon fiber or other additives), but all of them give off some level of VOCs and particles that can be hazardous to your health. There are a number of ways to mitigate these hazards, including physically isolating the printer in an area that doesn&amp;rsquo;t mix with the air you&amp;rsquo;re breathing or using a variety of air filtration devices. These work to some extent, but the gold standard is to ventilate the exhaust air of the printer directly to the outside. In this post, I&amp;rsquo;ll describe my DIY solution for doing just that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open Sourcing My Window Shades: How I Escaped the Smith and Noble Motiva Closed Ecosystem</title>
      <link>http://franfabrizio.dev/posts/open-sourcing-my-window-shades/</link>
      <pubDate>Mon, 03 Nov 2025 10:41:23 -0600</pubDate>
      <guid>http://franfabrizio.dev/posts/open-sourcing-my-window-shades/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;post-image&#34;&gt;&#xA;    &lt;a href=&#34;http://franfabrizio.dev/posts/open-sourcing-my-window-shades/intro.webp&#34;&gt;&#xA;      &lt;img&#xA;        src=&#34;http://franfabrizio.dev/posts/open-sourcing-my-window-shades/intro_hu445514991920478729.webp&#34;&#xA;        srcset=&#34;&#xA;          /posts/open-sourcing-my-window-shades/intro_hu18090827679682995676.webp 480w,&#xA;          /posts/open-sourcing-my-window-shades/intro_hu445514991920478729.webp 800w,&#xA;          /posts/open-sourcing-my-window-shades/intro_hu2362509318242868313.webp 1200w&#xA;        &#34;&#xA;        sizes=&#34;(max-width: 700px) 100vw, 800px&#34;&#xA;        width=&#34;800&#34;&#xA;        height=&#34;601&#34;&#xA;        alt=&#34;Tools You&amp;rsquo;ll Need&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        decoding=&#34;async&#34;&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;The shades on these three large windows in our living room behind a couch were difficult to manually open and close, so a few years ago we splurged on an upgrade to motorized battery-powered, RF-remote-controlled Motiva shades from Smith and Noble. These worked great for a few years, with the only annoyance being that as the batteries discharged they would start to move at different speeds, making it difficult to stop them in the same location. As long as we remembered to charge them every few months, this mostly wasn&amp;rsquo;t a big issue, but recently one of them developed a problem where the motor battery would no longer recharge. It still works, but only if we keep it plugged into its charging cable at all times, which is inconvenient and unsightly. I&amp;rsquo;ve been meaning to get around to a fix, but six months later the charging cable was still hanging off of it&amp;hellip; you know how that goes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Deep Dive on Choosing a Monitor for Work Using Science and Math</title>
      <link>http://franfabrizio.dev/posts/deep-dive-choosing-a-monitor/</link>
      <pubDate>Thu, 26 Dec 2024 00:00:00 +0000</pubDate>
      <guid>http://franfabrizio.dev/posts/deep-dive-choosing-a-monitor/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re anything like me there&amp;rsquo;s nothing you love more than researching a tech purchase to death. I recently updated our standard equipment recommendations for our staff at work. As part of that effort, I researched modern monitor options for productivity work - in our case, software development. It turned into a fascinating journey down a very deep rabbit hole, so I decided to put together this blog post to share what I learned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Evernote to Paperless-NGX - Revisiting My Digital Home Office After a Decade</title>
      <link>http://franfabrizio.dev/posts/revisiting-paperless-office-after-a-decade/</link>
      <pubDate>Sat, 07 Dec 2024 11:37:19 -0600</pubDate>
      <guid>http://franfabrizio.dev/posts/revisiting-paperless-office-after-a-decade/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;I remember it clearly. It was 2012, and we were in our rental house in a new city as we searched for our permanent home. I had set up a home office in the small attic loft space, and my computer desk was surrounded by a filing cabinet and boxes of paperwork that I had moved and never unpacked. I was dreading having to haul these boxes yet again when we found our home, so I decided to go completely paperless and set up a digital home office workflow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using a Specific Version of Hugo at Cloudflare</title>
      <link>http://franfabrizio.dev/posts/specific-version-of-hugo-at-cloudflare/</link>
      <pubDate>Sun, 10 Nov 2024 23:29:19 -0600</pubDate>
      <guid>http://franfabrizio.dev/posts/specific-version-of-hugo-at-cloudflare/</guid>
      <description>&lt;p&gt;Just a quick post for those who might be struggling to get Cloudflare to use a specific version of Hugo for a site they are hosting there. The &lt;a href=&#34;https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/#use-a-specific-or-newer-hugo-version&#34;&gt;Cloudflare documentation suggests&lt;/a&gt; that you can add a &lt;code&gt;HUGO_VERSION&lt;/code&gt; environment variable to your site build via your Cloudflare dashboard. This may indeed be the case, but I struggled with it for quite a while, and my environment variable was having no apparent effect.&lt;/p&gt;</description>
    </item>
    <item>
      <title>QNAP Requires RSA Keys and Certificates</title>
      <link>http://franfabrizio.dev/posts/qnap-requires-rsa-keys-and-certificates/</link>
      <pubDate>Thu, 07 Nov 2024 23:07:35 -0600</pubDate>
      <guid>http://franfabrizio.dev/posts/qnap-requires-rsa-keys-and-certificates/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently set up my own private certificate authority to issue keys for my private homelab domain, and I was ready to get rid of the browser warnings that come along with QNAP&amp;rsquo;s default cert:&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;post-image&#34;&gt;&#xA;    &lt;a href=&#34;http://franfabrizio.dev/posts/qnap-requires-rsa-keys-and-certificates/warning.png&#34;&gt;&#xA;      &lt;img&#xA;        src=&#34;http://franfabrizio.dev/posts/qnap-requires-rsa-keys-and-certificates/warning_hu13793612924576215057.webp&#34;&#xA;        srcset=&#34;&#xA;          /posts/qnap-requires-rsa-keys-and-certificates/warning_hu8701643882647509388.webp 480w,&#xA;          /posts/qnap-requires-rsa-keys-and-certificates/warning_hu13793612924576215057.webp 800w,&#xA;          /posts/qnap-requires-rsa-keys-and-certificates/warning_hu17256925015710761515.webp 1200w&#xA;        &#34;&#xA;        sizes=&#34;(max-width: 700px) 100vw, 800px&#34;&#xA;        width=&#34;800&#34;&#xA;        height=&#34;305&#34;&#xA;        alt=&#34;Browser Warning&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        decoding=&#34;async&#34;&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;The warning is due to QNAP shipping QTS with a self-signed certificate.&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;post-image&#34;&gt;&#xA;    &lt;a href=&#34;http://franfabrizio.dev/posts/qnap-requires-rsa-keys-and-certificates/selfsigned.png&#34;&gt;&#xA;      &lt;img&#xA;        src=&#34;http://franfabrizio.dev/posts/qnap-requires-rsa-keys-and-certificates/selfsigned_hu18080403749173911095.webp&#34;&#xA;        srcset=&#34;&#xA;          /posts/qnap-requires-rsa-keys-and-certificates/selfsigned_hu6940266451533068002.webp 480w,&#xA;          /posts/qnap-requires-rsa-keys-and-certificates/selfsigned_hu18080403749173911095.webp 800w,&#xA;          /posts/qnap-requires-rsa-keys-and-certificates/selfsigned_hu9390170357130626542.webp 1200w&#xA;        &#34;&#xA;        sizes=&#34;(max-width: 700px) 100vw, 800px&#34;&#xA;        width=&#34;800&#34;&#xA;        height=&#34;997&#34;&#xA;        alt=&#34;QNAP&amp;rsquo;s Self-Signed Certificate&#34;&#xA;        loading=&#34;lazy&#34;&#xA;        decoding=&#34;async&#34;&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Securing Docker Traffic by Integrating Traefik With step-ca</title>
      <link>http://franfabrizio.dev/posts/integrating-traefik-with-step-ca/</link>
      <pubDate>Mon, 04 Nov 2024 00:21:12 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/integrating-traefik-with-step-ca/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;At work, we use Traefik to proxy all of our production internet-facing services. One super convenient aspect of this is that Traefik automatically integrates with Let&amp;rsquo;s Encrypt to get and update certificates for all of these services, taking away what would otherwise be a massive certificate management challenge. I wanted to get the same convenience for my home Docker environment, but Let&amp;rsquo;s Encrypt requires that your DNS be public to verify requests. I do not have any internet-facing services and did not want to use a public domain for my homelab. Luckily, we can achieve the same thing using the &lt;code&gt;step-ca&lt;/code&gt; online Certificate Authority and a private domain!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Up a Traefik Application Proxy for Docker</title>
      <link>http://franfabrizio.dev/posts/setting-up-a-traefik-reverse-proxy-for-docker/</link>
      <pubDate>Sat, 02 Nov 2024 00:21:40 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/setting-up-a-traefik-reverse-proxy-for-docker/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In this post we&amp;rsquo;ll be setting up a Traefik service in our Docker environment. Traefik is a reverse proxy/load balancer/edge router designed for cloud-native environments. This is useful for a lot of reasons such as performance and security, but one of the most common reasons to do this in your homelab is so that you don&amp;rsquo;t have to expose a bunch of non-standard ports to reach your containerized web services. With Traefik, all of them can respond on port 80, and Traefik will route to the appropriate one based on the domain name in the URL.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker, Portainer and MACVLAN: Giving a Container an IP on the Host Network and Communicating with the Host</title>
      <link>http://franfabrizio.dev/posts/container-ip-on-host-network/</link>
      <pubDate>Wed, 30 Oct 2024 22:11:07 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/container-ip-on-host-network/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This post describes how I solved two separate but related problems with my Docker environment.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How to give a container an IP on the host&amp;rsquo;s network&lt;/li&gt;&#xA;&lt;li&gt;How to allow the host to talk to that container (once you do #1, you&amp;rsquo;ll find that it can&amp;rsquo;t by default)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This problem and solution are well-documented on the Internet, but I wanted to gather it in one place and go a little more in-depth in some areas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TIL: Don&#39;t Try to Put step-ca Behind Traefik</title>
      <link>http://franfabrizio.dev/posts/til-dont-try-to-put-step-ca-behind-traefik/</link>
      <pubDate>Mon, 28 Oct 2024 23:04:01 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/til-dont-try-to-put-step-ca-behind-traefik/</guid>
      <description>&lt;p&gt;Just a quick post to stop others from going down this rabbit hole&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t try to put step-ca behind Traefik. I run step-ca as a Docker container, so I thought, why not try to put it behind Traefik with my other services? Here&amp;rsquo;s why not.&lt;/p&gt;&#xA;&lt;p&gt;Traefik by default terminates SSL at itself and talks plain HTTP to the backend containers. Try that with step-ca and you&amp;rsquo;ll get a &lt;code&gt;client sent an HTTP request to an HTTPS server&lt;/code&gt; error. step-ca requires HTTPS connections (makes sense, it&amp;rsquo;s a CA after all).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a Private Certificate Authority for Your Homelab with step-ca</title>
      <link>http://franfabrizio.dev/posts/private-ca-with-step-ca/</link>
      <pubDate>Fri, 25 Oct 2024 22:55:10 -0500</pubDate>
      <guid>http://franfabrizio.dev/posts/private-ca-with-step-ca/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In this post, we&amp;rsquo;ll create a private certificate authority (CA) using &lt;a href=&#34;https://smallstep.com/docs/step-ca/&#34;&gt;Smallstep&amp;rsquo;s step-ca&lt;/a&gt; software. Why do we want to do this? One of the biggest annoyances with running a homelab is that you have to deal with lots of &amp;ldquo;this site isn&amp;rsquo;t secure&amp;rdquo; warnings when browsing to all of your internal HTTPS services because you don&amp;rsquo;t have valid certs from a known CA. It would be great if we could issue valid certificates for our internal services that are using our internal domain name that we set up in an earlier post, and that&amp;rsquo;s what we&amp;rsquo;re going to do today!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Up a Private Domain with Technitium</title>
      <link>http://franfabrizio.dev/posts/private-domain/</link>
      <pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://franfabrizio.dev/posts/private-domain/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Somewhere on your homelab journey you will eventually come to the realization that you would like to have friendly names for all of the things on your home network instead of dealing with IP addresses. There are many ways to scratch that itch, but one of the most common approaches is to create a private domain. A private domain is simply a domain name that you&amp;rsquo;d like to use on your internal network that is not visible from the outside world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Homelab 101 - Getting Started with Your Homelab</title>
      <link>http://franfabrizio.dev/posts/homelab-101/</link>
      <pubDate>Mon, 21 Oct 2024 00:00:00 +0000</pubDate>
      <guid>http://franfabrizio.dev/posts/homelab-101/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This blog is a place for me to gather notes about my homelab, and this first post is a guide intended to get folks started on their homelab journey. This post won&amp;rsquo;t tell you how to implement your homelab - it&amp;rsquo;ll simply lay out the big questions and things you need to think about as you get started. It&amp;rsquo;s a collection of hard-earned knowledge and wisdom that I&amp;rsquo;ve gathered as I&amp;rsquo;ve gone through my own homelab journey over the past few months. I went through countless reddit threads, YouTube videos, and blogs to muddle my way along, and my hope is that I can give the next person a bit of a leg up.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>http://franfabrizio.dev/posts/testing-your-dkim-and-spf-setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>http://franfabrizio.dev/posts/testing-your-dkim-and-spf-setup/</guid>
      <description>&lt;h1 id=&#34;remove-the-file-from-filesystem&#34;&gt;Remove the file from filesystem&lt;/h1&gt;&#xA;&lt;p&gt;rm content/testing-your-dkim-and-spf-setup/index.md&lt;/p&gt;&#xA;&lt;h1 id=&#34;remove-it-from-git-tracking&#34;&gt;Remove it from git tracking&lt;/h1&gt;&#xA;&lt;p&gt;git rm content/testing-your-dkim-and-spf-setup/index.md&lt;/p&gt;&#xA;&lt;h1 id=&#34;commit-the-change&#34;&gt;Commit the change&lt;/h1&gt;&#xA;&lt;p&gt;git commit -m &amp;ldquo;Remove duplicate index.md from wrong location&amp;rdquo;&lt;/p&gt;&#xA;&lt;h1 id=&#34;restore-missing-files&#34;&gt;Restore missing files&lt;/h1&gt;&#xA;&lt;p&gt;git checkout content/testing-your-dkim-and-spf-setup/index.md&#xA;git submodule update &amp;ndash;init &amp;ndash;recursive&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
