<?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>Sal&#39;s Blog</title>
		<link>https://sals.place/</link>
		<description>Sal&#39;s recent blog posts</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
			<managingEditor>sal@sals.place (Sal)</managingEditor>
		
		
			<webMaster>sal@sals.place (Sal)</webMaster>
		
		
		
			<lastBuildDate>Wed, 12 Aug 2026 23:55:13 -0400</lastBuildDate>
		
			<atom:link href="https://sals.place/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Fish shell trick: abbr --set-cursor</title>
				<link>https://sals.place/blog/fish-shell-set-cursor/</link>
				<pubDate>Wed, 12 Aug 2026 23:55:13 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/fish-shell-set-cursor/</guid>
				<description>&lt;p&gt;Here&amp;rsquo;s a cool fish trick:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;abbr --add jjc --set-cursor -- &lt;span style=&#34;color:#b8bb26&#34;&gt;&amp;#39;jj commit -m &amp;#34;%&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This adds an &lt;a href=&#34;https://fishshell.com/docs/current/cmds/abbr.html&#34;&gt;abbreviation&lt;/a&gt;, which is a like an auto-expanding bash alias, that puts your cursor at the &lt;code&gt;%&lt;/code&gt; character.
So when I type &lt;code&gt;jjc&lt;/code&gt; in my terminal and hit space, that expands to:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;jj commit -m &lt;span style=&#34;color:#b8bb26&#34;&gt;&amp;#34;&amp;lt;cursor&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Handy!&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>Here&rsquo;s a cool fish trick:</p>
<div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>abbr --add jjc --set-cursor -- <span style="color:#b8bb26">&#39;jj commit -m &#34;%&#34;&#39;</span>
</span></span></code></pre></div><p>This adds an <a href="https://fishshell.com/docs/current/cmds/abbr.html">abbreviation</a>, which is a like an auto-expanding bash alias, that puts your cursor at the <code>%</code> character.
So when I type <code>jjc</code> in my terminal and hit space, that expands to:</p>
<div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>jj commit -m <span style="color:#b8bb26">&#34;&lt;cursor&gt;&#34;</span>
</span></span></code></pre></div><p>Handy!</p>
]]></content:encoded>
			</item>
			<item>
				<title>Working from beach and related thoughts</title>
				<link>https://sals.place/blog/natural-light-is-good/</link>
				<pubDate>Tue, 11 Aug 2026 16:27:09 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/natural-light-is-good/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m working from the beautiful Oregon coast for a few days this week.
I set up a makeshift desk in front of three large-ish windows with a view of
&lt;a href=&#34;https://en.wikipedia.org/wiki/Neahkahnie_Mountain&#34;&gt;Neahkahnie Mountain&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My image in video calls looks &lt;em&gt;so&lt;/em&gt; much better here compared to my home office, which is in our underground basement and has only one tiny little window to let light in.
It&amp;rsquo;s amazing what natural light can do.&lt;/p&gt;
&lt;p&gt;On that note, we&amp;rsquo;re starting a project soon to renovate our garage to do a number of things, including giving me an above-ground office with some nice windows.
I&amp;rsquo;m looking forward to that.
At least the part where the project is done.
It&amp;rsquo;s going to be a slog to get there from here.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>I&rsquo;m working from the beautiful Oregon coast for a few days this week.
I set up a makeshift desk in front of three large-ish windows with a view of
<a href="https://en.wikipedia.org/wiki/Neahkahnie_Mountain">Neahkahnie Mountain</a>.</p>
<p>My image in video calls looks <em>so</em> much better here compared to my home office, which is in our underground basement and has only one tiny little window to let light in.
It&rsquo;s amazing what natural light can do.</p>
<p>On that note, we&rsquo;re starting a project soon to renovate our garage to do a number of things, including giving me an above-ground office with some nice windows.
I&rsquo;m looking forward to that.
At least the part where the project is done.
It&rsquo;s going to be a slog to get there from here.</p>
<p>On the flip side, working here makes me appreciate my <a href="/tags/walking-pad/">walking pad</a> back home.
My body, while bathed in wondrous sunlight, is feeling stiff and stagnant.</p>
<p>Here&rsquo;s a pic of that mountain.</p>
<p><img src="/images/oregon-coast-2-2026-08-11.avif" alt="Neahkahnie Mountain"></p>
<p>And one from the night before when the sun was going down.</p>
<p><img src="/images/oregon-coast-2026-08-11.avif" alt="Sun going down at the Oregon coast"></p>
<p>No filters or processing because, as you can probably tell, I don&rsquo;t know what I&rsquo;m doing.</p>
]]></content:encoded>
			</item>
			<item>
				<title>Testing hearing aids this week</title>
				<link>https://sals.place/blog/hearing-aids-demo/</link>
				<pubDate>Sun, 09 Aug 2026 11:11:53 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/hearing-aids-demo/</guid>
				<description>&lt;p&gt;My wife has insisted for some time now that my hearing sucks.
Meanwhile, I think she&amp;rsquo;s a bit of a low talker.&lt;/p&gt;
&lt;img src=&#34;https://sals.place/images/seinfeld-low-talker.avif&#34; alt=&#34;Screenshot from Seinfeld lower-talker episode&#34; width=&#34;400&#34;/&gt;
&lt;p&gt;I had my ears checked this week by an audiologist, and my hearing is &amp;ldquo;borderline&amp;rdquo; normal except for a particular band of frequencies in which I have achieved &amp;ldquo;mild&amp;rdquo; hearing loss.
And it just so happens that the typical adult female voice falls within those same range of frequencies.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>My wife has insisted for some time now that my hearing sucks.
Meanwhile, I think she&rsquo;s a bit of a low talker.</p>
<img src="/images/seinfeld-low-talker.avif" alt="Screenshot from Seinfeld lower-talker episode" width="400"/>
<p>I had my ears checked this week by an audiologist, and my hearing is &ldquo;borderline&rdquo; normal except for a particular band of frequencies in which I have achieved &ldquo;mild&rdquo; hearing loss.
And it just so happens that the typical adult female voice falls within those same range of frequencies.</p>
<p>My wife has some new leverage in our little debate.</p>
<p>The audiologist said it&rsquo;s my choice whether to try hearing aids now, since my hearing loss is only mild, but that I&rsquo;m probably going to need them in 5–7 years.
Ever the curious cat, I decided to try a demo pair.</p>
<p>The effect was subtle at first.
I even asked her, &ldquo;Are they on?&rdquo;
I couldn&rsquo;t tell.
But I&rsquo;m now three days in, and I&rsquo;m appreciating them more and more.</p>
<p>We did family movie night this weekend, and it was literally the only time in our family&rsquo;s history that my wife wanted to turn the volume up while I was completely fine with it.
Usually I&rsquo;m aspiring toward theater-esque volumes.
I&rsquo;ve been telling myself it&rsquo;s because I want the IMAX experience at home, but perhaps I&rsquo;m also trying to fill some gaps in the spectrum.</p>
<p>We went to a food cart for lunch yesterday and sat outside in a somewhat crowded area, with many people chatting nearby.
My wife whispered at me, without leaning in, to turn around and look at a guy&rsquo;s earring.
(It was shaped like a huge tooth.)
Instead of my typical response, &ldquo;Huh?&rdquo;
I just turned around and looked.
Her eyes lit up.
&ldquo;Ooh, this is <em>fun</em>!&rdquo;
She was referring to the fact that I can actually hear her whisper now.
She whispers all the time as a means of covert communication around our kids.
But it doesn&rsquo;t work so well when I ask her to repeat her secret messages at volume.</p>
<p>I also suspect I&rsquo;m feeling more alert, especially later in the day.
Apparently this is common, as the aids reduce listening fatigue.
It&rsquo;s tiring when your brain has to put in extra work to make sense of sounds all day long.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>So, the hearing aids may be here to stay.
I have slight qualms about that, since I&rsquo;m only 46.
But they&rsquo;re not too glaring a change in my visage.
My wife, who sees everything, didn&rsquo;t even notice that I had them in on that first day until I mentioned it several hours later.
Maybe we can incorporate them into foreplay.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://www.ncoa.org/article/benefits-of-hearing-aids/">Hearing Aid Benefits: Why Early Treatment Matters</a>, <em>National Council on Aging</em>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
			</item>
			<item>
				<title>Moved the blog to pico.sh, and I&#39;m done blogging about this blog for August</title>
				<link>https://sals.place/blog/moved-to-pico/</link>
				<pubDate>Sun, 09 Aug 2026 01:50:33 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/moved-to-pico/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://sals.place/blog/pico-sh-cool/&#34;&gt;As threatened&lt;/a&gt;, I moved the blog to &lt;a href=&#34;https://pico.sh/pgs&#34;&gt;pico.sh pgs&lt;/a&gt; because pico.sh is so dang cool and much more in the spirit of indiewebbing than Cloudflare.
That&amp;rsquo;s all I&amp;rsquo;ll say about it, and I say it only because I once again ask: if I broke anything, please email me!&lt;/p&gt;
&lt;p&gt;With that, I promise I&amp;rsquo;ll stop blogging about this blog for the rest of the month because I&amp;rsquo;ve been doing way too much of that lately.
With one caveat: I&amp;rsquo;ll try to keep up with the &lt;a href=&#34;https://sals.place/blog/blaugust-2026-week-1/&#34;&gt;Blaugust weekly themes&lt;/a&gt;, so I might bend that rule I just made if called for by the topic at hand.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p><a href="/blog/pico-sh-cool/">As threatened</a>, I moved the blog to <a href="https://pico.sh/pgs">pico.sh pgs</a> because pico.sh is so dang cool and much more in the spirit of indiewebbing than Cloudflare.
That&rsquo;s all I&rsquo;ll say about it, and I say it only because I once again ask: if I broke anything, please email me!</p>
<p>With that, I promise I&rsquo;ll stop blogging about this blog for the rest of the month because I&rsquo;ve been doing way too much of that lately.
With one caveat: I&rsquo;ll try to keep up with the <a href="/blog/blaugust-2026-week-1/">Blaugust weekly themes</a>, so I might bend that rule I just made if called for by the topic at hand.</p>
]]></content:encoded>
			</item>
			<item>
				<title>Blog posts about elaborate blogging setups</title>
				<link>https://sals.place/blog/elaborate-blogging-setups/</link>
				<pubDate>Sat, 08 Aug 2026 11:42:47 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/elaborate-blogging-setups/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://baty.net/notes/2026/08/blogging-and-blog-setups/&#34;&gt;Baty just posted this&lt;/a&gt;
and I just have to follow suit.
It&amp;rsquo;s hilarious and painful how relevant it is to &lt;a href=&#34;https://sals.place/blog/fixing-my-published-drafts/&#34;&gt;my blog lately&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://sals.place/images/blog-setups.jpg&#34; alt=&#34;comic about blog posts about elaborate blogging setups&#34;&gt;&lt;/p&gt;
&lt;p&gt;On the x-axis, and just spiritually, I&amp;rsquo;m somewhere around the &amp;ldquo;Moved from Jekyll to Hugo people.&amp;rdquo;
But I&amp;rsquo;m pretty high on the y-axis as well, which probably means I need to &lt;a href=&#34;https://sals.place/blog/moved-to-pico/&#34;&gt;chill out&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comic credit to &lt;a href=&#34;https://rakhim.org/honestly-undefined/19/&#34;&gt;Rakhim&lt;/a&gt;.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p><a href="https://baty.net/notes/2026/08/blogging-and-blog-setups/">Baty just posted this</a>
and I just have to follow suit.
It&rsquo;s hilarious and painful how relevant it is to <a href="/blog/fixing-my-published-drafts/">my blog lately</a>:</p>
<p><img src="/images/blog-setups.jpg" alt="comic about blog posts about elaborate blogging setups"></p>
<p>On the x-axis, and just spiritually, I&rsquo;m somewhere around the &ldquo;Moved from Jekyll to Hugo people.&rdquo;
But I&rsquo;m pretty high on the y-axis as well, which probably means I need to <a href="/blog/moved-to-pico/">chill out</a>.</p>
<p>Comic credit to <a href="https://rakhim.org/honestly-undefined/19/">Rakhim</a>.</p>
]]></content:encoded>
			</item>
			<item>
				<title>pico.sh!</title>
				<link>https://sals.place/blog/pico-sh-cool/</link>
				<pubDate>Sat, 08 Aug 2026 10:39:36 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/pico-sh-cool/</guid>
				<description>&lt;p&gt;Wow, &lt;a href=&#34;https://pico.sh/&#34;&gt;pico.sh&lt;/a&gt; looks very enticing.&lt;/p&gt;
&lt;p&gt;I found it last night after reading Brennan&amp;rsquo;s post,
&lt;a href=&#34;https://brennan.day/free-speech-and-the-indieweb/&#34;&gt;Free Speech and the IndieWeb&lt;/a&gt;,
which discusses the reasons he doesn&amp;rsquo;t use Cloudflare.
See also &lt;a href=&#34;https://brennan.day/choosing-friction-and-clear-skies-i-m-no-longer-using-cloudflare/&#34;&gt;his longer post on this topic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;have&lt;/em&gt; been feeling a little dirty about using Cloudflare for hosting this little indie blog.
Plus, Cloudflare frustrated me this week when &lt;a href=&#34;https://sals.place/blog/fixing-my-published-drafts/&#34;&gt;it wouldn&amp;rsquo;t update my broken site&lt;/a&gt; (my fault for breaking it; Cloudflare&amp;rsquo;s for not letting me fix it).
So Brennan&amp;rsquo;s post provoked me to look for alternatives.
I searched for options that allow deployment of static sites via rsync, and I soon beheld pico.sh.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>Wow, <a href="https://pico.sh/">pico.sh</a> looks very enticing.</p>
<p>I found it last night after reading Brennan&rsquo;s post,
<a href="https://brennan.day/free-speech-and-the-indieweb/">Free Speech and the IndieWeb</a>,
which discusses the reasons he doesn&rsquo;t use Cloudflare.
See also <a href="https://brennan.day/choosing-friction-and-clear-skies-i-m-no-longer-using-cloudflare/">his longer post on this topic</a>.</p>
<p>I <em>have</em> been feeling a little dirty about using Cloudflare for hosting this little indie blog.
Plus, Cloudflare frustrated me this week when <a href="/blog/fixing-my-published-drafts/">it wouldn&rsquo;t update my broken site</a> (my fault for breaking it; Cloudflare&rsquo;s for not letting me fix it).
So Brennan&rsquo;s post provoked me to look for alternatives.
I searched for options that allow deployment of static sites via rsync, and I soon beheld pico.sh.</p>
<p>I&rsquo;d signed up and had my site deployed to
<a href="https://pico.sh/pgs">pico pages</a>
in a matter of minutes.
Truly, less than ten minutes, including the time to sign up and pay for a year of pico plus, which is only two bucks a month.</p>
<p>This is my deployment command:</p>
<div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>rsync --delete -rv ./public/ pgs.sh:/blog
</span></span></code></pre></div><p>Et voila: <a href="https://sal-blog.pgs.sh/">https://sal-blog.pgs.sh/</a></p>
<h2 id="what-im-liking-so-far">What I&rsquo;m liking so far</h2>
<p>Other than reading docs, it seems I interact with pico.sh entirely over ssh and rsync.
Auth is handled via ssh key.
If I want to chat with the community, I use IRC with pico&rsquo;s provided bouncer.
Account notifications are provided via a unique RSS feed.
This is all so geeky and awesome.</p>
<p>Deploys use <em>actual</em> rsync, so I can see which specific files are being updated, how much data is being transferred, etc.
I was wishing for that kind of transparency when Cloudflare&rsquo;s <code>wrangler</code> tool was refusing to update my site this week.
This also gives me control over the deployment: I can upload only specific files or glob patterns, use <code>--dry-run</code> to preview the operation, etc.</p>
<p>Speaking to some of Brennan&rsquo;s points, pico.sh has a <a href="https://pico.sh/ops#code-of-content-publication">Code of Content</a>, which currently reads:</p>
<blockquote>
<ul>
<li>Don&rsquo;t upload content if someone else might own the copyright to it</li>
<li>Don&rsquo;t upload gore</li>
<li>Don&rsquo;t upload &ldquo;hate speech&rdquo; (i.e. demeaning race, gender, age, religious or sexual orientation, etc.)</li>
<li>Don&rsquo;t upload material that is threatening, harassing, defamatory, or that encourages violence or crime</li>
<li>Don&rsquo;t upload illegal content, nudity, or adult sexual content</li>
<li>Don&rsquo;t upload content to spam users</li>
<li>Don&rsquo;t upload content to employ social engineering tactics in an effort to trick users</li>
<li>Don&rsquo;t impersonate someone else</li>
</ul>
</blockquote>
<p>In short, don&rsquo;t be an asshole.
I like supporting a service that is willing to take a stand on that.</p>
<p>The founders are <a href="https://news.ycombinator.com/item?id=43560899">active on HN</a>, and I like their vibe.</p>
<p><a href="https://blog.pico.sh/">Their blog</a>
is filled with transparency about the evolution of the product,
and they use <a href="https://blog.pico.sh/?tag=rfc">RFCs with their community</a> to help guide the direction.</p>
<p>There&rsquo;s a lot to like so far, and I&rsquo;m only an hour into this!</p>
<h2 id="whats-next">What&rsquo;s next</h2>
<p>I&rsquo;ll keep poking around to learn more, run some tests, etc.</p>
<p>I need to get redirects working. It looks like <a href="https://pico.sh/pgs#-redirects">they use the same format</a> as Cloudflare. Wonderful.</p>
<p>If I&rsquo;m still feeling this good about it in a day or so, I might just point my domain at it!</p>
]]></content:encoded>
			</item>
			<item>
				<title>PT Mono</title>
				<link>https://sals.place/blog/pt-mono/</link>
				<pubDate>Fri, 07 Aug 2026 15:22:22 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/pt-mono/</guid>
				<description>&lt;p&gt;I was succumbing to my Hacker News habit recently and saw this post from Rands:
&lt;a href=&#34;https://randsinrepose.com/archives/blade-runner-title-cards/&#34;&gt;The Title Cards in Blade Runner Are Fucking Amazing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://fonts.bunny.net/family/pt-mono&#34;&gt;PT Mono&lt;/a&gt; was in the list of fixed-width fonts that made his cut.
For some reason it stuck in my brain.
Maybe because I hadn&amp;rsquo;t heard of it.&lt;/p&gt;
&lt;p&gt;Later, I found myself perusing macOS&amp;rsquo;s &lt;em&gt;Font Book&lt;/em&gt; app.
There, in the relatively small &lt;em&gt;Fixed Width&lt;/em&gt; collection of fonts, was none other than PT Mono.
Turns out it&amp;rsquo;s a default font on macOS.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>I was succumbing to my Hacker News habit recently and saw this post from Rands:
<a href="https://randsinrepose.com/archives/blade-runner-title-cards/">The Title Cards in Blade Runner Are Fucking Amazing</a>.</p>
<p><a href="https://fonts.bunny.net/family/pt-mono">PT Mono</a> was in the list of fixed-width fonts that made his cut.
For some reason it stuck in my brain.
Maybe because I hadn&rsquo;t heard of it.</p>
<p>Later, I found myself perusing macOS&rsquo;s <em>Font Book</em> app.
There, in the relatively small <em>Fixed Width</em> collection of fonts, was none other than PT Mono.
Turns out it&rsquo;s a default font on macOS.</p>
<p>Coincidence, or obvious message from Zeus?</p>
<p>I set it as my VSCode font and have been quite liking it.
It&rsquo;s fun but not trying too hard.</p>
<p>And just writing this has sent me back down the font rabbit hole.
This last paragraph is written using Ubuntu Mono.
Why do I do this.</p>
]]></content:encoded>
			</item>
			<item>
				<title>I published my drafts: lessons learned and steps taken</title>
				<link>https://sals.place/blog/fixing-my-published-drafts/</link>
				<pubDate>Fri, 07 Aug 2026 01:57:34 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/fixing-my-published-drafts/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://sals.place/blog/published-my-drafts/&#34;&gt;As I mentioned&lt;/a&gt;, I accidentally published all my draft posts.
You know, the ones I cheekily listed at the bottom of &lt;a href=&#34;https://sals.place/blog/find-your-drafts-with-ripgrep/&#34;&gt;my ripgrep post&lt;/a&gt;.
All public and in my RSS feed.
Dangit.&lt;/p&gt;
&lt;h2 id=&#34;what-happened&#34;&gt;What happened&lt;/h2&gt;
&lt;p&gt;I can&amp;rsquo;t know for sure, but here&amp;rsquo;s what I suspect happened.&lt;/p&gt;
&lt;h3 id=&#34;sloppiness-on-my-part&#34;&gt;Sloppiness on my part&lt;/h3&gt;
&lt;p&gt;When Hugo builds my production site, it puts the files in the &lt;code&gt;public/&lt;/code&gt; subdirectory.
I then upload that subdir to Cloudflare Pages with
&lt;a href=&#34;https://www.npmjs.com/package/wrangler&#34;&gt;wrangler&lt;/a&gt;.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p><a href="/blog/published-my-drafts/">As I mentioned</a>, I accidentally published all my draft posts.
You know, the ones I cheekily listed at the bottom of <a href="/blog/find-your-drafts-with-ripgrep/">my ripgrep post</a>.
All public and in my RSS feed.
Dangit.</p>
<h2 id="what-happened">What happened</h2>
<p>I can&rsquo;t know for sure, but here&rsquo;s what I suspect happened.</p>
<h3 id="sloppiness-on-my-part">Sloppiness on my part</h3>
<p>When Hugo builds my production site, it puts the files in the <code>public/</code> subdirectory.
I then upload that subdir to Cloudflare Pages with
<a href="https://www.npmjs.com/package/wrangler">wrangler</a>.</p>
<p>When Hugo runs its local dev server, which renders all my draft posts, it puts the files in the <code>public/</code> subdirectory.</p>
<p>See where I&rsquo;m going with this?</p>
<p>I have to assume that, when I ran my production deploy, the <code>public/</code> folder was dirty with the dev server&rsquo;s version of the site.
Talk about a rookie mistake.</p>
<p>I&rsquo;d been keeping the server running on purpose because I ran a pre-deploy check that scraped the site for broken links.
I think I&rsquo;d been passively assuming that the dev server stuck its build somewhere else, and I was too buried in all the Hugo learnings to think too hard on it.
Plus, everything had been working fine for the first couple days, so it slipped off my list of concerns.</p>
<h3 id="rollbacks-are-nice">Rollbacks are nice</h3>
<p>I was struggling to get my fix deployed (see <em>The plot thickens</em> section below), but fortunately the Cloudflare dashboard came to my rescue.
It has a history of my deployments, and with a click I can instantly roll the site back to any of the recent ones.
I found the latest one that didn&rsquo;t have my drafts, and rolled back to it.</p>
<h3 id="adding-guardrails">Adding guardrails</h3>
<p>I then spent a lot of time adding scripts and automation to prevent this sort of thing from happening again.</p>
<ul>
<li>Server:
<ul>
<li>Build the local dev server into a different folder using the <code>--destination</code> flag.</li>
</ul>
</li>
<li>Build:
<ul>
<li>Added <code>--cleanDestinationDir</code> to the <code>hugo build</code> call (probably redundant with the wipe above, but belt and suspenders).</li>
</ul>
</li>
<li>Pre-deploy:
<ul>
<li>Error if <code>(DRAFT)</code> appears in my homepage or RSS feed files (I append that to the draft titles in my Hugo templates);</li>
<li>Error if  <code>localhost</code> links appear in my homepage or RSS feed files (to guard against <a href="/blog/rss-oopsie-powrss-props/">this problem</a>);</li>
<li>Error if the Hugo server is running locally.</li>
</ul>
</li>
<li>Pre-prod:
<ul>
<li>Wired up a proper staging deploy to a Cloudflare Pages preview site, including its own working RSS feed, of which I am now a proud subscriber.</li>
</ul>
</li>
<li>Post-deploy:
<ul>
<li>Scrape the deployed site to double check that none of the problems above appear there either.</li>
</ul>
</li>
</ul>
<p>This is all part of my <code>Makefile</code> now, so <code>make deploy_staging</code> and <code>make deploy_prod</code> automatically do the cleaning, building, double checking, and deploying.</p>
<h3 id="the-plot-thickens-cloudflare-pages-not-updating">The plot thickens: Cloudflare Pages not updating</h3>
<p>At this point I&rsquo;m thoroughly gunshy about deploying to prod given my recent misadventures, so I used my staging deployment to test all these checks out.
And I found a stubborn problem:
broken files in staging weren&rsquo;t getting updated when I&rsquo;d redeploy.</p>
<p>For example, the <code>&lt;link rel=&quot;alternate&quot;...</code> element in my topmost <code>index.html</code> file — the element that tells RSS readers where to find my RSS feed — had <code>localhost</code> as its URL domain.
And no matter how many times I re-deployed the corrected site, it wouldn&rsquo;t change.
I tried <code>wrangler</code>&rsquo;s <code>--skip-caching</code> flag.
I tried purging the cache in the Cloudflare Dash.
I checked my local <code>public/index.html</code> probably over thirty times to confirm it was correct.
I tried downgrading <code>wrangler</code> to an older version, since it&rsquo;s had several updates recently.
I had a dozen conversations with Gemini about it.</p>
<p>No matter what, each time I&rsquo;d deploy, my staging site&rsquo;s homepage content wouldn&rsquo;t budge.</p>
<p>Eventually I tried deploying the site to a net-new Cloudflare Pages preview site.
The new site did <em>not</em> have the problem.
Okay, good, I&rsquo;m not crazy.</p>
<p>Then I shoved some changes into my homepage and re-deployed to staging.
Aha!
That fixed the problem in staging.</p>
<p>So, I suspect I&rsquo;ve hit some bug in how Cloudflare manages updates.
I assume the deploy logic thinks it already has the latest version of the file despite the fact that the local one has different content.
But if I make additional changes to the local file, it seems I can unstick it.</p>
<p>To address this, I added one more script to my deployment pipeline.
This script adds a comment with a timestamp to the bottom of my <code>public/index.html</code> and <code>public/index.xml</code> files after they are built by hugo.
The comments look like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#928374;font-style:italic">&lt;!-- build 1786050421 --&gt;</span>
</span></span></code></pre></div><p>They should be invisible to the reader, but in theory, they will nudge the Cloudflare logic to update those two pages on every deploy.</p>
<p>This seems like a reasonable time to cite the old classic:</p>
<blockquote>
<p>There are only two hard things in Computer Science: cache invalidation and naming things. — Phil Karlton (via <a href="https://martinfowler.com/bliki/TwoHardThings.html">Martin Fowler</a>)</p>
</blockquote>
<h2 id="back-to-github-triggered-deploys">Back to GitHub-triggered deploys?</h2>
<p>In the midst of all this, I said screw it, this is too wonky and time consuming, I&rsquo;ll just go back to having Cloudflare build the site from pushes to GitHub.</p>
<p>I set all that up, but the build was failing because Cloudflare Workers uses an older <code>hugo</code> binary.
I set the <code>HUGO_VERSION</code> env var as guided by the Cloudflare docs, but it still used an old version.
Then I remembered I&rsquo;d also have to get <code>dart-sass</code> installed in the worker for it to be able to compile my CSS.
<em>Gah.</em></p>
<p>So I gave up on this and went back to solving the problem above.</p>
<h2 id="maybe-things-work-now">Maybe things work now</h2>
<p>My <code>Makefile</code> is now labyrinthian.
It might work.
Who knows.</p>
<p>And to you bloggers who use Bear, Micro.blog, Write.as, Pure Blog, etc. &hellip; you may now nod and smile in smug satisfaction with your choices.</p>
<p>(Although, this sort of firefighting <em>is</em> kinda fun.
Once I the fixing-it part, anyway.)</p>
<aside class="blog-aside">
    If you have tips or thoughts about any of the problems above, please email me with them!
</aside>]]></content:encoded>
			</item>
			<item>
				<title>Another fat woops: I published my drafts</title>
				<link>https://sals.place/blog/published-my-drafts/</link>
				<pubDate>Thu, 06 Aug 2026 11:31:04 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/published-my-drafts/</guid>
				<description>&lt;p&gt;Adding to the fun of this Hugo migration, I accidentally published all my draft posts this morning.&lt;/p&gt;



&lt;img src=&#34;https://sals.place/images/spongebob-straight-face.jpg&#34; width=&#34;200&#34; alt=&#34;Spongebag straight face&#34;&gt;

&lt;p&gt;If you happened to see the actual words of those posts (they might be cached in your feed reader), I realize you now can&amp;rsquo;t unsee them.
My sincerest condolences.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll do a followup post once I figure out what happened and how exactly I fixed it.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>Adding to the fun of this Hugo migration, I accidentally published all my draft posts this morning.</p>



<img src="/images/spongebob-straight-face.jpg" width="200" alt="Spongebag straight face">

<p>If you happened to see the actual words of those posts (they might be cached in your feed reader), I realize you now can&rsquo;t unsee them.
My sincerest condolences.</p>
<p>I&rsquo;ll do a followup post once I figure out what happened and how exactly I fixed it.</p>
]]></content:encoded>
			</item>
			<item>
				<title>Blog-post resiliency</title>
				<link>https://sals.place/blog/blog-post-resiliency/</link>
				<pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/blog-post-resiliency/</guid>
				<description>&lt;p&gt;Here&amp;rsquo;s a good post and tips from Mike Harley:
&lt;a href=&#34;https://michaelharley.net/posts/2026/08/05/how-i-make-my-blog-posts-more-resilient/&#34;&gt;How I make my blog posts more resilient&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mike recommends self-hosting media.
I&amp;rsquo;ve been back and forth about doing that vs. using something like Cloudinary or Cloudflare.
I think Mike makes a good point, and I&amp;rsquo;ll keep the images in my blog repo.&lt;/p&gt;
&lt;p&gt;Mike also puts permalinks in his posts proactively
(excuse the accidental alliteration)
so they stay consistent across platforms.
Smart.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>Here&rsquo;s a good post and tips from Mike Harley:
<a href="https://michaelharley.net/posts/2026/08/05/how-i-make-my-blog-posts-more-resilient/">How I make my blog posts more resilient</a>.</p>
<p>Mike recommends self-hosting media.
I&rsquo;ve been back and forth about doing that vs. using something like Cloudinary or Cloudflare.
I think Mike makes a good point, and I&rsquo;ll keep the images in my blog repo.</p>
<p>Mike also puts permalinks in his posts proactively
(excuse the accidental alliteration)
so they stay consistent across platforms.
Smart.</p>
<p>More good thoughts in the post. Check it out!</p>
]]></content:encoded>
			</item>
			<item>
				<title>Finding my draft posts with ripgrep</title>
				<link>https://sals.place/blog/find-your-drafts-with-ripgrep/</link>
				<pubDate>Wed, 05 Aug 2026 19:37:15 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/find-your-drafts-with-ripgrep/</guid>
				<description>&lt;p&gt;You know those moments where you think, dang, computers are &lt;em&gt;so&lt;/em&gt; insanely fast now &amp;hellip; so why in the world does software still feel slow??&lt;/p&gt;
&lt;p&gt;Well &lt;a href=&#34;https://github.com/burntsushi/ripgrep&#34;&gt;ripgrep&lt;/a&gt; is the antidote to that feeling.
It&amp;rsquo;s just mind-bogglingly fast.
I flippin&amp;rsquo; love ripgrep.
I use it for so much stuff.&lt;/p&gt;
&lt;p&gt;Anyway, today I found a nice snippet that lists all my blog posts that are still in draft status:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rg &lt;span style=&#34;color:#b8bb26&#34;&gt;&amp;#39;^draft( = |: )true&amp;#39;&lt;/span&gt; --glob &lt;span style=&#34;color:#b8bb26&#34;&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt; --files-with-matches content
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The handy bit there is &lt;code&gt;&#39;^draft( = |: )true&#39;&lt;/code&gt;, which will find both &lt;code&gt;draft = true&lt;/code&gt; (TOML syntax) and &lt;code&gt;draft: true&lt;/code&gt; (YAML syntax).
Since &lt;a href=&#34;https://sals.place/blog/11ty-to-hugo/&#34;&gt;moving to Hugo&lt;/a&gt;, my new posts generated with the
&lt;a href=&#34;https://gohugo.io/commands/hugo_new_content/&#34;&gt;hugo new content&lt;/a&gt;
command have
&lt;a href=&#34;https://gohugo.io/content-management/front-matter/&#34;&gt;TOML frontmatter&lt;/a&gt;,
but my old stuff has YAML.
(I could easily change the default to use YAML instead, but TOML feels fun and whimsical at the moment.)&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>You know those moments where you think, dang, computers are <em>so</em> insanely fast now &hellip; so why in the world does software still feel slow??</p>
<p>Well <a href="https://github.com/burntsushi/ripgrep">ripgrep</a> is the antidote to that feeling.
It&rsquo;s just mind-bogglingly fast.
I flippin&rsquo; love ripgrep.
I use it for so much stuff.</p>
<p>Anyway, today I found a nice snippet that lists all my blog posts that are still in draft status:</p>
<div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>rg <span style="color:#b8bb26">&#39;^draft( = |: )true&#39;</span> --glob <span style="color:#b8bb26">&#34;*.md&#34;</span> --files-with-matches content
</span></span></code></pre></div><p>The handy bit there is <code>'^draft( = |: )true'</code>, which will find both <code>draft = true</code> (TOML syntax) and <code>draft: true</code> (YAML syntax).
Since <a href="/blog/11ty-to-hugo/">moving to Hugo</a>, my new posts generated with the
<a href="https://gohugo.io/commands/hugo_new_content/">hugo new content</a>
command have
<a href="https://gohugo.io/content-management/front-matter/">TOML frontmatter</a>,
but my old stuff has YAML.
(I could easily change the default to use YAML instead, but TOML feels fun and whimsical at the moment.)</p>
<p>Other bits:</p>
<ul>
<li><code>--glob &quot;*.md&quot;</code> filters to markdown files.</li>
<li><code>--files-with-matches</code> tells ripgrep to print only the filenames (normally it will also print the file&rsquo;s contents around the match).</li>
<li><code>content</code> is the path to search (my <code>content/</code> subdirectory).</li>
</ul>
<p>I stuck it in a shell script in <code>scripts/drafts</code>.
Here&rsquo;s the output at this moment:</p>
<div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>&gt; ./scripts/drafts
</span></span><span style="display:flex;"><span>content/notes/remote-dev-ssh-config.md
</span></span><span style="display:flex;"><span>content/blog/adding-backlinks.md
</span></span><span style="display:flex;"><span>content/blog/personal-reference-system.md
</span></span><span style="display:flex;"><span>content/blog/find-your-drafts-with-ripgrep.md
</span></span><span style="display:flex;"><span>content/blog/stupid-pizza-humor.md
</span></span><span style="display:flex;"><span>content/blog/blog-post-resiliency.md
</span></span><span style="display:flex;"><span>content/blog/supernote-manta-thoughts.md
</span></span><span style="display:flex;"><span>content/blog/success-at-blogging.md
</span></span></code></pre></div><p>Don&rsquo;t judge me.
They&rsquo;re still drafts for a reason. 😉</p>
]]></content:encoded>
			</item>
			<item>
				<title>Smoke in Portland</title>
				<link>https://sals.place/blog/pdx-smoke-2026/</link>
				<pubDate>Wed, 05 Aug 2026 11:09:59 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/pdx-smoke-2026/</guid>
				<description>&lt;p&gt;It&amp;rsquo;s smoky in Portland right now.
For the moment, we&amp;rsquo;ve got the worst AQI of any &amp;ldquo;major&amp;rdquo; city in the world.&lt;/p&gt;
&lt;img src=&#34;https://sals.place/images/smoky-pdx-airvisual.avif&#34; alt=&#34;AirVisual city ranking screenshot&#34; width=&#34;400&#34;/&gt;
&lt;p&gt;Here&amp;rsquo;s what it looks like outside
(image from &lt;a href=&#34;https://www.oregonlive.com/weather/2026/08/portland-area-set-to-see-mix-of-extreme-heat-and-smoke-meteorologists-say.html&#34;&gt;Oregonlive.com&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://sals.place/images/smoky-pdx-skyline.avif&#34; alt=&#34;An image of smoky Portland&#34;&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a drag.
My kids both have camps this week that have either been canceled or compromised.
Exercising outside is a bad idea.
I&amp;rsquo;m monitoring our indoor AQI with a couple sensors and redistributing air filters around the house.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>It&rsquo;s smoky in Portland right now.
For the moment, we&rsquo;ve got the worst AQI of any &ldquo;major&rdquo; city in the world.</p>
<img src="/images/smoky-pdx-airvisual.avif" alt="AirVisual city ranking screenshot" width="400"/>
<p>Here&rsquo;s what it looks like outside
(image from <a href="https://www.oregonlive.com/weather/2026/08/portland-area-set-to-see-mix-of-extreme-heat-and-smoke-meteorologists-say.html">Oregonlive.com</a>):</p>
<p><img src="/images/smoky-pdx-skyline.avif" alt="An image of smoky Portland"></p>
<p>It&rsquo;s a drag.
My kids both have camps this week that have either been canceled or compromised.
Exercising outside is a bad idea.
I&rsquo;m monitoring our indoor AQI with a couple sensors and redistributing air filters around the house.</p>
<h2 id="its-all-relative">It&rsquo;s all relative</h2>
<p>That said, this is nothing compared to our bout with smoke in 2020.
Our AQI, currently at a casual 160 per the screenshot above, shot past 500.
That&rsquo;s literally off most of the scales.
A Department of Environmental Quality rep explained:</p>
<blockquote>
<p>It doesn’t mean the monitors can’t display higher than that, it just means the health categories haven’t been set up to go beyond that.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</blockquote>
<p>Cool.</p>
<p>The AQI hung out at roughly those levels for an entire week.
Not to mention, this was September of 2026 when the pandemic was in full swing.
<a href="/blog/happiness-in-parenthood/">I was struggling</a> as a parent.
It was deep low point.</p>
<p>So hey, this ain&rsquo;t so bad. 😉</p>
<h2 id="heat-waves-and-smoke">Heat waves and smoke</h2>
<aside class="blog-aside">
    File under: Sal writes about a basic thing to force himself to finally learn how it works. I'm starting with what an LLM is telling me and then trying to verify the details with proper sources.
</aside>
<p>Normally, air gets cooler as you go up into the atmosphere, so warm air from the surface climbs up and away from the surface.
This air movement is known as <em>convection</em>,<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>
and it carries pollutants like wildfire smoke up into the atmosphere where they disperse.</p>
<p>Heat waves in the Pacific Northwest are driven by high-pressure systems up in the atmosphere.
These can be called <em>heat domes</em> (though I&rsquo;m not yet sure if our current heat wave is technically a heat dome or not).
The high pressure forces air to sink toward the surface.
The sinking air compresses and warms, preventing cloud formation and air movement.
The warming effect also causes a layer of hotter air to form over cooler air below — the reverse of the normal situation described above.
This is called an <em>inversion layer</em>.</p>
<p>In this scenario, instead of smoke rising up and dispersing, it&rsquo;s held down at the surface by the high pressure and sinking air.
Meanwhile, the inversion layer acts like a lid over the top, suppressing air movement and causing it to stagnate.<sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>
And it&rsquo;s not just the smoke that stagnates, but also dust, car exhaust, industrial pollution, etc.
This can last for days or even weeks.</p>
<p>Better yet, the intense sunlight speeds up chemical reactions of nitrogen oxides and volatile organic compounds in the air, creating ground-level ozone and smog.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> <sup id="fnref2:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>I think I get it now.
In technical terms, our air has turned to dogshit.
But it should get better on Friday!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://www.opb.org/article/2020/09/15/oregons-air-is-so-hazardous-its-breaking-records/">Oregon’s air is so hazardous it’s breaking records</a>. See also from that period, <a href="https://www.wweek.com/environment/2020/09/16/heres-how-dangerous-portlands-smoky-skies-are-to-your-lungs/">Here’s How Dangerous Portland’s Smoky Skies Are to Your Lungs</a>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://scied.ucar.edu/learning-zone/air-quality/how-weather-affects-air-quality">How Weather Affects Air Quality | Center for Science Education</a>:&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref2:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://chem.libretexts.org/Bookshelves/Introductory_Chemistry/Chemistry_for_Changing_Times_(Hill_and_McCreary)/13%3A_Air/13.06%3A_Photochemical_Smog-_Making_Haze_While_the_Sun_Shines">Chemistry for Changing Times sec. 13.5: Photochemical Smog — Making Haze While the Sun Shines</a>.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
			</item>
			<item>
				<title>An RSS oopsie, props to Pablo at powRSS</title>
				<link>https://sals.place/blog/rss-oopsie-powrss-props/</link>
				<pubDate>Tue, 04 Aug 2026 23:28:13 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/rss-oopsie-powrss-props/</guid>
				<description>&lt;p&gt;Yesterday &lt;a href=&#34;https://sals.place/blog/11ty-to-hugo/&#34;&gt;I moved my blog&lt;/a&gt; to Hugo and, despite my rigorous testing locally and in a staging deployment, I broke my RSS feed in production.
Perfect. 🤦‍♂️&lt;/p&gt;
&lt;p&gt;The issue was that the Hugo &lt;code&gt;baseURL&lt;/code&gt; setting wasn&amp;rsquo;t being applied properly, so all the post links were pointing at &lt;code&gt;localhost&lt;/code&gt;.
The scrappy, I&amp;rsquo;m-in-the-middle-of-dinner fix was to set it manually:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo --baseURL &lt;span style=&#34;color:#b8bb26&#34;&gt;&amp;#34;https://sals.place&amp;#34;&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But today I hope to figure out why the &lt;code&gt;baseURL&lt;/code&gt; setting in &lt;code&gt;hugo.toml&lt;/code&gt; setting wasn&amp;rsquo;t taking effect.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>Yesterday <a href="/blog/11ty-to-hugo/">I moved my blog</a> to Hugo and, despite my rigorous testing locally and in a staging deployment, I broke my RSS feed in production.
Perfect. 🤦‍♂️</p>
<p>The issue was that the Hugo <code>baseURL</code> setting wasn&rsquo;t being applied properly, so all the post links were pointing at <code>localhost</code>.
The scrappy, I&rsquo;m-in-the-middle-of-dinner fix was to set it manually:</p>
<div class="highlight"><pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>hugo --baseURL <span style="color:#b8bb26">&#34;https://sals.place&#34;</span> build
</span></span></code></pre></div><p>But today I hope to figure out why the <code>baseURL</code> setting in <code>hugo.toml</code> setting wasn&rsquo;t taking effect.</p>
<p>My apologies to any reader who had to deal with the trouble!</p>
<h2 id="thank-you-to-pablo-and-daniel">Thank you to Pablo and Daniel</h2>
<p>After deploying the migrated site last night, I hustled off to dinner with the family, none the wiser that I&rsquo;d busted my feed.
Luckily, Pablo from the excellent
<a href="https://powrss.com/">powRSS</a>
noticed the problem,
emailed me to let me know,
and told me he&rsquo;d clean up the broken links on powRSS once it&rsquo;s fixed.
Amazing.</p>
<p>Another reader, Daniel, emailed me as well and even included a link to page on what might explain the issue.</p>
<p>If not for these fine folks helping me out, I might not have noticed the problem for another day or two.</p>
<p>Pablo and Daniel, once again, <em>thank you</em>. 🙏</p>
]]></content:encoded>
			</item>
			<item>
				<title>Moved the blog from 11ty to Hugo</title>
				<link>https://sals.place/blog/11ty-to-hugo/</link>
				<pubDate>Tue, 04 Aug 2026 18:26:18 -0400</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/11ty-to-hugo/</guid>
				<description>&lt;aside class=&#34;blog-aside&#34;&gt;
    TLDR: I migrated my blog. Please email me if you notice anything&#39;s amiss!
&lt;/aside&gt;
&lt;p&gt;What should you do when you&amp;rsquo;re busy and have been spending too much time on your blog lately?
Why, dive head first into a completely unnecessary SSG migration, of course!&lt;/p&gt;
&lt;p&gt;I had Hugo on the brain last night for somewhat valid, somewhat flimsy reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I used Hugo in the past and liked it.&lt;/li&gt;
&lt;li&gt;11ty&amp;rsquo;s fast, but Hugo&amp;rsquo;s &lt;em&gt;wicked&lt;/em&gt; fast.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve been writing more Golang code lately.&lt;/li&gt;
&lt;li&gt;While I&amp;rsquo;m fine with JavaScript and enjoy TypeScript, relying on npm feels dirty these days with all the supply-chain attacks. Hugo is a single, batteries-included binary that does not rely on third-party packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With these thoughts in mind, I dipped a toe back into the Hugo pond this morning, liked the feel of it, and before long was wild-eyed and neck-deep in migration.
It&amp;rsquo;s now about 3:50 pm, and I think most of the core stuff is working in Hugo.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<aside class="blog-aside">
    TLDR: I migrated my blog. Please email me if you notice anything's amiss!
</aside>
<p>What should you do when you&rsquo;re busy and have been spending too much time on your blog lately?
Why, dive head first into a completely unnecessary SSG migration, of course!</p>
<p>I had Hugo on the brain last night for somewhat valid, somewhat flimsy reasons:</p>
<ul>
<li>I used Hugo in the past and liked it.</li>
<li>11ty&rsquo;s fast, but Hugo&rsquo;s <em>wicked</em> fast.</li>
<li>I&rsquo;ve been writing more Golang code lately.</li>
<li>While I&rsquo;m fine with JavaScript and enjoy TypeScript, relying on npm feels dirty these days with all the supply-chain attacks. Hugo is a single, batteries-included binary that does not rely on third-party packages.</li>
</ul>
<p>With these thoughts in mind, I dipped a toe back into the Hugo pond this morning, liked the feel of it, and before long was wild-eyed and neck-deep in migration.
It&rsquo;s now about 3:50 pm, and I think most of the core stuff is working in Hugo.</p>
<p>Here are my very hasty thoughts on what I like better:</p>
<ul>
<li>The local dev server has a flag that controls whether drafts are included or not. I don&rsquo;t think 11ty has this. I had to write some custom code to be able to run the dev server but exclude drafts locally.</li>
<li>The dev server seems to reliably start and stop in an instant. The 11ty server gets stuck sometimes, taking a long time to exit.</li>
<li>I love that Hugo boilerplate leans hard into <a href="https://gohugo.io/functions/partials/include/">partials</a>.
You can accomplish the same thing with 11ty, but it felt less clear which way is most idiomatic.</li>
<li>I like that <a href="https://gohugo.io/content-management/shortcodes/">Hugo&rsquo;s shortcodes</a> are stored in html files instead of JS functions.</li>
<li>Hugo has native <a href="https://gohugo.io/functions/go-template/block/">blocks</a>!
<a href="https://www.11ty.dev/docs/layout-chaining/">11ty says</a> you can use the Nunjucks template-inheritance feature, but it doesn&rsquo;t work with 11ty&rsquo;s native layout flow. In my experience, anyway.</li>
<li>Dates make more sense to me. 11ty forces dates for everything, and it&rsquo;s really hard to tell whether a page has an explicit date or just the auto-computed date that 11ty imposes on it.
I burned a bunch of time wrestling this because I wanted <a href="/notes/">my notes</a> to be undated.
<ul>
<li>Edit: To be fair, 11ty forcing me into dates made me realize that maybe I do want them after all.</li>
</ul>
</li>
<li>Nitpicking, but defining the nav menu in the <code>hugo.toml</code> config file is clearer to me than how 11ty does menus.</li>
<li>See above re: single binary.</li>
<li>See above re: wicked fast.</li>
</ul>
<p>11ty&rsquo;s great, of course.
Hugo&rsquo;s just more my vibe so far.</p>
<p>I&rsquo;m out of time and gonna hit the deploy button.
Fingers crossed.</p>
]]></content:encoded>
			</item>
			<item>
				<title>Belated welcome to Blaugust</title>
				<link>https://sals.place/blog/blaugust-2026-week-1/</link>
				<pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><author>sal@sals.place (Sal)</author>
				<guid>https://sals.place/blog/blaugust-2026-week-1/</guid>
				<description>&lt;p&gt;I wasn&amp;rsquo;t sure I was going to say anything about Blaugust because I&amp;rsquo;m already posting a lot lately, but why the heck not.
So, a belated welcome to &lt;a href=&#34;https://indiecator.org/2026/07/20/blaugust-2026-is-coming/&#34;&gt;Blaugust 2026&lt;/a&gt;!
From the intro:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you’re new to blogging, it’s a great opportunity to meet many cool people, get help with starting up your own website, and participate in a cool community project. If you’re a blogging veteran, it’s just the push to dust off the old site and get back into the ring again. Overall, it’s just a nice event that reinvigorates the community and helps folks not just build up a habit of writing but also form connections with other people in the sphere.&lt;/p&gt;</description>
				<content:encoded><![CDATA[<p>I wasn&rsquo;t sure I was going to say anything about Blaugust because I&rsquo;m already posting a lot lately, but why the heck not.
So, a belated welcome to <a href="https://indiecator.org/2026/07/20/blaugust-2026-is-coming/">Blaugust 2026</a>!
From the intro:</p>
<blockquote>
<p>If you’re new to blogging, it’s a great opportunity to meet many cool people, get help with starting up your own website, and participate in a cool community project. If you’re a blogging veteran, it’s just the push to dust off the old site and get back into the ring again. Overall, it’s just a nice event that reinvigorates the community and helps folks not just build up a habit of writing but also form connections with other people in the sphere.</p>
</blockquote>
<p>Hard to argue with any of that.</p>
<p>I myself don&rsquo;t care about the awards, but I do care about conduct
(<a href="https://indiecator.org/2026/07/27/blaugust-2026-and-ai/">don&rsquo;t overuse AI, don&rsquo;t be a dick</a>).
Also, the themes are fun:</p>
<ul>
<li>August 1st – 6th: <em>Welcome to Blaugust</em></li>
<li>August 7th – 13th: <em>Introduce Yourself/Getting to Know You</em></li>
<li>August 14th – 20th: <em>Creator Appreciation</em></li>
<li>August 21st – 27th: <em>Staying Motivated</em></li>
<li>August 28th – 31st: <em>Lessons Learned</em></li>
</ul>
<p>See the <em>Themes and Prompts</em> section of the site above for more detail on those.
I&rsquo;ve added these to Todoist, so I&rsquo;ve got a fighting chance at actually doing some of them.</p>
<p>It&rsquo;s not too late to hop on board.
Take a gander at the page linked above and
<a href="https://forms.gle/SfUWUMpFQxBFbF9N9">sign up</a>!
And regardless of Blaugust, if you&rsquo;re participating in the indie blogosphere in any reasonably positive way,
even if <a href="https://brennan.day/you-dont-have-to-blog/">just as a reader</a>,
you&rsquo;re helping to keep the cool web alive.
Thank you!</p>
]]></content:encoded>
			</item>
	</channel>
</rss>