<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on jameskerr.blog</title>
    <link>https://www.jameskerr.blog/posts/</link>
    <description>Recent content in Posts on jameskerr.blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 22 Feb 2026 21:24:25 -0800</lastBuildDate>
    <atom:link href="https://www.jameskerr.blog/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>I Will Not Become My Heros</title>
      <link>https://www.jameskerr.blog/posts/2026/i-will-not-become-my-heros/</link>
      <pubDate>Sun, 22 Feb 2026 21:24:25 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/2026/i-will-not-become-my-heros/</guid>
      <description>A version of how I thought my life would look died today. Now my life will look different.&#xA;I am afraid.</description>
    </item>
    <item>
      <title>I Lost My Airpods</title>
      <link>https://www.jameskerr.blog/posts/2026/i-lost-my-airpods/</link>
      <pubDate>Mon, 09 Feb 2026 10:01:50 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/2026/i-lost-my-airpods/</guid>
      <description>Quiet the noise. Uncomfortable, yet alluring. You get used to it. We get used to anything. So choose carefully what to get used to.</description>
    </item>
    <item>
      <title>It&#39;s hard to deny the simple beauty of a function</title>
      <link>https://www.jameskerr.blog/posts/2025/mostly-functions/</link>
      <pubDate>Tue, 02 Dec 2025 10:08:36 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/2025/mostly-functions/</guid>
      <description>I love object-oriented programming. I love naming concepts and materializing them with a class. I love dot notation. I love hiding implementation behind a seemingly simple accessor.</description>
    </item>
    <item>
      <title>DOM IDs are a real pain in my apps</title>
      <link>https://www.jameskerr.blog/posts/2025/refs-rails/</link>
      <pubDate>Wed, 17 Sep 2025 10:42:40 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/2025/refs-rails/</guid>
      <description>The standard way to dynamically update HTML content in Ruby on Rails relies heavily on DOM IDs. These IDs are used to identify the target HTML element for an update.</description>
    </item>
    <item>
      <title>When you put yourself out there, you’ll feel exposed</title>
      <link>https://www.jameskerr.blog/posts/2025/exposed/</link>
      <pubDate>Thu, 24 Jul 2025 20:19:32 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/2025/exposed/</guid>
      <description>Yesterday, I got my first conference talk proposal rejection. It was going to be about folder structures, so I’m guessing there wasn’t enough AI to make the final cut.</description>
    </item>
    <item>
      <title>SuperDB Website Build Review</title>
      <link>https://www.jameskerr.blog/posts/superdb-website-build-review/</link>
      <pubDate>Thu, 13 Feb 2025 10:57:27 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/superdb-website-build-review/</guid>
      <description>My work designing and developing the superdb.org website is finished. The first commit was on October 4th, 2024 and the final commit was on February 5th, 2025.</description>
    </item>
    <item>
      <title>useStateObject: A Simple, Convenient API Around useState</title>
      <link>https://www.jameskerr.blog/posts/use-state-object/</link>
      <pubDate>Thu, 15 Aug 2024 16:34:22 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/use-state-object/</guid>
      <description>I am loving this API for working with React state. It&amp;rsquo;s a very light wrapper around useState. I call it useStateObject.</description>
    </item>
    <item>
      <title>The 3 Types of CSS Utility Classes</title>
      <link>https://www.jameskerr.blog/posts/3-types-of-css-utility-classes/</link>
      <pubDate>Mon, 01 Jul 2024 17:33:58 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/3-types-of-css-utility-classes/</guid>
      <description>A 9.0 earthquake shook my front-end world when I discovered &amp;ldquo;layout primitives&amp;rdquo; at every-layout.dev. Then an aftershock rolled through when I learned about fluid sizing and spacing tokens from utopia.</description>
    </item>
    <item>
      <title>Ship That Code • Publish That Post</title>
      <link>https://www.jameskerr.blog/posts/ship-that-code-publish-that-post/</link>
      <pubDate>Wed, 26 Jun 2024 11:38:31 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/ship-that-code-publish-that-post/</guid>
      <description>Two articles I read this week have inspired the heck out of me. The first was by Jared Turner of thoughtbot with the punchy title &amp;ldquo;WIP is waste&amp;rdquo;.</description>
    </item>
    <item>
      <title>How to Debug NodeJS with Breakpoints in VSCode</title>
      <link>https://www.jameskerr.blog/posts/debug-node-with-breakpoints-vscode/</link>
      <pubDate>Thu, 13 Jun 2024 15:29:18 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/debug-node-with-breakpoints-vscode/</guid>
      <description>I made a quick screen recording using the VSCode debugger to break on a line of code in my NodeJS electron process.</description>
    </item>
    <item>
      <title>The One Thing Missing in Every Budget App: Spending Commitments </title>
      <link>https://www.jameskerr.blog/posts/budget-apps-missing-spending-commitment/</link>
      <pubDate>Sun, 02 Jun 2024 08:34:44 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/budget-apps-missing-spending-commitment/</guid>
      <description>The one thing missing in every budgeting application is the &amp;ldquo;Spending Commitment&amp;rdquo;.&#xA;Definition: &amp;ldquo;A thing I am already committed to paying for&amp;rdquo;</description>
    </item>
    <item>
      <title>Fix for Kamal Deploy Assets Not Updating</title>
      <link>https://www.jameskerr.blog/posts/fix-for-kamal-deploy-assets-not-updating/</link>
      <pubDate>Tue, 23 Apr 2024 10:31:32 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/fix-for-kamal-deploy-assets-not-updating/</guid>
      <description>Does this sound like you?&#xA;You are using Sprockets to pre-compile assets for production. You are using Kamal to deploy. You have asset bridging enabled in your deploy.</description>
    </item>
    <item>
      <title>How to Set Output Values in Github Actions</title>
      <link>https://www.jameskerr.blog/posts/how-to-set-output-in-github-actions/</link>
      <pubDate>Mon, 22 Apr 2024 14:15:10 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/how-to-set-output-in-github-actions/</guid>
      <description>This is the syntax for setting an output parameter in a Github Actions step.&#xA;echo &amp;#34;{name}={value}&amp;#34; &amp;gt;&amp;gt; &amp;#34;$GITHUB_OUTPUT&amp;#34; Here&amp;rsquo;s an example of using this syntax in a workflow step.</description>
    </item>
    <item>
      <title>Responsive Sizing for React Arborist Tree Component</title>
      <link>https://www.jameskerr.blog/posts/responsive-sizing-for-react-arborist-tree-component/</link>
      <pubDate>Wed, 17 Apr 2024 10:00:47 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/responsive-sizing-for-react-arborist-tree-component/</guid>
      <description>Many people ask me about how to dynamically set the width and height of the Tree component based on its parent using react-arborist.</description>
    </item>
    <item>
      <title>Cache the Result of a JavaScript Getter Method</title>
      <link>https://www.jameskerr.blog/posts/cache-the-result-of-a-javascript-getter-method/</link>
      <pubDate>Tue, 16 Apr 2024 12:49:54 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/cache-the-result-of-a-javascript-getter-method/</guid>
      <description>My first programming language was Ruby. Well, it was actually Microsoft Excel, then VBA, then C# for a university class, then Ruby.</description>
    </item>
    <item>
      <title>The Friend Is You</title>
      <link>https://www.jameskerr.blog/posts/the-friend-is-you/</link>
      <pubDate>Tue, 16 Apr 2024 07:46:19 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/the-friend-is-you/</guid>
      <description>Imagine hanging out with someone all day who berates you. They make final judgements about your character. They criticize anything you do imperfectly.</description>
    </item>
    <item>
      <title>Finally Understanding How Array.sort(comparator) Works</title>
      <link>https://www.jameskerr.blog/posts/javascript-sort-comparators/</link>
      <pubDate>Thu, 28 Mar 2024 11:39:07 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/javascript-sort-comparators/</guid>
      <description>After 13 years of JavaScript, I finally have a way to remember how the comparator function in Array.sort() works.&#xA;I think the trouble is that all the examples use this shorthand syntax.</description>
    </item>
    <item>
      <title>Using @monaco-editor/react in Electron without Internet Connection</title>
      <link>https://www.jameskerr.blog/posts/offline-monaco-editor-in-electron/</link>
      <pubDate>Wed, 27 Mar 2024 16:58:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/offline-monaco-editor-in-electron/</guid>
      <description>The Monaco Editor is awesome. It&amp;rsquo;s what powers VSCode. I wanted to use it to power the query editor pane in Zui, the data exploration app I work on.</description>
    </item>
    <item>
      <title>Transitions All Settled</title>
      <link>https://www.jameskerr.blog/posts/all-transitions-settled/</link>
      <pubDate>Tue, 05 Mar 2024 20:26:00 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/all-transitions-settled/</guid>
      <description>I just published a JavaScript library called transitions-all-settled that allows you to wait for CSS transitions to settle before you do something.</description>
    </item>
    <item>
      <title>There Are Only Two Types of Transactions</title>
      <link>https://www.jameskerr.blog/posts/there-are-only-two-types-of-transactions/</link>
      <pubDate>Wed, 08 Nov 2023 09:40:46 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/there-are-only-two-types-of-transactions/</guid>
      <description>There are only two types of transactions.&#xA;The ones you are present for. The ones you are not. This just dawned on me.</description>
    </item>
    <item>
      <title>Against Single Element React Components</title>
      <link>https://www.jameskerr.blog/posts/against-single-element-react-components/</link>
      <pubDate>Mon, 06 Nov 2023 15:51:23 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/against-single-element-react-components/</guid>
      <description>It&#39;s not uncommon to see this type of single element React component.&#xA;function Title({ children, ...rest }) { return &amp;lt;h1 {.</description>
    </item>
    <item>
      <title>How to Optimize Your Hugo Blogging Workflow on Mac</title>
      <link>https://www.jameskerr.blog/posts/how-to-optimize-your-hugo-blogging-workflow-on-mac/</link>
      <pubDate>Fri, 27 Oct 2023 09:22:36 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/how-to-optimize-your-hugo-blogging-workflow-on-mac/</guid>
      <description>I love this quote by John Cutler from his post on disincentives.&#xA;&amp;ldquo;Good things can happen when you make it easier to do good things.</description>
    </item>
    <item>
      <title>A Better Goal Than Sinless Perfection</title>
      <link>https://www.jameskerr.blog/posts/a-better-goal-than-sinless-perfection/</link>
      <pubDate>Sun, 22 Oct 2023 13:46:13 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/a-better-goal-than-sinless-perfection/</guid>
      <description>Any two people in a close relationship are bound to eventually hurt each other. To most of us, it is no surprise when this happens.</description>
    </item>
    <item>
      <title>I Have Enough</title>
      <link>https://www.jameskerr.blog/posts/i-have-enough/</link>
      <pubDate>Tue, 17 Oct 2023 09:28:23 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/i-have-enough/</guid>
      <description>I have enough food in my kitchen.&#xA;I have enough water to drink.&#xA;I have enough clothes to wear.&#xA;I have enough things in my house.</description>
    </item>
    <item>
      <title>Company Culture &amp; Church Community</title>
      <link>https://www.jameskerr.blog/posts/company-culture-church-community/</link>
      <pubDate>Thu, 12 Oct 2023 11:06:12 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/company-culture-church-community/</guid>
      <description>This is a great podcast episode about company culture. The gist is, it doesn&amp;rsquo;t matter what people say or write about what the culture is.</description>
    </item>
    <item>
      <title>Let It Flow</title>
      <link>https://www.jameskerr.blog/posts/let-it-flow/</link>
      <pubDate>Mon, 02 Oct 2023 12:02:50 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/let-it-flow/</guid>
      <description>I was just in the gym and as I lifted a weight I thought of the energy flowing out of me to lift it.</description>
    </item>
    <item>
      <title>How to Pipe a NodeJS Readable Stream into a Child Process</title>
      <link>https://www.jameskerr.blog/posts/pipe-nodejs-readable-stream-into-child-process/</link>
      <pubDate>Fri, 22 Sep 2023 10:00:27 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/pipe-nodejs-readable-stream-into-child-process/</guid>
      <description>I love pipes. Anytime I can pipe something somewhere, it seems that order has claimed a victory over chaos. In fact, there is pipe-related photo of me at the end of this article for your viewing pleasure.</description>
    </item>
    <item>
      <title>Waiting for a Comet</title>
      <link>https://www.jameskerr.blog/posts/waiting-for-a-comet/</link>
      <pubDate>Wed, 20 Sep 2023 09:53:06 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/waiting-for-a-comet/</guid>
      <description>Comets are constantly falling.&#xA;We don&amp;rsquo;t know when.&#xA;But if we&amp;rsquo;re open, our eyes are open,&#xA;The comment will appear.</description>
    </item>
    <item>
      <title>A Battle of Wit</title>
      <link>https://www.jameskerr.blog/posts/a-battle-of-wit/</link>
      <pubDate>Sat, 16 Sep 2023 17:44:44 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/a-battle-of-wit/</guid>
      <description>Swords drawn, Draw blood, Blood in the water&#xA;Recover, Respond, Respect&#xA;Cross the line, Cut too deep, Feel the heat</description>
    </item>
    <item>
      <title>Partially Controlled Components: A Declarative Design Pattern in React</title>
      <link>https://www.jameskerr.blog/posts/partially-controlled-react-components/</link>
      <pubDate>Tue, 01 Aug 2023 12:00:00 -0800</pubDate>
      <guid>https://www.jameskerr.blog/posts/partially-controlled-react-components/</guid>
      <description>A common distinction in React is Controlled vs Uncontrolled components. But the real world is not so black and white&amp;hellip;</description>
    </item>
    <item>
      <title>Others May Know More</title>
      <link>https://www.jameskerr.blog/posts/others-may-know-more/</link>
      <pubDate>Mon, 10 Jul 2023 04:13:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/others-may-know-more/</guid>
      <description>A child knows nothing about itself. Its body is a mystery, its ideas, its dreams, its feelings. The child relies on caregivers to teach her everything.</description>
    </item>
    <item>
      <title>It’s Good to Wonder About Mysteries</title>
      <link>https://www.jameskerr.blog/posts/its-good-to-wonder-about-mysteries/</link>
      <pubDate>Thu, 29 Jun 2023 10:15:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/its-good-to-wonder-about-mysteries/</guid>
      <description>I was talking with a group of friends trying to come up with possible answers to unanswerable questions like:&#xA;What happens when we die?</description>
    </item>
    <item>
      <title>React Hook for Avoiding Flash of Empty UI While Data Transitions</title>
      <link>https://www.jameskerr.blog/posts/use-data-transition/</link>
      <pubDate>Tue, 27 Jun 2023 11:55:19 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/use-data-transition/</guid>
      <description>I&amp;rsquo;m working on a React app that has frequent data transitions. Each time a user submits a query, the state is reset as we wait for a response from the server.</description>
    </item>
    <item>
      <title>Confronting a Man at the Playground</title>
      <link>https://www.jameskerr.blog/posts/playground-confrontation/</link>
      <pubDate>Wed, 21 Jun 2023 12:00:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/playground-confrontation/</guid>
      <description>While at a playground this weekend a man talked to my 3-year-old son in a way that upset me and I had to do something about it.</description>
    </item>
    <item>
      <title>Persisting the Human Experience</title>
      <link>https://www.jameskerr.blog/posts/compressing-experience/</link>
      <pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://www.jameskerr.blog/posts/compressing-experience/</guid>
      <description>Experiences compress into memories.&#xA;Memories compress into feelings.&#xA;Feelings compress into instincts.&#xA;Instincts compress into the unconscious.&#xA;The unconscious compresses into the collective human unconscious.</description>
    </item>
    <item>
      <title>Joshua Tree Trip</title>
      <link>https://www.jameskerr.blog/posts/joshua-tree-trip/</link>
      <pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate>
      <guid>https://www.jameskerr.blog/posts/joshua-tree-trip/</guid>
      <description>We took a trip down to Joshua Tree this weekend for a cousin&amp;rsquo;s wedding. For the first time, I could appreciate the gifts of a desert climate.</description>
    </item>
    <item>
      <title>Jet Fuel</title>
      <link>https://www.jameskerr.blog/posts/jet-fuel/</link>
      <pubDate>Fri, 05 May 2023 16:10:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/jet-fuel/</guid>
      <description>We build an engine for it.&#xA;It propels us to new heights.&#xA;It explodes.&#xA;It destroys everything around it.&#xA;It takes us to heavenly places.</description>
    </item>
    <item>
      <title>5 Tricks for Taking Great Photos</title>
      <link>https://www.jameskerr.blog/posts/tricks-for-taking-great-photos/</link>
      <pubDate>Thu, 04 May 2023 12:39:05 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/tricks-for-taking-great-photos/</guid>
      <description>I’ve owned a full frame camera for over 5 years. I’ve acquired 3 lenses and snapped many thousands of photos. And yet, last week I discovered these five tricks and was shocked by my ignorance of them.</description>
    </item>
    <item>
      <title>It’s a Gift for Me to Be Angry</title>
      <link>https://www.jameskerr.blog/posts/its-a-gift-for-me-to-be-angry/</link>
      <pubDate>Mon, 03 Apr 2023 14:43:39 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/its-a-gift-for-me-to-be-angry/</guid>
      <description>When I’m angry I stop needing everyone to like me. I don’t care if they approve of what I do. My face doesn’t hurt from smiling all the time.</description>
    </item>
    <item>
      <title>13 Decisions to Make Before Publishing JavaScript to NPM</title>
      <link>https://www.jameskerr.blog/posts/13-decisions-to-make-before-publishing-to-npm/</link>
      <pubDate>Thu, 30 Mar 2023 09:00:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/13-decisions-to-make-before-publishing-to-npm/</guid>
      <description>This post is half rant, half guide. Each of these 13 questions reveals tradeoffs that take time and mental energy to research.</description>
    </item>
    <item>
      <title>Netflix Does Not Have My Best Interest</title>
      <link>https://www.jameskerr.blog/posts/netflix-does-not-have-my-best-interest/</link>
      <pubDate>Thu, 23 Mar 2023 18:59:18 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/netflix-does-not-have-my-best-interest/</guid>
      <description>I watch Netflix because I’m too tired to do anything else. The kids are finally sleeping and I’m spent.&#xA;It’s meant to be a quick escape from life before I do what I really need to do which is sleep.</description>
    </item>
    <item>
      <title>Embedded Divinity</title>
      <link>https://www.jameskerr.blog/posts/embedded-divinity/</link>
      <pubDate>Wed, 22 Mar 2023 10:52:26 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/embedded-divinity/</guid>
      <description>What if we didn&amp;rsquo;t think of God as infinite.&#xA;What if God poured itself into this particular universe. What if He&amp;rsquo;s completely bound to this one cosmos.</description>
    </item>
    <item>
      <title>Adults Don&#39;t Share</title>
      <link>https://www.jameskerr.blog/posts/adults-dont-share/</link>
      <pubDate>Fri, 23 Dec 2022 09:00:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/adults-dont-share/</guid>
      <description>All the time at the playground I hear, &amp;ldquo;good sharing!&amp;rdquo; and &amp;ldquo;no no Jackson, you need to share&amp;rdquo;.&#xA;We parents think it is some critical skill that children need to learn.</description>
    </item>
    <item>
      <title>TypeScript Classes Are Giving Me Carpal Tunnel</title>
      <link>https://www.jameskerr.blog/posts/typescript-classes-verbose/</link>
      <pubDate>Wed, 21 Dec 2022 10:37:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/typescript-classes-verbose/</guid>
      <description>Whenever a class needs a few arguments in TypeScript, I cringe because I know I&amp;rsquo;m going to need to perform a ceremony to make it happy.</description>
    </item>
    <item>
      <title>Sharing Steps in Github Action Workflows</title>
      <link>https://www.jameskerr.blog/posts/sharing-steps-in-github-action-workflows/</link>
      <pubDate>Mon, 13 Jun 2022 13:00:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/sharing-steps-in-github-action-workflows/</guid>
      <description>I&amp;rsquo;ve got an electron app that needs to be built on all three platforms. I&amp;rsquo;ve got three workflow files all with slightly differing steps.</description>
    </item>
    <item>
      <title>How to useRef and forwardRef in React</title>
      <link>https://www.jameskerr.blog/posts/react-useref-and-forward-ref/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 -0700</pubDate>
      <guid>https://www.jameskerr.blog/posts/react-useref-and-forward-ref/</guid>
      <description>What do I do when my component uses a ref internally but also needs to forward a ref from its parent?</description>
    </item>
  </channel>
</rss>
