<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Alex Kraker – Blog</title><link>http://alexkraker.com/blog/</link><description>Recent content in Blog on Alex Kraker</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Copyright © 2026 Alex Kraker</copyright><atom:link href="http://alexkraker.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Learn Python Quickref</title><link>http://alexkraker.com/blog/learn-python-qr/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid>http://alexkraker.com/blog/learn-python-qr/</guid><description>
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/learn-python-qr/brecht-corbeel-qHx3w6Gwz9k-unsplash_medium.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@brechtcorbeel?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"target="_blank" rel="noopener"&gt;Brecht Corbeel&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-neon-circle-with-a-snake-on-it-qHx3w6Gwz9k?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"target="_blank" rel="noopener"&gt;Unsplash&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is my fairly opinionated quick reference on how to learn Python. This isn&amp;rsquo;t
so much a guide as it is something to launch from. There are already plenty of guides. I&amp;rsquo;m writing this with the
novice in mind, but the seasoned programming veteran may derive something
useful here.&lt;/p&gt;
&lt;!-- ## tl;dr
1. [Exercism - Python](https://exercism.org/tracks/python) Learn by doing Python exercies.
2. [Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) Probably the most accessible book for the novice on learning Python.
3.
--&gt;
&lt;h2&gt;Learn by doing&lt;span class="hx:absolute hx:-mt-20" id="learn-by-doing"&gt;&lt;/span&gt;
&lt;a href="#learn-by-doing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Learn by doing seems to trump most other methods for learning a programming
language. This is the most bang for your buck in my humble opinion. &lt;em&gt;Minimum viable programming&lt;/em&gt; you might call it.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://exercism.org/tracks/python"target="_blank" rel="noopener"&gt;Exercism - Python&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://projecteuler.net/"target="_blank" rel="noopener"&gt;Project Euler&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.100daysofcode.com/"target="_blank" rel="noopener"&gt;100 Days Of Code&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Books on learning Python&lt;span class="hx:absolute hx:-mt-20" id="books-on-learning-python"&gt;&lt;/span&gt;
&lt;a href="#books-on-learning-python" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;m kind of old school and I&amp;rsquo;m a book learner; not everybody is though. It&amp;rsquo;s worth trying different approaches until you figure out what works for you. Here are the Python books I most often recommend:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://automatetheboringstuff.com/"target="_blank" rel="noopener"&gt;Automate the Boring Stuff with Python&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Al Sweigart. &lt;em&gt;FREE&lt;/em&gt; online!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learnpythonthehardway.org/"target="_blank" rel="noopener"&gt;Learn Python the Hard Way&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Zed A. Shaw&lt;/li&gt;
&lt;li&gt;&lt;a href="https://allendowney.github.io/ThinkPython/"target="_blank" rel="noopener"&gt;Think Python&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Allen B. Downy. &lt;em&gt;FREE&lt;/em&gt; online!&lt;br&gt;
This may be compelling to the academic; the treatment is through the lense of
computer science.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Video series&lt;span class="hx:absolute hx:-mt-20" id="video-series"&gt;&lt;/span&gt;
&lt;a href="#video-series" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=bY6m6_IIN94"target="_blank" rel="noopener"&gt;Learn Python with Socratica&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Python Development Environment&lt;span class="hx:absolute hx:-mt-20" id="python-development-environment"&gt;&lt;/span&gt;
&lt;a href="#python-development-environment" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://www.python.org/downloads/"target="_blank" rel="noopener"&gt;Install Python&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; for your OS.&lt;/p&gt;
&lt;h3&gt;Python IDEs&lt;span class="hx:absolute hx:-mt-20" id="python-ides"&gt;&lt;/span&gt;
&lt;a href="#python-ides" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I&amp;rsquo;m partial to VSCode for just about any type of development these days. For the novice, my advice is to learn
one general purpose code editor (not necessarioy an IDE&amp;hellip;) like VSCode and
stick with it for a while.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;VSCode + &lt;a href="https://code.visualstudio.com/docs/languages/python"target="_blank" rel="noopener"&gt;Microsoft&amp;rsquo;s Python&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; extension is probably fine to start.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/pycharm/"target="_blank" rel="noopener"&gt;PyCharm&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; if you really must have a Python IDE.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Python Interpreter&lt;span class="hx:absolute hx:-mt-20" id="python-interpreter"&gt;&lt;/span&gt;
&lt;a href="#python-interpreter" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;A quick note about the Python interpreter. I think this is an often overlooked
tool when first learning Python. After Python is installed you should be able
to just type &lt;code&gt;python&lt;/code&gt; into a terminal and start the interpreter.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;i❯ python
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Python 3.13.9 &lt;span class="o"&gt;(&lt;/span&gt;main, Oct &lt;span class="m"&gt;14&lt;/span&gt; 2025, 00:00:00&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;GCC 15.2.1 &lt;span class="m"&gt;20250808&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Red Hat 15.2.1-1&lt;span class="o"&gt;)]&lt;/span&gt; on linux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Type &lt;span class="s2"&gt;&amp;#34;help&amp;#34;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;copyright&amp;#34;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;#34;credits&amp;#34;&lt;/span&gt; or &lt;span class="s2"&gt;&amp;#34;license&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; more information.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ctrl click to launch VS Code Native REPL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;i&amp;gt;&amp;gt;&amp;gt; &lt;span class="nv"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Hello World!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;i&amp;gt;&amp;gt;&amp;gt; print&lt;span class="o"&gt;(&lt;/span&gt;message&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello World!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;i&amp;gt;&amp;gt;&amp;gt; quit&lt;span class="o"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This comes in super handy to try stuff out interactively while you&amp;rsquo;re coding.
In my opinion this is all the &amp;ldquo;IDE&amp;rdquo; you need to start with.&lt;/p&gt;
&lt;p&gt;You can also just run scripts in the terminal using the python interpreter.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python on  main is 📦 v0.1.0 via 🐍 v3.13.9 on ☁️ &lt;span class="o"&gt;(&lt;/span&gt;us-east-2&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;i❯ python ./main.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello from python!&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I&amp;rsquo;m a big proponent of the
&lt;a href="https://blog.sanctum.geek.nz/series/unix-as-ide/"target="_blank" rel="noopener"&gt;Unix as an IDE&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; philosophy.
A little Linux CLI goes a long way; learning the Linux CLI is a bit like having
developer super powers.&lt;/p&gt;
&lt;h2&gt;Supplementary resources&lt;span class="hx:absolute hx:-mt-20" id="supplementary-resources"&gt;&lt;/span&gt;
&lt;a href="#supplementary-resources" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pythontutor.com/"target="_blank" rel="noopener"&gt;Python Tutor&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; Visual Debugger and AI Tutor&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythex.org/"target="_blank" rel="noopener"&gt;Python Regex Tester&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vinta/awesome-python"target="_blank" rel="noopener"&gt;Awesome Python&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;General advice&lt;span class="hx:absolute hx:-mt-20" id="general-advice"&gt;&lt;/span&gt;
&lt;a href="#general-advice" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I recommend picking 2-3 learning resources to use. When I&amp;rsquo;m learning a new
programming language (or other IT skill) I usually pick a combo of some kind
of &lt;em&gt;hands-on&lt;/em&gt; learning like Exercism and a solid book resource. Even when working
through a course or a book I recommend getting hands-on as quickly as possible
to reinforce the learning that&amp;rsquo;s happening.&lt;/p&gt;</description></item><item><title>Technical Learning</title><link>http://alexkraker.com/blog/technical-learning/</link><pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate><guid>http://alexkraker.com/blog/technical-learning/</guid><description>
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/technical-learning/nick-morrison-FHnnjk1Yj7Y-unsplash.jpg" alt="Image of notebook, pen, laptop, and coffee" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@nickmorrison?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash"&gt;Nick Morrison&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/macbook-pro-near-white-open-book-FHnnjk1Yj7Y?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Technical Learning&lt;/h1&gt;&lt;p&gt;I&amp;rsquo;ve always been interested in what I like to call &lt;em&gt;meta-learning&lt;/em&gt; or ways
that I can be a more effective learner. This goes all the way back to my
school days and I remember learning about ways that drawing mind-maps was
more effective for visual learning and that da Vinci kept notebooks, and so
I started doing that too. I started trying to capture notes in these tree-like
mind-maps. I kept moleskine notebooks for years. I also read a book on speed
reading, but I must confess even after lots of practice I was never very good
at it. Maybe I just didn&amp;rsquo;t get it, but it felt like just glorified skimming to
me. But I did pick up some habits around getting a sense of the overall
structure of a book or chapter and making multiple passes at the information
each with a different purpose. For technical learning I very rarely read
every word on the page.&lt;/p&gt;
&lt;h2&gt;Technical learning&lt;span class="hx:absolute hx:-mt-20" id="technical-learning-1"&gt;&lt;/span&gt;
&lt;a href="#technical-learning-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In terms of technical learning of skills used in software engineering,
infrastructure engineering, cyber engineering&amp;hellip; basically any of the &lt;em&gt;term&lt;/em&gt; +
&lt;em&gt;engineering&lt;/em&gt; where the engineering being done is solving problems with
computers, there&amp;rsquo;s a few techniques that I&amp;rsquo;ve picked up which have served me
well.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Skip to the &lt;a href="#tldr"&gt;tl;dr&lt;/a&gt; if you&amp;rsquo;re short on time.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Spaced Repetition Memory&lt;span class="hx:absolute hx:-mt-20" id="spaced-repetition-memory"&gt;&lt;/span&gt;
&lt;a href="#spaced-repetition-memory" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I first learned about spaced-repetition memory when I was experimenting with
polyphasic sleeping, and the author of &lt;a href="https://www.supermemo.guru/wiki/SuperMemo_Guru"target="_blank" rel="noopener"&gt;supermemo&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; has also written about this subject. But, where I first
learned about the power of using spaced-repetition memory in relation to
learning a skill like &lt;em&gt;programming&lt;/em&gt; was through this article by Derek Sivers.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sive.rs/srs"target="_blank" rel="noopener"&gt;Memorizing a programming language using spaced repetition software&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Spaced-repetition software (SRS), I use &lt;a href="https://apps.ankiweb.net/"target="_blank" rel="noopener"&gt;Anki&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;, is
a force-multiplier when learning any technical subject. It&amp;rsquo;s particularly
useful when studying for certification exams, I&amp;rsquo;ve found.&lt;/p&gt;
&lt;h3&gt;Type it out yourself&lt;span class="hx:absolute hx:-mt-20" id="type-it-out-yourself"&gt;&lt;/span&gt;
&lt;a href="#type-it-out-yourself" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I can&amp;rsquo;t remember where I first received this advice, but when learning something
like a programming language, type out all of the examples, exercises and labs
yourself and get it to run. There seems to be a mind-body connection and muscle
memory plays an important part in learning something like a programming language. This also forces you to slow down and really ingest and understand what you&amp;rsquo;re
learning. I think the tendency is to want to just copy and paste examples from
books or tutorials into the code editor, but a lot more value is derived from typing it out manually. This is the &lt;em&gt;active&lt;/em&gt; learning required to really understand
something like a programming language in a way that sticks with you.&lt;/p&gt;
&lt;p&gt;I always learn this way when learning something like Ansible, Terraform, Python,
etc.&lt;/p&gt;
&lt;p&gt;Anki has a feature where you can type out the answer. I&amp;rsquo;ve found this really
useful for memorizing terminal commands and syntax.&lt;/p&gt;
&lt;h3&gt;Labbing&lt;span class="hx:absolute hx:-mt-20" id="labbing"&gt;&lt;/span&gt;
&lt;a href="#labbing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;There&amp;rsquo;s no substitute for real-world hands-on experience but working out
engineering challenges in a lab environment is a decent facsimile I&amp;rsquo;ve found.&lt;/p&gt;
&lt;p&gt;This is the &amp;ldquo;learn &lt;em&gt;thing&lt;/em&gt; the hard way&amp;rdquo; approach that has become a marketing
moniker for titles such as &amp;ldquo;Learn Python the Hard Way&amp;rdquo; or &amp;ldquo;Learn Kubernetes
the Hard Way&amp;rdquo;. When choosing study materials I think at least one resource
should follow this approach where the learner is encouraged to work through
the examples or labs while following along with the material. If the material
doesn&amp;rsquo;t have it you should invent your own.&lt;/p&gt;
&lt;p&gt;Creating your own homelab can be a great way to learn hands-on, but you don&amp;rsquo;t
need to. Most of the time I find myself spinning up VM&amp;rsquo;s in VirtualBox using
Vagrant right on my workstation. All you need is a laptop and some VM&amp;rsquo;s.
For learning some topics like networking, dedicated hardware is useful though.&lt;/p&gt;
&lt;p&gt;I highly recommend automating building lab environments with a tool like
Vagrant. There should be as little friction as possible between making a
mistake that potentially breaks your environment and being able to just
tear down and rebuild. It&amp;rsquo;s important to have the psychological safety-net
to allow for experimentation, trying things, and knowing it can be easily
rebuilt. The learning process can and should be a bit messy. Very much like the
creative process. You have to break a few eggs to make an omelet sort of thing.&lt;/p&gt;
&lt;h3&gt;Project-based learning&lt;span class="hx:absolute hx:-mt-20" id="project-based-learning"&gt;&lt;/span&gt;
&lt;a href="#project-based-learning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;In my experience nothing quite solidifies technical skills I&amp;rsquo;ve learned
quite like working on a project using those tools. I&amp;rsquo;ve been fortunate in my
work that often I&amp;rsquo;ve had something directly related to what I was trying to
learn that I needed to build or fix. But in other cases I&amp;rsquo;ve learned a ton
on my own either putting together some automation for my homelab build, adding
a feature to an open source project or just building something I thought
should exist.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s my opinion that you don&amp;rsquo;t really know a thing until you&amp;rsquo;ve built something
with it. I stand by this.&lt;/p&gt;
&lt;p&gt;No amount of book learning, certification exams, or &lt;em&gt;fill-in-the-blank&lt;/em&gt; is
a substitute for being able to build something with what you&amp;rsquo;ve learned. In fact,
I think as soon as you can get your hands on a project to build alongside
coursework, books, or tutorials, that&amp;rsquo;s the best way to learn. It also helps
if it&amp;rsquo;s something you care about. Personal projects or work projects tend to
be the best I&amp;rsquo;ve found.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll often start a project before I&amp;rsquo;m done working through whatever learning
materials I&amp;rsquo;m using for that skill. This quickly uncovers the gaps in my
learning and it forces a different kind of attention to the source material
that&amp;rsquo;s necessary to solve problems. The information becomes more sticky too
as your brain starts to create a more accurate mental model of what you&amp;rsquo;re
trying to learn as it makes links and associations with the hands-on
project.&lt;/p&gt;
&lt;p&gt;Treat primary sources like books, courses, or tutorials more like references.
Project-based learning is where the real learning happens.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t just take my word for it either.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://seths.blog/2020/09/self-directed-project-based-learning/"target="_blank" rel="noopener"&gt;Self-directed, project-based learning&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Seth Godin&lt;/p&gt;
&lt;h3&gt;Take notes&lt;span class="hx:absolute hx:-mt-20" id="take-notes"&gt;&lt;/span&gt;
&lt;a href="#take-notes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I&amp;rsquo;ve been a religious note-taker going all the way back to my highschool days.
Note-taking seems to be a common habit among all of the really high performing
technical professionals I&amp;rsquo;ve encountered over the course of my career.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think it matters so much &lt;em&gt;how&lt;/em&gt; you do it though, I&amp;rsquo;ve seen a variety
of methods used. But habitual note-taking seems to be a differentiator.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve already written extensively on how I manage
&lt;a href="http://alexkraker.com/blog/second-brain/"&gt;my personal knowledge base&lt;/a&gt; if
you&amp;rsquo;re curious to learn more about how I do it.&lt;/p&gt;
&lt;h3&gt;Quality primary sources&lt;span class="hx:absolute hx:-mt-20" id="quality-primary-sources"&gt;&lt;/span&gt;
&lt;a href="#quality-primary-sources" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;As with most things, quality matters. I also think it
pays dividends to put effort in up front in sourcing quality learning
materials. Often I&amp;rsquo;m working a full time gig while also trying to improve
my skills and advance my career. I don&amp;rsquo;t have a lot of time to waste on
inferior learning materials.&lt;/p&gt;
&lt;p&gt;I think it&amp;rsquo;s well worth it to spend a little money on a book or a course if
it&amp;rsquo;s well regarded. I&amp;rsquo;m a book learner, so I&amp;rsquo;ll often find myself purchasing
at least 2-3 books on whatever subject I&amp;rsquo;m trying to learn. I typically base this
on researching what are the most recommended or well-regarded books on that
topic. There&amp;rsquo;s usually 1-2 that are widely considered the &lt;em&gt;de facto&lt;/em&gt; standard
on some topic.&lt;/p&gt;
&lt;p&gt;In terms of book sources I think the material should be progressive and I think
the best sources encourage the reader to follow along by doing the examples or
labs themselves.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ansiblefordevops.com/"target="_blank" rel="noopener"&gt;Ansible for DevOps&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Jeff Geerling
is one of my favorite examples that does this really well.&lt;/p&gt;
&lt;p&gt;Another great example is &lt;a href="https://www.nigelpoulton.com/books"target="_blank" rel="noopener"&gt;The Kubernetes Book&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
by Nigel Poulton.&lt;/p&gt;
&lt;p&gt;(These aren&amp;rsquo;t affiliate links, I just really admire their work)&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not uncommon for me to bounce between 2-3 primary sources for learning
something. I don&amp;rsquo;t think the learner should rely on just one book, course,
or tutorial to learn a thing.&lt;/p&gt;
&lt;h2&gt;tl;dr&lt;span class="hx:absolute hx:-mt-20" id="tldr"&gt;&lt;/span&gt;
&lt;a href="#tldr" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If I had to sum up the most effective way that I learn it would be:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find 2-3 well-regarded primary sources to learn from whether it&amp;rsquo;s books,
courses, or tutorials.&lt;/li&gt;
&lt;li&gt;Work through the learning materials and type out the exercises, terminal
commands, or labs manually yourself and get them to run.&lt;/li&gt;
&lt;li&gt;Create a lab and automate it with tools like Vagrant and VirtualBox.&lt;/li&gt;
&lt;li&gt;Pick a project you&amp;rsquo;re interested in to hack on and work on it alongside
while you&amp;rsquo;re learning.&lt;/li&gt;
&lt;li&gt;Supplement by taking notes and doing Anki flashcards.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;rsquo;s it. Have fun learning!&lt;/p&gt;</description></item><item><title>RHEL 9 kmod-kvdo bug</title><link>http://alexkraker.com/blog/kvdo/</link><pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate><guid>http://alexkraker.com/blog/kvdo/</guid><description>
&lt;p&gt;The kmod-kvdo module is used to enable VDO in kernel usespace. On RHEL it&amp;rsquo;s primarily used to thin provision logical volumes with LVM. See the links below.&lt;/p&gt;
&lt;h2&gt;Useful links&lt;span class="hx:absolute hx:-mt-20" id="useful-links"&gt;&lt;/span&gt;
&lt;a href="#useful-links" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Upstream open source &lt;a href="https://github.com/dm-vdo/kvdo"target="_blank" rel="noopener"&gt;dmo-vdo/kvdo&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; project.&lt;/li&gt;
&lt;li&gt;RHEL 9 &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/deduplicating_and_compressing_logical_volumes_on_rhel/proc_providing-feedback-on-red-hat-documentation_deduplicating-and-compressing-logical-volumes-on-rhel"target="_blank" rel="noopener"&gt;Introduction to VDO on LVM&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Install &amp;amp; enable kvdo&lt;span class="hx:absolute hx:-mt-20" id="install--enable-kvdo"&gt;&lt;/span&gt;
&lt;a href="#install--enable-kvdo" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Install kmod-kvdo:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dnf install -y kmod-kvdo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Enable kernel module kvdo with:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modprobe -v kvdo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Under normal conditions, this works to install and enable the kvdo module for RHEL, but as I&amp;rsquo;ve shown below, it&amp;rsquo;s broken for RHEL 9.6.&lt;/p&gt;
&lt;h2&gt;RHEL 9.6 kmod-kvdo bug&lt;span class="hx:absolute hx:-mt-20" id="rhel-96-kmod-kvdo-bug"&gt;&lt;/span&gt;
&lt;a href="#rhel-96-kmod-kvdo-bug" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There was a bug opened that was closed as resolved for enabling kvdo for the RHEL 9.6 kernel:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://issues.redhat.com/browse/RHEL-61201"target="_blank" rel="noopener"&gt;https://issues.redhat.com/browse/RHEL-61201&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But, I&amp;rsquo;ve found this bug is still unresolved in the latest version of RHEL 9.6.&lt;/p&gt;
&lt;p&gt;I tried opening a new bug, but I don&amp;rsquo;t have access to the RHEL project in Jira, so I opened a developer feedback ticket:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://issues.redhat.com/browse/RHDFEED-1283"target="_blank" rel="noopener"&gt;https://issues.redhat.com/browse/RHDFEED-1283&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hopefully this get&amp;rsquo;s to the right place!&lt;/p&gt;
&lt;p&gt;According to the &lt;a href="https://bugzilla.redhat.com/page.cgi?id=redhat/migrated_products.html"target="_blank" rel="noopener"&gt;Red Hat Bugzilla - Migrated Products&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; page I&amp;rsquo;m supposed to be able to submit bug reports for RHEL 7/8/9 in Jira now. Do I need to submit a bug report about not being able to submit bug reports? If any Red Hat engineers happen upon this, let me know!&lt;/p&gt;
&lt;h3&gt;Steps to reproduce&lt;span class="hx:absolute hx:-mt-20" id="steps-to-reproduce"&gt;&lt;/span&gt;
&lt;a href="#steps-to-reproduce" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Install or update to RHEL 9.6&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dnf update -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Verify RHEL release and kernel release. A reboot may be necessary to load the latest kernel.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# cat /etc/redhat-release &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Red Hat Enterprise Linux release 9.6 &lt;span class="o"&gt;(&lt;/span&gt;Plow&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The system should be on the latest kernel release, 5.14.0-570.30.1.el9_6, as of this writing.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# uname -r&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5.14.0-570.30.1.el9_6.x86_64&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Install kmod-kvdo which provides the kvdo kernel module&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dnf install -y kmod-kvdo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Note the version of kmod-kvdo that&amp;rsquo;s installed:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# rpm -q kmod-kvdo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kmod-kvdo-8.2.5.10-161.el9.x86_64&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Attempt to enable the kvdo kernel module:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# modprobe kvdo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modprobe: FATAL: Module kvdo not found in directory /lib/modules/5.14.0-570.30.1.el9_6.x86_64&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;Additional notes&lt;span class="hx:absolute hx:-mt-20" id="additional-notes"&gt;&lt;/span&gt;
&lt;a href="#additional-notes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;One interesting thing I noticed while troubleshooting is that the kmod-kvdo package appears to have been compiled against the 5.14.0-568 kernel release:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# rpm -ql kmod-kvdo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/etc/depmod.d/kvdo.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/lib/modules/5.14.0-568.el9.x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/lib/modules/5.14.0-568.el9.x86_64/extra
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/lib/modules/5.14.0-568.el9.x86_64/extra/kmod-kvdo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/lib/modules/5.14.0-568.el9.x86_64/extra/kmod-kvdo/vdo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/lib/modules/5.14.0-568.el9.x86_64/extra/kmod-kvdo/vdo/kvdo.ko&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Note the &lt;code&gt;/lib/modules/&lt;/code&gt; path.&lt;/p&gt;
&lt;p&gt;This doesn&amp;rsquo;t match the installed kernel:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# rpm -q kernel-core&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kernel-core-5.14.0-362.8.1.el9_3.x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kernel-core-5.14.0-570.30.1.el9_6.x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# uname -r&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5.14.0-570.30.1.el9_6.x86_64&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In fact, there doesn&amp;rsquo;t appear to be a 5.14.0-568 kernel release available in the base repositories:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# dnf repoquery kernel-core-5.14.0-568*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Updating Subscription Management repositories.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This system has release &lt;span class="nb"&gt;set&lt;/span&gt; to 9.6 and it receives updates only &lt;span class="k"&gt;for&lt;/span&gt; this release.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Last metadata expiration check: 0:40:22 ago on Sun &lt;span class="m"&gt;03&lt;/span&gt; Aug &lt;span class="m"&gt;2025&lt;/span&gt; 03:48:53 AM UTC.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Workaround - build from source&lt;span class="hx:absolute hx:-mt-20" id="workaround---build-from-source"&gt;&lt;/span&gt;
&lt;a href="#workaround---build-from-source" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Building from source seems to be a viable workaround until the Red Hat engineers have had a chance to fix the bug or an update to a newer release with the bug fixed becomes available.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fetch the latest source tar ball from the &lt;a href="https://github.com/dm-vdo/kvdo/releases"target="_blank" rel="noopener"&gt;dm-vdo/kvdo/release&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/dm-vdo/kvdo/archive/refs/tags/8.2.6.5.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Untar the tarball&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# tar xf 8.2.6.5.tar.gz &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Compile and install&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; kvdo-8.2.6.5/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;make&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make -C /usr/src/kernels/&lt;span class="sb"&gt;`&lt;/span&gt;uname -r&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="nv"&gt;M&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Install&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make -C /usr/src/kernels/&lt;span class="sb"&gt;`&lt;/span&gt;uname -r&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="nv"&gt;M&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; modules_install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Enable kernel module&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modprobe kvdo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Verify that it&amp;rsquo;s enabled:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@rhel9b kvdo-8.2.6.5&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# lsmod | grep ^kvdo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kvdo &lt;span class="m"&gt;860160&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;(Optional) Enable kvdo persistently across reboots&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; kvdo &amp;gt; /etc/modules-load.d/kvdo.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Local Development Testing with RHEL and Vagrant</title><link>http://alexkraker.com/blog/rhel-vagrant/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0000</pubDate><guid>http://alexkraker.com/blog/rhel-vagrant/</guid><description>
&lt;p&gt;Sometimes I need to be able to spin up a Red Hat Enterprise Linux (RHEL) server in a local development environment for testing. For many use-cases
spinning up a free &lt;a href="https://rockylinux.org/"target="_blank" rel="noopener"&gt;Rocky Linux&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; image is sufficient to
test in an environment
that&amp;rsquo;s a relatively close facsimile to a RHEL-proper environment. But for those
cases where you can&amp;rsquo;t get around needing to test in a RHEL environment then
there&amp;rsquo;s a need for a RHEL image with a subscription attached. Red Hat&amp;rsquo;s
Developer licenses are good here, with the ability to have up to 16 systems for
developer testing. More on this later&amp;hellip;&lt;/p&gt;
&lt;p&gt;Vagrant is really handy for spinning up servers for testing. A primer on this tool is out of the scope of this post
but if you&amp;rsquo;re not familiar with it I recommend Vagrant&amp;rsquo;s own &lt;a href="https://developer.hashicorp.com/vagrant/tutorials"target="_blank" rel="noopener"&gt;tutorials&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; to help get you started.&lt;/p&gt;
&lt;p&gt;I use Vagrant + VirtualBox on my Linux Workstation as a local development
environment for testing. I&amp;rsquo;ve found this really helpful for rapidly iterating
over things like Ansible scripts among other things. Ansible is declarative and
the idea of immutability is important when writing good code. Vagrant makes it
easy to spin up and destroy servers so that I know I&amp;rsquo;m always starting with a
system in the same state. Otherwise you could end up with some &amp;ldquo;configuration
drift&amp;rdquo; as you&amp;rsquo;re developing&amp;hellip;&lt;/p&gt;
&lt;h2&gt;Installing prerequisites Vagrant and VirtualBox&lt;span class="hx:absolute hx:-mt-20" id="installing-prerequisites-vagrant-and-virtualbox"&gt;&lt;/span&gt;
&lt;a href="#installing-prerequisites-vagrant-and-virtualbox" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you haven&amp;rsquo;t already, install Vagrant and VirtualBox.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.hashicorp.com/vagrant/install"target="_blank" rel="noopener"&gt;Install Vagrant&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.virtualbox.org/wiki/Linux_Downloads"target="_blank" rel="noopener"&gt;Install VirtualBox&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: Make sure you install the &lt;a href="https://developer.hashicorp.com/vagrant/docs/providers/virtualbox"target="_blank" rel="noopener"&gt;Vagrant compatible&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; version of VB.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Red Hat Developer Subscription&lt;span class="hx:absolute hx:-mt-20" id="red-hat-developer-subscription"&gt;&lt;/span&gt;
&lt;a href="#red-hat-developer-subscription" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you don&amp;rsquo;t have one already, sign up for a free Red Hat Developer Subscription:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.redhat.com/articles/renew-your-red-hat-developer-program-subscription#"target="_blank" rel="noopener"&gt;Red Hat Developer Subscription for Individuals&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: Make note of your username and password you used when you registered for your
account.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Create your project&lt;span class="hx:absolute hx:-mt-20" id="create-your-project"&gt;&lt;/span&gt;
&lt;a href="#create-your-project" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir vagrant
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; vagrant&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Initialize the project. This will create your initial &lt;code&gt;Vagrantfile&lt;/code&gt;.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;~/vagrant $ vagrant init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A &lt;span class="sb"&gt;`&lt;/span&gt;Vagrantfile&lt;span class="sb"&gt;`&lt;/span&gt; has been placed in this directory. You are now
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ready to &lt;span class="sb"&gt;`&lt;/span&gt;vagrant up&lt;span class="sb"&gt;`&lt;/span&gt; your first virtual environment! Please &lt;span class="nb"&gt;read&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;the comments in the Vagrantfile as well as documentation on
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;`&lt;/span&gt;vagrantup.com&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; more information on using Vagrant.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Install vagrant-registration plugin&lt;span class="hx:absolute hx:-mt-20" id="install-vagrant-registration-plugin"&gt;&lt;/span&gt;
&lt;a href="#install-vagrant-registration-plugin" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Install the &lt;a href="https://github.com/projectatomic/adb-vagrant-registration"target="_blank" rel="noopener"&gt;vagrant-registration&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; plugin. This is a plugin that we&amp;rsquo;ll use to automate
registering/deregistering our RHEL box whenever we spin it up or tear it down.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant plugin install vagrant-registration&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Setup the vagrant-registration configuration&lt;span class="hx:absolute hx:-mt-20" id="setup-the-vagrant-registration-configuration"&gt;&lt;/span&gt;
&lt;a href="#setup-the-vagrant-registration-configuration" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Edit the &lt;code&gt;Vagrantfile&lt;/code&gt; you created with the following:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -*- mode: ruby -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# vi: set ft=ruby :&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# vagrant-registration plugin settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;registration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SUB_USERNAME&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;registration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SUB_PASSWORD&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# RHEL box...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Configure your Red Hat username and password as variables in your environment:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;SUB_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;rhnusername&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;SUB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;rhnpassword&amp;gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Configure your RHEL box&lt;span class="hx:absolute hx:-mt-20" id="configure-your-rhel-box"&gt;&lt;/span&gt;
&lt;a href="#configure-your-rhel-box" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Edit the &lt;code&gt;Vagrantfile&lt;/code&gt; adding the following code after the registration block.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# RHEL 9 box&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;generic/rhel9&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You&amp;rsquo;re file should now look like this.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -*- mode: ruby -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# vi: set ft=ruby :&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# vagrant-registration plugin settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;registration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SUB_USERNAME&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;registration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SUB_PASSWORD&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# RHEL 9 box&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;generic/rhel9&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Spin up a RHEL 9 VM&lt;span class="hx:absolute hx:-mt-20" id="spin-up-a-rhel-9-vm"&gt;&lt;/span&gt;
&lt;a href="#spin-up-a-rhel-9-vm" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Create and start your RHEL 9 VM.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant up&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/rhel-vagrant/Screenshot%20from%202024-10-10%2021-51-11.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTE: Vagrant automatically registers the new system with Red Hat.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;SSH into the machine and verify the subscription.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo subscription-manager status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/rhel-vagrant/Screenshot%20from%202024-10-10%2021-58-04.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;You can also see this server registered as an active system in your
&lt;a href="https://access.redhat.com/management/subscriptions/"target="_blank" rel="noopener"&gt;Red Hat Customer Portal - Subscriptions&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; and then by navigating to the &lt;em&gt;Systems&lt;/em&gt; tab:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/rhel-vagrant/Screenshot%20from%202024-10-10%2022-17-45.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Destroy&amp;hellip;&lt;span class="hx:absolute hx:-mt-20" id="destroy"&gt;&lt;/span&gt;
&lt;a href="#destroy" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;You can destroy the VM when you&amp;rsquo;re done testing, or as many times as you need
when testing. The vagrant-registration plugin should automatically &lt;em&gt;deregister&lt;/em&gt;
your instance whenever you destroy (or &lt;em&gt;halt&lt;/em&gt;, e.g. &lt;code&gt;vagrant halt&lt;/code&gt;) the instance.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant destroy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/rhel-vagrant/Screenshot%20from%202024-10-10%2022-22-03.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it!&lt;/p&gt;
&lt;h2&gt;Additional resources&lt;span class="hx:absolute hx:-mt-20" id="additional-resources"&gt;&lt;/span&gt;
&lt;a href="#additional-resources" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;re interested in taking a peek at how I use Vagrant, feel free to
puruse my &lt;a href="https://github.com/kraker/vagrant"target="_blank" rel="noopener"&gt;vagrant repository&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;References&lt;span class="hx:absolute hx:-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.hashicorp.com/vagrant/docs"target="_blank" rel="noopener"&gt;Vagrant - 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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/projectatomic/adb-vagrant-registration"target="_blank" rel="noopener"&gt;vagrant-registration - 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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>My Personal Knowledge Base (aka "Second Brain")</title><link>http://alexkraker.com/blog/second-brain/</link><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><guid>http://alexkraker.com/blog/second-brain/</guid><description>
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/second-brain/jan-kahanek-g3O5ZtRk2E4-unsplash.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@honza_kahanek?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"target="_blank" rel="noopener"&gt;Jan Kahánek&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/shallow-focus-photography-of-pencil-on-book-g3O5ZtRk2E4?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"target="_blank" rel="noopener"&gt;Unsplash&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a religious note-taker. Back in my school days, I kept lots of notebooks and
I had a habit of always carrying around a Moleskine and jotting down ideas,
writing notes, or journaling. Now many years later I&amp;rsquo;ve developed a habit of
writing my notes in digital form. Mostly this was so that I could make them
searchable. At first, my notes started out as a few text files but eventually, I
started writing all of my notes in
&lt;a href="https://daringfireball.net/projects/markdown/"target="_blank" rel="noopener"&gt;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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;. They&amp;rsquo;re still text
files, but Markdown is an easy-to-read and easy-to-write markup that renders
nicely to HTML.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example from my notes:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;title: OSI Model
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;date: 2020-10-06 07:42
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**OSI:**&lt;/span&gt; Open Systems Interconnection
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; [&lt;span class="nt"&gt;Layer 7 - Application&lt;/span&gt;](&lt;span class="na"&gt;2020-10-11--16-57-07Z--layer_7.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; [&lt;span class="nt"&gt;Layer 6 - Presentation&lt;/span&gt;](&lt;span class="na"&gt;2020-10-11--16-52-39Z--layer_6.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; [&lt;span class="nt"&gt;Layer 5 - Session&lt;/span&gt;](&lt;span class="na"&gt;2020-10-11--16-46-48Z--layer_5.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; [&lt;span class="nt"&gt;Layer 4 - Transport&lt;/span&gt;](&lt;span class="na"&gt;2020-10-10--18-46-30Z--layer_4.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;5.&lt;/span&gt; [&lt;span class="nt"&gt;Layer 3 - Network&lt;/span&gt;](&lt;span class="na"&gt;2020-10-10--18-44-39Z--layer_3.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;6.&lt;/span&gt; [&lt;span class="nt"&gt;Layer 2 - Data Link&lt;/span&gt;](&lt;span class="na"&gt;2020-10-10--18-43-20Z--layer_2.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;7.&lt;/span&gt; [&lt;span class="nt"&gt;Layer 1 - Physical&lt;/span&gt;](&lt;span class="na"&gt;2020-10-10--18-41-00Z--layer_1.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mnemonic:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ge"&gt;_All People Seem To Need Data Processing._&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## References
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; https://www.freecodecamp.org/news/osi-model-networking-layers-explained-in-plain-english/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* [&lt;span class="nt"&gt;Wikipedia - OSI model&lt;/span&gt;](&lt;span class="na"&gt;https://en.wikipedia.org/wiki/OSI_model&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Zettlekasten and Obsidian&lt;span class="hx:absolute hx:-mt-20" id="zettlekasten-and-obsidian"&gt;&lt;/span&gt;
&lt;a href="#zettlekasten-and-obsidian" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;At some point, I stumbled across how to maintain your own personal knowledge
base as a &lt;a href="https://zettelkasten.de/introduction/"target="_blank" rel="noopener"&gt;Zettelkasten&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;. I call mine my
&amp;ldquo;second brain&amp;rdquo;. I&amp;rsquo;ve experimented with maintaining a personal wiki in Vim with
things like &lt;a href="https://github.com/vimwiki/vimwiki"target="_blank" rel="noopener"&gt;vimwiki&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; and
&lt;a href="https://github.com/lervag/wiki.vim"target="_blank" rel="noopener"&gt;wiki.vim&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;, and even learned Emacs so that
I could try to organize my life with &lt;a href="https://orgmode.org/"target="_blank" rel="noopener"&gt;org-mode&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in the Zettlekasten idea I recommend checking out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zettelkasten.de/posts/overview/"target="_blank" rel="noopener"&gt;Zettlekasten - Getting Started&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.soenkeahrens.de/en/takesmartnotes"target="_blank" rel="noopener"&gt;How to Take Smart Notes&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Sönke Ahrens&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Text editing&lt;span class="hx:absolute hx:-mt-20" id="text-editing"&gt;&lt;/span&gt;
&lt;a href="#text-editing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;These days I use &lt;a href="https://obsidian.md/"target="_blank" rel="noopener"&gt;Obsidian&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; to take notes and maintain my
personal knowledge base. After spending countless hours
&lt;a href="https://en.wiktionary.org/wiki/yak_shaving"target="_blank" rel="noopener"&gt;shaving yaks&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; with my Emacs or
&lt;a href="https://github.com/kraker/dotfiles/tree/master/nvim/.config/nvim"target="_blank" rel="noopener"&gt;Vim configs&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
I&amp;rsquo;ve realized that the text editor you use to write and maintain your notes
isn&amp;rsquo;t that important. It&amp;rsquo;s the activity of taking notes that is. Obsidian gives
me most of what I need out of the box and I&amp;rsquo;m less likely to get distracted with
tweaking vim configs. Obsidian has a
&lt;a href="https://publish.obsidian.md/hub/04&amp;#43;-&amp;#43;Guides%2C&amp;#43;Workflows%2C&amp;#43;%26&amp;#43;Courses/for&amp;#43;Vim&amp;#43;users"target="_blank" rel="noopener"&gt;vim-mode&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
so that I can still use modal editing which is a requirement for me with any
text editor. I think many Linux Sysadmins are similar in this regard. Obsidian
also has a &amp;ldquo;mind-map&amp;rdquo; feature that I think is pretty neat but I don&amp;rsquo;t use it
that often unless I&amp;rsquo;m showing others how neat I think it is.
Ultimately what text editor is used to maintain your knowledge base
isn&amp;rsquo;t that important. It&amp;rsquo;s more important that it makes taking notes relatively
painless and doesn&amp;rsquo;t get in the way too much.&lt;/p&gt;
&lt;h2&gt;Writing notes in Markdown&lt;span class="hx:absolute hx:-mt-20" id="writing-notes-in-markdown"&gt;&lt;/span&gt;
&lt;a href="#writing-notes-in-markdown" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Since all of my notes are just a collection of
&lt;a href="https://daringfireball.net/projects/markdown/syntax"target="_blank" rel="noopener"&gt;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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; files I can
easily port them to any text editor or knowledge-base tool that supports that.
This website is a &lt;a href="https://gohugo.io/"target="_blank" rel="noopener"&gt;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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; static site and I write all of my
blog posts in Markdown. This is much easier than writing HTML and Hugo just
renders the &lt;code&gt;.md&lt;/code&gt; files into HTML for me in milliseconds when I build the site.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alexkraker.com on  dev &lt;span class="o"&gt;[&lt;/span&gt;!?&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;i❯ hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Start building sites …
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo v0.116.1-3e1ea030a5897addaf9d113d0826709fe07f77c0+extended linux/amd64 &lt;span class="nv"&gt;BuildDate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2023-08-01T07:24:54Z &lt;span class="nv"&gt;VendorInfo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gohugoio
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; EN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-------------------+-----
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pages &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Paginator pages &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Non-page files &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Static files &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Processed images &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Aliases &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Sitemaps &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Cleaned &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Total in &lt;span class="m"&gt;83&lt;/span&gt; ms&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This also made publishing all of my notes online relatively easy&amp;hellip; more on that
later.&lt;/p&gt;
&lt;p&gt;If you spend a lot of your time in the digital world like me I highly recommend
learning Markdown and taking notes in this markup. Many platforms that are used
in the digital world usually have some sort of Markdown support too. Jira, Zendesk,
Google Chat, Slack, Discord&amp;hellip; just to name a few that I&amp;rsquo;ve discovered support
writing in Markdown syntax. I write Markdown everywhere I can now without really
thinking about it.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in learning Markdown I recommend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.markdownguide.org/getting-started/"target="_blank" rel="noopener"&gt;Markdown Guide - Getting Started&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Daring Fireball&amp;rsquo;s &lt;a href="https://daringfireball.net/projects/markdown/syntax"target="_blank" rel="noopener"&gt;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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
is the original spec.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Version controlled backups&lt;span class="hx:absolute hx:-mt-20" id="version-controlled-backups"&gt;&lt;/span&gt;
&lt;a href="#version-controlled-backups" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Since my notes are all just text files I back them up to a &lt;a href="https://git-scm.com/"target="_blank" rel="noopener"&gt;Git&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
repository in the cloud. Using Git also has the added benefit of version control
for my notes and I can easily manage sharing my notes between multiple devices
by cloning the repository to that device and using &lt;code&gt;git pull&lt;/code&gt; and &lt;code&gt;git push&lt;/code&gt; to
sync my notes. &lt;a href="https://github.com/kraker/second-brain"target="_blank" rel="noopener"&gt;My notes repository&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; is
hosted on GitHub and I&amp;rsquo;ve made it public so that I can easily share them with
others if I want to.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a community &lt;a href="https://publish.obsidian.md/git-doc/Start&amp;#43;here"target="_blank" rel="noopener"&gt;Git plugin&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
for Obsidian that syncs my notes to my repository at regular intervals so I don&amp;rsquo;t
even have to think about it.&lt;/p&gt;
&lt;h2&gt;Owning my data and portability&lt;span class="hx:absolute hx:-mt-20" id="owning-my-data-and-portability"&gt;&lt;/span&gt;
&lt;a href="#owning-my-data-and-portability" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Because my notes are just simple text files I don&amp;rsquo;t have to worry about them
being stored in some type of proprietary data format. My notes are portable and
can be edited anywhere I have a basic text editor. I also own my notes data.
Long-term I don&amp;rsquo;t run the risk of losing them if they&amp;rsquo;re stuck in a proprietary
platform like &lt;a href="https://roamresearch.com/"target="_blank" rel="noopener"&gt;Roam Research&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;, for example. On long
enough time scales most proprietary tools and data formats may not exist, just
look at the &lt;a href="https://killedbygoogle.com/"target="_blank" rel="noopener"&gt;Killed by Google&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; for lots of examples.
I&amp;rsquo;d hate to lose the countless hours I&amp;rsquo;ve spent on my &amp;ldquo;second brain&amp;rdquo;. In other
words, it&amp;rsquo;s important to me that my notes are
&lt;a href="https://en.wikipedia.org/wiki/Future-proof"target="_blank" rel="noopener"&gt;future-proof&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Structuring my personal knowledgebase&lt;span class="hx:absolute hx:-mt-20" id="structuring-my-personal-knowledgebase"&gt;&lt;/span&gt;
&lt;a href="#structuring-my-personal-knowledgebase" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Before I learned about Zettelkasten I tried to organize my notes into folder
structures and hierarchies. But after a while this becomes difficult to
maintain and thinking and making decisions about the &amp;ldquo;taxonomy&amp;rdquo; of your
knowledge base can become a barrier to actually writing notes. Nowadays my notes
are all just a single folder. With a Zettelkasten you create links between
notes. This is a bit like &lt;a href="https://en.wikipedia.org/wiki/Hyperlink"target="_blank" rel="noopener"&gt;hyperlinking&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.
This is more like how your brain works. The linking is what gives structure to
your knowledge base and this develops organically over time as you tend to your
digital garden.&lt;/p&gt;
&lt;p&gt;After a while, some of your notes start to accumulate back-links from other
notes that are related to it. In Obsidian these are called &amp;ldquo;linked mentions&amp;rdquo; at
the bottom of the note.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/second-brain/Screenshot_20231118_083751.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Atomic notes&lt;span class="hx:absolute hx:-mt-20" id="atomic-notes"&gt;&lt;/span&gt;
&lt;a href="#atomic-notes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I try to keep my notes
&lt;a href="https://medium.com/branching-thought/anatomy-of-an-atomic-note-zettel-fe329a427a7a"target="_blank" rel="noopener"&gt;atomic&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
and contained to one idea or concept.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example from one of my notes on networking about IPv4:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;title: IPv4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;date: 2020-10-21 12:40:14
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tags:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;#39;networking&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**Internet Protocol version 4 (IPv4)**&lt;/span&gt; is the fourth version of the
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;Internet Protocol&lt;/span&gt;](&lt;span class="na"&gt;2020-10-10--17-59-03Z--internet_protocol.md&lt;/span&gt;) (IP). It is one
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;of the core protocols of standards-based internetworking methods in the
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;Internet&lt;/span&gt;](&lt;span class="na"&gt;2020-10-11--17-17-39Z--internet_layer.md&lt;/span&gt;) and other packet-switched
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;networks. IPv4 was the first version deplyed for production on SATNET in 1982
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;and on the ARPANET in January 1983. It is still used to route most Internet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;traffic today, despite the ongoing deployment of a successor protocol,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;IPv6&lt;/span&gt;](&lt;span class="na"&gt;2020-10-21--12-40-26Z--ipv6.md&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv4 uses a 32-bit address space which provides 4,294,967,296 (232) unique
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;addresses, but large blocks are reserved for special networking methods.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Source: https://en.wikipedia.org/wiki/IPv4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; Uses dotted-octet numbering system &lt;span class="ge"&gt;*(i.e. 192.168.0.1)*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + 4 8-bit numbers 0-255, separated by &amp;#39;.&amp;#39;, total of 32 bits.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; + 192.168.0.1 = 11000000.10101000.00000000.00000001
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Commands
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; Windows: &lt;span class="sb"&gt;`ipconfig /all`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; MacOS: &lt;span class="sb"&gt;`ifconfig`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* Linux: &lt;span class="sb"&gt;`ifconfig`&lt;/span&gt; or &lt;span class="sb"&gt;`ip a`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Hub notes&lt;span class="hx:absolute hx:-mt-20" id="hub-notes"&gt;&lt;/span&gt;
&lt;a href="#hub-notes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Sometimes I&amp;rsquo;ll create a note that&amp;rsquo;s a hub with links to lots of other notes about
a particular topic. A good example from my Zettlekasten is my hub note from when
I was learning Python.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;title: Python Notes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;date: 2021-09-10 05:56
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tags:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;#39;python&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;#39;dev&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# Python Notes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Basics
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Math Operators&lt;/span&gt;](&lt;span class="na"&gt;20210910055642-math-operators.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Common Data Types&lt;/span&gt;](&lt;span class="na"&gt;20210910201237-data-types.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;String Concatenation and Replication&lt;/span&gt;](&lt;span class="na"&gt;20210910201646-string-concatenation-and-replication.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Variables&lt;/span&gt;](&lt;span class="na"&gt;20210910202050-variables.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Common Functions&lt;/span&gt;](&lt;span class="na"&gt;20210910204323-common-functions.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Text and Number Equivalence&lt;/span&gt;](&lt;span class="na"&gt;20210910210013-text-and-number-equivalence.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Flow Control
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Boolean Values&lt;/span&gt;](&lt;span class="na"&gt;20210910210804-boolean-values.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Comparison Operators&lt;/span&gt;](&lt;span class="na"&gt;20210910210949-comparison-operators.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Boolean Operators&lt;/span&gt;](&lt;span class="na"&gt;20210910212715-boolean-operators.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### Elements of Flow Control
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Conditions&lt;/span&gt;](&lt;span class="na"&gt;20210911072918-conditions.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Code Blocks&lt;/span&gt;](&lt;span class="na"&gt;20210911074141-code-blocks.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;*&lt;/span&gt; [&lt;span class="nt"&gt;Program Execution&lt;/span&gt;](&lt;span class="na"&gt;20210911074451-program-execution.md&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### Flow Control Statements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&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"&gt;
&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!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;This is just the first 20 or so lines of that hub note, if you&amp;rsquo;re interested
in seeing the whole thing, here&amp;rsquo;s a link to my
&lt;a href="https://github.com/kraker/second-brain/blob/main/20210910055625-python-notes.md?plain=1"target="_blank" rel="noopener"&gt;Python Notes&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Other types of notes&lt;span class="hx:absolute hx:-mt-20" id="other-types-of-notes"&gt;&lt;/span&gt;
&lt;a href="#other-types-of-notes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;There are other types of notes that you can take in your Zettelkasten and some of
them are helpful for doing research. An example is &amp;ldquo;fleeting notes&amp;rdquo; which are
something you jot down to capture a fleeting thought or idea that you will flesh
out and categorize later.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in learning about the various other types of notes and
how to use a Zettelkasten these ways
&lt;a href="https://zettelkasten.de/posts/concepts-sohnke-ahrens-explained/"target="_blank" rel="noopener"&gt;From Fleeting Notes to Project Notes&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
is worth a read.&lt;/p&gt;
&lt;p&gt;Personally, I try to keep things simple and just focus on atomic notes and hub
notes when those become unwieldy. Maybe if I decide to write a book someday I&amp;rsquo;ll
get more into using my Zettelkasten these ways to accumulate research. It&amp;rsquo;s
important to not get too caught up in methodology at first I feel. Developing
the basic habit is more important.&lt;/p&gt;
&lt;h2&gt;From notes to &amp;ldquo;digital garden&amp;rdquo;&lt;span class="hx:absolute hx:-mt-20" id="from-notes-to-digital-garden"&gt;&lt;/span&gt;
&lt;a href="#from-notes-to-digital-garden" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="http://alexkraker.com/blog/second-brain/filip-urban-ffJ8Qa0VQU0-unsplash.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@yngprmtv?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"target="_blank" rel="noopener"&gt;Filip Urban&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/boy-in-black-and-white-long-sleeve-shirt-standing-beside-gray-metal-watering-can-during-daytime-ffJ8Qa0VQU0?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"target="_blank" rel="noopener"&gt;Unsplash&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A friend of mine that I used to work with published his technical notes
about some tools we all used on his website. This inspired me to publish my own
notes on a website so that I could share them with others. Some people like to
call this online repository of their thinking, research, or notes their
&lt;a href="https://maggieappleton.com/garden-history"target="_blank" rel="noopener"&gt;digital garden&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;. I like this concept
because tending to your notes is a bit like gardening. I&amp;rsquo;ve spent countless
hours tending mine.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a link to my digital garden if you&amp;rsquo;re curious:
&lt;a href="https://notes.kraker.dev/"target="_blank" rel="noopener"&gt;Alex&amp;rsquo;s Second Brain&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sometimes if somebody asks how I learned something or asks for advice I&amp;rsquo;ll often
link them one of my notes if I have one on that topic.&lt;/p&gt;
&lt;p&gt;At first, publishing my notes online was a manual process, but I&amp;rsquo;ve since
automated it so that all I need to do is write the notes and automation takes
care of the rest. How I did this is probably a good topic for a future article,
so stay tuned!&lt;/p&gt;</description></item><item><title>On Learning Ansible</title><link>http://alexkraker.com/blog/learn-ansible/</link><pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate><guid>http://alexkraker.com/blog/learn-ansible/</guid><description>
&lt;p&gt;&lt;img src="http://alexkraker.com/blog/learn-ansible/jonathan-chng-Ch8S4zHDQfE-unsplash.jpg" alt="" loading="lazy" /&gt;
Photo by &lt;a href="https://unsplash.com/@jon_chng?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"target="_blank" rel="noopener"&gt;Jonathan Chng&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/white-metal-frame-glass-roof-Ch8S4zHDQfE?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"target="_blank" rel="noopener"&gt;Unsplash&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I recently had someone reach out to me on LinkedIn asking if I would mentor them
on Ansible. Like many sysadmins I know I&amp;rsquo;m short on bandwidth and regretfully
had to decline. But I did offer a &lt;a href="#1-book-ansible-for-devops"&gt;book recommendation&lt;/a&gt;
and a link to the &lt;a href="#4-ansible-discord"&gt;Ansible Discord&lt;/a&gt; I sometimes frequent&amp;hellip;&lt;/p&gt;
&lt;p&gt;But this was enough to inspire me to write up some of my thoughts on learning
Ansible.&lt;/p&gt;
&lt;h2&gt;0. Prerequisites&lt;span class="hx:absolute hx:-mt-20" id="0-prerequisites"&gt;&lt;/span&gt;
&lt;a href="#0-prerequisites" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Learn Linux&lt;span class="hx:absolute hx:-mt-20" id="learn-linux"&gt;&lt;/span&gt;
&lt;a href="#learn-linux" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;In coaching a former colleague on Ansible who is a Windows Sysadmin I
learned that it&amp;rsquo;s hard to wrap your head around Ansible if you don&amp;rsquo;t already
know some Linux. You don&amp;rsquo;t need to become a Linux Sysadmin to learn Ansible,
but the learning curve might be too steep if you aren&amp;rsquo;t at least proficient in
the Linux CLI. Because Ansible runs on Linux to be able to learn it you tend to
spend a lot of time in the Linux CLI running Ansible commands and trying things.&lt;/p&gt;
&lt;p&gt;Learning the Linux CLI is out of the scope of this guide, but there are already
a lot of great resources available for learning the basics. Here are some that I
typically like to recommend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://linuxcommand.org/lc3_learning_the_shell.php"target="_blank" rel="noopener"&gt;Learning the Shell&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.learncodethehardway.com/t/appendix-a-command-line-crash-course/768"target="_blank" rel="noopener"&gt;Command Line Crash Course&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;From MIT&amp;rsquo;s &amp;ldquo;Missing Semester&amp;rdquo; course:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://missing.csail.mit.edu/2020/course-shell/"target="_blank" rel="noopener"&gt;The Shell&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://missing.csail.mit.edu/2020/command-line/"target="_blank" rel="noopener"&gt;Command-line Environment&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you aren&amp;rsquo;t already at least somewhat proficient in the Linux CLI go learn
that first, then circle back to Ansible when you&amp;rsquo;re ready.&lt;/p&gt;
&lt;h3&gt;Learn some scripting&lt;span class="hx:absolute hx:-mt-20" id="learn-some-scripting"&gt;&lt;/span&gt;
&lt;a href="#learn-some-scripting" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Whether it&amp;rsquo;s Bash, PowerShell, Python, or some other scripting language, having
some scripting under your belt is really helpful for being able to wrap your
head around Ansible.&lt;/p&gt;
&lt;p&gt;Talking in terms of Bash. The Linux CLI is to Bash scripting what Bash scripting
is to Ansible. Ansible is a couple layers of abstraction removed from running
basic commands in the CLI.&lt;/p&gt;
&lt;p&gt;Like climbing a ladder, it&amp;rsquo;s probably easier if you don&amp;rsquo;t try to skip the first
few rungs. After you&amp;rsquo;ve wrapped your head around scripting, Ansible starts to
make a lot more sense. You can skip learning scripting, but I wouldn&amp;rsquo;t necessarily
recommend it.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s my go-to recommendation for learning both the Linux CLI and scripting in Bash:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://linuxcommand.org/tlcl.php"target="_blank" rel="noopener"&gt;The Linux Command Line&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by William Shotts&lt;br&gt;
You can download the book for free! But I recommend supporting the author by
buying a copy if you can.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And if you&amp;rsquo;re a Windows Sysadmin who&amp;rsquo;s learning Ansible, it probably makes sense
to learn PowerShell instead of Bash, but me being a Linux Sysadmin,
unfortunately I don&amp;rsquo;t have something I have tried myself that I can recommend.
I have heard some good things about
&lt;a href="https://www.manning.com/books/learn-powershell-in-a-month-of-lunches"target="_blank" rel="noopener"&gt;Learn PowerShell in a Month of Lunches&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;1. Book: &amp;ldquo;Ansible for DevOps&amp;rdquo;&lt;span class="hx:absolute hx:-mt-20" id="1-book-ansible-for-devops"&gt;&lt;/span&gt;
&lt;a href="#1-book-ansible-for-devops" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://www.ansiblefordevops.com/"target="_blank" rel="noopener"&gt;Ansible for DevOps&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Jeff Geerling is the
best resource that I&amp;rsquo;ve found for learning Ansible. I highly recommend picking
up a copy of this book and working through it. I recommend typing out all of the
commands and code and running it. This is really all you should need to get
started.&lt;/p&gt;
&lt;p&gt;Jeff Geerling&amp;rsquo;s
&lt;a href="https://www.youtube.com/playlist?list=PL2_OBreMn7FqZkvMYt6ATmgC0KAGGJNAN"target="_blank" rel="noopener"&gt;Ansible 101&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
series on YouTube is also quite good as a supplement to his book as it covers
a lot of the same material.&lt;/p&gt;
&lt;h2&gt;2. Video: &amp;ldquo;Getting started with Ansible&amp;rdquo;&lt;span class="hx:absolute hx:-mt-20" id="2-video-getting-started-with-ansible"&gt;&lt;/span&gt;
&lt;a href="#2-video-getting-started-with-ansible" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you prefer video over book learning, Learn Linux TV&amp;rsquo;s
&lt;a href="https://www.youtube.com/playlist?list=PLT98CRl2KxKEUHie1m24-wkyHpEsa4Y70"target="_blank" rel="noopener"&gt;Getting started with Ansible&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
is also a solid recommendation. I&amp;rsquo;m a big fan of this channel for interesting
tech videos and tutorials about Linux in general.&lt;/p&gt;
&lt;h2&gt;3. Learn by Doing&lt;span class="hx:absolute hx:-mt-20" id="3-learn-by-doing"&gt;&lt;/span&gt;
&lt;a href="#3-learn-by-doing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Most of the sysadmins I know are the &amp;ldquo;learn by doing&amp;rdquo; type and I&amp;rsquo;m no exception.
My Ansible learning journey started this way because I needed to write some
Ansible for work and I sort of just jumped right in and did it by writing
some playbooks. This isn&amp;rsquo;t a bad way to get started and you can learn a lot by
trying to make something useful right away.&lt;/p&gt;
&lt;p&gt;The official &lt;a href="https://docs.ansible.com/ansible/latest/getting_started/index.html"target="_blank" rel="noopener"&gt;Getting started with Ansible&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
is a good entry point if choose to go this route.&lt;/p&gt;
&lt;p&gt;In general I&amp;rsquo;ve found the official &lt;a href="https://docs.ansible.com/ansible/latest/index.html"target="_blank" rel="noopener"&gt;Ansible Documentation&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
to be well-written with lots of helpful examples.&lt;/p&gt;
&lt;h2&gt;4. Ansible Discord&lt;span class="hx:absolute hx:-mt-20" id="4-ansible-discord"&gt;&lt;/span&gt;
&lt;a href="#4-ansible-discord" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;As a supplement to your learning, it&amp;rsquo;s helpful to know where you can go to ask
questions if you get stuck. I sometimes frequent the
&lt;a href="http://www.catb.org/~esr/faqs/smart-questions.html"target="_blank" rel="noopener"&gt;Ansible Discord&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; and I&amp;rsquo;ve
been known to answer questions here and there when I need a break from
working. (Yes, I enjoy Ansible enough that fielding questions about it in
Discord is an enjoyable distraction for me&amp;hellip; ;-)&lt;/p&gt;
&lt;p&gt;I recommend asking questions
&lt;a href="http://www.catb.org/~esr/faqs/smart-questions.html"target="_blank" rel="noopener"&gt;the smart way&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; for best
results.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx:absolute hx:-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;That&amp;rsquo;s all there really is too it. It&amp;rsquo;s hard to improve upon &amp;ldquo;Ansible for
DevOps&amp;rdquo; as a learning resource and this is really probably my best recommendation
for learning Ansible. Other than that, most of my Ansible skills I&amp;rsquo;ve acquired
by building things with it. Some recommendations for acquiring some of the more
advanced Ansible skills and other tips and tricks I&amp;rsquo;ve picked up along the way
is probably a good topic for a future article, so stay tuned for a &amp;ldquo;part 2.&amp;rdquo;&lt;/p&gt;</description></item><item><title>DevOps Learning Resources</title><link>http://alexkraker.com/blog/learn-devops/</link><pubDate>Mon, 04 Sep 2023 00:00:00 +0000</pubDate><guid>http://alexkraker.com/blog/learn-devops/</guid><description>
&lt;p&gt;&lt;em&gt;Updated 2023-09-16&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a collection of recommended DevOps learning resources. Those with a ✅
green check-mark are my favorite resources for those topics.&lt;/p&gt;
&lt;h1&gt;DevOps&lt;/h1&gt;&lt;h2&gt;Online resources&lt;span class="hx:absolute hx:-mt-20" id="online-resources"&gt;&lt;/span&gt;
&lt;a href="#online-resources" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/devops"target="_blank" rel="noopener"&gt;DevOps Roadmap&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sre.google/books/"target="_blank" rel="noopener"&gt;SRE Books&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Google&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/devops/comments/yjdscp/getting_into_devops/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3"target="_blank" rel="noopener"&gt;Getting into DevOps&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Reddit&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Books&lt;span class="hx:absolute hx:-mt-20" id="books"&gt;&lt;/span&gt;
&lt;a href="#books" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://itrevolution.com/product/the-phoenix-project/"target="_blank" rel="noopener"&gt;The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Gene Kim&lt;/li&gt;
&lt;li&gt;&lt;a href="https://itrevolution.com/product/the-unicorn-project/"target="_blank" rel="noopener"&gt;The Unicorn Project: A Novel about Digital Disruption, Developers, and Overthrowing the Ancient Powerful Order&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Gene Kim&lt;/li&gt;
&lt;li&gt;&lt;a href="https://itrevolution.com/product/the-devops-handbook-second-edition/"target="_blank" rel="noopener"&gt;The DevOps Handbook: How to Create World-Class Agility, Reliability, &amp;amp; Security in Technology Organizations&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Gene Kim, et al.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Cloud Native&lt;/h1&gt;&lt;h2&gt;AWS&lt;span class="hx:absolute hx:-mt-20" id="aws"&gt;&lt;/span&gt;
&lt;a href="#aws" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.acloud.guru/course/hands-on-aws-troubleshooting/overview"target="_blank" rel="noopener"&gt;Hands-On AWS Troubleshooting&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - A Cloud Guru&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Azure&lt;span class="hx:absolute hx:-mt-20" id="azure"&gt;&lt;/span&gt;
&lt;a href="#azure" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;GCP&lt;span class="hx:absolute hx:-mt-20" id="gcp"&gt;&lt;/span&gt;
&lt;a href="#gcp" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h1&gt;Virtualization&lt;/h1&gt;&lt;h2&gt;Containerization&lt;span class="hx:absolute hx:-mt-20" id="containerization"&gt;&lt;/span&gt;
&lt;a href="#containerization" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Docker&lt;span class="hx:absolute hx:-mt-20" id="docker"&gt;&lt;/span&gt;
&lt;a href="#docker" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/get-started/docker_cheatsheet.pdf"target="_blank" rel="noopener"&gt;CLI Cheat Sheet&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Docker&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/docker-mastery/"target="_blank" rel="noopener"&gt;Docker Mastery&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Udemy&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nigelpoulton.com/books/"target="_blank" rel="noopener"&gt;Docker Deep Dive&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Nigel Poulton&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Orchestration&lt;span class="hx:absolute hx:-mt-20" id="orchestration"&gt;&lt;/span&gt;
&lt;a href="#orchestration" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Kubernetes&lt;span class="hx:absolute hx:-mt-20" id="kubernetes"&gt;&lt;/span&gt;
&lt;a href="#kubernetes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://nigelpoulton.com/books/"target="_blank" rel="noopener"&gt;The Kubernetes Book&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Nigel Poulton&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kelseyhightower/kubernetes-the-hard-way"target="_blank" rel="noopener"&gt;Kubernetes The Hard Way&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Free Tutorial&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kodekloud.com/"target="_blank" rel="noopener"&gt;KodeKloud.com&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Learn-by-doing Platform&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/"target="_blank" rel="noopener"&gt;Kubectl cheat sheet&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Kubernetes&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Automation&lt;/h1&gt;&lt;h2&gt;CI/CD&lt;span class="hx:absolute hx:-mt-20" id="cicd"&gt;&lt;/span&gt;
&lt;a href="#cicd" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;Continuous Integration Continuous Deployment&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://acloudguru.com/course/implementing-a-full-ci-cd-pipeline"target="_blank" rel="noopener"&gt;Implementing a Full CI/CD Pipeline&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - A Cloud Guru&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Jenkins&lt;span class="hx:absolute hx:-mt-20" id="jenkins"&gt;&lt;/span&gt;
&lt;a href="#jenkins" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.acloud.guru/course/ee8938c3-1a8e-4d93-b0fe-ae989250e8dc/overview"target="_blank" rel="noopener"&gt;Jenkins Quick Start&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - A Cloud Guru&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Ansible (CaC)&lt;span class="hx:absolute hx:-mt-20" id="ansible-cac"&gt;&lt;/span&gt;
&lt;a href="#ansible-cac" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Official &lt;a href="https://docs.ansible.com/ansible/latest/index.html"target="_blank" rel="noopener"&gt;Ansible Documentation&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Videos&lt;span class="hx:absolute hx:-mt-20" id="videos"&gt;&lt;/span&gt;
&lt;a href="#videos" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLT98CRl2KxKEUHie1m24-wkyHpEsa4Y70"target="_blank" rel="noopener"&gt;Getting Sarted with Ansible&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - LearnLinuxTV&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/playlist?list=PL2_OBreMn7FqZkvMYt6ATmgC0KAGGJNAN"target="_blank" rel="noopener"&gt;Ansible 101&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Jeff Geerling&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Books&lt;span class="hx:absolute hx:-mt-20" id="books-1"&gt;&lt;/span&gt;
&lt;a href="#books-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://www.ansiblefordevops.com/"target="_blank" rel="noopener"&gt;Ansible for DevOps&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Jeff Geerling&lt;br&gt;
&lt;em&gt;This is the single best resource for learning Ansible that I&amp;rsquo;ve found.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oreilly.com/library/view/ansible-up-and/9781098109141/"target="_blank" rel="noopener"&gt;Ansible Up &amp;amp; Running&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Courses&lt;span class="hx:absolute hx:-mt-20" id="courses"&gt;&lt;/span&gt;
&lt;a href="#courses" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/learn-ansible/"target="_blank" rel="noopener"&gt;Ansible for the Absolute Beginner&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Udemy&lt;/li&gt;
&lt;li&gt;&lt;a href="https://acloudguru.com/course/ansible-quick-start"target="_blank" rel="noopener"&gt;Ansible Quick Start&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – A Cloud Guru&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tutorials&lt;span class="hx:absolute hx:-mt-20" id="tutorials"&gt;&lt;/span&gt;
&lt;a href="#tutorials" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.ansible.com/ansible/latest/getting_started/index.html"target="_blank" rel="noopener"&gt;Getting started with Ansible&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Ansible&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Terraform (IaC)&lt;span class="hx:absolute hx:-mt-20" id="terraform-iac"&gt;&lt;/span&gt;
&lt;a href="#terraform-iac" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h1&gt;Development&lt;/h1&gt;&lt;p&gt;Programming, scripting, source code management (SCM).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://grugbrain.dev/"target="_blank" rel="noopener"&gt;The Grug Brained Developer&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.sanctum.geek.nz/series/unix-as-ide/"target="_blank" rel="noopener"&gt;Unix as IDE&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Python&lt;span class="hx:absolute hx:-mt-20" id="python"&gt;&lt;/span&gt;
&lt;a href="#python" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pythoncheatsheet.org/"target="_blank" rel="noopener"&gt;Python Cheat Sheet&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Online Resources&lt;span class="hx:absolute hx:-mt-20" id="online-resources-1"&gt;&lt;/span&gt;
&lt;a href="#online-resources-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/tutorial/index.html"target="_blank" rel="noopener"&gt;Official Tutorial&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pythonchallenge.com/"target="_blank" rel="noopener"&gt;Python Challenge&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythontutor.com/"target="_blank" rel="noopener"&gt;Python Tutor&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Books&lt;span class="hx:absolute hx:-mt-20" id="books-2"&gt;&lt;/span&gt;
&lt;a href="#books-2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://automatetheboringstuff.com/"target="_blank" rel="noopener"&gt;Automate the Boring Stuff&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Al Sweigart&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learncodethehardway.org/python/"target="_blank" rel="noopener"&gt;Learn Python the Hard Way&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Zed Shaw&lt;/li&gt;
&lt;li&gt;&lt;a href="https://open.umn.edu/opentextbooks/textbooks/43"target="_blank" rel="noopener"&gt;Think Python&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Allen B. Downey&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Videos&lt;span class="hx:absolute hx:-mt-20" id="videos-1"&gt;&lt;/span&gt;
&lt;a href="#videos-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/bY6m6_IIN94"target="_blank" rel="noopener"&gt;Learn Python with Socratica&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - YouTube&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/JeznW_7DlB0"target="_blank" rel="noopener"&gt;Python Object Oriented Programming (OOP) - For Beginners&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - YouTube&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SCM&lt;span class="hx:absolute hx:-mt-20" id="scm"&gt;&lt;/span&gt;
&lt;a href="#scm" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;Source Code Manegement&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://semver.org/"target="_blank" rel="noopener"&gt;Semantic Versioning&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Git&lt;span class="hx:absolute hx:-mt-20" id="git"&gt;&lt;/span&gt;
&lt;a href="#git" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Official &lt;a href="https://git-scm.com/docs"target="_blank" rel="noopener"&gt;Git Documentation&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;✅ &lt;a href="https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet"target="_blank" rel="noopener"&gt;Git Cheat Sheet&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Atlassian&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Videos&lt;span class="hx:absolute hx:-mt-20" id="videos-2"&gt;&lt;/span&gt;
&lt;a href="#videos-2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://missing.csail.mit.edu/2020/version-control/"target="_blank" rel="noopener"&gt;Version Control (Git)&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – MIT: &lt;em&gt;Missing Semester&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Books&lt;span class="hx:absolute hx:-mt-20" id="books-3"&gt;&lt;/span&gt;
&lt;a href="#books-3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/book/en/v2"target="_blank" rel="noopener"&gt;Pro Git&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Git&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Guides/Tutorials&lt;span class="hx:absolute hx:-mt-20" id="guidestutorials"&gt;&lt;/span&gt;
&lt;a href="#guidestutorials" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://rogerdudler.github.io/git-guide/"target="_blank" rel="noopener"&gt;git - the simple guide&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Roger Dudler&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cbea.ms/git-commit/"target="_blank" rel="noopener"&gt;How to Write a Git Commit Message&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/gittutorial"target="_blank" rel="noopener"&gt;gittutorial&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Git&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/giteveryday"target="_blank" rel="noopener"&gt;giteveryday&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Git&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Regular Expressions&lt;span class="hx:absolute hx:-mt-20" id="regular-expressions"&gt;&lt;/span&gt;
&lt;a href="#regular-expressions" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://regexone.com/"target="_blank" rel="noopener"&gt;RegexOne&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Online tutorial&lt;br&gt;
&lt;em&gt;This is a great intro to RegEx that you can probably get through in a couple
of hours.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Networking&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://www.pearson.com/en-us/subject-catalog/p/computer-networking/P200000003334/9780136681557"target="_blank" rel="noopener"&gt;Computer Networking: A Top-Down Approach&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by James F. Kurose&lt;br&gt;
&lt;em&gt;If you only consume one resource on computer networking, read this.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.professormesser.com/network-plus/n10-008/n10-008-video/n10-008-training-course/"target="_blank" rel="noopener"&gt;Professor Messer’s CompTIA N10-008 Network+ Course&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Video Course&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mwl.io/nonfiction/networking"target="_blank" rel="noopener"&gt;Networking for System Administrators&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Michael W Lucas&lt;/li&gt;
&lt;li&gt;&lt;a href="https://w3.testout.com/courseware/network-pro"target="_blank" rel="noopener"&gt;Test-Out: Network Pro&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Online Course + Labs&lt;br&gt;
It&amp;rsquo;s important to do applied work to solidify skills and learning. If you&amp;rsquo;re
studying for the Network+ the labs in this course are the closest facsimile to
real-world experience that I&amp;rsquo;ve found. This course is all you need to get your
Network+ if that&amp;rsquo;s your aim&amp;hellip; it&amp;rsquo;s well worth the price of admission.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;TCP/IP&lt;span class="hx:absolute hx:-mt-20" id="tcpip"&gt;&lt;/span&gt;
&lt;a href="#tcpip" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;The &lt;a href="https://en.wikipedia.org/wiki/Internet_protocol_suite"target="_blank" rel="noopener"&gt;Internet Protocol suite&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Routing&lt;span class="hx:absolute hx:-mt-20" id="routing"&gt;&lt;/span&gt;
&lt;a href="#routing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;NAT&lt;span class="hx:absolute hx:-mt-20" id="nat"&gt;&lt;/span&gt;
&lt;a href="#nat" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.comptia.org/content/guides/what-is-network-address-translation"title="https://www.comptia.org/content/guides/what-is-network-address-translation"target="_blank" rel="noopener"&gt;What is NAT?&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - CompTIA&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Subnetting&lt;span class="hx:absolute hx:-mt-20" id="subnetting"&gt;&lt;/span&gt;
&lt;a href="#subnetting" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/network-layer/what-is-a-subnet/"target="_blank" rel="noopener"&gt;What is a subnet? | How subnetting works | Cloudflare&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Cloudflare&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/SWy0MRfkXpQ"title="https://youtu.be/SWy0MRfkXpQ"target="_blank" rel="noopener"&gt;Seven-Second Subnetting&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Professor Messer - YouTube&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fortinet.com/resources/cyberglossary/what-is-dmz"title="https://www.fortinet.com/resources/cyberglossary/what-is-dmz"target="_blank" rel="noopener"&gt;What is a DMZ Network?&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Fortinet&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;CIDR&lt;span class="hx:absolute hx:-mt-20" id="cidr"&gt;&lt;/span&gt;
&lt;a href="#cidr" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Classless Inter-Domain Routing&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/what-is/cidr/"target="_blank" rel="noopener"&gt;What is CIDR?&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - AWS&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Classful_network#Classful_addressing_definition"target="_blank" rel="noopener"&gt;Classful addressing&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Wikipedia&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Reserved_IP_addresses"target="_blank" rel="noopener"&gt;Reserved 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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Wikipedia&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;DNS&lt;span class="hx:absolute hx:-mt-20" id="dns"&gt;&lt;/span&gt;
&lt;a href="#dns" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Cloudflare has published some quality articles on DNS from a conceptual overview standpoint.&lt;/p&gt;
&lt;p&gt;Start with these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/dns/what-is-dns/"target="_blank" rel="noopener"&gt;What is DNS? | How DNS works | Cloudflare&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/"target="_blank" rel="noopener"&gt;What is a domain name? | Domain name vs. URL | Cloudflare&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/dns/dns-server-types/"target="_blank" rel="noopener"&gt;DNS server types | Cloudflare&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/dns/glossary/dns-zone/"target="_blank" rel="noopener"&gt;What is a DNS zone? | Cloudflare&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/dns/dns-records/"target="_blank" rel="noopener"&gt;What are DNS records? | Cloudflare&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Systems Administration&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://the-sysadmin-book.com/"target="_blank" rel="noopener"&gt;The Practice of System and Network Administration: DevOps and other Best Practices for Enterprise IT, Volume 1&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; By Thomas A. Limoncelli, et al.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Unix &amp;amp; Linux&lt;span class="hx:absolute hx:-mt-20" id="unix--linux"&gt;&lt;/span&gt;
&lt;a href="#unix--linux" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;Tutorials&lt;span class="hx:absolute hx:-mt-20" id="tutorials-1"&gt;&lt;/span&gt;
&lt;a href="#tutorials-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://linuxupskillchallenge.org/"target="_blank" rel="noopener"&gt;Linux Upskill Challenge&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;br&gt;
Level up your Linux skills to Jr. Linux Administrator in month&amp;rsquo;s worth of
daily challenges. I&amp;rsquo;m a contributor on this
&lt;a href="https://github.com/livialima/linuxupskillchallenge"target="_blank" rel="noopener"&gt;project&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; and am active
on the
&lt;a href="https://discord.gg/linux-upskill-challenge-682046666928685068"target="_blank" rel="noopener"&gt;Discord&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Books&lt;span class="hx:absolute hx:-mt-20" id="books-4"&gt;&lt;/span&gt;
&lt;a href="#books-4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.admin.com/"target="_blank" rel="noopener"&gt;Unix and Linux System Administration Handbook&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Evi Nemeth, et al.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.brendangregg.com/systems-performance-2nd-edition-book.html"target="_blank" rel="noopener"&gt;Systems Performance: Enterprise and the Cloud, 2nd Edition&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Brendan Gregg&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mwl.io/nonfiction/tools"target="_blank" rel="noopener"&gt;Sudo Mastery&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Michael W. Lucas&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Bash &amp;amp; Linux CLI&lt;span class="hx:absolute hx:-mt-20" id="bash--linux-cli"&gt;&lt;/span&gt;
&lt;a href="#bash--linux-cli" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/bash/manual/bash.html"target="_blank" rel="noopener"&gt;Bash Reference Manual&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mywiki.wooledge.org/"target="_blank" rel="noopener"&gt;Greg&amp;rsquo;s Wiki&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Online Resources&lt;span class="hx:absolute hx:-mt-20" id="online-resources-2"&gt;&lt;/span&gt;
&lt;a href="#online-resources-2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://learnpythonthehardway.org/book/appendixa.html"target="_blank" rel="noopener"&gt;Command Line Crash Course&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – Learn Python the Hard Way&lt;/li&gt;
&lt;li&gt;&lt;a href="https://linuxcommand.org/lc3_learning_the_shell.php"target="_blank" rel="noopener"&gt;Learning the Shell&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by William Shotts&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jlevy/the-art-of-command-line"target="_blank" rel="noopener"&gt;The Art of Command Line&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://explainshell.com/"target="_blank" rel="noopener"&gt;explainshell.com&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Books&lt;span class="hx:absolute hx:-mt-20" id="books-5"&gt;&lt;/span&gt;
&lt;a href="#books-5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://linuxcommand.org/tlcl.php"target="_blank" rel="noopener"&gt;The Linux Command Line&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by William Shotts&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Videos&lt;span class="hx:absolute hx:-mt-20" id="videos-3"&gt;&lt;/span&gt;
&lt;a href="#videos-3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://missing.csail.mit.edu/2020/course-shell/"target="_blank" rel="noopener"&gt;The Shell&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; – MIT: &lt;em&gt;Missing Semester&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/playlist?list=PLT98CRl2KxKHaKA9-4_I38sLzK134p4GJ"target="_blank" rel="noopener"&gt;Linux Commands for Beginners&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - LearnLinuxTV&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/bfwfRCCFTVI"target="_blank" rel="noopener"&gt;Linux Crash Course - Public Key Authentication (SSH)&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - LearnLinuxTV&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Bash Scripting&lt;span class="hx:absolute hx:-mt-20" id="bash-scripting"&gt;&lt;/span&gt;
&lt;a href="#bash-scripting" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://devhints.io/bash"target="_blank" rel="noopener"&gt;Bash scripting cheatsheet&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Devhints&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wiley.com/en-us/Linux&amp;#43;Command&amp;#43;Line&amp;#43;and&amp;#43;Shell&amp;#43;Scripting&amp;#43;Bible,&amp;#43;4th&amp;#43;Edition-p-9781119700937"target="_blank" rel="noopener"&gt;Linux Command Line and Shell Scripting Bible&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Richard Blum &amp;amp; Christine Bresnahan&lt;/li&gt;
&lt;li&gt;&lt;a href="https://google.github.io/styleguide/shellguide.html"target="_blank" rel="noopener"&gt;Shell Style Guide&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; - Google&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Windows&lt;span class="hx:absolute hx:-mt-20" id="windows"&gt;&lt;/span&gt;
&lt;a href="#windows" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.manning.com/books/learn-powershell-in-a-month-of-lunches"target="_blank" rel="noopener"&gt;Learn Windows PowerShell in a Month of Lunches&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Travis Plunk, et al.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Monitoring&lt;/h1&gt;&lt;h2&gt;Grafana&lt;span class="hx:absolute hx:-mt-20" id="grafana"&gt;&lt;/span&gt;
&lt;a href="#grafana" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;Prometheus&lt;span class="hx:absolute hx:-mt-20" id="prometheus"&gt;&lt;/span&gt;
&lt;a href="#prometheus" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;SIEM&lt;span class="hx:absolute hx:-mt-20" id="siem"&gt;&lt;/span&gt;
&lt;a href="#siem" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;Graylog&lt;span class="hx:absolute hx:-mt-20" id="graylog"&gt;&lt;/span&gt;
&lt;a href="#graylog" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h1&gt;Knowledge Management&lt;/h1&gt;&lt;h2&gt;Documentation&lt;span class="hx:absolute hx:-mt-20" id="documentation"&gt;&lt;/span&gt;
&lt;a href="#documentation" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Docs as Code&lt;span class="hx:absolute hx:-mt-20" id="docs-as-code"&gt;&lt;/span&gt;
&lt;a href="#docs-as-code" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://www.linode.com/blog/linode/docs-as-code-at-linode/#:~:text=Docs%20as%20code%20is%20a,Writing%20plain%2Dtext%20documentation%20files"target="_blank" rel="noopener"&gt;Docs as Code at Linode&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.writethedocs.org/guide/docs-as-code/"target="_blank" rel="noopener"&gt;Write the Docs: Docs as Code&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Markdown&lt;span class="hx:absolute hx:-mt-20" id="markdown"&gt;&lt;/span&gt;
&lt;a href="#markdown" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://www.markdownguide.org/"target="_blank" rel="noopener"&gt;The Markdown Guide&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://daringfireball.net/projects/markdown/"target="_blank" rel="noopener"&gt;Official Markdown Specification&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Note Taking&lt;span class="hx:absolute hx:-mt-20" id="note-taking"&gt;&lt;/span&gt;
&lt;a href="#note-taking" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;Taking notes is akin to managing a personal &amp;ldquo;knowledge base&amp;rdquo;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Making a habit out of taking notes is one of the single greatest
force-multipliers for the IT professioal. Every exceptional developer, sysadmin,
engineer, etc that I&amp;rsquo;ve worked with was a note-taker. The methodologies used
doesn&amp;rsquo;t seem to matter so much, but taking notes does.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.soenkeahrens.de/en/takesmartnotes"target="_blank" rel="noopener"&gt;How to Take Smart Notes&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Sönke Ahrens&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zettelkasten.de/posts/overview/"target="_blank" rel="noopener"&gt;The Zettlekasten Method&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This is the method that I (mostly) use. See my &lt;a href="https://notes.kraker.dev/"target="_blank" rel="noopener"&gt;second brain&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; as an example.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://obsidian.md/"target="_blank" rel="noopener"&gt;Obsidian&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;br&gt;
Markdown note-taking tool. Supports Zettelkasten methodologies. This is what
I&amp;rsquo;m currently using, although I&amp;rsquo;ve also used Vim, Emacs, and explored various
other tools and text-editors in the past.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Meta&lt;/h1&gt;&lt;p&gt;Beyond just DevOps.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://teachyourselfcs.com/"target="_blank" rel="noopener"&gt;Teach Yourself Computer Science&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;br&gt;
Best in-class books and courses for learning Computer Science (CS).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ossu"target="_blank" rel="noopener"&gt;Open Source Society University (OSSU)&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.charlespetzold.com/books/"target="_blank" rel="noopener"&gt;Code&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt; by Charles Petzold&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How I Became a Linux Sysadmin in Less Than 2 Years</title><link>http://alexkraker.com/blog/linux-sysadmin/</link><pubDate>Thu, 20 May 2021 06:36:32 -0600</pubDate><guid>http://alexkraker.com/blog/linux-sysadmin/</guid><description>
&lt;p&gt;In November of 2019, I started working as a Tier 1 support agent at a web-hosting
company in the Denver, CO area. Just shy of 18 months later I was promoted to
Managed Hosting Analyst, which is a Linux Sysadmin role. I retained a couple
roles between then. I was promoted to Tier 1 Expert at about 3 months in, and
around 9 months later I received a promotion to Advanced Product Support, which
is basically a Jr. Linux Sysadmin role. On average I received a promotion around
every 6 months.&lt;/p&gt;
&lt;p&gt;If you had asked me years ago, if it was possible to become a Linux Sysadmin in
1.5 years, I probably would have thought you were crazy. I&amp;rsquo;m not saying this to
toot my own horn. But, it&amp;rsquo;s easy to overestimate how long it might take to
achieve a career goal become overwhelmed by the prospect, and fail to start. I&amp;rsquo;m
hoping by writing this, some of what I did, might be helpful to others who are
just starting out.&lt;/p&gt;
&lt;h2&gt;First a little background&lt;span class="hx:absolute hx:-mt-20" id="first-a-little-background"&gt;&lt;/span&gt;
&lt;a href="#first-a-little-background" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Years ago, I had an interest in becoming a Linux Sysadmin or at the very least
working in this space. At the time, I thought my foot in the door would be
getting an entry-level developer role. I hustled and built a few sites for
friends, taught myself HTML/CSS, Python, and a little JavaScript. A friend and I
even landed a job prototyping a web application for a wealthy businessperson
with an idea. That failed after about 6 months when we realized we had
completely underestimated the project, and our employer took the job overseas
for cheap programming labor. That was over the winter of 2015-2016. I&amp;rsquo;ve worked
other jobs in-between that were unrelated to IT.&lt;/p&gt;
&lt;p&gt;To be honest with you, I applied to the Tier 1 support agent role on a whim. I
didn&amp;rsquo;t think I would get the job because I lacked qualifications and experience.
I was honestly surprised when they offered me the job. I think this sense of
imposter syndrome has followed me to this day.&lt;/p&gt;
&lt;h3&gt;Ok, so how did I move from a Tier 1 role to Linux Sysadmin in 18 months?&lt;span class="hx:absolute hx:-mt-20" id="ok-so-how-did-i-move-from-a-tier-1-role-to-linux-sysadmin-in-18-months"&gt;&lt;/span&gt;
&lt;a href="#ok-so-how-did-i-move-from-a-tier-1-role-to-linux-sysadmin-in-18-months" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I think I had a couple things going for me out of the gate:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I was already familiar with and more or less proficient in the Linux CLI.&lt;/li&gt;
&lt;li&gt;I had some coding experience and web-development experience under my belt.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;But, I think if you&amp;rsquo;re sufficiently motivated, this would probably only set you
back about 6 months, if you&amp;rsquo;re comparing to my timeline. These are skills that
can be acquired.&lt;/p&gt;
&lt;h2&gt;8 Strategies That Landed Me That Linux Sysadmin Role&lt;span class="hx:absolute hx:-mt-20" id="8-strategies-that-landed-me-that-linux-sysadmin-role"&gt;&lt;/span&gt;
&lt;a href="#8-strategies-that-landed-me-that-linux-sysadmin-role" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Study&lt;span class="hx:absolute hx:-mt-20" id="1-study"&gt;&lt;/span&gt;
&lt;a href="#1-study" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I studied outside of work. A lot. There&amp;rsquo;s no secret to the quick succession of
promotions I received. I put in a lot of extra time outside of work studying and
learning the skills I would need to get to that next tier. If you want to grow
quickly, you have to be willing to put in the time and effort.&lt;/p&gt;
&lt;h3&gt;2. Ask questions&lt;span class="hx:absolute hx:-mt-20" id="2-ask-questions"&gt;&lt;/span&gt;
&lt;a href="#2-ask-questions" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;I wasn&amp;rsquo;t afraid to ask questions, and for help. And I listened and observed. I
was like a sponge. I think it&amp;rsquo;s important to identify a distinction between just
asking questions or for help, without improvement. Some people consistently ask
questions or for help, and don&amp;rsquo;t seem to get any better. When you&amp;rsquo;re the person
they&amp;rsquo;re asking, this gets old. Don&amp;rsquo;t be that person. First try to figure it out
on your own, try to find resources to learn about or fix the issue, then if you
still can&amp;rsquo;t figure it out, ask for help and outline what you&amp;rsquo;ve already tried
and where you&amp;rsquo;ve looked. Then take notes on what you&amp;rsquo;ve learned because you&amp;rsquo;ll
forget. This is asking questions the smart way.&lt;/p&gt;
&lt;h3&gt;3. Learn to love solving problems&lt;span class="hx:absolute hx:-mt-20" id="3-learn-to-love-solving-problems"&gt;&lt;/span&gt;
&lt;a href="#3-learn-to-love-solving-problems" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;It&amp;rsquo;s important to have a keen desire to solve problems. I don&amp;rsquo;t think you&amp;rsquo;re
going to like IT very much or get very far if solving technical problems doesn&amp;rsquo;t
interest you on some level. One of my primary drives for moving into IT was that
I genuinely enjoy solving problems. I love it (or perhaps I&amp;rsquo;m just obsessive?).
I&amp;rsquo;m not sure what to tell you if solving problems isn&amp;rsquo;t one of your areas of
interest, but perhaps it&amp;rsquo;s time to think about what you do actually like to do,
and if that&amp;rsquo;s working in the IT space. Be passionate about solving problems, or
at least learn to be passionate about it.&lt;/p&gt;
&lt;h3&gt;4. Be as helpful as possible&lt;span class="hx:absolute hx:-mt-20" id="4-be-as-helpful-as-possible"&gt;&lt;/span&gt;
&lt;a href="#4-be-as-helpful-as-possible" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Be as helpful as possible. Not just to the customer or the client, but to your
team, to members of other teams, to anybody really. People want to work with
(and reward) people who are helpful and make work better and easier for
everybody else. When COVID-19 hit, I was asked to man a temporary remote
helpdesk, to assist people from multiple departments with getting connected and
working remotely. I don&amp;rsquo;t think I would have been asked to do this if I hadn&amp;rsquo;t
been voluntarily helping various people with their remote work setups
already. Because I was one of a handful of people on this desk, I got to know
all sorts of people on other teams and other departments. The director of my
department personally acknowledged my contribution to the company. This put me
on the radar of people in leadership of multiple departments. In the words of
one of my colleagues, I was a &amp;ldquo;hot commodity&amp;rdquo; after that. No doubt, this helped
when I put in for those other roles.&lt;/p&gt;
&lt;h3&gt;5. Solve problems for everybody&lt;span class="hx:absolute hx:-mt-20" id="5-solve-problems-for-everybody"&gt;&lt;/span&gt;
&lt;a href="#5-solve-problems-for-everybody" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Become a &lt;em&gt;meta-problem&lt;/em&gt; solver. If you solve a problem and it seems to be a
common enough problem, solve it for everybody. If there isn&amp;rsquo;t any documentation
for that problem, write the docs. If you can write a script that automates said
thing, try to carve out time to write that script. I wrote guides on how to
handle things that are common pain points when working in support. Some of these
ended up getting passed around by others and eventually were merged into some of
the training materials given to new hires.&lt;/p&gt;
&lt;h3&gt;6. Become a mentor to others&lt;span class="hx:absolute hx:-mt-20" id="6-become-a-mentor-to-others"&gt;&lt;/span&gt;
&lt;a href="#6-become-a-mentor-to-others" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This goes along with being helpful, but be approachable. If you&amp;rsquo;re the person
others turn to when they are having trouble solving a problem, guess what?
You&amp;rsquo;re now a mentor. As your skills grow&amp;hellip; coach, mentor, and teach what you&amp;rsquo;ve
learned to others. If you asked questions &lt;em&gt;the smart way&lt;/em&gt;, and worked
to grow your skills, chances are you will have the opportunity to
&lt;em&gt;pay it forward.&lt;/em&gt; Someone did this for you, no doubt, it&amp;rsquo;s time to return the
favor.&lt;/p&gt;
&lt;h3&gt;7. Have a good attitude&lt;span class="hx:absolute hx:-mt-20" id="7-have-a-good-attitude"&gt;&lt;/span&gt;
&lt;a href="#7-have-a-good-attitude" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Have a good attitude. In a lot of ways, this goes with being helpful. But I can&amp;rsquo;t
emphasize how important having a good attitude is when looking for promotions.
Don&amp;rsquo;t be that person who complains all the time or has a negative attitude. Don&amp;rsquo;t
commiserate too much with your co-workers (a little is ok, but we all know that
person who seems to always be commiserating, you&amp;rsquo;re literally &lt;em&gt;creating misery
together&lt;/em&gt;. Don&amp;rsquo;t be this person). You want to be the person who
seems like they can weather the storm and not get bent out of shape about
it. You have a &amp;ldquo;can-do&amp;rdquo; attitude, don&amp;rsquo;t complain too much, have a positive
attitude, and are &lt;em&gt;reliable&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;8. Take ownership and be accountable&lt;span class="hx:absolute hx:-mt-20" id="8-take-ownership-and-be-accountable"&gt;&lt;/span&gt;
&lt;a href="#8-take-ownership-and-be-accountable" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Be accountable, take ownership of your work, and do what you say you&amp;rsquo;re going to
do. I feel like this should go without saying, but it&amp;rsquo;s surprising how common it
is for people not to take ownership of their work, show up to work on time, and
follow through on things.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Make showing up to work early a habit. If you&amp;rsquo;re not 5-10 minutes early, you&amp;rsquo;re late.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Take ownership of your work. If you&amp;rsquo;re tasked with a problem, try to see it
through, and take care of the issue as if it were your own. Don&amp;rsquo;t just kick the
can down the road for someone else to handle. Go the extra mile, make sure you
checked all the things, and make sure it&amp;rsquo;s solved so that it&amp;rsquo;s not a problem
that&amp;rsquo;s going to re-occur (if at all possible). If you say you&amp;rsquo;re going to do
something, do it. Make sure you notify others if you&amp;rsquo;re not going
to be able to complete said thing, by the time you said you would. This builds
trust and accountability. Your leadership wants to know they can rely on you to
be doing what you&amp;rsquo;re supposed to be doing without too much oversight. It&amp;rsquo;s
annoying to have to babysit (or worse, micromanage) someone because they&amp;rsquo;re not
doing what they should be doing. If you want to be given more responsibility,
you have to demonstrate you can handle it.&lt;/p&gt;
&lt;h2&gt;Closing Remarks&lt;span class="hx:absolute hx:-mt-20" id="closing-remarks"&gt;&lt;/span&gt;
&lt;a href="#closing-remarks" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A lot of what I&amp;rsquo;ve said here can easily be applied to any line of work. It&amp;rsquo;s
not unique to the IT space, or this career path. Some of what I said, like
studying and solving problems, are somewhat unique to the IT space.&lt;/p&gt;
&lt;p&gt;I also think that working support in web-hosting provides a lot of opportunity
for growth. As a sector of the industry, web-hosting seems to value finding
cheap labor and then training those people up rather than paying more up-front
and hiring people who already have experience and education. It&amp;rsquo;s the perfect
place for someone without a degree, but the interest and drive, to cut their
teeth on learning these skills. The company I work for seems to value training
people up and promoting from within, rather than hiring from outside. There&amp;rsquo;s no
doubt that this has also helped in terms of my trajectory. But It wouldn&amp;rsquo;t have
happened without the hard work and dedication I&amp;rsquo;ve put in. I can also
say, that for being a Linux Sysadmin, I&amp;rsquo;m probably being paid under the market
average. But, I didn&amp;rsquo;t need a degree, or any certifications to get hired
initially. That&amp;rsquo;s probably the trade-off.&lt;/p&gt;
&lt;p&gt;Also, keep in mind, this is only what has worked for me. Your mileage may vary.
If you work hard, are dedicated, and persevere, you&amp;rsquo;ll get there. It&amp;rsquo;s only a
matter of time.&lt;/p&gt;</description></item><item><title>Grit</title><link>http://alexkraker.com/blog/grit/</link><pubDate>Sun, 16 May 2021 18:39:24 -0600</pubDate><guid>http://alexkraker.com/blog/grit/</guid><description>
&lt;p&gt;I recently learned that the greatest predictor of success in an endeavor is not
anything you would typically think. It&amp;rsquo;s not IQ, socioeconomic status&amp;hellip; whether
you grew up rich or poor, or whether you had good parents. Actually, it&amp;rsquo;s a
difficult to define quality called &lt;em&gt;grit&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;To give an example, with enough grit you can overcome all odds and become a navy
seal. Just take a look at &lt;a href="https://en.wikipedia.org/wiki/David_Goggins"target="_blank" rel="noopener"&gt;David Goggins&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;.
I&amp;rsquo;m paraphrasing, but he came from a racist part of Alabama. He grew up poor.
His father was abusive. He was overweight. He had just about every reason not to
succeed. The one thing he did seem to have was &lt;em&gt;grit&lt;/em&gt;. If anyone has &lt;em&gt;grit&lt;/em&gt;,
it&amp;rsquo;s this guy. He&amp;rsquo;s a certifiable badass. But he didn&amp;rsquo;t get there overnight.&lt;/p&gt;
&lt;p&gt;I recently stumbled across this
&lt;a href="https://www.ted.com/talks/angela_lee_duckworth_grit_the_power_of_passion_and_perseverance"target="_blank" rel="noopener"&gt;Ted talk&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
by Angela Duckworth about this topic. Her research shows that just
about the only significant predictor of success is having &lt;em&gt;grit&lt;/em&gt;. It wasn&amp;rsquo;t IQ,
looks, upbringing, or any of the other commonly assumed &lt;em&gt;predictors of success.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Grit is having &lt;strong&gt;stamina&lt;/strong&gt; and &lt;strong&gt;endurance.&lt;/strong&gt; It&amp;rsquo;s being able to weather failures
and difficulties. It&amp;rsquo;s working towards a goal day-in and day-out, over a long
period of time, and not giving up.&lt;/p&gt;
&lt;p&gt;Ok, so how do you build grit?&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a good question.&lt;/p&gt;
&lt;p&gt;There doesn&amp;rsquo;t seem to be an obvious way to become &lt;em&gt;grittier&lt;/em&gt;. Angela Duckworth
talks about how some of the things that seem to correlate with being gritty are
having a &lt;em&gt;growth mindset&lt;/em&gt; and realizing that failures aren&amp;rsquo;t a permanent
condition. It&amp;rsquo;s ok to fail if you learn from your failures.&lt;/p&gt;
&lt;p&gt;A growth mindset is believing that weaknesses can be overcome by applying
yourself and putting the work in. It&amp;rsquo;s the difference between believing that
some people are just talented or smart, or that those things are skills that can
be developed.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t get me wrong; talent helps. Some people are more genetically gifted. It&amp;rsquo;s
not an equal playing field. But I think what this shows, is that the gap between
having those &lt;em&gt;natural&lt;/em&gt; abilities and having &lt;em&gt;grit&lt;/em&gt; is a lot smaller than we
think. There are exceptions. It&amp;rsquo;s not enough to just have &lt;em&gt;grit&lt;/em&gt; if you plan to
be a world-class Olympic swimmer like Michael Phelps. He&amp;rsquo;s a freak of nature
with a crazy wing-span. He has flippers for feet. But he also has grit. Phelps
might have medaled at the Olympics, but I doubt he would hold
&lt;a href="https://en.wikipedia.org/wiki/Michael_Phelps#Guinness_World_Records"target="_blank" rel="noopener"&gt;21 Guinness World Records&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"&gt;
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/&gt;
&lt;/svg&gt;&lt;/a&gt;
if he didn&amp;rsquo;t also have the grit to work as hard as he did.&lt;/p&gt;
&lt;p&gt;Ok, so being in the top 1% in your field might take both grit and god-given
gifts; if you plan to medal at the Olympics. But how many people were there who
are just as genetically gifted, or even more so than Phelps and aren&amp;rsquo;t a
household name? That&amp;rsquo;s a good question&amp;hellip;there&amp;rsquo;s probably a few of us. I think
the point is, you&amp;rsquo;ll never realize your potential if you don&amp;rsquo;t start having some
grit.&lt;/p&gt;
&lt;p&gt;I guess I&amp;rsquo;m writing this as much for myself as for those of you who are reading.
I&amp;rsquo;m not satisfied with where I&amp;rsquo;ve gotten to in my life so far, and I need to
change that. It&amp;rsquo;s going to require hard work, perseverance, dedication, and
sacrifice.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll leave you with a quote from probably one of the hardest working athletes in
football.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Today I will do what others won’t, so tomorrow I can do what others can’t.&amp;rdquo; &lt;br&gt;
– Jerry Rice&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>