<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Charles Beadle</title>
    <description>Server Administration, Web Development, and More</description>
    <link>https://charlesbeadle.tech</link>
    <atom:link href="https://charlesbeadle.tech/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>The Joy of Never Reaching the Destination</title>
      <!--<description></description>-->
      <link>https://charlesbeadle.tech/posts/the-joy-of-it</link>
      <guid>https://charlesbeadle.tech/posts/the-joy-of-it</guid>
      <pubDate>Fri, 19 Jan 2024 22:00:00 EST</pubDate>
      <content:encoded><![CDATA[
        <p>I've wondered before, what would I have done if someone told me how long the web development road was going to be. Would I have continued? Would I have said, 'Forget that'? That's interesting to me, because I'm happy it never ends. Just like when I'm driving my car with its manual transmission, I still love it when I get a really good downshift. It took some time to learn how to shift smoothly, and it has taken even longer to learn my craft. Yes, it's a long ride, an ongoing pursuit, but all the better when you're doing what you enjoy.</p>
      ]]>      </content:encoded>
    </item>
    <item>
      <title>Navigate Efficiently and Save Time with CDPATH</title>
      <!--<description></description>-->
      <link>https://charlesbeadle.tech/posts/cdpath</link>
      <guid>https://charlesbeadle.tech/posts/cdpath</guid>
      <pubDate>Sun, 07 Jul 2024 00:05:00 EST</pubDate>
      <content:encoded><![CDATA[
        <p>I've saved myself some keystrokes using CDPATH. It’s like your PATH variable, but instead of trying to locate a program, your shell is checking CDPATH as it searches for
  the directory that you are trying to change into. By using this, you'll be able to navigate into deeply nested directories without specifying their full path. Normally, if you run "cd", and pass
  just a directory name as an argument, then the directory won't be found unless it's present in the current working directory. However, If the path of its parent directory is a part of
  your CDPATH, then it will be found.</p>
<p>Say you have a “sites” directory that consists of several projects that you frequently access. For the sake of example, it’s deeply nested, and you normally must type a
  long path to get to it. Using CDPATH, you could just run “cd project1” and your working directory would be something like /Users/user/a/bit/nested/sites/project1. Something neat is that from
  within project1, you could run “cd project2”, even though it’s not located within project1, and you'd change directories into project2.</p>
<p>By adding the path of the parent directory of these projects to our CDPATH, we are able to navigate more efficiently. We could use aliases, but we
  would be adding an alias for every shortcut rather than just one addition to CDPATH. Or, we could add an alias for sites, but then we'd run an additional command to change directories into a
  project.</p>
<p>You can use this if you're running macOS, a GNU/Linux OS, or even Windows with Windows Subsystem for Linux (WSL).</p>
<p>Here's how you can set this up:</p>
<p>I'm on a Mac, and I'm using Zsh. I know that I have a .zshrc file in my home directory, but you may need to check if you have one or not. Assuming you are in your home
  directory, you can check for and create the file, if need be, using the following command:</p>
<p>test -e .zshrc || touch .zshrc</p>
<p>The next thing to do is edit the .zshrc file and define the CDPATH variable. The syntax is just like the PATH syntax.</p>
<p>CDPATH="$HOME/a/bit/nested/sites/:$HOME/Notes/:"</p>
<p>Note: Variables are typically named in uppercase. There's no space around the "=" operator. Paths are separated by colons.</p>
<p>Unless you exit your terminal and open a new one, you're going to need to source that .zshrc file. You can do that by running the command below.</p>
<p>source .zshrc</p>
<p>That's it for Zsh. Now, if you're using Bash on your local machine, then the process is the same, except that the filename is .bashrc.</p>
<p>If you want to try this on a server running Linux, then your user's shell is likely set to Bash. Follow the same process, but also make sure that .profile in
  your home directory is sourcing .bashrc, so that when you log in, your CDPATH variable will be defined.</p>
<p>That's the gist of it. Using CDPATH allows us to navigate a filesystem more efficiently by typing less. If I've left anything out, or you're having trouble getting it to work, then please just
comment below. I'd be happy to help. Thanks!</p>
      ]]>      </content:encoded>
    </item>
    <item>
      <title>Step-by-Step SSH Guide: From Basic Connection to Secure Configuration</title>
      <description>A walkthrough for server administration beginners</description>
      <link>https://charlesbeadle.tech/posts/ssh</link>
      <guid>https://charlesbeadle.tech/posts/ssh</guid>
      <pubDate>Thu, 12 Jun 2025 11:00:00 -0400</pubDate>
    </item>
    <item>
      <title>Banning Malicious Hosts Automatically with Fail2Ban on Ubuntu</title>
      <description>Learn how to use Fail2Ban to create a custom jail, detect malicious requests, and automatically ban hosts</description>
      <link>https://charlesbeadle.tech/posts/fail2ban</link>
      <guid>https://charlesbeadle.tech/posts/fail2ban</guid>
      <pubDate>Sun, 10 Aug 2025 11:55:00 -0400</pubDate>
    </item>
    <item>
      <title>How to Automate File System Backups on Ubuntu with Restic and Akamai Object Storage</title>
      <description>I show you how to automate file system backups on Ubuntu using Restic and Akamai Object Storage, step by step.</description>
      <link>https://charlesbeadle.tech/posts/restic</link>
      <guid>https://charlesbeadle.tech/posts/restic</guid>
      <pubDate>Mon, 08 Dec 2025 12:58:00 -0500</pubDate>
    </item>
  </channel>
</rss>
