<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Geoff Corey&#39;s Blog</title>
    <link>https://blog.geoffcorey.com/posts/</link>
    <description>Recent content in Posts on Geoff Corey&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Wed, 22 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.geoffcorey.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Missile Command coded by Qwen 3.6 with Claude CLI using the local LLM</title>
      <link>https://blog.geoffcorey.com/posts/missile-command-qwen3.6-claude/</link>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/missile-command-qwen3.6-claude/</guid>
      <description>&lt;p&gt;I wanted to try pointing Claude CLI to a local LLM and see how well it would
work. My machine is running linux EndevourOS has the following specs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Monitor     3840x2160 in 27&amp;#34;, 60 Hz [External]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Monitor     3840x2160 in 32&amp;#34;, 60 Hz [External]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CPU         12th Gen Intel(R) Core(TM) i9-12900KF @5.20 GHz 52.0°C
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GPU         AMD Radeon RX 9070 - 48.0°C [Discrete]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;G Driver    amdgpu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Vulkan      1.4.335 - radv [Mesa 26.0.5-arch1.1]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Motherboard PRIME Z690M-PLUS D4 (Rev 1.xx)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Bios        3811 (38.11)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RAM         ●●●● 23.94 GiB / 62.60 GiB (38%)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I use llama-cpp to run the model locally. During this experiment I kept
hitting the context limit. I bumped it pretty high but then again, I have
plenty of memory.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migrating from Ghost to Hugo using Claude</title>
      <link>https://blog.geoffcorey.com/posts/migrating-from-ghost-to-hugo-using-claude/</link>
      <pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/migrating-from-ghost-to-hugo-using-claude/</guid>
      <description>&lt;p&gt;Decided to move my blogs from Ghost to using Hugo and generate a static website
for the content. The reason for this was I don&amp;rsquo;t use all the fancy features of
Ghost. I don&amp;rsquo;t do newsletters and Ghost requires an email account if people
want to sign up for notifications. Plus I have to run a database for the content.&lt;/p&gt;
&lt;p&gt;I started with creating an new directory and fired up Claude and started with
this initial prompt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coding with Claude AI</title>
      <link>https://blog.geoffcorey.com/posts/coding-with-claude-ai/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/coding-with-claude-ai/</guid>
      <description>&lt;p&gt;So I wanted to see what AI coding can do and started claude with /plan&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Make a clone of Bejeweled game to run on Linux&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It laid out the requirements, made a to-do list and suggested Rust + bevy for the implementation. I agreed. It asked would you like me to build it and off we go.&lt;/p&gt;
&lt;p&gt;Initial commit didn&amp;rsquo;t have tests, executed but the grid for the gems was offset. I looked at the code and figure the something was a miss with the layout and asked Claude&lt;/p&gt;</description>
    </item>
    <item>
      <title>LazyVim setup for NeoTest and Native Node.js Test Runner</title>
      <link>https://blog.geoffcorey.com/posts/lazyvim-setup-for-neotest-and-native-nodejs-test-runner/</link>
      <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/lazyvim-setup-for-neotest-and-native-nodejs-test-runner/</guid>
      <description>&lt;p&gt;The simplest and most effective approach involves using the devastion/neotest-node plugin. Create a configuration file at &lt;code&gt;~/.config/nvim/lua/plugins/neotest-node.lua&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nvim-neotest/neotest&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  dependencies &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nvim-neotest/nvim-nio&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nvim-lua/plenary.nvim&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nvim-treesitter/nvim-treesitter&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;devastion/neotest-node&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  config &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    require(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;neotest&amp;#34;&lt;/span&gt;).setup({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      adapters &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        require(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;neotest-node&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The configuration specifies neotest as the core framework with neotest-node as the adapter for Node.js test execution. All required dependencies are declared and initialized during plugin setup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini Coding</title>
      <link>https://blog.geoffcorey.com/posts/gemini-coding/</link>
      <pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/gemini-coding/</guid>
      <description>&lt;p&gt;Continue to play with various AI&amp;rsquo;s and how to use them in code generation. Next up is Gemini. I installed gemini-cli and setup an API key on Google along with a billing account and limit. See &lt;a href=&#34;https://aistudio.google.com&#34;&gt;https://aistudio.google.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next I decided to try something that isn&amp;rsquo;t common (to-do, note taking, etc) and build a Texas Holdem Poker API server. I wasn&amp;rsquo;t sure the best way to write prompts and have been reading some books on the matter. I decided to ask Proton&amp;rsquo;s Lumo AI with the prompt, &amp;ldquo;help me write a prompt to build the API for a texas holdem poker game&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>LazyVim setup for NeoTest and Jest</title>
      <link>https://blog.geoffcorey.com/posts/lazyvim-setup-for-neotest-and-jest/</link>
      <pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/lazyvim-setup-for-neotest-and-jest/</guid>
      <description>&lt;p&gt;The setup involves creating a plugin configuration file that leverages the neotest-jest adapter. Save the following to &lt;code&gt;.config/nvim/lua/plugins/neotest-jest.lua&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;haydenmeade/neotest-jest&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nvim-neotest/neotest&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dependencies &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;haydenmeade/neotest-jest&amp;#34;&lt;/span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    opts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(_, opts)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      table.insert(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        opts.adapters,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        require(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;neotest-jest&amp;#34;&lt;/span&gt;)({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          jestCommand &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;npm test --&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          jestConfigFile &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;jest.config.js&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          cwd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; vim.fn.getcwd()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;key-components&#34;&gt;Key Components&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plugin Dependencies&lt;/strong&gt;: The configuration specifies neotest-jest as a dependency for the main neotest plugin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jest Command&lt;/strong&gt;: Configured to use &lt;code&gt;&amp;quot;npm test --&amp;quot;&lt;/code&gt; as the execution command&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Config File Reference&lt;/strong&gt;: Points to &lt;code&gt;jest.config.js&lt;/code&gt; for test configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Working Directory&lt;/strong&gt;: Dynamically retrieves the current vim working directory&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;related-content&#34;&gt;Related Content&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.geoffcorey.com/posts/lazyvim-setup-for-neotest-and-native-nodejs-test-runner/&#34;&gt;Native Node.js test runner integration with NeoTest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.geoffcorey.com/posts/gemini-coding/&#34;&gt;Gemini AI coding experiments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.geoffcorey.com/posts/neovim-ai-coding-assistant-w-avante/&#34;&gt;NeoVim AI coding assistance using Avante&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.geoffcorey.com/posts/coding-with-claude-ai/&#34;&gt;Claude AI coding collaboration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>NeoVim AI Coding Assistant w/Avante</title>
      <link>https://blog.geoffcorey.com/posts/neovim-ai-coding-assistant-w-avante/</link>
      <pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/neovim-ai-coding-assistant-w-avante/</guid>
      <description>&lt;h2 id=&#34;initial-setup--claude-integration&#34;&gt;Initial Setup &amp;amp; Claude Integration&lt;/h2&gt;
&lt;p&gt;The author explored integrated AI coding assistance within NeoVim using Avante, recognizing that vague prompts produce problematic outputs. After testing Gemini 3&amp;rsquo;s limitations with broad requirements, they configured Avante with claude-sonnet-4-20250514.&lt;/p&gt;
&lt;p&gt;When tasked with generating tests for a registration route, the assistant &amp;ldquo;created a task list of 8 things to plow through and chugged on that for 5 minutes.&amp;rdquo; Test generation cost approximately $1.04. The assistant also refactored monolithic code, separating functionality into distinct files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AMDGPU Ring Timeout / Minecraft Workaround Using Mesa Zink</title>
      <link>https://blog.geoffcorey.com/posts/amdgpu-ring-timeout-minecraft-workaround-using-mesa-zink/</link>
      <pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/amdgpu-ring-timeout-minecraft-workaround-using-mesa-zink/</guid>
      <description>&lt;h2 id=&#34;main-problem--solution&#34;&gt;Main Problem &amp;amp; Solution&lt;/h2&gt;
&lt;p&gt;The author describes encountering AMDGPU ring timeout issues with Minecraft on an AMD Radeon RX 6700 system. Rather than modifying kernel parameters, the solution involves leveraging Mesa&amp;rsquo;s Zink driver—a compatibility layer translating OpenGL calls to Vulkan.&lt;/p&gt;
&lt;h2 id=&#34;hardware-configuration&#34;&gt;Hardware Configuration&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU:&lt;/strong&gt; Intel Core i5-12400F&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU:&lt;/strong&gt; AMD Radeon RX 6700 (Navi 22, RDNA-2)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS:&lt;/strong&gt; EndeavourOS (Arch-based distribution)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desktop:&lt;/strong&gt; KDE Plasma (initially), later tested Cosmic and Hyprland&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Display:&lt;/strong&gt; Dual 4K monitors with Freesync support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;initial-setup&#34;&gt;Initial Setup&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Required packages:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>LazyVim &#43; neotest-mocha and overcoming &#34;No test found&#34;</title>
      <link>https://blog.geoffcorey.com/posts/lazyvim-neotest-mocha-and-overcoming-no-test-found/</link>
      <pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/lazyvim-neotest-mocha-and-overcoming-no-test-found/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;The author transitioned from AstroVim to LazyVim and configured neotest-mocha for test running in NeoVim. The setup required careful attention to file discovery patterns.&lt;/p&gt;
&lt;h2 id=&#34;installation-steps&#34;&gt;Installation Steps&lt;/h2&gt;
&lt;h3 id=&#34;mason-tools-installed&#34;&gt;Mason Tools Installed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;bash-language-server&lt;/li&gt;
&lt;li&gt;eslint_d&lt;/li&gt;
&lt;li&gt;gitui&lt;/li&gt;
&lt;li&gt;js-debug-adapter&lt;/li&gt;
&lt;li&gt;lua-language-server&lt;/li&gt;
&lt;li&gt;marksman&lt;/li&gt;
&lt;li&gt;prettierd&lt;/li&gt;
&lt;li&gt;shellcheck, shfmt&lt;/li&gt;
&lt;li&gt;sqlfluff&lt;/li&gt;
&lt;li&gt;stylua&lt;/li&gt;
&lt;li&gt;typescript-language-server&lt;/li&gt;
&lt;li&gt;vtsls&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;lazy-extras-loaded&#34;&gt;Lazy Extras Loaded&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;dap.core, dap.nlua&lt;/li&gt;
&lt;li&gt;editor.inc-rename, editor.neo-tree&lt;/li&gt;
&lt;li&gt;formatting.prettier&lt;/li&gt;
&lt;li&gt;linting.eslint&lt;/li&gt;
&lt;li&gt;lsp.none-ls&lt;/li&gt;
&lt;li&gt;test.core&lt;/li&gt;
&lt;li&gt;util.gitui, vscode&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;A plugin configuration file was created at &lt;code&gt;~/.config/nvim/lua/plugins/neotest&lt;/code&gt; with neotest-mocha adapter setup. The config includes custom command arguments handling context data for test execution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux amdgpu: ring gfx_0.0.0 timeout</title>
      <link>https://blog.geoffcorey.com/posts/linux-amdgpu-ring-gfx-timeout/</link>
      <pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/linux-amdgpu-ring-gfx-timeout/</guid>
      <description>&lt;p&gt;Running Wayland and experiencing Minecraft issues with kernel 6.16.3-arch1-1. GPU timeout errors appeared in system logs indicating the graphics processor failed to complete tasks within expected timeframe.&lt;/p&gt;
&lt;h2 id=&#34;initial-problem&#34;&gt;Initial Problem&lt;/h2&gt;
&lt;p&gt;Kernel logs showed: &lt;code&gt;ring gfx_0.0.0 timeout, signaled seq=7925632, emitted seq=7925634&lt;/code&gt; with the graphics device requiring a complete reset to recover.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hardware Configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AMD Radeon RX 6700 (Navi 22)&lt;/li&gt;
&lt;li&gt;12th Gen Intel Core i5-12400F&lt;/li&gt;
&lt;li&gt;64GB RAM&lt;/li&gt;
&lt;li&gt;KDE Plasma 6.4.4 on Wayland&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;troubleshooting-process&#34;&gt;Troubleshooting Process&lt;/h2&gt;
&lt;p&gt;The author identified a Mesa regression by running glmark2 benchmarks, which initially crashed the system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Best Business Books for Inspiration</title>
      <link>https://blog.geoffcorey.com/posts/best-business-books-for-inspiration/</link>
      <pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/best-business-books-for-inspiration/</guid>
      <description>&lt;p&gt;I have written business plans every year for fun and executed a few. These books inspire different aspects of running a company or starting a new one.&lt;/p&gt;
&lt;h2 id=&#34;e-myth-revisited-by-gerber&#34;&gt;E-Myth: Revisited by Gerber&lt;/h2&gt;
&lt;p&gt;First epiphany business book is &lt;a href=&#34;https://ia902800.us.archive.org/21/items/TheEMythRevisitedMichaelE.Gerber/The%20E-Myth%20Revisited%20-%20Michael%20E.%20Gerber.pdf&#34;&gt;E-Myth: Revisited by Gerber&lt;/a&gt;. This book exposes the myth of &amp;ldquo;I started a business so I&amp;rsquo;m an entrepreneur!&amp;rdquo; It follows the pie maker starting a pie shop and making pies.&lt;/p&gt;
&lt;p&gt;The core insight: they are a technician making pies, not an entrepreneur. By documenting routines for pie production and hiring staff to follow them, they become a manager. Eventually, documenting management routines creates a self-running company based on repeatable processes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setup a Self-Hosted Ghost Blog with Docker and Caddy</title>
      <link>https://blog.geoffcorey.com/posts/setup-a-self-hosted-ghost-blog-with-docker-and-caddy/</link>
      <pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/setup-a-self-hosted-ghost-blog-with-docker-and-caddy/</guid>
      <description>&lt;p&gt;Ghost blogging platform offers simplicity, but email configuration presents challenges. This guide demonstrates deploying Ghost via docker-compose with Caddy as a reverse proxy.&lt;/p&gt;
&lt;h2 id=&#34;core-setup&#34;&gt;Core Setup&lt;/h2&gt;
&lt;p&gt;The Ghost documentation provides foundational installation steps. Caddy can handle wildcard domain certificates through Let&amp;rsquo;s Encrypt for HTTPS security.&lt;/p&gt;
&lt;h2 id=&#34;email-configuration-options&#34;&gt;Email Configuration Options&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Transactional Emails&lt;/strong&gt; (signup/subscriptions):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mailtrap free tier maintains your domain reputation&lt;/li&gt;
&lt;li&gt;Gmail alternative available if you accept third-party domain indicators&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Newsletters&lt;/strong&gt; (bulk messages):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mailgun offers a free tier suitable for low-volume blogs&lt;/li&gt;
&lt;li&gt;Configuration requires editing &lt;code&gt;config.production.json&lt;/code&gt; with SMTP credentials&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;gmail-smtp-configuration&#34;&gt;Gmail SMTP Configuration&lt;/h2&gt;
&lt;p&gt;Generate a dedicated app password via Google Account security settings, then configure Ghost with these credentials in the mail section of your production configuration file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy, Wildcard Certs and Ghost</title>
      <link>https://blog.geoffcorey.com/posts/caddy-wildcard-certs-and-ghost/</link>
      <pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/caddy-wildcard-certs-and-ghost/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Hosting multiple applications on subdomains requires a strategy for SSL certificates. The specific example involves deploying Ghost blogging software to &lt;code&gt;blog.geoffcorey.com&lt;/code&gt; while redirecting the root domain to this subdomain. The setup uses wildcard Let&amp;rsquo;s Encrypt certificates to avoid generating separate certificates for each subdomain.&lt;/p&gt;
&lt;h2 id=&#34;cloudflare-api-token&#34;&gt;Cloudflare API Token&lt;/h2&gt;
&lt;p&gt;DNS configuration requires Cloudflare. The &lt;a href=&#34;https://github.com/caddybuilds/caddy-cloudflare&#34;&gt;CaddyBuilds/caddy-cloudflare&lt;/a&gt; Docker image provides DNS challenge support for obtaining wildcard certificates.&lt;/p&gt;
&lt;h2 id=&#34;setup-docker-compose--caddy-configuration&#34;&gt;Setup: Docker Compose &amp;amp; Caddy Configuration&lt;/h2&gt;
&lt;h3 id=&#34;docker-composeyml&#34;&gt;docker-compose.yml&lt;/h3&gt;
&lt;p&gt;The configuration includes three services:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Snowflake: conversion of timestamp NTZ to UTC with offset</title>
      <link>https://blog.geoffcorey.com/posts/snowflake-timestamp-ntz-to-utc-with-offset/</link>
      <pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.geoffcorey.com/posts/snowflake-timestamp-ntz-to-utc-with-offset/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;
&lt;p&gt;Code attempting to transform Snowflake &lt;code&gt;timestamp_ntz&lt;/code&gt; values stored in &lt;code&gt;America/New_York&lt;/code&gt; local format into UTC time with offset notation did not account for Daylight Savings Time.&lt;/p&gt;
&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SESSION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; TIMEZONE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;America/New_York&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    TO_TIMESTAMP_NTZ(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;12/15/2023 01:02:03&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mm/dd/yyyy hh24:mi:ss&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; mytimestamp,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mytimestamp::timestamp_tz &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; orig,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    TO_VARCHAR(mytimestamp, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;YYYY-MM-DDTHH24:MI:SS.FF3-TZHTZM&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; datetime_wrong,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    CONVERT_TIMEZONE(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;UTC&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;America/New_York&amp;#39;&lt;/span&gt;,TO_TIMESTAMP_LTZ(mytimestamp)) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; converted_ts,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    DATEDIFF(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hour&amp;#39;&lt;/span&gt;, converted_ts, mytimestamp) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; hourdiff,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    TO_VARCHAR(converted_ts) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-0&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; hourdiff &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:00&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; datetime;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The key involves using &lt;code&gt;CONVERT_TIMEZONE()&lt;/code&gt; with explicit source and target timezones, which properly handles DST transitions.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
