<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ryan Tomlinson</title><link>https://yamlinson.com/</link><description>Recent content on Ryan Tomlinson</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 03 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yamlinson.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Trail Grazer Photo Gallery</title><link>https://yamlinson.com/project/trail-grazer/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://yamlinson.com/project/trail-grazer/</guid><description>&lt;p&gt;&lt;a href="https://trailgrazerphoto.com/"&gt;Trail Grazer Photo&lt;/a&gt; is a custom photo gallery
I use to share some of the photos I&amp;rsquo;ve taken.&lt;/p&gt;
&lt;p&gt;It is served as a static site via S3 and CloudFront. The site is built using Nuxt
and fully automated through a CI pipeline on my local Forgejo runner.
Photos are stored in S3. When new photos are added to the bucket, a Lambda job
automatically generates thumbnails and extracts EXIF data.
AWS infrastructure and CloudFlare DNS are managed as code using OpenTofu.&lt;/p&gt;</description></item><item><title>Gittin' Out of Trouble</title><link>https://yamlinson.com/posts/gittin-out-of-trouble/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://yamlinson.com/posts/gittin-out-of-trouble/</guid><description>&lt;p&gt;Git is one of those tools where you can get by on a surprisingly small set of commands most of the time,
and then occasionally find yourself in a situation where you&amp;rsquo;re not sure what state anything is in
or how to get back to somewhere safe.
This is a reference for both of those scenarios.&lt;/p&gt;
&lt;h2 id="the-basics"&gt;The Basics&lt;/h2&gt;
&lt;p&gt;The commands I use most often, roughly in order of frequency:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git status
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git add &amp;lt;file&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git add -p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git commit -m &lt;span style="color:#e6db74"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git push
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git pull
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git log --oneline
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git log --oneline --graph
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git diff
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git diff --staged
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git stash
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git stash pop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;git add -p&lt;/code&gt; lets you stage changes interactively, hunk by hunk.
This is helpful when you make several unrelated changes to a file and want to split them across commits.&lt;/p&gt;</description></item><item><title>Platform Foundations</title><link>https://yamlinson.com/project/platform-foundations/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><guid>https://yamlinson.com/project/platform-foundations/</guid><description/></item><item><title>Writing a DNS Client</title><link>https://yamlinson.com/posts/dns-client-go/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><guid>https://yamlinson.com/posts/dns-client-go/</guid><description>&lt;p&gt;This post is part of a series, &lt;a href="https://yamlinson.com/project/byte-sized-go/"&gt;Byte-Sized Go&lt;/a&gt;,
in which I tackle mini-projects related to network programming in Go.&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;As part of another project, I was wanting to implement a simple DNS server from scratch.
I decided to write a simple client first as a way to work out the basic shapes I would need for the server
(parsing flag bits in the header, reading/writing bytes over the wire and encoding/decoding them into Go structs).
Working through this project ended up being even more enlightening than I expected.
Many of the pieces of DNS I had taken for granted or completely overlooked stood out in a new light.&lt;/p&gt;</description></item><item><title>Byte-Sized Go</title><link>https://yamlinson.com/project/byte-sized-go/</link><pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate><guid>https://yamlinson.com/project/byte-sized-go/</guid><description/></item><item><title>Automating Arch Linux with Ansible</title><link>https://yamlinson.com/posts/automating-arch/</link><pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate><guid>https://yamlinson.com/posts/automating-arch/</guid><description>&lt;p&gt;This is a quick writeup for &lt;a href="https://github.com/yamlinson/arch-btw"&gt;arch-btw&lt;/a&gt;,
an Ansible project I use to manage the configuration of my Arch Linux workstations.&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;A while back, I decided to take the plunge and install Arch Linux on my main PC.
After leaving Windows for GNU/Linux a couple years ago, I bounced around between a few different Linux distros.
Ultimately, my decision to move to Arch came down to two main reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Frustration with the bloat included in most distros&lt;/li&gt;
&lt;li&gt;Wanting to learn Linux a little closer to the metal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don&amp;rsquo;t mean for this to be a jab at any specific distribution, so I&amp;rsquo;m not going to mention any.
I don&amp;rsquo;t think any major distribution is &amp;ldquo;bad&amp;rdquo; at all.
In fact, I&amp;rsquo;m pretty amazed at how many features their developers are able to pack into them.
I just reached a point where I wanted more control over my operating system
and the experience of customizing it to be exactly what I want (and nothing more.)&lt;/p&gt;</description></item><item><title>Workstation Automation</title><link>https://yamlinson.com/project/workstation-automation/</link><pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate><guid>https://yamlinson.com/project/workstation-automation/</guid><description>&lt;p&gt;Because life&amp;rsquo;s too short to reconfigure your terminal by hand every time you switch machines.
This is the umbrella for everything that keeps my development environment consistent, automated,
and exactly how I like it — wherever I&amp;rsquo;m working.&lt;/p&gt;</description></item><item><title>World Info</title><link>https://yamlinson.com/project/world-info/</link><pubDate>Fri, 07 Mar 2025 00:00:00 +0000</pubDate><guid>https://yamlinson.com/project/world-info/</guid><description>&lt;p&gt;This is a simple frontend web project which started as an Angular app for one of my classes in college.
I later rewrote it in Vue and deployed it to my personal site via AWS S3 and CloudFront.&lt;/p&gt;
&lt;p&gt;Functionality was inconsistent but mostly working when I last checked.
Maintaining this page isn&amp;rsquo;t very high priority for me, but I&amp;rsquo;ll likely try to fix it up
at some point, especially if it breaks completely.&lt;/p&gt;</description></item><item><title>Oats</title><link>https://yamlinson.com/project/oats/</link><pubDate>Sun, 01 Sep 2024 00:00:00 +0000</pubDate><guid>https://yamlinson.com/project/oats/</guid><description>&lt;p&gt;Oats: One-at-a-Time To-Do&amp;rsquo;s&lt;/p&gt;
&lt;p&gt;I started this project pretty early into my Go journey as a somewhat practical toy project.
I still like the concept, but have found other organizational habits that work better for me
(mainly a rough GTD implementation in Joplin).&lt;/p&gt;
&lt;p&gt;It covers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data persistence with SQLite&lt;/li&gt;
&lt;li&gt;Command line options with Cobra&lt;/li&gt;
&lt;li&gt;XDG directory standards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/yamlinson/oats"&gt;GitHub&lt;/a&gt;&lt;/p&gt;</description></item><item><title>About Me</title><link>https://yamlinson.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yamlinson.com/about/</guid><description>&lt;p&gt;I&amp;rsquo;m a platform engineer and software developer interested in the systems that other systems run on:
infrastructure automation, distributed systems, container orchestration,
and the tooling that makes all of it more reliable and observable.&lt;/p&gt;
&lt;p&gt;I like working close to the metal. Right now that means building a distributed systems playground in Go:
a custom DNS implementation, a distributed key-value store, a container runtime, a chaos injection layer,
and a custom observability platform, all wired together and exposed through a relay on AWS
so the whole system is visible from the internet.&lt;/p&gt;</description></item></channel></rss>