<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link rel="self" type="application/rss+xml" href="https://tristandunn.com/feed"/>
    <description>A software engineer passionate about Ruby and code quality.</description>
    <language>en-us</language>
    <link>https://tristandunn.com/</link>
    <title>Tristan Dunn</title>
    <item>
      <title>Resurrecting Crimsonland</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;Some games die quietly. They get delisted, lose their multiplayer servers, fade into the digital void. Others get remastered by the original authors with slightly better graphics and a battle&amp;#160;pass.&lt;/p&gt;

  &lt;p&gt;And then there’s the third way: you open the binary in ghidra and start naming&amp;#160;functions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I played this top-down shooter from 2003 with my roommates, and recently remembered the gameplay but&amp;#160;couldn’t remember the name. And today I stumbled upon a recreation of it, with &lt;a href="https://crimson.banteg.xyz/"&gt;an incredible knowledge&amp;#160;base&lt;/a&gt; for the mechanics and implementation&amp;#160;details.&lt;/p&gt;

&lt;p&gt;You can run it now with one command, &lt;code&gt;uvx crimsonland@latest&lt;/code&gt;, if you have &lt;a href="https://docs.astral.sh/uv/getting-started/installation/"&gt;uv&lt;/a&gt; installed. If&amp;#160;that’s not amazing enough, this was completed in only two weeks with the help of GPT-5.2, and the &lt;a href="https://github.com/banteg/crimson"&gt;source&amp;#160;code&lt;/a&gt; is&amp;#160;available.&lt;/p&gt;
</description>
      <pubDate>Tue, 03 Feb 2026 21:27:44 -0500</pubDate>
      <link>https://tristandunn.com/2026/02/03/resurrecting-crimsonland</link>
      <guid>https://tristandunn.com/2026/02/03/resurrecting-crimsonland</guid>
    </item>
    <item>
      <title>Customizing the Claude Code Spinner</title>
      <description>&lt;p&gt;Claude Code just added a &lt;code&gt;spinnerVerbs&lt;/code&gt; setting that lets you customize the rotating status text shown while&amp;#160;it’s working. By default, there are 52 gerunds that cycle through, but now you can replace them with your&amp;#160;own.&lt;/p&gt;

&lt;p&gt;For example, to set a static “Working” message instead of the rotating verbs, add this to your &lt;code&gt;~/.claude/settings.json&lt;/code&gt;&amp;#160;file:&lt;/p&gt;


          &lt;figure&gt;
            &lt;div class="highlight not-prose" data-language="json"&gt;
              &lt;pre&gt;&lt;code&gt;&lt;div class="line line-1"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-2"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;"spinnerVerbs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-3"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"replace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-4"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"verbs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Working"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-5"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-6"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Claude Code currently claims the &lt;code&gt;mode&lt;/code&gt; option supports &lt;code&gt;"append"&lt;/code&gt; to add your own to the rotation, but I&amp;#160;wasn’t able to verify this.&amp;#160;There’s &lt;a href="https://github.com/anthropics/claude-code/issues/21599"&gt;an&amp;#160;issue&lt;/a&gt; to add documentation that may reveal if appending is&amp;#160;possible.&lt;/p&gt;
</description>
      <pubDate>Wed, 28 Jan 2026 23:58:00 -0500</pubDate>
      <link>https://tristandunn.com/2026/01/28/customizing-claude-code-spinner</link>
      <guid>https://tristandunn.com/2026/01/28/customizing-claude-code-spinner</guid>
    </item>
    <item>
      <title>hid-magicmouse</title>
      <description>&lt;p&gt;During my slow switch from macOS to Arch Linux,&amp;#160;I’ve been frustrated with how the Apple Magic Mouse behaves, so this driver is the start of improving my experience with it. Currently it addresses my most common frustrations by preventing scrolling when the mouse is moving, resetting scroll tracking on mouse movement, and decreasing the maximum scroll&amp;#160;acceleration.&lt;/p&gt;
</description>
      <pubDate>Sat, 24 Jan 2026 11:50:00 -0500</pubDate>
      <link>https://tristandunn.com/2026/01/24/hid-magicmouse</link>
      <guid>https://tristandunn.com/2026/01/24/hid-magicmouse</guid>
    </item>
    <item>
      <title>Voxtype</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;Push-to-talk voice-to-text optimized for Wayland, works on any Linux desktop. Hold a key, speak, release. Your words appear at the&amp;#160;cursor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This looks like the perfect Linux alternative to my &lt;a href="/2025/12/08/free-speech-to-text-on-macos"&gt;macOS&amp;#160;solution&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Sat, 10 Jan 2026 22:00:00 -0500</pubDate>
      <link>https://tristandunn.com/2026/01/10/voxtype-voice-to-text-linux</link>
      <guid>https://tristandunn.com/2026/01/10/voxtype-voice-to-text-linux</guid>
    </item>
    <item>
      <title>Glamorous Christmas: Bringing Charm to Ruby</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;Ruby developers deserve glamorous terminals too. I want Ruby developers to build terminal applications so beautiful that even people who “don’t like&amp;#160;CLIs” find themselves&amp;#160;captivated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve recently been using AI to write CLI utilities in Go with Charm, but I know Ruby much better than Go so this is very exciting news.&amp;#160;I’m even more excited about the coming work for the libraries to “feel more Ruby-like and&amp;#160;idiomatic”.&lt;/p&gt;
</description>
      <pubDate>Tue, 30 Dec 2025 00:56:44 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/30/glamorous-christmas-charm-ruby</link>
      <guid>https://tristandunn.com/2025/12/30/glamorous-christmas-charm-ruby</guid>
    </item>
    <item>
      <title>Why I Write (And You Should Too!)</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;Be okay with bad writing. Most writing&amp;#160;isn’t great! If my hit rate is 1 out of 5,&amp;#160;I’m thrilled. Get comfortable publishing things that&amp;#160;aren’t perfect. I know many people who wait too long to publish and, well, never&amp;#160;do.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      <pubDate>Mon, 29 Dec 2025 14:40:12 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/29/why-i-write</link>
      <guid>https://tristandunn.com/2025/12/29/why-i-write</guid>
    </item>
    <item>
      <title>Ruby 3.4.8 Released</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;Ruby 3.4.8 has been released as a routine update that includes bug fixes. The full details are available in the &lt;a href="https://github.com/ruby/ruby/releases/tag/v3_4_8"&gt;release notes on&amp;#160;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’d be nice if the Ruby team maintained the Docker image now that Ruby has a release schedule. Always feels odd to see a new release and then have to wait for an image update to be able to test a&amp;#160;deployment.&lt;/p&gt;
</description>
      <pubDate>Tue, 16 Dec 2025 22:28:55 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/16/ruby-3-4-8-released</link>
      <guid>https://tristandunn.com/2025/12/16/ruby-3-4-8-released</guid>
    </item>
    <item>
      <title>Litestream VFS</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;This is Litestream VFS. It runs SQLite hot off an object storage URL. As long as you can load the shared library our tree builds for you, it’ll work in your application the same way it does in the SQLite&amp;#160;shell.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m imagining running this in the browser with &lt;a href="https://sqlite.org/wasm/doc/trunk/demo-123.md"&gt;the WASM&amp;#160;version&lt;/a&gt; of SQLite3 using read-only credentials. Combined with &lt;a href="https://www.dbpro.app/blog/sqlite-json-virtual-columns-indexing"&gt;JSON virtual&amp;#160;columns&lt;/a&gt;, this could create a serverless interface to data being streamed into the database from another source. This could power a graphing interface for analytics or metrics, where the data is truncated at specific intervals to keep the database compact while using &lt;code&gt;litestream_time&lt;/code&gt; to query historical&amp;#160;data.&lt;/p&gt;
</description>
      <pubDate>Sat, 13 Dec 2025 14:40:33 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/13/litestream-vfs</link>
      <guid>https://tristandunn.com/2025/12/13/litestream-vfs</guid>
    </item>
    <item>
      <title>Upgrading to RubyGems/Bundler 4</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;We introduced breaking changes in RubyGems/Bundler 4 in order to improve usability, security, and maintainability of the&amp;#160;tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve upgraded a few projects and not noticed any issues so far. Restoring the default command to be install is nice for my muscle memory locally, but elsewhere, like in a Dockerfile, I already use &lt;code&gt;bundle install&lt;/code&gt;&amp;#160;explicitly.&lt;/p&gt;

&lt;p&gt;And while new lockfiles include checksums by default, you have to manually add them to existing lockfiles via &lt;code&gt;bundle lock --add-checksums&lt;/code&gt;.&lt;/p&gt;
</description>
      <pubDate>Tue, 09 Dec 2025 22:19:40 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/09/upgrade-to-rubygems-bundler-4</link>
      <guid>https://tristandunn.com/2025/12/09/upgrade-to-rubygems-bundler-4</guid>
    </item>
    <item>
      <title>Claude CLI deleted my entire home directory! Wiped my whole Mac.</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;I found the problem and&amp;#160;it’s really bad. Looking at your log,&amp;#160;here’s the catastrophic command that was run: &lt;code&gt;rm -rf tests/ patches/ plan/ ~/&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not that&amp;#160;it’s a foolproof solution, but&amp;#160;I’ve aliased &lt;code&gt;rm&lt;/code&gt; to a &lt;code&gt;trash&lt;/code&gt; command for almost ten years now to move files to the trash instead of deleting them. A &lt;code&gt;trash&lt;/code&gt; command is built into macOS Sequoia and&amp;#160;newer.&lt;/p&gt;

&lt;p&gt;The one downside is the command&amp;#160;doesn’t support the &lt;code&gt;-f&lt;/code&gt; or &lt;code&gt;-r&lt;/code&gt; arguments, so it often causes issues with Claude Code. Sometimes&amp;#160;it’ll switch to using &lt;code&gt;rmdir&lt;/code&gt;, so&amp;#160;I’m also aliasing that&amp;#160;now.&lt;/p&gt;

&lt;p&gt;I’m not sure how much moving the home directory to the trash would have helped, since the trash command &lt;strong&gt;does&lt;/strong&gt; completely remove files and directories prefixed with a&amp;#160;period.&lt;/p&gt;
</description>
      <pubDate>Tue, 09 Dec 2025 17:34:26 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/09/claude-cli-deleted-home-directory</link>
      <guid>https://tristandunn.com/2025/12/09/claude-cli-deleted-home-directory</guid>
    </item>
    <item>
      <title>Simple and Free Speech-to-Text on macOS</title>
      <description>&lt;p&gt;After seeing &lt;a href="https://wisprflow.ai"&gt;Wispr&amp;#160;Flow&lt;/a&gt; mentioned a few times, I was curious about using speech-to-text to interact with Claude Code. The idea of paying $12/month and potentially sharing all my prompts&amp;#160;wasn’t ideal, so I decided to see what Claude Code could help me&amp;#160;build.&lt;/p&gt;

&lt;p&gt;With a bit of experimentation, I settled on using &lt;a href="https://sourceforge.net/projects/sox/"&gt;sox&lt;/a&gt; for audio recording, since it seemed the best at silence detection, and &lt;a href="https://github.com/senstella/parakeet-mlx"&gt;parakeet-mlx&lt;/a&gt; for transcribing. I tried various improvements to silence detection, but found turning up my input volume helped the&amp;#160;most.&lt;/p&gt;

&lt;p&gt;With three commands in a script, I have a decent local speech-to-text&amp;#160;solution:&lt;/p&gt;


          &lt;figure&gt;
            &lt;div class="highlight not-prose" data-language="sh"&gt;
              &lt;pre&gt;&lt;code&gt;&lt;div class="line line-1"&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-2"&gt;
&lt;/div&gt;&lt;div class="line line-3"&gt;&lt;span class="nv"&gt;RECORDING_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/tmp/record-recording.wav"&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-4"&gt;&lt;span class="nv"&gt;TRANSCRIPT_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/tmp/record-recording.txt"&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-5"&gt;
&lt;/div&gt;&lt;div class="line line-6"&gt;&lt;span class="c"&gt;# Record until silence or 60 seconds.&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-7"&gt;rec &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;RECORDING_FILE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; rate 16k pad 0.2 0 silence 1 0.05 1% 1 1.0 1% trim 0 60&lt;/div&gt;&lt;div class="line line-8"&gt;
&lt;/div&gt;&lt;div class="line line-9"&gt;&lt;span class="c"&gt;# Transcribe and output.&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-10"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;RECORDING_FILE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-11"&gt;&lt;span class="k"&gt;  &lt;/span&gt;parakeet-mlx &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;RECORDING_FILE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--output-format&lt;/span&gt; txt &lt;span class="nt"&gt;--output-dir&lt;/span&gt; /tmp &lt;span class="nt"&gt;--chunk-duration&lt;/span&gt; 30 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/div&gt;&lt;div class="line line-12"&gt;
&lt;/div&gt;&lt;div class="line line-13"&gt;  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TRANSCRIPT_FILE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-14"&gt;&lt;span class="k"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TRANSCRIPT_FILE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-15"&gt;  &lt;span class="k"&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;div class="line line-16"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;The real script is a little more verbose, but this demonstrates the core of it. I use &lt;a href="https://www.hammerspoon.org"&gt;Hammerspoon&lt;/a&gt; to trigger the script and type the response for me. I also have it display a recording and transcribing status indicator in the menu&amp;#160;bar.&lt;/p&gt;

&lt;p&gt;My next step is to decide what to use for transcription on Linux so I can use it on my other machine. I might also create a second script that pipes the results through an LLM for use outside of&amp;#160;prompts.&lt;/p&gt;
</description>
      <pubDate>Mon, 08 Dec 2025 22:00:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/08/free-speech-to-text-on-macos</link>
      <guid>https://tristandunn.com/2025/12/08/free-speech-to-text-on-macos</guid>
    </item>
    <item>
      <title>Introducing Mistral 3</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;The release also features the Ministral 3 series—three edge-focused models (3B, 8B, and 14B parameters) designed for superior cost-to-performance efficiency. These smaller models include multimodal and multilingual capabilities, making them suitable for edge&amp;#160;deployments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m excited to see small models continuing to advance. While&amp;#160;I’m all in on Claude Code for code-related tasks, I enjoy using local models for simple copywriting tasks or for tasks requiring complete&amp;#160;privacy.&lt;/p&gt;
</description>
      <pubDate>Tue, 02 Dec 2025 19:29:42 -0500</pubDate>
      <link>https://tristandunn.com/2025/12/02/introducing-mistral-3</link>
      <guid>https://tristandunn.com/2025/12/02/introducing-mistral-3</guid>
    </item>
    <item>
      <title>Command Line Interface Guidelines</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;An open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern&amp;#160;day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Found this while working on a small CLI utility and searching to see if there are standards for outputting help. The real-world applications they link to were helpful for&amp;#160;inspiration.&lt;/p&gt;
</description>
      <pubDate>Sat, 01 Mar 2025 09:55:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/03/01/command-line-interface-guidelines</link>
      <guid>https://tristandunn.com/2025/03/01/command-line-interface-guidelines</guid>
    </item>
    <item>
      <title>Mastering DOM manipulation with vanilla JavaScript</title>
      <description>&lt;p&gt;An extensive list of examples on DOM manipulation without any external&amp;#160;libraries.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Web development moves at lightning speed. I still remember when I first started using libraries like jQuery, Prototype, script.aculo.us, Zepto, and many&amp;#160;more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Interesting to think about how libraries evolving fast back then was so exciting compared to today where I almost wish&amp;#160;they’d slow down a bit. Maybe&amp;#160;it’s from feeling like there was only a handful of options then and today there seems to be endless&amp;#160;options.&lt;/p&gt;
</description>
      <pubDate>Sun, 16 Feb 2025 09:27:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/02/16/mastering-dom-manipulation-with-javascript</link>
      <guid>https://tristandunn.com/2025/02/16/mastering-dom-manipulation-with-javascript</guid>
    </item>
    <item>
      <title>The hardest working font in Manhattan</title>
      <description>&lt;p&gt;An incredibly detailed and informative article on an old font, Gorton,&amp;#160;that’s all over the&amp;#160;place.&lt;/p&gt;
</description>
      <pubDate>Sat, 15 Feb 2025 23:21:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/02/15/the-hardest-working-font-in-manhattan</link>
      <guid>https://tristandunn.com/2025/02/15/the-hardest-working-font-in-manhattan</guid>
    </item>
    <item>
      <title>How I built an AI company to save my open source project</title>
      <description>&lt;p&gt;Interesting read on the journey of an open source constraint solver started 19 years&amp;#160;ago.&lt;/p&gt;
</description>
      <pubDate>Thu, 13 Feb 2025 21:40:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/02/13/how-i-built-an-ai-company-to-save-my-open-source-project</link>
      <guid>https://tristandunn.com/2025/02/13/how-i-built-an-ai-company-to-save-my-open-source-project</guid>
    </item>
    <item>
      <title>obsidian-cupertino</title>
      <description>&lt;p&gt;After using Obsidian for daily notes at work for around three years with the Things theme, switching to the Cupertino theme is a breath of fresh air. It feels much nicer to have the application appear native. And for people who enjoy dark mode, it supports that&amp;#160;too.&lt;/p&gt;

&lt;p&gt;I do recommend the &lt;a href="https://github.com/mgmeyers/obsidian-style-settings"&gt;Style&amp;#160;Settings&lt;/a&gt; community plug-in for its ability to tweak things a bit, such as hiding the active line highlight when&amp;#160;editing.&lt;/p&gt;
</description>
      <pubDate>Wed, 12 Feb 2025 19:43:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/02/12/obsidian-cupertino</link>
      <guid>https://tristandunn.com/2025/02/12/obsidian-cupertino</guid>
    </item>
    <item>
      <title>Monitoring ActionCable</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;I would never have found and fixed this without the monitoring that&amp;#160;I’ve set&amp;#160;up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Detailed article on adding metrics for ActionCable, but&amp;#160;I’m surprised &lt;code&gt;yabeda-actioncable&lt;/code&gt;&amp;#160;doesn’t exist when &lt;a href="https://github.com/yabeda-rb/yabeda-anycable"&gt;yabeda-anycable&lt;/a&gt;&amp;#160;does.&lt;/p&gt;
</description>
      <pubDate>Tue, 11 Feb 2025 22:48:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/02/11/monitoring-actioncable</link>
      <guid>https://tristandunn.com/2025/02/11/monitoring-actioncable</guid>
    </item>
    <item>
      <title>My approach to running a link blog</title>
      <description>&lt;blockquote&gt;
  &lt;p&gt;I realize now that link blogging deserves to be included a third category of low stakes, high value writing. We could think of that category as &lt;strong&gt;things&amp;#160;I’ve&amp;#160;found.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I enjoy the idea of a low-stakes, high-value writing category. My articles often take bits of time here and there over the course of weeks to complete, but short thoughts on all the interesting things online should be much&amp;#160;easier.&lt;/p&gt;

&lt;p&gt;So,&amp;#160;here’s my first link with some very minimal commentary. To help speed up the process even more I can provide a URL to a short script to fetch the content, extract the title, create a Markdown file for me, and open it in my&amp;#160;editor.&lt;/p&gt;
</description>
      <pubDate>Tue, 11 Feb 2025 21:16:00 -0500</pubDate>
      <link>https://tristandunn.com/2025/02/11/my-approach-to-running-a-link-blog</link>
      <guid>https://tristandunn.com/2025/02/11/my-approach-to-running-a-link-blog</guid>
    </item>
  </channel>
</rss>
