<?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 Chad Crawford</title>
		<link>https://cacrawford.org/posts/</link>
		<description>Recent content in Posts on Chad Crawford</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Sat, 15 Aug 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://cacrawford.org/posts/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>You can save $0.01/gal at the pump with this one trick</title>
				<link>https://cacrawford.org/posts/2026-08-15-random-vibe-experiments/</link>
				<pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://cacrawford.org/posts/2026-08-15-random-vibe-experiments/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve been having a lot of fun vibe-coding with &lt;a href=&#34;https://marimo.io/&#34;&gt;marimo&#xA;notebooks&lt;/a&gt; recently. It also turns out that AI is&#xA;extremely helpful in collecting data when I&amp;rsquo;ve got some random&#xA;questions &amp;ndash; stuff that is publicly available but usually too much of&#xA;a pain in the ass to spend an evening researching.&lt;/p&gt;&#xA;&lt;p&gt;Surprisingly, AI is quite effective at identifying public data sources&#xA;and visualizing trends. I did find it still struggles with more&#xA;complex topics &amp;ndash; anything finance especially is a no-go &amp;ndash; but it is&#xA;particularly good at generating plots and doing some basic&#xA;comparisons.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ballmer&#39;s Guessing Game</title>
				<link>https://cacrawford.org/posts/the-steve-ballmer-problem/</link>
				<pubDate>Fri, 01 Nov 2024 00:00:00 +0000</pubDate>
				<guid>https://cacrawford.org/posts/the-steve-ballmer-problem/</guid>
				<description>&lt;!-- latex math --&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css&#34; integrity=&#34;sha384-n8MVd4RsNIU0tAv4ct0nTaAbDJwPJzDEaqSD1odI+WdtXRGWt2kTvGFasHpSy3SV&#34; crossorigin=&#34;anonymous&#34;&gt;&#xA;&lt;script defer src=&#34;https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js&#34; integrity=&#34;sha384-XjKyOOlGwcjNTAIQHIpgOno0Hl1YQqzUOEleOLALmuqehneUG+vnGctmUb0ZY0l8&#34; crossorigin=&#34;anonymous&#34;&gt;&lt;/script&gt;&#xA;&lt;script defer src=&#34;https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js&#34; integrity=&#34;sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05&#34; crossorigin=&#34;anonymous&#34;&gt;&lt;/script&gt;&#xA;&lt;script&gt;&#xA;    document.addEventListener(&#34;DOMContentLoaded&#34;, function() {&#xA;        document.body.innerHTML = document.body.innerHTML.replace(/\\\$/g, &#39;&lt;span&gt;$&lt;/span&gt;&#39;);&#xA;        renderMathInElement(document.body, {&#xA;          // customised options&#xA;          // • auto-render specific keys, e.g.:&#xA;          delimiters: [&#xA;              {left: &#39;$$&#39;, right: &#39;$$&#39;, display: true},&#xA;              {left: &#39;$&#39;, right: &#39;$&#39;, display: false},&#xA;              {left: &#39;\\(&#39;, right: &#39;\\)&#39;, display: true},&#xA;              {left: &#39;\\[&#39;, right: &#39;\\]&#39;, display: true}&#xA;          ],&#xA;          // • rendering keys, e.g.:&#xA;          throwOnError : false&#xA;        });&#xA;    });&#xA;&lt;/script&gt;&#xA;&lt;p&gt;John Graham-Cumming &lt;a href=&#34;https://blog.jgc.org/2024/09/steve-ballmers-binary-search-interview.html&#34;&gt;did some interesting analysis&#xA;recently&lt;/a&gt;&#xA;on a problem that Steve Ballmer had used for candidates interviewing&#xA;at Microsoft. The gist of the problem is as follows:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Nix module trick: Re-evaluating yourself</title>
				<link>https://cacrawford.org/posts/2024-03-30-self-implementing-module-systems/</link>
				<pubDate>Sat, 30 Mar 2024 00:00:00 +0000</pubDate>
				<guid>https://cacrawford.org/posts/2024-03-30-self-implementing-module-systems/</guid>
				<description>&lt;p&gt;This is a cool trick for those playing around with Nix&amp;rsquo;s module&#xA;system. While developing&#xA;&lt;a href=&#34;https://github.com/chadac/nix-config-modules/&#34;&gt;nix-config-modules&lt;/a&gt;, I&#xA;ran into a semi-unique issue: In the module system I defined a set of&#xA;&lt;em&gt;hosts&lt;/em&gt; and a separate, general set of &lt;em&gt;apps&lt;/em&gt;, and hosts could define&#xA;which &lt;em&gt;apps&lt;/em&gt; they could import.&lt;/p&gt;&#xA;&lt;p&gt;To generate this subset of &lt;code&gt;app&lt;/code&gt; configurations, I wanted to be able&#xA;to re-evaluate all of my &lt;code&gt;app&lt;/code&gt; modules with a host argument. In other&#xA;words, I wanted to be able to write modules like:&lt;/p&gt;</description>
			</item>
			<item>
				<title>A deeper dive on the 4% rule</title>
				<link>https://cacrawford.org/posts/2024-01-15-the-4p-rule/</link>
				<pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate>
				<guid>https://cacrawford.org/posts/2024-01-15-the-4p-rule/</guid>
				<description>&lt;h2 id=&#34;tldr&#34;&gt;tl;dr&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a common method for calculating how much you need to retire&#xA;called the 4% rule; but blindly trusting some rule can make it hard to&#xA;really understand what assumptions were made in generating that&#xA;rule.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve recently written up an analytical mathematical model that&#xA;accounts for both interest rates and inflation in the context of&#xA;calculating retirement annuities. I&amp;rsquo;m going to talk a bit about how&#xA;some of these basic rules actually derive their numbers, how it&#xA;applies to this extension, and what we can learn from using these&#xA;simple analytical tools.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Redefining Ownership</title>
				<link>https://cacrawford.org/posts/2022-02-24-redefining-ownership/</link>
				<pubDate>Fri, 24 Feb 2023 00:00:00 +0000</pubDate>
				<guid>https://cacrawford.org/posts/2022-02-24-redefining-ownership/</guid>
				<description>&lt;p&gt;Software developers are trained to solve problems. We want to write&#xA;code that makes life as simple and easy as possible, so that our&#xA;customers can do anything with a simple click of a button. However,&#xA;when we try to solve too many problems at once, the resulting product&#xA;solves none of them well. In this article, I&amp;rsquo;ll discuss how our&#xA;concept of &lt;em&gt;Ownership&lt;/em&gt; underestimates the customer and undermines our&#xA;products, and what we can do to be better owners.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
