<?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-05-07T00:18:01+00:00</updated><id>https://sean.taylormadetech.dev/feed.xml</id><title type="html">Sean’s Blog</title><subtitle>Sean&apos;s blog for all his tech ramblings.</subtitle><entry><title type="html">Weekly Brain Dump #21</title><link href="https://sean.taylormadetech.dev/2026/05/06/weekly-brain-dump-21.html" rel="alternate" type="text/html" title="Weekly Brain Dump #21" /><published>2026-05-06T00:00:00+00:00</published><updated>2026-05-06T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/05/06/weekly-brain-dump-21</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/05/06/weekly-brain-dump-21.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#tmux-project-switching">Tmux Project Switching</a>
      </strong>
      Experimenting with ways to switch between tmux servers
    </li>
  
    <li>
      <strong>
        <a href="#squasher-progress">Squasher Progress</a>
      </strong>
      Finally just sat down and built a prototype
    </li>
  
    <li>
      <strong>
        <a href="#opal">Opal</a>
      </strong>
      The Ruby to JavaScript transpiler
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="tmux-project-switching">Tmux Project Switching</h2>

<p>After my discovery of how powerful <code class="language-plaintext highlighter-rouge">tmux display-popup</code> is I had more of a poke
to try and solve a problem I have at work. That problem is that we use
<code class="language-plaintext highlighter-rouge">tmux -L blah</code> to create specific servers for each project we work on, this is
because each project requires different environment variable values and you
can’t easily do that otherwise.</p>

<p>For instance, each project will define a <code class="language-plaintext highlighter-rouge">DATABASE_URL</code> and a <code class="language-plaintext highlighter-rouge">PORT</code> to make
sure you can run them simultaneously. But if you just do a <code class="language-plaintext highlighter-rouge">tmux</code> it’ll connect
to the <code class="language-plaintext highlighter-rouge">default</code> server and the first projects environment will always be the
one loaded, even if you detach and do <code class="language-plaintext highlighter-rouge">tmux</code> somewhere else.</p>

<p>Initially I wrote a bit of a complicated ruby script that looks for the sockets
and uses that to in combination with another really cool tmux feature
<code class="language-plaintext highlighter-rouge">tmux display-menu</code>. It works well but only for currently running servers and
sessions.</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-21/server-switcher.png" target="_blank">
    <img alt="A terminal showing a popup titled 'Switch to:' with three options,
default blog, default startup, and secret-project 0." src="/data/weekly-brain-dump-21/server-switcher.png" title="A terminal showing a popup titled 'Switch to:' with three options,
default blog, default startup, and secret-project 0." />
  </a>
</figure>

<p>If you’re interested in this, you can download <a href="/data/weekly-brain-dump-21/tmux-server-switch">my ruby
script</a>, put it in your path and <code class="language-plaintext highlighter-rouge">chmod +x</code> it, then just
add <code class="language-plaintext highlighter-rouge">bind s run-shell tmux-server-switch</code> to your <code class="language-plaintext highlighter-rouge">.tmux.conf</code>. Then when you do
<code class="language-plaintext highlighter-rouge">^B s</code> you should see a little popup to switch sessions across all servers.</p>

<h2 id="squasher-progress">Squasher Progress</h2>

<p>I sat down last night and decided to do something a little silly to get myself
unstuck on this project. I kept worrying about “how to do it perfectly” and
overthinking every step. So I sat down with my laptop, put a chill video on in
the background, and just gave myself permission to write bad code to achieve the
simplest possible result.</p>

<p>This is something I can get a little hung up on when developing something open
source. I get in my head that every commit has to be a perfect example of great
code instead of reality. There’s every chance I’ll re-write the git history
before opening it up but history has often shown I’m too lazy for that, so
you’ll be able to dig and see what I did.</p>

<p>I am happy to report that I did get a basic prototype working with the <a href="https://github.com/HellRok/taylor-examples/tree/main/jumpy_alien">Jumpy
Alien</a> example project for <a href="https://taylormadetech.dev">Taylor</a>!</p>

<p>The interesting thing to note is that it includes every <code class="language-plaintext highlighter-rouge">.rb</code> file that’s in
your <code class="language-plaintext highlighter-rouge">load_path</code> according to the <code class="language-plaintext highlighter-rouge">taylor-config.json</code> file. So you’ll see in
<a href="https://playground.taylormadetech.dev/#version=v0.4.1&amp;code=MoRQqggsASCiBKB9AYgSQDK2AAgLzYG8AobbAIgEMAHKgegGMB7AWysYDsBTdgFwGdaAMwoATTokYBXHmTwA+bAFoFxUmvXZ6AGwp8+2ZKM4B5aSWwUePAE6JrnI9ewAuehS1aARhXoBrADQuPACWzOJanII8ROZigtjB7MEh7sEAXpwAFABknlqMfgCU5qQAAm4e3n542HkFviXYpSFhiBFRNQAMAHQAjABMAKzm3CIxpHHYklQillliWjwUxerNoeGRPEr4C0vjauXuXj6+3RVaCfFrre1bADz4nSPsY7GR2CLWFADuz2Oj+w02AAvv4iJQaAwWGwuLwBABzChhWipbiyXAKZSERpA7S6fQAcSRnHMeL02AgWmC3EalhsdgcYiczlR7ECzjYfGSwQ47IAbpx8vRkgBPdnTRA8TgADx4kns7JEjG+7ElMrlCpcAAtkp5GNL2XwllLAdgACoYLA1VQaeH2bjOQjTR2dQJKlWO3rAxrexoE+AQABqqDNAE0asN1ABZCAADRQEHQ6EQgdg6GMAGEQ+H8AAWRoAKTAUYACjVFP1uv1TZNEtzUhkcU0jXMaiyqQKm6VWW27ZwaUDSpzuRwaoHOPQeIxrP0ANq9AAcruwAGZOp0ALpdgVC0VjidTmez5ebrs6nh66U1eAHijseERbpcb6ZJukaWOoeMLkhDjdK8ANTYLmgQip+w6-uw3QitgQEgW+2DfMEIg8FqnoAGyBFqnDBPCWo8BhYJAqQTD5PKjoZowZHWM4zgAELoBAAByADSRHEVIPBUlwFFUVINH0egYCwE2Ky2twnBfFKaqyvKnB8I0AKNJM8ISVJ4hSrJ9gKUCIQRMw1DXvJ-H0PJ3R6ZwBlUHwmRkN0KJ6Jw-AMFqFBfJOkl8N0VD3mQgRchkjr9LmxRdhKmkapwNQWVZ5nBBEiCCNOmQWpgwCzt2VLcBus7ONMG6FN0ghUlQiBatO6QcEsHgigAhOZjAyZFXbuqqEVydF8WWdQcUJUl1gpZa6WZdS7A5c4rUFUVJVlRVaRVUcdUNU1cmKS8NbvAAVpIrCIFQ2l8JwIgAPxNlGUiHd5B1HcdmTnZIh20ZgyBmoU2AAD7vdgLGcCKV3yYdJ2ZD9YHOMAJYQBmsBiaQSnqJM0yzFKmS7MsTZuIdzbGiSQLfNh7AuKknbEU0O4FKK0Gwfg-pBtm2AAFQfIKewIaUZPCjwf0wfgMbxsgibJqm6ZZmGlyk4K5Oc5TCi8wmSYpmmmbZqa6jBPE227ftAM3QhZTsxT3PYEWpa69gwCmVw3QUJIIg8ogBnsBQqnWN5Ogipkzga1QMMaHDxFfj+PIEwB+BsxLHMiqz56Xv+NQByOUGAcBUe6vqlOhxBQeU3BTYAuofsTO8nw-OjuhRaULYmrj+OEx2OP++F6pyd0xcvqbmccI6HfsAhoXV9wLhiKICE3pOd4PpwT6cG3JPvuB34J-+7Ek2BTTd9By-EUhKFoau-Sb0C2G4fhjorvvpukfxvHUbR8CwAAIgfGicdxnDX1fzjGAGTEErAT-qKhYIfguB6FPr3FuXxfhAgLgcaOadW5i3NhJWi99YB0TAASNarx4bvF8PFLQXZK5RXwBNRkTYkGW2trbRqDsnaSVdhQd2pDLBah9nnbAAIYHqFBOCagdAmCsA4NwZyiJkRVF8HaKQLx0SYhUBfHQ5IiRhFJAo-QdETiSMkOtdQdJbA+FMnoacQR1h7XxEddk7V7AbXiHWFIVJGyDhaOIKgZiRBdCbKpLg6kVpWPzutZS7xPGSTmD4+uACupWSMnwEyZkYrUBsnZByh1nLiM0S8LyPl4R+WwAFN+2Bgo+1IKEOhnV9I9SCd4wQ1gWCZFnAhY8gQTyNOadgJprSWltM6R07p7TeldNaRuf+2AGl9J6f08ZYzJmjOmSeQZ9SJkzKmQs5ZSzGlzJJiMlZiztlbN2WsoZmzVk7KOXsnZ6ziKHOOVc05Nz9nzJOQ865jzOnnKBJc25TzPnLNeRod5zz-lfLGT89QfzAVgo+bMg5vRAjQuwLC+FMLEVwqRQi5FaLUUYpRVi9FwK1Czn3vkwIBLiVEtJYS8lJKKVkspTS6ldL8m4tILOAA7IEVl2B2WcrZdyjlPKuW8oFfyoVfKRWCsZcMhcgRJXYGlbKqV8qZUKrlYqlVyq1VKo1aq8Vs51Wqs1bqg1+qjV6q1Qcw1JrzWWuNVamV2qbX2utY6i1Sq7VOodc6j17qFyus9W6v1vqA3erNf6r1Ia3U+tDYGsNgaI3RsjfGqVsao3JoTZ6pNqaM3huDSmuNuaLXprzZmmN2ai2lutQWnNlaM0VrLVW8tJbC2NpTTWpttbZUtrrZ2+1Ha22tp7a2gdtqmwFS7JY4hCQDKqWWmOrB1ipgzDmCjZmaNHEmJcY5NxIcmaLAoLOgJ8Ru5NkYIIQQySaiZGuM41xDN8khWwAAUlvU2cck5pxzk6EobAx7T1OTWXunB8RW6jqbvYCBPxXwk27l3BekFRKzthutLhageEQn4dCIRcJaCiM4LQUYiA+D0HtOwWgnhpBTnYDIpQcjZ7YHsAAR0kMEew5A+FQkEbCZyfBXL2BECRsjHAyAxDJISYkKj8TYFgC8c2RHGjCewHRfjPcgSJG0DbKKtEFNWA4CrCwVhbD2EcEEeSPBEDIQseqdk3d2TnHETp2sSQ7HpCyFKI0pmRDOECBFDz2AoOBFyEKXwhSDguZM8haKxm3OswiuF2UOmyjdxqIekm8dILmR1MAgGNQVxxaaDZk4NQ6h+FZklXg+GnM1FzAuXO2i1DsM4f4kmKHWMCJhMIhExJcMvHw4R-sFH5BUexDR+jjHmOobY61zD2HOsiG60RvjWmKNCdUdgJR9c5OSZENJ3rtI9MMkM84Aj05OAWK+OwQO2n90JAc8EBsWRDv2BdEFiuTBmP4Hu2Eg4JWTO5JqL0dcXZ7Bj3vBEIyQOJ5TxnsRD8q5lyrwGK6BC29UKn3XFhHCeECL5KXEMy+5FsCURvs4dAqACTQDNDTUMQzAEZdAcBQIL9Eh5IJx-CncGAdOWsCKRApGFs1FW7RDbW2HT0UUxDiDxEQtucdM4ewNguc8-I1T9UjoyA3jl35BCUHsCjyWMDyez5xck2h2uUCjpcz9ARzRpHu81zLiPhjx0zLLez2p74EBfAze91EoQWjHO6ogh06UBjyRueKb58SAXUmevC80+RsXCFJfIWl8HkzCveQJ+V+QEAjGZBDK1zr8ej4Dem2N7Dx0gw-tDNINblHdv0cnw5c7kmrv3ee5JkFt6BAzYW0ntob8UVvR+OwWoSYX2okxK8l92y9kzHOV8NwLgXOqDBGlIKcyPBBDZNyZ+L7ZWMh9xH+8CKe0YNB0yBFJ7x+fv4C+90MIug5Ln-VAf9QL7DxzlZoD3X4Ok6ZAvV-wvSea3T9ZodUPfIA5CVCN6WgfJQoIZUoAAvXbObAP-BA28JA+3fCEAq-JzboTAngaA2A4df9Q-eIRGRdVGJ7WXTnUPBbbocgquDQIPHPWguPBgj7MoGwO8c7dgbIeghdZGSgkgwuQDSBdnMHR8IDQcag+XUXKQpglPVgv8IDJsd7E-HgmLEzbuWyc2I7MgILNQ9eGCRQfAP7J4IEW-VuQ3DQMgXQ+wDXSDU-TuHJF7ZxJwpTDQF-NQSwyBaw9Qd7ZaPgPPdwx0Y-bQgIqcfDDvQPLgs7BOPg+QhDYfEQ33OXWqUdU7DQ-AQwMQUwHgCHH3ChXveUewXgcPMIAowfWrGrerZIjQJrSEFrDDERDrNJEQSjLEG0EmOTVbMTRRapLRMYHRXbfRAGIxZwJxUxDdczLSEkS7WxG7exDgpoSY9dQGdxIECpEJGdIfOdLY6SHYjQOJKgcfeUAxXqbqayafJJJyAQCyDJXyfyJzT0BcILYpVSUpS47ofY8QKpGpOpDZfoYlYEolEE-JMEoE0EqE8E6EyEmE+EuExEiE5E2E-obVAYAlDEmFOErEuFHE-EzEgk7Ewkkk4kskvE0kik8k3Emkokqkik9Euk2kyk5k6kpk9klkjktkzknk4kxk3k+k1kwUrk4UgUoU8UkUiUtE4dS-EDcdd4yeSIw4pIuddgpdHdS-Nda9LdVGYQpmA9dwo9E9M9fAC9VY69RmSrN6R9RcZ9A8N9AE4iD9RQL9Y039BCdCdcT9XMG9W0oELcXYy7RI4LOUsDSHIELXJLTw+DDhRDBrYiBotDdjNrLDDrZfKgeSDo6jWeHo0TEiZbEsYIDMnSNQXRPbJkWuUaSzIs+SGYyKfkcOUUOdBY27PwiwLKdgR0JILQJ+DgRAUiKkLkZwzonhIEPsr2I6SULUAYvCR0EcxoJ7HsfAVkLsdM+SGoWcN-B03MVHJQXoQYAATg3ADKYP1k5n3FfSPEUEqz-UHD7IHOCCHIJnwHvKokHKDi7HHJ2gzJm1QhnK1BqC-NYEnL-KkDwg8TUm2LlL1JUkgoOOgt0giUMnwBvGiTONiSQquMSVnzuK6geKySeMCjhVeKbAVM+Nih+MSmqWYFqXqV6H3PRIYqhSYropYo2XosGEYs4uYu4tYt4vYrYouQ4q4pEp4tEr4vEoEv4qEsEreWErEoUokqhRXGkreW1XUoOQ0vqQPNUt+XkqUoMqkskpkt0pBX0qMsUossMpMuMrktkr0vsrMscrxXMpsssrcusrss4plOA1mJqAVOnQQuqLqMmD4BcRVD2hrNXJrIyQei1DbNIC3KPFNh3Kb2IkyFOzcUZkUBXGZVeOWmCAQhPPUDYXjJSLVKEMHDXK8islqg+EYA+jXPek1xrNgnFl3HPMZl1OgTKrUDVjXhiu6AUXyKvDuGIvMOIjCp+FVDXNZiAp-KnP-LOCOGqzqPi0Gq4zVi2H6qHEGsECYyNFjjGsUEGCeHRmwj8ESmnH7LfMfKDgUnIR7xbk4FI3hFM3YCSlyjXJuq0R4A3DjmqrOCkWiEDIAw+DEKqsGocHoAAqVEaprOauSzHTDMyEjJrKCyQzgVXy8mhviuyAmkgTen6qKJQTQQwRgveCxvkibFIxPUkhqH6GwAAGJ8kfMV9BR9Bj1sAIgkhuB6BI5NjkLsBBhfSFxmbhbsB7jXTsBEQqAmxgDQ5kbgCXTMhabBB6bGZ+ggt8Dz0zTQydaXTZbCCtbP1VbJA6anBNavDSAWb+gVw2aMzJa8KjSf0TNDZMg7bRa3ogJZa2q1bJJA9AbipLB7ZDI4b3omr6lTYC8kDi8aM54HbJ4k5-brBTdE6N5TZq9IDd5rc0dj5Md8Cq81BccaJ8c+JyJBJmI2JM6v1pBX534K7-RYBYAmJTY4Do70Dwc4747oc1zY4gIU606+6YIgJv1klEAxQa6a9EJs686HdsBC6a6S6G6BIGIq6i7SAGceIy7Cc757426irVqKb4gYaJxfArrbAHynySz1BzwagqavI7wRRjofd3osavosbuhGABRrAdBrIX6RpuA8DU4rxfQ7zVQr6s5zgxZzwYzaictEzxtmj2tkR3sszBsczltej8zxM7CPsyyDMKyDtXDmzrtbtCFXCNimDd9r9sBPTxDv8QcULO6i9p4ErsBod4c07K9Eds7PQLc56G9PScdy7S7mcK7idSdycAxKcE90s3cAZT56c67GcV7aJWcgRSqQr3gVN7AwheAKGjsqY4VfKtD3CahuzHqJIrYbY7ZaFnYGEmF3stG50x9mG0LrBzip9sLHI58F9fpIrV8tB19N9CK8lSgaGnMvDJhotQ4IjGoHqwawjDSgRZd5QCZQDZR1CE4xZMmzGeCYiwDaHb978+BH8L9CmsmEt8AkqP9ktECf82rUCGnHxlaViincDrdjb276mWHJ4R6UD-8+m8D68tgXS8nwCRn87uniDQbSDwaS5pDhngzSAfDwMIpAgtdkmeDrbEEe9Sb0FMESYY6u62GS9QiwD14DRsBV5tnF5J6rc+H2msnckl4F7RnPwcCMgM6aNl6d6P417WIi6t6mdRH1G74W7wEVnYyhjgq-giAkNSBEGmiOMBADJEh7ZuBJB5tyN0GujiJhsmMooxsUWUyuM3IjocWBMltxMowKBEgowsW+i1FFNGgVMtA1MXARcFtTQCHGR6aJiIszMjNZRLN3DrMjhbN5iyGlin9XMk9PNldNmQi-NCtAtgN5W3F8BE9YXVhYnJb1RA7zH8AozVh14W9Mt8Bssuw8tqh8A1WuxImMgKsqtdiVTEWQQwQSX0NUXaBkkQh7w+BMX2BsW+QqIdpxA08+sMQBt8XUnOBg9RtmsfWyXuNKWo3BMiA5NgAnIA34Q+BGWQ3mXsBAxw2whY9tNVZ2BVMxAuWK2e4dt6RCGBWdW6yxWeCJXKgThSH6xZWdXvMvNlWeDvN-N6hZTNXwtNXTHNCjWsifMUmmDzX5H3cstA9bXfACsAtHWqpwCstqw5nyqBD5hl0ugDDpgA7Bx13+yjgjoahhAtBMZ+r7pLp7AIgy4gZn234idYAXoXH3XeruEvXk3kzMN-XEh83g3Q2y3xBt5VIZB+tOjTZCWk3GiU3QPc3wOg39GoOOXWgM2aXyQc2rBMPC3JBi3S3cPOAAB1ZCOD6V3tpzTIMepyF0QIHQTwQUFXMNyj7JbjiNuclQcgWQUEedATwgET1qMTggYEJ7ZjrYF8t0kGpg9jwUGoFTghQcdT7JyCC89-fFZcOT4qg4PjsIGoEz5Y0oVqJQ58s2DDwN0j2iCjiN+t+PZvIV9zQeZUVUKNpXWUFXRQBw4ifPPp-T+nRTtq06wISL4W08TRn3VqZajwAPQcCUKNmoIjvNgtrFxz6Dlz7u3Sdz6XVLxTXzzHMgACQLiMkI7XEL-oA8gz8LoCaL5r2Lzwn3aYRLi4KolUy7Nxmrjxrxqqa4nC2gefdgRfQJtfKwUJnJZ44CEiy7czpsMgJmggC9czzr309cQqAYl4YEe9QTA9-U+dngp-UV1012gw8rG-KqO-BwMp+wM7ggnTWpx0oEP-FcT0z9V5rp7AGArW+AuTtqoHoCP-U6773A-AmZ-04+hZqBDQNZl8UodTodhOaDU75HigDjns1pQoILRHzIcz1HyCdHhOQn6DqLzoPHwPKzqNsMsKUqOn4MmBBGI9lqLz6z-gpGCz4rug9guBuMta5DID1DkDzjNN3jDNhD7MkmZgRgEQSQEHett4eIPr1CifIqIbnx5JAQMbib5fIJkJrfObiJnd3JA-GJy5hd0gNJ6wDJu5nTnah3j8xoYp270px-PJrwiZ6pkt+05Kqq9w-uwZlLLONpn77O7pp+UPv8AZ1A9eA22b75qHv7og9QE8v2SYcqH+06aMC6SeK57oDjngb4XrW6GPxOQICv4P6v377IbIM6fP7yIPv6Yv0v7gcvowqvowtq6vqH+FlXzQKkPwHWW+7+ySF++v7AT9-6DdW6T9p6H916AflI7QIBBodQIomx6hUOx2BxqgN2D2NfooRoW3gmHaq984I6U0Q4Lty6q-rVyW6wSQD7W-44PwTrlf47qNxANUxASqvqvEGz4T9VyQfEujUHEYCQNGi7IPiCwgFgtK6GYFiIpAfYWd144A-AJAKegk4yc0As1rAJUZcB4BhOPATC1NDH8N2-VCgaPzIGD8f+wZavsGQJ5NgNmTYLZlbwKYlUv+rPbnuqSWCntGgP-CqsujEiZ8i4ENNQPQIkHwMEIiDOXgsAEBUI7Gd4OhNYDxbyJxMEAWxowDpZ78L2umekKMUMTMgDIRoSSIgCJ4uBmAD0IBBYIp4uA0KXWJboPxbJLFGgpQUwVKFsDmcug3QV1gcGsFch6Adgyjr4PzCrBHBM2HwaYW6BnVVgng8wdENaR7NkEzgVBIcxv6pJduM2QIUAlOKeMzIuQ+gMN18YCBM4AoNoIwEYBUAv68IAitgHM6OhRA20MwTkJsHBDzO3vCgfkPOKRCShOvWgIkC8HCBTI+GKRCIAEAUDEA64XoLUPqGNCLAIgFoVKBmyRCQhEbH2KUC9g9CzIfQ7XrcUGG8BJIIw8QJEIECHQIgk4aYZ0ErCMA6hvHaDk0KWEPQVhYwwYusLCCbD3sOwryHsJnylDDhwwnwKcPGECBPg1Q64bmDmEPDKOTw5YZOTWGdD3BQ8VCD8O6B-CbizkIYccOBFvD0kUID6kxgMiQRrhtw+4YEAWHNCXhCI8YR8M4CiD4yPAkJOZxvpNAshtIood0CSFUjWh9sdoXSJv4UCuR0HGoDyNeGIjoO7gr2MKNCHLlnhvIiUZR3cEBFuR8o8UbSKW6rAURWoGURG1FFqiaR7wzUbQJSIH9GE3ODRNkL5FBD3B7I94ZyLNEC0TRx3I0BCLtFdYihtoy0RyPaHoipwctHrqaMP6RCfYaw-qJkBDGONuB7wfnqsHdFtCghXPOYNGPiDmcL6EYuzvCB9gYwooYHe8I0DxgDxnACQ6wF2BLECj1AhYgmMWPaFlj+Rxo6vDXAOzjDCEGoyUW62dGhUnIdIjMcR3vAUjoO2YsuDkkzEFimxJYssboC8F0izO7YtQFWKsG1jBwRQmcfgAbGIQmxkQ1sUaJFFri5xgYtQOwTpElk-Y+0YIHyGTGD8xRhopwfuKaDlifBjMCuG2KVEHjJg14hMbYPXEeCpxiQkUU+JXHGixB8QMMclBDGyZhxW4ysU2IoE2th+G-ecU2K9hdhkJ0Eose9kMa+JEJRY7US1AcCoQBe-wADsL14SQh5BHNWgNpAnzqCaM8gxXlFHV7oUSypQU3nCGtBVEWJCpfQPgGk7mAWJxxbieJz4keD2h7E4SWcLEmD8LhggTXrwEyBfYwmQULWu4NYn8BZws4BSUn04DHkPo70bIrdwNyaTt8WkhkcPi7FaAZJCpVGiwk2GlAuJs4FxKhH+qfR8AqASdPrjYaOTWEKYkcRZIuJWQbIXkxSbZIEnqSgpWknSS5PNCYVXOGgBUo6CsleSemGgYybkgXI+TpJd+dodZNQgDjYRtkooQ5JYTOS9J0-X0QbnCkLCkRb494JlL6GVTHhtks4UVKcm6T8AwAcYWLgamwiGhg4+Fh6zkHy8KJBGCSDRMwa4Me85gdIRghqAt1AwRUJyDDVsjTSCQ2Se9odDEiWcXqkgN6okCShiSyg9AEosIgsbxQ+JXGKQFoBmx95MYN+dwIdD4lKCaEKg52KdIIRSTBQMk5JNMHcFPTd+qgmoFoOoS6DVBEOX6doP+n783YFovwG0WtFAIMpn07fsoL0FOBQ4f0+xgHQ+l+SxAr1d6vtNDi4ydp+MxgPsHMkySjp1gUovJ1yzHSDG2MimXTJ4C4BMgz4brBJE2GUzqZFjaeOzK4CIy-JwgjUsiO2m7SPqDVHid1yaBEyxZSUO7tYFUh1VjAngTaAeGAAuJTIQNX6hIBVkHhWR3YCGZjJdixji6TMpMYIREECyZJwZLmcInp6qx4gK0psDRxeDKgwyVFYkHYGTFAhkAt3OINbEWAo1WYMskmXfkMhd53o8+MUA0PcAv9Eas8FbgQCjnAhHQq3C8Ry04DAhDuCZboJtEYCJBbIAAHQozJTcQYLf5hXXvgQB4ALEJui3WCLDs-el5OcJXj3jipjJFuODB2OAm+SKZ+QB6REPKiK9rp-c8dDYBf5Wyzgo83PmoBdnugp5-eF+p9GbBDyrp-ZUef1OIlIsRedAEaSAlTJhAxpJMZDsS2A4TZnIwgMQBIGkCZsT5LGUXufJQY4ZWQgmO+d6zF5PySM3owYq-ITYjZT5D85BgfJwx4YCMRGX+YmwAVJlH5wCrDNkIgX-z750CoBVNmqoIKiWSCpBr6ymxoMCOImZRKQD5b7Z3s7IVkOyHjHsg2i1ZYsuyFAXR4G2KRVwU5mVHYw2wjo8DsqMobUwI8YMVwmDNWBLkVsPCykKNH4UHB4x5RL9uolhnZCxFZQNopIvUayLnw7g6qooucCFliysUnRB2U-BkKj0EDW6k+UdBhBUI8vD2I6PMG2wjopctQPNRArTkwKu8UxeVBEAewvYi1JxZFQzI+xveeoawEyDKggN1y+AN7moBOasNwyGgaHGXj3Ko5eGO8U+MI3eb51PQ8S7ouXKwGV0gWCEEFmow0VgB4AJYTAKJCfgRKPJUS9QDErTqelnSwEUWkMmnqfc68qS+pYzEXAiMb4Fc1eoxByUkw8l3S2iCWEKXFKRImjRoBn0ZHvBIG95C6ghNICWLbA1itxDtX8WBKH6VsdgM-Vfrv0F6IDL+j-T-p8AAGrIYBheH1DJdOxMYo9nwJXQHBTlQspYF4R2pEI8AJCdhfmLLkeA7qsys+l2HjHmzj2wswcG0UBW3KnsgNR5XcoPFlA6FRGPglCtMlkzxBizcRd-JeD2yDggNBgaCoYGnKGBARFQqsDhW9YEiYhW0dOHWXBKaq1AHIATR+BE14gJNNIWTSOZXL1Y35TxTtK1DeLx0z2I7N0F0aWRhEyKg9G7CsXUhdWWMVsCQmwwSAf6v0jst0DwQeB3BJKgeNwrCCR5Ns9C7RWoHeyfgAiGErgf+yF7bzSJu8nvGi3paqhsOR8gln-IwXvyYFl88QJxHQUodkFvrdFraqxZUtFsWbZbHSwZZMsUiOrNsD6sg6iqrsDHBxFiuhlpceYNqhztyzjz5c1A-bFwI6Os5PwvM5AEsG7Eq5qBguEhTgKF1XDRcz4y4J3EZ07w+Y3YdVMBgcDzEQdE10-ZNdl1TV-h01pATNQdkzFBsfOLAzPLYQHVFqFl1XcpeWtzAm4941a1rqQDrUtq+Ajam-ooTbXBr2AKavLmcwK6atk8LBIdQVz85Z4c846k7mjxq6lry1FeZcFWrZQLrsAdarfjdIHw+Sn61nWaDn0aBhL4sCakroQgHU5quw661lun02XbKI5UbL6HT2AHWAX6VRHuY6PSJ6tMiOTbIkYDyIFE42+OeUNEhdhAJRwmAvDdOFJr8wwA6AM0FY0ti2yyimqipT6ERl9j82KG4LGhp04Ybci0gbDU2AzAkaCNTAGznxusD4ayNEACjVRqBAvqmZ6XAdaRzkWXKe5avYyExNkk8B+hBwvXgEwN5TcN8xvIigeXQgW93g2hCpv4Wu7YASm93cps-lNCvcmwH3L7i6Qj47wo+DmzICpTqWvMU+-3H2JMrMnXLeBAAv9eaLp4myygy6znuFqaCga+ebPRoMJvw2CrBN-leIB+p-5waZ56gRLaRo0XGBUATEC0D-EQDQBmI+9fOKgN438axNEmvUs0HY1BwEVNygAT3ODJzy3Z2gBwE4D+ZZKZGVHaACGBEiNBmBQIMgAWG-Iihi5IitEE-EjLuFbI421gJNvYDTaS56U1Rf+roIEqgNTPCQWUFi1x4iVbG7gvEUxUyDGsO8v1lar9ZAa7V0vDBsfMdWeqsFKZV1dfJkBEA35Z8oBZGuw7+qPVUCl7eh2Y1Yc-VaY2Dk5EzbZs5Noa47uGpISRbsO0aphXGrKAPjoOiACHTTIy4kdO1TnMIDRxEBwc9VpAdTirjpZmCnA5nc9XJyChpVSACwzot3msYYyXp9CdHaENHIaBnQsbXqZR1-5UAPYJYt6FzvhhecpOfOiNv-y85C7fx1gEXetviH1iMdWO2TSDpTX47qOtHJyCTu5pY9OO5AKMKJOp29lFOnoHck-EZ2Cct+rO1GVlKCEzjRdh4qgBLrTHTAhd7QkXU-Ek6860xrUD3UEIV1cDlRL4qXarvakw6Q2OXSjoTuJ09q9d2PFXLADpqTh9AJul2skiCjCMmwVuwok9Vt2gzFReop3aQB51M63dgu5sYMS91Ngfd5ejHf7qr0vAg9agPxScGs41BN1260XPHr7XiJgNx6srtIt8DnqS1jDMtQI2Fqtz71jeWtT7mw6rqap8QBfe4NiJzsciJgbjc+Ae1qActAmojbhpE25bUE5GyjdRuKJUyTpSakNSGwU2IaplaWrZZ+sy0-r-l7eqNhMog0v0oNimGDaLky2KaH986ILZbPiFy66RmO7XfkWi0iSHd4OqA4CpD07j+dWOxA3GPf2i5+eCW-jcloP39V0timL9SAKBB76hl+WwrQVoJAlaytKAgeRoFIMsrT9kmuFqvoa0cAmtIB4Feyrh6NB2t3wKeV1s0CZKEBfWgbWaCG1gHKdEB1AwwMAkq6EDBK0Pa0BkN7a2RGBrbeStQ0nbIIZK1FaeOsDnjLxKRCvb2LzY+w0xMNceHdkzGNI+gSKwfn7pl0trzDGOyw-eGsPMbAgigHoL0HsPGHXDrkdw6YfA6BAxR+jZ7pv3z2Gy2dLsceuZzbItqn4mQG3dEbt1pjwxzhtqmEeESFQ8QrATIMuF8PpTTVCDL1thntVAgWaEAEQG4lQhRQvJ2AeyAKFdlOBokiEKKG4AJj3d4oMEO+YAgCU+Y3I55KkJ4C+AGGzIRAAACSOg7gY1RJM0aVBqCYgb844rfKe2A7yJD7SiSpoKF8AAdmCzY4oNSOqD9jY2Q41dtGnLH1jmCvefJFoC-asWpx1jLcfOG3bHjn2642NhePALM2LNYwBmQJjTALAM9V2b8D4Nf0ATmQJpckvwKOhalnmZIBEBVyLaqAMEVbfoRiAs0iOQJp6Tkgaql9NAd4etYwjxODEFIQMnkBCZpBEAWaBIJyJLWwiaAZNcvBzEYiqTEhaMrYO8G4jPT8RJabkODpZq+Cmd1IktBqsSJhrdAiA4JpYArO7HsnWgopnmBwGSDTgzgZs+wFUnkg8r1IMQLft9LlrSbL9dG9tTfskBgyjT3MiPerqxYFFia+zFlRkJpPYB74kQRnDcz5M+rsALi+XkQEmA+rzAtJ+k3UYsBy9fq0tJxIMY3Szdq2UUEM8NSFMcnvgugX3C8EkjX9C4O6GoOCYVMaR1g+wFmqGD5PsFuadwvIfCEYDrlsIWErfoiv2DgmEESoRoIWb5OtxwOpZ+EOWcrP6BqzH2LfvIRkH9UzQjCfIAJALWWB+ozAIvtUm+CHR4N5gOiDObnNhyMW+QaoTUDIA+rBMHNeuCzVdNShJwIJ90EP37y1Aw8RiLABmGwBRzzAXp36vFGZ00bp5CLfxBScYALyHp4J19aUfBAhYgdF8owO9rVBGgKjTBLRMkGepgLggHHcgBvryJM0UdnAWQE2dIBUca4ZAAk0wsxgUBLNRgWuvBxQufZALnEGoHBa33TwfcZANVsJy-5mh0LyQBeimZDMvYv8BggwzzkzL1VFI0oDMpOAvRvbOInXcRIVEiJ-z3Atkai2wh4sHh+LxF7jZMVuAiXGoYlrQAUb6BDAkVSkUoOBfyJiAoLMFsgGRZ4BM12CyF0maQAJDniB4GFqKK5AFDAnXV+Fsy+4KvY2BcIzsW9ndMq2rABL0gUi5hvIvfAfcb-fvW5bqHpnH+48t9QeLQvWWCT0DUy1xZ8tyXoDNynoDcMGB+HzQ6FkM6jASD6A9G4-NxH8WYBO1TOtwZy-nGkt8WImKVuKDcE2BKXEAKltS0UZis5X1g3NTYLUAnAsB1ynQSq0RavmCW1SPhrK3ResvMXJW+WR8k-3csRXBrsMaq+ppCvt6wrHlkQE1Y46Shn+9cc7QmS9Z-nSWk2DrKyGAvwcY2iHGjKUGwhGARAkFwjNBeJb85nAq2hCzKycyDXYrBMGyzGsczYWCYL8pK-co7LqLVtYiv2BNZ+sMXXI+gEMzKF4srC2L0F6QJxcItLXEbF6U5ayC2viAKAyRkUMwD1BaApLmNwBlBG7i43EA+N2pqTZkvk2zll4Km-jfKV02arpys8iKGZuZBab3Fsmw8tKhjpubZoOUv0Hvhs2Vr+KjnkLeWjbX8bIt2YmLc0v+Ibr-Le63pcesGWXrb1xK4RcsvNHyABJuy1FCJNA30b0-JvlrGjNeW6DZQQRdraVUqKDxUN8gAxZbDWB+AM9VEThc5vS0BrwNjG-TY5uNkpYXN5aC1ap5f9vr5AaJKZ0jNrF1ySEMxX5cSBUAb5AdpoALd4HpXegRm2izlcZO+3YbV2HrO+0WscJlrWNpVZzegjN9A4AoY6FTaitf9NMrt+ICGcWVD91+exjOzPytvrFtWu1xVaItGuxDc741gu1FCLspmcLpGETQRfMu1ZK7DNmu39C4CIgQgDdpu0PZKOyDDrxmf85-PjHnXQLqwW62IHVvyRNbz1nhcPraLvXY1SF4G9Hd+uIXgT8Y8u6UAkX0aNM6K+607edEu3frgp5i9OFYu6IUbLmcuwjfpsArzSG6JqxHYlsXo4HcpYW6LfFubzXgqtu6w9fYs32tV9EP+yZaPaDX9bcV2yxQHsuz2-7n97+0IsId33lF08KO+hfitHBgDcwOh3-bBU5287ztye2VavTRni7HHAeOwXaIZ2YHNVuB1qQQfh2GM4lvh1lZful8AA5PZbEcExn+43dszhbxhdRy7gweq+uS7xf2eHapXw4AeHxAP1H9lrgiP1qOMmE7tR9YNA+XuyPWgLjxB4o9UvGPOg49rBzEBwcX28HT18gC9aYfjCma3cMh1ZZ+tG2qHJt2oLQ4zvmOZF4w9RVE8GIQ34ytj3MbKa2CWAGTBToY+47JsAqrmPjyQEo6ysQAXgMdvq0I8Yv6AXH3DjJzk-gcD3Wk3QSMIA-QsJZZrEj8p7A54dVOFHNT1S4oAGAqO2HnADR1FC0e0YtESQe8MCYMcRB2nEiWRV088smMBHk15x+Y2LtrmfyKTvwCM5kdjOg+0oap7U6CdEAQnR0MJ1rdvvEPKKY6OJwbd+vG337qT82+k+2eZOf7RDjpxioAeQ25nCzs8-FCKfnOgXP8qRx454dK1I+Ez8S4MGZT8Ol7FTlF-rVGZ3PVLC4QJ7vYu2-mD7x1losiDhkhZT7sCNWy84IdfsCQ2Qh+45gyBfW5nf1xYuVhwttFP7CikFyy86kQu8nXLkB4yZYsHhkbHFnu+bekcrXQVuzza+i9UuR2qrZNpV2g9lt42UoGD5W9g-PvPONb+DiJzwuFeDESH3PL5xQ8YvUOZa8CtJ4K4YfMvmH8PP2Ko46McPdbi9+RbItHsBPsXkLw53GbkfrFRHvWThysMueKudnYbmxaq7UuBvZnFD6F0s50erP4Q6znUJs4zvGOnE+gMx6Cssct7g3CT+Z-Y-cjz4nH9R69E4hjcXolX8blV6Jd8eZB-HJLsgVpaNeX39LTLpRdE9ifA3yH5bu18k-5dOvsh6ii1+C5YcHPR37top1sBDOLuG3pQUFeM9beTOCjdThp2QFjuhvTOxdtp5O86nKvfBQwfO9ZcGf6BhnSLzV7Is3fKW230z5Se1dTeaPI3GbvRxuMMenvOnzb3wX07LfkAO7xzlM6c9vbiI13G7m54S8yCKAg3gvYJz28ZdmvCHM7kQEzQ+dykbXo7353y8dcAvnXL1zD7k5sdQvNHjGRYMCYnfyvl7Wr2Yt0C6aJuZ1b7nF-TcY+RQpmGOeD8ynY-7WgQKGI62hypc4ZqqJ9+7ThrPsMuTX4TsgC9c0XyQ2XPLjl8-a5dYX6jMVT+-beEWO253WKmKuoqU9eQDcrIPRR2QnvWWYbTFxkwq9vYQPZXa7wGjjcTfk3kHu1LRdVW5sQAqZjCDz4DRluRE5berxW5g41f03AanN7m7zd3tPPe3199D1+xM9WuuHw7+J4bcof2W0FaTmZTZ3Wmv8Jy104Gu4lUVGeQXJn3XeZ5de0Rwbz4XsoYu+XGLed5QIxUHGii7XPWBixAEV65WzkWvvXpgOGa3S9BLli6q9z9bqPMZZrOFtcs58GqA1zeibtq86JfsHvmnJ7gF5CpuWZWJvoH3s-lYsDsBGAU3xOvN688bUomibgT-GXqduIyA9i38o4u5WIQUzD-Nd4N+BrweVvHr9C+t7l7MZ47riT+9t94G7f535AR7314ArJn9AD-CwIiESAffvyk5Ib7wHg83fh8L92ewxYB+Hva3G6EH4NTVIrgrPP1tRRSyH4OAuAbiaYOd7MiLervW78S5j5fOGvZPV901wp54UpeH6eHzL2O8TpyvfXA1YssZ8GpmfdFNX16-p++Bk-yAZ-Ep3svOXY1LNRiMxZjBy-m2H6ANQag-T5syWNlS35n6peUkG++LD9Y8BuGWg6i+Aw-LIM4GubOBo5zgXOtqAJfweCA0OHcgSlXjTPDygQaer0BAgpL56uYP7DJ3N-qbLfvQa35EVt-2+PYTvl327+cBQ9Pf3vm4WnRXC5h2UQfkP7CeAgR+DXKHjn326S9DKYqTNU+pdX6g3Umv91fnz86SdC-P7eXu9vdLmICLQbILurwZ-Wpi+KvEv3dRoGq-k2Gv9f98sOUE6teG-B+qK2N6fWsOQ303-QMd6-SHK+E7Zvn2k8Bo1-z6dfvLyeLFfWWdHX6Rr1P-P5r+TvyzvrPR7Jt5eqbBX5f5N4O+U-x+v9Lf2s539beFve1A6iNS-YS4GV4XeWivtTz26cHCinUIAWZD7+F9JP4-KZ2Ht5kAZ-q+Rz+V-rf5ruj-jq47WE8qS4HW5LkaCH29xjaqQc-qpJ6XWMvA3AOYaHmQBd6navWwqet2Jy62umnsCbb6UvAC4bqHalHpdqUEL3qFcoHsZgJA7RLmojqEUKPqTqIXLCgEoK4IEC5gc+l3hkA67DRYQ+zfvY52ey1g556YkDmjYi+Crig6i4OrPB5kAIWCIEYmEXjI5GBz+Im6mB6oBYEceVgXQSU2OASzZ9MHnnTzrsJgSoEl+jzjpa0B9AbwGMBrcE36JO9rpwEi+X9mHjX6W6gwE96I-gAiCBdgUaDmBYgSep2BsoJIGNyU6jIGBAcgcBCKB5ACoHWO+wEA4MW2kDCATCYpszQhB97rA6i4FQRwC-kjALdD0qcvtvZ4BXbirb+BcngZaBBkgBpiKY1fvBKhBWXsk4RBLltNaXU61uYJo+NMhNRlA3AWaaDBdBAIH7qQgSkHIQ56nmoZBueGwJSB16rkGrg8gYUGrW0wQYbhWl9CV4jeJQeYCeuhJklzDB6-HQ6i4sEmoFTWd-BuwRuA8OAFHQWAVMHn0MwVcG-U33llat2ZAP1TsOjwd0JOwNqi8F0Ebwf04huDwe-xfBKZsd5bASzr8GSO9-vTauWFwc7A-U6Pst6+B2ljQG9BxLP0ErB5GEzSZaowYL6z2imPCHkYnejwEDBfAbrqZqyQdtSiBw6ukESBs2gcHj684MuCT6rchbiKB9+lj6COYZo+yc00gFyC1sXNCGYTBefA9AF8xrE3J6cMgf5qlB6For4Fea7rBof+jdjgHP+B4uCH9UIZrKFRQs1nLwCgbiB-5K+qoWoB92moa9z7keQa1wgeKAU5DpMT-C-xGh-+iaEdBe1sh5+B5IZz7yeVIXwFPBjjsdD0hBHmeYLYzIQfoxhO6pUoGs6wdyGpBfIWVwCh+wdkHSBooYUYlhkoS-77eUUDaGHenEIqFRQyoYyYuhpAG6FzsHoUSi6h5gHd4C+FAuXZ9210JFY72SIT9YGhnfkGEIh8EjdBP+nfi3Z+WEIe3aMm1YXaFFWG-vTQqhTIb3aW27of7wtygwF6EdhpAF2G-WSoOwBqOWwD2Ebh6obPzdO5oUOEK+foXby4WqAmOFx41AidBTh3ls6KWh8QASZw054ebZ9h2sAOGdBPoYr5RWz4X+CvhpocF4aQg4YJ71E+9kQHFQyoGULiql9HeB7Q0MnKq0uUnqbDxetAeOYig9NJ0bEmMECGblG6Xt84d2qETWEEw1oTaremjxhnaWmV+qaaxBt+qK7ShIbjBD92JEeXbIAXwPCDhGHuM4D9BjjKxo+hOFnwBIQy+Gs53gxSDpyOiwvlH6ZA-EU7BCRtEKJFr6CcOBxQRjUNtbN277q-4m2SQMSLte+1EkBcYegY0CqRgkW1gaRbIUVB1gXGDtbaGH5O8HOO1EbNaJASvuRG4hfFsxHEh0EdTaZAq2Lu73edRkxguERjLNYZA1SA242R6kc4CrY6Iq4Twe6rqt6T2MENsKgUL3rN41kfEQJGJRyUR4o5ReELyrIBEUa0aUMQqmXBKRlgepoJRdkUlHEgKUUdighFYaYHYQMEHfREmjAJ4AtgnWgVFqRTUclHngOsgNERAFUYybYYMLHVGOBDUYVEjRLUaMCThOAQZFdBZql17chtACMZCAi0SdaHyOEbRLy89EgYD7R-AMWzYM8zJlLYYTYF8CPkxLKgDVsYDtK63GsgFogRAhHE9S0a+RI+TU2rQc1GfC5+uqbGmSnDCouiSMt8L4A2GK1GgYGEpdiZSJUc95lRa5DUAwxSMf+TlRCMUjJjRfURNHjoMMYsr-8kqnOiZSK0SdA1AtUDDGJALYLGYWCbkDdh5A4gHBwewpQOqrsAhUN2QzycEYByEBPADtHQWe0cNGYYDxiGx0upAHRIg4jUXCDFs-QdjF+SosWRypM9LJjBkAT0VK6Hmb0VMDsAn0foABRv0UGwUAAMf0FBY+sbDyZS2am2qKxgqmdi64owheIGGWPAlAsxzgEOCba5GD7Dky6IjtrRB3pqQHYcNsbTH2xDMU7HMxTkKzGRaUbJ7G1SSMgdoH61sTTF2x4gA7GMxzseHGuxccRzHyxMklpEcafsRiwBxicXeDBxjsUzGIALsfVquRHANEwxxfkshqJY7sRBHwS2ceZBsGmbi-T4AtULnFZwXMS3HmRj5Dyrdx8-m3FgqP3uGFku20btHsmtkcDqZckHOLHemJ0VLHnRJZNDo2mRbGDR1SbxhvEaA90arHqxL0ZrE9470TrGZY+sYKqGxAMTjr2cWLKbHfRTMubFIy-em2qI6tpkXF0xKcaHHlx6cYC7Wc0cSBJIyQ8TZyvxt+u-ElxqcWHHqarsUAk1xACX5LiIdVPazqGL4c3GbxgCW3E6RlMUAlPg8UFloQxfkv3HORQCR15VxUECW4POE8X+a7R2EFoAZkImgvFZ8jILrEzy59rrGzSTEPNLq0PAEtJkAcABAD3waUMADZIZAPoTYAtUPgAiJ+wIr6sJmWMvJzSC0twnxUZAPfCoA4MIxChgwiaIm4AEibIBDmI5rlrjmG+NOBTm3EJIDSgp0OYAyJegGz4-mk8YLFy8fgGiz58C8ZLFRQ50I4myx+fI0DPQZoL9ikxSMr7wV8-iXXHuELMg4nqsgfHOzhJj8XXH9ht0IgBvQGcP2HBJMkv3ZHQYSWOyrk-YTUDRJ3cuGGfsnevUDCRn7LYlUJgsZLhaxlATvq4gy2CLZGgRROYBlkRgvhouAR4g-yKgkCNeweAGZsdx-8mwm0k3sQEWGEBaohKiplArcF0kRAQyRQkEB20eca3GFAbIjVJYFpGHl+thD3jV+TMiwELu9Jpsmgx5dvrEbmNCfkDZyPoQxazWdCVyCtCDbvrEmBxyYwAOBMgmSEQWFIeQBFEqXlKCJhLfpJE94I4nKBUAn9rcY1AdSTwBb8ADqQCHJcTJNKGR3Yd66kOTEU9RqkZAKjCPJJ-j9YfJUULD4oht7KOArux8XUE1WtxoCqTJCbkFHrRgdoSlPUEyQ-xU2ljHF49BUYQZbvJtQXrYZe6gck5ApBpoCm-J+ACClgp-fo+YX6Vps2DQpGUba7QMLKSL79m0gminkATNAghYp8PrimMmWsX5ErWRKQMndJLbnpHiAdKfNEXoRKdSmDJoYTMlCeCEfzHfGWEcZgLxeEa8lkABEQyb-kwJodB6A7Xtya+4q7hRG2uSYb5GRBM0fRoKakKU0C3RMKb9bZRyMQBR5RGZAK4tRGMV4qzUagXybfCFZuuR0+BKYq4tRRqqlEkhM4VsA-ODFlGlP2xHi1FExyysgFUcuYv2BK+owC4REYXtgBRJprhDB7LRXWGAq9YsMfSI5poaRWld21QDIQxpFROzHdAMhKxryKLaasK6q2Ceuyf87kVFAzRs1tpCQ66ackb3xoMZzEnekoM+7bu67sSC+BlCQfbfGisYsmxsuEQylrJ-QfKmQIXyfa5emd2gC6KxrIWabkeeodZ5bAjQekjVBl6T8Bru1se+nNBrQa3B48a0bBHhhzybpaMplIWyFMBSxPSFsBOFremMR96f7FYsj6WxHmm4KYKkgxwqT+IFxsOmclbAxdrN5uwyYbizLp0sfwD2RT6ZbHWBmrPB4cgjcVnEHih4TZ76AkkQOokZAmGRkrxlGWhnexIOpzzGBibv2r8ZUcV-zMZBGTPbYAKeBxl3++gZXbkZxSQ5GZx5kO5x0ZmcaSFnpiXnQFQZPrjYl72fMRcb7yICZIDHpV1rPBgZtAdfH5spHF+nfA16RynsZd6ZEHGZauplzyaHES+nQ2b6fJCVBcNg1S2Za7sZnDpPmU0GbpAGYTQmp9KaslaZVmVlwhs0GZ9Zepo7nBl-JmXAxFixaTi5nWmbmbaYYZQaRXDbxSsc6LiZLTn87VATYRXaY2CmbRCxZ8ms-E0ZoWNqnNWbbs4D1ZC2BpnRZXPrVlYsGKc5YDS5qbQDYRVSdJ5qA0xtgCzG5AE0ajA04GsaQKGwfzFTxK8T8YfGc2XYmeAQsTPHOQisacZlJ62dPFCRN2vxl2qK2YgprZtADQmXJO2Qfa7R4SU4nqhV2UQG7RFScfExA6AHcKdm94ENScAO4DUBvZdQuBy0QTEMYBMQQ2mBk1ATEJwDfgvFjVk54DGhZkGmwNm+ZUmHhPqZ+hAYphkF6DjBzp6ijwDYkWZUoG5CtQiOdoIfmJIN25q24OZDlhUE4DDnJAcOah4I5hFl+YcA+1Fm74AfBrRDIAOgPCC0QA2vfCoITEB9DYAHOc4Bc5TsLRBgATEMgCZgYAMAAPwdwYkDzy1QtwBQmTzGYSCMmOOrlO0XEHkhkA2ibynGY3EtokOBSOcrko5T1AabmAKRjvxGyYclIZJCTwACB4RBOQEpecxOdQik5CuaCae5SkFwBQ5E4JTn+59AGLhlMdOR7jDIYGSOh+51OcHmh5LmONljU8XtrFsJViccpXGq2asbp5p2axjnGVEkxJPGZEkNJbGb0SdlOqOeUXlHGNuTEYF5lqhJDWquGWLGl5z2t8bGZNeYZl3G5RlnlOqf5khGzmtAETGdGGEeaJWpIFl3mjYf5vMk94J9k3nEsf5pameytLjPnzZ7efXm+qIbNPkrGB6ddrGZG+Z8YieH8kIApWu+RnkUuonp-JnWi+ZvlEBlLkfZ-2x+adn75MClNg0u1qUvnbRN+bAoSel+Xvmn5B+YrHkBi+UQDR5vFsOlaI6RPplkACxtOCDZmFAvFyYZoJhQuCH1hkCZA8UsFLuCZFPgAKkyohZppSS+k7QJQcwY0AXoAVMAQwEFcFEw3oJBe5I8eWBOQXm8PkvcR7Q5gjOYYFNBWQXNgzCvgUDcvxMlDIQPsFeBYFbiI+hMFdCXYDKgjQO7RhYMBKIUsFbspESCAhUEhHTgjQOUpi40OFeBPiuSGnQwQWhU5iB+TzBQUZAGuYapRMjBV1Dpi-BY0AWQNQG5J0I3xHBRZA09EYXHYofg3guFPsBZBhktUG2TxSTQAqRPwPBY6A8FlhZtbFG3BpRQlWqBRMKbCCtCIGT4AAeiJcF9LvnT+UEwkkWNgjQJEiuSNBT8Sq5iSk0DAEehcYVuFmOKrapFxRfSKmgyEDjQ+AOoknY8qiuTKCv0M5qBDxy6gDObdAuNMx7JAjRWmZXgEcsKzSg7Rdzqnx5IMhBTwG9lZZ4JQILFCtwPhTXR+Fdku5Ib0pJgULBFMSKEW2KJMHpYBslgEHCOgahQbgaFN6C4U6FpxdoUz0BRWcWlFphfvgH0JMOwjcIjGlkXUApqfBG-msBUdHjS5IAgVlI6OfZiP2qBe5LeY2+JsKYFE6HQg4FzrG9jJFPchZBEhYMSgTLF9hRwUeFVBSiVToOtPQVmF+BbIX6YEhasCkF2dKnwuFGUpsXhiVhVUppFD6AQXyQzBQSXw8pAFIVuIMhXhQMl4hfwYKFShWuali6gEcVsMJxZUXnFwpVcXI4nBSUWF+HheYV9QfBWEXhITDNgB2FU6HkXOFlxVKUMFCpZPDzFvhSCX+FKxaoQxIGxehRbF4RT3KRF1FNEV8AsRSSVCFCRRAF4FKRRjhpFvwswqvFJxDkX2FqpYYVFFEpa4VSlOtJUXPK6Rd0UNF71GIADFH0K0U3MIxTbxuyoZb0XhlzRYMUiAgQMMUIQH0ZlgTF69vsUN2psHMWQICxfHSQlqkJ+ABFNdEEVrFowpSWbWqxbsWJA+xc4QClL4EKV+lIpW2Vilu8DcUaluJbPBBYKpEJ4vF6gFZDvFvMUQC+gFUB9nuADIHNn4AP0Hbxr4Ppm4oy46xqFDzlXAMExxAjOJixmKy5SfJvQ4dPtQRA8cmnae2quE9oA52AGo6rcR5ZnJqO2csTTgAUAHABIAaAGlB4EugIgBRyt0LeU+wp5foCyABgPADGAUYNgClaMANnKkA65YuVLx4gDKAB5OGqACQAMAAgAoAQ0BpJdQ1vucCMasMB+ELKCoeQAQp-CS4CZAJFSRWQVX6BcENlWgDOX-ynXPJJdQvgVUY1GSvg0ZTZLRnibtGhJl0a6APRr7hzZ-Rm4guIHtjBAjGYxtSBeQUxjMZzG7FYsazZD+bAVj5GxhXnbGPBXsZv55eQoIogxxs7Bt5k+ZcYaVkIIenIZjeV9pGV2+YVlt58+YfKYm2AP8biOJxPo6K5EheCZm5+ReKXNKJhXQy7kIQDrnImE2hSAdkGJs6bYmjldoKcV7DgTCOipJukhEApuQCa2VdJsu6SuzJiqaHgiZiKZcmDTrybyg-JnKZbAuZpyZSg1QRKY6i0ps5VclApvKbCm4gEqYW2rJi7A-RwWVqbORupkQCo5-ye1WrpwqaJEqKQad1nsRFFvaapCTss6aum5kVFAignpvRFLlfpu8ABmNtCtjBmjJkiAleyoZ1YuOMZqZBK+CZoVVYppREyA9JeVuzkVVRUDVWSg+ZoGbYARZrlUlm+QJ2b0AMtN2bvMNZoinNalsl7nzyjZiL4tmuVW2ZrO91V2ZVm6Zo0DSpehuGF6JIoKOZDKOgEYnWAU5qMbIRxBvJhLm7OqQGnOG5luYIsH4XuZOQ0rkhCgmJ5pjBpcF5sABXmN5hLH0R95hcAvqz5kpBI535l+ajyQAA">the playground</a> that it also includes the files from
under <code class="language-plaintext highlighter-rouge">test/</code> even though they aren’t used.</p>

<p>Obviously this is just a prototype and weird things like this are to be expected
for now. I’m not entirely sure how I want to handle things like that. I’m not
convinced I’d be able to implement a tree shaking algorithm or anything fancy
like that. But maybe just a simple <code class="language-plaintext highlighter-rouge">export-ignore</code> option? Lemme know what you
think in the comments.</p>

<h2 id="opal">Opal</h2>

<p>The <a href="https://opalrb.com/">Opal</a> project has caught my eye and got me wanting to try it out.
This surprises me as I’m usually not a big fan of high level language to high
level language transpilers. I feel it leads to obfuscated errors and harder
debugging.</p>

<p>But something about Opal, which transpiles Ruby to JavaScript, has got me
wanting to give it a try. I haven’t actually had a play with it yet and I’m not
sure I’ll make the time. But I still wanted to highlight it as I think writing a
reactive frontend in Ruby sounds a lot nicer than writing one in JavaScript.</p>

<p>Specifically seeing the <a href="https://github.com/AndyObtiva/glimmer-dsl-web">Glimmer DSL Web</a> project has gotten me
interested in trying Opal. I feel like the README doesn’t do it justice and that
an example project would help me understand it a lot better.</p>

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

<p><strong><a href="https://hanakai.org/blog/2026/05/01/welcome-to-hanakai">Welcome to Hanakai</a>:</strong>
Exciting news for Hanami, Dry, and Rom getting a new brand.</p>

<p><strong><a href="https://matduggan.com/boy-i-was-wrong-about-the-fediverse/">Boy I was wrong about the Fediverse</a>:</strong>
Someone discovering why they like the <a href="https://en.wikipedia.org/wiki/Fediverse">Fediverse</a> so much compared to big
corporate social media.</p>

<p><strong><a href="https://csjh.blog/posts/a-tale-of-three-wasm-runtimes/">A Tale of Three WebAssembly Runtimes</a>:</strong>
I only skimmed his as my brain has been a bit mush this week, but it’s a very
interesting breakdown of interpreting WebAssembly.</p>

<p><strong><a href="https://larsfaye.com/articles/agentic-coding-is-a-trap">Agentic Coding is a Trap</a>:</strong>
Another post about how not programming actively makes your programming skills
deteriorate.</p>

<p><strong><a href="https://devforum.play.date/t/dirty-optimization-secrets-c-for-playdate/23011">Dirty Optimization Secrets (C for Playdate)</a>:</strong>
Some nice technical optimisations for [Playdate] development in C.
[Playdate]: https://play.date/</p>

<p><strong><a href="https://www.youtube.com/watch?v=Cum5uN2634o">The Complexity of Simplicity</a>:</strong>
A refreshing look at the different types of complexity in software.</p>

<p><strong><a href="https://xogium.me/the-text-mode-lie-why-modern-tuis-are-a-nightmare-for-accessibility">The text mode lie: why modern TUIs are a nightmare for accessibility</a>:</strong>
As a person who doesn’t currently need accessibility aides I find it hard to
remember there are people that <em>do</em> need them. So when I come across an article
like this I try to pay close attention.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance Tmux Project Switching Experimenting with ways to switch between tmux servers Squasher Progress Finally just sat down and built a prototype Opal The Ruby to JavaScript transpiler Interesting Links Cool things I found this week Comments]]></summary></entry><entry><title type="html">Weekly Brain Dump #20</title><link href="https://sean.taylormadetech.dev/2026/04/30/weekly-brain-dump-20.html" rel="alternate" type="text/html" title="Weekly Brain Dump #20" /><published>2026-04-30T00:00:00+00:00</published><updated>2026-04-30T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/04/30/weekly-brain-dump-20</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/04/30/weekly-brain-dump-20.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#i-started-streaming-again">I Started Streaming Again</a>
      </strong>
      Streaming my Tetris on Twitch
    </li>
  
    <li>
      <strong>
        <a href="#tmux-display-popup">Tmux Display Popup</a>
      </strong>
      Switching from FTerm to tmux display-popup
    </li>
  
    <li>
      <strong>
        <a href="#comments">Comments!</a>
      </strong>
      I've added comments to my blog
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="i-started-streaming-again">I Started Streaming Again</h2>

<p><a href="https://www.twitch.tv/hell_rok">Check me out on Twitch!</a> I’ve been thinking
about this for a bit. I’m just treating it as a fun little hobby and it’s
letting me easily record my Tetris accomplishments to put onto
<a href="https://theabsolute.plus">theabsolute.plus</a>.</p>

<p>Maybe I’ll do some live programming and game development, but for now it’s just
for playing Tetris and chilling out. Feel free to come and chat programming with
me, I always love that!</p>

<h2 id="tmux-display-popup">Tmux Display Popup</h2>

<p>I decided to stop using the built in terminal (and thus FTerm) in Neovim and
instead switch to using tmux’s <code class="language-plaintext highlighter-rouge">display-popup</code> option.</p>

<p>This was surprisingly painful to get to feel nice, so I decided to <a href="/2026/04/29/tmux-display-popup.html">write a blog
post</a> about it</p>

<h2 id="comments">Comments!</h2>

<p>I’ve added comments to my blog. I’ve thought about how to do this for a while
and decided to go the ultra low-tech route and just setup a mailto link at the
bottom of all my blog posts. When someone emails me I’ll add their comment to
the page and push it out.</p>

<p>Give it a try by clicking this link!</p>

<div class="comments--add-link">
  <a class="button" href="mailto:sean.r.earle@gmail.com?subject=Comment%20for%20Weekly%20Brain%20Dump%20#20&amp;body=Username:%20[Anonymous]%0AAttach%20Email%20Address:%20[yes/no]%0A%0AComment:%0A[Put%20your%20comment%20here]">
    Leave a comment
  </a>
</div>

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

<p><strong><a href="https://dragonruby.itch.io/dragonruby-gtk/devlog/1497015/dragonrubys-seventh-year-where-we-started-and-where-were-going">DragonRuby’s Seventh Year - Where We Started and Where We’re Going</a>:</strong>
DragonRuby is an amazing project and I can’t believe it’s already been seven
years!</p>

<p><strong><a href="https://chrisdell.info/using-rust-to-build-a-1-dollar-handheld-gaming-console/">Using Rust to Build a $1 Handheld Gaming Console</a>:</strong>
Amazing results and an impressive use of Rust. Sometimes I wonder if I should
pick Rust up.</p>

<p><strong><a href="https://paolino.me/ruby-concurrency-what-actually-happens/">Ruby Concurrency: What Actually Happens</a>:</strong>
I love a good Ruby deep dive and this one doesn’t dissapoint.</p>

<p><strong><a href="https://technomancy.us/204">Technomancy in which more paths are charted towards code independence</a>:</strong>
Sometimes I feel like I’ve only just scratched the surface with git, this post
is one that makes me feel that extra hard.</p>

<p><strong><a href="https://gbstudiocentral.com/tips/lets-build-an-rpg-quest-3-quest-tracking/">Let’s Build an RPG: Quest 3 – Quest Tracking</a>:</strong>
The series continues! I think making a GameBoy game is a great place to learn
about programming.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance I Started Streaming Again Streaming my Tetris on Twitch Tmux Display Popup Switching from FTerm to tmux display-popup Comments! I've added comments to my blog Interesting Links Cool things I found this week Comments]]></summary></entry><entry><title type="html">Tmux Display Popup</title><link href="https://sean.taylormadetech.dev/2026/04/29/tmux-display-popup.html" rel="alternate" type="text/html" title="Tmux Display Popup" /><published>2026-04-29T00:00:00+00:00</published><updated>2026-04-29T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/04/29/tmux-display-popup</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/04/29/tmux-display-popup.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#intro">Intro</a>
      </strong>
      
    </li>
  
    <li>
      <strong>
        <a href="#the-files">The Files</a>
      </strong>
      
    </li>
  
    <li>
      <strong>
        <a href="#breaking-it-down">Breaking It Down</a>
      </strong>
      
    </li>
  
    <li>
      <strong>
        <a href="#running-commands-from-neovim">Running Commands from Neovim</a>
      </strong>
      
    </li>
  
    <li>
      <strong>
        <a href="#outro">Outro</a>
      </strong>
      
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="intro">Intro</h2>

<p>I’ve known of the <a href="https://man.openbsd.org/OpenBSD-current/man1/tmux.1#display-popup">display-popup</a> feature in <a href="https://github.com/tmux/tmux/">tmux</a> for a while now but have
been happy enough with my <a href="https://neovim.io/">Neovim</a> using <a href="https://github.com/numtostr/fterm.nvim">FTerm</a> until recently. As I’ve made
more and more use of this functionality I’ve found myself being tripped up by my
muscle memory. Using the terminal inside Neovim comes with some overlapping
shortcuts when doing things inside it. I’m also being tripped up by the
differences between tmux and the Neovim terminal being close but just different
enough.</p>

<p>A particularly nasty situation comes about because I do all of my development
inside of tmux. This means I’m running Neovim inside of tmux, then I’ll open the
Neovim terminal to create a git commit, which spawns another Neovim inside of
that.</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/tmux-display-popup/predicament.png" target="_blank">
    <img alt="A black box labeled 'tmux' containing a green box labeled 'Neovim'
containing a blue box labeled 'Neovim Terminal' containing an orange box labeled
'Another Neovim'." src="/data/tmux-display-popup/predicament.png" title="A black box labeled 'tmux' containing a green box labeled 'Neovim'
containing a blue box labeled 'Neovim Terminal' containing an orange box labeled
'Another Neovim'." />
  </a>
</figure>

<p>This isn’t insurmountable but it is quite annoying and I finally gave <code class="language-plaintext highlighter-rouge">tmux
display-popup</code> a try and it solved a lot of these muscle memory issues and
overlapping keyboard shortcut problems for me.</p>

<p>Once everything is setup, it looks like this:</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/tmux-display-popup/end-result.png" target="_blank">
    <img alt="Wezterm running tmux with Neovim inside. There's a popup showing a
terminal that has thick borders." src="/data/tmux-display-popup/end-result.png" title="Wezterm running tmux with Neovim inside. There's a popup showing a
terminal that has thick borders." />
  </a>
</figure>

<h2 id="the-files">The Files</h2>

<p>You can just <a href="/data/tmux-display-popup/tmux-dotfiles.zip">grab my dotfiles!</a></p>

<p>Or if you just want super basic versions of the files:</p>

<h3 id="tmuxconf"><code class="language-plaintext highlighter-rouge">.tmux.conf</code></h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Popups are neat</span>
<span class="nb">bind </span>t display-popup <span class="nt">-w</span> 80% <span class="nt">-h</span> 80% <span class="nt">-T</span> <span class="s2">"Shell"</span> <span class="nt">-E</span> <span class="s2">"tmux-popup"</span>

<span class="nb">bind</span> <span class="nt">-T</span> popup C-b switch-client <span class="nt">-T</span> popup-prefix
<span class="nb">bind</span> <span class="nt">-T</span> popup-prefix t run <span class="s2">"tmux display-popup -c </span><span class="si">$(</span>tmux list-clients <span class="nt">-F</span> <span class="s1">'##{client_name}'</span> | <span class="nb">head</span> <span class="nt">-n</span> 1<span class="si">)</span><span class="s2"> -C"</span>
<span class="nb">bind</span> <span class="nt">-T</span> popup-prefix <span class="o">[</span> copy-mode
<span class="nb">bind</span> <span class="nt">-T</span> popup-prefix Any switch-client <span class="nt">-T</span> popup
</code></pre></div></div>

<h3 id="tmux-popup"><code class="language-plaintext highlighter-rouge">tmux-popup</code></h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/usr/bin/env bash</span>
<span class="nb">set</span> <span class="nt">-euo</span> pipefail

<span class="nv">session</span><span class="o">=</span><span class="s2">"popup"</span>

<span class="k">if</span> <span class="o">!</span> tmux has <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> 2&gt; /dev/null<span class="p">;</span> <span class="k">then
  </span>tmux new-session <span class="nt">-d</span> <span class="nt">-s</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span>
  tmux set-option <span class="nt">-s</span> <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> key-table popup
  tmux set-option <span class="nt">-s</span> <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> status off
  tmux set-option <span class="nt">-s</span> <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> prefix None
<span class="k">fi

</span><span class="nb">exec </span>tmux attach <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> <span class="o">&gt;</span> /dev/null
</code></pre></div></div>

<h2 id="breaking-it-down">Breaking It Down</h2>

<p>That’s a lot to take in all at once! Let’s break it down a bit and look at how
it all works.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">bind </span>t display-popup <span class="nt">-w</span> 80% <span class="nt">-h</span> 80% <span class="nt">-T</span> <span class="s2">"Shell"</span> <span class="nt">-E</span> <span class="s2">"tmux-popup"</span>
</code></pre></div></div>

<p>This creates a <a href="https://man.openbsd.org/OpenBSD-current/man1/tmux.1#bind-key">key bind</a> that launches a popup that takes up 80%
width and 80% height of the terminal. It gives the popup a title of “Shell” and
launches our <code class="language-plaintext highlighter-rouge">tmux-popup</code> script inside of it.</p>

<p>Before we look at the rest of <code class="language-plaintext highlighter-rouge">.tmux.conf</code> file, let’s look at our <code class="language-plaintext highlighter-rouge">tmux-popup</code>
script as that will make the rest of the config file make sense.</p>

<p>This is just a variable assignment, <a href="https://willhbr.net/2023/02/07/dismissable-popup-shell-in-tmux/">the blog</a> I took inspiration from had
a much more complicated setup that I’ve altered.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">session</span><span class="o">=</span><span class="s2">"popup"</span>
</code></pre></div></div>

<p>This checks if a tmux session with that name exists and if it doesn’t it then
executes…</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span> <span class="o">!</span> tmux has <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> 2&gt; /dev/null<span class="p">;</span> <span class="k">then</span>
</code></pre></div></div>

<p>This creates the new session named <code class="language-plaintext highlighter-rouge">popup</code> then…</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux new-session <span class="nt">-d</span> <span class="nt">-s</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span>
</code></pre></div></div>

<p>We configure that session to use a tmux <a href="https://man.openbsd.org/OpenBSD-current/man1/tmux.1#key-table">key-table</a> called <code class="language-plaintext highlighter-rouge">popup</code> so it doesn’t
use the default <code class="language-plaintext highlighter-rouge">prefix</code> key-table that tmux uses.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux set-option <span class="nt">-s</span> <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> key-table popup
</code></pre></div></div>

<p>We hide the status bar if it’s turned on globally.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux set-option <span class="nt">-s</span> <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> status off
</code></pre></div></div>

<p>We also disable <code class="language-plaintext highlighter-rouge">prefix</code> so you can’t use a lot of tmux’s features. This is a
personal preference as I found it got a bit fiddly otherwise.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux set-option <span class="nt">-s</span> <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> prefix None
</code></pre></div></div>

<p>Finally we actually attach to the new <code class="language-plaintext highlighter-rouge">popup</code> session.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">exec </span>tmux attach <span class="nt">-t</span> <span class="s2">"</span><span class="nv">$session</span><span class="s2">"</span> <span class="o">&gt;</span> /dev/null
</code></pre></div></div>

<p>With all that out of the way, let’s take a look at our keybinds in <code class="language-plaintext highlighter-rouge">.tmux.conf</code>
now. This is a trick I used to make it seem like we’re still using the <code class="language-plaintext highlighter-rouge">prefix</code>
of Ctrl + b (the tmux default and the one I still use). This switches us to
another key-table so we can easily limit what we’re able to do here.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">bind</span> <span class="nt">-T</span> popup C-b switch-client <span class="nt">-T</span> popup-prefix
</code></pre></div></div>

<p>This is where a lot of the complication of this setup comes from. I wanted the
same set of key presses to both open the popup and also close it. This proved a
lot more difficult than expected and if you’re more of a tmux/bash guru than me
you’ll probably want to change this line.</p>

<p>This binds <code class="language-plaintext highlighter-rouge">tmux display-popup -C</code> which closes any open popups, the trick part
comes from needing to specify the <a href="https://man.openbsd.org/OpenBSD-current/man1/tmux.1#client">client</a> to actually send that request too.
This is because if you send it to the <code class="language-plaintext highlighter-rouge">popup</code> session it doesn’t work, you need
to select the parent session. Since my workflow is really simple. I only ever
have one session in a server plus my <code class="language-plaintext highlighter-rouge">popup</code> session. So we just use <code class="language-plaintext highlighter-rouge">tmux
list-clients</code> to grab the first one and send the command there.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">bind</span> <span class="nt">-T</span> popup-prefix t run <span class="s2">"tmux display-popup -c </span><span class="si">$(</span>tmux list-clients <span class="nt">-F</span> <span class="s1">'##{client_name}'</span> | <span class="nb">head</span> <span class="nt">-n</span> 1<span class="si">)</span><span class="s2"> -C"</span>
</code></pre></div></div>

<p>This let’s us enter <a href="https://man.openbsd.org/OpenBSD-current/man1/tmux.1#copy-mode">copy-mode</a> the same as normal a tmux session which will act
the same as always.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">bind</span> <span class="nt">-T</span> popup-prefix <span class="o">[</span> copy-mode
</code></pre></div></div>

<p>Finally this catches any other key and sets the key-table back so we need to do
Ctrl + b again.</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">bind</span> <span class="nt">-T</span> popup-prefix Any switch-client <span class="nt">-T</span> popup
</code></pre></div></div>

<h2 id="running-commands-from-neovim">Running Commands from Neovim</h2>

<p>The final piece of this puzzle was a small Lua function to run shell commands
from Neovim inside of this popup. I spent some time trying to get this to take
another <code class="language-plaintext highlighter-rouge">table</code> or a string in as that’s how my commands were being run before,
but I failed to do so simple and decided that this was fine for now.</p>

<div class="language-lua highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">function</span> <span class="nf">run_in_popup</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
  <span class="n">vim</span><span class="p">.</span><span class="n">system</span><span class="p">(</span>
    <span class="p">{</span> <span class="s2">"tmux-popup"</span><span class="p">,</span> <span class="s2">"-d"</span> <span class="p">},</span> <span class="p">{</span> <span class="p">},</span>
    <span class="k">function</span><span class="p">()</span>
      <span class="n">vim</span><span class="p">.</span><span class="n">system</span><span class="p">({</span> <span class="s2">"tmux"</span><span class="p">,</span> <span class="s2">"send-keys"</span><span class="p">,</span> <span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"popup"</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="s2">"C-m"</span> <span class="p">})</span>
      <span class="n">vim</span><span class="p">.</span><span class="n">system</span><span class="p">({</span>
        <span class="s2">"tmux"</span><span class="p">,</span> <span class="s2">"display-popup"</span><span class="p">,</span>
        <span class="s2">"-w"</span><span class="p">,</span> <span class="s2">"80%"</span><span class="p">,</span>
        <span class="s2">"-h"</span><span class="p">,</span> <span class="s2">"80%"</span><span class="p">,</span>
        <span class="s2">"-T"</span><span class="p">,</span> <span class="s2">"Shell"</span><span class="p">,</span>
        <span class="s2">"-E"</span><span class="p">,</span> <span class="s2">"tmux attach -t popup"</span>
      <span class="p">})</span>
    <span class="k">end</span>
  <span class="p">)</span>
<span class="k">end</span>
</code></pre></div></div>

<h2 id="outro">Outro</h2>

<p>This is what it looks like with my full config setup.</p>

<div class="post--video">
  <video aria-describedby="all-together-video-description" controls="" id="all-together-video" preload="metadata" src="/data/tmux-display-popup/all-together.webm">
    If your browser doesn't support the video tag, you can
    <a href="/data/tmux-display-popup/all-together.webm">download the video</a>.
  </video>
  <div id="all-together-video-description" class="post--video--description">
    <p>A terminal running Neovim in tmux. A popup titled 'Shell' appears
and a few commands are run including a nested Vim. Then the popup is dismissed
and brought back multiple times.</p>
  </div>
</div>

<p>I decided to write this blog post as I spent a fair bit of energy the past
couple of days getting this working nicely. I thought it would be nice to give
back to the community and document everything I figured out.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[How I've setup tmux to give me a persistent popup terminal with minimal fuss.]]></summary></entry><entry><title type="html">Weekly Brain Dump #19</title><link href="https://sean.taylormadetech.dev/2026/04/23/weekly-brain-dump-19.html" rel="alternate" type="text/html" title="Weekly Brain Dump #19" /><published>2026-04-23T00:00:00+00:00</published><updated>2026-04-23T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/04/23/weekly-brain-dump-19</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/04/23/weekly-brain-dump-19.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#neospec">Neospec</a>
      </strong>
      v0.0.2 released
    </li>
  
    <li>
      <strong>
        <a href="#poros">Poros</a>
      </strong>
      v0.6.0 and v0.7.0 released
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="neospec">Neospec</h2>

<p>I finally had a need for <a href="https://github.com/HellRok/neospec">neospec</a> in one of my Ruby projects. That’s when I
realised all the improvements I’ve made haven’t been pushed to ruby gems. I also
realised that the build was half migrated to <a href="https://github.com/HellRok/local_ci">LocalCI</a> so I fixed that up and
did a release.</p>

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

<p>I had speed issues with my budgeting application I’ve built and finally decided
to figure out why. It turned out to be a simple <a href="https://docs.sentry.io/product/issues/issue-details/performance-issues/n-one-queries/">n+1</a> query. I was tempted to
add some sort of preloading functionality but realised that actually wouldn’t
help with the problem I was having. Instead I added a simple query caching
system to <a href="https://github.com/HellRok/Poros">Poros</a> so repeat queries are significantly faster. This dropped my
page load speed down from 12~ seconds to 1~ second.</p>

<p>The reason I did two releases was because I didn’t think to just use <code class="language-plaintext highlighter-rouge">gem
"poros", path: "../poros"</code> after adding the logging and instead did a release. I
guess I was thinking that the problem wouldn’t be in Poros? Either way, I ended
up doing the query caching and releasing that in v0.7.0.</p>

<p>I do just want to say, this was built as an experiment to learn how <a href="https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping">ORMs</a> works
but I do find it really useful. It’s great when you don’t want to go through the
hassle of even setting up <a href="https://sqlite.org/">SQLite</a>.</p>

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

<p><strong><a href="https://crystal-lang.org/2026/04/16/1.20.0-released/">Crystal 1.20.0 is released!</a>:</strong>
A new Crystal release, a fantastic language I really need to go back and check
out again.</p>

<p><strong><a href="https://serdardogruyol.com/why-crystal-10-years-later-performance-and-joy">Why Crystal, 10 Years Later: Performance and Joy</a>:</strong>
This post has been a big driver behind my desire to go deep on Crystal again.</p>

<p><strong><a href="https://byroot.github.io/ruby/performance/2026/04/18/faster-paths.html">Optimizing Ruby Path Methods</a>:</strong>
A great deep dive on how Ruby path methods work and how they’ve been sped up.
This is also an amazing blog and you should follow it.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance Neospec v0.0.2 released Poros v0.6.0 and v0.7.0 released Interesting Links Cool things I found this week Comments]]></summary></entry><entry><title type="html">Weekly Brain Dump #18</title><link href="https://sean.taylormadetech.dev/2026/04/16/weekly-brain-dump-18.html" rel="alternate" type="text/html" title="Weekly Brain Dump #18" /><published>2026-04-16T00:00:00+00:00</published><updated>2026-04-16T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/04/16/weekly-brain-dump-18</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/04/16/weekly-brain-dump-18.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#taylor-squasher">Taylor Squasher</a>
      </strong>
      Brainstorming around implemntation
    </li>
  
    <li>
      <strong>
        <a href="#taylor-has-a-community-site">Taylor Has a Community Site</a>
      </strong>
      It finally happened!
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="taylor-squasher">Taylor Squasher</h2>

<p>I’ve decided to pick this project back up and give it a serious attempt. I do
believe there’s some huge value to be had here. Right now I’ve mostly just sat
down and thought about what I want to tackle and how I want to tackle it.</p>

<p>I think I have some decent ideas that’ll let me implement <code class="language-plaintext highlighter-rouge">require_relative</code>
too, but that’ll take a little experimenting before I’m confident.</p>

<h2 id="taylor-has-a-community-site">Taylor Has a Community Site</h2>

<p>You read that right, Taylor officially has a community site! I did the big
announcement <a href="https://taylormadetech.dev/2026/04/15/taylor-has-a-community-site.html">over on Taylor’s blog</a> if you want the details, or
you can <a href="https://www.rubyforum.org/tag/taylor/63/l/latest">just go check it out</a>!</p>

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

<p><strong><a href="https://www.gamedeveloper.com/design/finding-inspiration-and-a-bit-of-hope-in-corgispace">Finding inspiration and a bit of hope in CorgiSpace</a>:</strong>
Making many small games is such a great way to grow as a developer and have fun.
I need to do more of this myself!</p>

<p><strong><a href="https://blog.discourse.org/2026/04/how-jennifer-aniston-and-friends-cost-us-377gb-and-broke-ext4-hardlinks/">How Jennifer Aniston and Friends Cost Us 377GB and Broke ext4 Hardlinks</a>:</strong>
It turns out hardlinks have limits on EXT4 (among other filesystems).</p>

<p><strong><a href="https://www.rubenerd.au/zfs-removing-code/">ZFS helped to remove code</a>:</strong>
I love it when an off the shelf solution works well enough to replace a homebrew
solution.</p>

<p><strong><a href="https://truffleruby.dev/blog/truffleruby-34-is-released">TruffleRuby 34 is Released</a>:</strong>
Full compatibility with Ruby 3.4!</p>

<p><strong><a href="https://ziglang.org/download/0.16.0/release-notes.html">Zig 0.16.0 Release Notes</a>:</strong>
The little language that could, I love seeing new Zig releases. It’s an
incredibly interesting language.</p>

<p><strong><a href="https://github.com/libsdl-org/SDL/pull/15377">Add DOS platform support (DJGPP)</a>:</strong>
SDL3 now runs on DOS!</p>

<p><strong><a href="https://adele.pages.casa/md/blog/the-fediverse-deserves-a-dumb-graphical-client.md">The Fediverse deserves a dumb graphical client</a>:</strong>
It’s great to see people actively developing simple tools for the Fediverse.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance Taylor Squasher Brainstorming around implemntation Taylor Has a Community Site It finally happened! Interesting Links Cool things I found this week Comments]]></summary></entry><entry><title type="html">Weekly Brain Dump #17</title><link href="https://sean.taylormadetech.dev/2026/04/09/weekly-brain-dump-17.html" rel="alternate" type="text/html" title="Weekly Brain Dump #17" /><published>2026-04-09T00:00:00+00:00</published><updated>2026-04-09T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/04/09/weekly-brain-dump-17</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/04/09/weekly-brain-dump-17.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#taylor-s-five-year-anniversary">Taylor's Five Year Anniversary</a>
      </strong>
      It's been five whole years since I started Taylor
    </li>
  
    <li>
      <strong>
        <a href="#refactored-taylor-s-config-handling">Refactored Taylor's Config handling</a>
      </strong>
      Noticed this area was really bad and cleaned it up
    </li>
  
    <li>
      <strong>
        <a href="#taylor-export-woes">Taylor Export Woes</a>
      </strong>
      Found an issue with my exports
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="taylors-five-year-anniversary">Taylor’s Five Year Anniversary</h2>

<p>I wrote a whole <a href="https://taylormadetech.dev/2026/04/09/taylor-five-year-anniversary.html">blog post</a> so go check it out!</p>

<p>I’m just so blown away at how far I’ve come with Taylor. It even lead to me getting
my current job!</p>

<h2 id="refactored-taylors-config-handling">Refactored Taylor’s Config handling</h2>

<p><a href="https://github.com/HellRok/Taylor/issues/62">An issue</a> was raised because I have a discrepancy between the
documentation and the code. In the code <code class="language-plaintext highlighter-rouge">taylor-config.json</code> is the file used
for configuring all your Taylor needs. In the documentation I call it
<code class="language-plaintext highlighter-rouge">taylor_config.json</code>. An easy fix right? Just rename the documentation? Well
yes, that did fix it.</p>

<p>I looked closer at the code though because I briefly considered supporting both
as a politeness. I did not end up doing that but I did not how awful the
configuration handling is inside Taylor. So I took some time and completely
refactored the configuration handling and created the
<a href="https://github.com/HellRok/Taylor/blob/main/src/ruby/taylor/config.rb">Taylor::Config</a> class to help out. This has reduced the amount
of magic strings across the codebase and now lets developers easily use this
configuration for themselves if they wanted.</p>

<h2 id="taylor-export-woes">Taylor Export Woes</h2>

<p>The build for my previous config change broke on the web test suite. I thought
this was really strange and was able to reproduce it locally. It just boots up,
runs the C++ code portion of Taylor, then does nothing, and exits.</p>

<p>This took a decent chunk of debugging, lots of puts statements, and even going
back commits. But the strangest thing was the <code class="language-plaintext highlighter-rouge">mrb</code> state didn’t claim to have
an exception when running the <code class="language-plaintext highlighter-rouge">mrb_load_irep</code> method to load the test suite.</p>

<p>Interestingly going back to earlier commits <em>didn’t</em> fix this and it started
happening on my Linux builds too. This made me realise something important, the
actual cause. It was because I wasn’t locking the version of MRuby used in the
export Docker image but I was locking it to <code class="language-plaintext highlighter-rouge">3.4.0</code> when I compile <code class="language-plaintext highlighter-rouge">libmruby.a</code>.
So the most recent commits to MRuby seem to have changed how the bytecode is
generated. This meant the older <code class="language-plaintext highlighter-rouge">3.4.0</code> version of MRuby couldn’t load and run
it.</p>

<p><a href="https://github.com/HellRok/Taylor/commit/cd10abef25408d8f004f26d5c916fc1d5a239d9b">The fix</a> isn’t that interesting, it’s mostly just me locking the MRuby
version so this doesn’t happen again.</p>

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

<p><strong><a href="https://gbstudiocentral.com/interviews/chantey/">Sailing The High Seas: An Interview with Chantey Dev K.C. Gortyn Code</a>:</strong>
This game seems really fun, I will have to buy a copy.</p>

<p><strong><a href="https://anthonymoser.github.io/writing/rhetoric/framing/kirby/2026/01/28/the-kirby-frame.html">The Kirby Frame</a>:</strong>
A damn good way to actually stop misinformation and bad faith arguments.</p>

<p><strong><a href="https://www.jruby.org/2026/04/06/jruby-10-0-5-0">JRuby 10.0.5.0 Released </a>:</strong>
Always good to see alternative Ruby implementations going well.</p>

<p><strong><a href="https://mastodon.gamedev.place/@aeva/116365963852337047">I’ve been thinking a lot lately about the art education</a>:</strong>
This frames AI content in a way I haven’t seen yet and is well worth the read.</p>

<p><strong><a href="https://serdardogruyol.com/rethinking-http-benchmarking-why-i-built-cryload-with-crystal">Rethinking HTTP Benchmarking: Why I Built cryload with Crystal</a>:</strong>
A new web server benchmarking tool written in Crystal.</p>

<p><strong><a href="https://pizzalegacy.nl/blog/traffic-system.html">How Pizza Tycoon simulated traffic on a 25 MHz CPU</a>:</strong>
I love seeing how old games overcame limitations with clever code.</p>

<p><strong><a href="https://luke.zip/posts/making-of-words/">Making of words.zip</a>:</strong>
Very cool breakdown of how their infinite word search MMO game was made</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance Taylor's Five Year Anniversary It's been five whole years since I started Taylor Refactored Taylor's Config handling Noticed this area was really bad and cleaned it up Taylor Export Woes Found an issue with my exports Interesting Links Cool things I found this week Comments]]></summary></entry><entry><title type="html">Weekly Brain Dump #16</title><link href="https://sean.taylormadetech.dev/2026/04/02/weekly-brain-dump-16.html" rel="alternate" type="text/html" title="Weekly Brain Dump #16" /><published>2026-04-02T00:00:00+00:00</published><updated>2026-04-02T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/04/02/weekly-brain-dump-16</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/04/02/weekly-brain-dump-16.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#mental-health">Mental Health</a>
      </strong>
      It's low right now
    </li>
  
    <li>
      <strong>
        <a href="#tetris-tattoo">Tetris Tattoo</a>
      </strong>
      I finally got it!
    </li>
  
    <li>
      <strong>
        <a href="#taylor-community">Taylor Community</a>
      </strong>
      Started the styling process
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="mental-health">Mental Health</h2>

<p>I feel the quality and depth of these blogposts has started falling and it’s
definitely because of my low mental health at the moment. There’s a lot going on
that I will not post about here, but I’m hoping my situation improves soon as I miss
having the creativity and motivation to do cool shit with computers.</p>

<p>Honestly, all I’ve had the energy for has been to play more <a href="https://tetris.wiki/Tetris_The_Absolute_The_Grand_Master_2">Tetris The Absolute
The Grand Master 2 PLUS</a>. Thankfully I do enjoy that and my consistency is
going up. I’m more regularly hitting levels 800+ and even 900+.</p>

<h2 id="tetris-tattoo">Tetris Tattoo</h2>

<p>Speaking of Tetris, I finally got my tattoo to celebrate my GrandMaster ranking
in <a href="https://tetris.wiki/Tetris_The_Grand_Master">Tetris the Grand Master</a>! I got the design made and tattoo’d by <a href="https://www.littleharajukutattoo.com/stef">Stef
from Little Harajuku Tattoo</a>.</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-16/tattoo.jpg" target="_blank">
    <img alt="A registration webpage for the Taylor Community site.

Everything has thick borders, there's a field for name, password, password
confirmation, and a 'I'll behave' checkbox." src="/data/weekly-brain-dump-16/tattoo_thumb.jpg" title="A registration webpage for the Taylor Community site.

Everything has thick borders, there's a field for name, password, password
confirmation, and a 'I'll behave' checkbox." />
  </a>
</figure>

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

<p>I’ve finally committed to styling the pages and wanted to share a sneak preview,
it’s not the most exciting but I think it’s consistent with everything else I’ve
been doing and think it’s easy to use.</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-16/community.png" target="_blank">
    <img alt="A registration webpage for the Taylor Community site.

Everything has thick borders, there's a field for name, password, password
confirmation, and a 'I'll behave' checkbox." src="/data/weekly-brain-dump-16/community.png" title="A registration webpage for the Taylor Community site.

Everything has thick borders, there's a field for name, password, password
confirmation, and a 'I'll behave' checkbox." />
  </a>
</figure>

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

<p><strong><a href="https://drewdevault.com/2026/03/25/2026-03-25-Forking-vim.html">A eulogy for Vim</a>:</strong>
An impressive amount of effort dedicated here to avoiding LLM generated code. I
won’t be switching any time soon but it’s nice to see people fighting even
harder than me.</p>

<p><strong><a href="https://andre.arko.net/2026/03/24/how-to-install-a-gem/">How to Install a Gem</a>:</strong>
A great dive into what actually happens when you type <code class="language-plaintext highlighter-rouge">gem install</code>.</p>

<p><strong><a href="https://taggart-tech.com/reckoning/">I used AI. It worked. I hated it.</a>:</strong>
Another article about LLM usage, but one that hits close to home for me.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance Mental Health It's low right now Tetris Tattoo I finally got it! Taylor Community Started the styling process Interesting Links Cool things I found this week Comments]]></summary></entry><entry><title type="html">Weekly Brain Dump #15</title><link href="https://sean.taylormadetech.dev/2026/03/26/weekly-brain-dump-15.html" rel="alternate" type="text/html" title="Weekly Brain Dump #15" /><published>2026-03-26T00:00:00+00:00</published><updated>2026-03-26T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/03/26/weekly-brain-dump-15</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/03/26/weekly-brain-dump-15.html"><![CDATA[<p>I had a bad week this week so I don’t have anything personal to show here this
week, but do check out these other posts!</p>

<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

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

<p><strong><a href="https://slicker.me/godot/mobile-optimization.html">Squeezing Every Frame from Godot on Mobile</a>:</strong>
A great dive into optimising Godot.</p>

<p><strong><a href="https://shkspr.mobi/blog/2026/03/im-ok-being-left-behind-thanks/">I’m OK being left behind, thanks!</a>:</strong>
I needed this reminder that you don’t have to jump on every new trend, you can
wait and see how things pan out before making a decision.</p>

<p><strong><a href="https://gpfault.net/posts/drunk-exe.html">Go Home, Windows EXE, You’re Drunk</a>:</strong>
Just absolutely bonkers things you can do with Wine and an EXE.</p>

<p><strong><a href="https://railsatscale.com/2026-03-18-how-zjit-removes-redundant-object-loads-and-stores/">How ZJIT removes redundant object loads and stores</a>:</strong>
Definitely not feeding the “let’s build a compiler” bug in my brain right now…</p>

<p><strong><a href="https://ploum.net/2026-03-20-social-smolnet.html">The Social Smolnet</a>:</strong>
Such a wholesome reminder you can do things the simple way.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[I had a bad week this week so I don’t have anything personal to show here this week, but do check out these other posts!]]></summary></entry><entry><title type="html">Weekly Brain Dump #14</title><link href="https://sean.taylormadetech.dev/2026/03/19/weekly-brain-dump-14.html" rel="alternate" type="text/html" title="Weekly Brain Dump #14" /><published>2026-03-19T00:00:00+00:00</published><updated>2026-03-19T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/03/19/weekly-brain-dump-14</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/03/19/weekly-brain-dump-14.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#taylor-community">Taylor Community</a>
      </strong>
      Rewrote the live update mechanism
    </li>
  
    <li>
      <strong>
        <a href="#desk-cleanup">Desk Cleanup</a>
      </strong>
      Finally cleaned up my desk again
    </li>
  
    <li>
      <strong>
        <a href="#arcade-stick-modding">Arcade Stick Modding</a>
      </strong>
      Modded my Arcade Stick
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

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

<p>I’ve rewritten the live updating mechanism. I was tempted to switch away from
<a href="https://htmx.org/">htmx</a> but decided to stick with it in the end but needed a better architecture.
The biggest issue was actually how I figured out <em>what</em> had updated. I was just
asking each type of record I cared about if they had been updated. It kind of
worked but it didn’t handle the case of things being deleted and it required
quite a few different database queries to figure out.</p>

<p>The new architecture now has a model for all the updates in the system that I
care about. When you update a post it creates an <code class="language-plaintext highlighter-rouge">Update</code> record that says a
post was updated. When you delete a post it creates an <code class="language-plaintext highlighter-rouge">Update</code> record that says
a post was deleted. This has cleaned up that whole code path a lot.</p>

<h2 id="desk-cleanup">Desk Cleanup</h2>

<p>Finally got the energy up over the weekend to clean my desk up. Including
pulling apart my keyboard and giving it a thorough clean. I also took the
opportunity to replace the AI generated desk mat I accidentally bought without
realising it was AI generated with one made by an actual artist.</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-14/desk.jpg" target="_blank">
    <img alt="My desk with a black desktop PC case, an ultrawide monitor, a split
keyboard, a MacBook, a ghibli themed desk mat, and a trackball.

Below the desk is an old looking desktop PC.
" src="/data/weekly-brain-dump-14/desk_thumb.jpg" title="My desk with a black desktop PC case, an ultrawide monitor, a split
keyboard, a MacBook, a ghibli themed desk mat, and a trackball.

Below the desk is an old looking desktop PC.
" />
  </a>
</figure>

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

<p>The parts I ordered all arrived so I spent about an hour getting them all
installed into my <a href="https://www.8bitdo.com/arcade-stick/">8BitDo Arcade Stick</a> and it has come out
amazing! It’s genuinely so nice to be able to play <a href="https://store.steampowered.com/app/3328480/TETRIS_THE_GRAND_MASTER_4_ABSOLUTE_EYE/">Tetris the Grand
Master 4</a> comfortably on the couch as efficiently as I do at my desk.</p>

<p>I’m really happy with the button colour choices. They look even better than I
had hoped when I was planning it out. Also they came a lot quicker than
expected, the estimated arrival for half of them was early next month.</p>

<figure class="post--image">
  <a class="post--image-link" href="/data/weekly-brain-dump-14/arcade_stick.jpg" target="_blank">
    <img alt="An 8BitDo Arcade Stick with the joystick replaced with a mixbox
converter and the buttons upgraded to white, pink, blue, orange, and purple
Sanwa buttons." src="/data/weekly-brain-dump-14/arcade_stick_thumb.jpg" title="An 8BitDo Arcade Stick with the joystick replaced with a mixbox
converter and the buttons upgraded to white, pink, blue, orange, and purple
Sanwa buttons." />
  </a>
</figure>

<p>P.S. I also posted this over <a href="https://www.reddit.com/r/fightsticks/comments/1rt8h30/8bitdo_arcade_stick_leverless_conversion/">on Reddit</a> as I found a neat trick for getting the
5-pin joystick to plug in nicely.</p>

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

<p><strong><a href="https://beyondloom.com/blog/onwigglypaint.html">Some Words on WigglyPaint</a>:</strong>
This really saddens me, people will steal anything for a quick buck.</p>

<p><strong><a href="https://ryanbigg.com/2026/03/from-heroku-to-render">From Heroku to Render</a>:</strong>
<a href="https://render.com/">Render</a> sounds nice, I like the sound of the Database URL button.</p>

<p><strong><a href="https://loomui.dev/blog/introducing-loom/">Introducing Loom</a>:</strong>
A nice new [TUI] framework for [Go] that’s more reactive.
[TUI]: https://en.wikipedia.org/wiki/Text-based_user_interface
[Go]: https://go.dev/</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance Taylor Community Rewrote the live update mechanism Desk Cleanup Finally cleaned up my desk again Arcade Stick Modding Modded my Arcade Stick Interesting Links Cool things I found this week Comments]]></summary></entry><entry><title type="html">Weekly Brain Dump #13</title><link href="https://sean.taylormadetech.dev/2026/03/12/weekly-brain-dump-13.html" rel="alternate" type="text/html" title="Weekly Brain Dump #13" /><published>2026-03-12T00:00:00+00:00</published><updated>2026-03-12T00:00:00+00:00</updated><id>https://sean.taylormadetech.dev/2026/03/12/weekly-brain-dump-13</id><content type="html" xml:base="https://sean.taylormadetech.dev/2026/03/12/weekly-brain-dump-13.html"><![CDATA[<h2>At a Glance</h2>

<ul>
  
    <li>
      <strong>
        <a href="#rails-template">Rails Template</a>
      </strong>
      Making a Rails template for myself
    </li>
  
    <li>
      <strong>
        <a href="#jumpy-alien">Jumpy Alien</a>
      </strong>
      I finished this example game
    </li>
  
    <li>
      <strong>
        <a href="#taylor-playground">Taylor Playground</a>
      </strong>
      Some minor tweaks to the playground
    </li>
  
    <li>
      <strong>
        <a href="#switch-to-kde">Switch to KDE</a>
      </strong>
      Reinstalled Fedora and decided to try KDE
    </li>
  
    <li>
      <strong>
        <a href="#interesting-links">Interesting Links</a>
      </strong>
      Cool things I found this week
    </li>
  

  <li>
    <strong>
      <a href="#comments">Comments</a>
    </strong>
  </li>
</ul>

<h2 id="rails-template">Rails Template</h2>

<p>I’ve done a bit of a dive on making my own <a href="https://rubyonrails.org/">Rails</a> template to setup projects just
the way I like. The big appeal for me is that I end up spending the first night
on any project just getting the base setup and it’s almost always the same, so I
figured there’s some decent value behind making a proper template.</p>

<p>So far I’ve got <a href="https://www.phlex.fun/">Phlex</a> setup with a basic layout and root page and I’ve got
<a href="https://esbuild.github.io/">esbuild</a> working with <a href="https://www.typescriptlang.org/">TypeScript</a> and <a href="https://htmx.org/">htmx</a>.</p>

<p>I have some plans to put in some <a href="https://guides.rubyonrails.org/generators.html">generators</a> to help speed up development, but
that’s probably gonna be a bit.</p>

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

<p>I spent some time this weekend and finished polishing off the <a href="https://github.com/HellRok/taylor-examples">Jumpy
Alien</a> example for <a href="https://taylormadetech.dev">Taylor</a>!</p>

<p>The final touches ended up being:</p>
<ul>
  <li>Hitboxes for sky and ground</li>
  <li>Sound effects</li>
  <li>Backgronud music</li>
  <li>Settings menu</li>
  <li>Volume settings</li>
  <li>Logo</li>
</ul>

<h3 id="play-the-game">Play the Game!</h3>

<figure class="post--embed">
  <iframe width="360" height="600" src="https://playground.taylormadetech.dev/v0.4.1/#code=MQAgygLghgThIHMoFsCmA6GAjAUKAggCaEgQAWqIADlOSOgPQBuqAdoQPYwgDOHIAd0oBjKKxCooPAJYAbAJ4gYqAI4BXactJlNJGnEWzpWGLGmoe6HABIAXCAA8DkACJGLdlxc484aHHpmNk4YBgg5VGQoKkxcYVkpHhAAFQioqhwQEEJUADMQaVZpcKgjAC9UAAppKIRUWwAaXmkK2wBKTKyQAAEaqDqQAF4C2tROrO6ZCqHmis7gnyyc-PDZVAB9YQ41VghxkEre0fQBaUI6Bh6p1DaQACoDo-6MCmkEMnhLyZab%2BfZF7J5UgRHjrKioGDrGAcAT7J51E5nC5XH5-QgA5a8bYwYQbXJcaqEDpdEAADxmZxAAFJgWtQeDIdDYSTFMNCSBLqsLGCIVCYegIBx1rk2uhcrIOFx9gAlVDCaCsBBrdCsVACSqk%2Bzkh7fCpNeT2RQ665NU7nMj2XWoJqvd4QS3XYkSf6dTFc4UEs5OrJcmYASWOdVVpggVTN5AdPxtqDeH0jFW9tIwhFMAgAhJV9lk%2BnVLTnrVmsWocfUiyWPTBCYmnQtXUCgxDaHjochCTxE91w2QKYRLLlNDwIOhrnDbR8e5YR-t0v7A2xG6HKl3LV37ii9SAx-aelu11aOvszpZJMIyIjyOtCjlyQBvEAAHyZ%2BvvhaZ6BPZ9OF6vqFvD7OTSki%2BJIkjsdJJGcKqoEg4QsAA-IWJLpOgKZQOmmYgZhIzPHmowNIhIF8MWuL2ER5b4pWXr4VhIE5IOhS0NIHCsPYsrymISoYKq6qamSe4miABqCfxUaCEiFrrtam4xna8a-DRWSJiSCyYQAvvs6nTtEaI4AsoAAKLsIEHghGEaTRLEPigJAsDwIw0RUAwyAcDksg8AwyhkbiljYDgzmEGoawgLKXkWJ03TdPiuxJMMN7qRM8IWDMcXhd0XLpDFIApQlyBqDIwjJfFPSTNs7CZSldb5DwqCyLkYrMRAlRRRATTXPYABM7UdpFDU8AA2n1zWtT8AC6I0PvewwAGINVB6pDbMpaOjplW8DVdX5pUNDkN1%2Bb9dtZDjfek0gAGzxzVttBkDWLpLEC1W1QK5lUDwl3kMNrTdel0T9X1B0fagY0TcMqRrMh3EYSB%2Bb2JtB1tNRhE-KRqIkjd6KrQ9dW5flb1kE0TAcLIahoO0cLdNj0jCH9V1HSdACyeWUxd-0gATRMk6zhPE-Jzro3dVXrcOpWELj%2BNcyT3VEWV1PkLTwxgMLzNXWL7Olmz3No7p-wGUZ9lUI5-k1e5nnYt5lnWf4dkMA5TkuUb1tqIQTHrFErDPDAlnxIkID4I7TF02I7udLQECQlAwjeXw3C2FEg68uraBNDHjPCOsCdSbYUuEGn4tjKthTFNIpQo105NSKGkLpzMAAM6AABxwhTqdV8MtcACxwlnOeqzMACM6DVwCEyxxX3fczXBT5GAuKqrYtgACL6QAQgAqgA4kPPRYOHADWCDQjs2dNzMIWmxY6BN5UbjWzw1UQO5VAcDIsEbBKHAxBwCAIC4Kvc-YUCEAAFZ5VDEfFOY80AHhJN0eIlMd4nwsGfScwsr72Vvqge%2BDBCgV1yOHDYWd3KwOEDvdY1dq790-t-X%2BHMAHALjtnLu6cOzAOQFQBBoVkGH1QTfO%2B7lsEQlwbidYBCGAPTlBAUh1d2roEoT-Tmqt-5AJAagBhwsIE8wmDwLYWhhin2IufLO3DEgYL4bsAReDhHC3cimd%2Bki24yK-nI9Oii6GgMsYfdRHYchXXYUgoWXDr7GMwfwmAgj8FWIYFsVg-YYBRHCMxSR0jZHUNLLQ5RqiPFMJWvzEAagqCECbOongcJt7EP3mopu6AW4gDSfQl24D06bxgUYYhVTc4zFqW4xhuc4QsJiNUzpKj3HsHUZ3bRGABlKLqd01WcJvHkDaT3YYgyMkjMaVkWsOSqAJHkOsUpe8D4jKbiU3e5SPGVO2VAeQ2TARVUFFQPZpzDlgPyicspzz6n5WHPcm5mJLnyEqFnRMXcKKAuFqKf5vygR5IKaGN5ByKkp3QDCpsUL8jpwrICjB4RFSJlENVNaEAcUIH2AICg4gY7lwhIWMucdK49JJGStgIBk6vMwuTBpDKuhMopVnGlMzub7BUrzDE90MHqKxUSwoCAUl4qkJQO%2BxLSXkpZSPal7K1X0qWfIwVjKVWsspjSpu6iZjrO5fqvl7KBVoFNVyjZt0ugotDEUm5VAYDSCYKi1aKzhnZzNcPKlWrx7GjUWazZtyalTLcca-1PRNUmp1DGrl4bMQgoJEC-Y%2BKFXC2Vcy2wRCd40oLbmilfSaVlr1XmrRXAxhWvGSWll8yyA0qbUK-49r0R6RAIZEgesDZ2zcg7J2QpXbu3Nn4WygQbaG0HVo%2BcnsEi33ADPWtIBF6rzXjMfSAA5AAamKDBp4r7rvXnI3BbkebdByFgNQCBLzRP4LFIqMDizKF2DMIoshwo8DINsWQ2d4hP0oMMc91VwpQD9iOwOdRuDDE-aKgWj0755LhBB4dLtoMQhmL7YdAc3YwbmqhyDGH8MQnQP8x57zEVspFRjQWaHnajpgzMboDGoOkZgAhtaj1r23vvfiFjvG72FHxFxzG6BhCvrYPAYYL6YBvr2HRx6kn5PScGJUbiwiV0dhUwpj9aotPzjRdxuqTqqiuWgF41AN7hMPsKnM6zfGRMcAvhCOoaYQAAHksCAPEWAGguIJOlQkRwHz4jinQLYyRsdZnM1Sd2Mi-JTZKgWagJrJTdVULMi6Lp6TKFUyHnyCejemEADqV5%2BRZeFKYNAUJUWYRmgl5YEHZBDiy5DdlQn%2BMuZnHee8O9UDyHxqUNQqBgIKRcMAG8A35CqXsFNz1RNUCqW8DRVS6BAEcEKFfAAOqwFw8MCJbAlMWewABhQm2I57z3wNKAA0mvaU%2Bkd0I0wo-Z%2BTEWIgF3eIrg7U%2Bq92rk0AAzO1Ear3EatBAO1QemFEzCpTWK5TEowPQJ-X%2BgDKPgOkBgKN4z4nAPVQQiScrngBASax3BCaVxf2BUx0BnSXae1Tv1rbVy7k52qksr4GyAQ%2B2iJXe5KIhQXZsDUOO3nVsbZbFYcxaT7lcE5HWNsIcvkvZLqmgA1Anm1B7CyCHRkkgcjR1ELIWQ%2Byk7hFq2sXIimckFxKOUKoAAyLAEpiE6dKOb3eMw3ccGIXCK3r88gyZALXXu7UACsxmzMpZqpZwPNRg%2B25AAAWmGKlpppvvetOz5PHoQf1g2-gA4VuxmsuM%2B1t23W1tWcy8fqqaKDBFcbBVxLy2LPHL17l034XrBResDUAwG9RLmLt8nfz7vjfME-tgCo4fuvBSsEsv5QKlAl6L%2BYqtZqvj9F9gakY9BmCBusFVLsqg0hSQ1QFBAXIci2o9GasIn4UCI2hlJBI97hct8kmUBAYs4gaUv4n%2BT83%2B4g0g%2BQQBH%2BYIoB8SrAm81wMwzUrmUgxYVQUBEAr%2BEw7%2BIBH2zEMwP28of2fUNKX%2BcB6A5IAA1AcIcGQZ9oiOaGnotAwTtByNDoduynQWPooNQZULQbAfQbuKnswVuLcJcF1PsCNMZr%2BiwDAMTl0HTNsNVORgIWPqSOgFgBgkIGwHBPwXgcvqSE0N0FwQYSANQcYaocvl2LcM7s7oWIoXlBgCYegPIBoVoagDoXoWAS4UYc4TwT0M4aIcZgWiovIVkDIRCFTrYSAA4coW6hYNVIQLobEfULYAADL6RTTJDpY5LFokjTzzpRZMZkb-KVD5otI7yJh-4AH54wJe77KbBe4qJZ71G7yNFm4qIzChx47QLZ77ISZe7GYj5L7rCx7rCpaJgQGbgcCyFhGlzOHHbYgzAXYnYwBzyPb4AACapBlhMiuuRgqoyxl2p2tgS8aR%2BAZ2d2QqF6Ox%2BhQWqxRxqxc8aRfoa8AAEskBsdsZwbsSrgcdjisVdrYF8W2nzDlhUfniEUkUMZvv3hXtAs4fCV0Mge1oWDgRDlkCYfYDgTAfofsDkRGrHqljXImMMQkkSfHmluXgViSGSXCTSSKkzjXtLhwLLtPhzmQHPoQAvqPsvr5DgOrkkAHIUHTGLp0IKSABvryYeKwPEI7JQHPFKUvpvAblCEblhrYKGIOJeIQJbsAUnCYUnH0bvJvJiA7kXE7pUFqRImcI0KQMAXaViU0K7u7pUTStaTqV0RYDaeiOyjgV6R-pvBMCYTMCYbcd4eQHAqqEusMMDkGT0MacQr7q6TSk-ogcMG3A3MpO2oyVXszpPqyQ3vLk5FACLmgIPjyUvtzhKcKawKKYPqtB6ZSMMJSmWWKfnEUI7iXMGTsnsrCTMLWfWWoIqbCRdGid6TqfYLYBRnSRifaR-vYC4AAAo7I-yFhYnBTiIcRrB9Qw4g6R5A4gCg6HkADs1cUhqMWU1AOyHmmkaO2K0qoIdJA5pZdZYuI5vJY5mETZhAU5iqj5fZvJc5OBi5YAD5ioPAa5b2lhrEW5ioO5e5IAbcwOh5x5TQZ5F5XQtwd4-5EFt5TS6gxQgFS%2BL5Ip75pxo5EM452ptpLKhFEis545C5rgAAihoBAFBSBBuWxAqJxLuYeZHoDiDohRhfiVeQUVzoTpQEVIjvkGILsnSesBEXIfsCQZwb2YxVauBQgE%2BbCXOd0PRcRT-l0CNOgPJVTn1nSfeCAHSegMpVTjJQ6n8jeYHqYKwPoTMJrjkDrkONxFlIWGdsWFHOgJTPgcMIFTAFHNdpkfgCvGkckIWBJRgLlu%2BsMGvCgFxGqBpPjtpTwGmK5WIB5dNFrj5XNP5ZhBFcFaFeIOFUFVwNFVNLFfFYlSuhJvFqHmBVKhBUOYRiSI5WCZiDvroognvvVLsIfrwgwCfmfmCJftfkSnfgDPYAAJwABsr%2BfylhVpwBwKPwSBs0aAqByg21H%2BWB32v2MA-2hYfBwOq11cTB1wLB10bBXUc5N1B5D1PwdlMkHwYh7BkhMeSWi4ExcIM5o5sW95XVOlRly%2BENpchltlsW%2BwlVXAIVUSFIclrAClsJSlMxkRAVdVaxtgS5nmfo26yQZNa86wbx%2BA26881xqOIEKNRNi8jVcVCV2ZYJ2Bbl%2BhzuiWsK5mlJBJmISJWQpOnA5O8Qkg3Aixp2IAgJJx0oWxpWbxfoyQ%2Bkm8KJqYHWXQLgAAUsTFQPIHtvgEYGwJxSSBuSYVfAbawsbawKbeYPttWE0mDZ%2BaLVcLlTDflmhHCAjaORXgVe5WAXzUiQsEyb2rXo5JzhYCWW2YPuPnzlHQLvOBzl7eWeLr5BbBPsnVPsWS3srrrgut7F5drrrsHESoblribq0cQpbknkXiHlxuacXBUJUC6f7m6b0bXfAsMH7gHtAoXsXjXOgBHtHh2lxhSa1lSYPQ3cPenoCNPS0Wbv0XnlMWlHPSHo4GXhPatGHf8BHZ3pEoWT3pggXW3lnROknSyWycWX3gPkPrZZfZLkfXnU3rPsoNyU-bgKvkFEqcZYNQ1LviWPvuNYEkfu5NNYNrNVfrIDfotYtJaGmS-lxjiWGb-hgjURgbiWAbUWg5YQgXtSBgdZIDwGgYcDgWddgyGcMIQYKJdWpSBBYXcVQTQcw94auMIY9dYS9RwUw34WYWw4ET9fAFw19aIbwwDbvTkvZfsCkSoSw24RANoawLoew%2BQYYQEbsaw%2Bo-QTw7YfYUoU4bsa4Zocox4ao14eQUNlo3cf4bo2PkEdIxGlCXMfZSANEfI-EegkkZUCkc8ZkdkcERUfsElWZcRsUR7KUeUXAlUZgzAOAZAYmSQtns0XCMk%2B0WsCQMMN0auhMMkwMWbjCbyaMUDVUOMULYVtMbMeGeQbLbBvLccUTSCT8XcX8YUACU04qecZcQzXk-MbsfU48UCS8e8Z8Urd8fw78fsR08MycS010OGlkAWpCRUaEcUyMR7Q48vh7VrWhDrT6PqeuTBfObgWAfiYDQLXHtPSSfsIpVPQns4yLQyVkIpfvZ2nmcyXXifeyaIpyZ-ZWWPvyTWa%2BUOeKYukkP-fASSIUHKTkCyhRdKfsKqcoNXSyj%2BXqR-gaZYUaT3aaUCC3ZaT%2BXaSBU0E6R4-3V3Uwz%2BV6TRb6dS8AQGXblM0VdQAQ60xGToMQtGZlHGUWj3cmZ3amQ1M-tMBmVmYszmeHZ85HTfUWb3q%2BQ-YC3ybgNndfd87fe-enWLswLnOsGaHUKrqq1fVLhq-KzPtqxWRit-Tzh3gWZqzPv8-Pja7-evrCdvkA8NRwmNY1OA5NVA%2BfnNXAwtffkjI-iK8tI2cATg3AfsNUQkwXtGyGevfg3ifsOmSAMgYdWQ8dRgVQ6m7g7QxdVdRyxo4I3wds09Z9RUE9X9a9bU-Qf4RW8I7GKIyISI3W4mJhbJdU-jSSF49o0oyo2o84Zo5Wzo84fo3YZhAO3Y0OxYyOyY74SY4I5W047RrkWs9CSSO4540Y%2BRp5IkckUYwE1kcLUCHkV0GE0UZhlEzsmUQWnE--gm%2BvRk6k1zQmT3Zk50Tk7jv03USvbvIU1%2Bk80CPc2U5UBU9PZMfkLI6W-QUM%2BFV08CRMw22Pu04cUh08acT01ccpDcfB2Poh409h6Mx8QswidMxAP8XM806h5zZvCs1Ma4xswkls4iS85m7NKid%2BUc9BfodiUm%2By1hZc8lsSa3KSTjQ8zPRuxGh7W8wydK%2BiDrLK2a6fRyVycq9WRC%2BALlWC8szp7urnFCzKXCwqYi8qci5XWqWi5qROQBOi-qSyoaSysk-i-kISz8NtXSySw6WSzBc6ZS0pIm3S7Sz6e6Yyzk8AfGds6GcJ5R3cZGdywkTMHy%2Bysk4KwPUw8g2K0ee1KCe57khB%2BJ2HsF2QwyPy4B8Qt%2B9k5m6UASlMfI8oGsPKr4-4%2BkYE-DlKwfTK6-T88WbhdDRnbq6rN7cCzp51cSjwPpyABKUZ6rOVoQIa-sGaZ2RaV5xwLkLkHfPYIeQkJobIIuenE4rnPYKngAHxXkuAuAgCqRNB5JneXdxRNAS1fYXdZSqTBfdCbfbcYIzA-d3w0r7c1QzDA8gdMNg8xufYEHFv8VNAA8YKYXQLVKxoTCvcw0zCTePlDlzzzfcxQtflYTEuNowj96aVE8OmuCp4W1cUnM8XbmoBw8gAI-wDUEHlNDs8gAHlI9YVXmvfAe3c0p5IY-yx6fkV49oAE9UU0TE%2B2DC-k%2B8fMUuCUE0%2BW109wV8XtTLWHks%2BCOc-6-nmFjYVFcC9FTOM5JDWbnevNQTUmJTVsAzUX6wPwOhtQ6ZlnWYio%2BuBTaHDpwC8PCA7VyijPKqRUiraSsfubX6EnUtTM9bd3xldENccJbZvkOUPxl0PEEEQ3V3XVsYA8PiF8Psq6-UEl80EfViM1sSOF%2BFg89LNyecdZB7PqjdBg-%2BcCdsvR%2Bt9QAHdNBB-BfN%2BVDpzt9gH2DW3D9c-98xfo%2B2Ue0TDy8B2cf1%2BYhw3QIz-g1lNC8PKI2b8McT2H32vmtp1Q2gjDcYoGsYLafexY-dVik5I0stmDen-tn25ret3-vxrn9nCGuY9i%2BD64%2B5xFuhrQniSDB6LkA4dKHVGgFV5x9fu24PcoWGcRp4nuy6QohE1vYXxA0JqO7oWAe7ICryGKPJGUU1S3AcBmEV7o9wIF6tXuxAwNKQIuaNxOUo3C-h1T-7DlbAEvVAEAMv7S8QIYA1wAzHyhQDUAMAlnvYF7htwgciA07vgLvDXt0BHGC%2BEwPHhkCQIeA97neEIFUBiBKcUgXOQoGyDhB4xUnjoPyj0DUYTSa1BsBYG-8T%2BOPDgYAO-48C1QBzEAPwJcD6Qtu4WYQaIPj4YIOod1OckgI0GoCucN7RQVYNu5zl1BKArQWUSBRRDCwBgkIRihoGZxwUgvCwfChF4xFQW5FKXi4Ooo%2BkpyDRBXl0BAquAl4u8GAdxQ14IUBKQlPLqeUN6Xk7wGdfCqB3yDtCg6rLUuqVT8o3gCakVVGtVWWKE0GqTVDmiBDCYpVQ8g5MXL1S6D9UuM8lGGrjRqYkhGG0CUoe6xJCmVzKV5e8FZRsqjl3Gyw1aNJw7Cf89WLA-mvVlLhJpmBTgocKvyuChobhzwu4XCm2FtEd%2BAtTeMzTRphV88qwxSnByZrjDiapNcmpTWpq016a%2BHRmiSGZoTD2aBXHoSHS%2BGC1oO1JX2iTgqyS0WuMtLpiRyBITMVaatDWo3CwFf8lul-LZo8O5j6tPhWzKwcyLpFtZOO3QHYe7QKwYi4CodRTg6jdQeovUOSOIYN0TAYpTwHEKoINz76j1z26KagSYMlH7BpRnJRUHKO0pNBU84eJUUYJlFajJUxKJoJ0nLKYFQmrVcIWOjvgSpCw8o66vIPQyRNFkTI0FJKMEbmjpMooL2KwkqCHle4Ltffr135wx1j%2BU3B%2BonVNbR1BcDAJAGgGjF9cHWCuLXIXSNYCkdOfQ8uvrms6otjcrnHuvXWtxN0Oyhcd-u3SC7pMBWfdFMrPRLEp5W4o9KPKJ2BqVN6xyeURhnkpLL0c8O8AXim03op5S8YeXEdliU6%2BB8yudfrk3nPpF1%2BSarGMcfRTHxiMq1sM2iq0zHex0qaAcFt7EdpsArOocGzgWNsDFw2A2LfQknBYDu5igNjOXg8hwJoEk46PJ8coCTg6AIAWADgJo0zjQA4U%2BwCmhkTADJRCw%2B8CxvYBvB4DDyBg3uGb0F77ANiu6NWpsRmDj0FC%2BAAABrrBGqaRNIusF3T6Q0inmM7ChJmAdwSQetFeHTCXIzBU80ifLitwJZv8nc-Kf8djjPFGAWANKc8TVRZTgTDxhHPiZnwYa9w64qFMhDzwmA3j-cd4mHkQQYaHkWhTDT8d%2BPJDDV2I8FTKuqAIi8Rx2gjNuPqEtACNqChkgiMuBAC9xVq0YVtuIOslHYSRCtImmcVpp3Y5yWQDDqWCcndMV4GtOHGBPnAhgNgb4sKAxyYn5AGwQU9YCFIiwgRvobCL1n4nimvQ-WdvGUaYHlAQhLAVARUK71LDtQ24Z1efo%2BOAJoEuiz0J6GsExRAT9IYAPqKxg3EjQ%2BoD4kaKKHFDSAHkv6d1GUAahe55AaYAUEKBCktpSe0U0qToiTDIR3QoKGqXVIalO0mptgV7q1LFBGBOpXAFoL1LNz9TBpY0j-GgXREkhMQfSMEIe3WYzt923jI9n4xPYdcz21OO7INgPYJFQilQR6QaFsBgAlyFxfSF10j7Qpiu7YkCFmiuDsTCwPKFlMXG4k0RugMk4QHeJcJmE0qStZCckFQkPBM8BEWGTVFkkQBXCrIGIlhJwn4A8JBEoiSRLInr04ZCMxQJdzphEzcJ%2BEwicRNIloz4y2YfICdKunnSFI2M28XjMRnDAqJNEgiFkGdGMYMB0TPpMF3N4stcGlBWTNTLxlYzVJP4igixlHYGSVZxQNSYLNsbeF-CFEkCMKllnPM8RwM%2BVKDPuGVoKUUM-ptAmF4hSfaOkhSJ31H5uzY2NEIqYIH1TeJ6WmEenlpJAFYQ9Jo7dyV0CEiVshsossSOaHsCg5w54RERvHPaiJzZujk5Dk9nnhpzPJ52ZDp5iVrbo14%2BkNOUlx3g8t45BEUUHP1k7QJVZ6hLLPniSrRUN0h0roJiB3hyBweaOdiTMCWlG4WqaAl0ZLPvb9yrof0yvMp2ryqcu8M4zBAmNQDrinaSYw-up1XFoBh8TyRWGrh047jV0EpKoVRkPhHiw4EcBIlwHRYN0aAPjTFs%2BzzhHTmJ5Y1iX6SvnGJausOECJFMKTDSwpD8iKYFO-njT7Zk06IMAzNjJTbemCfZGcjKjkZcpS1aHIVMLD5hypYMCyF-OdS5AWwlQLYSBD6hKS%2B%2BhCsPEQoIXEKyFpCihSQqoXkLqF55cOfgtoWMKaFzCyhSwqYWsK6FBEBhWwp4UcL2F-C3hX33BxcK%2BFgisRaIokW0LhFNEbhZIvEUCK5FHC6RVhFkUKK1F8ijRUpOUWYRVFmi9RYooUXaK8FBivRaYsUVGLNhJiqxfosMX0LrFZimxbwosVdAAcTQXuG4o8WWTPF7irxb4p8X%2BLvFgSvxUEoCV%2BLnFWQXck0FTnQ4olsSmJfEuiWJK4lSShJckrSWpKMlYOehSeXQq5KQAOS-JXkoKXFKilpSwpeUpKUVKyllSk8uEpAB9Q64TQRpSAGaWtKml7SlpR0raWdKel3SvpV0oGW9K6lDSwZf0t6WjKJl4yqZWMr6XDKZlky%2BZdMoWXLKhl9CxZespWUbKll0yuZZsr2XbKtl6y3ZQcv2WHLTlXS45WcpOXXKrlsytZecpuUPLDllyp5a8seU7L7l7y25W8pmUvKvlPyn5X8u%2BX-KQVdyrhcCohUAqWlQKqFZCpuUwrQVsKzZQirhWoqFlKKpFYioOUYqsVaK7FZ8rxWEr0VBKzFUSo%2BXgrSVlKnZbXy%2B4hSKQxwQUHtLvltycklw90q-J8ZIzF60AFlRGnQYgRdebIDerVmvmJE1wBU24DSAKmFgRJ-2e6sIRZ5CLeVZs7LIPSAXOzXBmJE5vyosF79cyU8qcXKzXkLzN5R89gCvOnEriTVwQLTMoDYAWqjVvza1SMi0R2rWAWnZ%2Bna0tVH8-mmnF1i5DXySldhEaS3nohAY%2BtIFkDB3tAyd7zVb8eUpBhGxQZRtoCOqpQPE0AIFs4CeDITmmxJAZss2pDchnmyaRZroeRbBSSWzlllteCVjPRuJDz61teG%2BlEyUI12JCF22rbTtlI1k6YhwRWQWdt4XUJmNh2datQsuxYartJ24kGwtOxAiDrrG87TwlHInUGyp17ajtsEzgQ8zwieNOQh42dwxFLpZ0trrdIyJnst1WXMWdaIUFjpomj7ONhmtqJvsmiH7ADn2Jq5dE-21Yqrv2Ozysd%2B8YxEGjC1g57q5iwZQZk01o7rF6O1a%2Bgp5Og04cLieHRZgRzg1EcoNWHEZq8XI6waEu3hBDVhvmZ4ba5s3CEsxy3byEe2Cnc2RBruK7NuO2tJii1GOYd8y1xlRSK2OxHQBbmtJKToDJxGdDsgnHGjeOJ64Gqvms8lcR-Wdajlxu24jKnuKXQ9pp4bqzNDpxM6YRYWRMeFh%2BUs6YQUW6paOBi0c5YtnOOLQsb%2BvjKrcn5XnYlk0FJYezPsdpDuh7ixkP97SdLdzZF1Obsz9Z2a4YGmvw3kEy5PLVLn5vfX7JMuhaGGTl2xyZlCwJskVCGIk0zzlxPq51QwmEBuqPVuALcUuj3lKakgKm7LRYxPkniNS1ad8eix5rnNwpBQFiV5yq2lgg%2B-KcZDMGa3CtdgorbHIHxpTKBNJnEBBINuVC8DMIvEFCkZMskICaIFklCoeS3AdRxJ4c%2BpnnNI44bxmWxcOaFoSL2BDJzPGZrPFJHEatiRvGLn-hgDY1eSMwPeXPBK1uq9NY%2BMbXFPs6-kWUF2q7Uvm22U8XAsoUOPIBgFaqO%2BgcziMHPG3xzDyQkNuDNoUhzayENk2SPkqkGuydtt8PbVXKN5XkPt%2BFGlP7Wu1pUMqd29gKpogkWcnthQmXq9qnJ46vtBECoS4DYrFBAdTm5iLBRG3aTNVXQCbZDvsCCVkdsO8SBDoW3JykdpcrluXN21IUMdcOcSq1SkqZCI%2BhXUNSNXDU29Upx%2BaNYG2d4hsEFPUbrZGz-mnMoezEGPrSujYFqSGR1KoOnxlWw8sZA23isqFYYVsHdDPKtsIWwbcMZ1za%2B3XUIwBNtDgruoOR2s93iMO2kjTCHXwdSsqBNjzJhh9u9qvCJgNOsfEnoLy1aBRWI65nHtNlAga53QIPaDvz0J7Z%2BjfHoCnp2Z8jMIzW43XxPY2sAr408GtAdgdHjJa9iMhen1swiD8CILgJvcoGZ0bka9QWkAN7J700Rmtu0ngOHI3L17AU4yKfcF29lpQM9n2QUbRtI2Yhsd7pVfcCOzG%2BU1Qsu%2BdLMJu0ZUyq8EhHOJsnGSb0txqtcTatdUWMHVanJ1WuJgWEBi6BWxTQZ23HPJyt4cSOBfM1IcrEit8g6fVs85zAX5Iqt%2BTXACnBhAF%2B05QMqvrAALnUP8uKc9DAXnwIF6u9yFyGynwLEGlkuuMFxQU5MKpGC5sKyRwVcLOoUSxJYwYYPMHocTB1gywfoPsGuDnBng2wd4McG%2BDjB4ZRHmiUiG3FnBsQ9NtEMSGZD0huQ%2BIfkNSGFDyhpQ6ockPqHZDKhjQ1kq4XaGtDmhtQwYb0OGHFDxhsw0YYsOmHOowhyw-oasP2G7Djhkw04fMMOGTDUkkAK1Ii5IHsc%2BYXaRgdz35A2V0BjYKKs6IKzuVUAFA-kBH2CrHgheMIyQAeDu9qQJB23ZWtwUkh5VsAu%2BOHLurZG24a4MSbX2iPCaN92BdVTxywhW14uInPVROJU7JiMtb%2B55M-qk3NGN5F%2BcED5DiC7zv9ZG72EuQ6mhSughm2zrxINLDHp9pmu%2BdeJxnwzlZEBxrW3ULC8T7An6OcgkmOxGAZArO2QaoJJAJI%2BkQycgAfHeCUDsodRphrxI6QbjSCUxmYH1FlV9RJBh5VPL3EjzLUxoNKJWQTOeOp5MySq4vv3m2PSBdjfErY4TB2OfYaURxw2icbIBnHuwwwOE6wgRNIn4DC4YKUAtKNUGmVB078lgcSmjVcDaCSagQbgVUJiDYksg6MFQWRB0FaB6g62EyMuLe4Hx4QxyfoXsnI8nJ3k9ya5O6HBTMink3ybFMCn%2BTQpyUyKeFMqLRTEp8U1KcVMynpTcp2UzovlNKmFT3J4HKqZ0XDKDT9Cw01wuWp6m8FmplU8qbVNmnNhFp601aY1PqnzTTp20y6bZNumIldpx0zafdM%2BnPTHp%2BpV6edN%2BnAzAZgHGGaDOumQz4Z3kzSu8N3z6V50RlQEc333QaAAgfvF0eAXGEpj5GPKGQE53PGY5rxtOZUDcpJG08wOE8qQd2nSACIHhiefVuCP8Ncz6QDzJwAfBZnxsb2YY6u1%2BNrhM8mEevhzICK5nF0Q4ckM4DEkfzq96ZzM8MaxmonwQ2cU49sHeDAdEt0e%2BYrmZ-QQF4A69LM32AHATnHAaeA8vGVPBygSEFETYFCbBOfZikg8rnF1mczNSszt5nYBAHGiyZDzQWT86Ufz2-mPw2QfgPeC7PeafDGqq2sMeC7DnNwOsn8efA-Dt0lpqYW4FMWbkLxl468Uo-XJGN8avBDTdqCAFADEXY1bkOPm4LYBO1hA1yTCEgASlc8ijdcEi0xYIOUWGL4MhtbJidmcMDgN6Qi%2BKuC67g2QFDdVR2oYudsmClQAS7kCwwPAJChYUi8DmoC9mCDhYFnusAJmVB2oKlgPqQcEYMXBGsl6lPce6OrTaAGGNhB2bAvDHuzeCmOSDtG0U7XZZIMfsMfVnUETLMAKbVmZ8IxysgFkrsAjrjDSRW2ac5ZhnOw4uTt0bkgKwduo4dM1tQJR7M9m3Qxyi%2BWEJyxzviu8Q-LrDby75Y8v%2BFNL0c1y7HIjAVW8YYVxHVuAivpynix25yecViv1Xc5TVueFnIyv1nNz-s1M-kEvPVcbzoJ8E7FJ3bFAZgeFywAcL6z1zrK9cmRLIQSAvQqc80%2B1fXIQnAnbzZue80Ry9z55PxBXFLdfrS1v155a43856pzqOriyJqyfTvIU27if9S6fvf0zGOnjOtSx2zVAaYbNa4D7KOLTMDur9a-dw2x3TlZoi8QI8POyyfzswgWTobIV7cIEIcmNXvJ6RDbV8W23i6K5R5eHodq8nIcKOVxwIw1tK0Wi2tNaLlb3HjO16P0cgJ8xgBtEEZomzWxs4buV3W8D8eB%2B3qfhjVBsXeuuuLR7yBD%2BlZMk%2BxlY%2BcN317XwT66hpYRzWpqCGtNi3SnyLXHUbdfpXNYW3OoZHfd7Ozy2w0L3Kg%2BLoemtgX3YLhyC9fuxGbWutsG2Q9OJR6tX3%2BqR6ALZe%2B2%2BDedmFhB%2B6JFnV9nr3eyMLK6FuThZojZWwdIEXiPXooJTaY7ZVgXXHMTbQFHqmjRbcnYkSPUE7NEVbR1aQ2tWY57V9G6lZ3RVzvbQ5nMhPWOuNHV5r%2Bjefdby0SlCtuY48fmMq3jIk4ExllNAueRJx39kx7o0nAf2lbDxZYrsj9c0S9yWy-yaVGMipsE6SYn0hfdxFQwbjT9i9g8cvhXs-CzVtXW7acS3mHxFhEwd-evdSJrxWj297c90bPtzwhj5l57frg3GWgJjGlkE3efBP2A0A5AFyGUX%2BS8gnYKiTKx5P7zHGVziJtcxJG-u-oRYtgE6audvRkBZq4IF2iUi4DG4lKCFq-JlFZMR3H7XO3blNvePw7zJguo8oEJquhXA%2BK2qK0CRitxWaIRd5DkuRXjSglyGRI3nOTwcuXwdZCoSPkaYKFH9L4cubRQ-TtCOSDNDtG8h3ofhymH2HFh2w44f%2BS9hwRD%2B59k2AUAr115K5AA-MAkB1634mABg6mtmUsaFlB8HNfgtfi1Ze65azwFWu8S7KWDhXT22bMTAnHbKqppMCnvT2dks9zCCNY0eDWYtTDHu4rHcelx39We4DS2fMuRP6%2B3QYe26r5rNme2WzcJ0ffY65mtm0TrZk49ZEL7A60CZJxY3X2wg0Hxj3kKY-SAoWss6FqeCHawutyhN8DiB4g%2BQfY5JgC%2B2FsoApurR-7kIQB31Z8dNg%2B5C85XLIVXvLzO5RTEpy6pHt8T9792p-fg%2Ba0OgF9nW3VfqpOtH1wx68jAAuK8zghxAeSGpGJDJw4Bxa-Id%2BGwCXBkPbqwu2ySAHyMObigawRcrbSNo%2BwNxLennJgzYRsYsQggEQGIB0eKACEOAHDExBkQnOrIIANeH93IAiB2qIAZyJ2QvlYKMqSgMZ2IBIB3wDt3AfwD-yxc2ogppAfgHElPBWBrn5OYl%2BKlJcbByXwwRQhi49izDMAeQTyEg6Ck%2BAwmyGDIDMNRcsu8hCdFe0K9UypVdOdghYX5WDvzhQ7G8XwPPDyCzN5ASxPvGi4wQwOcAmIPvJ0FACIv4AyLmpM5E-OUWg81AWAzIFlKUATX45zNjVkoACApA6a9gBCGaJ3QbmwwWl2KCdfRSk8AIUAJsSWJmY3Bn8SmIgA4BJQKAyB69fOi8di0CRzskC-sGDdLEss0qcNwgEjcIBo3SQWN-0zCbvMtY6MKYskCuQSgiaK5WgBRGQAaEmQ1UFSlkCXiNuyM99N%2BIxZcB95vARsVdKABVehh5QFziWmRqAwnDrtF82qWdhAAzZOgmrz83IFCHJVKcpbnwNC5cxSUrnybrd40YXmWQgAA"></iframe>
</figure>

<h2 id="taylor-playground">Taylor Playground</h2>

<p>I have made some changes to the <a href="https://playground.taylormadetech.dev">Taylor Playground</a> too. I’ve added
some music so you can have background music, I’ve added sound effects, and
finally I’ve added a licenses section so you can see where all they assets came
from.</p>

<h2 id="switch-to-kde">Switch to KDE</h2>

<p>I wanted to delete my <a href="https://www.microsoft.com/en-au/windows">Windows</a> partition so that I had more space on my <a href="https://en.wikipedia.org/wiki/Solid-state_drive">Solid
State Drive</a> (SSD). I decided to do a full reinstall of <a href="https://fedoraproject.org/">Fedora</a> and
thought I’d try out <a href="https://kde.org/">KDE</a> as it’s been a long time since I last tried it.</p>

<p>I’m honestly very surprised at how far it has come. It’s extremely nice and I’ve
had basically no issues whatsoever with it. I genuinely believe this may become
my preferred desktop environment.</p>

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

<p><strong><a href="https://www.youtube.com/watch?v=7JupB4QHyGI">Why do NES colors look so different in emulators?</a></strong>:
This taught me about how colours worked for over the air television.</p>

<p><strong><a href="https://matduggan.com/i-sold-out-for-200-a-month-and-all-i-got-was-this-perfectly-generated-terraform/">I Sold Out for $20 a Month and All I Got Was This Perfectly Generated Terraform</a>:</strong>
A pretty good take on LLMs.</p>

<p><strong><a href="https://arcanenibble.github.io/so-you-want-to-write-an-app.html">So you want to write an “app”</a>:</strong>
A painful look into building a UI application on a bunch of systems.</p>

<p><strong><a href="https://blog.jsbarretto.com/post/text-editor">Writing my own text editor, and daily-driving it</a>:</strong>
A fun journey of building a text editor.</p>

<p><strong><a href="https://www.youtube.com/watch?v=61v-qUVKXxw">The Complete History of Tetris the Grand Master</a>:</strong>
An amazing documentary series of the history of Tetris the Grand Master.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[At a Glance Rails Template Making a Rails template for myself Jumpy Alien I finished this example game Taylor Playground Some minor tweaks to the playground Switch to KDE Reinstalled Fedora and decided to try KDE Interesting Links Cool things I found this week Comments]]></summary></entry></feed>