summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/cv.html156
-rw-r--r--assets/cv.php5
-rw-r--r--assets/resume.html93
-rw-r--r--feed.php2
-rw-r--r--includes/foot.php2
-rw-r--r--includes/head.php2
-rw-r--r--includes/www.css364
-rw-r--r--pages/hireme.php49
-rw-r--r--pages/now.php19
-rw-r--r--posts/2024-01-24-are-all-hudson-hornets-hard-to-start-in-winter.php8
-rw-r--r--posts/2024-02-05-six-reasons-not-to-engine-swap-your-hudson.php13
-rw-r--r--posts/2024-02-19-a-new-hudson-hornet-aluminum-cylinder-head.php9
-rw-r--r--posts/2024-04-30-qrilear-the-aarakocra.php118
13 files changed, 466 insertions, 374 deletions
diff --git a/assets/cv.html b/assets/cv.html
deleted file mode 100644
index e3e2fef..0000000
--- a/assets/cv.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
- <head>
- <title>Resume for Adam Carpenter</title>
- <style>
-.horiz {
- display: flex;
- justify-content: space-evenly;
-}
-
-body,a {
- color: #195970
-}
-
-@media print {
-
-}
- </style>
-
- </head>
- <body>
- <h1>Adam T. Carpenter</h1>
-
- <div class="horiz">
- <a href="mailto:atc@53hor.net">atc@53hor.net</a>
- <a href="tel:7577746829">(757) 774-6829</a>
- <a href="https://www.53hor.net/info">www.53hor.net</a>
- <a target="_blank" href="https://git.53hor.net">git.53hor.net</a>
- <a target="_blank" href="https://www.linkedin.com/in/adam-carpenter">LinkedIn</a>
- </div>
-
- <p>
- I am a computer programmer who has been developing and maintaining native and
- web applications since 2018. I have also provided freelance systems
- administration services and technical mentoring since 2016.
- </p>
-
- <p>
- I am fluent in Rust, C#, Python, PHP, JavaScript, Bourne Shell, and HTML+CSS.
- </p>
-
- <p>
- I am also familiar with Java, C, C++, and TypeScript. I have
- used a variety of frameworks and libraries, as well as a myriad of web
- servers, databases, and "DevOps" platforms.
- </p>
-
- <p>
- I aim to create simple, performant, and well-documented software that solves
- real problems with no surprises.
- </p>
-
-
- <hr />
- <h2>Work History</h2>
-
- <div class="horiz">
- <h3><em>ADP</em> Manager, Software Engineering</h3>
- <h3>April 2022-Present, Norfolk, VA</h3>
- </div>
-
- <ul>
- <li>Manage team of eight software engineers both on site and remote</li>
- <li>Coordinate development of self-service portal with 2000+ DAU</li>
- <li>Develop OpenAI-generated transcript summary UI for quick review of client calls</li>
- <li>Own AI platform services development workstream</li>
- <li>Design and implement Argo BlueGreen rollout strategy for progressive deployments with zero downtime</li>
- <li>Evangelize adoption of continuous deployment in a heavily manual change environment</li>
- <li>Create remote developer jump box to reduce onboarding time</li>
- </ul>
-
- <div class="horiz">
- <h3><em>ADP</em> Software Engineer</h3>
- <h3>June 2018-April 2022, Norfolk, VA</h3>
- </div>
-
- <ul>
- <li>Reverse engineered undocumented, proprietary protocol and created <a href="https://github.com/adpllc/altruistic-angelshark"><em>Angelshark</em></a> to automate config changes. Sends commands over SSH channels to remote terminal emulators.</li>
- <li>Co-authored custom authentication API and reverse proxy to serve as a container traffic router; Turns LDAP credentials into JWTs</li>
- <li>Mentored six new team developers on Google SRE practices, continuous integration, and Kubernetes orchestration</li>
- </ul>
-
- <hr />
- <h2>Skills</h2>
-
- <div class="horiz">
- <ul>
- <li>Mentoring and training</li>
- <li>Agile development</li>
- <li>Root cause analysis</li>
- <li>Threat modeling</li>
- <li>Network troubleshooting</li>
- <li>Stakeholder demos</li>
- <li>Operational automation</li>
- <li>Requirements gathering, roadmapping</li>
- </ul>
-
- <ul>
- <li>Rust</li>
- <li>C#, .NET</li>
- <li>PHP, Symfony</li>
- <li>JavaScript</li>
- <li>HTML, CSS</li>
- <li>Bourne Shell</li>
- <li>Python</li>
- <li>MySQL</li>
- </ul>
-
- <ul>
- <li>FreeBSD, Linux</li>
- <li>Docker</li>
- <li>Kubernetes</li>
- <li>Jenkins</li>
- <li>Splunk, Dynatrace</li>
- <li>Pendo</li>
- <li>OpenAI GPT-3, GPT-4</li>
- <li>Jira, Confluence</li>
- </ul>
- </div>
-
- <hr />
- <h2>Academic History</h2>
- <div class="horiz">
- <h3><em>William &amp; Mary</em> B.S. Computer Science</h3>
- <h3>Class of 2018, Williamsburg, VA</h3>
- </div>
-
- <p>
- I have a Bachelor of Science in Computer Science from the College of William
- and Mary. While there, I participated in several group software development
- projects such as hybrid Android application testing and presided over the
- campus Game Design Club.
- </p>
-
- <hr />
- <h2>About Me</h2>
-
- <p>
- I wrote my first program on a TI-84 in BASIC to help finish my high school
- math homework faster. I quickly transitioned to building more complicated
- programs but have continued to enjoy finding the smallest amount of code to
- solve a problem quickly, correctly, and securely.
- </p>
-
- <p>
- I grew up in and still call Hampton Roads, Virginia my home. In my spare time
- I drive and maintain a classic car, a 1953 Hudson Hornet. I enjoy travelling
- and being at home with my wife and cocker spaniel. I also self-host a web
- server in a closet in my home.
- </p>
-
- <p>
- I keep a <a href="https://www.53hor.net">public journal on my web site</a>.
- </p>
- </body>
-</html>
diff --git a/assets/cv.php b/assets/cv.php
deleted file mode 100644
index c9255a8..0000000
--- a/assets/cv.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-header('content-type: application/pdf');
-header('content-disposition: attachment; filename=adam-carpenter-cv.pdf');
-exec('/usr/local/bin/mutool convert -F pdf -o /tmp/cv.pdf cv.html');
-passthru('/bin/cat /tmp/cv.pdf');
diff --git a/assets/resume.html b/assets/resume.html
new file mode 100644
index 0000000..7507a30
--- /dev/null
+++ b/assets/resume.html
@@ -0,0 +1,93 @@
+<h1>Adam T. Carpenter</h1>
+
+<div class="set">
+ <a class="printhide" href="javascript:window.print();">Download resume</a>
+ <a href="mailto:atc@53hor.net">atc@53hor.net</a>
+ <a href="tel:7577746829">(757) 774-6829</a>
+ <a href="https://www.53hor.net/hireme">www.53hor.net</a>
+ <a target="_blank" href="https://git.53hor.net">git.53hor.net</a>
+ <a target="_blank" href="https://www.linkedin.com/in/adam-carpenter">LinkedIn</a>
+</div>
+
+<p>
+I am a computer programmer who has been developing and maintaining
+native and web applications for over five years. My focus has been in
+operational automation and self-service. I aim to create simple,
+performant, and well-documented software that adds value. I avoid
+surprises using industry standard site reliability engineering
+practices.
+</p>
+
+<hr />
+<h2>Work History</h2>
+
+<div class="row">
+ <h3><em>ADP</em> Manager, Software Engineering</h3>
+<h3>April 2022-Present, Norfolk, VA</h3>
+</div>
+
+<ul>
+ <li>Manage team of eight software engineers both on site and remote</li>
+ <li>Coordinate development of self-service portal with 2000+ DAU</li>
+ <li>Develop OpenAI-generated transcript summary UI for quick review of client calls</li>
+ <li>Own AI platform services development workstream</li>
+ <li>Design and implement Argo BlueGreen rollout strategy for progressive deployments with zero downtime</li>
+ <li>Evangelize adoption of continuous deployment in a heavily manual change environment</li>
+ <li>Create remote developer jump box to reduce onboarding time</li>
+</ul>
+
+<div class="row">
+ <h3><em>ADP</em> Software Engineer</h3>
+<h3>June 2018-April 2022, Norfolk, VA</h3>
+</div>
+
+<ul>
+ <li>Reverse engineered undocumented, proprietary protocol and created <a href="https://github.com/adpllc/altruistic-angelshark"><em>Angelshark</em></a> to automate config changes. Sends commands over SSH channels to remote terminal emulators.</li>
+ <li>Co-authored custom authentication API and reverse proxy to serve as a container traffic router; Turns LDAP credentials into JWTs</li>
+ <li>Mentored six new team developers on Google SRE practices, continuous integration, and Kubernetes orchestration</li>
+</ul>
+
+<hr />
+<h2>Skills</h2>
+
+<div class="set">
+ <ul>
+ <li>Mentoring and training</li>
+ <li>Agile development</li>
+ <li>Root cause analysis</li>
+ <li>Threat modeling</li>
+ <li>Network troubleshooting</li>
+ <li>Stakeholder demos</li>
+ <li>Operational automation</li>
+ <li>Requirements gathering, roadmapping</li>
+ </ul>
+
+ <ul>
+ <li>Rust</li>
+ <li>C#, .NET</li>
+ <li>PHP, Symfony</li>
+ <li>JavaScript</li>
+ <li>HTML, CSS</li>
+ <li>Bourne Shell</li>
+ <li>Python</li>
+ <li>MySQL</li>
+ </ul>
+
+ <ul>
+ <li>FreeBSD, Linux</li>
+ <li>Docker</li>
+ <li>Kubernetes</li>
+ <li>Jenkins</li>
+ <li>Splunk, Dynatrace</li>
+ <li>Pendo</li>
+ <li>OpenAI GPT-3, GPT-4</li>
+ <li>Jira, Confluence</li>
+ </ul>
+</div>
+
+<hr />
+<h2>Academic History</h2>
+<div class="row">
+ <h3><em>William &amp; Mary</em> B.S. Computer Science</h3>
+<h3>Class of 2018, Williamsburg, VA</h3>
+</div>
diff --git a/feed.php b/feed.php
index 7a96450..61dd19c 100644
--- a/feed.php
+++ b/feed.php
@@ -7,7 +7,7 @@
<atom:link href="https://www.53hor.net/rss.xml" rel="self" type="application/rss+xml" />
<description>The World Wide Web pages of Adam Carpenter</description>
<image>
- <url>https://www.53hor.net/53hornet.svg</url>
+ <url>https://www.53hor.net/assets/53hornet.svg</url>
<title>53hornet's Feed</title>
<link>https://www.53hor.net</link>
</image>
diff --git a/includes/foot.php b/includes/foot.php
index e9dc23f..f0330de 100644
--- a/includes/foot.php
+++ b/includes/foot.php
@@ -1,7 +1,7 @@
</article>
<hr />
-<footer>
+<footer class="printhide">
<?php include('nav.php'); ?>
<p>
&copy; 2019-<?php printf('%s', date('Y')); ?> Adam Carpenter
diff --git a/includes/head.php b/includes/head.php
index 68185af..a32887c 100644
--- a/includes/head.php
+++ b/includes/head.php
@@ -25,7 +25,7 @@
<body>
<header>
- <a href="#menu">
+ <a class="printhide" href="#menu">
&#9662; Menu
</a>
</header>
diff --git a/includes/www.css b/includes/www.css
index f3bb626..0c7b47c 100644
--- a/includes/www.css
+++ b/includes/www.css
@@ -1,161 +1,205 @@
-body {
- max-width: 50em;
-}
-
-hr {
- color: var(--white);
-}
-
-a:link {
- color: var(--slate);
-}
-
-a:visited {
- color: var(--charcoal);
-}
-
-a:visited code {
- color: var(--slate);
-}
-
-header a:link,
-header a:visited,
-header a:active,
-nav a:link,
-nav a:visited,
-nav a:active {
- background-color: var(--balboa);
- color: var(--white);
- text-decoration: underline solid var(--balboa);
-}
-
-a:hover {
- transition: 0.25s;
- color: var(--white);
-}
-
-nav a:hover {
- transition: 0.25s;
- text-decoration: underline solid var(--slate);
-}
-
-p code {
- background-color: var(--charcoal);
- border-radius: var(--box-radius);
-}
-
-pre {
- white-space: pre-wrap;
- display: block;
- background-color: var(--charcoal);
- padding: 1em;
- border-radius: var(--box-radius);
- border-left: var(--box-border);
- border-right: var(--box-border);
- overflow: auto;
-}
-
-.description {
- background-color: var(--ruby);
- padding: 1em;
- border-radius: var(--box-radius);
- border-left: var(--box-border);
- border-right: var(--box-border);
-}
-
-h1,
-blockquote {
- font-style: oblique;
-}
-
-ul {
- list-style: none;
- padding: 0;
- margin: 0;
-}
-
-article ul li {
- padding: 0.5em;
-}
-
-ul li:before {
- content: "▸";
- padding-right: 0.5em;
-}
-
-article ol li {
- padding: 0.5em;
-}
-
-p img {
- display: block;
- margin-top: 1em;
- margin-left: auto;
- margin-right: auto;
- max-width: 75%;
- height: auto;
- border-radius: var(--box-radius);
- border-left: var(--box-border);
- border-right: var(--box-border);
-}
-
-iframe {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.list {
- overflow-x: auto;
-}
-
-.list table {
- width: 100%;
-}
-
-.list td,
-th {
- padding: 0.5em;
- text-align: left;
- border-bottom: 1px solid var(--charcoal);
-}
-
-.form {
- text-align: center;
-}
-
-.form input {
- font-size: 1em;
- margin-top: 1em;
- border-radius: 3em;
- box-sizing: border-box;
- padding: 0.5em;
- border: 0;
-}
-
-.form .description {
- display: none;
-}
-
-footer p {
- font-size: 0.75em;
-}
-
-.centered {
- text-align: center;
-}
-
-a.donation,
-a.donation:visited {
- background-color: var(--ruby);
- border-radius: var(--box-radius);
- padding: 1em;
- text-decoration: none;
- color: var(--slate);
- border-left: var(--box-border);
- border-right: var(--box-border);
-}
-
-a.donation:hover {
- color: var(--white);
+@media screen {
+ body {
+ max-width: 50em;
+ }
+
+ hr {
+ color: var(--white);
+ }
+
+ a:link {
+ color: var(--slate);
+ }
+
+ a:visited {
+ color: var(--charcoal);
+ }
+
+ a:visited code {
+ color: var(--slate);
+ }
+
+ header a:link,
+ header a:visited,
+ header a:active,
+ nav a:link,
+ nav a:visited,
+ nav a:active {
+ background-color: var(--balboa);
+ color: var(--white);
+ text-decoration: underline solid var(--balboa);
+ }
+
+ a:hover {
+ transition: 0.25s;
+ color: var(--white);
+ }
+
+ nav a:hover {
+ transition: 0.25s;
+ text-decoration: underline solid var(--slate);
+ }
+
+ p code {
+ background-color: var(--charcoal);
+ border-radius: var(--box-radius);
+ }
+
+ pre {
+ white-space: pre-wrap;
+ display: block;
+ background-color: var(--charcoal);
+ padding: 1em;
+ border-radius: var(--box-radius);
+ border-left: var(--box-border);
+ border-right: var(--box-border);
+ overflow: auto;
+ }
+
+ .description {
+ background-color: var(--ruby);
+ padding: 1em;
+ border-radius: var(--box-radius);
+ border-left: var(--box-border);
+ border-right: var(--box-border);
+ }
+
+ h1,
+ blockquote {
+ font-style: oblique;
+ }
+
+ ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ }
+
+ article ul li {
+ padding: 0.5em;
+ }
+
+ ul li:before {
+ content: "▸";
+ padding-right: 0.5em;
+ }
+
+ article ol li {
+ padding: 0.5em;
+ }
+
+ p img {
+ border-left: var(--box-border);
+ border-radius: var(--box-radius);
+ border-right: var(--box-border);
+ display: block;
+ height: auto;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 1em;
+ max-width: 75%;
+ }
+
+ iframe {
+ aspect-ratio: 16 / 9;
+ border-left: var(--box-border);
+ border-radius: var(--box-radius);
+ border-right: var(--box-border);
+ display: block;
+ margin-bottom: 1em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 75%;
+ }
+
+ .list {
+ overflow-x: auto;
+ }
+
+ .list table {
+ width: 100%;
+ }
+
+ .list td,
+ th {
+ padding: 0.5em;
+ text-align: left;
+ border-bottom: 1px solid var(--charcoal);
+ }
+
+ .form {
+ text-align: center;
+ }
+
+ .form input {
+ font-size: 1em;
+ margin-top: 1em;
+ border-radius: 3em;
+ box-sizing: border-box;
+ padding: 0.5em;
+ border: 0;
+ }
+
+ .form .description {
+ display: none;
+ }
+
+ footer p {
+ font-size: 0.75em;
+ }
+
+ .centered {
+ text-align: center;
+ }
+
+ a.donation,
+ a.donation:visited {
+ background-color: var(--ruby);
+ border-radius: var(--box-radius);
+ padding: 1em;
+ text-decoration: none;
+ color: var(--slate);
+ border-left: var(--box-border);
+ border-right: var(--box-border);
+ }
+
+ a.donation:hover {
+ color: var(--white);
+ }
+
+ button {
+ background-color: var(--white);
+ color: var(--balboa);
+ border-radius: var(--box-radius);
+ font-size: 1.5em;
+ font-family: "Iosevka Slab";
+ }
+}
+
+.row {
+ display: flex;
+ justify-content: space-between;
+}
+
+.set {
+ display: flex;
+ justify-content: space-evenly;
+}
+
+@media print {
+ body {
+ font-size: 10pt;
+ }
+
+ body, a {
+ color: #195970;
+ }
+
+ * {
+ margin: 6px;
+ }
+
+ .printhide {
+ display: none;
+ }
}
diff --git a/pages/hireme.php b/pages/hireme.php
index 781bed3..208903a 100644
--- a/pages/hireme.php
+++ b/pages/hireme.php
@@ -1,45 +1,12 @@
-<h1 style="text-align: center;">Carpenter Tech</h1>
-
-<p>
- My name is Adam Carpenter and I am a freelance software engineer and computer programming consultant. Are you...
-</p>
-
-<ul>
- <li>interested in writing simple software that efficiently and effectively solves a problem?</li>
- <li>an organization leader looking to transition from manual systems administration to developer-driven automation of time-sapping tasks?</li>
- <li>a developer looking to introduce your manager to this concept?</li>
- <li>an individual or small business looking to self-host your software?</li>
-</ul>
-
-<p>
- I run a business called <em>Carpenter Tech</em> that aims to help you answer these questions by offering the following services.
-</p>
-
-<ul>
- <li>Software engineering, custom software design, development, and deployment</li>
- <li>Feature &amp; bug "bounties" or consultation</li>
- <li>Programming, self-hosting, and IT consulting for small businesses</li>
- <li>Organizational systems administration and information technology automation consulting</li>
-</ul>
-
-<p>
- I am down to earth and enjoy solving problems. If you think I may be able to help solve yours,
-
-<ul>
- <li><a href="#cv">Review my CV below</a></li>
- <li><a href="/contact">Contact me to get started</a></li>
-</ul>
-</p>
-
-<hr />
+<h3 class="printhide">My name is</h3>
<?php
-include('./assets/cv.html');
+include('./assets/resume.html');
?>
-<p>
- <img src="https://nextcloud.53hor.net/index.php/s/zL2AJHwtCWLX2Eq/preview" />
-</p>
-
-<?php
-exit();
+<div class="printhide">
+ <hr />
+ <p>
+ <img src="https://nextcloud.53hor.net/index.php/s/zL2AJHwtCWLX2Eq/preview" />
+ </p>
+</div>
diff --git a/pages/now.php b/pages/now.php
index 31d6ccb..d60260d 100644
--- a/pages/now.php
+++ b/pages/now.php
@@ -13,26 +13,27 @@ if ("/now" == $_SERVER['REQUEST_URI']) {
<h3>Work</h3>
<ul>
- <li>Still a manager and software engineer at Automatic Data Processing, Inc.</li>
- <li>Investing in Argo blue-green rollouts to spend less time working ungodly hours testing and releasing new builds.</li>
- <li>Open to private contractor software development and website building projects.</li>
+ <li>Started a new role as an Engineering Manager at Azara Healthcare.</li>
+ <li>Rapidly upskilling in relational databases and Azure cloud offerings.</li>
+ <li>Findings ways to always leave code better than I found it.</li>
</ul>
<h3>Hobbies</h3>
<ul>
- <li>Fixed up Ol' Blue's fuel pump. Installed a new diaphragm and she's back on the road. Now investigating a clunky tie rod end.</li>
- <li>(Continual) posting practical programming tutorials to <a href="https://www.youtube.com/@carpentertutoring841">Carpenter Tutoring YouTube channel</a>.</li>
- <li>Translating a Computational Problem Solving course (CS 101) from Python to Rust. <a href="https://youtube.com/playlist?list=PLXGxiiv_uyipnFxS6c93UKuXc8mJzkl4h">First chapters are up on YouTube.</a></li>
+ <li>Ol' Blue needs a new power brake booster <em>badly</em>. The fun never stops!</li>
+ <li>Staying creative by learning digital art and studying introductory drawing techniques.</li>
+ <li>(Continual) posting practical programming tutorials and Hudson how-tos to YouTube.</li>
</ul>
<h3>Life</h3>
<ul>
- <li>Gearing up for a family reunion trip to Long Island.</li>
- <li>Returning soon to the "happy place" on Lake Erie with wife and puppy.</li>
+ <li>Amy and I are creating a chill backyard fire pit area.</li>
+ <li>Clementine can't wait to swim but would settle for fetching with no rain.</li>
+ <li>I'm getting pretty deep into Dungeons and Dragons now that I'm playing it for the first time.</li>
</ul>
<p>
- <em>Last updated 2023-07-18</em>
+ <em>Last updated 2024-05-07</em>
</p>
diff --git a/posts/2024-01-24-are-all-hudson-hornets-hard-to-start-in-winter.php b/posts/2024-01-24-are-all-hudson-hornets-hard-to-start-in-winter.php
new file mode 100644
index 0000000..7c151b0
--- /dev/null
+++ b/posts/2024-01-24-are-all-hudson-hornets-hard-to-start-in-winter.php
@@ -0,0 +1,8 @@
+<h1>Are all Hudson Hornets hard to start in winter?</h1>
+
+
+<p class="description">
+Nope! And Twin H-Power is just as easy to start as a single 2bbl! Don't forget to keep your carbs tuned up. Make sure your choke is closing when you set it and opening up as the engine builds temperature. The original choke and thermostat do their job just fine and make it easy to start and drive away without stalling in cold weather. As always, you can improve starting in cold weather by improving fuel atomization and making your spark hotter.
+</p>
+
+<iframe src="https://www.youtube-nocookie.com/embed/PXpImLYtrqM " frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
diff --git a/posts/2024-02-05-six-reasons-not-to-engine-swap-your-hudson.php b/posts/2024-02-05-six-reasons-not-to-engine-swap-your-hudson.php
new file mode 100644
index 0000000..b14fa22
--- /dev/null
+++ b/posts/2024-02-05-six-reasons-not-to-engine-swap-your-hudson.php
@@ -0,0 +1,13 @@
+<h1>Six reasons not to engine swap your Hudson Hornet</h1>
+
+
+<p class="description">
+I try to talk and drive at the same time. Lots of people engine swap their classic cars, but here's why I think I made the right choice keeping the original engine in my Hudson.
+</p>
+
+<iframe src="https://www.youtube-nocookie.com/embed/2xZQ7EgEjb0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+<iframe src="https://www.youtube-nocookie.com/embed/nGA2T6I-pfE" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+<iframe src="https://www.youtube-nocookie.com/embed/y0NpcdD-Gg0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+<iframe src="https://www.youtube-nocookie.com/embed/2luBF95WPMY" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+<iframe src="https://www.youtube-nocookie.com/embed/f-YmGxIcMDs" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+<iframe src="https://www.youtube-nocookie.com/embed/MCP3A2TC1HE" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
diff --git a/posts/2024-02-19-a-new-hudson-hornet-aluminum-cylinder-head.php b/posts/2024-02-19-a-new-hudson-hornet-aluminum-cylinder-head.php
new file mode 100644
index 0000000..cee7e31
--- /dev/null
+++ b/posts/2024-02-19-a-new-hudson-hornet-aluminum-cylinder-head.php
@@ -0,0 +1,9 @@
+<h1>A new Hudson Hornet aluminum cylinder head: Super Power Dome II Twin Vortex</h1>
+
+
+<p class="description">
+We got a newly engineered speed part for the Hudson!
+Dan White's Super Power Dome II with Twin Vortex chambers is the latest and greatest cylinder head for wide block Hudson engines (Post-1950 232, 262, and 308). Let's take a look and talk about the design, history, and applications.
+</p>
+
+<iframe src="https://www.youtube-nocookie.com/embed/I2eBJ-VhBpU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
diff --git a/posts/2024-04-30-qrilear-the-aarakocra.php b/posts/2024-04-30-qrilear-the-aarakocra.php
new file mode 100644
index 0000000..db7d8ad
--- /dev/null
+++ b/posts/2024-04-30-qrilear-the-aarakocra.php
@@ -0,0 +1,118 @@
+<h1>Qrilear the Aarakocra ranger: My introduction to DnD</h1>
+
+
+<p class="description">
+I've always been interested in the world building and gameplay of Dungeons and Dragons but a little intimidated by improv and role playing, especially as a newcomer to a table of experts. Luckily, some friends invited me to play in a new campaign with three other newcomers! So I did the right thing and picked a race and class to play based entirely on what looked cool with no real grasp of the traits, stats, and their implications. So far I've really enjoyed playing and it's made me want to really deep dive into the lore and character stories at the table. So I took my first stab at digital art and dusted off my creative writing hat. So here's some homemade art and backstory for my first DnD character.
+</p>
+
+<p>
+<img src="https://nextcloud.53hor.net/index.php/s/pSynYfDsYPpK2MP/preview" title="First attempt at digital art, by me"/>
+</p>
+
+<h2>Overview</h2>
+
+<p>
+Qrilear is an <a href="https://forgottenrealms.fandom.com/wiki/Aarakocra">Aarakocra</a>, or a birdfolk, in the Forgotten Realms world. He comes from the <a href="https://forgottenrealms.fandom.com/wiki/Star_Mounts">Star Mounts</a> way up in the High Forest. There he learned how to survive in the wild and survey the wide landscapes far below him. He's out searching for lost members of his tribe since their aerie was attacked and scattered by a rogue dragon. His search eventually takes him all the way to <a href="https://forgottenrealms.fandom.com/wiki/Baldur's_Gate">Baldur's Gate</a> where he meets a band of fighters, rogues, and wayward city folk. They all have their own agenda for seeking out a party, but they're quickly thrown into the thick of it and find profitable reasons to stick together. <a href="#backstory">Read on for the backstory</a>.
+</p>
+
+<h2>Physical and mental characteristics</h2>
+
+<p>
+Qrilear is just a little over five feet tall and weighs less than a hundred pounds. He's got a massive pair of wings which can hold him aloft with his gear and then some. At the start of the game (end of the backstory), he's eight years old. This makes him an adult Aarakocra, but still young. He stands on large, avian talons which make walking irksome.
+</p>
+
+<p>
+Wisdom takes precedent over intelligence; what Qrilear knows he's learned from experience and tradition, not from books. He has a knack for observation and survival but lacks the ability to pick up on new social cues quickly. He's a cunning fighter and capable of solving logical puzzles.
+</p>
+
+<p>
+Qrilear can't help but feel more than a little claustrophobic when he's in a dark dungeon, labrynthian castles, or deep caverns. He cannot swim, and is more than a little afraid to consider what he'd do if he couldn't jump up and escape to the air. He recognizes he isn't the strongest in the party but frankly his bones are hollow and he's more advantageous at a distance.
+</p>
+
+<h2>Abilities</h2>
+
+<p>
+Qrilear is a ranger, through and through. He can hunt and stalk prey, and navigate through thick forests and passes through tall mountain peaks. His innate ability to fly and his superb eyesight combined grant him all the tools he needs to succeed as a detailed cartographer. Not one to get lost, he's eager to explore and keenly remembers where he's been. He's got the maps to prove it.
+</p>
+
+<p>
+The <a href="https://forgottenrealms.fandom.com/wiki/Flight_lance">flying lance</a> is a favorite among birdfolk but Qrilear prefers his longbow. In the air he's a deadly shot and won't think twice if he feels like the party is threatened. A little magic goes a long way, and he knows just enough to be dangerous. One or two spells augment his archery with snares and incredible speed.
+</p>
+
+<h2>Personality traits, ideals, bonds, and flaws</h2>
+
+<p>
+Qrilear is insightful and a good judge of character. Conversely, he's still an immigrant to the big city and isn't completely tuned into civilization. While he speaks common he's not accustomed to slang or figures of speech. He can't make heads or tails of people living crammed into a large stony settlement so far from the cool, green woods back home. It's hard for him to trust strangers.
+</p>
+
+<p>
+The sky is his most natural habitat though, and Qrilear would rather spend the whole day off the ground. Like other birdfolk he can't help but pity the earth-stampers trudging their way through life without ever reaching for clouds or floating along on updrafts. Worldly possessions have a usefulness, but if you can't take it up with you then what's the point? Qrilear places no stock in wealthy or well-mannered folk.
+</p>
+
+<p>
+Qrilear is <a href="https://forgottenrealms.fandom.com/wiki/Neutral_good">Neutral Good</a>. He considers it each person's responsibility to make the most happiness for the whole tribe. His family back home is the most important thing in his life, even though his journey brought him far away from them. When he does place his trust in others, these feelings extend to allies of other races and backgrounds.
+</p>
+
+<h2>Organizations and allies</h2>
+
+<p>
+The Last Aerie is the refugee tribe Qrilear hails from. Their recolonization efforts involve seeking out scattered members and protecting their new nest. He's also loosely tied to the <a href="https://forgottenrealms.fandom.com/wiki/Nest_of_Retribution">Nest of Retribution</a>, a subset of the tribe bent on eliminating the very real threat of a second dragon attack before it happens. Via his search for information on lost Aarakocra and dragon sightings Qrilear joins up with The Collectors in Baldur's Gate.
+</p>
+
+<p>
+K'lua Raqia, nest guardian of the Last Aerie, is Qrilear's closest companion. Aarakocra from other aeries he considers kin, and other inhabitants of the elemental <a href="https://forgottenrealms.fandom.com/wiki/Elemental_Plane_of_Air">plane of air</a> e.g., <a href="https://forgottenrealms.fandom.com/wiki/Air_elemental">elementals</a> and genasi, warrant no suspicion. His mother and father, both long deceased, raised him and taught him most of what he knows about tradition, language, magic, and hunting.
+</p>
+
+<p>
+Qrilear worships the Winged Mother, <a href="https://forgottenrealms.fandom.com/wiki/Aerdrie_Faenya">Aerdrie Faenya</a>.
+</p>
+
+<h2>Enemies</h2>
+
+<p>
+<a href="https://forgottenrealms.fandom.com/wiki/Green_dragon">Green dragons</a>, and dragons as a whole are a never-ending threat. Qrilear bears no respect or admiration for vile, twisting wyrms invading the sky he occupies. Like most Aarakocra, Qrilear is a sworn enemy to <a href="https://forgottenrealms.fandom.com/wiki/Gargoyle">Gargoyles</a> and the other evils of elemental earth. He firmly believes the enemy of his friend is his enemy too, and won't hesitate to attack a stranger if he perceives a threat to the safety of the party.
+</p>
+
+<h2 id="backstory">Narrative backstory</h2>
+
+<p>Qrilear, <em>the watchful</em>, began life in the quiet aeries atop the Star Mounts. The skies were his birthright, as they were for all Aarakocra, and since his first day aloft he often left the serene, spiraling branches of the nest to catch warm currents rising up over the High Forest. This was to be truly free: to come and go as he pleased hundreds of feet above the clambering creatures in the thick woods below. His father, the shaman of the aerie, taught him the virtues of tribe unity and love for their ancestral home. Through him Qrilear learned language and customs, and even a little magic passed down from generation to generation. His father had a special communion with the Plane of Elemental Air, and recounted stories of his voyages there every night. When he was old enough Qrilear would one day have the privilege to follow his father into that mystical realm. Through his mother, the nestling learned the necessities of survival and daily life. An expert hunter, she kept the tribe well-fed and, if need arose, well-guarded against invasion. She was a talented weapon maker, and fashioned bows and lances for the rest of the tribe. Many days and nights she perched beside her son tracking with their wide, dark eyes. In dense forests and high up on rocky crags, they studied threats together. She showed him how to easily ward off intruders who attempted to climb the impossible peaks.</p>
+
+<p>Qrilear's first few years passed much like any other Aarakocra's. He took naturally to archery, and developed a talent for careful observation and plotting of the airways and isolated landmarks around him. The fledgling came of age after his third year and brimmed with confidence that no peak existed which he could not surmount. His adult plumage, a combination of stark white and golden rust, made him stand out from most of his vibrant and colorful kin. Fearless and assured, he flocked to another tribe member, K'lua Raqia. Like a <em>raking crosswind</em>, K'lua kept Qrilear's constant attention. She was a dutiful nest guardian, sworn to protect the tribe's clutch with her life. Lance in hand, she carefully scanned the horizon with bright yellow eyes. She was the last wall of defense against invaders for egg and hatchling alike. While off duty she indulged in races and games of tag, whirling around in the clouds overhead with Qrilear. Their adolescence began tranquil and pleasant, and they aspired to reach new heights.</p>
+
+<p>Woe struck the pair like a bolt of lightning. An ancient dragon, its scales a sickly amalgam of emerald and obsidian, erupted out of the darkest pits down inside the Star Mounts. It dove through the sky toward the peaceful nest village. With bloodlust in its cold heart the dragon tore through the aerie. The tribe fought back, swooping through the air in a vain attempt to ward off the vile wyrm, but the fiery breath overpowered the Aarakocra and in a flash the sanctuary was an inferno. Flames roared and destruction reigned.</p>
+
+<p>Miles away, Qrilear gently whirled over the forest, scouting and studying the trees below. On a whim he turned back toward home to see an orange glow and plumes of smoke. He bolted towards the aerie, dodging downdrafts and scooping air, pushing and beating his wings until they throbbed with fatigue. His terror at the massacre was second only to his resolve to get his loved ones to safety. At the village he circled amidst the chaos searching for his parents, for K'lua, for anyone who may have survived the onslaught. The dragon was gone but the signs of its desecration were everywhere: the curling vines of the nest were in ruin and fallen Aarakocra lay all around. Qrilear found his parents, their lives snuffed out with the last remnants of his home. With the aerie still smoldering, he had no choice but to take to the skies as a nomad. Alone and grieving, he traversed turbulent storms to the northeast, roaming the woods and hunting to keep from going hungry. In isolation he perfected stalking his prey and living off the land. When he marked his quarry he was sure to get it. His survival assured, he turned to the art of map-making and exploration, surveying the broad forests and deep green valleys between the peaks he rested on. His mind often wandered toward memories of K'lua, his parents, and the remote hope of raising the village from the ashes again.</p>
+
+<p>Two long years passed and The Lady Aerdrie Faenya smiled upon the winged ranger. Miraculously, there were other survivors! Qrilear encountered scouts working their way to and fro over the Star Mounts. They told him that over the past year more scattered Aarakocra were returning to the area. They began a new settlement, further south along the Unicorn Run. In Khle'cayre, the <em>Last Aerie</em>, the nest guardian greeted Qrilear. K'lua was alive! Heralded as a hero among the tribe, she escaped the night of the desolation carrying eggs to safety. His heart swelled not with anguish but with pure elation, and he praised the Winged Mother for bringing him together with K'lua again. She, along with the remaining members of the tribe yearned too for the restoration of their old home. They embarked on a quest to gather the scattered survivors and build up their new home. Qrilear pledged himself to the cause, vowing to seek out and bring back other lost members of the tribe. His effort was not in vain. Over the better part of a year, he reunited nine lost Aarakocra with the rest of the growing tribe. His prowess for exploration learned in the wilderness paid off: he rescued more refugees than all the other seekers had gathered to date.</p>
+
+<p>Day after long day the vigilant Qrilear crossed over the high forest, sweeping through the sky and directing his unblinking eyes, not down into the woods, but all around him and up at the highest rocky peaks stretching through the clouds. His new purpose was rejuvenating. His mind was focused and his chest surged with determination. At the close of every long journey the weary seeker returned back to the aerie to kindle his relationship with K'lua. Their bond grew stronger and their friendship blossomed into a beautiful coupling. Their union, originally rooted in mission, turned to love.</p>
+
+<p>Qrilear's scouting missions ultimately guided his eyes to the Lost Peaks. To his great surprise, when he touched down he met three survivors there occupying a temporary encampment. They called themselves the Nest of Retribution. In turn the three preached their hatred of the foul dragon which consumed their old lives and their quest to end its reign of terror. They persuaded Qrilear the dragon was not a chance calamity, but that it must have a permanent home deep in the surrounding mountains. Death, they claimed, would surely befall the rest of the survivors when the dragon returned. Unless they attacked first, everything Qrilear was working toward would be lost. The prospect of K'lua sharing his parents' fate was devastating. The dragon had to be lured out of its dark hole and dealt with like the twisting serpent it was. The Nest of Retribution pleaded for Qrilear's aid. They recognized the talented tracker's skill and sought his help discovering the dragon's whereabouts and plotting an attack. If he could map out the region with reported dragon sightings, they might stand a chance at discovering its horde. They were unprepared to kill a dragon and needed to learn how to look for weaknesses and what tactics to use. The three vengeful Aarakocra commissioned Qrilear to collect that information while they recruited a fighting force.</p>
+
+<p>On his moonlit flight back to the Last Aerie, Qrilear beat his wings cautiously. The skies around him felt threatening, not breathtaking. Old pangs of bereavement rose up inside him. His downy chest had not felt the full weight of the tragedy since before his reunion in the Last Aerie. He struggled to reconcile his new charge with his ongoing duty. There were uncharted territories to the south which had to be accounted for. Strange, flat lands full of Terrestrials might be rich with information on dragon sightings. The Aarakocra didn't interact much with outsiders; once or twice in isolation he met the passing elf ranger or looked on as a clan of orcs migrated around the High Forest. Lost in thought, Qrilear drifted off course until he spotted K'lua flying toward him in the distance. He shared his conflict with his partner. She disagreed with the Nest of Retribution's certainty about a repeat attack. After all, the tribe existed with relative peace for generations. Their place, she argued, was here protecting what they had regained, not in unknown crevices rousing the terror they narrowly escaped. Qrilear disputed that there were many dark places littering the neighboring peaks. Their safety was not guaranteed, and their numbers still dwindled from the Star Mount aeries' original strength. Besides, they needed to start searching further south for wayward Aarakocra. It couldn't hurt to document what he found along the way.</p>
+
+<p>The couple glided over the ebbing lines of the river and eventually perched atop high trees in the dense forest. K'lua couldn't be convinced. Her parents alive and well, she couldn't fully understand her mate's drive to leave home and his impulse to hunt the dreaded beast which brought doom and ruin. She wasn't prone to wander like he was, and she wasn't raised with a tracker's instinct as a teacher. She studied his heart-shaped face. Still, Qrilear was not reckless and he shared his father's wisdom. At length, she conceded to the expedition, but maintained that as a sentry she couldn't leave the tribe for so long. In each other's arms, the two Aarakocra spent the rest of the night alone together.</p>
+
+<p>The next day Qrilear prepared for his solo journey. He reassured K'lua that he would remain vigilant, and vowed to return in one piece regardless of what he found. He promised to leave behind word of his journey as he moved from one region to another. The stoic-presenting Aarakocra donned his traditional leather armor, gathered his ink and quills, and bundled some rations together in his pack. Bow in hand and a full quiver of arrows strapped to his thigh, he embraced K'lua once more before spreading his wings and climbing aloft. He sailed south along the run, far past the edge of the High Forest, locking his wings in place and riding the wind around the valleys. K'lua watched vigilantly until he was far beyond her sight.</p>
+
+<p>In the foothills Qrilear found no winged kin or signs of the dragon's lair. Far from the deep woods and high peaks of home, he saw large herds of beasts moving across the landscape. Long circuitous paved paths crossed to and fro across the flat land below, most of them terminating at the coast. His eyes had spotted the vast expanse of water from hundreds of miles away, but now it grew larger and closer than he had ever seen it. Caravans and lone travelers dotted the roads, and with cautious suspicion Qrilear began to approach the earth-treading outsiders. He begrudgingly accepted that his work would move faster if he could direct his search with knowledge from others. The common he learned from his father was limited, but his beak managed to carefully construct words to interact with a few caravans outside of the place called Waterdeep. The pilgrims appeared somewhat surprised and even a little amused at the birdfolk's appearance, but it wasn't enough to dissuade their discussion. They recounted stories of faraway places and dragon sightings or encounters throughout their many years of traveling. One thread existed among all of his meetings: if you want to find refugees, look in Baldur's Gate. The walled city was apparently enormous and populated with all walks of life. Intellectuals, fighters, rogues, and influencers all walked its streets, even just to pass through. People flooded in from other cities, carrying their own burdens and destinies.</p>
+
+<p>Qrilear was hesitant, for the journey would be much further south than he had anticipated. He convinced himself he needed to find leads quickly, and decided this was his best course of action. He left word with the local travelers: should anyone from his tribe come looking for him they would know where to find him. He struck his wings with conviction as he navigated further south. For the first time in his life, he tasted the salty breeze as he soared over the warm ocean. His wings rested comfortably thanks to the constant supply of air flows holding him aloft. Down below, deep blue waters rolled and lapped up against small islands and banks of submerged land. Qrilear observed large hollowed out tree trunks with enormous makeshift wings, full of humanoid figures scrambling too and fro. The winged voyager thought it a peculiar way to make such a treacherous voyage. A good tailwind sped up the lone Aarakocra's travels and he sighted the mouth of the huge river a day sooner than he reckoned. A few miles up river the city was in clear view. High stone walls rose up out of the soil below, like great jaws protruding from the earth. The place looked like a massive unfinished cage. Qrilear loathed the thought of landing in what looked like a huge craggy trap. He followed the river as far as he could until the stone walls gave way. The bank of the river was covered in long wooden paths and a vast expanse of dwellings stretched out beyond the shore. The ranger hunted for a quiet spot to touch down. There wasn't one.</p>
+
+<p>Qrilear managed to awkwardly alight in the road without hitting the bystanders, despite a flock of inhabitants naively staring as the great pair of talons hovered within reach of them. All around were humans, elves, and other humanoid figures he didn't recognize. Some looked orc-like but seemed harmless enough. His guard did not drop. Everywhere the people hustled to and fro, some carrying large parcels and many (thankfully) ignoring his existence. Doing his best not to bump into one of the stampers, he clumsily walked deeper into the settlement. In a clearing between dwellings, hagglers bartered all kinds of strange foods, blades, and fine hides. Shiny trinkets, glittering and glinting in the light, caught Qrilear's eye. Realizing he was getting distracted, he peered around for anyone who looked like they might know something of value. His unblinking eyes traced the crowd and landed on a couple of apparent outsiders. They were loitering around a couple of signs posted to a wall. Qrilear approached the strangers and endeavored to find out where they were from and whether they had any news of dragons.</p>
+
+<p>One of the strangers laughed, turned around, and looked the birdfolk up and down. He pointed at the sign and told the flat, beaked face if he was looking for excitement this was going to be his best bet. Qrilear scanned the parchment:</p>
+
+<blockquote>
+ <p>Job Title: Entry-Level Adventurer
+...
+Participating in thrilling quests, expeditions, and dungeon delves.
+...
+Proficient combat skills and mastery of at least one adventuring class.
+...
+To apply for the position of Entry-Level Adventurer with our organization, please meet our representative, Elix, at The Gypsy and Goblets at Noon.</p>
+</blockquote>
+
+<p>A company of adventurers then. Qrilear was not familiar with dark caves and never encountered larger beasts alone. Could he find his own way? Sure, he came to this place to gather information on his people and his foe. But a traveling party? What could their own selfish impulses for joining be? Would they care for each other the way he was certain his tribe would? Did he have a choice? He was in a foreign land and did not know which paths to take or who to trust. The stranger lifted an eyebrow when the birdfolk immediately asked for directions to The Gypsy and Goblets. Qrilear committed the instructions to memory and set off again, finding a rhythm as he hobbled his talons and bobbed along on the stony street. He found the dwelling right where the stranger said it would be. A sign hung out over the street depicting a human woman pouring out a cup. Beneath the sign rested a medium-sized wooden structure with warm light emitting from a few dirty windows. A few blurry figures stirred inside, one very enormous towered over the rest. Another had horns protruding from its head.</p>
+
+<p>The lone Aarakocra took a breath in front of the door. His feathered shoulders slouched with the weight of his task and the hopes of his people. For years he could rely on himself to survive and protect what he had. Things were different now. To endure he must learn to trust others; to put his faith in K'lua back in the Aerie and, yes, even to put his own personal safety into the hands of outsiders. Qrilear straightened his back and flexed his wings instinctively. He pushed open the door and entered, inching him closer to a destiny that would see his new tribe rise from the ashes.</p>