<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://sean.taylormadetech.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://sean.taylormadetech.dev/" rel="alternate" type="text/html" /><updated>2026-03-04T23:31:12+00:00</updated><id>https://sean.taylormadetech.dev/feed.xml</id><title type="html">Sean’s Blog</title><subtitle>Just a simple blog.</subtitle><entry><title type="html">Weekly Brain Dump #12</title><link href="https://sean.taylormadetech.dev/2026/03/05/weekly-brain-dump-12.html" rel="alternate" type="text/html" title="Weekly Brain Dump #12" /><published>2026-03-05T00:00:00+00:00</published><updated>2026-03-05T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/03/05/weekly-brain-dump-12</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/03/05/weekly-brain-dump-12.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#arcade-stick-modding">Arcade Stick Modding</a>:</strong> Modding my 8BitDo arcade stick</li>
  <li><strong><a href="#rails-templates-and-generators">Rails Templates and Generators</a>:</strong>
Learning about Rails templates and generators</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="arcade-stick-modding">Arcade Stick Modding</h2>

<p>I decided to finally pull the trigger on modding my <a href="https://www.8bitdo.com/arcade-stick/">8BitDo Arcade
Stick</a> and making it a <a href="https://glossary.infil.net/?t=Leverless">leverless</a> for playing <a href="https://store.steampowered.com/app/3328480/TETRIS_THE_GRAND_MASTER_4_ABSOLUTE_EYE/">Tetris the Grand Master
4 -Absolute Eye-</a>. I was inspired to do this because I started playing on
my keyboard again and instantly played so much better than on a joystick. I’ve
also wanted to upgrade the buttons to proper <a href="https://www.sanwa-d.co.jp/en/">Sanwa</a> ones too.</p>

<p>I’ve ordered the parts off of <a href="https://www.aliexpress.com/">AliExpress</a> as I’ve had good results getting
my other arcade controllers from there.</p>

<p>I’ve ordered the <a href="https://www.aliexpress.com/item/1005007407541559.html">SITONG Mixbox-C</a> and some nicely coloured <a href="https://www.aliexpress.com/item/4000398260706.html">Sanwa
OSBF-30</a> buttons. I’ll be sure to post updates when they’re here and
installed. I’m considering making it into <a href="https://youtube.com">YouTube</a> video.</p>

<div class="grid-50">
  <div class="grid-item">
    <h3>SITONG Mixbox-C</h3>
<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-12/sitong_mixbox_c.jpg" target="_blank">
    <img alt="A small device with 4 arcade buttons spaced out in the hitbox layout." src="/data/weekly-brain-dump-12/sitong_mixbox_c.jpg" title="A small device with 4 arcade buttons spaced out in the hitbox layout." />
  </a>
</figure>

  </div>
  <div class="grid-item">
    <h3>Sanwa OSBF-30</h3>
<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-12/sanwa_osbf30.jpg" target="_blank">
    <img alt="Sanwa OSBF30 push buttons." src="/data/weekly-brain-dump-12/sanwa_osbf30.jpg" title="Sanwa OSBF30 push buttons." />
  </a>
</figure>

  </div>
</div>

<h2 id="rails-templates-and-generators">Rails Templates and Generators</h2>

<p>I’ve just started looking into <a href="https://guides.rubyonrails.org/v8.1/generators.html#application-templates">Rails Templates</a> and am
honestly fairly disappointed with how limited they are. I’m hoping I’m just not
seeing something and won’t have to write a lot of code to make them do all the
modifications I want.</p>

<p>I also plan to look into <a href="https://guides.rubyonrails.org/v8.1/generators.html">Rails Generators</a> to really speed up
my development for basic create/read/update/destroy things.</p>

<p>My rough plan for this is to convert my expense tracking app into a Rails app as
I’m a bit annoyed by the poor performance of my <a href="https://github.com/HellRok/Poros">Poros</a> gem.</p>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://www.0xsid.com/blog/online-tld-is-pain">Never Buy A .online Domain</a>:</strong>
Horrifying how much power google and centralised systems can have.</p>

<p><strong><a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/setHTML">Element: setHTML() method</a>:</strong>
<code class="language-plaintext highlighter-rouge">setHTML</code> is exciting, no longer is HTML sanitization an extra dependency and is
hopefully going to be in the JavaScript standard library.</p>

<p><strong><a href="https://hacks.mozilla.org/2026/02/making-webassembly-a-first-class-language-on-the-web/">Why is WebAssembly a second-class language on the web?</a>:</strong>
Making WASM a first class language is very exciting, it’d finally mean a real
alternative to JavaScript</p>

<p><strong><a href="https://eieio.games/blog/secure-massively-multiplayer-snake/">snakes.run: rendering 100M pixels a second over ssh</a>:</strong>
Performance improvements of snake over ssh and taught me some ANSI escape tricks
I didn’t know.</p>

<p><strong><a href="https://anykeyh.hashnode.dev/3-years-of-crystal-lang-programming-the-good-the-bad-the-ugly">3 years of Crystal Lang programming: The good, the bad, the ugly</a>:</strong>
Looking into Crystal ORMs I found this interesting breakdown of Crystal.</p>

<p><strong><a href="https://www.youtube.com/watch?v=iV6Ky3MOFT4">Your first PICOTRON cartridge in 10 minutes </a>:</strong>
A 10 minute intro to Picotron, a really cool little fantasy computer.</p>

<p><strong><a href="https://www.blogsareback.com/guides/enable-cors">Enable CORS for Your Blog</a>:</strong>
Enable browsers to fetch your rss feed directly, I’ll hopefully get this done
for my blogs soon.</p>

<p><strong><a href="https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html">Build your own Command Line with ANSI escape codes</a>:</strong>
A cool intro to what’s possible with ANSI escape codes and how to build a REPL
with it.</p>

<p><strong><a href="https://jakelazaroff.com/words/an-interactive-intro-to-crdts/">An Interactive Intro to CRDTs</a>:</strong>
A fun intro into CRDTs with lots of interactive examples.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #11</title><link href="https://sean.taylormadetech.dev/2026/02/26/weekly-brain-dump-11.html" rel="alternate" type="text/html" title="Weekly Brain Dump #11" /><published>2026-02-26T00:00:00+00:00</published><updated>2026-02-26T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/02/26/weekly-brain-dump-11</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/02/26/weekly-brain-dump-11.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#taylor-community">Taylor Community</a>:</strong> Working on the Taylor Community
site continues anew</li>
  <li><strong><a href="#building-a-programming-language">Building a Programming Language</a>:</strong> The
bad thoughts win and I look into building a language</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="taylor-community">Taylor Community</h2>

<p>Now that I got <a href="https://github.com/wardencommunity/warden">warden</a> working with <a href="https://hanamirb.org/">Hanami</a> I’ve decided to go back to my
<a href="https://rubyonrails.org/">Rails</a> implementation of the community site. While I’ve enjoyed Hanami I’m
looking to have a high velocity with this so sticking with tooling I know is
going to be better. I will absolutely revisit Hanami later as I liked a lot of
the decisions they’ve made and found it a great experience.</p>

<p>Going back to an old codebase always means I get to do one of my favourite
things, upgrading libraries! I’m not even kidding, I get a lot of pleasure out
of bumping <a href="https://www.ruby-lang.org/en/libraries/">gems</a> and doing Rails upgrades. So now it’s running on Rails 8.1.</p>

<p>I decided to take it a step further though and rewrite the entirety of the <a href="https://github.com/ruby/erb">erb
templates</a> I was using into <a href="https://www.phlex.fun/">Phlex</a>. I find using Phlex a much nicer
experience than writing erb templates.</p>

<h2 id="building-a-programming-language">Building a Programming Language</h2>

<p>I’ve gotten the itch to learn how to make a programming language. It’s mostly
for the learning experience. I’m curious how all the parts come together to
create a binary. I’m familiar with <a href="https://en.wikipedia.org/wiki/Lexical_analysis">lexers</a> and <a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree">abstract syntax trees</a>
(AST) but I’m excited to learn how an AST turns into a language-independent
intermediate representation and then into actual machine code for different
platforms.</p>

<p>I’ve been looking at the <a href="https://createlang.rs/">createlang.rs</a> website and trying to use it in
conjunction with <a href="https://kschiess.github.io/parslet/">parslet</a> to do this in <a href="https://www.ruby-lang.org/">Ruby</a>. This is because ideally I’d
like to design a language fairly inspired by Ruby.</p>

<p>I actually have part of a blog post written about my thoughts and complaints
about current languages that I think could be interesting. I might try and focus
on getting that finished while doing this project.</p>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://yieldcode.blog/post/farewell-rust/">Farewell, Rust</a>:</strong> Another
article about how low level languages aren’t ideal for writing web services.</p>

<p><strong><a href="https://bvisness.me/high-level/">High-level is the goal</a>:</strong> The premise here
is that high level languages have nicer tooling and if low level languages had
better tooling more people would write efficient software. I dunno if I
completely agree with the article, but it’s interesting.</p>

<p><strong><a href="https://robbyonrails.com/articles/2026/02/18/most-developers-dont-build-new-things/">Most Developers Don’t Build New
Things</a>:</strong>
A nice reminder that most software development work is overwhelmingly maintenance
and not greenfield projects.</p>

<p><strong><a href="https://www.youtube.com/watch?v=qht68vFaa1M">How I made a shooter game in 64 KB</a>:</strong>
Wow, this was amazing. So many amazing tricks including “just writing a new
language because it’s more effecient”.</p>

<p><strong><a href="https://github.com/chadowo/mruby-examples">mruby-examples</a>:</strong> A repository
for examples of how to use <a href="https://mruby.org/">mruby</a> - which is what <a href="https://taylormadetech.dev">Taylor</a> uses for scripting.</p>

<p><strong><a href="https://blog.discourse.org/2026/02/how-we-fixed-yaml-comment-preservation-in-ruby-and-why-we-sponsored-it/">How We Fixed YAML Comment Preservation in Ruby (And Why We Sponsored
It)</a>:</strong>
I had no idea this was possible.</p>

<p><strong><a href="https://naildrivin5.com/blog/2026/02/23/the-death-of-the-software-craftsman.html">The Death of the Software
Craftsman</a>:</strong>
A great take on the current state of software development with regards to LLMs.
I’m not sure I agree entirely with the three options at the end, but it’s
interesting.</p>

<p><strong><a href="https://gbstudiocentral.com/spotlight/roguecraft-gb/">Roguecraft GB</a>:</strong>
The process of porting Rogecraft DX to the Gameboy Colour, a truly impressive
feat of engineering.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #10</title><link href="https://sean.taylormadetech.dev/2026/02/19/weekly-brain-dump-10.html" rel="alternate" type="text/html" title="Weekly Brain Dump #10" /><published>2026-02-19T00:00:00+00:00</published><updated>2026-02-19T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/02/19/weekly-brain-dump-10</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/02/19/weekly-brain-dump-10.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#gitsigns">gitsigns</a>:</strong> Switching git plugin for Neovim</li>
  <li><strong><a href="#hanami">Hanami</a>:</strong> Continuing my Hanami learning</li>
  <li><strong><a href="#jumpy-alien">Jumpy Alien</a>:</strong> Improved the game design</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="gitsigns">gitsigns</h2>

<p>I have been using <a href="https://github.com/airblade/vim-gitgutter">vim-gitgutter</a> for many years and it work great for what I
wanted, displaying diff symbols on the side of my editor. After seeing a
coworker bring up a git blame side pane and jump through the history of that
file right in the editor I knew it was time to upgrade my <a href="https://git-scm.com/">git</a> plugin for
<a href="https://neovim.io/">Neovim</a>.</p>

<p>After hunting around for a while and ruling out more complicated plugins I came
across <a href="https://github.com/lewis6991/gitsigns.nvim">gitsigns</a> and almost ignored it because I thought it couldn’t do what I
needed. Thankfully I actually installed it to test it out and saw that it can
jump through history easily.</p>

<div class="grid-50">
  <div class="grid-item">
    <h3>vim-gitgutter</h3>
    <figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-10/vim-gitgutter.png" target="_blank">
    <img alt="A Neovim session showing green + to the left of the line
    numbers where changes have occurred." src="/data/weekly-brain-dump-10/vim-gitgutter.png" title="A Neovim session showing green + to the left of the line
    numbers where changes have occurred." />
  </a>
</figure>

  </div>

  <div class="grid-item">
    <h3>gitsigns</h3>
    <figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-10/gitsigns.png" target="_blank">
    <img alt="A Neovim session showing green lines to the left of the line
    numbers where changes have occurred." src="/data/weekly-brain-dump-10/gitsigns.png" title="A Neovim session showing green lines to the left of the line
    numbers where changes have occurred." />
  </a>
</figure>

  </div>
</div>

<p>This is honestly a pretty terrible comparison, but this is the only feature of
vim-gitgutter that I used before switching. Now that I’m using gitsigns I can do
some cool spelunking into my code’s history.</p>

<div class="post--video">
  <video aria-describedby="gitsigns-video-description" controls="" id="gitsigns-video" preload="metadata" src="/data/weekly-brain-dump-10/gitsigns.webm">
    If your browser doesn't support the video tag, you can
    <a href="/data/weekly-brain-dump-10/gitsigns.webm">download the video</a>.
  </video>
  <div id="gitsigns-video-description" class="post--video--description">
    <p>
  A terminal opening up a Neovim session for my init.lua configuration. I then
  highlight the line with the gitsigns plugin and after a short delay you see
  the commit message for that line appear in the virtual text to the right.
</p>

<p>
  I then open up the blame sidebar and reblame the file at the parent commit.
  I now highlight the line with my vim-gitgutter plugin and after a short delay
  the commit message from 2 years ago appears in the virtual text to the right.
</p>
  </div>
</div>

<p>I did hit the error</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Error running git-blame: fatal: could not open object name list: .git-blame-ignore-revs
</code></pre></div></div>

<p>with gitsigns though, if you use the <code class="language-plaintext highlighter-rouge">ignoreRevsFile</code>
global configuration setting in git but that file doesn’t always exist in your
repositories, it will error when you open Neovim. I found the fix was to tell
git that the file is optional.</p>

<div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[<span class="n">blame</span>]
  <span class="n">ignoreRevsFile</span> = :(<span class="n">optional</span>).<span class="n">git</span>-<span class="n">blame</span>-<span class="n">ignore</span>-<span class="n">revs</span>
</code></pre></div></div>

<h2 id="hanami">Hanami</h2>

<p>I’ve finally got <a href="https://github.com/wardencommunity/warden">warden</a> integrated into my <a href="https://hanamirb.org/">Hanami</a> application. It was quite
the learning experience and I plan to write a full blog post on it soon so I’ll
keep this brief.</p>

<p>I mostly enjoyed the experience but it’s definitely <em>very</em> different from what
I’m used to with <a href="https://rubyonrails.org/">Rails</a>. I think the part I’m having the hardest time adjusting
to is the database layer as I’m actually pretty fond of <a href="https://guides.rubyonrails.org/active_record_basics.html">ActiveRecord</a>.</p>

<p>You can see the <a href="https://github.com/HellRok/community/commit/3de4b7cb23b43ab5b1a3cadf5730bfdffd3841a0">full commit over on
GitHub</a>
if you’re curious how it went.</p>

<p>It’s an adaption of <a href="https://www.2n.pl/blog/hanami-warden-email-password-login-register-in-hanami">this blog post</a> with a little help from the
<a href="https://discourse.hanamirb.org/t/trying-to-get-warden-to-work-in-action-specs/1412">Hanami discourse</a>.</p>

<h2 id="jumpy-alien">Jumpy Alien</h2>

<p>I got <a href="https://github.com/HellRok/taylor-examples/tree/main/jumpy_alien">Jumpy Alien</a> updated for <a href="https://taylormadetech.dev">Taylor</a> v0.4.1. This was mostly
the change around <code class="language-plaintext highlighter-rouge">Texture2D#draw</code> no longer defaulting the <code class="language-plaintext highlighter-rouge">origin</code> to the
centre of the image and instead puts it back at <code class="language-plaintext highlighter-rouge">Vector2[0, 0]</code> to make it work
like nearly every other <code class="language-plaintext highlighter-rouge">#draw</code> function.</p>

<p>I did some gameplay improvements too.</p>

<ul>
  <li>The pipes now spawn at random heights</li>
  <li>Player gravity tweaked</li>
  <li>Pipe movement speed tweaked</li>
  <li>Exit button now works</li>
</ul>

<div class="post--video">
  <video aria-describedby="jumpy-alien-video-description" controls="" id="jumpy-alien-video" preload="metadata" src="/data/weekly-brain-dump-10/jumpy_alien.webm">
    If your browser doesn't support the video tag, you can
    <a href="/data/weekly-brain-dump-10/jumpy_alien.webm">download the video</a>.
  </video>
  <div id="jumpy-alien-video-description" class="post--video--description">
    <p>
  The main menu is shown before going into play the game. Once playing the
  player gets a score of three before crashing into a pipe and seeing the end
  screen showing their high score of 3.
</p>
  </div>
</div>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://www.youtube.com/watch?v=KtQ9nt2ZeGM">You are being misled about renewable energy technology.</a>:</strong>
I was initially skeptical of this video but it helped enlighten me on something
I was very naive about, battery recycling.</p>

<p><strong><a href="https://erichlof.github.io/THREE.js-PathTracing-Renderer/">THREE.js-PathTracing-Renderer</a>:</strong>
Every single demo here is mind blowing to me, the fact this runs in a browser so
smoothly is amazing.</p>

<p><strong><a href="https://robbyonrails.com/articles/2026/02/16/the-handoff-test/">The Handoff Test</a>:</strong>
Something I try to live my life by, making sure I’m not the sole keeper of any
knowledge at work.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #9</title><link href="https://sean.taylormadetech.dev/2026/02/12/weekly-brain-dump-9.html" rel="alternate" type="text/html" title="Weekly Brain Dump #9" /><published>2026-02-12T00:00:00+00:00</published><updated>2026-02-12T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/02/12/weekly-brain-dump-9</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/02/12/weekly-brain-dump-9.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#ditching-windows">Ditching Windows</a>:</strong> The final steps to ditching
Windows</li>
  <li><strong><a href="#expense-tracker">Expense Tracker</a>:</strong> Finally wrapping up the main work for
this project</li>
  <li><strong><a href="#taylor">Taylor</a>:</strong> Someone sent me an email</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="ditching-windows">Ditching Windows</h2>

<p>I’ve been a Linux user for many years now. My distribution of choice is <a href="https://fedoraproject.org/">Fedora</a>
as I’ve basically had zero issues using it and keeping an install updated for
many years. I do basically all of my computing with it.</p>

<p>With <a href="https://www.microsoft.com/en-au/windows">Windows</a> 10 finally hitting End of Life and Windows 11 being full of ads,
AI, and other garbage I’m finally making the effort to migrate the last
remaining uses of Windows over to Linux. This means getting my games running.
Thankfully <a href="https://store.steampowered.com/">Steam</a> has trivialised this. The only game I’ve had issues with so
far is <a href="https://overwatch.blizzard.com/en-us/">Overwatch</a> but I’m working through that.</p>

<h2 id="expense-tracker">Expense Tracker</h2>

<p>This has finally hit a point I’m happy with it and can consider it “basically
done”. I’ll use it for a couple of months and make any small tweaks I think I
need to. I might also polish up the interface a bit more too. I’m too lazy at
the moment to anonymise some data and take a screenshot, but rest assured it
looks like a developer made it.</p>

<p>The final feature list is actually kind of impressive given it’s only had a few
days development:</p>

<ul>
  <li>Import CSV of transactions</li>
  <li>Create, read, update, destroy categories</li>
  <li>Create, read, update, destroy subcategories</li>
  <li>Create, read, update, destroy rules</li>
  <li>Auto-categorise transactions using rules</li>
  <li>Show reports broken down into categories</li>
  <li>Mobile responsive</li>
  <li>Track account balances from the imported transactions</li>
</ul>

<h2 id="taylor">Taylor</h2>

<p>I received an email about Taylor! Someone noticed a bug on the <a href="https://playground.taylormadetech.dev/">playground</a> and
reported it. This small act by them made me feel like I’m actually making a
difference with this project.</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-9/taylor-playground-bug.png" target="_blank">
    <img alt="The Taylor playground showing the benchmark.rb example.

There is a red circle highlighting some missing y calls on a Vector2 object.

The error in the console says 'undefined method `abs` for Vector2'.

The frozen game shows the background drawn off centre.
" src="/data/weekly-brain-dump-9/taylor-playground-bug.png" title="The Taylor playground showing the benchmark.rb example.

There is a red circle highlighting some missing y calls on a Vector2 object.

The error in the console says 'undefined method `abs` for Vector2'.

The frozen game shows the background drawn off centre.
" />
  </a>
</figure>

<p>The thing that makes me chuckle about this bug report is that they’re focussing
on the missing <code class="language-plaintext highlighter-rouge">y</code> call on the <code class="language-plaintext highlighter-rouge">Vector2</code> but mention nothing about the clearly
broken background drawing.</p>

<p>I’m very thankful for this report though, I have fixed both of these issues but
I’m still not sure how to tackle keeping regressions like this from happening
automatically.</p>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://www.tumblr.com/fundz64/150897623108/aapstra-disneys-comic-strip-artists-kit-by">Disney Comic Strip Artist
Kit</a>:</strong>
Came across this on <a href="https://joinmastodon.org/">Mastodon</a> and thought it could apply to game design too.</p>

<p><strong><a href="https://blog.otterstack.com/posts/202512-gbshader/">I put a real-time 3D shader on the Game Boy
Color</a>:</strong> A very cool tech
demo. (CW: minor AI usage)</p>

<p><strong><a href="https://fabiensanglard.net/compile_like_1997/index.html">Let’s compile Quake like it’s
1997!</a>:</strong> Running
through how to compile <a href="https://en.wikipedia.org/wiki/Quake_(video_game)">Quake</a> using an approximation of the tech stack
originally used.</p>

<p><strong><a href="https://xorvoid.com/sectorc.html">SectorC: A C Compiler in 512 bytes</a>:</strong> I
mean, you just gotta read this one.</p>

<p><strong><a href="https://blog.discourse.org/2025/10/on-building-communities-in-public-why-i-chose-discourse-over-discord/">On Building Communities in Public: Why I Chose Discourse Over
Discord</a>:</strong>
This gave me some great ideas for the Taylor community site I’m building.</p>

<p><strong><a href="https://ethanmarcotte.com/wrote/against-stocking-frames/">Against the protection of stocking
frames.</a>:</strong> Look at AI
through the lens of it already being a failed technology.</p>

<p><strong><a href="https://hister.org/posts/how-i-cut-my-google-search-dependence-in-half/">How I Cut My Google Search Dependence in
Half</a>:</strong>
An extremely interesting new idea of using your browsing history as a search
engine. The tool is very early days and buggy, but the idea is amazing.</p>

<p><strong><a href="https://tech.lgbt/@nina_kali_nina/116030913391998818">Ubuntu Live CD was Based on
Knoppix</a>:</strong> A thread on
<a href="https://joinmastodon.org/">Mastodon</a> showing that the original <a href="https://ubuntu.com/">Ubuntu</a> <a href="https://en.wikipedia.org/wiki/Live_CD">Live CDs</a> were built on top of
<a href="https://www.knopper.net/knoppix/index-en.html">Knoppix</a>.</p>

<p><strong><a href="https://piccalil.li/blog/the-open-source-design-stack/">The open source design
stack</a>:</strong> A look at
<a href="https://en.wikipedia.org/wiki/Free_and_open-source_software">FOSS</a> tooling for doing design work.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #8</title><link href="https://sean.taylormadetech.dev/2026/02/05/weekly-brain-dump-8.html" rel="alternate" type="text/html" title="Weekly Brain Dump #8" /><published>2026-02-05T00:00:00+00:00</published><updated>2026-02-05T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/02/05/weekly-brain-dump-8</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/02/05/weekly-brain-dump-8.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#poros">Poros</a>:</strong> Updated my gem after 7 years</li>
  <li><strong><a href="#expense-tracker">Expense Tracker</a>:</strong> Smashing out a new project</li>
  <li><strong><a href="#kiwinvim">Kiwi.nvim</a>:</strong> Smashing out a new project</li>
  <li><strong><a href="#taylor-monthly---january-2026">Taylor Monthly - January 2026</a>:</strong> My first
monthly Taylor post</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="poros">Poros</h2>

<p>When I first wrote <a href="https://github.com/HellRok/Poros">plain old Ruby object storage</a> (poros) the <a href="https://yaml.org/">YAML
Ain’t Markup Language</a> (YAML) parser in <a href="https://www.ruby-lang.org/">Ruby</a> didn’t protect you against
loading arbitrary classes. Now it stops you as that’s obviously a very dangerous
default. I didn’t want to just allow everything - and I’m not sure it’s even
possible - so I instead made it configurable.</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="no">Poros</span><span class="o">::</span><span class="no">Config</span><span class="p">.</span><span class="nf">configure</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
  <span class="n">config</span><span class="p">[</span><span class="ss">:permitted_classes</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="no">Date</span>
<span class="k">end</span>
</code></pre></div></div>

<p>I considered making it a per-model attribute but didn’t want to spend too long
on this as it’s mostly just a fun project that I needed to update for my
<a href="#expense-tracker">expense tracker</a> I’m building for myself.</p>

<p>This does mean I got to do a release after 7 years of inactivity! I was
surprised that the gem “just worked” on Ruby 4.0 without modification. The only
difference was the safe loading.</p>

<h2 id="expense-tracker">Expense Tracker</h2>

<p>Over the weekend I started a new project to help track my expenses. It’s fairly
simple and has a few goals.</p>

<ol>
  <li>Load my transactions from a <a href="https://en.wikipedia.org/wiki/Comma-separated_values">comma separated values</a> (CSV) files</li>
  <li>Let me categorise transactions</li>
  <li>Work on mobile</li>
  <li>Break down my spending in an understandable way</li>
</ol>

<p>I’ve built something like this in the past and built it on <a href="https://vuejs.org/">Vue.JS</a>. This
time I wanted to build it with as little <a href="https://en.wikipedia.org/wiki/JavaScript">JavaScript</a> as possible. This was
just a fun extra challenge for myself.</p>

<p>I decided to use <a href="https://sinatrarb.com/">Sinatra</a> as I’m used to it and like it for small projects.</p>

<p>I got a large chunk of the project built-in 1.5 days by limiting my testing to
only parts of the system I didn’t have high confidence in. So far this has meant
only my importing class. This has allowed me to move <em>very</em> fast and all the
bugs I’ve had have been minor.</p>

<p>I’m considering releasing it for free if I’m happy once I consider it “done”.</p>

<h2 id="kiwinvim">Kiwi.nvim</h2>

<p>My coworker was showing me their <a href="https://orgmode.org/">Org Mode</a> setup and it make me want to
get off my arse and get my wiki situation sorted again. I used to use <a href="https://github.com/vimwiki/vimwiki">VimWiki</a>
but wanted something lighter and more geared towards <a href="https://www.markdownguide.org/">Markdown</a>. I found
<a href="https://github.com/serenevoid/kiwi.nvim">kiwi.nvim</a> in my search for a solution. I’m liking it so far. It checks
most of my boxes. The only two things I am missing are:</p>

<ol>
  <li>Lists continuing on newline</li>
  <li>Tables formatting nicely</li>
</ol>

<p>I solved the issue for tables with the help of <a href="https://heitorpb.github.io/bla/format-tables-in-vim/">this blog</a> and I
turned it into this keybind.</p>

<div class="language-lua highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">vim</span><span class="p">.</span><span class="n">keymap</span><span class="p">.</span><span class="n">set</span><span class="p">(</span>
  <span class="s1">'v'</span><span class="p">,</span> <span class="s1">'&lt;S-t&gt;'</span><span class="p">,</span>
  <span class="s2">":!column -t -s '|' -o '|'&lt;CR&gt;"</span><span class="p">,</span>
  <span class="p">{</span> <span class="n">desc</span> <span class="o">=</span> <span class="s1">'Format a markdown table'</span> <span class="p">}</span>
<span class="p">)</span>
</code></pre></div></div>

<p>It’s not perfect but it does the trick. Also, don’t be surprised if I’ve forked
kiwi.nvim or even rewritten it by next week. It’s only a couple hundred lines
and I’m not chuffed with the code quality.</p>

<h2 id="taylor-monthly---january-2026">Taylor Monthly - January 2026</h2>

<p>I wrote up and published my first <a href="https://taylormadetech.dev/2026/02/01/taylor-monthly-january.html">Taylor Monthly</a> and I’m
fairly happy with it. I spent all of Saturday morning writing it up. Thankfully
I had done a lot the prep work because most of it is taken from my Weekly Brain
Dumps and tweaked slightly to read better for there.</p>

<p>The biggest thing for me though was show how much I had actually done on Taylor
during the month. It’s surprising that I got this much done on top of a full
time job and - honestly - way too many hobbies. It’s no surprise that this past
week I’ve been taking it a bit slower and trying to detach from my computer.</p>

<p>In fact, these Weekly Brain Dumps have actually highlighted to me that I do a
<strong>lot</strong> of programming out of work. I would like to start introducing more
analog hobbies into my life again. I used to have a lot of them as a kid and
there are some I’d like to give more time too. Maybe I’ll make an effort to
document them here too? I guess this doesn’t <em>have</em> to be a technical blog, I’ve
just kind of imposed that limit on myself subconsciously.</p>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://mecha.so/comet">Mecha Comet</a>:</strong> This might be the most perfectly
designed handheld Linux computer, we’ll see if it lives up to the hype.</p>

<p><strong><a href="https://nostalgic-css.github.io/NES.css/">NES.css</a>:</strong> This was nearly the CSS
framework I used for my website.</p>

<p><strong><a href="https://kemalcr.com/">Kemal Website</a>:</strong> This is the Sinatra of <a href="https://crystal-lang.org/">Crystal</a> and
I have been meaning to build something with it.</p>

<p><strong><a href="https://lichendust.com/microfeed">Lichendust Blog</a>:</strong> An interesting blog I
found that <em>also</em> does an “interesting links” section!</p>

<p><strong><a href="/2026/02/02/caprover-deployment-platform.html">CapRover Deploying with the Wrong
Platform</a>:</strong> How I solved my
CapRover issue with the help of the developer.</p>

<p><strong><a href="https://gem.coop/updates/4/">gem.coop update #4: cooldowns beta</a>:</strong> An
awesome idea to hold back updates for 2 days. This has been shown to minimise
most compromised packages reaching you nearly entirely. I’ll be switching my
projects to this.</p>

<p><strong><a href="https://shkspr.mobi/blog/2026/02/the-cost-of-running-openbenches-org/">The cost of running
OpenBenches.org</a>:</strong>
This does a great job of showing just what it takes to run a site like this.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">CapRover Deploying with the Wrong Platform</title><link href="https://sean.taylormadetech.dev/2026/02/02/caprover-deployment-platform.html" rel="alternate" type="text/html" title="CapRover Deploying with the Wrong Platform" /><published>2026-02-02T00:00:00+00:00</published><updated>2026-02-02T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/02/02/caprover-deployment-platform</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/02/02/caprover-deployment-platform.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<p>I had two versions of the <code class="language-plaintext highlighter-rouge">ruby:4.0</code> Docker image, one for <code class="language-plaintext highlighter-rouge">linux/amd64</code> and one
for <code class="language-plaintext highlighter-rouge">linux/arm64/v8</code>. For reasons we still don’t know, CapRover was using the
<code class="language-plaintext highlighter-rouge">linux/arm64/v8</code> version for deployment.</p>

<p>By running <code class="language-plaintext highlighter-rouge">docker image rm ruby:4.0</code> and redeploying my application it was
built using the image form the <code class="language-plaintext highlighter-rouge">linux/amd64</code> platform.</p>

<h2 id="the-problem">The Problem</h2>

<p>Recently when I deployed my web applications to <a href="https://caprover.com/">CapRover</a> they were using the
images for the <a href="https://en.wikipedia.org/wiki/AArch64"><code class="language-plaintext highlighter-rouge">linux/arm64/v8</code></a> platform instead of the
<a href="https://en.wikipedia.org/wiki/X86-64"><code class="language-plaintext highlighter-rouge">linux/amd64</code></a> that my server actually is<sup id="fnref:cpu"><a href="#fn:cpu" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>. Whilst this technically
worked it had massive performance penalties because I was running everything
through <a href="https://www.qemu.org/">QEMU</a> as that’s how I have <a href="https://docs.docker.com/build/building/multi-platform/#qemu">Docker multi-platform</a>
setup.</p>

<p>Strangely when running <code class="language-plaintext highlighter-rouge">docker build .</code> in the project root on the server used
the correct <code class="language-plaintext highlighter-rouge">linux/amd64</code> platform.</p>

<p>I had absolutely no idea why this was happening. I dove into the <a href="https://github.com/caprover/caprover">CapRover
code</a> and it didn’t specify the platform anywhere. I got so lost
with this I actually <a href="https://github.com/caprover/caprover/issues/2373">raised an issue</a> on their <a href="https://github.com/">GitHub</a></p>

<h2 id="the-work-around">The Work Around</h2>

<p><a href="https://github.com/githubsaturn">githubsaturn</a> was very patient and incredibly helpful in working around this
issue. By running <code class="language-plaintext highlighter-rouge">docker image rm ruby:4.0</code> and redeploying an effected
application using that <a href="https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-an-image/">image</a> it deployed correctly using the
<code class="language-plaintext highlighter-rouge">linux/amd64</code> platform. As I have a fair few of these non-<code class="language-plaintext highlighter-rouge">linux/amd64</code> images
on my server due to testing [neospec] and [LocalCI] I have written a script to
clean them up.</p>

<ol>
  <li><a href="/data/caprover-deployment-platform/docker-clean-other-platforms">Download the script</a></li>
  <li>Run <code class="language-plaintext highlighter-rouge">chmod +x docker-clean-other-platforms</code> to make it executable</li>
  <li>Run <code class="language-plaintext highlighter-rouge">./docker-clean-other-platforms</code>.</li>
</ol>

<h2 id="dangling-threads">Dangling Threads</h2>

<p>I don’t consider this “case closed” as I want images with other platforms on my
system for testing my <a href="https://www.ruby-lang.org/en/libraries/">Ruby gems</a>.</p>

<p>My big suspicion is that it has something to do with running <a href="https://www.docker.com/">Docker</a> inside of
Docker. I suspect that because installing CapRover is done with the command
<code class="language-plaintext highlighter-rouge">docker run -p 80:80 -p 443:443 -p 3000:3000 -e ACCEPTED_TERMS=true -v
/var/run/docker.sock:/var/run/docker.sock -v /captain:/captain
caprover/caprover</code>. Which means everything CapRover doe does with Docker is done
through that container.</p>

<p>If I ever figure out why this is actually happening and how to permanently fix
it I’ll update this blog post, but for now I think I’ll leave it there.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:cpu">
      <p>Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz <a href="#fnref:cpu" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #7</title><link href="https://sean.taylormadetech.dev/2026/01/29/weekly-brain-dump-7.html" rel="alternate" type="text/html" title="Weekly Brain Dump #7" /><published>2026-01-29T00:00:00+00:00</published><updated>2026-01-29T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/01/29/weekly-brain-dump-7</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/01/29/weekly-brain-dump-7.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#projects-page">Projects Page</a>:</strong> A new page showcasing my projects</li>
  <li><strong><a href="#the-write-clean">The Write Clean</a>:</strong> Continuing  work on profiles</li>
  <li><strong><a href="#taylor">Taylor</a>:</strong> Released Taylor v0.4.1</li>
  <li><strong><a href="#taylor-website">Taylor Website</a>:</strong> Migrated to simple.css</li>
  <li><strong><a href="#taylor-examples">Taylor Examples</a>:</strong> Finished the gameplay loop</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="projects-page">Projects Page</h2>

<p>I’ve added a <a href="/projects/">projects</a> page to this blog to show the things I’ve built that I’m
proud of. There’s at least two more projects I’d like to add there but they are
not in a running state due to their age.</p>

<p>I also want to put some screenshots or something to spice the page up. Right now
it’s incredibly plain and doesn’t do a great job at selling how cool these
projects are. You know what they say though!</p>

<blockquote>
  <p>Just make it exist first… You can make it good later!</p>
  <ul>
    <li>Them</li>
  </ul>
</blockquote>

<h2 id="the-write-clean"><a href="https://thewriteclean.com/">The Write Clean</a></h2>

<p>I continued work on profiles and reacquainted myself with the codebase. I’m
actually a lot less annoyed by it having looked it at again. I’d built it up in
my head that <a href="https://htmx.org/">HTMX</a> had made all my <a href="https://github.com/ruby/erb">ERB</a> templates awkward but it really
hasn’t.</p>

<h2 id="taylor">Taylor</h2>

<p><a href="https://taylormadetech.dev/documentation/taylor/v0.4.1/Texture2D.html#draw-instance_method"><code class="language-plaintext highlighter-rouge">Texture2D#draw</code></a> no longer sets the origin to the centre of
the destination and is back to <code class="language-plaintext highlighter-rouge">Vector2[0, 0]</code>. This was a change I made when I
was doing the big redesign but have come to realise it’s a bit weird and
unexpected for users. So I have reverted this change.</p>

<p>Something that took me longer than expected was updating to <a href="https://clang.llvm.org/docs/ClangFormat.html">clang-format</a> 21
because I was getting annoyed by the differences between the installed
<code class="language-plaintext highlighter-rouge">clang-format</code> on <a href="https://fedoraproject.org/">Fedora</a> and <a href="https://www.debian.org/">Debian</a>. I also took this as a chance to tweak
the settings slightly. Specifically these two changes.</p>

<ul>
  <li><a href="https://clang.llvm.org/docs/ClangFormatStyleOptions.html#columnlimit"><code class="language-plaintext highlighter-rouge">ColumnLimit</code></a> from <code class="language-plaintext highlighter-rouge">80</code> to <code class="language-plaintext highlighter-rouge">100</code></li>
  <li><a href="https://clang.llvm.org/docs/ClangFormatStyleOptions.html#breakafterreturntype"><code class="language-plaintext highlighter-rouge">BreakAfterReturnType</code></a> from <code class="language-plaintext highlighter-rouge">TopLevel</code> to <code class="language-plaintext highlighter-rouge">Automatic</code></li>
</ul>

<p>I also went and <a href="https://taylormadetech.dev/2026/01/26/taylor-v0.4.1-released.html">released Taylor v0.4.1</a>! I’m thinking I’m going to try
and do frequent releases rather than waiting for some big change to happen. This
will keep the deployment pipeline working and I feel help raise some awareness
for the project. It will also help make it look like it’s not dead.</p>

<h2 id="taylor-website">Taylor Website</h2>

<p>I’ve completed all my <a href="https://en.wikipedia.org/wiki/CSS">cascading style sheets</a> (CSS) changes for my
websites now. This means <a href="https://sean.taylormadetech.dev">this blog</a>, <a href="https://taylormadetech.dev">the Taylor website</a>, and
<a href="https://playground.taylormadetech.dev">the Taylor Playground</a> are now all based on
<a href="https://simplecss.org/">simple.css</a>. This also means they all have both light and dark modes
that change based on your preferences.</p>

<p>I have redesigned the Taylor <a href="https://taylormadetech.dev/documentation/">documentation</a> page to have the more useful
content towards the top of the page. It now also generates the library links
from the <a href="https://github.com/HellRok/Taylor/blob/main/scripts/mruby/taylor.gembox">gembox</a> file, so it stays up to date with each new release.</p>

<h3 id="old-documentation-page">Old Documentation Page</h3>
<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-7/old-documentation.png" target="_blank">
    <img alt="Taylor's old documentation page showing the sections in the
following order:

- Tutorials
- Migrations
- APIs" src="/data/weekly-brain-dump-7/old-documentation.png" title="Taylor's old documentation page showing the sections in the
following order:

- Tutorials
- Migrations
- APIs" />
  </a>
</figure>

<h3 id="new-documentation-page">New Documentation Page</h3>
<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-7/new-documentation.png" target="_blank">
    <img alt="Taylor's new documentation page showing the sections in the
following order:

- Tutorials
- APIs
- Migrations" src="/data/weekly-brain-dump-7/new-documentation.png" title="Taylor's new documentation page showing the sections in the
following order:

- Tutorials
- APIs
- Migrations" />
  </a>
</figure>

<h2 id="taylor-examples">Taylor Examples</h2>

<p><a href="https://github.com/HellRok/taylor-examples/tree/main/jumpy_alien">Jumpy Alien</a> now has a complete gameplay loop! It’s incredibly
bare bones and the game design is awful but it’s still a big milestone. I can
now spend time refining the project and making it feel nicer.</p>

<div class="post--video">
  <video aria-describedby="jumpy-alien-video-description" controls="" id="jumpy-alien-video" preload="metadata" src="/data/weekly-brain-dump-7/jumpy_alien.webm">
    If your browser doesn't support the video tag, you can
    <a href="/data/weekly-brain-dump-7/jumpy_alien.webm">download the video</a>.
  </video>
  <div id="jumpy-alien-video-description" class="post--video--description">
    <p>
  The main menu is shown before going into play the game. Once playing the
  player gets a score of one before crashing into a pipe and seeing the end
  screen showing their high score of 1. They then retry and get a score of 0
  being shown the end screen again showing their score of 0.
</p>
  </div>
</div>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://ploum.net/2026-01-22-why-no-european-google.html">Why there’s no European
Google?</a>:</strong> A look
into the differences between European success and American success.</p>

<p><strong><a href="https://blog.hofstede.it/reviving-life-is-strange-before-the-storm-on-modern-linux-with-a-glibc-shim/">Reviving Life is Strange: Before the Storm on Modern Linux with a glibc
Shim</a>:</strong>
This shows us how brittle binaries on Linux can be thanks to <a href="https://www.gnu.org/software/libc/">glibc</a> but does
show an interesting trick to get this specific game to work.</p>

<p><strong><a href="https://rubyelders.com/writings/2026-01-ruby-box-reload.html">Ruby::Box: Rethinking Code Reloading with Isolated
Namespaces</a>:</strong>
Looking into the new <a href="https://docs.ruby-lang.org/en/4.0/Ruby/Box.html">Ruby::Box</a> feature and how it can be used to do
hot reloading safely and how it’s not quite there yet.</p>

<p><strong><a href="https://www.kevinmake.com/writings/p2p-realtime-collaboration">You might not need a sync server for real-time
collaboration</a>:</strong>
How to write real time <a href="https://en.wikipedia.org/wiki/JavaScript">JavaScript</a> projects without needing a server.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #6</title><link href="https://sean.taylormadetech.dev/2026/01/22/weekly-dump-6.html" rel="alternate" type="text/html" title="Weekly Brain Dump #6" /><published>2026-01-22T00:00:00+00:00</published><updated>2026-01-22T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/01/22/weekly-dump-6</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/01/22/weekly-dump-6.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#taylor">Taylor</a>:</strong> Merged the LocalCI pull request!</li>
  <li><strong><a href="#taylor-examples">Taylor Examples</a>:</strong> Did some thinking</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="taylor">Taylor</h2>

<p>I  got my <a href="https://github.com/HellRok/Taylor/pull/56">LocalCI pull request</a>
merged!</p>

<p>Everything went really smoothly except for running the test suite through <a href="https://www.winehq.org/">wine</a>
in <a href="https://github.com/ruby/rake">rake</a> in <a href="https://www.docker.com/">Docker</a>. For some reason it ran perfectly fine if I connected to the
Docker container and ran it myself, or if I ran it through a simple <a href="https://github.com/ruby/rake">rake</a> file.
But when I ran it through <a href="https://github.com/HellRok/local_ci">LocalCI</a> with everything setup it was resulting in
<code class="language-plaintext highlighter-rouge">invalid pointer</code>. Thankfully updating to the latest stable <a href="https://www.winehq.org/">wine</a> resolved this
and now it works great!</p>

<p>I did end up taking the approach of running everything in a single <a href="https://buildkite.com/docs/pipelines/configure/defining-steps">pipeline
step</a> as this allowed me to leverage the resources of my single test
machine easier thanks to <a href="https://github.com/ruby/rake">rake</a> using multiple cores by default. The only
downside is I run my <a href="https://www.docker.com/">Docker</a> builds sequentially as my server doesn’t handle
building them all at once well.</p>

<h2 id="taylor-examples">Taylor Examples</h2>

<p>I haven’t written any code but I have done quite a lot of thinking about <a href="https://github.com/HellRok/taylor-examples/tree/main/jumpy_alien">Jumpy
Alien</a>. I’m currently unhappy with my approach to <a href="https://en.wikipedia.org/wiki/Test-driven_development">Test Driven
Development</a> (TDD) and think I need to dial it back as game development is
very different to web development. I feel there’s a sensible amount of TDD that
can be done but it’ll be different from how I’m used to doing it.</p>

<p>I’m also unhappy with the way I’ve architected the components of this project.
I’m thinking of simplifying the models and taking a more data oriented approach.
I’m hoping to have an interesting section here next week saying what I’ve
changed and how well it has worked.</p>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://breq.dev/2026/01/14/infinite-coffee-glitch">Infinite Coffee
Glitch</a>:</strong> This is a great
reminder for back end validation. Never trust clients!</p>

<p><strong><a href="https://strudel.cc">Strudel</a>:</strong> A live music coding platform that’s free and
open source</p>

<p><strong><a href="https://iczelia.net/posts/snake-polyglot/">This game is a single 13 KiB file that runs on Windows, Linux and in the
Browser.</a>:</strong> An interesting approach
to a polyglot executable. Sadly it’s three separately made implementations of
the one application, but still cool.</p>

<p><strong><a href="https://blog.hiler.eu/win32-the-only-stable-abi/">Win32 Is The Only Stable ABI on
Linux</a>:</strong> I think about this
article frequently.</p>

<p><strong><a href="https://codeberg.org/yujiyokoo/mrubyz">mruby on Zilog Z80</a>:</strong> Yuji is the
person who introduced me to <a href="https://mruby.org/">mruby</a>, they’re currently writing an implementation
that runs on a <a href="https://en.wikipedia.org/wiki/Zilog_Z80">Z80</a>!</p>

<p><strong><a href="https://infinitemac.org/">Infinite Mac</a>:</strong> I was watching <a href="https://www.youtube.com/watch?v=nlT8aRMm-cE">this Action Retro
video</a> and he used this site to
create a bootable system for his Mac.</p>

<p><strong><a href="https://www.youtube.com/watch?v=AwEz58_K1zI">Minecraft GBA port</a>:</strong>
Absolutely bonkers port to the <a href="https://en.wikipedia.org/wiki/Game_Boy_Advance">Gameboy
Advance</a>.</p>

<p><strong><a href="https://paulmakeswebsites.com/writing/shadcn-radio-button/">The Incredible Overcomplexity of the Shadcn Radio
Button</a>:</strong> A look
into how complex a single radio button is using
<a href="https://ui.shadcn.com/">shadcn</a>.</p>

<p><strong><a href="https://ploum.net/2026-01-19-exam-with-chatbots.html">Giving University Exams in the Age of
Chatbots</a>:</strong> An amazing
article about how to handle education and exams in the age of <a href="https://en.wikipedia.org/wiki/Large_language_model">Large Language
Models</a>.</p>

<p><strong><a href="https://gitpush--force.com/commits/2026/01/meet-smolid/">I decided to make a worse UUID for the pettiest of
reasons.</a>:</strong>
Redesigning <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a>
to improve developer experience. I especially like the 7 bits for type
identification.</p>

<p><strong><a href="https://www.baldurbjarnason.com/notes/2026/note-on-debating-llm-fans/">‘AI’ is a dick move,
redux</a>:</strong>
This article summarises a lot of the pain points I’ve personally felt when
discussing LLMs with people.</p>

<p><strong><a href="https://www.phoronix.com/news/LLVM-Human-In-The-Loop">LLVM Adopts “Human In The Loop” Policy For AI/Tool-Assisted
Contributions</a>:</strong> A
sensible approach to handling pull requests in the LLM era for open source
software.</p>

<p><strong><a href="https://medium.com/@daveziegler/the-illusion-of-intelligence-large-language-models-vs-human-cognition-551a0cceb7e5">The Illusion of Intelligence: Large Language Models vs Human
Cognition</a>:</strong>
I came across this article during a discussion on <a href="https://slack.com/">Slack</a>
for <a href="https://ruby.org.au/">Ruby Australia</a> and felt it summarises the technology behind LLMs
excellently.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #5</title><link href="https://sean.taylormadetech.dev/2026/01/15/weekly-dump-5.html" rel="alternate" type="text/html" title="Weekly Brain Dump #5" /><published>2026-01-15T00:00:00+00:00</published><updated>2026-01-15T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/01/15/weekly-dump-5</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/01/15/weekly-dump-5.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#jekyll">Jekyll</a>:</strong> I read the documentation and discovered the <code class="language-plaintext highlighter-rouge">--future</code>
flag</li>
  <li><strong><a href="#taylor">Taylor</a>:</strong> New collision detection and a switch to <a href="https://github.com/HellRok/local_ci">LocalCI</a></li>
  <li><strong><a href="#simple-css">Simple.css</a>:</strong> Using a new base CSS framework for this blog</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="jekyll">Jekyll</h2>

<p>I use <a href="https://jekyllrb.com/">Jekyll</a> to build this blog and one thing that’s always bugged me is that
future dated posts and drafts didn’t show up in development. It turns out there
is actually a flag for that; the <a href="https://jekyllrb.com/docs/configuration/options/#build-command-options:~:text=Future"><code class="language-plaintext highlighter-rouge">--future</code></a> flag. I’ve also
enabled this flag when building the <a href="https://www.docker.com/">Docker</a> image for production as my server
time is quite a lot behind my local time and I like to publish my posts in the
morning.</p>

<h2 id="taylor">Taylor</h2>

<p>Added <a href="https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection">Axis Aligned Bounding Box</a> (AABB) collision for rectangles. This
was the last collision I wanted to implement before doing a release.</p>

<p><a href="https://github.com/HellRok/Taylor/pull/55">AABB Pull Request</a></p>

<p>I have switched to <a href="https://github.com/HellRok/local_ci">LocalCI</a> for testing needs. This has come with a bunch of
library upgrades too. The biggest thing is probably migrating to using <a href="https://clang.llvm.org/">Clang</a>
21 for <code class="language-plaintext highlighter-rouge">clang-tidy</code> and <code class="language-plaintext highlighter-rouge">clang-format</code> to keep things easily consistent across
machines. I was getting really annoyed by my linting commands giving different
results per machine and forcing me to use <a href="https://www.docker.com/">Docker</a> to run the <code class="language-plaintext highlighter-rouge">clang-format</code>
command.</p>

<p><a href="https://github.com/HellRok/Taylor/pull/56">LocalCI Pull Request</a></p>

<h2 id="simplecss">Simple.css</h2>

<p>I’ve been looking for a good base <a href="https://en.wikipedia.org/wiki/CSS">Cascading Style Sheets</a> (CSS) framework
to build off of for a while now. Something that looks good by default but isn’t
too opinionated and have too much stuff I’d need to override.</p>

<p>I stumbled across <a href="https://simplecss.org/">Simple.css</a> and immediately liked it. As a trial
run I’ve implemented it on my blog here. You may have noticed very slight
differences. The main one being header sizes are a bit bigger. Overall there
were very few changes I had to make and am really happy with it.</p>

<p>I know this is minor here but I’m hoping it will help with having a
solid cross-platform base. The next project I’ll implement it in will be
<a href="https://playground.taylormadetech.dev">Taylor’s Playground</a> as I know that has some issues on
different browsers.</p>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://texudus.readthedocs.io/en/latest/">Texudus</a>:</strong> This is a social
network that is incredibly close to the one I’ve theorised about. It’s a very
interesting approach to a distributed social network.</p>

<p><strong><a href="https://blog.appsignal.com/2026/01/07/an-introduction-to-ruby-parsing-with-prism.html">An Introduction to Ruby Parsing with
Prism</a>:</strong>
A great guide on how to use <a href="https://github.com/ruby/prism">Prism</a> to do interesting things with <a href="https://www.ruby-lang.org/">Ruby</a></p>

<p><strong><a href="https://www.pentadact.com/2026-01-08-15-years-of-indie-dev-in-4-bits-of-advice/">15 Years of Indie Dev In 4 Bits of
Advice</a>:</strong>
Interesting insights into how an indie game development company remains afloat</p>

<p><strong><a href="https://andre.arko.net/2026/01/07/rv-clean-install/">Announcing <code class="language-plaintext highlighter-rouge">rv clean-install</code></a>:</strong>
<a href="https://github.com/spinel-coop/rv"><code class="language-plaintext highlighter-rouge">rv</code></a> is a tool to keep a close eye on</p>

<p><strong><a href="https://mastodon.radio/@ut3usw/115871513311402895">Doom WAD on a DAC</a>:</strong> Just
plain cool</p>

<p><strong><a href="https://sr.ht/~kerrick/ratatui_ruby/">RatatuiRuby</a>:</strong> A port of <a href="https://ratatui.rs/">Ratatui</a> to
<a href="https://www.ruby-lang.org/">Ruby</a>. Yet another cool <a href="https://en.wikipedia.org/wiki/Text-based_user_interface">Text-based User Interface</a> (TUI) framework for Ruby</p>

<p><strong><a href="https://fletchmakesstuff.com/posts/2026-01-11/">Picotron Noodling</a>:</strong> Making
a small game prototype in <a href="https://www.lexaloffle.com/picotron.php">Picotron</a></p>

<p><strong><a href="https://rubenerd.com/xfce-is-great/">Xfce is great</a>:</strong> Singing the praises
for the excellent <a href="https://xfce.org/">Xfce</a> desktop environment</p>

<p><strong><a href="https://truffleruby.dev/blog/truffleruby-33-is-released">TruffleRuby 33 is
Released</a>:</strong>
<a href="https://truffleruby.dev/">TruffleRuby</a> gets a new release and switches to a different versioning system</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry><entry><title type="html">Weekly Brain Dump #4</title><link href="https://sean.taylormadetech.dev/2026/01/08/weekly-brain-dump-4.html" rel="alternate" type="text/html" title="Weekly Brain Dump #4" /><published>2026-01-08T00:00:00+00:00</published><updated>2026-01-08T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/01/08/weekly-brain-dump-4</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/01/08/weekly-brain-dump-4.html"><![CDATA[<h2 id="at-a-glance">At a Glance</h2>

<ul>
  <li><strong><a href="#ruby-squasher">Ruby Squasher</a>:</strong> Redesigning Taylor’s <code class="language-plaintext highlighter-rouge">squash</code> command</li>
  <li><strong><a href="#interesting-links">Interesting Links</a>:</strong> Cool things I found this week</li>
</ul>

<h2 id="ruby-squasher">Ruby Squasher</h2>

<p>I got the itch to redesign the <a href="https://github.com/HellRok/Taylor/blob/main/cli-tool/app/commands/squash.rb"><code class="language-plaintext highlighter-rouge">squash</code></a> command in <a href="https://taylormadetech.dev/">Taylor
Engine</a> because the current implementation leaves a lot to be desired.</p>

<h3 id="the-way-it-works-now">The Way It Works Now</h3>

<p>Given these three files.</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># game.rb</span>
<span class="nb">require</span> <span class="s2">"lib/game"</span>

<span class="no">Game</span><span class="p">.</span><span class="nf">call</span><span class="p">()</span>
</code></pre></div></div>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># lib/game.rb</span>
<span class="nb">require</span> <span class="s2">"lib/player"</span>

<span class="k">class</span> <span class="nc">Game</span>
  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">call</span>
    <span class="nb">puts</span> <span class="s2">"Run the game!"</span>
  <span class="k">end</span>
<span class="k">end</span>
</code></pre></div></div>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># lib/player.rb</span>
<span class="k">class</span> <span class="nc">Player</span>
  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">call</span>
    <span class="nb">puts</span> <span class="s2">"Does player things"</span>
  <span class="k">end</span>
<span class="k">end</span>
</code></pre></div></div>

<p>If we called <code class="language-plaintext highlighter-rouge">taylor squash --stdout</code> we would see the following code printed to
<a href="https://en.wikipedia.org/wiki/Standard_streams">standard output</a>.</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Start game.rb</span>
<span class="c1"># Start ./lib/game.rb</span>
<span class="c1"># Start ./lib/player.rb</span>
<span class="k">class</span> <span class="nc">Player</span>
  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">call</span>
    <span class="nb">puts</span> <span class="s2">"Does player things"</span>
  <span class="k">end</span>
<span class="k">end</span>
<span class="c1"># End ./lib/player.rb</span>

<span class="k">class</span> <span class="nc">Game</span>
  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">call</span>
    <span class="nb">puts</span> <span class="s2">"Run the game!"</span>
  <span class="k">end</span>
<span class="k">end</span>
<span class="c1"># End ./lib/game.rb</span>

<span class="no">Game</span><span class="p">.</span><span class="nf">call</span><span class="p">()</span>
<span class="c1"># End game.rb</span>
</code></pre></div></div>

<p>You can see that I’ve just replaced the <code class="language-plaintext highlighter-rouge">require</code> lines with the content from
the files. This is actually very different to how <code class="language-plaintext highlighter-rouge">require</code> works under the hood
and can lead to discrepancies between running in development and release builds.
This is the big motivator behind redesigning <code class="language-plaintext highlighter-rouge">taylor squash</code>.</p>

<h3 id="the-redesign">The Redesign</h3>

<p>My plan is to distribute this as both a regular <a href="https://www.ruby-lang.org/">Ruby</a> <a href="https://guides.rubygems.org/what-is-a-gem/">gem</a> and an
<a href="https://mruby.org/">mruby</a> <a href="https://github.com/mruby/mruby/blob/master/doc/guides/mrbgems.md">mgem</a> if I can get it to a point I’m happy with it.</p>

<p>The design I’m currently experimenting with is a bit more complicated but should
lead to a more consistent operation between development and release. I would use
<a href="https://ruby-doc.org/3.4.1/Proc.html">lambdas</a> to keep the namespaces clean and an overridden <code class="language-plaintext highlighter-rouge">require</code>
method. I’ve put a functional example below to illustrate what the output could
look like.</p>

<p>You can see this working <a href="https://playground.taylormadetech.dev/#version=v0.4.0&amp;code=MQQg9ArgzgTmBGBLAdmApsgbgAhheAngFBEDKAigKoCCpAEgKIBKA+gGICSAMg6dgLzYA3kWzYARADNEMKABcWMNAEcIMtOIEA+bAFodIsWIDGAGwCGUKNjYz5oo2IAmaSdihpTkgHTHzp0wdHMQAHCDlrcVtZOXEgowwneMSHAF8AGgdxD2MAe2QnRRU1JU1+HX1heLNLa1I0PIL451d3Tx8-AOajMIiJesanOODsFMcx7AyiVJIaq2xSVUsACzQYBxc3Dy9vFAArBrl43JhEAHMUfyLVdQFsAGk15E9vAFs0OWXcpwAKAC4lDclABKEiOR4wZ6mbybFBoFjvT7ff6AkpoYHYJy5bAAH2kpjQOO6iDciwgKzW3nxaCg3mWlhYAGs0AQAPw-amgkZiCFQt7fCAElhoAAeDSq3KMZIpMCpiAJUAA2tSALq+fyBSUzEaeDzdMQnc6XUzXNHqgIc+Xo7oTMQTFIbVrbHzUqDxCg0ejMdjcXi4nHCbWjJopaVQVay-aHEio25SOwKWOlEjReTmwJEJNoCQ5fKFLNxMgNPPpoA">in your browser</a>.</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#!/usr/bin/env ruby</span>

<span class="no">SQUASHER_FILES</span> <span class="o">=</span> <span class="p">{</span>
  <span class="s2">"first_require"</span> <span class="o">=&gt;</span> <span class="o">-&gt;</span> <span class="p">{</span>
    <span class="k">class</span> <span class="nc">First</span>
      <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">call</span>
        <span class="nb">puts</span> <span class="s2">"First"</span>
      <span class="k">end</span>
    <span class="k">end</span>
  <span class="p">},</span>
  <span class="s2">"second_require"</span> <span class="o">=&gt;</span> <span class="o">-&gt;</span> <span class="p">{</span>
    <span class="k">class</span> <span class="nc">Second</span>
      <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">call</span>
        <span class="nb">puts</span> <span class="s2">"Second"</span>
      <span class="k">end</span>
    <span class="k">end</span>
  <span class="p">},</span>
<span class="p">}</span>

<span class="k">class</span> <span class="nc">Squasher</span>
  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">inject</span>
    <span class="n">original_require</span> <span class="o">=</span> <span class="no">Kernel</span><span class="p">.</span><span class="nf">method</span><span class="p">(</span><span class="ss">:require</span><span class="p">)</span>

    <span class="no">Kernel</span><span class="p">.</span><span class="nf">define_method</span><span class="p">(</span><span class="ss">:require</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">file</span><span class="o">|</span>
      <span class="k">if</span> <span class="no">Squasher</span><span class="p">.</span><span class="nf">files</span><span class="p">.</span><span class="nf">has_key?</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
        <span class="no">Kernel</span><span class="p">.</span><span class="nf">module_exec</span> <span class="p">{</span>
          <span class="no">Squasher</span><span class="p">.</span><span class="nf">files</span><span class="p">[</span><span class="n">file</span><span class="p">].</span><span class="nf">call</span>
        <span class="p">}</span>
      <span class="k">else</span>
        <span class="n">original_require</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
      <span class="k">end</span>
    <span class="k">end</span>
  <span class="k">end</span>

  <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">files</span>
    <span class="no">SQUASHER_FILES</span> <span class="o">||</span> <span class="p">{}</span>
  <span class="k">end</span>
<span class="k">end</span>
<span class="no">Squasher</span><span class="p">.</span><span class="nf">inject</span>

<span class="nb">require</span> <span class="s2">"first_require"</span>

<span class="no">First</span><span class="p">.</span><span class="nf">call</span>

<span class="nb">require</span> <span class="s2">"second_require"</span>

<span class="no">Second</span><span class="p">.</span><span class="nf">call</span>
</code></pre></div></div>

<p>Running that will give you the following output.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>First
Second
</code></pre></div></div>

<p>There’s definitely flaws with this but I think it’s a pretty promising start. I
do also plan to squash files from gems into the output but would need to do
something special for <a href="https://guides.rubygems.org/gems-with-extensions/">native gems</a>.</p>

<h2 id="interesting-links">Interesting Links</h2>

<p><strong><a href="https://createlang.rs">Create Your Own Programming Language with Rust Book</a>:</strong> This
book has been in development for 6 years and just released this week. I’ve had a
strong desire to make my own language recently and this has only added fuel to
that fire!</p>

<p><strong><a href="https://tlxdev.hashnode.dev/writing-windows-95-software-in-2025">Writing Windows 95 software in 2025</a>:</strong> A fun guide on setting up a
development environment for <a href="https://en.wikipedia.org/wiki/Windows_95">Windows 95</a> on <a href="https://en.wikipedia.org/wiki/MacOS">MacOS</a>.</p>

<p><strong><a href="https://www.joanwestenberg.com/the-case-for-blogging-in-the-ruins/">The Case for Blogging in the Ruins</a>:</strong> Why blogs are still relevant
and what needs they fill versus social media.</p>

<p><strong><a href="https://nerdyteachers.com/PICO-8/pico-view/16">Pico-View 2025</a>:</strong> Reflecting on everything that happened with
<a href="https://www.lexaloffle.com/pico-8.php">PICO-8</a> during 2025. This is a magazine made by teachers and is always amazing,
I absolutely recommend following them.</p>

<p><strong><a href="https://katafrakt.me/2026/01/04/mruby-cosmo-compilation/">Portable mruby binaries with Cosmopolitan</a>:</strong> I love seeing
people doing interesting things with mruby and I had never heard of
<a href="https://justine.lol/cosmopolitan/index.html">Cosmopolitan</a> before.</p>

<p><strong><a href="https://www.youtube.com/watch?v=cTPBGZcTRqo">How I beat Factorio on 1,000 Floppy disks</a>:</strong> A <a href="https://www.youtube.com/">YouTube</a> video
showing <a href="https://www.youtube.com/@DocJade">DocJade</a> building a filesystem on top of 1,000 <a href="https://en.wikipedia.org/wiki/Floppy_disk#3%C2%BD-inch">3.5” floppy
disks</a> and running <a href="https://www.factorio.com/">Factorio</a> from it.</p>

<p><strong><a href="https://ploum.net/2026-01-05-unteaching_github.html">How Github monopoly is destroying the open source ecosystem</a>:</strong>
A stark reminder that <a href="https://github.com/">GitHub</a> is a single point of failure and has warped
people’s perspectives of open source software.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance]]></summary></entry></feed>