<?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>hi, it&#39;s mike</title>
    <link>https://mike.puddingtime.org/</link>
    <description>Recent content on hi, it&#39;s mike</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>mike@puddingtime.org (mike)</managingEditor>
    <webMaster>mike@puddingtime.org (mike)</webMaster>
    <copyright>© 2026, mike</copyright>
    <lastBuildDate>Thu, 23 Apr 2026 22:18:42 -0700</lastBuildDate>
    <atom:link href="https://mike.puddingtime.org/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>I seem to be in the mood for Hugo again</title>
      <link>https://mike.puddingtime.org/posts/2026-04-23-i-seem-to-be-in-the-mood-for-hugo-again/</link>
      <pubDate>Thu, 23 Apr 2026 22:18:42 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-23-i-seem-to-be-in-the-mood-for-hugo-again/</guid>
      <description>I dunno. Maybe everything was getting too easy.</description>
      <content:encoded><![CDATA[<p>I got bit by the &ldquo;spruce the old Hugo blog up&rdquo; bug this week and ended up tearing apart the old theme, restyling some stuff, and fixing up the <a href="https://mph.puddingtime.org/posts/about-old-posts/">old post notice</a>.</p>
<p>Once I was done with that, I took a long look at the micro.blog and decided I was done with it. I think I subscribed hoping I was in the mood for the slow-moving community over there, but most people I know from it seem to have moved on since I was last there. So I pointed its custom domain to this one, exported all my stuff from it, and set up shop here again.</p>
<p>micro.blog hews so close to things I think I would really like to exist somewhere in a less elaborate manner. I appreciate the way you can start with what feels like a short-form social-media-style post and end up tipping over into a whole blog entry without having to switch context. What&rsquo;d be fine, honestly, would be &ldquo;Mastodon except your Markdown works and you can kinda blog in there, not just toot.&rdquo; Then sometimes it&rsquo;d be a pithy little comment, other times it&rsquo;d be a screed, and you could get kicked out of your instance because a lot of words is violent or whatever.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I love that Gemini AI Studio has a GitHub integration, b...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-20-116439602820180916/</link>
      <pubDate>Mon, 20 Apr 2026 23:22:17 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-20-116439602820180916/</guid>
      <description>&lt;p&gt;I love that Gemini AI Studio has a GitHub integration, but:&lt;/p&gt;
&lt;p&gt;It is one-way only: Your code is pushed to GitHub, but AI Studio won&amp;rsquo;t pull any changes back down. So if your bright idea was to seek security review from a human or push your code through a review toolchain, you&amp;rsquo;ll be copying and pasting any changes back in.&lt;/p&gt;
&lt;p&gt;If you make a change to your code (PR, file editor, whatever), AI Studio just makes a commit reverting your changes, adding a commit message calling them &amp;ldquo;extraneous,&amp;rdquo; &amp;ldquo;unneeded,&amp;rdquo; or (in the case of a security notification I added) &amp;ldquo;frivolous.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I love that Gemini AI Studio has a GitHub integration, but:</p>
<p>It is one-way only: Your code is pushed to GitHub, but AI Studio won&rsquo;t pull any changes back down. So if your bright idea was to seek security review from a human or push your code through a review toolchain, you&rsquo;ll be copying and pasting any changes back in.</p>
<p>If you make a change to your code (PR, file editor, whatever), AI Studio just makes a commit reverting your changes, adding a commit message calling them &ldquo;extraneous,&rdquo; &ldquo;unneeded,&rdquo; or (in the case of a security notification I added) &ldquo;frivolous.&rdquo;</p>
<p>In other words, it doesn&rsquo;t actually know how to use GitHub, but takes a stab at gaslighting you into thinking your commits were all pointless and dumb anyhow.</p>
<p>5: How many times in the past ~45 days someone has asked me if they can stick Salesforce tokens in their vibecoded AI Studio app.</p>
<p>n: How many times someone decided to just go do that without asking.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I wanted an app to look up glycemic index/glycemic load i...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-19-116429795061767918/</link>
      <pubDate>Sun, 19 Apr 2026 05:48:03 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-19-116429795061767918/</guid>
      <description>&lt;p&gt;I wanted an app to look up glycemic index/glycemic load information. There are a few free ones, but they’re ad heavy or else have expensive subscriptions for what amount to wrappers around the same data everyone uses, so I made a PWA that does what I wanted.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gi.puddingtime.net&#34;&gt;https://gi.puddingtime.net&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I wanted an app to look up glycemic index/glycemic load information. There are a few free ones, but they’re ad heavy or else have expensive subscriptions for what amount to wrappers around the same data everyone uses, so I made a PWA that does what I wanted.</p>
<p><a href="https://gi.puddingtime.net">https://gi.puddingtime.net</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>GI Lookup</title>
      <link>https://mike.puddingtime.org/posts/2026-04-18-i-wanted-an-app-to/</link>
      <pubDate>Sat, 18 Apr 2026 22:45:41 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-18-i-wanted-an-app-to/</guid>
      <description>&lt;p&gt;I wanted an app to look up glycemic index/glycemic load information. There are a few free ones, but they&amp;rsquo;re ad heavy or else have expensive subscriptions for what amount to wrappers around the same data everyone uses, so I made a PWA that does what I wanted.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gi.puddingtime.net&#34;&gt;gi.puddingtime.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/gi-ss-10.42.19pm.png&#34; width=&#34;275&#34; height=&#34;600&#34; alt=&#34;A webpage titled GI Lookup provides information about glycemic index (GI) and glycemic load (GL), categorizing foods based on their GI values as low, medium, or high.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/gi-ss-10.41.51pm.png&#34; width=&#34;275&#34; height=&#34;600&#34; alt=&#34;A glycemic index reference tool displaying the glycemic index values of raw bananas at different ripeness levels, with a search feature and low, medium, and high GI categories.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/gi-ss-10.40.58pm.png&#34; width=&#34;275&#34; height=&#34;600&#34; alt=&#34;A list of different banana-based foods is displayed with their glycemic index values and carbohydrate content.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I wanted an app to look up glycemic index/glycemic load information. There are a few free ones, but they&rsquo;re ad heavy or else have expensive subscriptions for what amount to wrappers around the same data everyone uses, so I made a PWA that does what I wanted.</p>
<p><a href="https://gi.puddingtime.net">gi.puddingtime.net</a></p>
<p><img src="/uploads/microblog/2026/gi-ss-10.42.19pm.png" width="275" height="600" alt="A webpage titled GI Lookup provides information about glycemic index (GI) and glycemic load (GL), categorizing foods based on their GI values as low, medium, or high."><img src="/uploads/microblog/2026/gi-ss-10.41.51pm.png" width="275" height="600" alt="A glycemic index reference tool displaying the glycemic index values of raw bananas at different ripeness levels, with a search feature and low, medium, and high GI categories."><img src="/uploads/microblog/2026/gi-ss-10.40.58pm.png" width="275" height="600" alt="A list of different banana-based foods is displayed with their glycemic index values and carbohydrate content."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Installing Linux on an old Thinkpad is “middle aged dad d...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-15-116406408687353673/</link>
      <pubDate>Wed, 15 Apr 2026 02:40:35 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-15-116406408687353673/</guid>
      <description>&lt;p&gt;Installing Linux on an old Thinkpad is “middle aged dad decides to get fit by doing toe touches in his boxers” except you don’t get disgusted &amp;amp; give up. Instead you blog about how awesome it is until it’s not and then you stop blogging for six months in hopes everyone forgets.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Installing Linux on an old Thinkpad is “middle aged dad decides to get fit by doing toe touches in his boxers” except you don’t get disgusted &amp; give up. Instead you blog about how awesome it is until it’s not and then you stop blogging for six months in hopes everyone forgets.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Installing Linux on an old Thinkpad is &#34;middle aged dad ...</title>
      <link>https://mike.puddingtime.org/posts/2026-04-14-installing-linux-on-an-old/</link>
      <pubDate>Tue, 14 Apr 2026 19:39:24 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-14-installing-linux-on-an-old/</guid>
      <description>&lt;p&gt;Installing Linux on an old Thinkpad is &amp;ldquo;middle aged dad decides to get fit by doing toe touches in his boxers&amp;rdquo; except you don&amp;rsquo;t get disgusted &amp;amp; give up. Instead you blog about how awesome it is until it&amp;rsquo;s not and then you stop blogging for six months in hopes everyone forgets.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Installing Linux on an old Thinkpad is &ldquo;middle aged dad decides to get fit by doing toe touches in his boxers&rdquo; except you don&rsquo;t get disgusted &amp; give up. Instead you blog about how awesome it is until it&rsquo;s not and then you stop blogging for six months in hopes everyone forgets.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, it thinks I’d probably read my own blog, anyhow.</title>
      <link>https://mike.puddingtime.org/toots/2026-04-14-116401799882825378/</link>
      <pubDate>Tue, 14 Apr 2026 07:08:30 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-14-116401799882825378/</guid>
      <description>&lt;p&gt;Well, it thinks I’d probably read my own blog, anyhow.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, it thinks I’d probably read my own blog, anyhow.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, it thinks I&#39;d probably read my own blog, anyhow.</title>
      <link>https://mike.puddingtime.org/posts/2026-04-14-well-it-thinks-id-probably/</link>
      <pubDate>Tue, 14 Apr 2026 00:08:21 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-14-well-it-thinks-id-probably/</guid>
      <description>&lt;p&gt;Well, it thinks I&amp;rsquo;d &lt;em&gt;probably&lt;/em&gt; read my own blog, anyhow.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/3797811a52.jpg&#34; width=&#34;600&#34; height=&#34;434&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Well, it thinks I&rsquo;d <em>probably</em> read my own blog, anyhow.</p>
<img src="/uploads/microblog/2026/3797811a52.jpg" width="600" height="434" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>Shopping for feeds: https://pdxmph.puddingtime.org/2026/04/1...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-14-116401692443662976/</link>
      <pubDate>Tue, 14 Apr 2026 06:41:11 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-14-116401692443662976/</guid>
      <description>&lt;p&gt;Shopping for feeds: &lt;a href=&#34;https://pdxmph.puddingtime.org/2026/04/13/shopping-for-feeds.html&#34;&gt;https://pdxmph.puddingtime.org/2026/04/13/shopping-for-feeds.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Shopping for feeds: <a href="https://pdxmph.puddingtime.org/2026/04/13/shopping-for-feeds.html">https://pdxmph.puddingtime.org/2026/04/13/shopping-for-feeds.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Shopping for feeds</title>
      <link>https://mike.puddingtime.org/posts/2026-04-13-shopping-for-feeds/</link>
      <pubDate>Mon, 13 Apr 2026 23:39:33 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-13-shopping-for-feeds/</guid>
      <description>&lt;p&gt;Underneath the RSS triage app is a Fever-compatible API for serving feeds to readers (or the built-in one)  and alongside that is an MCP that manages all the scoring and associated reporting.&lt;/p&gt;
&lt;p&gt;I added some tools over the weekend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rss_candidates_assess&lt;/code&gt; — Shallow-score candidate feeds from OPML, URL list, or HTML page against my interest profile&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rss_candidates_deep&lt;/code&gt; — Deep pass on assessed candidates: fetches real articles, scores through the pipeline&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rss_candidates_dismiss&lt;/code&gt; — Mark candidates as not interesting&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rss_candidates_subscribe&lt;/code&gt; — Promote candidates to real subscriptions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve been grabbing OPML from sites like &lt;a href=&#34;https://ooh.directory&#34;&gt;ooh.directory&lt;/a&gt; and dragging them into Claude Desktop where the MCP does a shallow pass against headlines, suggests some likely candidates, then does a deep pass on the stronger ones by pulling actual articles.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Underneath the RSS triage app is a Fever-compatible API for serving feeds to readers (or the built-in one)  and alongside that is an MCP that manages all the scoring and associated reporting.</p>
<p>I added some tools over the weekend:</p>
<ul>
<li><code>rss_candidates_assess</code> — Shallow-score candidate feeds from OPML, URL list, or HTML page against my interest profile</li>
<li><code>rss_candidates_deep</code> — Deep pass on assessed candidates: fetches real articles, scores through the pipeline</li>
<li><code>rss_candidates_dismiss</code> — Mark candidates as not interesting</li>
<li><code>rss_candidates_subscribe</code> — Promote candidates to real subscriptions</li>
</ul>
<p>I&rsquo;ve been grabbing OPML from sites like <a href="https://ooh.directory">ooh.directory</a> and dragging them into Claude Desktop where the MCP does a shallow pass against headlines, suggests some likely candidates, then does a deep pass on the stronger ones by pulling actual articles.</p>
<p>I found some pretty interesting management blogs this way, and it&rsquo;s helpful for sifting through long, general lists. Because everything hits the scoring queue and triage is easy, it feels less risky to just grab a bunch on their speculative quality and know they&rsquo;ll get sorted out after a little while.</p>
<p>I also built an endpoint to feed a URL in via a bookmarklet (or eventual browser extension), so the traditional &ldquo;subscribe to this site&rdquo;  bookmarklet gets a makeover by using the scoring pipeline to offer a quick summary before categorizing and subscribing.</p>
<p>I dunno &hellip; it seems to be encouraging me to subscribe to stuff, and my reading list is diversifying. Seems good.</p>
]]></content:encoded>
    </item>
    <item>
      <title>… then a run through https://impeccable.style to help me g...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-13-116395685834724215/</link>
      <pubDate>Mon, 13 Apr 2026 05:13:37 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-13-116395685834724215/</guid>
      <description>&lt;p&gt;… then a run through &lt;a href=&#34;https://impeccable.style&#34;&gt;https://impeccable.style&lt;/a&gt; to help me get it to better information density and less monotony.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>… then a run through <a href="https://impeccable.style">https://impeccable.style</a> to help me get it to better information density and less monotony.</p>
]]></content:encoded>
    </item>
    <item>
      <title>... then a run through impeccable to help me get it to ...</title>
      <link>https://mike.puddingtime.org/posts/2026-04-12-then-a-run-through-impeccable/</link>
      <pubDate>Sun, 12 Apr 2026 22:13:29 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-12-then-a-run-through-impeccable/</guid>
      <description>&lt;p&gt;&amp;hellip; then a run through &lt;a href=&#34;https://impeccable.style&#34;&gt;impeccable&lt;/a&gt; to help me get it to better information density and less monotony.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/74fe7861d8.jpg&#34; width=&#34;600&#34; height=&#34;333&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>&hellip; then a run through <a href="https://impeccable.style">impeccable</a> to help me get it to better information density and less monotony.</p>
<img src="/uploads/microblog/2026/74fe7861d8.jpg" width="600" height="333" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>I guess the elevator pitch has become “Google Reader, e...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-13-116395567832329924/</link>
      <pubDate>Mon, 13 Apr 2026 04:43:37 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-13-116395567832329924/</guid>
      <description>&lt;p&gt;I guess the elevator pitch has become “Google Reader, except it learns from what you skip and star and lets you make a killfile and whatever the opposite of a killfile would be that also uses inference to let you be kind of loose with that.”&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I guess the elevator pitch has become “Google Reader, except it learns from what you skip and star and lets you make a killfile and whatever the opposite of a killfile would be that also uses inference to let you be kind of loose with that.”</p>
]]></content:encoded>
    </item>
    <item>
      <title>I guess the elevator pitch has become &#34;Google Reader, ...</title>
      <link>https://mike.puddingtime.org/posts/2026-04-12-i-guess-the-elevator-pitch/</link>
      <pubDate>Sun, 12 Apr 2026 21:41:57 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-12-i-guess-the-elevator-pitch/</guid>
      <description>&lt;p&gt;I guess the elevator pitch has become &amp;ldquo;Google Reader, except it learns from what you skip and star and lets you make a killfile and whatever the opposite of a killfile would be that also uses inference to let you be kind of loose with that.&amp;rdquo;&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/5d740c4625.jpg&#34; width=&#34;600&#34; height=&#34;333&#34; alt=&#34;A screenshot of an RSS feed interface displays a list of news articles with various headlines and sources.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>I guess the elevator pitch has become &ldquo;Google Reader, except it learns from what you skip and star and lets you make a killfile and whatever the opposite of a killfile would be that also uses inference to let you be kind of loose with that.&rdquo;</p>
<img src="/uploads/microblog/2026/5d740c4625.jpg" width="600" height="333" alt="A screenshot of an RSS feed interface displays a list of news articles with various headlines and sources.">
]]></content:encoded>
    </item>
    <item>
      <title>One frustration and one unexpected insight from the RSS s...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-12-116394078340038543/</link>
      <pubDate>Sun, 12 Apr 2026 22:24:49 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-12-116394078340038543/</guid>
      <description>&lt;p&gt;One frustration and one unexpected insight from the RSS service: &lt;a href=&#34;https://pdxmph.puddingtime.org/2026/04/12/one-frustration-and-one-unexpected.html&#34;&gt;https://pdxmph.puddingtime.org/2026/04/12/one-frustration-and-one-unexpected.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>One frustration and one unexpected insight from the RSS service: <a href="https://pdxmph.puddingtime.org/2026/04/12/one-frustration-and-one-unexpected.html">https://pdxmph.puddingtime.org/2026/04/12/one-frustration-and-one-unexpected.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>One frustration and one unexpected insight from the RSS service</title>
      <link>https://mike.puddingtime.org/posts/2026-04-12-one-frustration-and-one-unexpected/</link>
      <pubDate>Sun, 12 Apr 2026 15:23:14 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-12-one-frustration-and-one-unexpected/</guid>
      <description>&lt;p&gt;I spent more time working on rss-triage this weekend. One thing was frustrating but ultimately helpful, and one thing was a great outcome I didn&amp;rsquo;t think about going in.&lt;/p&gt;
&lt;p&gt;The frustrating thing was having to abandon &amp;ldquo;did I read this&amp;rdquo; as a scoring signal. It &lt;em&gt;seems&lt;/em&gt; like a good idea to include it, but:&lt;/p&gt;
&lt;p&gt;First, feed readers are pretty annoying if you&amp;rsquo;re trying to measure read state, because it&amp;rsquo;d be a complex problem to solve for very little payoff unless your reader&amp;rsquo;s whole project is &amp;ldquo;help people figure out what&amp;rsquo;s worth reading,&amp;rdquo; and almost none of them do make that their project. There&amp;rsquo;s been this little ripple through the &amp;ldquo;people who like RSS&amp;rdquo; world calling out the stale state of RSS reading (&amp;ldquo;they all look like mail readers&amp;rdquo;) and none of the &amp;ldquo;looks like a mail reader&amp;rdquo; development community seems to have thought &amp;ldquo;what would the built-in spam filtering of a mail reader look like in an RSS reader?&amp;rdquo; They just think &amp;ldquo;did you glance at it? I&amp;rsquo;ll pass that back to the feed backend so you don&amp;rsquo;t see it a second time on another client somewhere.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I spent more time working on rss-triage this weekend. One thing was frustrating but ultimately helpful, and one thing was a great outcome I didn&rsquo;t think about going in.</p>
<p>The frustrating thing was having to abandon &ldquo;did I read this&rdquo; as a scoring signal. It <em>seems</em> like a good idea to include it, but:</p>
<p>First, feed readers are pretty annoying if you&rsquo;re trying to measure read state, because it&rsquo;d be a complex problem to solve for very little payoff unless your reader&rsquo;s whole project is &ldquo;help people figure out what&rsquo;s worth reading,&rdquo; and almost none of them do make that their project. There&rsquo;s been this little ripple through the &ldquo;people who like RSS&rdquo; world calling out the stale state of RSS reading (&ldquo;they all look like mail readers&rdquo;) and none of the &ldquo;looks like a mail reader&rdquo; development community seems to have thought &ldquo;what would the built-in spam filtering of a mail reader look like in an RSS reader?&rdquo; They just think &ldquo;did you glance at it? I&rsquo;ll pass that back to the feed backend so you don&rsquo;t see it a second time on another client somewhere.&rdquo;</p>
<p>Readwise Reader kind of does solve this &ndash; it tracks how far down an article you&rsquo;ve scrolled. That could be a <em>great</em> signal but then you&rsquo;re using Readwise Reader.</p>
<p>Second, I end up reading things in other places: From Linkding, from Linkwarden, in Wallabag, just opening the link in a browser. They <em>mostly</em> have some variant on &ldquo;read&rdquo; or &ldquo;unread,&rdquo; but they generally require a manual toggle. So tracking what I read and didn&rsquo;t requires manual interventions.</p>
<p>So with some disappointment I yanked <code>was_read</code> out of the feed scoring pipeline, and I&rsquo;m down to &ldquo;did I star it, did I skip it, or did a rule I created block it?&rdquo; Those are all at least clear behavioral signal that an be combined to suggest the future success of a given feed from past behavior. <code>was_read</code> would have been, too, but I&rsquo;m not ready to create an entire RSS reader of my own to give myself more guarantees.</p>
<p>And I still have the inference-driven stuff to help auto-triage: Given much firmer behavioral measures, the inference layer is getting stronger signal about the reputational thumb it should put on the article scoring scale. It is also doing a good job with my more subjective, inference-friendly nudges: Project version bumps, crime stories, headlines that make it hard to figure out the subject, etc. all get downweighted.</p>
<p>Finally, I have the topic surge filtering layer: Work requires me, for instance, to keep up with the latest in Gemini. It doesn&rsquo;t require me to read 20 separate press release rewrites from my Google News search feed.</p>
<p>So &hellip; is it working?</p>
<p>Yeah, I would say it is. I&rsquo;ve got a few tabs in the UI that let me go in and see what inference has ruled out, and I am disagreeing with it less and less. The past few days I just scroll down the reject pile and hit the big red &ldquo;dismiss them all&rdquo; button instead of overriding any of them.</p>
<p>I&rsquo;ve been cautious about letting it recommend, though. As eager as I am to filter out dead wood (anything scoring below 3/10) I won&rsquo;t let it promote anything below 7/10, and it hasn&rsquo;t suggested much yet. Makes sense. I&rsquo;ve spent more time telling it what I don&rsquo;t like than what I do like, so there&rsquo;s not much for inference to dig in on to start filling in the high end of curve.</p>
<p>Oh, right. So the unexpected part:</p>
<p>Nothing that unpleasant, really. As I&rsquo;ve been working on the pipeline tuning parameters, I&rsquo;ve been in a validation cycle of &ldquo;tweak -&gt; rescore -&gt; review.&rdquo;</p>
<p>The tool gives me a categorized list of all my feeds along with an attention score for each, based on how many articles from that source that the system has seen, how many I have starred, how many I have skipped, some recency calculations, and a Bayes smoother that takes its time judging lower volume feeds but gets more opinionated with higher volume ones faster.  To pick on <em>The Oregonian</em> again:</p>
<ul>
<li>765 articles seen in the 14-day window</li>
<li>307 dismissed (which means 458 hit a filter)</li>
<li>41 starred (deemed interesting) for a 5% &ldquo;star rate.&rdquo;</li>
<li>24 attention score</li>
</ul>
<p>&hellip; or Hacker News:</p>
<ul>
<li>414 seen</li>
<li>326 dismissed (88 hit a filter)</li>
<li>51 starred, for a 12% star rate</li>
<li>29 attention score</li>
</ul>
<p>&hellip; or Daring Fireball</p>
<ul>
<li>82 seen</li>
<li>67 dismissed</li>
<li>5 starred, for a 6% star rate</li>
<li>33 attention score</li>
</ul>
<p>&hellip; or Jacobin:</p>
<ul>
<li>78 seen</li>
<li>46 dismissed</li>
<li>30 starred, for a 38% star rate</li>
<li>52 attention score</li>
</ul>
<p>I&rsquo;ve made it easy to get those numbers because I&rsquo;m still tuning the pipeline and figuring out the assorted weights, but ideal steady state is &ldquo;I have no idea what those numbers are any more, I just know I see a lot of good things and far fewer bad things; and also I argue with the inference layer less in review.&rdquo;</p>
<p>Anyhow &hellip; what is interesting to me is that I have 60 feeds running through this system, and by introspecting this system a lot, I&rsquo;ve been forced to see how much of them I actually care to read vs. what I don&rsquo;t.  That has caused me to realize that a lot of my feed list is probably either coming from habit or aspiration, not active interest. Always worth sitting with.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Brompton is a pleasant surprise and I&#39;m keeping it: h...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-12-116393334380747917/</link>
      <pubDate>Sun, 12 Apr 2026 19:15:37 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-12-116393334380747917/</guid>
      <description>&lt;p&gt;The Brompton is a pleasant surprise and I&amp;rsquo;m keeping it: &lt;a href=&#34;https://pdxmph.puddingtime.org/2026/04/12/the-brompton-is-a-pleasant.html&#34;&gt;https://pdxmph.puddingtime.org/2026/04/12/the-brompton-is-a-pleasant.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The Brompton is a pleasant surprise and I&rsquo;m keeping it: <a href="https://pdxmph.puddingtime.org/2026/04/12/the-brompton-is-a-pleasant.html">https://pdxmph.puddingtime.org/2026/04/12/the-brompton-is-a-pleasant.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>The Brompton is a pleasant surprise and I&#39;m keeping it</title>
      <link>https://mike.puddingtime.org/posts/2026-04-12-the-brompton-is-a-pleasant/</link>
      <pubDate>Sun, 12 Apr 2026 12:13:53 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-12-the-brompton-is-a-pleasant/</guid>
      <description>&lt;p&gt;I took my Brompton C-Line on the train to Eugene. I used it to bike to the Max station, then rode to Union Station, then checked it with Amtrak and picked it up in Eugene and rode it to my hotel.&lt;/p&gt;
&lt;p&gt;I could have just taken it as a carry on, but I haven&amp;rsquo;t ridden Amtrak in a while and forgot how storage space works in the compartment. My most recent rail experience was in France, and the train ride from Lyon to Paris involved some genuine chaos in the baggage area, so that was the memory I could summon and I didn&amp;rsquo;t like it.  I think I could have stuck it in the overhead bin on the Amtrak, and if there&amp;rsquo;d been no space I could have left it at the end of the car. Anyhow, it was $5 to just hand it off, and next time I&amp;rsquo;ll remember.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I took my Brompton C-Line on the train to Eugene. I used it to bike to the Max station, then rode to Union Station, then checked it with Amtrak and picked it up in Eugene and rode it to my hotel.</p>
<p>I could have just taken it as a carry on, but I haven&rsquo;t ridden Amtrak in a while and forgot how storage space works in the compartment. My most recent rail experience was in France, and the train ride from Lyon to Paris involved some genuine chaos in the baggage area, so that was the memory I could summon and I didn&rsquo;t like it.  I think I could have stuck it in the overhead bin on the Amtrak, and if there&rsquo;d been no space I could have left it at the end of the car. Anyhow, it was $5 to just hand it off, and next time I&rsquo;ll remember.</p>
<p>For as many bikes as I&rsquo;ve owned, I don&rsquo;t really know much about them. I couldn&rsquo;t predict, based on specs around gearing and geometry, how a bike will really feel. I will say that of all the bikes I&rsquo;ve owned over the years, the two that have felt the very best are my Brompton and a Trek Crossrip (one of the ones with carbon forks).</p>
<p>What is &ldquo;best&rdquo;?</p>
<p>I&rsquo;d say it&rsquo;s a combination of easy to understand stuff in the form of my riding posture and how easy it is to feel like I have good situational awareness without paying in a sense of balance, and something tangible but hard to explain in the form of I dunno what I&rsquo;d call it &hellip; time to cruising speed? Smoothness to cruising speed?</p>
<p>I guess it&rsquo;s just a gearing thing. The Crossrip and the Brompton both felt/feel easy to get up to a speed where I feel like I&rsquo;m cruising at a satisfying speed and then not pedaling too hard or too fast to stay there.</p>
<p>It doesn&rsquo;t surprise me that the Crossrip felt that way. It seems to be a well regarded bike whose departure from the lineup is lamented. It does surprise me a bit with the Brompton, given its tiny wheels and foldability. I&rsquo;ve had other, less expensive folders and you feel the tradeoffs in the ride, and even with 20&quot; wheels they don&rsquo;t have that sense of smooth ramp and balanced control.</p>
<p>When I bought the Brompton I loved the test ride and was surprised at how good it felt, but I was pretty sure it wouldn&rsquo;t feel good for a ride all the way downtown and back, which is 10 miles if I take the long way along the Springwater and more like 7 or 8 if I cut through inner southeast. I imagined it as a good bike for stuff inside five miles: Errand runs into Woodstock, maybe trips to Sellwood, but mostly as a last-couple-of-miler from the Max, or a one-way &ldquo;meet Al for drinks after work, toss it in the back&rdquo; bike.</p>
<p>In practice, though, nowhere feels too far on it. Spinning back up the hill on Clinton from downtown, and then up the hill on 51st toward Foster can get a little tiring, but it&rsquo;s not hard to find a gear and go to my happy place until those are over.</p>
<p>And it gets to a nice cruising speed. I overtook some Sunday riders on the Springwater at what felt like an easy pace and one of them muttered &ldquo;goddamn ebikes&rdquo; to his buddy as I went by.</p>
<p>Well, whatever it is, it works.</p>
<p>When I think back to 2013—the year 500 miles were enough to win the bike commute challenge at work—I did end up getting an ebike because the 20 mile round trip to work was taking a toll some days. One afternoon someone drafted me all the way from somewhere around Oaks Park to my exit at Lents and said &ldquo;maybe someday you&rsquo;ll get a real bike&rdquo; as she pedaled away. Well, I have one, and still the hate.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The exploitation will continue until foot traffic improves. ...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-12-116392595823855213/</link>
      <pubDate>Sun, 12 Apr 2026 16:07:48 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-12-116392595823855213/</guid>
      <description>&lt;p&gt;The exploitation will continue until foot traffic improves. &lt;a href=&#34;https://www.oregonlive.com/opinion/2026/04/editorial-valley-another-death-to-capitalism-proposal-from-portland-city-council.html&#34;&gt;https://www.oregonlive.com/opinion/2026/04/editorial-valley-another-death-to-capitalism-proposal-from-portland-city-council.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The exploitation will continue until foot traffic improves. <a href="https://www.oregonlive.com/opinion/2026/04/editorial-valley-another-death-to-capitalism-proposal-from-portland-city-council.html">https://www.oregonlive.com/opinion/2026/04/editorial-valley-another-death-to-capitalism-proposal-from-portland-city-council.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>The exploitation will continue until foot traffic improves.</title>
      <link>https://mike.puddingtime.org/posts/2026-04-12-the-exploitation-will-continue-until/</link>
      <pubDate>Sun, 12 Apr 2026 09:07:40 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-12-the-exploitation-will-continue-until/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.oregonlive.com/opinion/2026/04/editorial-valley-another-death-to-capitalism-proposal-from-portland-city-council.html&#34;&gt;The exploitation will continue until foot traffic improves.&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://www.oregonlive.com/opinion/2026/04/editorial-valley-another-death-to-capitalism-proposal-from-portland-city-council.html">The exploitation will continue until foot traffic improves.</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Birthday dinner with Ben and his friends</title>
      <link>https://mike.puddingtime.org/toots/2026-04-11-116384095433167904/</link>
      <pubDate>Sat, 11 Apr 2026 04:06:02 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-11-116384095433167904/</guid>
      <description>&lt;p&gt;Birthday dinner with Ben and his friends&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Birthday dinner with Ben and his friends</p>
]]></content:encoded>
    </item>
    <item>
      <title>Birthday dinner with Ben and his friends</title>
      <link>https://mike.puddingtime.org/posts/2026-04-10-birthday-dinner-with-ben-and/</link>
      <pubDate>Fri, 10 Apr 2026 21:05:28 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-10-birthday-dinner-with-ben-and/</guid>
      <description>&lt;p&gt;Birthday dinner with Ben and his friends&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/78cf62326f7c4b88969866c1f0ca2de4.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Birthday dinner with Ben and his friends</p>
<img src="/uploads/microblog/2026/78cf62326f7c4b88969866c1f0ca2de4.jpg" width="600" height="450" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>I’ve recently figured out that interactions with a p...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-10-116382117499560923/</link>
      <pubDate>Fri, 10 Apr 2026 19:43:01 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-10-116382117499560923/</guid>
      <description>&lt;p&gt;I’ve recently figured out that interactions with a particular human have taken on a curiously stilted, disjointed flavor because they’re using an LLM for coaching on how to navigate situations. Alison says she’s been watching someone’s emails at work become increasingly demanding and vaguely paranoid, and she knows it’s LLM-driven because the “author” screwed up and left a reference to a prompt intact in one &amp;hellip; &lt;a href=&#34;https://pdxmph.puddingtime.org/2026/04/10/ive-recently-figured-out-that.html&#34;&gt;https://pdxmph.puddingtime.org/2026/04/10/ive-recently-figured-out-that.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I’ve recently figured out that interactions with a particular human have taken on a curiously stilted, disjointed flavor because they’re using an LLM for coaching on how to navigate situations. Alison says she’s been watching someone’s emails at work become increasingly demanding and vaguely paranoid, and she knows it’s LLM-driven because the “author” screwed up and left a reference to a prompt intact in one &hellip; <a href="https://pdxmph.puddingtime.org/2026/04/10/ive-recently-figured-out-that.html">https://pdxmph.puddingtime.org/2026/04/10/ive-recently-figured-out-that.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>I&#39;ve recently figured out that interactions with a ...</title>
      <link>https://mike.puddingtime.org/posts/2026-04-10-ive-recently-figured-out-that/</link>
      <pubDate>Fri, 10 Apr 2026 12:41:35 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-10-ive-recently-figured-out-that/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently figured out  that interactions with a particular human have taken on a curiously stilted, disjointed flavor because  they&amp;rsquo;re using an LLM for coaching on how to navigate situations.  Alison says she&amp;rsquo;s been watching someone&amp;rsquo;s emails at work become increasingly demanding and vaguely paranoid, and she &lt;em&gt;knows&lt;/em&gt; it&amp;rsquo;s LLM-driven because the &amp;ldquo;author&amp;rdquo; screwed up and left a reference to a prompt intact in one email.&lt;/p&gt;
&lt;p&gt;For me the tell isn&amp;rsquo;t em-dashes or particular rhetorical tics, or even extreme changes. A human plainly remains somewhere in the loop.  It&amp;rsquo;s a shift in the tone and what I guess we could call shared agreements or previously understood ground truths.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve recently figured out  that interactions with a particular human have taken on a curiously stilted, disjointed flavor because  they&rsquo;re using an LLM for coaching on how to navigate situations.  Alison says she&rsquo;s been watching someone&rsquo;s emails at work become increasingly demanding and vaguely paranoid, and she <em>knows</em> it&rsquo;s LLM-driven because the &ldquo;author&rdquo; screwed up and left a reference to a prompt intact in one email.</p>
<p>For me the tell isn&rsquo;t em-dashes or particular rhetorical tics, or even extreme changes. A human plainly remains somewhere in the loop.  It&rsquo;s a shift in the tone and what I guess we could call shared agreements or previously understood ground truths.</p>
<p>On that last, I suppose it&rsquo;s a matter of taking the subjectivity we have to assume about every shared agreement or understanding—the simple wisdom of knowing that nobody ever really sees things exactly as we do—and sensing that the previous delta in understanding is the starting point for an LLM&rsquo;s stochastic narrative-building and elaboration.  A predictable and acceptable standard deviation is stretching to several standard deviations.</p>
<p>There are plenty of stories of people using LLMs to descend into a widening gyre of elaborate and dysfunctional subjectivity. As always, given how mass media works, the stories are lurid and extreme. But they always seem to start with a belief that the LLM managed to crystallize something for the person—seemed to speak to something they suspected but didn&rsquo;t have language for, or support to believe—and then began to spin out from that initial earned trust into statistically average delusion, and then decidedly abnormal madness, where an NYT or Guardian reporter eagerly awaits.</p>
<p>I don&rsquo;t think I&rsquo;m watching someone go mad. I think I&rsquo;m watching someone set aside their native competence and fundamental epistemic agency in favor of a defective cognitive prosthetic that has no mechanism or feature to mediate its own oscillations:  An understanding goes in, the delta in understanding is part of a prompt, the feedback pulls further in some random direction, the delta in understanding widens, the next prompt is even further adrift, the oscillations widen.</p>
<p>But like I said, nobody&rsquo;s going mad. I&rsquo;m not concerned for anyone&rsquo;s safety. I&rsquo;m just concerned about a relationship, and contemplating my own responsibility in the matter, because I can&rsquo;t help but wonder if more care with clarity or more patience on my part would have made an LLM a less attractive problem-solving partner.</p>
<p>I would prefer someone trying to find their way to understanding imperfectly but authentically to this.</p>
<p>I&rsquo;m not sure what to do.</p>
]]></content:encoded>
    </item>
    <item>
      <title>“I Still Prefer MCP over Skills”  Me, too. I think I get w...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-10-116378858927750976/</link>
      <pubDate>Fri, 10 Apr 2026 05:54:19 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-10-116378858927750976/</guid>
      <description>&lt;p&gt;“I Still Prefer MCP over Skills”&lt;/p&gt;
&lt;p&gt;Me, too. I think I get why skills have momentum, and among whom they have it, but MCPs provide a kind of ubiquity across UI’s that skills can’t touch.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://david.coffee/i-still-prefer-mcp-over-skills/&#34;&gt;https://david.coffee/i-still-prefer-mcp-over-skills/&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>“I Still Prefer MCP over Skills”</p>
<p>Me, too. I think I get why skills have momentum, and among whom they have it, but MCPs provide a kind of ubiquity across UI’s that skills can’t touch.</p>
<p><a href="https://david.coffee/i-still-prefer-mcp-over-skills/">https://david.coffee/i-still-prefer-mcp-over-skills/</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;I Still Prefer MCP over Skills&#34; Me, too. I think I get why ...</title>
      <link>https://mike.puddingtime.org/posts/2026-04-09-i-still-prefer-mcp-over/</link>
      <pubDate>Thu, 09 Apr 2026 22:54:17 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-09-i-still-prefer-mcp-over/</guid>
      <description>&lt;p&gt;&amp;ldquo;I Still Prefer MCP over Skills&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Me, too. I think I get why skills have momentum, and among whom they have it, but MCPs provide a kind of ubiquity across UI&amp;rsquo;s that skills can&amp;rsquo;t touch.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://david.coffee/i-still-prefer-mcp-over-skills/&#34;&gt;david.coffee/i-still-p&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;I Still Prefer MCP over Skills&rdquo;</p>
<p>Me, too. I think I get why skills have momentum, and among whom they have it, but MCPs provide a kind of ubiquity across UI&rsquo;s that skills can&rsquo;t touch.</p>
<p><a href="https://david.coffee/i-still-prefer-mcp-over-skills/">david.coffee/i-still-p&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Union Station</title>
      <link>https://mike.puddingtime.org/toots/2026-04-09-116377089949483363/</link>
      <pubDate>Thu, 09 Apr 2026 22:24:27 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-09-116377089949483363/</guid>
      <description>&lt;p&gt;Union Station&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Union Station</p>
]]></content:encoded>
    </item>
    <item>
      <title>Union Station</title>
      <link>https://mike.puddingtime.org/posts/2026-04-09-union-station/</link>
      <pubDate>Thu, 09 Apr 2026 15:24:17 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-09-union-station/</guid>
      <description>&lt;p&gt;Union Station&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/0828f47b127c4da3950f4ab2c9371367.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Union Station</p>
<img src="/uploads/microblog/2026/0828f47b127c4da3950f4ab2c9371367.jpg" width="450" height="600" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>Headed for Eugene to see Ben</title>
      <link>https://mike.puddingtime.org/toots/2026-04-09-116375581905038489/</link>
      <pubDate>Thu, 09 Apr 2026 16:00:56 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-09-116375581905038489/</guid>
      <description>&lt;p&gt;Headed for Eugene to see Ben&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Headed for Eugene to see Ben</p>
]]></content:encoded>
    </item>
    <item>
      <title>Headed for Eugene to see Ben</title>
      <link>https://mike.puddingtime.org/posts/2026-04-09-headed-for-eugene-to-see/</link>
      <pubDate>Thu, 09 Apr 2026 09:00:44 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-09-headed-for-eugene-to-see/</guid>
      <description>&lt;p&gt;Headed for Eugene to see Ben&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/4def164ca0e847439e3bd84c980b21ae.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Headed for Eugene to see Ben</p>
<img src="/uploads/microblog/2026/4def164ca0e847439e3bd84c980b21ae.jpg" width="450" height="600" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>RSS Topic Fatigue: https://pdxmph.puddingtime.org/2026/04/08...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-09-116373168867447251/</link>
      <pubDate>Thu, 09 Apr 2026 05:47:16 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-09-116373168867447251/</guid>
      <description>&lt;p&gt;RSS Topic Fatigue: &lt;a href=&#34;https://pdxmph.puddingtime.org/2026/04/08/rss-topic-fatigue.html&#34;&gt;https://pdxmph.puddingtime.org/2026/04/08/rss-topic-fatigue.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>RSS Topic Fatigue: <a href="https://pdxmph.puddingtime.org/2026/04/08/rss-topic-fatigue.html">https://pdxmph.puddingtime.org/2026/04/08/rss-topic-fatigue.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>RSS Topic Fatigue</title>
      <link>https://mike.puddingtime.org/posts/2026-04-08-rss-topic-fatigue/</link>
      <pubDate>Wed, 08 Apr 2026 22:46:40 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-08-rss-topic-fatigue/</guid>
      <description>&lt;p&gt;I subscribe to a lot of RSS feeds that are very sensitive to trends: The &amp;ldquo;popular&amp;rdquo; feeds from RiL services, the Hacker News front page, lobste.rs, and a few Google News topical feeds. I like the diversity of topics I get from it, but it&amp;rsquo;s also very susceptible to things coming through in waves. The past few days it has been the Mythos model, a spurt of Gemini features, Iran Iran Iran, reaction and counter-reaction, and counter-counter-reaction to a few high-profile articles about tech.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I subscribe to a lot of RSS feeds that are very sensitive to trends: The &ldquo;popular&rdquo; feeds from RiL services, the Hacker News front page, lobste.rs, and a few Google News topical feeds. I like the diversity of topics I get from it, but it&rsquo;s also very susceptible to things coming through in waves. The past few days it has been the Mythos model, a spurt of Gemini features, Iran Iran Iran, reaction and counter-reaction, and counter-counter-reaction to a few high-profile articles about tech.</p>
<p>The triage UI lets me train the triage service on topics, but when I designed it I designed it less as a fine control and more as a rolling, broad collection of signals. I do have a feature that lets me block authors, but I don&rsquo;t do it the way I think a lot of people would, to get rid of people I don&rsquo;t agree with but rather because some reporters cover some things I never want to read about, and it&rsquo;s a way to just whack out big tranches of material once I can see that the author covers a beat I don&rsquo;t care about.  Generally, though, the system is slowly and gently learning from what gets skipped, or very broadly named.</p>
<p>So when a big topical swell comes through, I haven&rsquo;t had a way to deal with it. I don&rsquo;t want to downscore the <em>topic du jour</em> because I don&rsquo;t want to drive it from sight forever. I just want, after seeing the 10th article about it go by in the triage tool, to make it go away for a bit.</p>
<p>So this evening I built that feature in the form of a topic snooze:</p>
<p>I&rsquo;ve got a Haiku agent doing the scoring on every article that passes into the system anyhow. It&rsquo;s consulting my existing preferences and attention patterns and providing a little summary about why it&rsquo;s scoring each article the way it does. So now I&rsquo;m also using that inference pass to extract three or four likely topics from each article during scoring. The prompt is a pretty simple &ldquo;figure out three things this could be about at a middling level of specificity.&rdquo;</p>
<p>Those topics go into a table that records the topic and has columns for when it was first seen, when it was last seen, and how often it has been seen. While the topic is &ldquo;live,&rdquo; the system is just tallying and exposing the topic in the feedback UI for each article. If I triage an article, the UI shows me the inferred topics so I can choose to snooze them. If a topic gets snoozed, any articles it&rsquo;s attached to that haven&rsquo;t been selected for reading later get triaged out on the spot. For the duration of the topic&rsquo;s &ldquo;aliveness&rdquo; &ndash; its rolling daily appearance average is above some threshold per day &ndash; articles about that topic get skipped without impacting the overall interest score for that topic. Once the topic slides below the &ldquo;aliveness&rdquo; threshold, articles matching it are allowed back into the queue.</p>
<p>I think it will be useful, and I made sure to include UI that lets me tune the params for defining snooze duration and the aliveness state for a topic. The nice thing about a tool like this is that it&rsquo;s an opportunity to contemplate what harm would be done by not seeing an article I would have otherwise if I get something wrong with this, which is pretty much &ldquo;none,&rdquo; and that is a really good thing to remember.</p>
<p>It is also a variation on a theme that continues to emerge and evolve during this current period of vibecoding assorted tools and doing more to work inference into them than I was a year ago:</p>
<p>Even though the stakes are pretty low if the system gets it wrong, I always want my observation port and my knobs:</p>
<p>Inference is great in the spaces, doing things that I&rsquo;d just consume a dependency to get (e.g. topic extraction) or understanding roughly &ndash; well enough &ndash; what my assorted likes and dislikes add up to for a given article. But I still want to be in the loop. Human in the loop doesn&rsquo;t always have to mean &ldquo;human hovering over the lever,&rdquo; it can just mean &ldquo;human nudging the flow this way and that.&rdquo;</p>
<p>I  <em>want</em> the system to gradually attain more and more autonomy as I stick to using it. I actually like it well enough now that I don&rsquo;t even use RSS readers: I do triage in the mobile or desktop UI, and I use a RiL service to read what comes out the other side. Over the course of the day, about 8 percent of what comes through the system gets flagged for reading, and about 35 percent is auto-skipped before I have to triage it, either due to a deterministic rule (an author) or inference scoring.</p>
<p>When I pull the stats, I see that I&rsquo;ve only overridden 2.3 percent of the inference system&rsquo;s decisions.  If I doubled the &ldquo;kill with no review&rdquo; threshold, I would end up not even seeing 40% of the total volume of content in feeds I&rsquo;m subscribed to. I had Claude pull the numbers and did a quick sanity check with items I starred for later reading within that threshold, and it looks like I&rsquo;d probably have 1.9% &ldquo;regrettable autodeletes&rdquo; if I just let the system become that much more aggressive.</p>
<p>I don&rsquo;t have numbers on how much time I spend quickly reviewing kill proposals right now, but having 40% fewer things to even consider in exchange for maybe missing a good article or two a day seems like a decent tradeoff.</p>
]]></content:encoded>
    </item>
    <item>
      <title>09-23-25-26-29-33-35-39-46 58: https://pdxmph.puddingtime.or...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-09-116372854554327386/</link>
      <pubDate>Thu, 09 Apr 2026 04:27:20 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-09-116372854554327386/</guid>
      <description>&lt;p&gt;09-23-25-26-29-33-35-39-46 58: &lt;a href=&#34;https://pdxmph.puddingtime.org/2026/04/08/212530.html&#34;&gt;https://pdxmph.puddingtime.org/2026/04/08/212530.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>09-23-25-26-29-33-35-39-46 58: <a href="https://pdxmph.puddingtime.org/2026/04/08/212530.html">https://pdxmph.puddingtime.org/2026/04/08/212530.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>09-23-25-26-29-33-35-39-46 ... 58</title>
      <link>https://mike.puddingtime.org/posts/2026-04-08-212530/</link>
      <pubDate>Wed, 08 Apr 2026 21:25:30 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-08-212530/</guid>
      <description>&lt;p&gt;12 years ago the Heartbleed vulnerability was disclosed and I started my birthday with an emergency meeting of engineering staff. I had just started  leading the tech writing team at Puppet.  While Puppet itself was fine, we knew that customers were probably running it on platforms that weren&amp;rsquo;t fine, and everyone agreed that we needed to help our users, so we did it with documentation about how to patch it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>12 years ago the Heartbleed vulnerability was disclosed and I started my birthday with an emergency meeting of engineering staff. I had just started  leading the tech writing team at Puppet.  While Puppet itself was fine, we knew that customers were probably running it on platforms that weren&rsquo;t fine, and everyone agreed that we needed to help our users, so we did it with documentation about how to patch it.</p>
<p>I couldn&rsquo;t contribute anything to the docs themselves: We had two great writers on that, so I just got on with my day. The docs got written, and we staged them for publication, but couldn&rsquo;t publish until nine or ten that evening. So after a day of feeling a little useless for not being able to help with the docs, I realized there was somewhere I could help: I could send the team home and wait around until we got the word it was okay to release our docs and the accompanying blog post.</p>
<p>So I called Al and told her I&rsquo;d be late, got dinner downtown, then lurked around the office in the Pearl District waiting for the word so I could pop open a shell and run the deployment.</p>
<p>Someone on the marketing team who was waiting around to ship the blog post stopped by and asked, &ldquo;isn&rsquo;t it your birthday?&rdquo; Yeah, I said, but we had these docs to push and the team had done all the hard work, so I figured I&rsquo;d wrap it up so they could get on with their evenings.</p>
<p>&ldquo;That sucks,&rdquo; she said. &ldquo;Sorry.&rdquo;</p>
<p>&ldquo;Well,&rdquo; I said, &ldquo;I don&rsquo;t know how many users we have but I know it&rsquo;s a lot. And these docs are going to help them a lot. So it&rsquo;s hard to complain: A birthday spent helping all those people seems like a good birthday present.&rdquo;</p>
<p>&ldquo;Fair enough,&rdquo; she said, and we sat in companionable silence until we could click our respective &ldquo;post&rdquo; or &ldquo;deploy&rdquo; buttons and head home.</p>
<p>I got home pretty late that night. Al had gone to sleep, and there was a cupcake on the counter with a candle sticking out of it, and that was it for the birthday where I noted that I could officially round my age up to 50.</p>
<p>Some birthdays I work, some birthdays I don&rsquo;t. I spent my 25th birthday in Basic Training. My 26th I was in a retransmission station in Korea. My 9th birthday didn&rsquo;t officially happen because it was suspended over an infraction that caused my mother to believe I should spend the day contemplating what it would be like to not be alive to have birthdays. There may have still been a cake, but the three months leading up to it were spent contemplating the void, which is probably where <a href="https://mike.puddingtime.org/posts/2014-04-05-09-23-25-26-29-33-35-39-46/">posts like the one I wrote three days before Heartbleed Day</a> come from.</p>
<p><em>This</em> birthday I worked, and it was a pretty good day: I had my weekly 1:1 with my favorite work person, I had a quiet conversation with someone on my team where we reaffirmed the best parts of our connection, and the last meeting of the day was spent with a colleague in Australia, figuring out how to help her do a thing she&rsquo;s trying to do. Nothing that moves any cosmic needle or dents the universe. Just another day.</p>
<p>Today I re-read <a href="https://mike.puddingtime.org/posts/2014-04-05-09-23-25-26-29-33-35-39-46/">that birthday post</a> I wrote three days before Heartbleed Day, as I do every year, always wondering if the math is going to come out different for me this time, or if the answer will change, and it has not:</p>
<blockquote>
<p>Mostly I think we’re born in a house that’s on fire, and there’ll be a moment between flame and ash.</p>
</blockquote>
<blockquote>
<p>We’ll need to have been kind.</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>RE: https://neuromatch.social/@jonny/116327281523650410  &gt; &#34;...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-06-116354863348274826/</link>
      <pubDate>Mon, 06 Apr 2026 00:11:56 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-06-116354863348274826/</guid>
      <description>&lt;p&gt;RE: &lt;a href=&#34;https://neuromatch.social/@jonny/116327281523650410&#34;&gt;https://neuromatch.social/@jonny/116327281523650410&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;&amp;hellip; just because you have binarized your thinking does not mean everyone else has.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;anyway if the mental image you are conjuring for your interlocuters positions them as always knowing less than you by default, that might be something to look into in yourself!&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sage.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>RE: <a href="https://neuromatch.social/@jonny/116327281523650410">https://neuromatch.social/@jonny/116327281523650410</a></p>
<blockquote>
<p>&ldquo;&hellip; just because you have binarized your thinking does not mean everyone else has.&rdquo;</p>
</blockquote>
<blockquote>
<p>&ldquo;anyway if the mental image you are conjuring for your interlocuters positions them as always knowing less than you by default, that might be something to look into in yourself!&rdquo;</p>
</blockquote>
<p>Sage.</p>
]]></content:encoded>
    </item>
    <item>
      <title>DIY/Self-hosted RSS triage, RiL, and bookmarks: h...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-05-116354054708678664/</link>
      <pubDate>Sun, 05 Apr 2026 20:46:17 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-05-116354054708678664/</guid>
      <description>&lt;p&gt;DIY/Self-hosted RSS triage, RiL, and bookmarks: &lt;a href=&#34;https://pdxmph.puddingtime.org/2026/04/05/diyselfhosted-rss-triage-ril-and.html&#34;&gt;https://pdxmph.puddingtime.org/2026/04/05/diyselfhosted-rss-triage-ril-and.html&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>DIY/Self-hosted RSS triage, RiL, and bookmarks: <a href="https://pdxmph.puddingtime.org/2026/04/05/diyselfhosted-rss-triage-ril-and.html">https://pdxmph.puddingtime.org/2026/04/05/diyselfhosted-rss-triage-ril-and.html</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>DIY/Self-hosted RSS triage, RiL, and bookmarks </title>
      <link>https://mike.puddingtime.org/posts/2026-04-05-diyselfhosted-rss-triage-ril-and/</link>
      <pubDate>Sun, 05 Apr 2026 13:45:40 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-05-diyselfhosted-rss-triage-ril-and/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://wallabag.org/&#34;&gt;Wallabag&lt;/a&gt; seems to run a lot better than it used to the last time I self-hosted it. &lt;a href=&#34;https://linkding.link/&#34;&gt;Linkding&lt;/a&gt; is as good as it was the last time. So I&amp;rsquo;ve got a full self-hosted reading stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The RSS triager
&lt;ul&gt;
&lt;li&gt;Lets me set good/bad topics&lt;/li&gt;
&lt;li&gt;Lets me block, downweight, or upweight authors&lt;/li&gt;
&lt;li&gt;Lets me block, downweight, or upweight topics&lt;/li&gt;
&lt;li&gt;Learns from my &amp;ldquo;starred&amp;rdquo; links&lt;/li&gt;
&lt;li&gt;Uses weighting and scoring to filter feeds and and serve them via the Fever API&lt;/li&gt;
&lt;li&gt;Automatically passes high-scoring articles through to my RiL service&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wallabag for RiL (Replaces any/all of Readwise, Pocket, Instapaper)
&lt;ul&gt;
&lt;li&gt;Starred in Wallabag passes the link through to the permanent link saving service&lt;/li&gt;
&lt;li&gt;Decent web app, iPhone app, and looking forward to trying out its Android app on the Boox&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Linkding for my long-term links archive
&lt;ul&gt;
&lt;li&gt;Replaces pinboard.in&lt;/li&gt;
&lt;li&gt;Has a handy search injection sidebar &amp;ndash; see what you&amp;rsquo;ve already bookmarked alongside new search results&lt;/li&gt;
&lt;li&gt;Understands the classic bookmarks.html format&lt;/li&gt;
&lt;li&gt;High quality iOS app&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The triager is mine because nothing does quite what I want there. feedly tries to, but why pay for something less reliable and less tailored than what I could make for myself?&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://wallabag.org/">Wallabag</a> seems to run a lot better than it used to the last time I self-hosted it. <a href="https://linkding.link/">Linkding</a> is as good as it was the last time. So I&rsquo;ve got a full self-hosted reading stack:</p>
<ul>
<li>The RSS triager
<ul>
<li>Lets me set good/bad topics</li>
<li>Lets me block, downweight, or upweight authors</li>
<li>Lets me block, downweight, or upweight topics</li>
<li>Learns from my &ldquo;starred&rdquo; links</li>
<li>Uses weighting and scoring to filter feeds and and serve them via the Fever API</li>
<li>Automatically passes high-scoring articles through to my RiL service</li>
</ul>
</li>
<li>Wallabag for RiL (Replaces any/all of Readwise, Pocket, Instapaper)
<ul>
<li>Starred in Wallabag passes the link through to the permanent link saving service</li>
<li>Decent web app, iPhone app, and looking forward to trying out its Android app on the Boox</li>
</ul>
</li>
<li>Linkding for my long-term links archive
<ul>
<li>Replaces pinboard.in</li>
<li>Has a handy search injection sidebar &ndash; see what you&rsquo;ve already bookmarked alongside new search results</li>
<li>Understands the classic bookmarks.html format</li>
<li>High quality iOS app</li>
</ul>
</li>
</ul>
<p>The triager is mine because nothing does quite what I want there. feedly tries to, but why pay for something less reliable and less tailored than what I could make for myself?</p>
<p>The RiL service is fungible. I considered going back to Instapaper or just hanging on to Readwise, but I don&rsquo;t need to. The bookmarking service is fungible, too. I&rsquo;ve just had good luck with Linkding. Both come with nice mobile apps and a number of extensions, etc. that I don&rsquo;t have to make for myself.</p>
]]></content:encoded>
    </item>
    <item>
      <title>https://apfel.franzai.com gives you an interface to the l...</title>
      <link>https://mike.puddingtime.org/toots/2026-04-04-116347274916498155/</link>
      <pubDate>Sat, 04 Apr 2026 16:02:05 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/toots/2026-04-04-116347274916498155/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://apfel.franzai.com&#34;&gt;https://apfel.franzai.com&lt;/a&gt; gives you an interface to the local LLM Apple ships on macOS. It has a small context window and is interesting perhaps for the way you could use it to wire inference into a shell script. It’s right about some things. I hope nobody from Planet Apple plans a roadtrip to Oregon with it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://apfel.franzai.com">https://apfel.franzai.com</a> gives you an interface to the local LLM Apple ships on macOS. It has a small context window and is interesting perhaps for the way you could use it to wire inference into a shell script. It’s right about some things. I hope nobody from Planet Apple plans a roadtrip to Oregon with it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>[apfel][] gives you an interface to the local LLM Apple ...</title>
      <link>https://mike.puddingtime.org/posts/2026-04-04-apfel-gives-you-an-interface/</link>
      <pubDate>Sat, 04 Apr 2026 09:01:26 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-04-04-apfel-gives-you-an-interface/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://apfel.franzai.com&#34;&gt;apfel&lt;/a&gt; gives you an interface to the local LLM Apple ships on macOS. It has a small context window and is interesting perhaps for the way you could use it to wire inference into a shell script. It&amp;rsquo;s right about some things. I hope nobody from Planet Apple plans a roadtrip to Oregon with it.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/af9f2a8775.jpg&#34; width=&#34;580&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://apfel.franzai.com">apfel</a> gives you an interface to the local LLM Apple ships on macOS. It has a small context window and is interesting perhaps for the way you could use it to wire inference into a shell script. It&rsquo;s right about some things. I hope nobody from Planet Apple plans a roadtrip to Oregon with it.</p>
<img src="/uploads/microblog/2026/af9f2a8775.jpg" width="580" height="600" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>I guess I reinvented feedly</title>
      <link>https://mike.puddingtime.org/posts/2026-03-31-i-guess-i-reinvented-feedly/</link>
      <pubDate>Tue, 31 Mar 2026 17:38:56 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-31-i-guess-i-reinvented-feedly/</guid>
      <description>&lt;p&gt;I was sitting around over coffee this morning thinking to myself, &amp;ldquo;the current regime of blocking authors as a proxy for blocking the topics they cover is fine and all, but I don&amp;rsquo;t know if I want to be locked into Readwise forever. What&amp;rsquo;d be nice would be a way to permanently cleanse the feeds, and also fine-tune that cleansing as sites change, authors come and go, etc.&lt;/p&gt;
&lt;p&gt;So today I sort of flipped the model from triaging incoming articles, taking an incremental approach to learning my preferences, and pattern-matching on authors to reviewing feeds and pattern-matching alternately on authors, URL characteristics, and a bit of inference around topics:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I was sitting around over coffee this morning thinking to myself, &ldquo;the current regime of blocking authors as a proxy for blocking the topics they cover is fine and all, but I don&rsquo;t know if I want to be locked into Readwise forever. What&rsquo;d be nice would be a way to permanently cleanse the feeds, and also fine-tune that cleansing as sites change, authors come and go, etc.</p>
<p>So today I sort of flipped the model from triaging incoming articles, taking an incremental approach to learning my preferences, and pattern-matching on authors to reviewing feeds and pattern-matching alternately on authors, URL characteristics, and a bit of inference around topics:</p>
<ul>
<li>Visit a feed I&rsquo;m tracking</li>
<li>List the articles</li>
<li>Click an article with the option to block author, URL pattern, or click &ldquo;I don&rsquo;t like this&rdquo;</li>
<li>If I click &ldquo;I don&rsquo;t like this,&rdquo; I can click &ldquo;content type&rdquo; or &ldquo;topic,&rdquo; or fill in a field. Then Haiku takes a pass and proposes some heuristics it can apply to articles in the feed.</li>
</ul>
<p>That&rsquo;s just a variation on what I&rsquo;ve been doing anyhow, but now the tool republishes a private version of the feed that is dynamically filtered on the rules and feedback I&rsquo;ve provided so I can subscribe to it from any regular old RSS reader or service instead of being locked in to Feedly, Readwise, Inkwell, etc.  In Inkwell, the tool can even swap in the cleaned up feed automatically, cutting down on how much triage even has to happen.</p>
<img src="/uploads/microblog/2026/paste-c4789ed2.png" width="516" height="600" alt="A screenshot shows an RSS Triage webpage featuring a list of articles, including titles, authors, and topics, with some parts highlighted in red text.">
]]></content:encoded>
    </item>
    <item>
      <title>Impeccable &amp; Superpowers </title>
      <link>https://mike.puddingtime.org/posts/2026-03-30-impeccable-superpowers/</link>
      <pubDate>Mon, 30 Mar 2026 22:25:11 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-30-impeccable-superpowers/</guid>
      <description>&lt;p&gt;Worth pausing to note how much better Claude Code/Opus 4.6 are than wherever they were at about a year ago. The biggest improvements, given my earliest complaints, are around memory and long-term context preservation: Fewer repeat mistakes, fewer bananas derails.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also added a couple of tools that have made the experience much better:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/obra/superpowers&#34;&gt;Superpowers&lt;/a&gt; is a development workflow that adds a set of skills including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;brainstorming&lt;/li&gt;
&lt;li&gt;writing-plans&lt;/li&gt;
&lt;li&gt;subagent-driven-development or executing-plans&lt;/li&gt;
&lt;li&gt;requesting-code-review&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The brainstorming and planning phase involve a lot of helpful, clarifying questions. The spec files it produces are helpful. The reviews it runs catch inconsistencies and gaps. It adds a few minutes to work on any given feature, but the rate of &amp;ldquo;got it in one&amp;rdquo; has shot through the roof, and taking a moment to read its specs and plans offers a lot of reassurance that there&amp;rsquo;ll be fewer misalignments.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Worth pausing to note how much better Claude Code/Opus 4.6 are than wherever they were at about a year ago. The biggest improvements, given my earliest complaints, are around memory and long-term context preservation: Fewer repeat mistakes, fewer bananas derails.</p>
<p>I&rsquo;ve also added a couple of tools that have made the experience much better:</p>
<p><a href="https://github.com/obra/superpowers">Superpowers</a> is a development workflow that adds a set of skills including:</p>
<ul>
<li>brainstorming</li>
<li>writing-plans</li>
<li>subagent-driven-development or executing-plans</li>
<li>requesting-code-review</li>
</ul>
<p>The brainstorming and planning phase involve a lot of helpful, clarifying questions. The spec files it produces are helpful. The reviews it runs catch inconsistencies and gaps. It adds a few minutes to work on any given feature, but the rate of &ldquo;got it in one&rdquo; has shot through the roof, and taking a moment to read its specs and plans offers a lot of reassurance that there&rsquo;ll be fewer misalignments.</p>
<p>On the other end of the process, <a href="https://impeccable.style">Impeccable</a> is a set of visual design skills that address gaps in typography, layout, color, visual rhythm, and more.  The starting point with an Impeccable session is the <code>/critique</code> skill, which leads to a set of recommendations on which of its many skills to use.</p>
<p>A lot of the stuff Claude Code produced for aSystem/aCloud was very &ldquo;my first Rails app default view&rdquo; in quality. A little back and forth with Claude cleaned up the worst of it, but Impeccable acts a lot more like a design partner, asking about the app&rsquo;s &ldquo;brand image,&rdquo; and walking through questionnaires that are a little educational on their own.  Pages that felt like long slogs through undifferentiated metadata became a lot more readable very quickly.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Adventures in RSS Curation</title>
      <link>https://mike.puddingtime.org/posts/2026-03-29-adventures-in-rss-curation/</link>
      <pubDate>Sun, 29 Mar 2026 19:05:39 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-29-adventures-in-rss-curation/</guid>
      <description>&lt;p&gt;I worked more on the RSS triage tool, abstracting both the star/save targets (currently have &lt;a href=&#34;https://micro.ink&#34;&gt;Inkwell API&lt;/a&gt;, &lt;a href=&#34;https://pinboard.in&#34;&gt;pinboard&lt;/a&gt;, and &lt;a href=&#34;https://readwise.io&#34;&gt;Readwise&lt;/a&gt;) and the feed sources (currently just Inkwell API and Readwise feed items).&lt;/p&gt;
&lt;p&gt;Readwise is a nice addition, because its API tracks your percent completed in an article, and the triage tool is watching for that to go to &amp;ldquo;100&amp;rdquo; before it considers an article a good recommendation. Inkwell just had &amp;ldquo;read/unread&amp;rdquo; via whatever RSS reader, which sets things to &amp;ldquo;read&amp;rdquo; on open (or requires a manual mark-read action). There&amp;rsquo;s also some interesting signal to be mined from Readwise partial reads, too, so that&amp;rsquo;s on the list.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I worked more on the RSS triage tool, abstracting both the star/save targets (currently have <a href="https://micro.ink">Inkwell API</a>, <a href="https://pinboard.in">pinboard</a>, and <a href="https://readwise.io">Readwise</a>) and the feed sources (currently just Inkwell API and Readwise feed items).</p>
<p>Readwise is a nice addition, because its API tracks your percent completed in an article, and the triage tool is watching for that to go to &ldquo;100&rdquo; before it considers an article a good recommendation. Inkwell just had &ldquo;read/unread&rdquo; via whatever RSS reader, which sets things to &ldquo;read&rdquo; on open (or requires a manual mark-read action). There&rsquo;s also some interesting signal to be mined from Readwise partial reads, too, so that&rsquo;s on the list.</p>
<p>Honestly, this could just be called &ldquo;The Oregonianator,&rdquo; because <em>most</em> feeds I bother with aren&rsquo;t so godawful on signal-to-noise. I might skip things because they&rsquo;re not my cup of tea on another feed, but the Oregonian&rsquo;s catch-all RSS  seems designed to get people to swear off RSS: So much filler, junk, clickbait, and syndicated content. When I wrote the outgoing EiC last year she offered a half-hearted defense of it all that sounded more like a hostage statement, vaguely alluding to the idea that the O&rsquo;s web operation isn&rsquo;t beholden to the editorial side. It feels like it&rsquo;s all premised on a 15-year-old conception of SEO that requires high-churn content. It feels  familiar to me because I had to do it for a while.</p>
<p>Architecturally, I could reduce this to a worker on a cron job that passes each article through user rules, then passes the survivors through to beefed up inference. Unlike RSS feeds, which have no state, Readwise would support this approach because things it finds in RSS become articles that can be removed from your queue. The other idea I considered was creating and serving a shadow Oregonian feed that&rsquo;s been through triage.</p>
<p>For now, though, after a few days of training, I&rsquo;ve pivoted the tool&rsquo;s primary interface to a review system: There&rsquo;s enough training data that the tool&rsquo;s 0.1 - 1.0 confidence scale is pretty good at south of 0.15 and north of 0.7. So I let the app automatically remove articles at 0.15 or lower, and automatically promote 0.7 or higher. I&rsquo;ll keep on training and see what I can do to narrow the band. There&rsquo;s also a queue where I can fish a mistaken deletion out within 24 hours. The traditional triage queue remains, as well, for things that fall in between those two scores.</p>
<p>It makes me want to add more sources, because I&rsquo;ve got a better way to triage them.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;Folk are getting dangerously attached to AI that always ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-28-folk-are-getting-dangerously-attached/</link>
      <pubDate>Sat, 28 Mar 2026 10:53:57 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-28-folk-are-getting-dangerously-attached/</guid>
      <description>&lt;p&gt;&amp;ldquo;Folk are getting dangerously attached to AI that always tells them they&amp;rsquo;re right&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t see this as particularly distinguishable from a large volume of social media interactions generally. Maybe we&amp;rsquo;ve achieved AGI after all.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theregister.com/2026/03/27/sycophantic_ai_risks/&#34;&gt;www.theregister.com/2026/03/2&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/6bd0078b8d.jpg&#34; width=&#34;600&#34; height=&#34;190&#34; alt=&#34;&amp;quot;Overall, deployed LLMs overwhelmingly affirm user actions, even against human consensus or in harmful contexts,&amp;quot; the team found.&amp;10;&amp;10;As for how AI sycophancy affects humans, the team had a considerable sample size of 2,405 people who both roleplayed scenarios and shared personal instances where a potentially harmful decision could have been made. AI influenced participant judgments across three different experiments, they found.&amp;10;&amp;10;&amp;quot;Participants exposed to sycophantic responses judged themselves more &#39;in the right,&#39;&amp;quot; the team said. &amp;quot;They were [also] less willing to take reparative actions like apologizing, taking initiative to improve the situation, or changing some aspect of their own behavior.&amp;quot;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;Folk are getting dangerously attached to AI that always tells them they&rsquo;re right&rdquo;</p>
<p>I don&rsquo;t see this as particularly distinguishable from a large volume of social media interactions generally. Maybe we&rsquo;ve achieved AGI after all.</p>
<p><a href="https://www.theregister.com/2026/03/27/sycophantic_ai_risks/">www.theregister.com/2026/03/2&hellip;</a></p>
<img src="/uploads/microblog/2026/6bd0078b8d.jpg" width="600" height="190" alt="&quot;Overall, deployed LLMs overwhelmingly affirm user actions, even against human consensus or in harmful contexts,&quot; the team found.&10;&10;As for how AI sycophancy affects humans, the team had a considerable sample size of 2,405 people who both roleplayed scenarios and shared personal instances where a potentially harmful decision could have been made. AI influenced participant judgments across three different experiments, they found.&10;&10;&quot;Participants exposed to sycophantic responses judged themselves more 'in the right,'&quot; the team said. &quot;They were [also] less willing to take reparative actions like apologizing, taking initiative to improve the situation, or changing some aspect of their own behavior.&quot;">
]]></content:encoded>
    </item>
    <item>
      <title>Generational talent. youtu.be/xfJfrZ3N...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-28-104658/</link>
      <pubDate>Sat, 28 Mar 2026 10:46:58 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-28-104658/</guid>
      <description>&lt;p&gt;Generational talent.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/xfJfrZ_3Ndk?si=t7jzGm0bWwlG3uSI&#34;&gt;youtu.be/xfJfrZ_3N&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Generational talent.</p>
<p><a href="https://youtu.be/xfJfrZ_3Ndk?si=t7jzGm0bWwlG3uSI">youtu.be/xfJfrZ_3N&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Using my RSS triage tool, I&#39;ve almost completely isolated ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-28-using-my-rss-triage-tool/</link>
      <pubDate>Sat, 28 Mar 2026 10:27:50 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-28-using-my-rss-triage-tool/</guid>
      <description>&lt;p&gt;Using my RSS triage tool, I&amp;rsquo;ve almost completely isolated the most obnoxious parts of &lt;a href=&#34;https://oregonlive.com&#34;&gt;The O&lt;/a&gt;. They use stringers/syndicators for their thinnest content. Gives me an idea to add an author lookup to check the tool&amp;rsquo;s memory for associated articles and just permablock them.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Using my RSS triage tool, I&rsquo;ve almost completely isolated the most obnoxious parts of <a href="https://oregonlive.com">The O</a>. They use stringers/syndicators for their thinnest content. Gives me an idea to add an author lookup to check the tool&rsquo;s memory for associated articles and just permablock them.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I&#39;ve been using macOS screen sharing between MacBook and ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-28-ive-been-using-macos-screen/</link>
      <pubDate>Sat, 28 Mar 2026 10:14:59 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-28-ive-been-using-macos-screen/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using macOS screen sharing between MacBook and mini and I&amp;rsquo;m a little surprised at how responsive it is. No more running upstairs when a CLI process opens a browser for oauth grants or whatever. In fullscreen and dynamic scaling I sometimes forget I&amp;rsquo;m in Screen Sharing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been using macOS screen sharing between MacBook and mini and I&rsquo;m a little surprised at how responsive it is. No more running upstairs when a CLI process opens a browser for oauth grants or whatever. In fullscreen and dynamic scaling I sometimes forget I&rsquo;m in Screen Sharing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A while back I added some instructions to Claude to push ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-27-a-while-back-i-added/</link>
      <pubDate>Fri, 27 Mar 2026 17:26:54 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-27-a-while-back-i-added/</guid>
      <description>&lt;p&gt;A while back I added some instructions to Claude to push back when I have a big idea that is not something I&amp;rsquo;d call one of my purposes. It took some back and forth to get the right level of pushback, but I appreciate past me for thinking of it.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/paste-f4631a01.png&#34; width=&#34;600&#34; height=&#34;186&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>A while back I added some instructions to Claude to push back when I have a big idea that is not something I&rsquo;d call one of my purposes. It took some back and forth to get the right level of pushback, but I appreciate past me for thinking of it.</p>
<img src="/uploads/microblog/2026/paste-f4631a01.png" width="600" height="186" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>RSS triage tool</title>
      <link>https://mike.puddingtime.org/posts/2026-03-25-rss-triage-tool/</link>
      <pubDate>Wed, 25 Mar 2026 22:55:25 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-25-rss-triage-tool/</guid>
      <description>&lt;p&gt;A long while back NetNewsWire had an engagement score available to the scripting library. I used it to help me figure out which feeds I actually read and which I didn&amp;rsquo;t, and I&amp;rsquo;d unsubscribe from the noise. The newest incarnation of NNW doesn&amp;rsquo;t have that, and I use Unread anyhow, but I wanted to update the concept with AI, so I made a web-based RSS triage tool.&lt;/p&gt;
&lt;p&gt;micro.blog&amp;rsquo;s recent-ish &lt;a href=&#34;https://micro.ink&#34;&gt;Inkwell&lt;/a&gt; provides an API. The app hits the API for unread articles, and I can love/hate them (along with a way to train for/against source sites, authors, keywords, and topics) or star them (in which case it hits the Inkwell API and stars the article so it&amp;rsquo;ll pop up in Unread).  In addition to my direct feedback, I&amp;rsquo;ve also got a topical list that adds weight.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A long while back NetNewsWire had an engagement score available to the scripting library. I used it to help me figure out which feeds I actually read and which I didn&rsquo;t, and I&rsquo;d unsubscribe from the noise. The newest incarnation of NNW doesn&rsquo;t have that, and I use Unread anyhow, but I wanted to update the concept with AI, so I made a web-based RSS triage tool.</p>
<p>micro.blog&rsquo;s recent-ish <a href="https://micro.ink">Inkwell</a> provides an API. The app hits the API for unread articles, and I can love/hate them (along with a way to train for/against source sites, authors, keywords, and topics) or star them (in which case it hits the Inkwell API and stars the article so it&rsquo;ll pop up in Unread).  In addition to my direct feedback, I&rsquo;ve also got a topical list that adds weight.</p>
<p>Borrowing from my old project, it&rsquo;s also tracking the read rates on each site and using that alongside my article ratings to provide an overall score for websites that it takes into account.</p>
<p>So when an article comes in, a cheap Haiku agent takes a look, factors in my previous feedback and my interest list.  The fun part is that the app also talks to aSystems notes, ideas, and tasks, so Haiku knows to look for relevance there. Likewise, as AI development articles come in, especially ones about &ldquo;human-in-the-loop&rdquo; and ML, it&rsquo;s looking at my aSystem feature backlog and noting the relevance.</p>
<p>I added a &ldquo;no, that&rsquo;s not quite right&rdquo; feedback loop, as well: Since the agent records its impressions on a given post, I can nudge it. For instance, it downgraded an <em>Oregonian</em> article about a housing policy story because it wasn&rsquo;t relevant to my interests list, which includes homelessness. I added a &ldquo;that&rsquo;s not quite right&rdquo; feedback, and when an article came in later today, the agent&rsquo;s take reflected that new nudge:</p>
<blockquote>
<p>Relates to user&rsquo;s Portland interest and touches on homelessness/housing policy context (ICE enforcement affects vulnerable populations), but is primarily a crime/legal story which the user has rejected. Maxine Bernstein is a crime reporter whose work the user may want to filter.</p>
</blockquote>
<p>It&rsquo;s true: I&rsquo;ve added crime stories as negative signal, and it has picked up on the reporter being associated with those, suggesting I just add her to the filter. The article came in at a score of 0.59, though, which represents a strong-ish score, so my countervailing guidance to be a bit more inclusive worked. It has likewise done a good job with downscoring roundup articles, advice columnists, and headlines that don&rsquo;t reveal key details. In other words, it is doing a great job getting me to the three <em>Oregonian</em> articles I care to read on any given day.</p>
<p><img src="/uploads/microblog/2026/d001707ad9.jpg" width="600" height="176" alt=""><img src="/uploads/microblog/2026/725336b9d5.jpg" width="600" height="339" alt="A list of personal taste signals is displayed, showing categories for likes such as howtos and dislikes like press releases."></p>
]]></content:encoded>
    </item>
    <item>
      <title>For a brief period I was required to inhabit the persona of ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-24-for-a-brief-period-i/</link>
      <pubDate>Tue, 24 Mar 2026 16:15:52 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-24-for-a-brief-period-i/</guid>
      <description>&lt;p&gt;For a brief period I was required to inhabit the persona of &amp;ldquo;Sensei,&amp;rdquo; a ninja penguin forum moderator for LinuxNewbie. I nearly crawled out of my skin after six months. I don&amp;rsquo;t understand how people inhabit these personae over decades. I really prize the idea of waking up and not being me anymore.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>For a brief period I was required to inhabit the persona of &ldquo;Sensei,&rdquo; a ninja penguin forum moderator for LinuxNewbie. I nearly crawled out of my skin after six months. I don&rsquo;t understand how people inhabit these personae over decades. I really prize the idea of waking up and not being me anymore.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I was trying out Wispr Flow and liked it a lot, but ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-23-i-was-trying-out-wispr/</link>
      <pubDate>Mon, 23 Mar 2026 20:56:00 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-23-i-was-trying-out-wispr/</guid>
      <description>&lt;p&gt;I was trying out Wispr Flow and liked it a lot, but couldn&amp;rsquo;t use it for work in good conscience. You can turn off training, it&amp;rsquo;s got all the right certs, etc. but I spend all day long muttering our data classification standard under my breath so I know better. So I found &lt;a href=&#34;https://www.getvoibe.com&#34;&gt;Voibe&lt;/a&gt; and it&amp;rsquo;s fine. One hundred percent on-device dictation. Not as nice as Wispr Flow, but cheaper by the month. Its lifetime license is $99 and I just view that as a tax while Apple slowly improves its own voice dictation.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I was trying out Wispr Flow and liked it a lot, but couldn&rsquo;t use it for work in good conscience. You can turn off training, it&rsquo;s got all the right certs, etc. but I spend all day long muttering our data classification standard under my breath so I know better. So I found <a href="https://www.getvoibe.com">Voibe</a> and it&rsquo;s fine. One hundred percent on-device dictation. Not as nice as Wispr Flow, but cheaper by the month. Its lifetime license is $99 and I just view that as a tax while Apple slowly improves its own voice dictation.</p>
<p>I guess I should also point out that it doesn&rsquo;t have a mobile app, but Wispr Flow is yet another example of a good product hobbled by Apple&rsquo;s sandboxing. I just use Apple voice dictation on my phone and it&rsquo;s good enough for those use cases.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;Can We Break Out of Our Hyperpolitical Moment?&#34; Bought ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-22-can-we-break-out-of/</link>
      <pubDate>Sun, 22 Mar 2026 09:27:49 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-22-can-we-break-out-of/</guid>
      <description>&lt;p&gt;&amp;ldquo;&lt;a href=&#34;https://jacobin.com/2026/03/hyperpolitics-jager-polarization-protest-populism/&#34;&gt;Can We Break Out of Our Hyperpolitical Moment?&lt;/a&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Bought this so fast.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/9a8ba8d5b9.jpg&#34; width=&#34;600&#34; height=&#34;362&#34; alt=&#34;“Everyday life in the United States and other Western democracies is increasingly politicized: our political ideologies, as curated on social media, have become central to our identities and have even increasingly come to structure our closest personal relationships. Yet this heightened politicization has not translated into meaningful policy change. Instead, the public’s dissatisfaction with traditional parties of both the Left and the Right continue to grow, while a panoply of new right-populist formations has managed to win over disaffected voters in ever larger numbers across the developed world. Meanwhile, the core elements of the neoliberal economic program — low taxes, public disinvestment, and corporate handouts — remain the order of the day.”&#34;&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;<a href="https://jacobin.com/2026/03/hyperpolitics-jager-polarization-protest-populism/">Can We Break Out of Our Hyperpolitical Moment?</a>&rdquo;</p>
<p>Bought this so fast.</p>
<img src="/uploads/microblog/2026/9a8ba8d5b9.jpg" width="600" height="362" alt="“Everyday life in the United States and other Western democracies is increasingly politicized: our political ideologies, as curated on social media, have become central to our identities and have even increasingly come to structure our closest personal relationships. Yet this heightened politicization has not translated into meaningful policy change. Instead, the public’s dissatisfaction with traditional parties of both the Left and the Right continue to grow, while a panoply of new right-populist formations has managed to win over disaffected voters in ever larger numbers across the developed world. Meanwhile, the core elements of the neoliberal economic program — low taxes, public disinvestment, and corporate handouts — remain the order of the day.”">
]]></content:encoded>
    </item>
    <item>
      <title>One school of thought on toilet paper says you will never ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-21-one-school-of-thought-on/</link>
      <pubDate>Sat, 21 Mar 2026 10:33:05 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-21-one-school-of-thought-on/</guid>
      <description>&lt;p&gt;One school of thought on toilet paper says you will never stop pooping, and buys plenty. Another says that tacitly admitting to the cashier that you will probably never stop pooping, or at least not in the next month,  is deeply shameful and buys only two rolls at a time to lessen that shame.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>One school of thought on toilet paper says you will never stop pooping, and buys plenty. Another says that tacitly admitting to the cashier that you will probably never stop pooping, or at least not in the next month,  is deeply shameful and buys only two rolls at a time to lessen that shame.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I have pretty severe misophonia so this online noodle ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-19-i-have-pretty-severe-misophonia/</link>
      <pubDate>Thu, 19 Mar 2026 21:48:15 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-19-i-have-pretty-severe-misophonia/</guid>
      <description>&lt;p&gt;I have pretty severe misophonia so this online noodle service telling me to &amp;ldquo;slurp more&amp;rdquo; is not the awesome tagline they think.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have pretty severe misophonia so this online noodle service telling me to &ldquo;slurp more&rdquo; is not the awesome tagline they think.</p>
]]></content:encoded>
    </item>
    <item>
      <title>People Team says they&#39;re about to roll out &#34;upward ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-18-people-team-says-theyre-about/</link>
      <pubDate>Wed, 18 Mar 2026 15:39:26 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-18-people-team-says-theyre-about/</guid>
      <description>&lt;p&gt;People Team says they&amp;rsquo;re about to roll out &amp;ldquo;upward feedback&amp;rdquo; for directs -&amp;gt; managers.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=04F4xlWSFh0&#34;&gt;www.youtube.com/watch&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>People Team says they&rsquo;re about to roll out &ldquo;upward feedback&rdquo; for directs -&gt; managers.</p>
<p><a href="https://www.youtube.com/watch?v=04F4xlWSFh0">www.youtube.com/watch</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>🚀 Thrilled to share that Kagi Translate has been an ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-18-thrilled-to-share-that-kagi/</link>
      <pubDate>Wed, 18 Mar 2026 10:13:56 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-18-thrilled-to-share-that-kagi/</guid>
      <description>&lt;p&gt;🚀 Thrilled to share that Kagi Translate has been an absolute game-changer for my professional growth! 📈 It’s all about leveraging the right tools to scale and reach new heights. #CareerGrowth #Innovation #Efficiency #KagiTranslate #ProfessionalDevelopment&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/paste-b19e187f.png&#34; width=&#34;600&#34; height=&#34;224&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>🚀 Thrilled to share that Kagi Translate has been an absolute game-changer for my professional growth! 📈 It’s all about leveraging the right tools to scale and reach new heights. #CareerGrowth #Innovation #Efficiency #KagiTranslate #ProfessionalDevelopment</p>
<img src="/uploads/microblog/2026/paste-b19e187f.png" width="600" height="224" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>I don&#39;t have a type. I just like making tools. </title>
      <link>https://mike.puddingtime.org/posts/2026-03-15-i-dont-have-a-type/</link>
      <pubDate>Sun, 15 Mar 2026 16:43:21 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-15-i-dont-have-a-type/</guid>
      <description>&lt;p&gt;&amp;ldquo;&lt;a href=&#34;https://news.ycombinator.com/item?id=47386813&#34;&gt;I&amp;rsquo;m 60 years old. Claude Code killed a passion&lt;/a&gt;&amp;rdquo;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I would argue it depends on what you enjoy: the journey or the destination. I have always enjoyed the journey, I think people having a blast nowadays are enjoying the destination. AI gave us more destinations, but less journey. It is not worse or better, just different.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I like the journey and the destination, thanks.&lt;/p&gt;
&lt;p&gt;The journey now goes much faster and more efficiently for me, but that doesn&amp;rsquo;t actually mean less journey: It means I cover more ground in the same amount of journey time because I am not constrained by fumbling through the syntax to get there.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;<a href="https://news.ycombinator.com/item?id=47386813">I&rsquo;m 60 years old. Claude Code killed a passion</a>&rdquo;:</p>
<blockquote>
<p>I would argue it depends on what you enjoy: the journey or the destination. I have always enjoyed the journey, I think people having a blast nowadays are enjoying the destination. AI gave us more destinations, but less journey. It is not worse or better, just different.</p>
</blockquote>
<p>I like the journey and the destination, thanks.</p>
<p>The journey now goes much faster and more efficiently for me, but that doesn&rsquo;t actually mean less journey: It means I cover more ground in the same amount of journey time because I am not constrained by fumbling through the syntax to get there.</p>
<p>At the core, though, I am still <em>thinking about a problem I am trying to solve</em> or <em>how to enable a kind of work I need to do</em> and ideating toward a <em>solution</em> to that problem or <em>a tool that better supports that kind of work</em>.</p>
<p>I have a particular relationship with developers and software development:</p>
<p>I learned to code beyond rudimentary AppleScript because some dipshit in IT told me I didn&rsquo;t need a particular tool I knew I needed, and he was happy to gatekeep tool creation. I learned to write Ruby because while I was looking for a solution to my problem, Ruby happened to be the language someone used in the first proof of concept I could find. Fine. Ruby it was.</p>
<p>Within a year, I was a Rails developer. I wasn&rsquo;t getting <em>paid</em> to be a Rails developer, but I&rsquo;d written an entire analytics framework and it was saving 10-15 people four or five hours of toil a month. It was meaningful enough that when I quit that job management dispatched someone from IT to learn how the tool worked.</p>
<p>I was good enough that I was getting technical interviews for Rails work, but I didn&rsquo;t do too many before I realized I liked solving my own problems, not somebody else&rsquo;s. If it was some hiring manager&rsquo;s problem? Not interested. Didn&rsquo;t want to spend my days that way. <em>My</em> problem? I&rsquo;d throw myself at it on nights and weekends, too.</p>
<p>Now, I am not a <em>good</em> coder by any professional coder&rsquo;s standards. I think I am an <em>effective</em> coder because when I make things with code to solve my problems, they always solve my problems.</p>
<p>&ldquo;Oh, so that means you&rsquo;re a &lsquo;destination&rsquo; person!&rdquo;</p>
<p>No, it doesn&rsquo;t. I <em>like</em> the journey coding entails. It means thinking deeply about the problem. Considering the models one can apply to it. Challenging my conception of the problem. Following ideas to logical or illogical conclusions. Realizing there are better ways to think about it all. Realizing there are ways to get so much more leverage now that I have a fingernail under a corner.</p>
<p>But I&rsquo;m not a <em>good</em> coder, or a particularly <em>fluent</em> coder, so the journey when it was just me and a new buffer in Emacs was long and slow.</p>
<p>Now? Coding with LLMs works for me because I know enough about how programming works generally to steer the LLM toward what I&rsquo;m after, but I&rsquo;m not burning all the time on scaffolding, boilerplate and syntax obscurities to get tools as <em>effective</em> as anything I ever wrote &ldquo;by hand.&rdquo;</p>
<p>I <em>do</em> spend some time re-specifying, backing out of blind alleys, and catching bugs during behavioral testing. It&rsquo;s still faster. I still get more robust features. I still get good outcomes. Better outcomes. And once I get to that destination, I am probably going to start a new journey, because I like making tools for myself. It used to be slow and I couldn&rsquo;t do as much. Now it is faster and my tools can do a lot more.</p>
<p>There is still plenty of space held open for the journey.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;It&#39;s my nature.&#34; </title>
      <link>https://mike.puddingtime.org/posts/2026-03-15-its-my-nature/</link>
      <pubDate>Sun, 15 Mar 2026 14:54:44 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-15-its-my-nature/</guid>
      <description>&lt;p&gt;&amp;ldquo;&lt;a href=&#34;https://www.resume.org/the-great-turnover-9-in-10-companies-plan-to-hire-in-2026-yet-6-in-10-will-have-layoffs-2/&#34;&gt;The Great Turnover: 9 in 10 Companies Plan To Hire in 2026, Yet 6 in 10 Will Have Layoffs&lt;/a&gt;&amp;rdquo;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;59% [of surveyed hiring managers] admit they emphasize AI when explaining hiring freezes or layoffs because it plays better with stakeholders than citing financial constraints&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;During the dotcom bust a company I worked for spent five or six months sliding all over the road with layoffs because its ad business was collapsing, but it kept underestimating the extent of the damage as non-renewals continued to pour in from tech companies that were bleeding out.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;<a href="https://www.resume.org/the-great-turnover-9-in-10-companies-plan-to-hire-in-2026-yet-6-in-10-will-have-layoffs-2/">The Great Turnover: 9 in 10 Companies Plan To Hire in 2026, Yet 6 in 10 Will Have Layoffs</a>&rdquo;:</p>
<blockquote>
<p>59% [of surveyed hiring managers] admit they emphasize AI when explaining hiring freezes or layoffs because it plays better with stakeholders than citing financial constraints</p>
</blockquote>
<p>During the dotcom bust a company I worked for spent five or six months sliding all over the road with layoffs because its ad business was collapsing, but it kept underestimating the extent of the damage as non-renewals continued to pour in from tech companies that were bleeding out.</p>
<p>The layoffs &ndash; always two or three at a time across all the verticals &ndash; were like the old Russian folk tale about the man whose dog had a diseased tail: He couldn&rsquo;t bring himself to cut the tail off, so he settled on slicing away a chunk of it each day. Every month, toward the end, I&rsquo;d get a call telling me two or three people had gotten the axe (&ldquo;but don&rsquo;t worry &ndash; you&rsquo;re fine! &ndash; I just need you to take over &hellip;&rdquo;)</p>
<p>They were taking a public beating for the chronic layoffs, though, so suddenly every dismissal was performance-related. Any semblance of dignity for those people went out the window as mid-level leadership informally let us all know that they had it coming but the company was fine. The company&rsquo;s GC was happy to inform us all that if we provided references for any former colleagues we would enjoy no legal protection.</p>
<p>My breaking point: Being the last of two people on a former team of around 15, and learning the other guy lost his job because he hadn&rsquo;t picked up the phone until the fifth ring the day prior. I don&rsquo;t mean breaking point as in &ldquo;I said fuck it, I quit.&rdquo; I mean breaking point as in, &ldquo;I need my job, so I&rsquo;ll do what I can to keep it, but this is insane and stupid, so I won&rsquo;t take it personally when it finally comes for me.&rdquo;</p>
<p>Don&rsquo;t get me wrong:</p>
<p>25 years later layoffs still make me nervous. I&rsquo;ve been through enough, run some kind of operations for enough, or been one of the people going through the layoff rosters enough that I know how they work and what a thoroughly mid-wit or sociopathic cast of characters can end up with power over peoples&rsquo; livelihoods.</p>
<p>I&rsquo;ve sat in a room with a CEO telling all the senior directors she saw everyone <em>else</em> doing layoffs as a good reason to demand more than the business strictly needed. &ldquo;The environment permitted me to take this opportunity.&rdquo; The &ldquo;environment&rdquo; being the Covid pandemic, the &ldquo;opportunity&rdquo; being a rushed operation that went from &ldquo;we need to cut from next year&rsquo;s hiring plan&rdquo; to &ldquo;we need about 10% of the department&rdquo; in under 24 hours, with an inept People team creating so many barriers to collaboration that engineering managers were cutting talent Product was roadmapping for. All while CNN was carrying footage of miles-long drive up food lines.</p>
<p>I can&rsquo;t help anybody with the underlying sociopathy of capital. We&rsquo;re all going to either collectively address it or not. After 25 years in and around tech, I&rsquo;m just here to tell you I have no patience for the &ldquo;get back to normal&rdquo; wing of the Democratic party, because &ldquo;normal&rdquo; was always bad and unjust for working people.</p>
<p>What I can help with, I guess, is suggesting to someone who finds themselves out of work that it is not <em>you.</em></p>
<p>It&rsquo;s hard to remember that.</p>
<p>I&rsquo;ve been on the wrong side of the layoff table once and am open to the possibility it will happen again. I <em>knew</em> when my layer-offer said &ldquo;this is a business decision&rdquo; that it wasn&rsquo;t <em>me</em>. But there was some self-doubt there. I spent a little bit of time feeling a little wounded and wondering about all the ways I might have mis-managed my career.</p>
<p>So, it is one thing to wake up every morning thinking &ldquo;I caught a bad break in a sociopathic system that uses buffering layers of bureaucracy to help middle managers rationalize the immiseration they&rsquo;re dealing out,&rdquo; and quite another to wake up thinking  &ldquo;an efficient and rational market has determined I am somehow to blame for day 189 of my unemployment, and I think it has a point.&rdquo;</p>
<p>I&rsquo;d encourage you to stick to the former. The scorpion stung you. That&rsquo;s in its nature.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;Emacs and Vim in the Age of AI&#34; &gt; You can now describe ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-15-emacs-and-vim-in-the/</link>
      <pubDate>Sun, 15 Mar 2026 10:23:48 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-15-emacs-and-vim-in-the/</guid>
      <description>&lt;p&gt;&amp;ldquo;Emacs and Vim in the Age of AI&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can now describe what you want in plain English and get working Elisp, VimScript, or Lua. &amp;lsquo;Write me an Emacs function that reformats the current paragraph to 72 columns and adds a prefix&amp;rsquo; – done. [&amp;hellip;] The extension language barrier, which has been the biggest obstacle to adoption for decades, is suddenly much lower.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This has been my experience with Emacs. Instantly useful extensions I would have struggled with previously. The only real problem was learning to ignore the guilt.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;Emacs and Vim in the Age of AI&rdquo;</p>
<blockquote>
<p>You can now describe what you want in plain English and get working Elisp, VimScript, or Lua. &lsquo;Write me an Emacs function that reformats the current paragraph to 72 columns and adds a prefix&rsquo; – done. [&hellip;] The extension language barrier, which has been the biggest obstacle to adoption for decades, is suddenly much lower.</p>
</blockquote>
<p>This has been my experience with Emacs. Instantly useful extensions I would have struggled with previously. The only real problem was learning to ignore the guilt.</p>
<p><a href="https://batsov.com/articles/2026/03/09/emacs-and-vim-in-the-age-of-ai/">batsov.com/articles/&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>There&#39;s a guy on a sub who does &#34;you&#39;re not entitled to ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-14-theres-a-guy-on-a/</link>
      <pubDate>Sat, 14 Mar 2026 13:07:37 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-14-theres-a-guy-on-a/</guid>
      <description>&lt;p&gt;There&amp;rsquo;s a guy on a sub who does &amp;ldquo;you&amp;rsquo;re not entitled to your own facts&amp;rdquo; on runaway hate-spiral threads, and it&amp;rsquo;s fascinating to watch because it is shockingly well received. He provides a sort of quantitative &amp;ldquo;I counted how many times &amp;hellip;&amp;rdquo; analysis in his pushback. I&amp;rsquo;m always braced for &amp;ldquo;quit sealioning&amp;rdquo; or whatever, but he usually just gets a quick &amp;ldquo;ok, fair,&amp;rdquo; I think because he is very consistent about it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>There&rsquo;s a guy on a sub who does &ldquo;you&rsquo;re not entitled to your own facts&rdquo; on runaway hate-spiral threads, and it&rsquo;s fascinating to watch because it is shockingly well received. He provides a sort of quantitative &ldquo;I counted how many times &hellip;&rdquo; analysis in his pushback. I&rsquo;m always braced for &ldquo;quit sealioning&rdquo; or whatever, but he usually just gets a quick &ldquo;ok, fair,&rdquo; I think because he is very consistent about it.</p>
<p>I have become very resigned to people just going around with their own facts, so I guess I&rsquo;m glad to see a community where people can hear that they&rsquo;re doing that and suck it back in.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I think Taylor Stitch is becoming &#34;Buck Mason except hung ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-14-i-think-taylor-stitch-is/</link>
      <pubDate>Sat, 14 Mar 2026 12:33:23 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-14-i-think-taylor-stitch-is/</guid>
      <description>&lt;p&gt;I think Taylor Stitch is becoming &amp;ldquo;Buck Mason except hung over and has bed head.&amp;rdquo; It&amp;rsquo;s a bit more relatable than Buck Mason, which has become &amp;ldquo;unrealistically hot incipient granddad&amp;rdquo; and/or &amp;ldquo;unnervingly affluent Zoomer.&amp;rdquo;&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/f3c00ed8dc.jpg&#34; width=&#34;501&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>I think Taylor Stitch is becoming &ldquo;Buck Mason except hung over and has bed head.&rdquo; It&rsquo;s a bit more relatable than Buck Mason, which has become &ldquo;unrealistically hot incipient granddad&rdquo; and/or &ldquo;unnervingly affluent Zoomer.&rdquo;</p>
<img src="/uploads/microblog/2026/f3c00ed8dc.jpg" width="501" height="600" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>Apparently we&#39;re disrupting TiddlyWiki this week. ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-14-apparently-were-disrupting-tiddlywiki-this/</link>
      <pubDate>Sat, 14 Mar 2026 09:23:32 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-14-apparently-were-disrupting-tiddlywiki-this/</guid>
      <description>&lt;p&gt;Apparently we&amp;rsquo;re disrupting TiddlyWiki this week.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wordpress.org/news/2026/03/announcing-my-wordpress/&#34;&gt;wordpress.org/news/2026&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Apparently we&rsquo;re disrupting TiddlyWiki this week.</p>
<p><a href="https://wordpress.org/news/2026/03/announcing-my-wordpress/">wordpress.org/news/2026&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;Portland council president blasts 95-year-old constituent ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-12-portland-council-president-blasts-yearold/</link>
      <pubDate>Thu, 12 Mar 2026 17:10:21 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-12-portland-council-president-blasts-yearold/</guid>
      <description>&lt;p&gt;&amp;ldquo;Portland council president blasts 95-year-old constituent for her &amp;lsquo;small-minded&amp;rsquo; tattoo critique&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.oregonlive.com/politics/2026/03/portland-council-president-blasts-95-year-old-constituent-for-her-small-minded-tattoo-critique.html?outputType=amp&#34;&gt;www.oregonlive.com/politics/&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/notserious.gif&#34; width=&#34;480&#34; height=&#34;270&#34; alt=&#34;You are not serious people&#34;&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;Portland council president blasts 95-year-old constituent for her &lsquo;small-minded&rsquo; tattoo critique&rdquo;</p>
<p><a href="https://www.oregonlive.com/politics/2026/03/portland-council-president-blasts-95-year-old-constituent-for-her-small-minded-tattoo-critique.html?outputType=amp">www.oregonlive.com/politics/&hellip;</a></p>
<img src="/uploads/microblog/2026/notserious.gif" width="480" height="270" alt="You are not serious people">
]]></content:encoded>
    </item>
    <item>
      <title>I went all in on a large iPad Pro for not-at-my-desk. After ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-10-i-went-all-in-on/</link>
      <pubDate>Tue, 10 Mar 2026 22:11:25 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-10-i-went-all-in-on/</guid>
      <description>&lt;p&gt;I went all in on a large iPad Pro for not-at-my-desk. After working on a tool project again, tmux in Blink lost a lot of its charm.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve got a MacBook Air so I don&amp;rsquo;t need a Neo, just fascinated to see Gruber &amp;ldquo;welp&amp;rdquo; his iPad out the window.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://daringfireball.net/2026/03/the_macbook_neo&#34;&gt;daringfireball.net/2026/03/t&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/f661cd2e13.jpg&#34; width=&#34;600&#34; height=&#34;257&#34; alt=&#34;Gruber surrenders&#34;&gt;</description>
      <content:encoded><![CDATA[<p>I went all in on a large iPad Pro for not-at-my-desk. After working on a tool project again, tmux in Blink lost a lot of its charm.</p>
<p>I&rsquo;ve got a MacBook Air so I don&rsquo;t need a Neo, just fascinated to see Gruber &ldquo;welp&rdquo; his iPad out the window.</p>
<p><a href="https://daringfireball.net/2026/03/the_macbook_neo">daringfireball.net/2026/03/t&hellip;</a></p>
<img src="/uploads/microblog/2026/f661cd2e13.jpg" width="600" height="257" alt="Gruber surrenders">
]]></content:encoded>
    </item>
    <item>
      <title>Just setting expectations with the internal comms team on ...</title>
      <link>https://mike.puddingtime.org/posts/2026-03-01-just-setting-expectations-with-the/</link>
      <pubDate>Sun, 01 Mar 2026 12:39:34 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-03-01-just-setting-expectations-with-the/</guid>
      <description>&lt;p&gt;Just setting expectations with the internal comms team on how my keynote prep is going.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/cldbowbcqc7f1.gif&#34; width=&#34;437&#34; height=&#34;343&#34; alt=&#34;Nigel Tufnel plays an electric guitar with a violin  stage next to another guitar standing on a stand.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Just setting expectations with the internal comms team on how my keynote prep is going.</p>
<img src="/uploads/microblog/2026/cldbowbcqc7f1.gif" width="437" height="343" alt="Nigel Tufnel plays an electric guitar with a violin  stage next to another guitar standing on a stand.">
]]></content:encoded>
    </item>
    <item>
      <title>Plumbing the pieces of asystem</title>
      <link>https://mike.puddingtime.org/posts/2026-02-25-plumbing-the-pieces-of-asystem/</link>
      <pubDate>Wed, 25 Feb 2026 22:05:45 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-25-plumbing-the-pieces-of-asystem/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve spent the last week evolving &lt;code&gt;asystem&lt;/code&gt; at a pretty quick pace. The three apps in the suite: &lt;code&gt;atask&lt;/code&gt;, &lt;code&gt;apeople&lt;/code&gt;, and &lt;code&gt;anote&lt;/code&gt; all got a common library to cover their shared functionality, and a collection of new API stuff that makes it easier to cross-link objects between the three.&lt;/p&gt;
&lt;p&gt;The goal has been to keep the TUIs I like working with, but make the tools better for use with an agent of some kind. Each comes with a &lt;code&gt;SKILL.md&lt;/code&gt; that helps LocalGPT understand how to interact with them, and LocalGPT has some protocols in place to use the skills for daily routine stuff for me.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve spent the last week evolving <code>asystem</code> at a pretty quick pace. The three apps in the suite: <code>atask</code>, <code>apeople</code>, and <code>anote</code> all got a common library to cover their shared functionality, and a collection of new API stuff that makes it easier to cross-link objects between the three.</p>
<p>The goal has been to keep the TUIs I like working with, but make the tools better for use with an agent of some kind. Each comes with a <code>SKILL.md</code> that helps LocalGPT understand how to interact with them, and LocalGPT has some protocols in place to use the skills for daily routine stuff for me.</p>
<p>I also put a React front-end on the whole thing, so there&rsquo;s a web interface available over Tailscale that gives me a GUI to access my stuff from wherever. It&rsquo;s all still Markdown and YAML underneath, but simple to manage from a phone.</p>
<p>I&rsquo;ve built a few workflows with all these pieces to help me plan my week and day. <code>asystem</code> goes out and grabs my calendar, looks at my task/project list, and scans my meetings for who the participants are. I time block my hard meeting times, then dialog back and forth about what to prioritize when and schedule that into the day.</p>
<p>In the React front-end, there&rsquo;s a daily page that reflects any tasks I&rsquo;ve signed up for, and it also tosses in links to the contacts <code>asystem</code> found in my calendar for the day. Since tasks, projects, ideas, and people are all cross-linkable, I&rsquo;ve pretty much got my agenda there in the app, whether it&rsquo;s a list of tasks or some ideas I&rsquo;ve been kicking around that relate to that person.</p>
<p>Getting a web front-end built has taken a lot of the pressure off to change the back end, because I don&rsquo;t really <em>need</em> a db with this arrangement. If I want something tappy/clicky from my iPad or phone, I&rsquo;ve got <code>aweb</code>. If I want a TUI, those apps are still there from ghostty or Blink. If I just want to edit a file, I can. The underlying execution from any entry point is just the individual CLI apps that ingest and emit JSON when an agent is using them, but present me with a TUI if I want.</p>
<p>A lot of the fussing with this right now is about figuring out how much structure to provide agents to do useful things for me without ending up just writing the procedural code. By putting tasks, contacts, and ideas in hybrid Markdown/YAML files, there&rsquo;s plenty of structured data to remove some kinds of ambiguity, but enough room for prose and personal notes that it&rsquo;s still useful and familiar to me. The <code>SKILL.md</code> scaffolding makes sure the agents use the tools the way they&rsquo;re meant.</p>
<p>I&rsquo;ve added other scaffolding in the form of LocalGPT&rsquo;s <code>MEMORY.md</code> file, which contains an org chart, and in <code>relationship:</code> tags in <code>apeople</code> that help guide the agent&rsquo;s recommendations during planning times: I took about 30 minutes to go through and classify everyone at work based on a few flavors of relationship, so the agent doesn&rsquo;t recommend rescheduling the wrong people, and it can tell from looking at a given contact if I have any open business with them that might encourage me to keep the current time before pushing back.</p>
<p>I fed the whole thing a few personality tests and used that to work through a work habits and patterns map that is also sitting in LocalGPT&rsquo;s memory. It looks out for tasks that aren&rsquo;t getting done and prods a little, and because it has the <code>apeople</code> map with my read on everybody around me, it offers a little &ldquo;how do you want to show up for this&rdquo; guidance when doing the daily overview, so I get reminders, like &ldquo;this is one of your reports, so keep it concrete and not too conceptual.&rdquo; If I feed it work I need to review from someone, it uses the <code>apeople</code> log and <code>anote</code> idea mapping to draw my attention to areas I should be on the lookout for, or think about better feedback on.  And during the day, I just drop log entries into it that it goes through at the end of the day and processes as either potential next steps (aspirations) or things I might or might not know (beliefs), making links between ideas, tasks, projects, and people that further inform how it surfaces stuff and what it recommends.</p>
<p>So slowly there is some stuff emerging from all the linked context across people, tasks, and ideas. Nothing profound. I am not in communion with another mind, I&rsquo;m just finding a state where the LLM can do helpful things, and is operating in such an introspectable, finite web of information that it doesn&rsquo;t have room to invent shit but is instead reduced to catching associations and surfacing them in the form of little reminders, or reducing the number of ideas I have to say &ldquo;no&rdquo; to as I plan my day.</p>
<p>Oh, helpfully, Claude Code also has access to all the <code>asystem</code> SKILL files, and CLAUDE.md has some light guidance on them. So when I drop an idea into <code>anote</code> about how to evolve the system, I can reference it in a Code session and that helps drive feature development. This part isn&rsquo;t as rich as I&rsquo;d like it to be, because the CLAUDE.md instructions and skills aren&rsquo;t really written around &ldquo;have a holistic understanding of your operator and his context,&rdquo; but the plumbing is there if I care to get around to figuring out the prompt.</p>
<p>So &hellip; sort of fun turn of the crank on vibe coding this time. Last time around, last year, I built some TUI tools that were sort of fun little throwback exercises. This time around the more interesting part is all the connections I can make with those tools.</p>
]]></content:encoded>
    </item>
    <item>
      <title>lol github.com/mholovets...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-22-lol-httpsgithubcommholovetskyiopenclawenterprise/</link>
      <pubDate>Sun, 22 Feb 2026 20:24:54 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-22-lol-httpsgithubcommholovetskyiopenclawenterprise/</guid>
      <description>&lt;p&gt;lol&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/mholovetskyi/openclawenterprise&#34;&gt;github.com/mholovets&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>lol</p>
<p><a href="https://github.com/mholovetskyi/openclawenterprise">github.com/mholovets&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>I was today years old when I learned ⌘ ] (and the other ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-22-i-was-today-years-old/</link>
      <pubDate>Sun, 22 Feb 2026 16:26:32 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-22-i-was-today-years-old/</guid>
      <description>&lt;p&gt;I was today years old when I learned &lt;code&gt;⌘ ]&lt;/code&gt;  (and the other bracket, which would break Markdown) cycle between your Slack workspaces. Given my diminishing neuroplasticity, I&amp;rsquo;ll just be tormented by the knowledge because I&amp;rsquo;ll always just click like some sort of caveman.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I was today years old when I learned <code>⌘ ]</code>  (and the other bracket, which would break Markdown) cycle between your Slack workspaces. Given my diminishing neuroplasticity, I&rsquo;ll just be tormented by the knowledge because I&rsquo;ll always just click like some sort of caveman.</p>
]]></content:encoded>
    </item>
    <item>
      <title>As a writer I didn&#39;t need AI to utterly devalue my gifts. ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-20-as-a-writer-i-didnt/</link>
      <pubDate>Fri, 20 Feb 2026 20:07:30 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-20-as-a-writer-i-didnt/</guid>
      <description>&lt;p&gt;As a writer I didn&amp;rsquo;t need AI to utterly devalue my gifts. People have been doing it for decades with content farms, steady elimination of support roles for editorial teams, and just general contempt for the craft or the idea anyone should earn a living from it.&lt;/p&gt;
&lt;p&gt;Sit with an engineer who asks as only an engineer can,  &amp;ldquo;how could there even be a principal writer? There&amp;rsquo;s not that much to know.&amp;rdquo; I had to.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>As a writer I didn&rsquo;t need AI to utterly devalue my gifts. People have been doing it for decades with content farms, steady elimination of support roles for editorial teams, and just general contempt for the craft or the idea anyone should earn a living from it.</p>
<p>Sit with an engineer who asks as only an engineer can,  &ldquo;how could there even be a principal writer? There&rsquo;s not that much to know.&rdquo; I had to.</p>
<p>So, sorry it&rsquo;s no fun anymore and that people are saying &ldquo;how much can there be to know&rdquo; about a thing you cherished.</p>
<p>Learn what I did: Just know it for yourself.</p>
<p><a href="https://dylancastillo.co/posts/ai-side-projects.html">dylancastillo.co/posts/ai-&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Notes on asystem</title>
      <link>https://mike.puddingtime.org/posts/2026-02-18-notes-on-asystem/</link>
      <pubDate>Wed, 18 Feb 2026 23:24:14 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-18-notes-on-asystem/</guid>
      <description>&lt;p&gt;With a few nips and tucks and some stuff I held back from daily workflows, I got to use &lt;code&gt;asystem&lt;/code&gt; a little this evening. Good first pass.&lt;/p&gt;
&lt;p&gt;Recap:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;anote&lt;/code&gt; is a plaintext system for storing ideas. Ideas are (for now) either &amp;ldquo;aspirations&amp;rdquo; or &amp;ldquo;beliefs.&amp;rdquo; &lt;code&gt;anote&lt;/code&gt; manages them in a lifecycle from &amp;ldquo;seed&amp;rdquo; to some final state of accepted, rejected, dropped, or implemented.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;atask&lt;/code&gt; is &lt;code&gt;anote&lt;/code&gt;&amp;rsquo;s work sibling. It&amp;rsquo;s plaintext and it stores work as tasks or projects.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apeople&lt;/code&gt; is a contact management system. It helps me keep track of relationships by logging interactions, reminding me when I should reach out, and associating people with tasks in &lt;code&gt;atask&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each has two aspects: There&amp;rsquo;s a TUI app built to suit my preferences for keyboard-centric interactions with a tool, and there&amp;rsquo;s a CLI tool that can emit JSON for all the objects and take batch commands. The former is so a human can use these tools like TUI productivity tools, and the latter is so agents can efficiently search all the data, make programmatic changes/additions/removals, and insert relationships between the objects each manages.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>With a few nips and tucks and some stuff I held back from daily workflows, I got to use <code>asystem</code> a little this evening. Good first pass.</p>
<p>Recap:</p>
<ul>
<li><code>anote</code> is a plaintext system for storing ideas. Ideas are (for now) either &ldquo;aspirations&rdquo; or &ldquo;beliefs.&rdquo; <code>anote</code> manages them in a lifecycle from &ldquo;seed&rdquo; to some final state of accepted, rejected, dropped, or implemented.</li>
<li><code>atask</code> is <code>anote</code>&rsquo;s work sibling. It&rsquo;s plaintext and it stores work as tasks or projects.</li>
<li><code>apeople</code> is a contact management system. It helps me keep track of relationships by logging interactions, reminding me when I should reach out, and associating people with tasks in <code>atask</code>.</li>
</ul>
<p>Each has two aspects: There&rsquo;s a TUI app built to suit my preferences for keyboard-centric interactions with a tool, and there&rsquo;s a CLI tool that can emit JSON for all the objects and take batch commands. The former is so a human can use these tools like TUI productivity tools, and the latter is so agents can efficiently search all the data, make programmatic changes/additions/removals, and insert relationships between the objects each manages.</p>
<p>These are all glued together on the agent level as <code>SKILL.md</code> files for each that explain how the tools work and how they are meant to relate to each other.</p>
<p>They&rsquo;re all used together by a LocalGPT instance.</p>
<p>I work with LocalGPT through Slack, because it allows me to create structured channels. LocalGPT doesn&rsquo;t naturally do Slack, so I&rsquo;ve got a bot running locally that hits the LocalGPT http API. Each channel in Slack spawns a new instance of a LocalGPT agent running as a bot in Slack. The Slack bot has some features that allow LocalGPT to see the canvas or pinned messages in each channel and use them as its topmost directive if the pinned message starts with  <code>instructions</code>. For instance, here&rsquo;s the <code>#daily</code> channel:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="p">[</span><span class="n">instructions</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">**</span><span class="n">Daily</span> <span class="n">Channel</span> <span class="n">Protocol</span><span class="o">**</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">This</span> <span class="n">channel</span> <span class="n">operates</span> <span class="ow">in</span> <span class="o">**</span><span class="n">three</span> <span class="n">modes</span><span class="o">**.</span> <span class="n">Between</span> <span class="n">triggers</span><span class="p">,</span> <span class="n">it</span> <span class="n">defaults</span> <span class="n">to</span> <span class="o">**</span><span class="nb">log</span> <span class="n">mode</span><span class="o">**.</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">---</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">**</span><span class="n">Log</span> <span class="n">Mode</span> <span class="p">(</span><span class="n">default</span><span class="p">)</span><span class="o">**</span>
</span></span><span class="line"><span class="cl"><span class="n">Drop</span> <span class="n">anything</span> <span class="ow">in</span> <span class="n">here</span> <span class="n">throughout</span> <span class="n">the</span> <span class="n">day</span> <span class="err">—</span> <span class="n">ideas</span><span class="p">,</span> <span class="n">reactions</span><span class="p">,</span> <span class="n">tasks</span><span class="p">,</span> <span class="n">stray</span> <span class="n">thoughts</span><span class="o">.</span> <span class="n">No</span> <span class="n">formatting</span> <span class="n">required</span><span class="o">.</span> <span class="n">I</span><span class="s1">&#39;ll acknowledge briefly and hold. No analysis, no riffing, no engagement. Just capture.</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">**</span><span class="s2">&#34;start of day&#34;</span><span class="o">**</span> <span class="err">→</span> <span class="n">Planning</span> <span class="n">mode</span><span class="o">.</span> <span class="n">Pulse</span> <span class="n">check</span><span class="p">,</span> <span class="n">calendar</span> <span class="n">scan</span><span class="p">,</span> <span class="n">task</span> <span class="n">triage</span><span class="p">,</span> <span class="n">daily</span> <span class="n">intention</span><span class="p">,</span> <span class="n">notebook</span> <span class="n">prompt</span><span class="o">.</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">**</span><span class="s2">&#34;end of day&#34;</span><span class="o">**</span> <span class="err">→</span> <span class="n">First</span> <span class="n">triages</span> <span class="n">the</span> <span class="nb">log</span> <span class="p">(</span><span class="n">promotes</span> <span class="n">entries</span> <span class="n">to</span> <span class="n">anote</span> <span class="k">for</span> <span class="n">ideas</span> <span class="ow">and</span> <span class="n">atask</span> <span class="k">for</span> <span class="n">actions</span><span class="p">,</span> <span class="n">flags</span> <span class="n">process</span> <span class="n">signals</span><span class="p">,</span> <span class="n">updates</span> <span class="n">records</span> <span class="ow">in</span> <span class="n">apeople</span> <span class="n">when</span> <span class="n">they</span><span class="s1">&#39;re mentioned), then runs synthesis: what happened, open threads, tomorrow&#39;</span><span class="n">s</span> <span class="n">anchor</span><span class="p">,</span> <span class="n">energy</span> <span class="n">debrief</span><span class="o">.</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">**</span><span class="s2">&#34;process the log&#34;</span><span class="o">**</span> <span class="err">→</span> <span class="n">Standalone</span> <span class="nb">log</span> <span class="n">triage</span><span class="o">.</span> <span class="n">Same</span> <span class="n">promotion</span> <span class="n">steps</span> <span class="n">as</span> <span class="n">end</span><span class="o">-</span><span class="n">of</span><span class="o">-</span><span class="n">day</span><span class="p">,</span> <span class="n">without</span> <span class="n">the</span> <span class="n">full</span> <span class="n">close</span><span class="o">-</span><span class="n">out</span><span class="o">.</span> <span class="n">Use</span> <span class="n">mid</span><span class="o">-</span><span class="n">day</span> <span class="n">to</span> <span class="n">clear</span> <span class="n">the</span> <span class="n">buffer</span><span class="o">.</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">---</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">**</span><span class="n">Key</span> <span class="n">behaviors</span><span class="p">:</span><span class="o">**</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">In</span> <span class="nb">log</span> <span class="n">mode</span><span class="p">,</span> <span class="n">responses</span> <span class="n">are</span> <span class="n">one</span> <span class="n">line</span> <span class="nb">max</span><span class="o">.</span> <span class="n">Catch</span> <span class="ow">and</span> <span class="n">hold</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">Meaning</span> <span class="n">comes</span> <span class="n">later</span> <span class="err">—</span> <span class="n">during</span> <span class="n">triage</span> <span class="ow">and</span> <span class="n">end</span><span class="o">-</span><span class="n">of</span><span class="o">-</span><span class="n">day</span><span class="p">,</span> <span class="ow">not</span> <span class="n">mid</span><span class="o">-</span><span class="n">stream</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">Full</span> <span class="n">protocol</span> <span class="n">details</span><span class="p">:</span> <span class="n">daily</span><span class="o">-</span><span class="n">protocols</span><span class="o">.</span><span class="n">md</span> <span class="ow">in</span>  <span class="n">memory</span><span class="o">.</span></span></span></code></pre></div>
<p>So during the day, I can just go to <code>#daily</code> channel and type in a quick note naming people and actions. The logging protocol dumps that into a text file to ensure the context survives a LocalGPT daemon restart or context cleanse, and goes on passively listening. When triggered, it goes through the file and processes.</p>
<p>Today, for instance, it took a recap of a meeting with an internal stakeholder, updated his contact record, and associated him with new tasks reminding me to look into some Cloudflare features. It also captured observations about a call with our privacy counsel, and added an item to chat with my boss about next steps there.</p>
<p>I make all this easier by using Wisprflow: I just go to the channel, press <code>ctrl + opt</code>, dictate a quick note between meetings, and it&rsquo;s captured. No typing or visiting individual tools in the system. In the event of agent failure, well, there&rsquo;s a Slack record I can go visit.</p>
<p>All the notes in the system are using Markdown with YAML frontmatter, and they have relationship arrays in the YAML, so as associations are made between people, tasks, and ideas, the agent knows to look for them when one of those things becomes a topic, stitching together context from the existence of a relationship in the frontmatter and scanning the interaction logs for more context.</p>
<p>&hellip; and all this context is there at the beginning of the day during my morning timeblocking ritual:</p>
<p>The agent retrieves my calendar, checks the invites for people and projects it knows about, and gives me a small cheat sheet for meeting agendas. Then it looks at my live projects and tasks, their priority, and estimated effort, and helps me block work in my discretionary time.</p>
<h3 id="ambitions">Ambitions</h3>
<p>I&rsquo;ve been keeping an eye on a vibecoder at work who is currently beginning to brush up against the limits of Google&rsquo;s AI Studio. Its integration picture is poor and it has its limits, but it does crank out nice-looking little web apps with integration into Gemini. I did a quick sprint on Friday to implement the guts of <code>asystem</code> as a little PoC app I named <a href="https://youtu.be/rADdKqPNdaM?si=08e60wQlVuGacswL&amp;t=72">Hecubus</a>. Hitting my own limits with AI Studio, I learned that if you&rsquo;re desperate you can store JSON on Google Drive to feed a chat agent you can embed in a Studio App. I&rsquo;m assuming I could just store Markdown that way, too, and build a web front end for all this, leveraging Gemini for the LLM.</p>
]]></content:encoded>
    </item>
    <item>
      <title>denote-contacts -&gt; apeople </title>
      <link>https://mike.puddingtime.org/posts/2026-02-18-denotecontacts-apeople/</link>
      <pubDate>Wed, 18 Feb 2026 19:22:59 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-18-denotecontacts-apeople/</guid>
      <description>&lt;p&gt;I just woke up my vibecoded contact management app to go with the updates I made to my task and idea/aspiration/belief system. I&amp;rsquo;ve got Claude Code extending it to be agent-friendly and present a &lt;code&gt;SKILLS.md&lt;/code&gt; specifically for contact management.  It&amp;rsquo;ll give me a continuum of apps that all use the same basic markdown-n-yaml format, share a common unique id format, present a TUI for human interaction and records management, and present a JSON API for agents.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I just woke up my vibecoded contact management app to go with the updates I made to my task and idea/aspiration/belief system. I&rsquo;ve got Claude Code extending it to be agent-friendly and present a <code>SKILLS.md</code> specifically for contact management.  It&rsquo;ll give me a continuum of apps that all use the same basic markdown-n-yaml format, share a common unique id format, present a TUI for human interaction and records management, and present a JSON API for agents.</p>
<p>Between the three apps, I get fast, local agent access to people, ideas, and actions that can be related internally and among themselves. So, for instance, once it&rsquo;s online, during daily planning sessions, brainstorming sessions, etc. the SKILLS for each will allow for associations and connections. Individually they&rsquo;re also just basic TUI utilities to manage my todos, store contact info, and keep track of things that are not quite ready to be work or action, but I don&rsquo;t want littering my task list.</p>
<p>Could be the current &ldquo;screw around with agents&rdquo; thing will fall completely by the wayside, but I still get to keep  portable, transparent, and human readable content with a TUI I like working with (or even just drop the TUI and write an exporter to a better tool someday, because it&rsquo;s all structured enough to keep that simple).</p>
]]></content:encoded>
    </item>
    <item>
      <title>Capturing aspirations and beliefs in Markdown with anote</title>
      <link>https://mike.puddingtime.org/posts/2026-02-16-capturing-aspirations-and-beliefs-in/</link>
      <pubDate>Mon, 16 Feb 2026 22:00:13 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-16-capturing-aspirations-and-beliefs-in/</guid>
      <description>&lt;p&gt;This morning I turned denote-tasks into &lt;code&gt;atask&lt;/code&gt; (for &amp;ldquo;agent task&amp;rdquo;). Now I&amp;rsquo;m moving onto &lt;code&gt;anote&lt;/code&gt;, which is still a bit fuzzy in my head, but beginning to take shape:&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not really interested in the &amp;ldquo;order me a pizza,&amp;rdquo; or &amp;ldquo;make sure I always have deodorant&amp;rdquo; end states.  And I don&amp;rsquo;t like the landscape any agentic workflow for a consumer has to operate in. I tossed off a quip about how browser automation to do agentic workflows is turning me into a Maoist &lt;em&gt;not&lt;/em&gt; because &amp;ldquo;I hate capitalist pizza places&amp;rdquo; or whatever, but because I remember the way I felt after finally torturing AppleScript into doing UI scripting for some Mac app that its slob of a developer couldn&amp;rsquo;t bother to build an AppleScript library for: It was plainly just the very worst thing in the world. There was nothing human readable about it at all. There was nothing I&amp;rsquo;d ever be able to turn my back on at all. Brittle and opaque. I was in that stage of my automation journey where I was usually blaming myself for failed experiments, but this was a rare case, for the time, of feeling completely cheated by the tools available.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This morning I turned denote-tasks into <code>atask</code> (for &ldquo;agent task&rdquo;). Now I&rsquo;m moving onto <code>anote</code>, which is still a bit fuzzy in my head, but beginning to take shape:</p>
<p>I&rsquo;m not really interested in the &ldquo;order me a pizza,&rdquo; or &ldquo;make sure I always have deodorant&rdquo; end states.  And I don&rsquo;t like the landscape any agentic workflow for a consumer has to operate in. I tossed off a quip about how browser automation to do agentic workflows is turning me into a Maoist <em>not</em> because &ldquo;I hate capitalist pizza places&rdquo; or whatever, but because I remember the way I felt after finally torturing AppleScript into doing UI scripting for some Mac app that its slob of a developer couldn&rsquo;t bother to build an AppleScript library for: It was plainly just the very worst thing in the world. There was nothing human readable about it at all. There was nothing I&rsquo;d ever be able to turn my back on at all. Brittle and opaque. I was in that stage of my automation journey where I was usually blaming myself for failed experiments, but this was a rare case, for the time, of feeling completely cheated by the tools available.</p>
<p>We&rsquo;re cheated by the tools today. All these silos. You <em>can</em> make agentic workflows to do things, but the underlying infra sucks for it, and a lot of the things people want to do are forbidden by the silos commercial imperatives create. Want to automate a simple flow for a service you hold an account on? Probably a ToS violation even if you&rsquo;re paying for a premium tier of some kind. And probably a security nightmare.</p>
<p>So for now, whatever. I didn&rsquo;t create the problem, I don&rsquo;t want to think about the problem. I think browser automation is a bad idea. It&rsquo;s inelegant and wasteful. Rube Goldberg shit. And just try using it with some everyday sites with their either inept or automation-hostile tire fire markup. Just, no thanks. And as a digression, all the hooting and whingeing of the tech press aside, I&rsquo;m kinda +1 on Apple&rsquo;s &ldquo;slowness&rdquo; to improve Siri with LLMs, because Apple&rsquo;s fundamental neuroses are on full display, but in a way that is probably better for me as a user. Siri sucks, but we&rsquo;re in real &ldquo;frying pan/fire&rdquo; territory with generative AI. Good for Apple. Take your time.</p>
<p>Anyhow, <em>not</em> worrying about how to order pizzas or deodorant, and <em>not</em> primarily a software developer, so what I want to do with agents is more around persistence,  executive function augmentation, connection-making, and pattern-matching.</p>
<p>Oh, <em>also</em> really put off by the way I&rsquo;m seeing marketing people on LinkedIn doing the whole &ldquo;it&rsquo;s a feature not a bug&rdquo; thing with LLM randomness, intoning that these are &ldquo;stochastic sytems&rdquo; that demand a new kind of  leadership to avoid getting left behind. I am <em>so glad</em> that my content marketing days, however brief, were spent marketing something helpful and good.</p>
<p>My local rig is running <a href="https://pdxmph.puddingtime.org/2026/02/10/localgpt-is-a-little-oddly.html">LocalGPT</a>. My primary uses for it involve planning my day/week, capturing ideas, wrangling tasks/projects, and knowing about me.  During setup, I fed it a number of corporate personality tests I&rsquo;ve taken over the years, had it step me through a 20-question &ldquo;getting to know me&rdquo; workflow, and gave it a Markdown document with my org chart and a few observational notes on everyone in it.</p>
<p>My initial approach for outside context was pretty exuberant, but I cooled my jets after a day or two because I&rsquo;d piled too much context in and it was beginning to get weird and scattered.</p>
<p>My initial approach for inside context was to just have a directory of more or less freeform Markdown/YAML. That led to lossiness as the LLM struggled to make sense of the hodgepodge of concrete task/project metadata and human musing.  So I woke <code>atask</code> back up to provide more structure: There&rsquo;s JSON output, better automation for the CLI tool, and a <code>SKILL.md</code> agents can use to understand how to use atask in planning and interaction sessions.  My task data remains my own, I don&rsquo;t have the overhead of an MCP, the sandboxed agent just gets access to what it needs, and it&rsquo;s pretty fast.</p>
<p>So to <code>anote</code> for the things that aren&rsquo;t tasks &hellip; they&rsquo;re just ideas and relationships. Same underlying data format: Denote-style filenaming, Markdown/YAML, affordances for humans and machines,  but with an ideation/incubation/continuous improvement workflow where the entry point is &ldquo;hey I had this idea,&rdquo; the exit point is &ldquo;I ended up here with this idea and rejected it,&rdquo; or &ldquo;I ended up here with this idea and accepted it, implemented it, etc.&rdquo; The <code>SKILL</code> is there to guide the agent into making sense of, working with, and accounting for that corpus of ideas and understandings without the current approach the assorted -claws take of a flat Markdown file.</p>
<p>As I&rsquo;ve sat with Claude this morning, I&rsquo;m up to &ldquo;working CLI that can capture ideas into Markdown files,&rdquo; and there are a couple of taxonomies rattling around: Everything is an &ldquo;idea.&rdquo; Some ideas are &ldquo;aspirations,&rdquo; — things you want to do, make or build. Some ideas are &ldquo;beliefs,&rdquo; things you consider and either accept or reject.</p>
<p>The conceptual glue lives in the SKILL, where the agent is prompted to work with these things in distinct fashions depending on their stage:</p>
<table>
  <thead>
      <tr>
          <th>Stage</th>
          <th>Aspiration</th>
          <th>Belief</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>seed</td>
          <td>seed</td>
          <td>seed</td>
      </tr>
      <tr>
          <td>draft</td>
          <td>draft</td>
          <td>draft</td>
      </tr>
      <tr>
          <td>engaged</td>
          <td>active</td>
          <td>considering</td>
      </tr>
      <tr>
          <td>rethinking</td>
          <td>iterating</td>
          <td>reconsidering</td>
      </tr>
      <tr>
          <td>arrived</td>
          <td>implemented</td>
          <td>accepted</td>
      </tr>
      <tr>
          <td>shelved</td>
          <td>archived</td>
          <td>archived</td>
      </tr>
      <tr>
          <td>no</td>
          <td>rejected</td>
          <td>rejected</td>
      </tr>
      <tr>
          <td>fizzled</td>
          <td>dropped</td>
          <td>dropped</td>
      </tr>
  </tbody>
</table>
<p>The thing I&rsquo;m trying to deal with is that I&rsquo;ve increasingly found LocalGPT useful for kicking ideas around (I fire up wisprflow and free associate and it chatters back at me using that loose collection of things it knows about me) but sometimes it is just &hellip; Jesus Christ. Like, &ldquo;sorry, that dog was distracting me with its barking&rdquo; leads to &ldquo;do you want me to find you contact information for animal control,&rdquo; or worse.</p>
<p>It took some random work noodling and wanted me to go to HR by the time it was done. It took some additional, unstructured prompting to get it to memorize that senior directors don&rsquo;t go to HR for that kind of thing, and that the problem I am trying to solve is entirely within me to solve. Now that it &ldquo;knows&rdquo; that, it&rsquo;s a more helpful mirror because it doesn&rsquo;t suggest stuff I don&rsquo;t think is okay to begin with, and because I can see it making connections with the existing corpus (e.g. those personality profiles) before proposing ideas.</p>
<p>(I am wondering if there&rsquo;s an idea to explore that for every technology person of a certain age, there is a foundational or formative BASIC program. Given how many hours I lost to Civilization and Sim City over the years, it makes sense that &ldquo;Hamurabi&rdquo; was a fave. And for this line of experimentation right now, it makes sense that I was also deeply intrigued by—then immediately irritated by—&ldquo;ELIZA.&rdquo; )</p>
<p>&ldquo;You know, Mike, you could do this with other humans.&rdquo;</p>
<p>But I kind of don&rsquo;t want to. As much as I like to be in collaborative settings and interact with people, there is a part of me that is probably more intensely private than many, and right now at work I am very much in &ldquo;go it alone&rdquo; mode for assorted reasons. It is helpful to have a big, connected mesh of tasks, projects, and ideas to ideate with.  I am after persistence for things I care about as a human being who does things besides write code.</p>
<p>The <a href="https://github.com/mph-llm-experiments/anote/blob/main/docs/SKILL.md"><code>SKILL.md</code></a> is plenty useful for understanding what it is about so far.</p>
<img src="/uploads/microblog/2026/c461d746cc.jpg" width="353" height="600" alt="A robot sitting in a chair is surrounded by lines of programming code for an Eliza chatbot script.">
]]></content:encoded>
    </item>
    <item>
      <title>Well, GEICO has already declared the trailer a total loss, ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-16-well-geico-has-already-declared/</link>
      <pubDate>Mon, 16 Feb 2026 17:02:23 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-16-well-geico-has-already-declared/</guid>
      <description>&lt;p&gt;Well, GEICO has already declared the trailer a total loss, so now on to the claims adjuster.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, GEICO has already declared the trailer a total loss, so now on to the claims adjuster.</p>
]]></content:encoded>
    </item>
    <item>
      <title>reviving denote-tasks </title>
      <link>https://mike.puddingtime.org/posts/2026-02-16-reviving-denotetasks/</link>
      <pubDate>Mon, 16 Feb 2026 00:15:59 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-16-reviving-denotetasks/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been struggling a little with having a common task/project language with LocalGPT, which is sort of my OpenClaw it&amp;rsquo;s okay to like.&lt;/p&gt;
&lt;p&gt;LocalGPT was making Markdown files with project content in them. It wasn&amp;rsquo;t very structured and I had no simple way to quickly interact with a project; just open-read-edit and a sense that it was more cumbersome than I wanted. There was also some &amp;ldquo;oh, btw, check in a few other inboxes&amp;rdquo; that was making life harder and slower.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been struggling a little with having a common task/project language with LocalGPT, which is sort of my OpenClaw it&rsquo;s okay to like.</p>
<p>LocalGPT was making Markdown files with project content in them. It wasn&rsquo;t very structured and I had no simple way to quickly interact with a project; just open-read-edit and a sense that it was more cumbersome than I wanted. There was also some &ldquo;oh, btw, check in a few other inboxes&rdquo; that was making life harder and slower.</p>
<p>I realized this morning that I wrote a spec for how I think about tasks and projects when I did denote-tasks earlier in the year.  It covers all the things I care about, and its TUI is how I prefer to process lists of things to do.  At one point I was running a local MCP that understood the denote-tasks spec, but it was slow and I wasn&rsquo;t very far along on personalizing work management with AI.</p>
<p>So I pulled denote-tasks back out, added JSON output, added better search/query features, and a <a href="https://github.com/mph-llm-experiments/denote-tasks/blob/main/SKILL.md">SKILL.md</a> meant to help agents gravitate toward the machine-friendly parts.  No need for an MCP, and it feels a bit more predictable and deterministic.  Previously, the quality of interactions over open projects and tasks was more variable. Not exactly hallucinations but just a little sloppier than I&rsquo;d like.</p>
<p>With denote-tasks I get a TUI for quickly making/managing tasks that operates the way my ideal list manager works,  but underneath it&rsquo;s Markdown-n-YAML so it works for  readability but has structured data a machine can deal with better.</p>
<p>From the looks of it so far, just going through and having LocalGPT process those free-form project files, then interact with me to bring order to the resulting denote-task tasks, bolting on the more machine-friendly approach is making things smoother when working through projects.</p>
<p>I ought to change the project name. It borrows the denote file naming convention and format, and I believe it would all parse as clean denote content, but I don&rsquo;t actually use Denote (or Emacs much lately) and don&rsquo;t want to give the impression I&rsquo;ve got anything to do with Prot&rsquo;s thing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;Very late stage capitalism.&#34; Not sure how exactly radlibs ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-15-very-late-stage-capitalism-not/</link>
      <pubDate>Sun, 15 Feb 2026 18:37:51 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-15-very-late-stage-capitalism-not/</guid>
      <description>&lt;p&gt;&amp;ldquo;Very late stage capitalism.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Not sure how exactly radlibs are gonna see what was an already woeful construction to conclusion, but if the actual mid-century Marxists are an indicator it&amp;rsquo;ll involve chasing tenure and blaming workers.&lt;/p&gt;
&lt;p&gt;I mean, that&amp;rsquo;s already what radlibs do, so &amp;hellip; 🏆🏁&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;Very late stage capitalism.&rdquo;</p>
<p>Not sure how exactly radlibs are gonna see what was an already woeful construction to conclusion, but if the actual mid-century Marxists are an indicator it&rsquo;ll involve chasing tenure and blaming workers.</p>
<p>I mean, that&rsquo;s already what radlibs do, so &hellip; 🏆🏁</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;We&#39;ll just use screen automation to make it easier for an ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-15-well-just-use-screen-automation/</link>
      <pubDate>Sun, 15 Feb 2026 11:08:44 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-15-well-just-use-screen-automation/</guid>
      <description>&lt;p&gt;&amp;ldquo;We&amp;rsquo;ll just use screen automation to make it easier for an LLM to order Uber Eats for you.&amp;rdquo; These people are turning me into a Maoist.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;We&rsquo;ll just use screen automation to make it easier for an LLM to order Uber Eats for you.&rdquo; These people are turning me into a Maoist.</p>
]]></content:encoded>
    </item>
    <item>
      <title>It&#39;s like if Ford had decided to market Pintos as fun, ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-13-its-like-if-ford-had/</link>
      <pubDate>Fri, 13 Feb 2026 22:34:27 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-13-its-like-if-ford-had/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s like if Ford had decided to market Pintos as fun, rolling campfire experiences.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/b29b36b670.jpg&#34; width=&#34;363&#34; height=&#34;600&#34; alt=&#34;An advertisement by Marketing [@Dust](https://micro.blog/Dust) on LinkedIn discusses transitioning from deterministic to stochastic work tools like ChatGPT, highlighting the need for a mindset shift.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>It&rsquo;s like if Ford had decided to market Pintos as fun, rolling campfire experiences.</p>
<img src="/uploads/microblog/2026/b29b36b670.jpg" width="363" height="600" alt="An advertisement by Marketing [@Dust](https://micro.blog/Dust) on LinkedIn discusses transitioning from deterministic to stochastic work tools like ChatGPT, highlighting the need for a mindset shift.">
]]></content:encoded>
    </item>
    <item>
      <title>Huh. Well, that trailer that got vandalized in a fenced, ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-13-huh-well-that-trailer-that/</link>
      <pubDate>Fri, 13 Feb 2026 19:33:32 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-13-huh-well-that-trailer-that/</guid>
      <description>&lt;p&gt;Huh. Well, that trailer that got vandalized in a fenced, secure lot got picked up on our security camera going by our house this afternoon. We saw it trying to see who emptied out our Little Free Library, which is also a thing people do.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Huh. Well, that trailer that got vandalized in a fenced, secure lot got picked up on our security camera going by our house this afternoon. We saw it trying to see who emptied out our Little Free Library, which is also a thing people do.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Everything is for the people in the back these days</title>
      <link>https://mike.puddingtime.org/posts/2026-02-13-everything-is-for-the-people/</link>
      <pubDate>Fri, 13 Feb 2026 14:42:40 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-13-everything-is-for-the-people/</guid>
      <description>&lt;p&gt;A few episodes into Black Rabbit, it is doing two things I do not like about almost any contemporary tv drama:&lt;/p&gt;
&lt;p&gt;First, it is doing the moralizing thing. We&amp;rsquo;re introduced to a character whose natural place in the narrative would traditionally have involved bringing them into the action a bit later. But the writers felt the need to insert a beat where they don&amp;rsquo;t do much but position him on a moral spectrum so we can know how to read him later, where he&amp;rsquo;d have been a more ambiguous character. Once upon a time, sussing out this sort of character was part of the fun; now we appear to need to be told he&amp;rsquo;s &amp;ldquo;bad&amp;rdquo; for a set of reasons that are orthogonal to his organic place in the story, so that when he naturally enters, we know how to read his behavior and motivations because we&amp;rsquo;ve already been told he&amp;rsquo;s bad.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A few episodes into Black Rabbit, it is doing two things I do not like about almost any contemporary tv drama:</p>
<p>First, it is doing the moralizing thing. We&rsquo;re introduced to a character whose natural place in the narrative would traditionally have involved bringing them into the action a bit later. But the writers felt the need to insert a beat where they don&rsquo;t do much but position him on a moral spectrum so we can know how to read him later, where he&rsquo;d have been a more ambiguous character. Once upon a time, sussing out this sort of character was part of the fun; now we appear to need to be told he&rsquo;s &ldquo;bad&rdquo; for a set of reasons that are orthogonal to his organic place in the story, so that when he naturally enters, we know how to read his behavior and motivations because we&rsquo;ve already been told he&rsquo;s bad.</p>
<p>I <em>think</em> this is part &ldquo;spirit of the times.&rdquo; There&rsquo;s a little reaction to the troubled white male antihero trope, and there&rsquo;s a little bit of plain old moralism under new rules. Everybody thinks they&rsquo;re better than old &rsquo;50s and &rsquo;60s morality plays, but we&rsquo;re not: There was a brief window where moralizing wasn&rsquo;t cool, but that window has closed and mass-marketed  entertainments understand they&rsquo;d better make their Position on Matters clear. It&rsquo;s a source of some family discord right now, in that two of us are having allergic reactions to the moralizing even if our values are aligned with the moralizer, and the third doesn&rsquo;t understand how agreeing with someone while feeling condescended to by them can be a thing.</p>
<p>Another part of it is related to my second issue with Black Rabbit, which is that you can sense the way modern t.v. writers are reacting to binge streaming and competing with phones for attention:</p>
<p>The old saw about stage actors moving to screen was that they had to learn how to pull in a broad style of stage acting keyed to the physical characteristics of the performance space, and become more understated for screen.</p>
<p>Now writers are learning they have to be more overstated and broad, because they know people are only half watching, and for plot-driven narratives probably barely watching until whatever is happening on the screen gets loud enough to get them to look up. Just go read an average recap to understand how little of 50 minutes of a screenplay is even registering with people <em>paid</em> to watch.</p>
<p>One way that broadness plays out is uneven pacing in the takes. Sometimes a scene goes on a little long, or a reaction is held a few beats over its natural length, apparently to make sure it lands.</p>
<p>I just got through <em>The Task</em> and it did that several times. A director who trusted the actor, script, and audience wouldn&rsquo;t hold some of those takes that long or make such a point to keep the camera on a reaction.   Writers and editors are dealing with an audience that is both six feet away from &ldquo;the stage,&rdquo; but psychically up in the third row of the balcony.</p>
<p>It&rsquo;s weird, because <em>Black Rabbit</em> screen editing is paced like any other fast-cutting t.v. thing in the 21st century, but there&rsquo;s this weird sense of friction or slowness at key moments when it briefly feathers the brakes to make sure the reaction landed. It&rsquo;s like start and stop rush hour traffic, but for your brain.</p>
<p>I feel weird even writing about television because it suggests I spend a lot of time on it. I really don&rsquo;t relative to any national average I&rsquo;ve read about recently, but I think that&rsquo;s made me more sensitive to modern norms: I used to watch a lot more television and notice the difference.</p>
]]></content:encoded>
    </item>
    <item>
      <title>No, my dude, I am not &#34;tired of entering passwords.&#34; ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-11-no-my-dude-i-am/</link>
      <pubDate>Wed, 11 Feb 2026 15:11:46 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-11-no-my-dude-i-am/</guid>
      <description>&lt;p&gt;No, my dude, I am not &amp;ldquo;tired of entering passwords.&amp;rdquo; Entering passwords has been solved securely and effectively and I no longer think twice about it. What I am tired of is waiting for the magic link to arrive, and I am super sick of the havoc that wreaks trying to just do a simple Oauth grant. 😤&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>No, my dude, I am not &ldquo;tired of entering passwords.&rdquo; Entering passwords has been solved securely and effectively and I no longer think twice about it. What I am tired of is waiting for the magic link to arrive, and I am super sick of the havoc that wreaks trying to just do a simple Oauth grant. 😤</p>
]]></content:encoded>
    </item>
    <item>
      <title>LocalGPT is a little oddly named, to the extent the &#34;local&#34; ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-10-localgpt-is-a-little-oddly/</link>
      <pubDate>Tue, 10 Feb 2026 09:43:28 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-10-localgpt-is-a-little-oddly/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://localgpt.app&#34;&gt;LocalGPT&lt;/a&gt; is a little oddly named, to the extent the &amp;ldquo;local&amp;rdquo; part is something you can aspire to if the hardware economics of a local LLM make sense to you. But the interesting part is more that it&amp;rsquo;s very &amp;ldquo;OpenClaw lite.&amp;rdquo; Still has the run of the platter, etc. but it&amp;rsquo;s a single Rust binary and feels a bit less sprawling.  It also has a little less personality out of the box, and it feels snappier.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://localgpt.app">LocalGPT</a> is a little oddly named, to the extent the &ldquo;local&rdquo; part is something you can aspire to if the hardware economics of a local LLM make sense to you. But the interesting part is more that it&rsquo;s very &ldquo;OpenClaw lite.&rdquo; Still has the run of the platter, etc. but it&rsquo;s a single Rust binary and feels a bit less sprawling.  It also has a little less personality out of the box, and it feels snappier.</p>
<p>Comes with a built-in CLI chat interface, a built-in webserver on localhost for web-based chat, and there&rsquo;s a Telegram interface that hasn&rsquo;t been attached to a tag yet.</p>
<p>Curiously, it is also less, erm, &ldquo;aware&rdquo; of its own existence as a mediating layer between it and whatever LLM it is connected to. OpenClaw handles questions about itself with operating information that it is OpenClaw you are talking to. LocalGPT periodically answers questions directed to &ldquo;you&rdquo; in Claude Code&rsquo;s voice.</p>
<p>I like that, by virtue of running it through the Claude Code CLI, it has access to all the tools Claude Code has: Any cloud MCPs and skills pass through to LocalGPT, so it shares <a href="https://basicmemory.com">basic-memory</a> with any other LLM talking to that MCP along with its own memory layer (which is fast and transparent).</p>
<p>It is far less likely to induce the kinds of quasi-religious experiences OpenClaw was inducing because it feels more stripped down and the seams show more. That makes it a way better experimental tool to me. There&rsquo;s less complexity, it&rsquo;s more transparent, it&rsquo;s lighter weight, and it&rsquo;s less aggressive. At the same time, it borrows some of the patterns that make OpenClaw more useful out-of-the-box than the kinds of Jarvises you see people cobbling together.</p>
<p>As with all these things, it is reflective of the discipline that produced it, so I have to steer it toward my &ldquo;humanist manager&rdquo; use cases more. But the transparency, speed, and simplicity mean a little less &ldquo;what on earth is going on in there&rdquo; and a little more &ldquo;if I&rsquo;m not sure, there&rsquo;s a limited set of Markdown files this thing is using to &lsquo;know&rsquo; stuff, so I can introspect and nudge.&rdquo;</p>
<p>I fed it a bunch of blog posts about management and work, along with a couple of skills assessments, and it has become a good planning aid because it nudges me to remember the things that matter to me during a time when it&rsquo;d be way easier to embrace my inner asshole.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Untitled</title>
      <link>https://mike.puddingtime.org/posts/2026-02-07-221813/</link>
      <pubDate>Sat, 07 Feb 2026 23:18:13 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-07-221813/</guid>
      <description>&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/358aa7fa5a.jpg&#34; width=&#34;600&#34; height=&#34;468&#34; alt=&#34;A person is surprised to see their computer respond with I AM ALIVE after they instructed it to say I am alive.&#34;&gt;</description>
      <content:encoded><![CDATA[<img src="/uploads/microblog/2026/358aa7fa5a.jpg" width="600" height="468" alt="A person is surprised to see their computer respond with I AM ALIVE after they instructed it to say I am alive.">
]]></content:encoded>
    </item>
    <item>
      <title>Commander&#39;s Intent</title>
      <link>https://mike.puddingtime.org/posts/2026-02-05-commanders-intent/</link>
      <pubDate>Thu, 05 Feb 2026 09:31:38 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-05-commanders-intent/</guid>
      <description>&lt;p&gt;One of the weird paradoxes of corporate life, when I think back to my time in an airborne unit, is that culturally, as a paratrooper, I understood every directive or plan to be subject to my own situational awareness. I show up at work with a presumption that I have room to judge, apply creative thinking to directives, and think in terms of accomplishing &amp;ldquo;commander&amp;rsquo;s intent,&amp;rdquo;  not &amp;ldquo;stick to the plan even if it means the commander&amp;rsquo;s intent won&amp;rsquo;t be realized.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>One of the weird paradoxes of corporate life, when I think back to my time in an airborne unit, is that culturally, as a paratrooper, I understood every directive or plan to be subject to my own situational awareness. I show up at work with a presumption that I have room to judge, apply creative thinking to directives, and think in terms of accomplishing &ldquo;commander&rsquo;s intent,&rdquo;  not &ldquo;stick to the plan even if it means the commander&rsquo;s intent won&rsquo;t be realized.&rdquo;</p>
<p>Corporate leaders who know my biography have said things like, &ldquo;compared to normal startup people your background probably means you understand the importance of strict control and compliance.&rdquo;</p>
<p>No, my background means that I operated in a culture where we were given careful plans for operations, but focused on what the plans were for and how any one of us might, at any given moment, end up needing to toss the plan to accomplish the mission.</p>
<p>And that wasn&rsquo;t just paratrooping. My first assignment out of jump school was a conventional signal unit in South Korea, providing FM retransmission over the southern half of the peninsula. Things were always going wrong, and it was always left to teams of three or four operating in isolation on a series of mountaintops to &ldquo;adapt and overcome,&rdquo; regardless of the original plan or what the field manual said.  My very first radio watch in the field, something went wrong, I reached for the troubleshooting flow chart, and my team lead sighed, and said, &ldquo;that&rsquo;s going to take an hour. Forget what those instructors said. Use your common sense. What do you <em>think</em> is wrong? Fix that.&rdquo;</p>
<p>Micromanagement, strict alignment, and deep discomfort with creative interpretation and execution are way more common in the businesses I&rsquo;ve worked in than they ever were in either a conventional Signal platoon, or an airborne unit.</p>
<p>The challenge for me, as a leader in a corporation, has been to understand I have that formative experience and am just stubborn and naive enough to believe it was a good operating model that left me feeling empowered even if I had to keep my uniform pressed and hair short. Out in the civilian world, not everyone had that experience and often will interpret &ldquo;here&rsquo;s a rough plan, improvise as needed&rdquo; as &ldquo;execute in this manner, don&rsquo;t deviate.&rdquo; Or rather, it&rsquo;s a mindset that appears at some frequency above &ldquo;uncommon.&rdquo;</p>
<p>In that retransmission platoon, and in that airborne unit, we all knew better than to think like that. We knew we needed to just get the shot and keep comms flowing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>On a more prosaic life note: &#34;Get up at 5 a.m. and conquer&#34; ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-04-on-a-more-prosaic-life/</link>
      <pubDate>Wed, 04 Feb 2026 08:56:19 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-04-on-a-more-prosaic-life/</guid>
      <description>&lt;p&gt;On a more prosaic life note: &amp;ldquo;Get up at 5 a.m. and conquer&amp;rdquo; is basically a suicide pact for me; but &amp;ldquo;get up at 6, do little with a screen, get around to breakfast at 7, organize your day by 8&amp;rdquo; is pretty mellow and sustainable.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>On a more prosaic life note: &ldquo;Get up at 5 a.m. and conquer&rdquo; is basically a suicide pact for me; but &ldquo;get up at 6, do little with a screen, get around to breakfast at 7, organize your day by 8&rdquo; is pretty mellow and sustainable.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I started to write about OpenClaw and got as far as &#34;the ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-04-i-started-to-write-about/</link>
      <pubDate>Wed, 04 Feb 2026 08:54:21 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-04-i-started-to-write-about/</guid>
      <description>&lt;p&gt;I started to write about OpenClaw and got as far as &amp;ldquo;the story so far on my past attempts to do some of what this is packaging up&amp;rdquo; before realizing there&amp;rsquo;s a certain kind of writing about tech that borders on making someone spend brunch listening to a meticulous retelling of last night&amp;rsquo;s stress dream. Since this blog is as much about me jotting down a few things for future reference as it is the benefit of others, I&amp;rsquo;m glad I stopped typing so I can just drop in a limited observation:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I started to write about OpenClaw and got as far as &ldquo;the story so far on my past attempts to do some of what this is packaging up&rdquo; before realizing there&rsquo;s a certain kind of writing about tech that borders on making someone spend brunch listening to a meticulous retelling of last night&rsquo;s stress dream. Since this blog is as much about me jotting down a few things for future reference as it is the benefit of others, I&rsquo;m glad I stopped typing so I can just drop in a limited observation:</p>
<p><a href="https://ferd.ca/the-gap-through-which-we-praise-the-machine.html">&ldquo;The Gap Through Which We Praise the Machine&rdquo;</a> remains the best expression of what I keep learning with each wave of &ldquo;no, it&rsquo;s different this time&rdquo; with this stuff: OpenClaw addresses things I was trying to cobble together for myself in a coherent, intelligent, useful way that I personally do not have the wherewithal to build for myself; but the underlying tech on which it is built still requires scaffolding, kludges, and computationally expensive workarounds, and you still end up having to do work to get it to work.</p>
<p>It is a definite step forward. It&rsquo;s a proof of concept that is a few steps closer to what I think a lot of us imagine when we talk about the possibilities of agentic AI. I really appreciate that it is a bit more proactive in its way around proposing and implementing tools that reduce the burden on me to craft hyper-specific prompts or continuously redirect it. But you&rsquo;re still doing work to get it to work.</p>
<p>The religious rapture with which it is being greeted is not a comment on the technology. It is a comment on the narcissism the tech industry is goading us all into with these things.</p>
<hr>
<p>My OpenClaw instance is operating in a personal Slack account, btw. I have a few channels set up where it provides slightly different kinds of assistance depending on context and the kind of help I need. I picked Slack because the integration picture is good with several tools I use. If OpenClaw can&rsquo;t solve a problem with a tool it made, or if I need to make a quick update to state on a given piece of information, it&rsquo;s a <code>/command</code> away with the appropriate integration. As I get ready to start a bake-off on agentic AI tools at work, this is helpful validation for a few ideas I have about where Slack fits into it all.</p>
<hr>
<p>I gave Chrome&rsquo;s new &ldquo;run the browser with Gemini&rdquo; feature a try with a pretty mundane task: Starting from my Amazon Kindle account, find and remove the samples from my library of 400+ Kindle documents.</p>
<p>It was an exercise in utter misery.  Amazingly bad. I made it stop after watching it &ldquo;think&rdquo; for two minutes just to ask me four times before it would remove the first sample, at which point it said &ldquo;well, this is a bad website so it&rsquo;s understandable this was not a good idea.&rdquo;</p>
<p>I mean, who knows what Amazon&rsquo;s web team has done in its quest to thwart a few common workflows people use to automate Kindle management (and de-DRMing). It probably had a point.</p>
<p>&ldquo;Let&rsquo;s see in a year!&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Our camper got broken into. Filing a report I forgot the ...</title>
      <link>https://mike.puddingtime.org/posts/2026-02-03-our-camper-got-broken-into/</link>
      <pubDate>Tue, 03 Feb 2026 21:53:20 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-03-our-camper-got-broken-into/</guid>
      <description>&lt;p&gt;Our camper got broken into. Filing a report I forgot the plate #, so I  typed &amp;ldquo;camper&amp;rdquo; into Apple Photos search, found a picture with the plate  &amp;amp; copied the text-recognized #. It took less than 10 seconds from &amp;ldquo;search&amp;rdquo; to &amp;ldquo;paste into the report&amp;rdquo; from 43k photos.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Our camper got broken into. Filing a report I forgot the plate #, so I  typed &ldquo;camper&rdquo; into Apple Photos search, found a picture with the plate  &amp; copied the text-recognized #. It took less than 10 seconds from &ldquo;search&rdquo; to &ldquo;paste into the report&rdquo; from 43k photos.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Ben</title>
      <link>https://mike.puddingtime.org/posts/2026-02-01-ben/</link>
      <pubDate>Sun, 01 Feb 2026 11:06:13 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-01-ben/</guid>
      <description>&lt;p&gt;Ben&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/2a93786076.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A person is sitting in a dimly lit room with a framed mirror reflecting a lamplit interior.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Ben</p>
<img src="/uploads/microblog/2026/2a93786076.jpg" width="450" height="600" alt="A person is sitting in a dimly lit room with a framed mirror reflecting a lamplit interior.">
]]></content:encoded>
    </item>
    <item>
      <title>Eugene</title>
      <link>https://mike.puddingtime.org/posts/2026-02-01-eugene/</link>
      <pubDate>Sun, 01 Feb 2026 11:04:53 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-02-01-eugene/</guid>
      <description>&lt;p&gt;Eugene&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/098fa8c7df.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A dimly lit room is divided into two contrasting halves, with a bed and nightstand on one side and a window with a chair and air conditioner on the other.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/611c4a4cea.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;Two contrasting urban scenes are juxtaposed, showing a bench against a wall on the left and a weathered entrance with a door on the right.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/9f8d6630f5.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A barbed wire fence and security cameras are set against a stark wall with dried ivy and a faded red alarm.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Eugene</p>
<p><img src="/uploads/microblog/2026/098fa8c7df.jpg" width="600" height="400" alt="A dimly lit room is divided into two contrasting halves, with a bed and nightstand on one side and a window with a chair and air conditioner on the other."><img src="/uploads/microblog/2026/611c4a4cea.jpg" width="600" height="400" alt="Two contrasting urban scenes are juxtaposed, showing a bench against a wall on the left and a weathered entrance with a door on the right."><img src="/uploads/microblog/2026/9f8d6630f5.jpg" width="600" height="400" alt="A barbed wire fence and security cameras are set against a stark wall with dried ivy and a faded red alarm."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Say whatever about my priorities and inner life, I&#39;m not ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-29-say-whatever-about-my-priorities/</link>
      <pubDate>Thu, 29 Jan 2026 20:41:57 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-29-say-whatever-about-my-priorities/</guid>
      <description>&lt;p&gt;Say whatever about my priorities and inner life, I&amp;rsquo;m not emotionally invested in iOS&amp;rsquo;s 90-day uptake numbers.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Say whatever about my priorities and inner life, I&rsquo;m not emotionally invested in iOS&rsquo;s 90-day uptake numbers.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A software eng got sniffy with me for verifying how an app ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-28-a-software-eng-got-sniffy/</link>
      <pubDate>Wed, 28 Jan 2026 17:53:10 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-28-a-software-eng-got-sniffy/</guid>
      <description>&lt;p&gt;A software eng got sniffy with me for verifying how an app works. &amp;ldquo;I&amp;rsquo;d expect IT to know already.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Sure, dude. What IT knows is that we have to use software made by people like you, which means we leave a lot of room for nothing to work like you tell us it will. Forgive me for doublechecking.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A software eng got sniffy with me for verifying how an app works. &ldquo;I&rsquo;d expect IT to know already.&rdquo;</p>
<p>Sure, dude. What IT knows is that we have to use software made by people like you, which means we leave a lot of room for nothing to work like you tell us it will. Forgive me for doublechecking.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Nice Saturday: Breakfast downtown, an experiment with a new ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-25-nice-saturday-breakfast-downtown-an/</link>
      <pubDate>Sun, 25 Jan 2026 10:43:16 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-25-nice-saturday-breakfast-downtown-an/</guid>
      <description>&lt;p&gt;Nice Saturday: Breakfast downtown, an experiment with a new barber that paid off, and a hike up to Pittock Mansion (with some ice patches we weren&amp;rsquo;t expecting). I like my old barber, but I&amp;rsquo;m not the kind of work he wants to do. The new one received me with a welcome mix of warmth and pragmatism.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/2f22a5c1de.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A cozy café interior features elegant chandeliers, a yellow tufted armchair, and a person sitting at a table by the window.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/a7b8182878.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;Shadows of the words BARBER CO. are cast on a surface, with partial views of framed pictures in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/8f84d02bfe.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A pedestrian crosses the street near a traditional Chinese gate and various vehicles at an intersection in an urban area.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/bde6c0314d.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A group of people are gathered at a viewpoint overlooking a city with a mountain in the background under a clear blue sky.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Nice Saturday: Breakfast downtown, an experiment with a new barber that paid off, and a hike up to Pittock Mansion (with some ice patches we weren&rsquo;t expecting). I like my old barber, but I&rsquo;m not the kind of work he wants to do. The new one received me with a welcome mix of warmth and pragmatism.</p>
<p><img src="/uploads/microblog/2026/2f22a5c1de.jpg" width="450" height="600" alt="A cozy café interior features elegant chandeliers, a yellow tufted armchair, and a person sitting at a table by the window."><img src="/uploads/microblog/2026/a7b8182878.jpg" width="600" height="450" alt="Shadows of the words BARBER CO. are cast on a surface, with partial views of framed pictures in the background."><img src="/uploads/microblog/2026/8f84d02bfe.jpg" width="600" height="337" alt="A pedestrian crosses the street near a traditional Chinese gate and various vehicles at an intersection in an urban area."><img src="/uploads/microblog/2026/bde6c0314d.jpg" width="600" height="450" alt="A group of people are gathered at a viewpoint overlooking a city with a mountain in the background under a clear blue sky."></p>
]]></content:encoded>
    </item>
    <item>
      <title>&gt; [The World Is Drowning in Tourists. Who Should Pay the ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-25-the-world-is-drowning-in/</link>
      <pubDate>Sun, 25 Jan 2026 07:55:53 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-25-the-world-is-drowning-in/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://archive.is/2026.01.24-224437/https://www.bloomberg.com/news/features/2026-01-23/how-governments-visitors-can-combat-barcelona-paris-venice-overtourism&#34;&gt;The World Is Drowning in Tourists. Who Should Pay the Price?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The benefit of traveling with another introvert is that you can round a corner with them, realize neither of you are going to like this situation, utter a low growl, and go somewhere people are not. I suppose you miss the opportunity to recreate postcard photos, but you also get to just see the place a little more as it is lived in, not traveled.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p><a href="https://archive.is/2026.01.24-224437/https://www.bloomberg.com/news/features/2026-01-23/how-governments-visitors-can-combat-barcelona-paris-venice-overtourism">The World Is Drowning in Tourists. Who Should Pay the Price?</a></p>
</blockquote>
<p>The benefit of traveling with another introvert is that you can round a corner with them, realize neither of you are going to like this situation, utter a low growl, and go somewhere people are not. I suppose you miss the opportunity to recreate postcard photos, but you also get to just see the place a little more as it is lived in, not traveled.</p>
<p><img src="/uploads/microblog/2026/4f63222962.jpg" width="600" height="337" alt="Two people are energetically chasing a soccer ball in what appears to be a public area with blurred motion, while others in the background observe."><img src="/uploads/microblog/2026/64d7af3958.jpg" width="600" height="337" alt="Two people walk past storefronts labeled Maya Boutique and Easy Mobiles 69 on a busy street."><img src="/uploads/microblog/2026/3ed7bba0d5.jpg" width="600" height="337" alt="A quiet street scene in a European city features people walking, a few sitting, and colorful buildings lining the street."><img src="/uploads/microblog/2026/7797a90c41.jpg" width="450" height="600" alt="A bustling cobblestone street is filled with people walking between European-style buildings."></p>
]]></content:encoded>
    </item>
    <item>
      <title>I&#39;ve never done a solo RPG before. I&#39;m not sure how I found ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-22-ive-never-done-a-solo/</link>
      <pubDate>Thu, 22 Jan 2026 17:46:50 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-22-ive-never-done-a-solo/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve never done a solo RPG before. I&amp;rsquo;m not sure how I found this one, but it looks fun and it&amp;rsquo;ll be an excuse to do some writing that isn&amp;rsquo;t a series of Slack messages pestering people about software licenses.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/af3b6132bd.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A black cover features a stylized ouroboros design above the bold white text Lichdom.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/0f52c6e653.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A book with the text “Reject Death, Embrace Power” on an orange surface contains text about a roleplaying game involving a journey toi lichdom and overcoming challenges before death.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve never done a solo RPG before. I&rsquo;m not sure how I found this one, but it looks fun and it&rsquo;ll be an excuse to do some writing that isn&rsquo;t a series of Slack messages pestering people about software licenses.</p>
<p><img src="/uploads/microblog/2026/af3b6132bd.jpg" width="450" height="600" alt="A black cover features a stylized ouroboros design above the bold white text Lichdom."><img src="/uploads/microblog/2026/0f52c6e653.jpg" width="450" height="600" alt="A book with the text “Reject Death, Embrace Power” on an orange surface contains text about a roleplaying game involving a journey toi lichdom and overcoming challenges before death."></p>
]]></content:encoded>
    </item>
    <item>
      <title>a former dirtbag editor on em dashes</title>
      <link>https://mike.puddingtime.org/posts/2026-01-21-a-former-dirtbag-editor-on/</link>
      <pubDate>Wed, 21 Jan 2026 22:45:32 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-21-a-former-dirtbag-editor-on/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ll be the first to admit that, as an editor, I was a relative dirtbag. I mean, I cared about what I was editing. I shared what little I knew about writing from writers who wanted to learn from me, but my core diagnostic tool came down to clarity. Most of my feedback over the years came down to &amp;ldquo;I think you painted yourself into a corner here. Either you aren&amp;rsquo;t sure of yourself and you&amp;rsquo;re trying to talk your way out of it, or you just got in a hurry. How does this work, instead?&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ll be the first to admit that, as an editor, I was a relative dirtbag. I mean, I cared about what I was editing. I shared what little I knew about writing from writers who wanted to learn from me, but my core diagnostic tool came down to clarity. Most of my feedback over the years came down to &ldquo;I think you painted yourself into a corner here. Either you aren&rsquo;t sure of yourself and you&rsquo;re trying to talk your way out of it, or you just got in a hurry. How does this work, instead?&rdquo;</p>
<p>What else besides that?</p>
<ul>
<li>Be ruthless toward needless occurrences of &ldquo;that&rdquo; (thank you, <a href="https://archive.org/details/isbn_9780813801490">Martin L. Gibson</a>).</li>
<li>Never call something a  &ldquo;misspelling&rdquo; when it&rsquo;s obviously a typo.</li>
<li>Passive voice bad.</li>
<li>&ldquo;You&rsquo;re doing fine. Clear thinkers make for good writers, so don&rsquo;t overthink it and keep going.&rdquo;</li>
</ul>
<p>I think a lot of it came down to a fraught relationship to writing: Some middle school diagnostic administered by the state of Indiana declared me a mediocre fifth-grader in writing aptitude. What did I know? The test said so.</p>
<p>I self-selected into the remedial composition course when I got to college. A week later the prof said, &ldquo;I don&rsquo;t know what you&rsquo;re doing in here. Did someone tell you that you had to take this course?&rdquo;</p>
<p>&ldquo;No, I&rsquo;m just a bad writer.&rdquo;</p>
<p>&ldquo;Well, you&rsquo;re actually a good writer.  You can stay if you want. You can help the people who are struggling. My husband&rsquo;s the school paper advisor and I think you should go talk to him.&rdquo;</p>
<p>It kind of came down to &ldquo;what did I know&rdquo; all over again, just with a message it was nicer to hear. I did go visit her husband, and he did give me a column, and I won a few college newspaper awards for my columns. I liked it enough that I dropped out my senior year because I just wanted to go work at a newspaper.</p>
<p>I wouldn&rsquo;t say I <em>applied</em> myself to writing. I was thin-skinned and fragile about feedback because the coaching I got amounted to &ldquo;you&rsquo;re actually good at this, just trust your instincts and <em>write</em>.&rdquo;  Much later on, dealing with new writers, I realized how much I felt my quality as a writer was externally conferred and hence vaguely magical or spiritual &hellip; a thing that was conferred upon me by some authority and that could be taken away or disproven by some other authority.</p>
<p>So my sense of myself as a writer wasn&rsquo;t really bound up in any personal grounding in &ldquo;what is good writing.&rdquo; I didn&rsquo;t think about it much. A friend who was editing my work said in a state of mild exasperation, &ldquo;writing is something I know how to do, and I&rsquo;m good at it, but you <em>have</em> to do it.&rdquo;</p>
<p>I <em>had</em> to do it, and I was always waiting for someone to say I was no good after all.</p>
<p>So when I started doing more editing work, I felt  like an imposter with a bag of small tricks I&rsquo;d learned at the feet of a very angry regional editor at a small midwestern newspaper chain whose first guidance to me was &ldquo;quit reading philosophy and read only Hemingway until I tell you to stop,&rdquo; and whose next piece of feedback after that was &ldquo;keep up with the Hemingway.&rdquo; Or it might have been him faxing a copy of a story back to me with the word &ldquo;NO&rdquo; written through the second paragraph.</p>
<p>Anyhow, as an imposter editor who remembered very acutely what it felt like to be &ldquo;good&rdquo; at something I didn&rsquo;t personally understand, it was important to me to encourage new writers to just pay attention, learn a few ideas about how to be clear even if you can&rsquo;t Write Amazing Sentences, and otherwise just believe that if they were clear thinkers and knew what they were talking about, they&rsquo;d probably be fine.</p>
<p>I say that with a little shame, because I have known so many <em>stellar</em> editors. People who had,  as I once explained to someone who didn&rsquo;t believe there could be a principal-level writer, &ldquo;advanced degrees in this shit, dude.&rdquo;  People to whom good writing was science, vocation, and passion. Leading a tech writing team? Jesus Christ. I had no place. But I did love that period on a marketing team where I drove an internal contributor program, because I could just tell these bright, thoughtful people, &ldquo;write about what you know. It&rsquo;s interesting. I can tell you&rsquo;re thinking clearly, so you&rsquo;ll probably write clearly.&rdquo; And I took joy in running into them in the hall and saying &ldquo;oh, that blog post did a few thousand views! Top post of the quarter so far!&rdquo;</p>
<p>The tech writers, on the other hand, tolerated me with good grace. That was a good team and a good time.</p>
<p>Anyhow, I suppose my last point on all this, what inspired me to start typing, is that I saw yet another post about em dashes and AI, and how <em>this</em> person was <em>with immense regret</em> no longer going to use em dashes because they&rsquo;re the mark of an LLM.  Reading that kind of post, of which there are many, makes me feel sad for good writers who feel pressured to drop a tool from their self expression toolkit for fear of stigma. And it makes me <em>angry</em> at people who go around calling out em dashes, because it combines the worst elements of phrenology and witch trials, then wraps it all in social media histrionics.</p>
<p>For what it&rsquo;s worth, and speaking as a former dirtbag editor with little useful knowledge of what makes writing good, I will say that <a href="https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing">Wikipedia&rsquo;s guide to signs of AI writing</a> is interesting and educational. It puts names on things I&rsquo;ve <em>felt</em> but couldn&rsquo;t name (&ldquo;negative parallelisms,&rdquo; for one) and is much more useful for critical reading conducted with the intent of catching a bot.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Short Sands Beach (Oswalt West)</title>
      <link>https://mike.puddingtime.org/posts/2026-01-19-short-sands-beach-oswalt-west/</link>
      <pubDate>Mon, 19 Jan 2026 15:17:37 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-19-short-sands-beach-oswalt-west/</guid>
      <description>&lt;p&gt;Short Sands Beach (Oswalt West)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/c53f5f1be3.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A serene beach scene features silhouettes of people along the shoreline, a bright sun in the sky, and a tree-covered hillside.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/e7a8d100ca.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A person sits on rocky outcrops by a tranquil beach with waves lapping against the shore, bordered by a dense forest.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/3d7b49fa1a.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Surfers carry their boards along a sandy beach surrounded by forested cliffs under a clear blue sky.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/9133a16b7a.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A serene coastal scene features a sandy beach, gentle waves, and a backdrop of forested cliffs.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Short Sands Beach (Oswalt West)</p>
<p><img src="/uploads/microblog/2026/c53f5f1be3.jpg" width="600" height="337" alt="A serene beach scene features silhouettes of people along the shoreline, a bright sun in the sky, and a tree-covered hillside."><img src="/uploads/microblog/2026/e7a8d100ca.jpg" width="600" height="450" alt="A person sits on rocky outcrops by a tranquil beach with waves lapping against the shore, bordered by a dense forest."><img src="/uploads/microblog/2026/3d7b49fa1a.jpg" width="600" height="337" alt="Surfers carry their boards along a sandy beach surrounded by forested cliffs under a clear blue sky."><img src="/uploads/microblog/2026/9133a16b7a.jpg" width="600" height="337" alt="A serene coastal scene features a sandy beach, gentle waves, and a backdrop of forested cliffs."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Manzanita</title>
      <link>https://mike.puddingtime.org/posts/2026-01-18-manzanita/</link>
      <pubDate>Sun, 18 Jan 2026 15:54:56 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-18-manzanita/</guid>
      <description>&lt;p&gt;Manzanita&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/9481461c0e.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A red door and window display a Help Wanted sign in a dimly lit rustic setting.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/ecf8e1a776.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;two people  on a sandy beach near the water next to a yellow surfboard&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/ec44b221f9.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;People and dogs enjoy a sunny day on a beach with driftwood, near a mountainous coastline.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/344ff85df0.jpg&#34; width=&#34;449&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Manzanita</p>
<p><img src="/uploads/microblog/2026/9481461c0e.jpg" width="600" height="450" alt="A red door and window display a Help Wanted sign in a dimly lit rustic setting."><img src="/uploads/microblog/2026/ecf8e1a776.jpg" width="600" height="337" alt="two people  on a sandy beach near the water next to a yellow surfboard"><img src="/uploads/microblog/2026/ec44b221f9.jpg" width="600" height="337" alt="People and dogs enjoy a sunny day on a beach with driftwood, near a mountainous coastline."><img src="/uploads/microblog/2026/344ff85df0.jpg" width="449" height="600" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>Cannon Beach on the way to Manzanita</title>
      <link>https://mike.puddingtime.org/posts/2026-01-17-213102/</link>
      <pubDate>Sat, 17 Jan 2026 22:31:02 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-17-213102/</guid>
      <description>&lt;p&gt;Cannon Beach on the way to Manzanita&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/8049d35503.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A serene beach scene captures silhouettes of people and a dog with the iconic Haystack Rock in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/3441b04cc3.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Silhouettes of large sea stacks stand against a clear, sunlit sky along a coastline.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/6221177ece.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A dramatic black and white scene shows two people and a dog on a serene beach with cliffs and the sun setting over the ocean.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/9a335921a6.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A group of people walk along a reflective beach at sunset with a large rock formation in the background.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Cannon Beach on the way to Manzanita</p>
<p><img src="/uploads/microblog/2026/8049d35503.jpg" width="600" height="337" alt="A serene beach scene captures silhouettes of people and a dog with the iconic Haystack Rock in the background."><img src="/uploads/microblog/2026/3441b04cc3.jpg" width="600" height="337" alt="Silhouettes of large sea stacks stand against a clear, sunlit sky along a coastline."><img src="/uploads/microblog/2026/6221177ece.jpg" width="600" height="337" alt="A dramatic black and white scene shows two people and a dog on a serene beach with cliffs and the sun setting over the ocean."><img src="/uploads/microblog/2026/9a335921a6.jpg" width="600" height="450" alt="A group of people walk along a reflective beach at sunset with a large rock formation in the background."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Cannon Beach on the way to Manzanita</title>
      <link>https://mike.puddingtime.org/posts/2026-01-17-cannon-beach-on-the-way/</link>
      <pubDate>Sat, 17 Jan 2026 22:21:52 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-17-cannon-beach-on-the-way/</guid>
      <description>&lt;p&gt;Cannon Beach on the way to Manzanita&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/1cd02b5b2d.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A dramatic sunset illuminates the ocean and large silhouetted rock formations.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/fa57372292.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;Surfers walk along a reflective, serene beach at sunset with a large rock formation in the distance.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/fa34967582.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A serene beach scene at sunset features silhouettes of people walking along the shoreline with large rock formations in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/a95c8f11a8.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Two people in white dresses walk along a rocky coastline at sunset, with large sea stacks in the background.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Cannon Beach on the way to Manzanita</p>
<p><img src="/uploads/microblog/2026/1cd02b5b2d.jpg" width="450" height="600" alt="A dramatic sunset illuminates the ocean and large silhouetted rock formations."><img src="/uploads/microblog/2026/fa57372292.jpg" width="450" height="600" alt="Surfers walk along a reflective, serene beach at sunset with a large rock formation in the distance."><img src="/uploads/microblog/2026/fa34967582.jpg" width="600" height="337" alt="A serene beach scene at sunset features silhouettes of people walking along the shoreline with large rock formations in the background."><img src="/uploads/microblog/2026/a95c8f11a8.jpg" width="600" height="337" alt="Two people in white dresses walk along a rocky coastline at sunset, with large sea stacks in the background."></p>
]]></content:encoded>
    </item>
    <item>
      <title>28 Days (With Gemini) Later</title>
      <link>https://mike.puddingtime.org/posts/2026-01-14-days-with-gemini-later/</link>
      <pubDate>Wed, 14 Jan 2026 22:20:52 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-14-days-with-gemini-later/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m up to 28 active days on Gemini at work in the past 28 days, so ✅ for me on that. That is up from 8 active days the prior 28-day period, not because I wasn&amp;rsquo;t &amp;ldquo;using AI,&amp;rdquo; but because I didn&amp;rsquo;t care to use Gemini.  Anyhow, I set out on a concerted effort to figure out Gemini in particular, and that led to me learning a lot more about Google Workspace in general.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m up to 28 active days on Gemini at work in the past 28 days, so ✅ for me on that. That is up from 8 active days the prior 28-day period, not because I wasn&rsquo;t &ldquo;using AI,&rdquo; but because I didn&rsquo;t care to use Gemini.  Anyhow, I set out on a concerted effort to figure out Gemini in particular, and that led to me learning a lot more about Google Workspace in general.</p>
<p>I&rsquo;ve never felt  in sync with Google&rsquo;s whole ecosystem. I have a lot of appreciation for GMail as a standalone product. I&rsquo;m so used to Google Calendar at this point that I&rsquo;m resistant to anything that doesn&rsquo;t act like it, but I don&rsquo;t really calendar my personal life. I tolerate Drive, hate Slides, get along with Docs, and have developed a grudging respect for Sheets. Meet has gotten better over the years. Tasks is super simplistic and its apps are bad, but I&rsquo;m going to get back to it. Keep &ndash; I&rsquo;ve never stuck with it.</p>
<p>But being under a mandate to use AI in prescribed tools, I sat down to a Gemini prompt and started poking around. You can give Gemini the run of your Google Workspace stuff with one configuration switch. So I enabled that and started playing. As with anything like this, I started with the calendar because I&rsquo;m in that more than any other app during the day.</p>
<p>The integration with Workspace apps is faster than any MCP that offers the same integration via Gemini CLI. It&rsquo;s quick to tell you what your day looks like, and Gemini tries to be helpful with interpretation, looking out for opportunities to optimize or figure out when the best work might be squeezed in between events. I put together a custom Gem named &ldquo;Hecubus&rdquo; that helps with day and week planning. I can&rsquo;t see myself using it regularly (though I might if Gemini on the desktop had a live mode that allowed me to dialogue with it as I poke at emails and invitations and skim documents).</p>
<p>And calendar wrangling &hellip; I dunno. It&rsquo;s a natural use case, and there are a million AI apps to help with that now, but I think they probably work better with less dense calendars. Given some up-front work to provide Gemini with more context about my priorities I might eventually leverage it more to help with a hectic week, but it&rsquo;s just easier at this point to work it out myself. That one year I had an EA was pretty nice.</p>
<p>Keep ended up being more interesting than I expected. I&rsquo;ve known a few Keep adherents, but I could never get past the way it presents like Post-It notes — which are finite things — but allows them to be bottomless. The thing is, Gemini understands them and can search them quickly, so they&rsquo;ve got a potentially powerful place in the ecosystem as little nuggets of context you can farm.  I experimented with hijacking <a href="https://docs.basicmemory.com/guides/knowledge-format/">Basic Memory&rsquo;s knowledge format</a> and Gemini did an okay job understanding &ldquo;relationships&rdquo; and &ldquo;observations.&rdquo;  Gemini also responds well to just being told a fact about something you have a note about in Keep and adding it without needing an exact title.</p>
<p>In terms of personal organization, the mind-meld between Gemini and Keep is promising in a way that Apple is not managing with Siri and Notes. For instance, Gemini in Live mode responded perfectly (and predictably) when I&rsquo;d put a bottle of wine in front of the camera and say &ldquo;add this to my wine list, I got it at Bread and Roses&rdquo; perfectly transcribing the label and adding it to the right list. Likewise, it ingested a bunch of products I showed it, and then knew how to respond to spoken queries about which beard shampoo is in my products list.  Next time I&rsquo;m at Bread and Roses, I&rsquo;ll experiment with a Live Mode query to tell me which wines I can pick up there.</p>
<p>Years and years ago I had an Emacs extension called &ldquo;<a href="ra">remembrance agent</a>.&rdquo; Its whole schtick was that it would vectorize your documents then hang around monitoring a small context window around the point in the current buffer, suggesting a list of related documents you could jump to. I always liked the very ambient way that worked. I&rsquo;ve struggled a lot more with systems that are about deliberate maintenance of a taxonomy — I&rsquo;ve struggled with <em>systems</em> in general — but I can totally live with my main Keep window being generally clear of non-archived notes, and just quietly hucking bits of data into Keep&rsquo;s weird little tesseract Post-Its, where they just go live in the Gemini Overmind as knowledge loam. I&rsquo;m not trying to write 70 books here, I&rsquo;m just trying to remember where I bought that one good beard balm, and which scent it was, or what the dimensions of all the windows in the house are.</p>
<p>While I was trying to learn more about how Google Workspace hangs together I came across this productivity guy/ex-Googler who is all in on Google stuff and built a &ldquo;<a href="https://www.youtube.com/watch?v=oO9GLC2iKy8&amp;t=3s">Capture, Organize, Review, Engage</a>&rdquo; workflow using Tasks and Keep. He gave me the idea to keep the Keep &ldquo;desktop&rdquo; fairly clean, and he also drew all the connections between Tasks and everything else in the Google Workspace ecosystem. There are hooks between Tasks and Mail, Docs, and Keep that are super useful. If you&rsquo;re in that stuff all day, the case to <em>not</em>  move to Tasks is a hard one to make because every Task you add from those tools includes a link back to the originating tool for instant recall of the context. (Gemini also labels Keep notes it creates with a little Gemini icon that takes you back to the chat session it came from.)</p>
<p>Anyhow, that all has less to do with Gemini and more to do with Google&rsquo;s integration game, which is stronger than I realized a month ago. But Gemini is able to leverage or access all of it quickly and effectively.</p>
<p>The net effect of the past 28 days has been that I have largely migrated to Tasks for day-to-day work organization. It is the simplest todo system I can imagine outside Markdown checklists in terms of its up-front functionality and curb appeal, but it is omnipresent in my tools, and its simplicity is a real strength: Less systeming, more capturing, but the capturing is to concrete things, not abstract ideas that never get turned into an action or an outcome.  The thing it doesn&rsquo;t do well is maintain focus on projects, but I&rsquo;m getting great support from the ops team at work to use Jira more consistently and effectively. Anything that ascends to the level of an epic starts generating messages about things assigned to me, and they get turned into Tasks that link back to the thing that generated the message.</p>
<p>Personally, it is much more useful to me to have all this stuff under one roof. I have my individual beefs with each component, but the integration is too good to ignore.</p>
<p>On the AI front, in my ideal world I would probably be happier using Claude with faster MCPs. Gemini itself is good, but Claude Desktop and Web are better, and Claude knows how to use MCPs, which makes it more versatile. But Gemini&rsquo;s deep interlock with all these daily tools makes it easy to get over in a work context.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The place we got for the coast this weekend looked ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-14-the-place-we-got-for/</link>
      <pubDate>Wed, 14 Jan 2026 20:43:58 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-14-the-place-we-got-for/</guid>
      <description>&lt;p&gt;The place we got for the coast this weekend looked familiar. Had to go back to 2008 to figure it out.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/1a144f3c35.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A child and an adult joyfully play and jump on a bed in a softly lit room.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>The place we got for the coast this weekend looked familiar. Had to go back to 2008 to figure it out.</p>
<img src="/uploads/microblog/2026/1a144f3c35.jpg" width="600" height="450" alt="A child and an adult joyfully play and jump on a bed in a softly lit room.">
]]></content:encoded>
    </item>
    <item>
      <title>Holy cow. My RPG info cup runneth over. Giving Shadowdark a ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-11-holy-cow-my-rpg-info/</link>
      <pubDate>Sun, 11 Jan 2026 22:47:41 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-11-holy-cow-my-rpg-info/</guid>
      <description>&lt;p&gt;Holy cow. My RPG info cup runneth over.&lt;/p&gt;
&lt;p&gt;Giving Shadowdark a serious look. Looks light and simplified but thoughtful.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ask.metafilter.com/388561/Looking-for-an-RPG-that-can-handle-solo-co-op-and-GMd#5505535&#34;&gt;ask.metafilter.com/388561/Lo&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Holy cow. My RPG info cup runneth over.</p>
<p>Giving Shadowdark a serious look. Looks light and simplified but thoughtful.</p>
<p><a href="https://ask.metafilter.com/388561/Looking-for-an-RPG-that-can-handle-solo-co-op-and-GMd#5505535">ask.metafilter.com/388561/Lo&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>&gt; At its core, Soylent feels like an extension of ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-11-at-its-core-soylent-feels/</link>
      <pubDate>Sun, 11 Jan 2026 17:51:43 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-11-at-its-core-soylent-feels/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;At its core, Soylent feels like an extension of capitalism &amp;amp; a byproduct of one of Silicon Valley’s most harmful ideologies: that we ought to forgo the human experience in favor of productivity. Why spend precious time on Earth connecting with friends and family over drinks and dinner when you could just throw back medical-grade slop alone at your desk instead?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Soylent guy got to be a goat farmer. And I guess they fixed the part about diarrhea?&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>At its core, Soylent feels like an extension of capitalism &amp; a byproduct of one of Silicon Valley’s most harmful ideologies: that we ought to forgo the human experience in favor of productivity. Why spend precious time on Earth connecting with friends and family over drinks and dinner when you could just throw back medical-grade slop alone at your desk instead?</p>
</blockquote>
<p>The Soylent guy got to be a goat farmer. And I guess they fixed the part about diarrhea?</p>
<p><a href="https://www.sfgate.com/food/article/california-tech-world-soylent-scrambling-adapt-21219237.php">www.sfgate.com/food/arti&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Supernote, handwriting, the &#34;default mode network&#34;</title>
      <link>https://mike.puddingtime.org/posts/2026-01-11-supernote-handwriting-the-default-mode/</link>
      <pubDate>Sun, 11 Jan 2026 17:34:38 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-11-supernote-handwriting-the-default-mode/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been messing around with the idea of how to keep things I am thinking somewhere that is both easy to maintain and also not really in need of a lot of process to begin with. I read much of a book about Zettelkasten and decided a slip box is not something I need, but I liked a few ideas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Making little fleeting notes or having an inbox where &lt;em&gt;just crap&lt;/em&gt; can go in without a lot of thought.&lt;/li&gt;
&lt;li&gt;Having a concept of a note that is representative of a more settled idea.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today, spending a little time between pomodoros on some weekend work I incurred for myself, I revisited my habit of steadying my handwriting by grabbing a note card or sheet of paper and just writing whatever comes to mind until I feel myself slowing down and getting into a more deliberate mindset. In this case I wasn&amp;rsquo;t so much trying to get my handwriting steadied as I just wanted to kill five minutes between work blocks and didn&amp;rsquo;t want to get up and do something else.   In the middle of doing that, a few things happened:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been messing around with the idea of how to keep things I am thinking somewhere that is both easy to maintain and also not really in need of a lot of process to begin with. I read much of a book about Zettelkasten and decided a slip box is not something I need, but I liked a few ideas:</p>
<ul>
<li>Making little fleeting notes or having an inbox where <em>just crap</em> can go in without a lot of thought.</li>
<li>Having a concept of a note that is representative of a more settled idea.</li>
</ul>
<p>Today, spending a little time between pomodoros on some weekend work I incurred for myself, I revisited my habit of steadying my handwriting by grabbing a note card or sheet of paper and just writing whatever comes to mind until I feel myself slowing down and getting into a more deliberate mindset. In this case I wasn&rsquo;t so much trying to get my handwriting steadied as I just wanted to kill five minutes between work blocks and didn&rsquo;t want to get up and do something else.   In the middle of doing that, a few things happened:</p>
<p>First, I had an idea I wanted to hold on to, and second I had a feeling about a thing I am dealing with.</p>
<p>I happened to be doing my handwriting fidgeting in my <a href="https://supernote.com">Supernote</a>, and I was in the mood to be distracted by gadgets. Supernote has these ideas of keywords and headings:</p>
<p><strong>Headings:</strong> Lasso a word and the Supernote highlights it and makes it visible in a ToC view for a given notebook.</p>
<p><strong>Keywords:</strong> Lasso a word, and the Supernote does some text recognition and proposes a tag you can correct and then apply. That tag then appears in a special index view of a given notebook, so you can see what pages it appears on and tap them to jump to them.</p>
<p>I focused on the keywords idea, because I had just written a little about a topic and written a little about a feeling. I circled each and assigned them keywords. Now they&rsquo;re findable in that scribbles notebook via the keywords screen. That seems cool.</p>
<p>Having done that, I sat there for a few minutes thinking about it, and realized when I&rsquo;m doing my handwriting steadying, a <em>lot</em> of things can come up. I just usually don&rsquo;t do much with it if it is a concept or a feeling. I usually only respond to tasks or actions I&rsquo;ve suddenly remembered. Video games are another activity where things come up for me that I don&rsquo;t do much with. It&rsquo;s why I like simple, repetitive games: They soak up some of my available environmental awareness and leave me free to process stuff, which always surfaces after playing for a while.</p>
<p>That caused me to do a little research and I learned about the idea of the &ldquo;<a href="https://en.wikipedia.org/wiki/Default_mode_network">default mode network</a>&rdquo;:</p>
<blockquote>
<p>&hellip; best known for being active when a person is not focused on the outside world and the brain is at wakeful rest, such as during daydreaming and mind-wandering. It can also be active during detailed thoughts related to external task performance. Other times that the DMN is active include when the individual is thinking about others, thinking about themselves, remembering the past, and planning for the future. The DMN creates a coherent &ldquo;internal narrative&rdquo; central to the construction of a sense of self.</p>
</blockquote>
<p>&hellip; which seems to be what&rsquo;s going on when I&rsquo;m free-associating while I steady my writing or letting my mind wander when I&rsquo;m playing a game.</p>
<p>So I made a pinned a notebook in my Supernote that&rsquo;s just for doing that writing. It&rsquo;s a swipe and a tap away from anywhere in the notebook. For the rest of the morning, as I did my work and took my breaks, I tried out &ldquo;just writing&rdquo; for my breaks. When the pomodoro would time out, I&rsquo;d scan for ideas/keywords and lasso them for indexing. Then get back to it.</p>
<p>By the end of my working block, I had several pages and a few ideas. That led me to wonder what, theoretically, I would do with <em>conclusions</em> from those. So I made another notebook that I <em>think</em> will just have topical pages. If I were doing a Zettelkasten I would be making cards, etc. I think I am doing something more like a commonplace book. Since the Supernote has linking, I made a page for the general theme for these ideas and made links to the source writing.</p>
<p>I was talking to a friend at work about her daily routine and realized in passing that she&rsquo;s sort of like me in that we both talk about things we&rsquo;re &ldquo;doing&rdquo; that are probably best framed as a series of experiments that come and go, and stick or don&rsquo;t. The idea of doing this sort of free-writing, DMN-activating activity in an electronic notebook is interesting for now, and it suits how I work during the day given I&rsquo;ve got a big desk, can keep the notebook handy, and am trying to timeblock with it. But I can see foregoing the tablet and doing this with a physical notebook to helpful effect as well. If I had to pick which was <em>nicer</em>, I&rsquo;d say writing in a nice notebook with a good pen is a bit more satisfying, but the Supernote is pretty nice on its own. (Not as nice as a reMarkable, which does a much nicer job of replacing paper, but is not nearly as good for linking or finding your way back to things you&rsquo;ve written.)</p>
<p>I know someone else who takes <em>a lot</em> of typed notes. I find that overwhelming, and have noticed a few times that there seems to be some disconnect between what was captured in the detailed, heavily nested notes and what is remembered or effectively applied. I am a believer in the value of friction at capture, so if I stick with this the Supernote might not remain central, but the act of writing will.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I&#39;m looking at Dragonbane for some RPG-curious people, but ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-11-im-looking-at-dragonbane-for/</link>
      <pubDate>Sun, 11 Jan 2026 12:17:09 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-11-im-looking-at-dragonbane-for/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m looking at Dragonbane for some RPG-curious people, but also because it seems to have flexibility for co-op and solo. Anything that should cause me to not look at that?&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m looking at Dragonbane for some RPG-curious people, but also because it seems to have flexibility for co-op and solo. Anything that should cause me to not look at that?</p>
]]></content:encoded>
    </item>
    <item>
      <title>Tomo Ramen</title>
      <link>https://mike.puddingtime.org/posts/2026-01-10-tomo-ramen/</link>
      <pubDate>Sat, 10 Jan 2026 20:57:23 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-10-tomo-ramen/</guid>
      <description>&lt;p&gt;Tomo Ramen&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/b1af6a3d6e.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A dimly lit street features a storefront for Tomo Ramen with illuminated Japanese lanterns and adjacent vape shop signage.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/99c00fb952.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A cozy restaurant interior is warmly illuminated by red and orange lanterns with RAMEN written on them in both English and Japanese.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Tomo Ramen</p>
<p><img src="/uploads/microblog/2026/b1af6a3d6e.jpg" width="600" height="450" alt="A dimly lit street features a storefront for Tomo Ramen with illuminated Japanese lanterns and adjacent vape shop signage."><img src="/uploads/microblog/2026/99c00fb952.jpg" width="600" height="337" alt="A cozy restaurant interior is warmly illuminated by red and orange lanterns with RAMEN written on them in both English and Japanese."></p>
]]></content:encoded>
    </item>
    <item>
      <title>downtown</title>
      <link>https://mike.puddingtime.org/posts/2026-01-10-downtown/</link>
      <pubDate>Sat, 10 Jan 2026 14:19:37 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-10-downtown/</guid>
      <description>&lt;p&gt;downtown&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/70802cc4d1.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A red pavement marking with the word STOP is adjacent to a textured yellow surface.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/25d8583b6c.jpg&#34; width=&#34;600&#34; height=&#34;449&#34; alt=&#34;A large sign for the Broadway Garage advertising parking in downtown is displayed above a parking garage entrance, with two people walking below.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/f89b171450.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A small restaurant table set for four is next to a window with frosted glass, displaying condiment bottles and neatly arranged silverware.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/67bfaba8d1.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A heavily weathered and torn poster depicts two smiling individuals partly obscured by layers of peeling paper and graffiti.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>downtown</p>
<p><img src="/uploads/microblog/2026/70802cc4d1.jpg" width="600" height="450" alt="A red pavement marking with the word STOP is adjacent to a textured yellow surface."><img src="/uploads/microblog/2026/25d8583b6c.jpg" width="600" height="449" alt="A large sign for the Broadway Garage advertising parking in downtown is displayed above a parking garage entrance, with two people walking below."><img src="/uploads/microblog/2026/f89b171450.jpg" width="600" height="450" alt="A small restaurant table set for four is next to a window with frosted glass, displaying condiment bottles and neatly arranged silverware."><img src="/uploads/microblog/2026/67bfaba8d1.jpg" width="600" height="450" alt="A heavily weathered and torn poster depicts two smiling individuals partly obscured by layers of peeling paper and graffiti."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Two months of no laptop, just iPad Pro and mini</title>
      <link>https://mike.puddingtime.org/posts/2026-01-08-two-months-of-no-laptop/</link>
      <pubDate>Thu, 08 Jan 2026 23:41:55 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-08-two-months-of-no-laptop/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using my iPad Pro 13 as a full-time laptop replacement for about two months now, replacing a 15&amp;quot; MacBook Air. I think it has been a success, but in qualified ways:&lt;/p&gt;
&lt;p&gt;For most personal tasks I really care about it has been a seamless replacement: Personal writing, photo editing, mail, news, YouTube grazing, etc. I like being able to plop it into the keyboard or take it out depending on use. I got an inexpensive folding stand for it when I&amp;rsquo;m using it at the table.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been using my iPad Pro 13 as a full-time laptop replacement for about two months now, replacing a 15&quot; MacBook Air. I think it has been a success, but in qualified ways:</p>
<p>For most personal tasks I really care about it has been a seamless replacement: Personal writing, photo editing, mail, news, YouTube grazing, etc. I like being able to plop it into the keyboard or take it out depending on use. I got an inexpensive folding stand for it when I&rsquo;m using it at the table.</p>
<p>I finally broke down and got a mosh server running on my Mac mini because I&rsquo;m running a few MCPs on Gemini CLI, which I can&rsquo;t do from the Gemini iPadOS app. With the <a href="https://blink.sh/">Blink</a> term app I can get to the mini and run the CLI.</p>
<p>It still feels like a number of apps aren&rsquo;t as robust on an iPad as a Mac. It comes up sometimes, when I want to do something on the iPad in an app I also have for the Mac and the option just isn&rsquo;t there. I suppose that&rsquo;s the signal to pivot to work:</p>
<p>I don&rsquo;t like to use it for many work tasks at all. It&rsquo;s fine for Slack, the Gmail app, the Google Calendar app, and Zoom. I don&rsquo;t like the app versions of Google Docs, Sheets, or Slides at all. The mobile web version of Google Tasks, which I use as an inbox for a lot of work stuff, is much better than the app.</p>
<p>So that&rsquo;s created a dynamic where I don&rsquo;t use the iPad much during the day for intense work.  I prefer to just go up to my office, sit down to my Mac mini, and have a full computer experience on a big screen: As much as the window management has improved with iPadOS 26, it is still too fussy and the 13&quot; display is too small to work comfortably.</p>
<p>At first, my ADHD-driven perfectionism made it very hard to manage those transitions between machines. I can get very focused on wanting things to work just one way across everything, but I stuck with this experiment past the initial uncomfortable stages, and now I don&rsquo;t think about it much. I just realize that what I am doing needs more immersion and better &ldquo;real work&rdquo; affordances than I am getting on the iPad, and I go upstairs.</p>
<p>That&rsquo;s turned out to be a real improvement for general work mental health anyhow: I ended up spending so much time in the office that I reinvested in its tidiness and organization, and I really enjoy going up there to a secluded, quiet part of the house to get things done.</p>
<p>With a Pomodoro timer, the <a href="https://endel.io/">Endel</a> app, and headphones, I can work steadily in the time I have between meetings. When I remember my Slack hygiene, a two hour deep work block is a meaningful investment and not just a polite fiction. Shifting my time blocking practice away from apps and screens to a notebook and pen has been salutary, too. <a href="/2025/12/23/i-got-turned-on-to.html">Writing has a very centering and calming effect</a> when I attend to it, and I have come to look forward to the 8 a.m. planning/blocking ritual.</p>
<p>If the iPad didn&rsquo;t feel a little bit limiting, I wouldn&rsquo;t spend as much time at my desk as I do, and I don&rsquo;t think I&rsquo;d do some of the rituals I do, or work the way I do, if I were working out of my lap in the living room. It&rsquo;s more <em>comfortable</em> to sit in a recliner with a laptop, but it&rsquo;s harder to jot things into a notebook, rearrange planning blocks, keep a physical timer handy, etc. Working out of a laptop in an easy chair creates a lot of pressure to do things with digital tools because they&rsquo;re easier to keep at hand. And personally — just me writing about my experience of the world — working out of a laptop makes my brain feel cramped and boxed in. I like a large screen, a work surface I can spread things out on, and a space to retreat to.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&gt; This combination of storytelling, articulate language, ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-08-this-combination-of-storytelling-articulate/</link>
      <pubDate>Thu, 08 Jan 2026 14:43:03 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-08-this-combination-of-storytelling-articulate/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This combination of storytelling, articulate language, and occasional profanity suggests a confident, seasoned, and highly integrated senior leader who is comfortable with his authority.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There is, indeed, a lot of profanity.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>This combination of storytelling, articulate language, and occasional profanity suggests a confident, seasoned, and highly integrated senior leader who is comfortable with his authority.</p>
</blockquote>
<p>There is, indeed, a lot of profanity.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&gt; To be frank, we tested weather sealing before starting ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-07-to-be-frank-we-tested/</link>
      <pubDate>Wed, 07 Jan 2026 21:48:03 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-07-to-be-frank-we-tested/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;To be frank, we tested weather sealing before starting the GR IV development but that definitely makes the model bigger. Additionally, sealing materials trap heat inside the camera, making heat management another challenge. To address this, we would then have to make the camera bigger or reduce the speed at which the camera can capture photos. Both of those are against our concept of snap shooting. In that way, we are trying to balance customer demands but we always give priority to keeping our GR concept&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>To be frank, we tested weather sealing before starting the GR IV development but that definitely makes the model bigger. Additionally, sealing materials trap heat inside the camera, making heat management another challenge. To address this, we would then have to make the camera bigger or reduce the speed at which the camera can capture photos. Both of those are against our concept of snap shooting. In that way, we are trying to balance customer demands but we always give priority to keeping our GR concept</p>
</blockquote>
<p>I appreciate that. The GRs are a particular kind of machine, and I get why they have their loyalists. I couldn&rsquo;t believe they were as flexible as they are until I had one for a while.</p>
<p><a href="https://petapixel.com/2026/01/07/major-design-aspects-of-the-ricoh-gr-series-will-never-change/">petapixel.com/2026/01/0&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>No, a wild-eyed denunciation of digital zettelkasten ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-06-no-a-wildeyed-denunciation-of/</link>
      <pubDate>Tue, 06 Jan 2026 23:14:47 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-06-no-a-wildeyed-denunciation-of/</guid>
      <description>&lt;p&gt;No, a wild-eyed denunciation of digital zettelkasten apostates is exactly what I need to be reading right now.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>No, a wild-eyed denunciation of digital zettelkasten apostates is exactly what I need to be reading right now.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Oregonian decided to jack my price up $5/month using an ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-05-the-oregonian-decided-to-jack/</link>
      <pubDate>Mon, 05 Jan 2026 21:00:41 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-05-the-oregonian-decided-to-jack/</guid>
      <description>&lt;p&gt;The Oregonian decided to jack my price up $5/month using an algorithm, so my subscription will be double what it was two years ago. It&amp;rsquo;s still under $20/month, and that&amp;rsquo;s a fair price, but I wish they&amp;rsquo;d plow some of that into improving their website and maybe losing some of those scummy network ads.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/4b0339f02f.jpg&#34; width=&#34;600&#34; height=&#34;498&#34; alt=&#34;A subscription update notification informs the recipient of a price change, effective February 9, 2026, and explains the use of an algorithm to determine the price.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>The Oregonian decided to jack my price up $5/month using an algorithm, so my subscription will be double what it was two years ago. It&rsquo;s still under $20/month, and that&rsquo;s a fair price, but I wish they&rsquo;d plow some of that into improving their website and maybe losing some of those scummy network ads.</p>
<img src="/uploads/microblog/2026/4b0339f02f.jpg" width="600" height="498" alt="A subscription update notification informs the recipient of a price change, effective February 9, 2026, and explains the use of an algorithm to determine the price.">
]]></content:encoded>
    </item>
    <item>
      <title>&#34;I&#39;m not trying to judge, Ashley, and this is a blameless ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-05-im-not-trying-to-judge/</link>
      <pubDate>Mon, 05 Jan 2026 08:34:09 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-05-im-not-trying-to-judge/</guid>
      <description>&lt;p&gt;&amp;ldquo;I&amp;rsquo;m not trying to judge, Ashley, and this is a blameless family. It&amp;rsquo;s just that Dad and I have noticed your chore velocity was down quarter-over-quarter,  so we&amp;rsquo;re going to try some new things to help with your estimation.&amp;rdquo;&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/8a3fc38d41.jpg&#34; width=&#34;600&#34; height=&#34;430&#34; alt=&#34;A woman is teaching two children using a large digital smart calendar, in a setting resembling a classroom.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;I&rsquo;m not trying to judge, Ashley, and this is a blameless family. It&rsquo;s just that Dad and I have noticed your chore velocity was down quarter-over-quarter,  so we&rsquo;re going to try some new things to help with your estimation.&rdquo;</p>
<img src="/uploads/microblog/2026/8a3fc38d41.jpg" width="600" height="430" alt="A woman is teaching two children using a large digital smart calendar, in a setting resembling a classroom.">
]]></content:encoded>
    </item>
    <item>
      <title>floodplain</title>
      <link>https://mike.puddingtime.org/posts/2026-01-04-floodplain/</link>
      <pubDate>Sun, 04 Jan 2026 18:43:43 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-04-floodplain/</guid>
      <description>&lt;p&gt;floodplain&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/5a36215b60.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A serene landscape features a meadow with sparse trees under a colorful, partly cloudy sky.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>floodplain</p>
<img src="/uploads/microblog/2026/5a36215b60.jpg" width="600" height="337" alt="A serene landscape features a meadow with sparse trees under a colorful, partly cloudy sky.">
]]></content:encoded>
    </item>
    <item>
      <title>Jan 4 past</title>
      <link>https://mike.puddingtime.org/posts/2026-01-04-jan-past/</link>
      <pubDate>Sun, 04 Jan 2026 18:36:04 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-04-jan-past/</guid>
      <description>&lt;p&gt;Jan 4 past&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/78ef557558.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A cityscape is depicted with blurred lights and tall buildings against a twilight sky.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/c5d28b71da.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A cityscape at dusk featuring a bridge with illuminated bokeh lights in the foreground and a colorful sky in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/1cc78d6c66.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A cityscape at dusk features illuminated skyscrapers and blurred car lights in the foreground, creating a vibrant urban scene.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/b08ec89b81.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A flock of birds is perched on trees near a lit office building at dusk.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Jan 4 past</p>
<p><img src="/uploads/microblog/2026/78ef557558.jpg" width="600" height="400" alt="A cityscape is depicted with blurred lights and tall buildings against a twilight sky."><img src="/uploads/microblog/2026/c5d28b71da.jpg" width="600" height="400" alt="A cityscape at dusk featuring a bridge with illuminated bokeh lights in the foreground and a colorful sky in the background."><img src="/uploads/microblog/2026/1cc78d6c66.jpg" width="600" height="400" alt="A cityscape at dusk features illuminated skyscrapers and blurred car lights in the foreground, creating a vibrant urban scene."><img src="/uploads/microblog/2026/b08ec89b81.jpg" width="600" height="400" alt="A flock of birds is perched on trees near a lit office building at dusk."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Glad to see the (former) leader of an NGO coming around to ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-04-glad-to-see-the-former/</link>
      <pubDate>Sun, 04 Jan 2026 14:09:31 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-04-glad-to-see-the-former/</guid>
      <description>&lt;p&gt;Glad to see the (former) leader of an NGO coming around to the idea that privatizing social services delivery is wasteful and inefficient, but NGO leaders will not carry this thought all the way through.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;It is difficult to get a man to understand something, when his salary depends upon his not understanding it!”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;— Upton Sinclair&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.oregonlive.com/opinion/2026/01/opinion-oregons-social-safety-net-is-entering-a-dangerous-squeeze.html&#34;&gt;www.oregonlive.com/opinion/2&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/image.png&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Highlighted text discusses the challenges nonprofits face in maintaining administrative and technological infrastructure independently.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Glad to see the (former) leader of an NGO coming around to the idea that privatizing social services delivery is wasteful and inefficient, but NGO leaders will not carry this thought all the way through.</p>
<blockquote>
<p>&ldquo;It is difficult to get a man to understand something, when his salary depends upon his not understanding it!”</p>
</blockquote>
<blockquote>
<p>— Upton Sinclair</p>
</blockquote>
<p><a href="https://www.oregonlive.com/opinion/2026/01/opinion-oregons-social-safety-net-is-entering-a-dangerous-squeeze.html">www.oregonlive.com/opinion/2&hellip;</a></p>
<img src="/uploads/microblog/2026/image.png" width="600" height="337" alt="Highlighted text discusses the challenges nonprofits face in maintaining administrative and technological infrastructure independently.">
]]></content:encoded>
    </item>
    <item>
      <title>on the way to Bruno&#39;s</title>
      <link>https://mike.puddingtime.org/posts/2026-01-03-on-the-way-to-brunos/</link>
      <pubDate>Sat, 03 Jan 2026 22:54:35 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-03-on-the-way-to-brunos/</guid>
      <description>&lt;p&gt;on the way to Bruno&amp;rsquo;s&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/103f6d4a81.jpg&#34; width=&#34;600&#34; height=&#34;600&#34; alt=&#34;A small, warmly lit café with a sign outside stands on a dark street next to parked cars.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/c5c435e223.jpg&#34; width=&#34;600&#34; height=&#34;600&#34; alt=&#34;A collection of paintings and artwork, including a portrait of a man walking, a cartoon-like piece, and a skull drawing, are displayed on a shadowed wall.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/a16047ad09.jpg&#34; width=&#34;600&#34; height=&#34;600&#34; alt=&#34;A red truck is parked on a dimly lit street at night, surrounded by trees and utility poles.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/edfb8a1a0c.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A city street at night shows a bus stopped under traffic lights near a neon-lit AutoZone.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>on the way to Bruno&rsquo;s</p>
<p><img src="/uploads/microblog/2026/103f6d4a81.jpg" width="600" height="600" alt="A small, warmly lit café with a sign outside stands on a dark street next to parked cars."><img src="/uploads/microblog/2026/c5c435e223.jpg" width="600" height="600" alt="A collection of paintings and artwork, including a portrait of a man walking, a cartoon-like piece, and a skull drawing, are displayed on a shadowed wall."><img src="/uploads/microblog/2026/a16047ad09.jpg" width="600" height="600" alt="A red truck is parked on a dimly lit street at night, surrounded by trees and utility poles."><img src="/uploads/microblog/2026/edfb8a1a0c.jpg" width="600" height="337" alt="A city street at night shows a bus stopped under traffic lights near a neon-lit AutoZone."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, let&#39;s see what it does. meshtastic !A small black ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-03-well-lets-see-what-it/</link>
      <pubDate>Sat, 03 Jan 2026 20:14:44 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-03-well-lets-see-what-it/</guid>
      <description>&lt;p&gt;Well, let&amp;rsquo;s see what it does. #meshtastic&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/cd29b5b9a4.jpg&#34; alt=&#34;A small black handheld device with an antenna and a screen displaying pixelated text is placed on a brown surface.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, let&rsquo;s see what it does. #meshtastic</p>
<p><img src="/uploads/microblog/2026/cd29b5b9a4.jpg" alt="A small black handheld device with an antenna and a screen displaying pixelated text is placed on a brown surface."></p>
]]></content:encoded>
    </item>
    <item>
      <title>High on Fire and King Woman !A black and white split-image ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-03-high-on-fire-and-king/</link>
      <pubDate>Sat, 03 Jan 2026 00:34:48 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-03-high-on-fire-and-king/</guid>
      <description>&lt;p&gt;High on Fire and King Woman&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/3c6305d9a1.jpg&#34; alt=&#34;A black and white split-image captures a live music performance with singers engaging the audience under stage lights.&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/1becca93b6.jpg&#34; alt=&#34;A person is crowd surfing over an excited audience at a lively concert.&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/60f287ab53.jpg&#34; alt=&#34;A black and white photo captures a crowd at a concert with a guitarist performing on stage under dramatic lighting.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>High on Fire and King Woman</p>
<p><img src="/uploads/microblog/2026/3c6305d9a1.jpg" alt="A black and white split-image captures a live music performance with singers engaging the audience under stage lights."></p>
<p><img src="/uploads/microblog/2026/1becca93b6.jpg" alt="A person is crowd surfing over an excited audience at a lively concert."></p>
<p><img src="/uploads/microblog/2026/60f287ab53.jpg" alt="A black and white photo captures a crowd at a concert with a guitarist performing on stage under dramatic lighting."></p>
]]></content:encoded>
    </item>
    <item>
      <title>High on Fire pre-game. Someone in the kitchen fired up the ...</title>
      <link>https://mike.puddingtime.org/posts/2026-01-03-high-on-fire-pregame-someone/</link>
      <pubDate>Sat, 03 Jan 2026 00:31:25 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-03-high-on-fire-pregame-someone/</guid>
      <description>&lt;p&gt;High on Fire pre-game. Someone in the kitchen fired up the Sleep. 🤘&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/eae7d8701d.jpg&#34; alt=&#34;In a dimly lit restaurant, people are seated and standing around a bar counter with ambient light fixtures overhead.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>High on Fire pre-game. Someone in the kitchen fired up the Sleep. 🤘</p>
<p><img src="/uploads/microblog/2026/eae7d8701d.jpg" alt="In a dimly lit restaurant, people are seated and standing around a bar counter with ambient light fixtures overhead."></p>
]]></content:encoded>
    </item>
    <item>
      <title>springwater</title>
      <link>https://mike.puddingtime.org/posts/2026-01-01-153904/</link>
      <pubDate>Thu, 01 Jan 2026 16:39:04 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-01-153904/</guid>
      <description>&lt;p&gt;springwater&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/6d54307b1a.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;Dried, spiky seed pods are suspended on thin, branching stems against a blurred green background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/40e0f98063.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;White berries cluster on a twig against a blurred green background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/74a3043433.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A cluster of brown, dried flowers is surrounded by leaves against a blurred natural background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/bdc9204fd0.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;Beneath a bridge, two leafless trees stand on a grassy, rocky embankment against a gray sky.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>springwater</p>
<p><img src="/uploads/microblog/2026/6d54307b1a.jpg" width="600" height="450" alt="Dried, spiky seed pods are suspended on thin, branching stems against a blurred green background."><img src="/uploads/microblog/2026/40e0f98063.jpg" width="600" height="450" alt="White berries cluster on a twig against a blurred green background."><img src="/uploads/microblog/2026/74a3043433.jpg" width="450" height="600" alt="A cluster of brown, dried flowers is surrounded by leaves against a blurred natural background."><img src="/uploads/microblog/2026/bdc9204fd0.jpg" width="450" height="600" alt="Beneath a bridge, two leafless trees stand on a grassy, rocky embankment against a gray sky."></p>
]]></content:encoded>
    </item>
    <item>
      <title>springwater</title>
      <link>https://mike.puddingtime.org/posts/2026-01-01-springwater/</link>
      <pubDate>Thu, 01 Jan 2026 16:37:42 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2026-01-01-springwater/</guid>
      <description>&lt;p&gt;springwater&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/8c10e58170.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;Yellow poles are arranged diagonally across a weathered wall painted with red, white, and black horizontal stripes.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/489b63b06d.jpg&#34; width=&#34;449&#34; height=&#34;600&#34; alt=&#34;A semi-truck trailer is partially open, revealing baled recyclable materials inside, with other trailers parked nearby in a rain-soaked industrial area.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/b0ff789e8f.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A shopping cart filled with various items is positioned on a grassy area near a road, with trees and a fence in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2026/b33cfc606c.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Stacked shipping containers are arranged outdoors near a small utility building on a cloudy day.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>springwater</p>
<p><img src="/uploads/microblog/2026/8c10e58170.jpg" width="450" height="600" alt="Yellow poles are arranged diagonally across a weathered wall painted with red, white, and black horizontal stripes."><img src="/uploads/microblog/2026/489b63b06d.jpg" width="449" height="600" alt="A semi-truck trailer is partially open, revealing baled recyclable materials inside, with other trailers parked nearby in a rain-soaked industrial area."><img src="/uploads/microblog/2026/b0ff789e8f.jpg" width="600" height="337" alt="A shopping cart filled with various items is positioned on a grassy area near a road, with trees and a fence in the background."><img src="/uploads/microblog/2026/b33cfc606c.jpg" width="600" height="337" alt="Stacked shipping containers are arranged outdoors near a small utility building on a cloudy day."></p>
]]></content:encoded>
    </item>
    <item>
      <title>I have this newish Mac Mini and hadn&#39;t had a reason to get ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-30-i-have-this-newish-mac/</link>
      <pubDate>Tue, 30 Dec 2025 19:54:40 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-30-i-have-this-newish-mac/</guid>
      <description>&lt;p&gt;I have this newish Mac Mini and hadn&amp;rsquo;t had a reason to get Homebrew on it until this afternoon. I didn&amp;rsquo;t bother saving the configs on my old  Studio so it was sorta 🤞 when I ran &lt;a href=&#34;https://www.chezmoi.io&#34;&gt;chezmoi&lt;/a&gt;  this afternoon. It just worked &amp;amp; all my stuff was on the machine in under 30 seconds.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have this newish Mac Mini and hadn&rsquo;t had a reason to get Homebrew on it until this afternoon. I didn&rsquo;t bother saving the configs on my old  Studio so it was sorta 🤞 when I ran <a href="https://www.chezmoi.io">chezmoi</a>  this afternoon. It just worked &amp; all my stuff was on the machine in under 30 seconds.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I just set up the double-tap accessibility gesture on my ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-30-i-just-set-up-the/</link>
      <pubDate>Tue, 30 Dec 2025 19:31:33 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-30-i-just-set-up-the/</guid>
      <description>&lt;p&gt;I just set up the double-tap accessibility gesture on my Ultra (it&amp;rsquo;s a first-gen so it doesn&amp;rsquo;t get the gesture out of the box). It makes life with a mechanical keyboard so much better. Anything you can approve by double-pressing on the watch you can approve by double-tapping your thumb/forefinger.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I just set up the double-tap accessibility gesture on my Ultra (it&rsquo;s a first-gen so it doesn&rsquo;t get the gesture out of the box). It makes life with a mechanical keyboard so much better. Anything you can approve by double-pressing on the watch you can approve by double-tapping your thumb/forefinger.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I ended up losing my afternoon to some indifferent analysis ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-30-i-ended-up-losing-my/</link>
      <pubDate>Tue, 30 Dec 2025 19:29:16 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-30-i-ended-up-losing-my/</guid>
      <description>&lt;p&gt;I ended up losing my afternoon to some indifferent analysis from a hostile party at some other company. I&amp;rsquo;m usually the one doing that kind of hostile analysis, so I know bad work when I see it. The process of discrediting their work helped crystallize what constitutes good work.&lt;/p&gt;
&lt;p&gt;So I took the opportunity to write a custom gem for Gemini that ingests the kind of reporting I have to do once or twice a quarter and does the kind of analysis I end up doing each time.  That&amp;rsquo;s how to automate, right? Just after being badly offended by someone else&amp;rsquo;s incompetence, and high on your own expertise, you get it all out into code. Or after being badly burned by your own incompetence, and realizing you need to take a deep breath and describe what to do step-by-step.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I ended up losing my afternoon to some indifferent analysis from a hostile party at some other company. I&rsquo;m usually the one doing that kind of hostile analysis, so I know bad work when I see it. The process of discrediting their work helped crystallize what constitutes good work.</p>
<p>So I took the opportunity to write a custom gem for Gemini that ingests the kind of reporting I have to do once or twice a quarter and does the kind of analysis I end up doing each time.  That&rsquo;s how to automate, right? Just after being badly offended by someone else&rsquo;s incompetence, and high on your own expertise, you get it all out into code. Or after being badly burned by your own incompetence, and realizing you need to take a deep breath and describe what to do step-by-step.</p>
<p>Anyhow, we&rsquo;re supposed to get gud at this stuff, and I&rsquo;m dealing with the novel sensation of having done  a deep dive into something before being told I should,  so I&rsquo;m casting about for problems to solve, and trying to contort myself into the approved tool.</p>
<p>On the one hand, I completely understand the appeal of the sort of magical oracle approach  a chat interface provides, where you feed it a spreadsheet and tell it what to do, and it chats its analysis back at you. But on the back-end, to keep it from hallucinating, it has to write a Python script each time to read the input, and it&rsquo;s not really doing anything besides some counting. The Gem layers on some interpretation, but I think you could just as easily get a table of output saying &ldquo;These are the two broad percentages you care about, and this is a list of things you should investigate further.&rdquo; That seems more deterministic and analyzable. When I was experimenting a lot with AI-driven tool-building, that was my preferred approach.  I&rsquo;m not super florid when presenting the kind of reporting I was working on today, so I felt a little resentment having to build into the prompt some &ldquo;&hellip; and please don&rsquo;t make a whole thing out of your findings.&rdquo;</p>
<p>The custom gem approach came with a few of its own issues: Sometimes it crashes in the middle of the analysis. Just loses its mind and freezes. And before I explicitly told it had to write scripts to do the counting, it would decide that it knew how many kinds of a certain record there were, and it would state that number with a sort of thought-terminating authoritativeness. For something that needs to pick those values out of JSON, that&rsquo;s sort of a drag.</p>
<p>So there&rsquo;s the option to do a custom gem and create a magical oracle that tries to fuzz your analytical radar because it takes this know-it-all clankersplaining tone, or there&rsquo;s the option to just code something up that&rsquo;s just going to do the analysis and spit out a table. One feels sort of mysterious and murky and cool, but periodically decides it has no context window left to give; the other is introspectable even if it&rsquo;s terse. Given a decent vibecoding platform, it&rsquo;s way faster than managing the vagaries of stating and restating what you&rsquo;re after, and still getting random shit back sometimes.</p>
<p>Which is not to say Gemini is dead to me, because it&rsquo;s much faster at cranking out the kind of script I need to run: I&rsquo;m an indifferent coder at best. I just have to think about how to teach this stuff to my team, among whom I am more like a creature from a mysterious and ancient computing culture than a friendly guide who will take them over the rainbow bridge to The Singularity.</p>
<p>So I signed up for some courses. I don&rsquo;t have a knowledge or skill problem so much as I have a pedagogical technique problem, so I&rsquo;m gonna sit still and allow myself to be trained, the better to train.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Feral Cat Cove</title>
      <link>https://mike.puddingtime.org/posts/2025-12-28-feral-cat-cove/</link>
      <pubDate>Sun, 28 Dec 2025 22:48:45 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-28-feral-cat-cove/</guid>
      <description>&lt;p&gt;Feral Cat Cove&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/5e6d4be19a.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A split image shows graffiti saying DO AN OLLIE on one side and a skate park with graffiti-covered ramps on the other.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Feral Cat Cove</p>
<img src="/uploads/microblog/2025/5e6d4be19a.jpg" width="600" height="400" alt="A split image shows graffiti saying DO AN OLLIE on one side and a skate park with graffiti-covered ramps on the other.">
]]></content:encoded>
    </item>
    <item>
      <title>some old GRIIIX shots</title>
      <link>https://mike.puddingtime.org/posts/2025-12-28-some-old-griiix-shots/</link>
      <pubDate>Sun, 28 Dec 2025 22:00:52 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-28-some-old-griiix-shots/</guid>
      <description>&lt;p&gt;some old GRIIIX shots&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/3ec8996df0.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;An adult in a toy car crosses an intersection while adults walk nearby.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/7b799a4d43.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A statue of a robed figure is adorned with a beaded necklace and a blue mask against a dark background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/ef82b08850.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Three people are wading into a lake with a forested shoreline and mountains in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/473ffeb533.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;An old, rusted Ford Custom F150 truck is partially obscured by overgrown plants and foliage.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>some old GRIIIX shots</p>
<p><img src="/uploads/microblog/2025/3ec8996df0.jpg" width="600" height="337" alt="An adult in a toy car crosses an intersection while adults walk nearby."><img src="/uploads/microblog/2025/7b799a4d43.jpg" width="600" height="400" alt="A statue of a robed figure is adorned with a beaded necklace and a blue mask against a dark background."><img src="/uploads/microblog/2025/ef82b08850.jpg" width="600" height="337" alt="Three people are wading into a lake with a forested shoreline and mountains in the background."><img src="/uploads/microblog/2025/473ffeb533.jpg" width="600" height="400" alt="An old, rusted Ford Custom F150 truck is partially obscured by overgrown plants and foliage."></p>
]]></content:encoded>
    </item>
    <item>
      <title>evening walk</title>
      <link>https://mike.puddingtime.org/posts/2025-12-28-evening-walk/</link>
      <pubDate>Sun, 28 Dec 2025 19:15:40 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-28-evening-walk/</guid>
      <description>&lt;p&gt;evening walk&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/4ebcd1baf2.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A garage door features a colorful mural of gnomes, mushrooms, and whimsical houses, illuminated by a light above.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/16f96710cb.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A person walks past a dimly lit storefront with large windows on a quiet street at night.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/475ba546d2.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A warmly lit storefront featuring signs for pinball, cocktails, and ice cream is adorned with string lights and neon signs at night.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/026739b129.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;A cozy coffee shop named Space Monkey Coffee is warmly lit from the inside, with a parked car and bicycles outside in an urban evening setting.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>evening walk</p>
<p><img src="/uploads/microblog/2025/4ebcd1baf2.jpg" width="600" height="337" alt="A garage door features a colorful mural of gnomes, mushrooms, and whimsical houses, illuminated by a light above."><img src="/uploads/microblog/2025/16f96710cb.jpg" width="600" height="337" alt="A person walks past a dimly lit storefront with large windows on a quiet street at night."><img src="/uploads/microblog/2025/475ba546d2.jpg" width="600" height="337" alt="A warmly lit storefront featuring signs for pinball, cocktails, and ice cream is adorned with string lights and neon signs at night."><img src="/uploads/microblog/2025/026739b129.jpg" width="600" height="337" alt="A cozy coffee shop named Space Monkey Coffee is warmly lit from the inside, with a parked car and bicycles outside in an urban evening setting."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Out and about </title>
      <link>https://mike.puddingtime.org/posts/2025-12-28-out-and-about/</link>
      <pubDate>Sun, 28 Dec 2025 15:09:17 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-28-out-and-about/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/89d8afd90c.jpg&#34; alt=&#34;Auto-generated description: A person wearing glasses and a dark jacket is sitting by a window on public transportation, with a blue train visible outside.&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/aabdcf92f7.jpg&#34; alt=&#34;Auto-generated description: Two people are sitting closely together in a dimly lit setting with a patterned background behind them.&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/480fd26f27.jpg&#34; alt=&#34;Auto-generated description: Two people are sitting and talking on a bus, with a split effect visually dividing them.&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/c0939f0466.jpg&#34; alt=&#34;Auto-generated description: A person is cutting hair in a barber shop filled with plants, viewed through a large window at night.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="/uploads/microblog/2025/89d8afd90c.jpg" alt="Auto-generated description: A person wearing glasses and a dark jacket is sitting by a window on public transportation, with a blue train visible outside."></p>
<p><img src="/uploads/microblog/2025/aabdcf92f7.jpg" alt="Auto-generated description: Two people are sitting closely together in a dimly lit setting with a patterned background behind them."></p>
<p><img src="/uploads/microblog/2025/480fd26f27.jpg" alt="Auto-generated description: Two people are sitting and talking on a bus, with a split effect visually dividing them."></p>
<p><img src="/uploads/microblog/2025/c0939f0466.jpg" alt="Auto-generated description: A person is cutting hair in a barber shop filled with plants, viewed through a large window at night."></p>
]]></content:encoded>
    </item>
    <item>
      <title>To the Grotto</title>
      <link>https://mike.puddingtime.org/posts/2025-12-27-to-the-grotto/</link>
      <pubDate>Sat, 27 Dec 2025 21:50:49 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-27-to-the-grotto/</guid>
      <description>&lt;p&gt;To the Grotto&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/05561cc58f.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A motel sign glowing at night is juxtaposed with an image of a bus stop with litter on the ground.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/a15e753409.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A stone building adorned with string lights features a statue of a religious figure under a dark sky with a glow effect.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/5e0b816da0.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;Two people sit opposite each other on a bus, with a colorful light leak effect creating a vibrant overlay.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/f5fdbd5f1a.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;Lit candles are arranged in a grid pattern on the left, while a grotto with a white statue surrounded by flowers is displayed on the right.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>To the Grotto</p>
<p><img src="/uploads/microblog/2025/05561cc58f.jpg" width="600" height="400" alt="A motel sign glowing at night is juxtaposed with an image of a bus stop with litter on the ground."><img src="/uploads/microblog/2025/a15e753409.jpg" width="450" height="600" alt="A stone building adorned with string lights features a statue of a religious figure under a dark sky with a glow effect."><img src="/uploads/microblog/2025/5e0b816da0.jpg" width="600" height="400" alt="Two people sit opposite each other on a bus, with a colorful light leak effect creating a vibrant overlay."><img src="/uploads/microblog/2025/f5fdbd5f1a.jpg" width="600" height="400" alt="Lit candles are arranged in a grid pattern on the left, while a grotto with a white statue surrounded by flowers is displayed on the right."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Al on the 12</title>
      <link>https://mike.puddingtime.org/posts/2025-12-27-al-on-the/</link>
      <pubDate>Sat, 27 Dec 2025 20:55:51 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-27-al-on-the/</guid>
      <description>&lt;p&gt;Al on the 12&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/a9890bfe78.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A person wearing a beanie is smiling at someone on a bus with vibrant orange and purple lighting.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Al on the 12</p>
<img src="/uploads/microblog/2025/a9890bfe78.jpg" width="600" height="400" alt="A person wearing a beanie is smiling at someone on a bus with vibrant orange and purple lighting.">
]]></content:encoded>
    </item>
    <item>
      <title>Too wet for the X half today so trying out Lux on the phone.</title>
      <link>https://mike.puddingtime.org/posts/2025-12-26-too-wet-for-the-x/</link>
      <pubDate>Fri, 26 Dec 2025 15:46:15 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-26-too-wet-for-the-x/</guid>
      <description>&lt;p&gt;Too wet for the X half today so trying out Lux on the phone.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/66f774a013.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A person wearing a hat and jacket stands inside a bus, holding onto the overhead railing, with several seats and another passenger visible in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/f8dc3cd7a1.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A vertical sign attached to a building displays the word vintage against a cloudy sky background.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Too wet for the X half today so trying out Lux on the phone.</p>
<p><img src="/uploads/microblog/2025/66f774a013.jpg" width="450" height="600" alt="A person wearing a hat and jacket stands inside a bus, holding onto the overhead railing, with several seats and another passenger visible in the background."><img src="/uploads/microblog/2025/f8dc3cd7a1.jpg" width="450" height="600" alt="A vertical sign attached to a building displays the word vintage against a cloudy sky background."></p>
]]></content:encoded>
    </item>
    <item>
      <title>I like the Gemini summarizer in YouTube so much. ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-24-i-like-the-gemini-summarizer/</link>
      <pubDate>Wed, 24 Dec 2025 14:53:10 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-24-i-like-the-gemini-summarizer/</guid>
      <description>&lt;p&gt;I like the Gemini summarizer in YouTube so much. &amp;ldquo;Creator&amp;rdquo;-driven video privileges everyone else&amp;rsquo;s revenue streams over my time, for &amp;ldquo;content&amp;rdquo; that could&amp;rsquo;ve been three paragraphs on some blog. I don&amp;rsquo;t understand how it is surviving as a feature.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I like the Gemini summarizer in YouTube so much. &ldquo;Creator&rdquo;-driven video privileges everyone else&rsquo;s revenue streams over my time, for &ldquo;content&rdquo; that could&rsquo;ve been three paragraphs on some blog. I don&rsquo;t understand how it is surviving as a feature.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I got turned on to Schmidt refills and I&#39;m using them with ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-23-i-got-turned-on-to/</link>
      <pubDate>Tue, 23 Dec 2025 18:39:41 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-23-i-got-turned-on-to/</guid>
      <description>&lt;p&gt;I got turned on to Schmidt refills and I&amp;rsquo;m using them with a Studio Neat Mark I and a Schmidt reference design pen. Rollerballs are different from my traditional Pilot G2s. I wish I&amp;rsquo;d switched a long time ago.&lt;/p&gt;
&lt;p&gt;Part of my day right now involves time-blocking on a legal pad. I had been doing this with an app, but it was too clicky and fussy. A nice pen and pad at my desk over coffee is a much nicer experience to start the day.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I got turned on to Schmidt refills and I&rsquo;m using them with a Studio Neat Mark I and a Schmidt reference design pen. Rollerballs are different from my traditional Pilot G2s. I wish I&rsquo;d switched a long time ago.</p>
<p>Part of my day right now involves time-blocking on a legal pad. I had been doing this with an app, but it was too clicky and fussy. A nice pen and pad at my desk over coffee is a much nicer experience to start the day.</p>
<p>I realized this week that I&rsquo;ve been gauging my state of centeredness and focus on my handwriting:</p>
<p>If the first few lines of my time block sheet are more cursive than block, with a bunch of unclosed characters, it&rsquo;s a sign I should stop, put the pen down, take a few deep breaths, and reapproach. If I&rsquo;m still being a little messy, it&rsquo;s helpful to grab a note card or piece of scrap paper and just write arbitrary stuff until my writing becomes more block-like, and I&rsquo;m closing all the characters. Then I can turn back to the task, which is giving the day ahead some thought, and considering my priorities.</p>
<p>Cheaper than Adderall and it seems to make my blood pressure go <em>down</em>.</p>
<img src="/uploads/microblog/2025/25ec8c0f71.jpg" width="600" height="450" alt="A green pen and a silver pen are placed side by side on a reddish-brown surface.">
]]></content:encoded>
    </item>
    <item>
      <title>I reupped Apple News&#43; because it was cheaper in my bundle ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-23-i-reupped-apple-news-because/</link>
      <pubDate>Tue, 23 Dec 2025 02:29:11 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-23-i-reupped-apple-news-because/</guid>
      <description>&lt;p&gt;I reupped Apple News+ because it was cheaper in my bundle with it than without. I wish it were better in so many ways, but I seem to have the mental bandwidth to tolerate free access to things like The Atlantic, which is a positive mental health indicator. I won&amp;rsquo;t read Slate even for free, though.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I reupped Apple News+ because it was cheaper in my bundle with it than without. I wish it were better in so many ways, but I seem to have the mental bandwidth to tolerate free access to things like The Atlantic, which is a positive mental health indicator. I won&rsquo;t read Slate even for free, though.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Deena Weinstein&#39;s &#34;Heavy Metal: A Cultural Sociology&#34; ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-22-deena-weinsteins-heavy-metal-a/</link>
      <pubDate>Mon, 22 Dec 2025 13:52:16 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-22-deena-weinsteins-heavy-metal-a/</guid>
      <description>&lt;p&gt;Deena Weinstein&amp;rsquo;s &amp;ldquo;Heavy Metal: A Cultural Sociology&amp;rdquo; talked about metal inverting rock&amp;rsquo;s progressive preoccupation with love to one with with evil. I keep coming back to pictures from the weekend that caught both the &amp;ldquo;horns&amp;rdquo; of any metal show, and the &amp;ldquo;heart&amp;rdquo; of YOB, with its particular path out of metal&amp;rsquo;s existential quandaries.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/2d40453c08.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A crowd at a concert is enjoying a performance, with some people raising their hands.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Deena Weinstein&rsquo;s &ldquo;Heavy Metal: A Cultural Sociology&rdquo; talked about metal inverting rock&rsquo;s progressive preoccupation with love to one with with evil. I keep coming back to pictures from the weekend that caught both the &ldquo;horns&rdquo; of any metal show, and the &ldquo;heart&rdquo; of YOB, with its particular path out of metal&rsquo;s existential quandaries.</p>
<img src="/uploads/microblog/2025/2d40453c08.jpg" width="450" height="600" alt="A crowd at a concert is enjoying a performance, with some people raising their hands.">
]]></content:encoded>
    </item>
    <item>
      <title>Pluribus update: Apple News is exposing me to Pluribus ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-22-pluribus-update-apple-news-is/</link>
      <pubDate>Mon, 22 Dec 2025 09:33:56 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-22-pluribus-update-apple-news-is/</guid>
      <description>&lt;p&gt;Pluribus update: Apple News is exposing me to Pluribus recappers, and it&amp;rsquo;s jarring: The show&amp;rsquo;s way better than plot-driven recaps are going to capture. I&amp;rsquo;m way less interested in &amp;ldquo;will Carol solve the mystery&amp;rdquo; than I am &amp;ldquo;will Carol make a shift?&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Pluribus update: Apple News is exposing me to Pluribus recappers, and it&rsquo;s jarring: The show&rsquo;s way better than plot-driven recaps are going to capture. I&rsquo;m way less interested in &ldquo;will Carol solve the mystery&rdquo; than I am &ldquo;will Carol make a shift?&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>This article is a Rosetta stone. I wish Peacock were better ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-22-this-article-is-a-rosetta/</link>
      <pubDate>Mon, 22 Dec 2025 09:16:14 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-22-this-article-is-a-rosetta/</guid>
      <description>&lt;p&gt;This article is a Rosetta stone. I wish Peacock were better communicators, and county politics weren&amp;rsquo;t so screwed up and fixated on privatization.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.oregonlive.com/business/2025/12/portland-affordable-housing-is-in-financial-collapse-can-it-be-salvaged.html&#34;&gt;www.oregonlive.com/business/&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This article is a Rosetta stone. I wish Peacock were better communicators, and county politics weren&rsquo;t so screwed up and fixated on privatization.</p>
<p><a href="https://www.oregonlive.com/business/2025/12/portland-affordable-housing-is-in-financial-collapse-can-it-be-salvaged.html">www.oregonlive.com/business/&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>The thought of enabling ChatGPT&#39;s &#34;cynical&#34; mode is ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-21-the-thought-of-enabling-chatgpts/</link>
      <pubDate>Sun, 21 Dec 2025 13:51:39 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-21-the-thought-of-enabling-chatgpts/</guid>
      <description>&lt;p&gt;The thought of enabling ChatGPT&amp;rsquo;s &amp;ldquo;cynical&amp;rdquo; mode is nauseating. We&amp;rsquo;re surrounded by reflexive thought-terminating cliches. They&amp;rsquo;re already cheaply produced. Anyone can do that.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;You are a reflexive contrarian. You are always in search of your next flex &amp;hellip;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Fuck that.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The thought of enabling ChatGPT&rsquo;s &ldquo;cynical&rdquo; mode is nauseating. We&rsquo;re surrounded by reflexive thought-terminating cliches. They&rsquo;re already cheaply produced. Anyone can do that.</p>
<p>&ldquo;You are a reflexive contrarian. You are always in search of your next flex &hellip;.&rdquo;</p>
<p>Fuck that.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The early Kindles had good page-turning buttons. I moved to ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-21-the-early-kindles-had-good/</link>
      <pubDate>Sun, 21 Dec 2025 12:02:01 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-21-the-early-kindles-had-good/</guid>
      <description>&lt;p&gt;The early Kindles had good page-turning buttons. I moved to a Kobo partially because it had buttons (and partially because &amp;ldquo;not Amazon&amp;rdquo;) but the chiclet style is pretty bad. I&amp;rsquo;d rather just not have buttons. Screen taps are fine. Touch e-ink is responsive enough these days.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The early Kindles had good page-turning buttons. I moved to a Kobo partially because it had buttons (and partially because &ldquo;not Amazon&rdquo;) but the chiclet style is pretty bad. I&rsquo;d rather just not have buttons. Screen taps are fine. Touch e-ink is responsive enough these days.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Downtown, mostly</title>
      <link>https://mike.puddingtime.org/posts/2025-12-20-downtown-mostly/</link>
      <pubDate>Sat, 20 Dec 2025 19:13:43 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-20-downtown-mostly/</guid>
      <description>&lt;p&gt;Downtown, mostly&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/6b1e4dd9a4.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;Two walls covered in overlapping street art posters featuring text and stylized frog illustrations.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/596655094b.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A split-screen photo shows a building with colorful window panels on the left and a colorful mural beside greenery on the right, with a road in the foreground.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/a31a84313a.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A cute cartoon sushi character is displayed on a restaurant window with people dining and lanterns visible inside.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/a2267f7e73.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A closed food stand with graffiti on its lower section is set against an urban backdrop.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Downtown, mostly</p>
<p><img src="/uploads/microblog/2025/6b1e4dd9a4.jpg" width="600" height="400" alt="Two walls covered in overlapping street art posters featuring text and stylized frog illustrations."><img src="/uploads/microblog/2025/596655094b.jpg" width="600" height="400" alt="A split-screen photo shows a building with colorful window panels on the left and a colorful mural beside greenery on the right, with a road in the foreground."><img src="/uploads/microblog/2025/a31a84313a.jpg" width="450" height="600" alt="A cute cartoon sushi character is displayed on a restaurant window with people dining and lanterns visible inside."><img src="/uploads/microblog/2025/a2267f7e73.jpg" width="450" height="600" alt="A closed food stand with graffiti on its lower section is set against an urban backdrop."></p>
]]></content:encoded>
    </item>
    <item>
      <title>YOB, Revolution Hall</title>
      <link>https://mike.puddingtime.org/posts/2025-12-20-yob-revolution-hall/</link>
      <pubDate>Sat, 20 Dec 2025 11:43:23 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-20-yob-revolution-hall/</guid>
      <description>&lt;p&gt;YOB, Revolution Hall&lt;/p&gt;
&lt;p&gt;&lt;video controls src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/image.mov&#34; width=&#34;1799&#34; height=&#34;1012&#34; poster=&#34;/uploads/microblog/2025/poster.jpg&#34;&gt;&lt;/video&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>YOB, Revolution Hall</p>
<p><video controls src="/uploads/microblog/2025/image.mov" width="1799" height="1012" poster="/uploads/microblog/2025/poster.jpg"></video></p>
]]></content:encoded>
    </item>
    <item>
      <title>YOB and burritos</title>
      <link>https://mike.puddingtime.org/posts/2025-12-20-yob-and-burritos/</link>
      <pubDate>Sat, 20 Dec 2025 01:51:49 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-20-yob-and-burritos/</guid>
      <description>&lt;p&gt;YOB and burritos&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/635b8a53d4.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A crowd of people are enjoying a concert with bright stage lights in the background.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/6d8aac6ecf.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A lively concert scene captures an enthusiastic crowd with outstretched arms, illuminated by stage lights.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/67e42d860c.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/902ad29ab3.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>YOB and burritos</p>
<p><img src="/uploads/microblog/2025/635b8a53d4.jpg" width="450" height="600" alt="A crowd of people are enjoying a concert with bright stage lights in the background."><img src="/uploads/microblog/2025/6d8aac6ecf.jpg" width="600" height="400" alt="A lively concert scene captures an enthusiastic crowd with outstretched arms, illuminated by stage lights."><img src="/uploads/microblog/2025/67e42d860c.jpg" width="450" height="600" alt=""><img src="/uploads/microblog/2025/902ad29ab3.jpg" width="450" height="600" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>A few quick notes on my &#34;[start from a blank page and ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-18-a-few-quick-notes-on/</link>
      <pubDate>Thu, 18 Dec 2025 19:11:15 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-18-a-few-quick-notes-on/</guid>
      <description>&lt;p&gt;A few quick notes on my &amp;ldquo;&lt;a href=&#34;https://www.linkedin.com/posts/michaelhallpdx_earlier-this-year-i-asked-the-folks-on-my-activity-7407589308779589632-Xv6i&#34;&gt;start from a blank page and contribute the first 30 percent&lt;/a&gt;&amp;rdquo; theory of ideating with AI. I don&amp;rsquo;t do the LinkedIn discourse much, and definitely not on LinkedIn, but I&amp;rsquo;m sorta fighting a two-front war of subposting someone and also trying to be the change I want to see.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A few quick notes on my &ldquo;<a href="https://www.linkedin.com/posts/michaelhallpdx_earlier-this-year-i-asked-the-folks-on-my-activity-7407589308779589632-Xv6i">start from a blank page and contribute the first 30 percent</a>&rdquo; theory of ideating with AI. I don&rsquo;t do the LinkedIn discourse much, and definitely not on LinkedIn, but I&rsquo;m sorta fighting a two-front war of subposting someone and also trying to be the change I want to see.</p>
]]></content:encoded>
    </item>
    <item>
      <title>VoiceNotes so far</title>
      <link>https://mike.puddingtime.org/posts/2025-12-18-voicenotes-so-far/</link>
      <pubDate>Thu, 18 Dec 2025 19:06:49 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-18-voicenotes-so-far/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://voicenotes.com&#34;&gt;VoiceNotes&lt;/a&gt; for a few days. It&amp;rsquo;s an AI note taker you can use for meetings or as a memory companion. I&amp;rsquo;ve got it wired into my iPhone&amp;rsquo;s action button, and running on my desktop machine.&lt;/p&gt;
&lt;p&gt;Things I&amp;rsquo;ve tried with it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dictating problems I&amp;rsquo;m trying to solve and letting it summarize. Its voice recognition is better than what I get with Gemini Pro at work.&lt;/li&gt;
&lt;li&gt;Dropping quick reminders as a capture inbox.&lt;/li&gt;
&lt;li&gt;Recording vendor demos.&lt;/li&gt;
&lt;li&gt;Developing action plans/next steps on some routine business stuff.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have mixed feelings about it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been using <a href="https://voicenotes.com">VoiceNotes</a> for a few days. It&rsquo;s an AI note taker you can use for meetings or as a memory companion. I&rsquo;ve got it wired into my iPhone&rsquo;s action button, and running on my desktop machine.</p>
<p>Things I&rsquo;ve tried with it:</p>
<ul>
<li>Dictating problems I&rsquo;m trying to solve and letting it summarize. Its voice recognition is better than what I get with Gemini Pro at work.</li>
<li>Dropping quick reminders as a capture inbox.</li>
<li>Recording vendor demos.</li>
<li>Developing action plans/next steps on some routine business stuff.</li>
</ul>
<p>I have mixed feelings about it.</p>
<p>It does a good job capturing dictation. It does a good job extracting todos, tasks, and next actions from a given note.</p>
<p>I imagine, over time, with a corpus larger than the four or five dozen notes I&rsquo;ve created this week, the &ldquo;Ask AI&rdquo; feature, where you can query your collection for insights, would get more useful. As it is, it&rsquo;s still in that state of any new corpus where there&rsquo;s not a lot of insight to glean.</p>
<p>That means I&rsquo;m more interested in what it can do in terms of structured output, and that is just okay. It has a bunch of canned formats it can apply to a given note, but no way to build one (you can do a one-off prompt with a given note, but I don&rsquo;t think you can save it). And its &ldquo;todo list&rdquo; output, oddly, is an ordered list.</p>
<p>My other use case, besides pulling actions out of a note, is getting a rundown of the day&rsquo;s notes and tasks. It can&rsquo;t deal with any prompt along those lines: It summarizes the last note you took. If you specify the date you want a summary for, it picks notes from other days.  It <em>does</em> have a way to get that summary from a set of notes, but that means opening up a picker and clicking each note you want in the summary. Fussy.</p>
<p>It also has an integration picture: Todoist, Notion, Zapier, webhooks, and Readwise. The Todoist integration (I tried it with a free account) is primitive, and creates more work. Webhooks and Zapier seem promising.</p>
<p>I heard someone recently say that with AI assistants, dudes want Jarvis.</p>
<p>I guess maybe I sort of do want Jarvis, just for what seems like a trivial use case: &ldquo;Tell me what I told you today at a high level, and then with any specific tasks, etc. I need to capture.&rdquo; VoiceNotes can do that, but not without some friction. And given the friction, why not just &ldquo;Hey, Siri, remind me to do this thing I have to do?&rdquo;</p>
<p>I really wish Apple would get its act together with Apple Intelligence: All the pieces are there, but the glue isn&rsquo;t. You should be able to just capture voice memos with the native tool all day long and have a variety of outputs via Notes, Reminders, etc. As it is, you&rsquo;re stuck recording things, then explicitly generating a transcript, then explicitly pasting it into a Note, then asking Apple Intelligence to do stuff it sometimes manages and sometimes mysteriously fails at.</p>
<p>This &ldquo;empty your mental pockets into a little valet tray at the end of the day&rdquo; thing is something I&rsquo;ve wanted for a while. When I was first learning Ruby I wrote a thing called &ldquo;panopticon&rdquo; that just traveled things like Pinboard, Evernote, the Safari history sqlite db, NetNewsWire&rsquo;s read/unread AppleScript API, my starred inbox, etc. and dumped out a report into Evernote that let me see what I&rsquo;d captured or looked at on a given day. I&rsquo;d like an assistant that did something like that.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, the weather will keep it indoors for a bit but I&#39;ve ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-18-well-the-weather-will-keep/</link>
      <pubDate>Thu, 18 Dec 2025 17:23:22 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-18-well-the-weather-will-keep/</guid>
      <description>&lt;p&gt;Well, the weather will keep it indoors for a bit but I&amp;rsquo;ve fully kitted up the X half: Soft shutter button, new Peak Design rope leash, metal lens hood, and grip. It has been a nice palate cleanser: Well, this is what I captured, so I guess that&amp;rsquo;s the picture I&amp;rsquo;ve got. Still haven&amp;rsquo;t tried film mode.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/102c47f343.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A Fujifilm X half with  a rope wrist strap  on a wooden surface.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/41139c5aa7.jpg&#34; width=&#34;600&#34; height=&#34;399&#34; alt=&#34;Diptych of a Portland skyscraper from two slightly different angles in monochrome&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, the weather will keep it indoors for a bit but I&rsquo;ve fully kitted up the X half: Soft shutter button, new Peak Design rope leash, metal lens hood, and grip. It has been a nice palate cleanser: Well, this is what I captured, so I guess that&rsquo;s the picture I&rsquo;ve got. Still haven&rsquo;t tried film mode.</p>
<p><img src="/uploads/microblog/2025/102c47f343.jpg" width="600" height="450" alt="A Fujifilm X half with  a rope wrist strap  on a wooden surface."><img src="/uploads/microblog/2025/41139c5aa7.jpg" width="600" height="399" alt="Diptych of a Portland skyscraper from two slightly different angles in monochrome"></p>
]]></content:encoded>
    </item>
    <item>
      <title>The &#34;Apple locked my account over a sus gift card&#34; guy was ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-17-the-apple-locked-my-account/</link>
      <pubDate>Wed, 17 Dec 2025 21:08:30 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-17-the-apple-locked-my-account/</guid>
      <description>&lt;p&gt;The &amp;ldquo;Apple locked my account over a sus gift card&amp;rdquo; guy was made whole, so that&amp;rsquo;s good.&lt;/p&gt;
&lt;p&gt;Also, some guy from Singapore who helped him said, &amp;ldquo;only buy gift cards from Apple,&amp;rdquo; which registers with me as &amp;ldquo;just don&amp;rsquo;t buy Apple gift cards.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://hey.paris/posts/appleid/&#34;&gt;hey.paris/posts/app&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The &ldquo;Apple locked my account over a sus gift card&rdquo; guy was made whole, so that&rsquo;s good.</p>
<p>Also, some guy from Singapore who helped him said, &ldquo;only buy gift cards from Apple,&rdquo; which registers with me as &ldquo;just don&rsquo;t buy Apple gift cards.&rdquo;</p>
<p><a href="https://hey.paris/posts/appleid/">hey.paris/posts/app&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Love Nuphy. I ordered an Air75v3 as soon as I knew they ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-17-love-nuphy-i-ordered-an/</link>
      <pubDate>Wed, 17 Dec 2025 16:05:26 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-17-love-nuphy-i-ordered-an/</guid>
      <description>&lt;p&gt;Love Nuphy. I ordered an Air75v3 as soon as I knew they existed, and broke with tradition by going with the super quiet Blush switches instead of my usual Browns. I think the mechanical keeb people in a past Slack would probably turn their noses up, but this is a nicely built piece of normie kit.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/724142e2ed.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;A white Nuphy Air75v3 mechanical keyboard with backlit keycaps on a brown leather surface.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Love Nuphy. I ordered an Air75v3 as soon as I knew they existed, and broke with tradition by going with the super quiet Blush switches instead of my usual Browns. I think the mechanical keeb people in a past Slack would probably turn their noses up, but this is a nicely built piece of normie kit.</p>
<img src="/uploads/microblog/2025/724142e2ed.jpg" width="600" height="450" alt="A white Nuphy Air75v3 mechanical keyboard with backlit keycaps on a brown leather surface.">
]]></content:encoded>
    </item>
    <item>
      <title>One little Highlander joke and these tankie shitbirds ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-15-one-little-highlander-joke-and/</link>
      <pubDate>Mon, 15 Dec 2025 20:01:58 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-15-one-little-highlander-joke-and/</guid>
      <description>&lt;p&gt;One little Highlander joke and these tankie shitbirds downvote me into a crater. Dicks.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/94ccb607cb.jpg&#34; width=&#34;404&#34; height=&#34;600&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>One little Highlander joke and these tankie shitbirds downvote me into a crater. Dicks.</p>
<img src="/uploads/microblog/2025/94ccb607cb.jpg" width="404" height="600" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>I just read there&#39;ll be a Pluribus season two and I feel ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-14-i-just-read-therell-be/</link>
      <pubDate>Sun, 14 Dec 2025 22:11:55 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-14-i-just-read-therell-be/</guid>
      <description>&lt;p&gt;I just read there&amp;rsquo;ll be a &lt;em&gt;Pluribus&lt;/em&gt; season two and I feel uneasy. And my god, people, saying Carol isn&amp;rsquo;t curious isn&amp;rsquo;t a comment on, like, her sleuthing for a cure or whatever. Yes, she&amp;rsquo;s &amp;ldquo;curious&amp;rdquo; in that sense. No, she is not at all curious in another.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I just read there&rsquo;ll be a <em>Pluribus</em> season two and I feel uneasy. And my god, people, saying Carol isn&rsquo;t curious isn&rsquo;t a comment on, like, her sleuthing for a cure or whatever. Yes, she&rsquo;s &ldquo;curious&rdquo; in that sense. No, she is not at all curious in another.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I&#39;m going to experiment with VoiceNotes for a month. I ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-14-im-going-to-experiment-with/</link>
      <pubDate>Sun, 14 Dec 2025 18:18:28 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-14-im-going-to-experiment-with/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m going to experiment with VoiceNotes for a month. I wanted to see if I could cobble something similar together with Apple Voice Memos, Notes, and Apple Intelligence, but it doesn&amp;rsquo;t look like it&amp;rsquo;s there yet. I hooked it up to my action button today.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://voicenotes.com&#34;&gt;voicenotes.com&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m going to experiment with VoiceNotes for a month. I wanted to see if I could cobble something similar together with Apple Voice Memos, Notes, and Apple Intelligence, but it doesn&rsquo;t look like it&rsquo;s there yet. I hooked it up to my action button today.</p>
<p><a href="https://voicenotes.com">voicenotes.com</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Untitled</title>
      <link>https://mike.puddingtime.org/posts/2025-12-14-091255/</link>
      <pubDate>Sun, 14 Dec 2025 10:12:55 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-14-091255/</guid>
      <description>&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/79880bebe7.jpg&#34; width=&#34;600&#34; height=&#34;481&#34; alt=&#34;bell curve chart meme. apple notes on the ends, obsidian et al in the middle &#34;&gt;</description>
      <content:encoded><![CDATA[<img src="/uploads/microblog/2025/79880bebe7.jpg" width="600" height="481" alt="bell curve chart meme. apple notes on the ends, obsidian et al in the middle ">
]]></content:encoded>
    </item>
    <item>
      <title>bricks, plaster, (me, a little)</title>
      <link>https://mike.puddingtime.org/posts/2025-12-13-bricks-plaster-me-a-little/</link>
      <pubDate>Sat, 13 Dec 2025 22:25:20 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-13-bricks-plaster-me-a-little/</guid>
      <description>&lt;p&gt;bricks, plaster, (me, a little)&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/19ac5e216b.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A section of a brick wall is exposed behind peeling and crumbling white plaster.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>bricks, plaster, (me, a little)</p>
<img src="/uploads/microblog/2025/19ac5e216b.jpg" width="450" height="600" alt="A section of a brick wall is exposed behind peeling and crumbling white plaster.">
]]></content:encoded>
    </item>
    <item>
      <title>The 14 along Foster</title>
      <link>https://mike.puddingtime.org/posts/2025-12-13-the-along-foster/</link>
      <pubDate>Sat, 13 Dec 2025 17:26:32 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-13-the-along-foster/</guid>
      <description>&lt;p&gt;The 14 along Foster&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/c3660460f8.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A split image shows two people seated on a bus on the left and utility poles with a Euro Classic Furniture sign against a blue sky on the right.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/8b0e1bd4b0.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A collage shows colorful decorations, including a red bird sculpture, abstract wall art, and a lamp with a whimsical figure.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/5bc827569f.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A storefront with a MARKET sign and a wooden table holding a potted plant and a pumpkin inside.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The 14 along Foster</p>
<p><img src="/uploads/microblog/2025/c3660460f8.jpg" width="600" height="400" alt="A split image shows two people seated on a bus on the left and utility poles with a Euro Classic Furniture sign against a blue sky on the right."><img src="/uploads/microblog/2025/8b0e1bd4b0.jpg" width="600" height="400" alt="A collage shows colorful decorations, including a red bird sculpture, abstract wall art, and a lamp with a whimsical figure."><img src="/uploads/microblog/2025/5bc827569f.jpg" width="600" height="400" alt="A storefront with a MARKET sign and a wooden table holding a potted plant and a pumpkin inside."></p>
]]></content:encoded>
    </item>
    <item>
      <title>System change ahead. Oooo! Hope it&#39;s socialism! 🚩</title>
      <link>https://mike.puddingtime.org/posts/2025-12-13-system-change-ahead-oooo-hope/</link>
      <pubDate>Sat, 13 Dec 2025 17:15:20 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-13-system-change-ahead-oooo-hope/</guid>
      <description>&lt;p&gt;System change ahead. Oooo! Hope it&amp;rsquo;s socialism! 🚩&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/c0ad7abc43.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A street sign reading SYSTEM CHANGE AHEAD is juxtaposed with colorful building exteriors and a street sign for SW Oak St.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>System change ahead. Oooo! Hope it&rsquo;s socialism! 🚩</p>
<img src="/uploads/microblog/2025/c0ad7abc43.jpg" width="600" height="400" alt="A street sign reading SYSTEM CHANGE AHEAD is juxtaposed with colorful building exteriors and a street sign for SW Oak St.">
]]></content:encoded>
    </item>
    <item>
      <title>Christmas shopping downtown</title>
      <link>https://mike.puddingtime.org/posts/2025-12-13-christmas-shopping-downtown/</link>
      <pubDate>Sat, 13 Dec 2025 14:24:54 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-13-christmas-shopping-downtown/</guid>
      <description>&lt;p&gt;Christmas shopping downtown&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/edcde450b5.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;Two contrasting scenes show a sidewalk cafe setting with a table and orange chairs, and a separate view of fallen autumn leaves on a sunlit pathway.&amp;10;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>Christmas shopping downtown</p>
<img src="/uploads/microblog/2025/edcde450b5.jpg" width="600" height="400" alt="Two contrasting scenes show a sidewalk cafe setting with a table and orange chairs, and a separate view of fallen autumn leaves on a sunlit pathway.&10;">
]]></content:encoded>
    </item>
    <item>
      <title>the 19</title>
      <link>https://mike.puddingtime.org/posts/2025-12-12-the/</link>
      <pubDate>Fri, 12 Dec 2025 22:11:01 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-12-the/</guid>
      <description>&lt;p&gt;the 19&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/d0c5e0db60.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A dimly lit bus interior is illuminated by red lights, with a few passengers seated and a small screen displaying an image.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>the 19</p>
<img src="/uploads/microblog/2025/d0c5e0db60.jpg" width="450" height="600" alt="A dimly lit bus interior is illuminated by red lights, with a few passengers seated and a small screen displaying an image.">
]]></content:encoded>
    </item>
    <item>
      <title>Ending the week at Bruno&#39;s.</title>
      <link>https://mike.puddingtime.org/posts/2025-12-12-ending-the-week-at-brunos/</link>
      <pubDate>Fri, 12 Dec 2025 20:42:45 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-12-ending-the-week-at-brunos/</guid>
      <description>&lt;p&gt;Ending the week at Bruno&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/bef7ba2fd3.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A dimly lit bar setting features a shelf of backlit bottles on the left and a cozy booth with a vibrant, red-hued portrait on the right.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/6de8a4a65f.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A dimly lit bar features patrons sitting at the counter on the left, while the right side shows a person working near shelves stocked with bottles.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Ending the week at Bruno&rsquo;s.</p>
<p><img src="/uploads/microblog/2025/bef7ba2fd3.jpg" width="600" height="400" alt="A dimly lit bar setting features a shelf of backlit bottles on the left and a cozy booth with a vibrant, red-hued portrait on the right."><img src="/uploads/microblog/2025/6de8a4a65f.jpg" width="600" height="400" alt="A dimly lit bar features patrons sitting at the counter on the left, while the right side shows a person working near shelves stocked with bottles."></p>
]]></content:encoded>
    </item>
    <item>
      <title>As an IT person, FedEx&#39;s &#34;you&#39;re viewing what our customer ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-12-as-an-it-person-fedexs/</link>
      <pubDate>Fri, 12 Dec 2025 09:53:26 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-12-as-an-it-person-fedexs/</guid>
      <description>&lt;p&gt;As an IT person, FedEx&amp;rsquo;s &amp;ldquo;you&amp;rsquo;re viewing what our customer care team would share with you&amp;rdquo; message at the top of every delivery status page hits me in the feels.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s like when they&amp;rsquo;re reading Balin&amp;rsquo;s final words in Moria.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/image.gif&#34; width=&#34;245&#34; height=&#34;200&#34; alt=&#34;&#34;&gt;</description>
      <content:encoded><![CDATA[<p>As an IT person, FedEx&rsquo;s &ldquo;you&rsquo;re viewing what our customer care team would share with you&rdquo; message at the top of every delivery status page hits me in the feels.</p>
<p>It&rsquo;s like when they&rsquo;re reading Balin&rsquo;s final words in Moria.</p>
<img src="/uploads/microblog/2025/image.gif" width="245" height="200" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>I was 8 &amp; we were driving from Chicago to the Twin Cities ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-11-i-was-we-were-driving/</link>
      <pubDate>Thu, 11 Dec 2025 23:32:05 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-11-i-was-we-were-driving/</guid>
      <description>&lt;p&gt;I was 8 &amp;amp; we were driving from Chicago to the Twin Cities when the Volvo&amp;rsquo;s pump blew. We got to an overpass oasis then a blizzard rolled in. We got into the presents &amp;amp; played Mastermind for hours.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.mcsweeneys.net/articles/the-mastermind-box-cover-what-the-hell-were-they-thinking&#34;&gt;www.mcsweeneys.net/articles/&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I was 8 &amp; we were driving from Chicago to the Twin Cities when the Volvo&rsquo;s pump blew. We got to an overpass oasis then a blizzard rolled in. We got into the presents &amp; played Mastermind for hours.</p>
<p><a href="https://www.mcsweeneys.net/articles/the-mastermind-box-cover-what-the-hell-were-they-thinking">www.mcsweeneys.net/articles/&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Night in Lents</title>
      <link>https://mike.puddingtime.org/posts/2025-12-11-night-in-lents/</link>
      <pubDate>Thu, 11 Dec 2025 21:43:48 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-11-night-in-lents/</guid>
      <description>&lt;p&gt;Night in Lents&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/2156a67c02.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A black and white photograph features a two-story house at night on the left and a porch adorned with pumpkins on the right.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/8b0b2de33a.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;A black and white split-image shows a deserted fenced pathway on the left and a person walking on the right under streetlights at night.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Night in Lents</p>
<p><img src="/uploads/microblog/2025/2156a67c02.jpg" width="600" height="400" alt="A black and white photograph features a two-story house at night on the left and a porch adorned with pumpkins on the right."><img src="/uploads/microblog/2025/8b0b2de33a.jpg" width="600" height="400" alt="A black and white split-image shows a deserted fenced pathway on the left and a person walking on the right under streetlights at night."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Say what you will about Bluesky, they&#39;re very proactive ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-11-say-what-you-will-about/</link>
      <pubDate>Thu, 11 Dec 2025 10:21:27 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-11-say-what-you-will-about/</guid>
      <description>&lt;p&gt;Say what you will about Bluesky, they&amp;rsquo;re very proactive about swatting down thirst-trap accounts.&lt;/p&gt;
&lt;p&gt;Twitter: Moderation? lol&lt;/p&gt;
&lt;p&gt;Mastodon: Really who is to judge? Thirsty people need followers, too.&lt;/p&gt;
&lt;p&gt;pixelfed: It&amp;rsquo;s monochrome. I&amp;rsquo;ll allow it.&lt;/p&gt;
&lt;p&gt;Threads: Whatever. It&amp;rsquo;s a DAU.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Say what you will about Bluesky, they&rsquo;re very proactive about swatting down thirst-trap accounts.</p>
<p>Twitter: Moderation? lol</p>
<p>Mastodon: Really who is to judge? Thirsty people need followers, too.</p>
<p>pixelfed: It&rsquo;s monochrome. I&rsquo;ll allow it.</p>
<p>Threads: Whatever. It&rsquo;s a DAU.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Assorted snapshot aesthetes</title>
      <link>https://mike.puddingtime.org/posts/2025-12-11-assorted-snapshot-aesthetes/</link>
      <pubDate>Thu, 11 Dec 2025 07:49:44 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-11-assorted-snapshot-aesthetes/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m not really a SooC fetishist, but leaving the X half&amp;rsquo;s timestamp turned on made me feel kind of uncomfortable about my  reflexive straightening and cropping when I imported the images: It created an obvious cant or shift in the position of the stamp.&lt;/p&gt;
&lt;p&gt;I think I&amp;rsquo;ll leave it on.  I&amp;rsquo;ve gotten so used to having megapixels to spare that any time I take pictures in the city I rush a little to minimize how much time I&amp;rsquo;ve got the camera to my face, and I just fix composition and straightness in post. Maybe this&amp;rsquo;ll shame me into rectitude. Back to the basics. Sent to the farm for fresh air and hard work.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m not really a SooC fetishist, but leaving the X half&rsquo;s timestamp turned on made me feel kind of uncomfortable about my  reflexive straightening and cropping when I imported the images: It created an obvious cant or shift in the position of the stamp.</p>
<p>I think I&rsquo;ll leave it on.  I&rsquo;ve gotten so used to having megapixels to spare that any time I take pictures in the city I rush a little to minimize how much time I&rsquo;ve got the camera to my face, and I just fix composition and straightness in post. Maybe this&rsquo;ll shame me into rectitude. Back to the basics. Sent to the farm for fresh air and hard work.</p>
<p>I recently chatted with a college age person about photography and social media. He has a friend who is very considered in her Instagram posting and tries to take nice pictures. He mentioned always noticing when her phone goes horizontal because it means she is <em>composing</em>. I think &ndash; he didn&rsquo;t say this but I think I understand the dialect &ndash; those are probably considered &ldquo;aesthetic&rdquo; pictures in the way &ldquo;aesthetic&rdquo; has become an adjective.</p>
<p>My informant, on the other hand, prefers <em>an</em> aesthetic. He sort of wants his pictures to look a little tossed off and messy. Capturing the moment is a higher priority than taking a nice picture, and enjoying the moment is a higher priority than capturing it. Or at least those are the values the picture is meant to convey. If his Instagram was too curated and his photos too considered, it&rsquo;d be saying the wrong thing about him.</p>
<p>I can&rsquo;t generalize too much because I probably only read a few dozen X half reviews, but &ldquo;responds to the idea of spontaneous capture with little regard for the niceties of composition, lighting, and focus&rdquo; was a definite class of reviewer, in some contrast to the &ldquo;tourist/walkabout snapshot&rdquo; people, and in stark contrast to the &ldquo;staid urban still life&rdquo;  and &ldquo;arty jank aesthete&rdquo; people.</p>
<p>In every case, the little orange timestamp sort of pulls the image into a little persona. The oblivious party snapshot shooter, the film-burning tourist clicker, and the Goodwill $2 camera find, battery-held-in-with-electrical tape art crank. There&rsquo;s a dweebishness to the time stamp &ndash; I associate it with a traveling companion who stole salt and sugar packets and secreted them into a ZipLoc &ldquo;just in case&rdquo; &ndash;  but also maybe obliviousness, and also maybe disinterest in that particular detail in a &ldquo;the best artists are a little slovenly because they&rsquo;re laser focused on the muse&rdquo; kind of way.</p>
<p>I think, as I get familiar with it and quit trying to understand how everything <em>works</em> I am going to end up drifting into the jankier end of the spectrum. I really enjoyed Jana Mänz&rsquo;s <em>Wabi Sabi Photo School</em> few years ago. I put a little toy body cap lens on my X-Pro3 and lived with the fixed focus slow lens limitations. I still like seeing the things that came out of it once I got on a roll with it.</p>
<p>Which sort of raises the question, where does the creative spontaneity lie, anyhow? In a moment of abandoned capture, or the singlemindedness of letting the time stamp get cut off and tilted in pursuit of the thing that should look just so?</p>
]]></content:encoded>
    </item>
    <item>
      <title>On the Fujifilm X half</title>
      <link>https://mike.puddingtime.org/posts/2025-12-10-on-the-fujifilm-x-half/</link>
      <pubDate>Wed, 10 Dec 2025 21:52:51 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-10-on-the-fujifilm-x-half/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/c7bf9aafb5.jpg&#34; alt=&#34;A Fujifilm X half camera is resting on a wooden surface.&#34;&gt;&lt;/p&gt;
&lt;p&gt;I got caught up on the (slightly dated) chatter about the Fujifilm X half and then decided to buy one.  After a brief spin around the block, I think it is a keeper. The outrage it has generated is a little entertaining.&lt;/p&gt;
&lt;p&gt;I have been buying stuff in the Instax ecosystem for years, including the assorted mechanical cameras, the digital hybrids, and a few of the printers.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="/uploads/microblog/2025/c7bf9aafb5.jpg" alt="A Fujifilm X half camera is resting on a wooden surface."></p>
<p>I got caught up on the (slightly dated) chatter about the Fujifilm X half and then decided to buy one.  After a brief spin around the block, I think it is a keeper. The outrage it has generated is a little entertaining.</p>
<p>I have been buying stuff in the Instax ecosystem for years, including the assorted mechanical cameras, the digital hybrids, and a few of the printers.</p>
<p>On that side of the portfolio, they sort of nod over to the X series now and then,  but stay grounded in the target demographic with big, colorful, rounded designs and simple supporting apps. They take a little advantage of the low expectations of their customers by introducing odd limitations with the digital hybrids, e.g. limiting obvious sharing options just to photos you have printed out of the camera (though if you decide to bother, you can always get them off the optional micro SD card, if you knew to install one in the first place).</p>
<p><img src="/uploads/microblog/2025/975f8aa326.jpg" alt="A dimly lit street scene features a bar with neon signs, wooden picnic tables outside, and a warm, inviting glow coming from the windows."></p>
<p>I have a sweet tooth for toy and novelty cameras. There was a brief period in the early aughts where there were some genuinely fun designs, like one that was shaped like a thumb drive and came on a lanyard. I really loved the camera module on my Handspring Visor. For a brief period I had a shared photo album site set up I called &ldquo;crapshoot,&rdquo; and it was devoted to snapshots with bad early digital cameras.</p>
<p>I think because I learned photography as a supplemental skill to my small town reporting, I&rsquo;ve always had a small inferiority complex about it. I learned how to do a very functional &ldquo;will hold up well in a bad darkroom and newsprint environment&rdquo; style. When I rediscovered how much I loved taking pictures, the thing I most loved about it was learning how to get into a particular frame of mind and treat photo outings more like a kind of walking meditation. So I went straight from &ldquo;this is a task I do that involves a kind of simple craft&rdquo; to &ldquo;this relaxes me. I like what I see doing it.&rdquo;</p>
<p><img src="/uploads/microblog/2025/121dfdd3fd.jpg" alt="A well-lit gas station at night features multiple fuel pumps with signs and digital displays."></p>
<p>So I love taking pictures, but shy away from wanting or needing anyone to believe or think anything about what I&rsquo;m producing. I make things that are to my taste. I like to have a supplement to my memories. Every now and then, when there&rsquo;s an odd confluence of a story and me being around when it happens, I&rsquo;m glad to capture it, but I am not really a street photographer in that sense, even if I sort of favor urban settings.</p>
<p>Toy cameras and bad cameras make it easier to always be taking pictures. They don&rsquo;t attract a ton of attention, they don&rsquo;t permit some kinds of rigor and control, and they do things/have artifacts that lower expectations &ndash; mine and everyone else&rsquo;s.</p>
<p>Back to the X half, I really like <a href="https://www.reddit.com/r/fujiXhalf/">the small subreddit</a> for it, because you can see an array of styles and approaches. The &ldquo;light leak effect + digital timestamp&rdquo; people fully lean into the bit, and those are the features that seem most outrageous to the people who hate the X half (and probably hated Instagram filters). One commenter explicitly called out the softness of the images from the small sensor as a mark in its favor.</p>
<p>Reading assorted fora and subreddits, I see a number of people who are considering switching to the X half as their main camera, or comparing it alongside Fujifilm&rsquo;s lower end ILCs as a simpler, more approachable option. One person sold a bunch of gear, spent some of the proceeds on an X half and just pocketed the remainder.</p>
<p><img src="/uploads/microblog/2025/media.jpg" alt="Two empty blue seats on a bus with a window in the background."></p>
<p>So there are people who take the camera very seriously despite thorough documentation of its limitations. I can&rsquo;t get myself there: I want to have a camera that is in the &ldquo;nice&rdquo; tier, and that means the specs will probably start at M43, weather sealing, and a lot of control. I&rsquo;d be very unhappy with an X half as my sole camera.</p>
<p>At the same time, look at the wider context of being a person who likes to take pictures, and the hustle-ification of everything. I&rsquo;ve sold a few prints to people who&rsquo;ve asked for them because I use SmugMug to host and it&rsquo;s dead simple to turn on the cart and do literally nothing to sell a print at cost. I auctioned a few off for MetaFilter a few years ago, too. But when people ask if I want to make the whole thing into a side hustle, I&rsquo;m a little resistant: When I restarted my writing career in the late &rsquo;90s, it took a lot of the joy out of writing for me, and it took a few years after I was done doing it for a living to be able to write without feeling a certain dull resentment.</p>
<p>Where photography is concerned, I just packed up the last of a big lens and body sell-off. A lot of it was gear I acquired because I was curious about a certain style of photography I thought a given lens would benefit, or because a certain body had some feature that would get me this or that thing in the pictures I took.</p>
<p><img src="/uploads/microblog/2025/7826613cfd.jpg" alt="A person is working inside a food truck, as seen from the open side door."></p>
<p>I feel immensely relieved about being down to a single &ldquo;real&rdquo;  body and a few lenses for the kind of photography I continue to do despite all the side quests.  I have two other bodies and two lenses: One&rsquo;s my Fujifilm X-Pro3, which I feel very attached to. I kept my 23mm and 35mm Fujicrons to go with it.   I am not sure it&rsquo;s forever, but I didn&rsquo;t like the thought of parting with it. The other body is my old X-T2. I don&rsquo;t shoot with it anymore, but I have a sentimental reason to hold on to it. Some part of me wants to keep a foot partially in that world, and I&rsquo;m just going with that.</p>
<p>But again, back to the X half, which is also in the collection now: I think I understand why someone would consider it as a main camera, because it&rsquo;s a low-pressure device. There&rsquo;s only so much it can do for you, and only so many choices you can make with it outside the act of simply shooting with it. I&rsquo;ll spoil my first impressions by also saying that people have called it &ldquo;plasticky&rdquo; but it has enough heft and solidity that it feels &ldquo;real.&rdquo;</p>
<h2 id="first-impressions">First impressions</h2>
<p>Taking it out tonight to put a few dozen shots through it before I met Al for dinner, I noticed a few things:</p>
<p>It really is very small. Easily jacket pocketable. Close to &ldquo;pack of largish playing cards&rdquo; size. People keep posing it alongside an X100 and it is hard to explain, but when you take a picture of them next to each other, it somehow doesn&rsquo;t convey how small this thing looks and feels in real life.</p>
<p>It feels very solid. Dense. There&rsquo;s a sense of weight to it.</p>
<p>People complain about not being able to see the little indicator LED to the left of the viewfinder. I was able to. By default the camera is set to center focus, and I could tell when it had lock when I composed through the viewfinder.</p>
<p>Where autofocus is concerned, since it does center focus out of the box and offers no AF feedback through the OVF (besides the green lock light to the side), you can just sort of treat that as liberating and do the old &ldquo;focus and recompose&rdquo; thing with it. I once read an extensive treatise with pixel-peeping proof of why that is bad, and it was early enough in my time with autofocusing digital cameras that I sort of internalized &ldquo;compose, move the focus point; don&rsquo;t focus and recompose.&rdquo; <br>
<br>
Once I realized that the half would utterly thwart any focus perfectionism, I just muttered a cheerful &ldquo;well, fuck it&rdquo; to myself and got on with focusing and recomposing.</p>
<p>(On reflection, this was a problem I had with the Ricoh GR IIIx. I had a little OVF that went in the hotshoe, but didn&rsquo;t have center AF set up. It was annoying. And stubbornly dense on my part. Because I had way too many cameras, it was easy to just set the Ricoh aside and not try to work with it. If all my gear disappeared tomorrow and I woke up to a GRIII on the kitchen table, I&rsquo;d re-order the OVF, set it to center focus, and use that for all my street photography. I&rsquo;d bother with EVF and focus point setting for, like, portraits or things where nailing focus really matters. Not for &ldquo;f8 and be there&rdquo; sorts of deals.</p>
<p><img src="/uploads/microblog/2025/749bc247b4.jpg" alt="A person is working inside a food cart kitchen, viewed through an open door."></p>
<p>I was a little leery about the fact that it is all touch/slide control. It&rsquo;s perfectly responsive. Much better than the old XF-10. The screen(s) are readable despite being so small. Enough to compose with and quickly review. You can pinch/spread to zoom in and out of an image.</p>
<p>There&rsquo;s very little to control. You have a grain setting, an exposure control knob, an aperture ring, a simple Auto ISO function, a few autofocus modes, and face detection.  There are no tone or saturation settings. You can manage white balance. You get a bunch of film simulations and a bunch of special effects.  I think the color may be goosed a little but I can&rsquo;t be sure.</p>
<p>I think there&rsquo;s enough there to make nice jpegs. Not enough to go into a super deep rabbit hole.</p>
<p>I haven&rsquo;t yet done a &ldquo;roll&rdquo; of film in the film mode.</p>
<p>The app pairs with the camera pretty reliably. Downloading pictures from camera to phone is as slow here as it is ever with any app/camera combo, so that&rsquo;s what a USB-C SD card adapter is for. I did a firmware update with the app when I got it home and it was painless.</p>
<h2 id="now-what">Now what?</h2>
<p>Well, I have this thing. It was $200 off, which made it pretty hard to ignore. I am not going to return it. I don&rsquo;t even have a twinge of remorse. I sold off so much gear that this was a small percentage of the proceeds, and it truly is what I <em>wanted</em> the Instax hybrids to do, meeting me on the X series side of the product line while being simple and fun. So, Fujifilm granted me my wish and I&rsquo;m gonna go with it.</p>
<p>I don&rsquo;t imagine it to be a travel camera, exactly. That&rsquo;s the OM-3. But it&rsquo;s a fine downtown camera, a running errands camera, karaoke night camera, etc. etc. Too small to not just bring along where I might balk with the OM-3. Just toss it in a sling or stuff it in a pocket and know I won&rsquo;t have to suffer the indignity of taking pictures with my phone. Seems okay.</p>
<p><img src="/uploads/microblog/2025/d4cfd8f3f2.jpg" alt="A vending machine is filled with various bottled waters and cans of beverages, including different types of soda."></p>
]]></content:encoded>
    </item>
    <item>
      <title>New office art.</title>
      <link>https://mike.puddingtime.org/posts/2025-12-09-new-office-art/</link>
      <pubDate>Tue, 09 Dec 2025 23:15:44 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-09-new-office-art/</guid>
      <description>&lt;p&gt;New office art.&lt;/p&gt;
&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/a62f8294c1.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;A framed poster featuring a stylized guillotine design titled GILJOTIN - Assembly Required hangs above a cluttered shelf with books, figurines, and artwork.&#34;&gt;</description>
      <content:encoded><![CDATA[<p>New office art.</p>
<img src="/uploads/microblog/2025/a62f8294c1.jpg" width="450" height="600" alt="A framed poster featuring a stylized guillotine design titled GILJOTIN - Assembly Required hangs above a cluttered shelf with books, figurines, and artwork.">
]]></content:encoded>
    </item>
    <item>
      <title>Windfall (Son Vault)</title>
      <link>https://mike.puddingtime.org/posts/2025-12-09-windfall-son-vault/</link>
      <pubDate>Tue, 09 Dec 2025 23:08:05 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-09-windfall-son-vault/</guid>
      <description>&lt;p&gt;I think the correct progressive position on the Uncle Tupelo schism is pro-Wilco. Whatever, but it freed Farrar.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I think the correct progressive position on the Uncle Tupelo schism is pro-Wilco. Whatever, but it freed Farrar.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Last day of Puppet in the Pearl, 2015</title>
      <link>https://mike.puddingtime.org/posts/2025-12-09-last-day-of-puppet-in/</link>
      <pubDate>Tue, 09 Dec 2025 20:09:39 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-09-last-day-of-puppet-in/</guid>
      <description>&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/3d17ad3294.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;The last day of Puppet in its Pearl District office, October 2015&#34;&gt;</description>
      <content:encoded><![CDATA[<img src="/uploads/microblog/2025/3d17ad3294.jpg" width="600" height="450" alt="The last day of Puppet in its Pearl District office, October 2015">
]]></content:encoded>
    </item>
    <item>
      <title>The 19, 14, and 72 to my extended neighborhood </title>
      <link>https://mike.puddingtime.org/posts/2025-12-08-the-and-to-my-extended/</link>
      <pubDate>Mon, 08 Dec 2025 21:59:10 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-08-the-and-to-my-extended/</guid>
      <description>&lt;p&gt;Lents is a funny neighborhood. I think the problems posed by the Woodstock/Foster/i205 couplet will permanently depress the Lents Town Center&amp;rsquo;s full potential. With as many apartments as have gone in you&amp;rsquo;d think it&amp;rsquo;d support a small market, but it&amp;rsquo;s a tough neighborhood to walk, split up by the couplet and the bypass. So for a lot of day-to-day stuff in our corner of it you can either head over to Woodstock, down to Johnson Creek or up to Foster.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Lents is a funny neighborhood. I think the problems posed by the Woodstock/Foster/i205 couplet will permanently depress the Lents Town Center&rsquo;s full potential. With as many apartments as have gone in you&rsquo;d think it&rsquo;d support a small market, but it&rsquo;s a tough neighborhood to walk, split up by the couplet and the bypass. So for a lot of day-to-day stuff in our corner of it you can either head over to Woodstock, down to Johnson Creek or up to Foster.</p>
<p>The heart of the Woodstock neighborhood is about 40 blocks—2 miles—away. Over three seasons it&rsquo;s a pretty nice walk, in the winter it&rsquo;s not great. It&rsquo;s okay by bike, but the main drag has really aggro drivers, and the unimproved roadways in that neighborhood mean you can&rsquo;t really just assume a safe grid to evade the arterials. In the winter, the aggro drivers, dark conditions, and narrow areas where bikes and cars have to squeeze together make it pretty daunting.</p>
<p>Also, forget taking a car. Parking is not actually too bad—nobody seems to be policing the giant Safeway parking lot—but it&rsquo;s really not a fun neighborhood to drive through. Lots of people on their horns, sorta slow going.</p>
<p>There is, on the other hand, the 19 bus line. The nearest stop is a five block walk, and there&rsquo;s a shelter. When I need to run an errand into Woodstock I grab <a href="https://transitapp.com">the Transit app</a> and figure out when I need to go out the door. The ride itself is maybe 10 minutes.  If I time my errands right I can probably hop off the bus, do what I need to do, and cross the street to catch the bus headed home with time to spare. Today I headed out the door at 3:15, ran through the UPS store to ship something, and had a ten minute wait for the return ride. I was home by a bit after 4.</p>
<p>Woodstock is a nice neighborhood to have this easy a connection to: There are two grocery stores, a hardware store, a bakery, a legit butcher, bars, restaurants, a newish food cart pod. With a big Banjo Brothers backpack I can haul a lot of stuff.</p>
<p>It&rsquo;s pretty easy to knock off for the day, hop the bus to Woodstock, grab groceries for dinner, and be most of the way through prep before Al gets home.</p>
<p>There&rsquo;s also the 14, which runs up Foster. It&rsquo;s a bit longer walk to catch it, but also a quick ride to the good stuff on Foster in the 50s and 60s: Bread and Roses Market, Bar Carlo, Bruno&rsquo;s, and a new kitchen consignment shop, among lots of other stuff. Also fine for walks or bike rides in nice weather.  Also not somewhere I like to drive for as short a distance as it is.</p>
<p>And there&rsquo;s the 72, which goes up and down 82nd. It&rsquo;s a busy line, but the nearest stop is five or six minutes away, and it&rsquo;s another quick ride down to the Johnson Creek shops, where there&rsquo;s a Trader Joe&rsquo;s, our pharmacy, a FedEx drop, and a few other things. Biking around there is not great. Walking is atrocious. Taking a car is frustrating. The bus is pretty nice. <a href="https://reddit.com/r/portland">/r/Portland</a> lives in superstitious dread of the 72 because there are a lot of poor people on it.</p>
<p>Anyhow, it took me a long time to understand the short-range benefits of the bus service. It just seemed easier to hop on a bike or plan for a leisurely walk. Now that winter is here, though, and it&rsquo;s dark and wet, I really like running errands using the bus, especially into Woodstock. There&rsquo;s a short, blustery walk, a wait under a shelter, then a quick ride. No worrying about getting run over or getting soaked.</p>
<p>The 14 &amp; 19 will also go downtown, eventually. In terms of total trip time, they&rsquo;re about as fast as the Green line (I have a longer walk to get to the stop),  slower than a determined e-bike ride, and much slower than a car, but you can have that second Old Fashioned at the Tear Drop with any of the TriMet options. I tend to prefer the Max for downtown trips because it&rsquo;s quieter and smoother.</p>
<p>Anyhow, tonight I signed up for a bunch of TriMet newsletters. I&rsquo;m a fan of our transit system. It felt sort of prosocial.</p>
<p><img src="/uploads/microblog/2025/610d148078.jpg" width="450" height="600" alt="A nighttime scene in a city features a small food truck with a person inside, surrounded by dimly lit buildings and string lights."><img src="/uploads/microblog/2025/8ef72d2a84.jpg" width="600" height="400" alt="A small market storefront is dimly lit under streetlights at night, with various items visible through its windows."><img src="/uploads/microblog/2025/81f01ebb59.jpg" width="600" height="400" alt="A dimly lit bus interior is illuminated by red lights with empty seats and handrails."><img src="/uploads/microblog/2025/5c491ab1b9.jpg" width="600" height="400" alt="A pigeon is drinking water from a small puddle on a train platform near the tracks."></p>
]]></content:encoded>
    </item>
    <item>
      <title>&gt; &#34;This is no time to be driven by ideological rigidity ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-08-this-is-no-time-to/</link>
      <pubDate>Mon, 08 Dec 2025 20:47:34 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-08-this-is-no-time-to/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This is no time to be driven by ideological rigidity given the current economic and political climate.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Signed,&lt;br&gt;
&lt;a href=&#34;https://bikeportland.org/2025/12/08/61-businesses-sign-onto-letter-opposing-full-bat-lanes-on-82nd-avenue-398486&#34;&gt;People driven by ideological rigidity&lt;/a&gt; who just don&amp;rsquo;t realize it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>&ldquo;This is no time to be driven by ideological rigidity given the current economic and political climate.”</p>
</blockquote>
<p>Signed,<br>
<a href="https://bikeportland.org/2025/12/08/61-businesses-sign-onto-letter-opposing-full-bat-lanes-on-82nd-avenue-398486">People driven by ideological rigidity</a> who just don&rsquo;t realize it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>... meanwhile, I&#39;ve learned that the fastest way to do ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-08-meanwhile-ive-learned-that-the/</link>
      <pubDate>Mon, 08 Dec 2025 16:06:37 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-08-meanwhile-ive-learned-that-the/</guid>
      <description>&lt;p&gt;&amp;hellip; meanwhile, I&amp;rsquo;ve learned that the fastest way to do intra-family cash transfers is to use my bank&amp;rsquo;s SMS service, which still works: &lt;code&gt;t $n ACCT1 ACCT2&lt;/code&gt;.  I even made a Shortcut out of it to help pick which account to which and for how much. It&amp;rsquo;s way faster than the website or the bank&amp;rsquo;s  app.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&hellip; meanwhile, I&rsquo;ve learned that the fastest way to do intra-family cash transfers is to use my bank&rsquo;s SMS service, which still works: <code>t $n ACCT1 ACCT2</code>.  I even made a Shortcut out of it to help pick which account to which and for how much. It&rsquo;s way faster than the website or the bank&rsquo;s  app.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I haven&#39;t thought of OLPC in a long while. Back when it was ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-07-i-havent-thought-of-olpc/</link>
      <pubDate>Sun, 07 Dec 2025 19:30:32 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-07-i-havent-thought-of-olpc/</guid>
      <description>&lt;p&gt;I haven&amp;rsquo;t thought of OLPC in a long while. Back when it was a thing I went on a journey, from sorta maudlin and hopeful to crabby and resistant. Being reminded of it now &amp;hellip; curdled in the same way I remember the Obama era now.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nber.org/papers/w34495&#34;&gt;www.nber.org/papers/w3&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I haven&rsquo;t thought of OLPC in a long while. Back when it was a thing I went on a journey, from sorta maudlin and hopeful to crabby and resistant. Being reminded of it now &hellip; curdled in the same way I remember the Obama era now.</p>
<p><a href="https://www.nber.org/papers/w34495">www.nber.org/papers/w3&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, let&#39;s see how this Apple Music embed plugin works. ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-07-well-lets-see-how-this/</link>
      <pubDate>Sun, 07 Dec 2025 16:21:29 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-07-well-lets-see-how-this/</guid>
      <description>&lt;p&gt;Well, let&amp;rsquo;s see how this Apple Music embed plugin works.&lt;/p&gt;
&lt;p&gt;#highonfire #metalmondayonsunday&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, let&rsquo;s see how this Apple Music embed plugin works.</p>
<p>#highonfire #metalmondayonsunday</p>
]]></content:encoded>
    </item>
    <item>
      <title>My periodic Oregonian complaint, but probably the last for a while</title>
      <link>https://mike.puddingtime.org/posts/2025-12-07-my-periodic-oregonian-complaint-but/</link>
      <pubDate>Sun, 07 Dec 2025 16:14:20 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-07-my-periodic-oregonian-complaint-but/</guid>
      <description>&lt;p&gt;As part of my account cleanup and general retrenchment, I finally canceled my &lt;a href=&#34;https://feedly.com&#34;&gt;feedly&lt;/a&gt; subscription and moved the RSS feeds I follow into &lt;a href=&#34;https://www.goldenhillsoftware.com/unread/&#34;&gt;Unread&lt;/a&gt;, which provides its own syncing back end across Mac, iOS, and iPadOS. Great.&lt;/p&gt;
&lt;p&gt;In the process of canceling my feedly subscription it reminded me I have over 30 feed filters enabled. Hm.&lt;/p&gt;
&lt;p&gt;Oh, right: &lt;a href=&#34;https://oregonlive.com&#34;&gt;The Oregonian&lt;/a&gt;, my hometown paper. I pay for a subscription. The website itself borders on unusable, and the RSS feed is a nightmare. There&amp;rsquo;s only one. At some point they had feeds by section—there&amp;rsquo;s evidence of that in their outdated help documentation—but no more. You just get everything:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>As part of my account cleanup and general retrenchment, I finally canceled my <a href="https://feedly.com">feedly</a> subscription and moved the RSS feeds I follow into <a href="https://www.goldenhillsoftware.com/unread/">Unread</a>, which provides its own syncing back end across Mac, iOS, and iPadOS. Great.</p>
<p>In the process of canceling my feedly subscription it reminded me I have over 30 feed filters enabled. Hm.</p>
<p>Oh, right: <a href="https://oregonlive.com">The Oregonian</a>, my hometown paper. I pay for a subscription. The website itself borders on unusable, and the RSS feed is a nightmare. There&rsquo;s only one. At some point they had feeds by section—there&rsquo;s evidence of that in their outdated help documentation—but no more. You just get everything:</p>
<ul>
<li>Astrology</li>
<li>All the advice columns (not sure how many, maybe four or five?)</li>
<li>&ldquo;Most expensive house in Lake Oswego this week&rdquo;</li>
<li>Online sports book promotions</li>
</ul>
<p>&hellip; plus the actual <em>news</em> news, but good luck finding the kernels of corn in the pile.</p>
<p>And if you do manage to spot a news article you&rsquo;d like to read, their paywall has the memory of a goldfish and godawful session handling: You&rsquo;ll land on your story, get directed to the paywall, go through the login, then get kicked out to somewhere besides the story. It&rsquo;s really, really bad.</p>
<p>I wrote the paper&rsquo;s editor about this a while back, before she retired. As you might expect, the online publishing division doesn&rsquo;t answer to the editorial division, and there was also the same &ldquo;that stuff gets views&rdquo; rationale I remember from my online media days, when we thought &ldquo;views&rdquo; was the prime metric.</p>
<p>Last month as I was cleaning up subscriptions Apple informed me I could get News+ added to my existing Apple bundle and end up paying less per month than without it, so I went along. The Oregonian is one of the publications in the News+ package, so I follow it (where they still dump a lot of junk, but not quite as much). And if you just add Oregon and Portland as topical areas to follow, the Oregonian gets pulled in to that. So I just dropped the RSS feed from my local folder (but still have WWeek, because they don&rsquo;t show up in Apple News).</p>
<p>Some people are, like, &ldquo;drop that centrist rag already &hellip; the Mercury and Willy Week are all you really need.&rdquo;</p>
<p>Honestly, kindly, gently: lol.</p>
<p>I&rsquo;ll always read their coverage—media literacy is about understanding and balancing a diversity of inputs—but they&rsquo;re just not enough, and their reporting can be weirdly incurious if they can&rsquo;t find a salacious or spicy angle.  The Oregonian has its own biases and general slant, but it provides more coverage, and more diverse coverage. It&rsquo;s essential.</p>
<p>Anyhow, I am guessing the Oregonian gets a lot more money from my paid, direct subscription than they do whatever revenue sharing Apple gives them for a content license, but their website is atrocious, their RSS feeds are unusable, and their editorial staff is held hostage by a web team operating on 2008 rules.</p>
<p>I wish they&rsquo;d get nonprofit status so I could just budget them under &ldquo;charity.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>... and Structured is okay, too. </title>
      <link>https://mike.puddingtime.org/posts/2025-12-07-and-structured-is-okay-too/</link>
      <pubDate>Sun, 07 Dec 2025 12:05:51 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-07-and-structured-is-okay-too/</guid>
      <description>&lt;p&gt;I took a look at &lt;a href=&#34;https://structured.app&#34;&gt;Structured&lt;/a&gt; when it first showed up a while back.  Since it prefers to work within the Apple ecosystem I couldn&amp;rsquo;t use it for work because we&amp;rsquo;re a Google shop.  Since then I&amp;rsquo;ve started using the native-ish Apple internet accounts -&amp;gt; Apple ecosystem integrations, which provide an indirect Google integration.  For apps that support the stuff Apple ships, that works pretty well.&lt;/p&gt;
&lt;p&gt;In the case of anything to do with a calendar, where Google Calendar is providing the back end, there&amp;rsquo;s going to be a certain amount of split living if you don&amp;rsquo;t want to just go live in Google Calendar&amp;rsquo;s web and mobile apps: Any video conferencing integrations you&amp;rsquo;ve got will require a manual tweak for events created outside Google&amp;rsquo;s web or mobile apps, and I&amp;rsquo;d argue Google&amp;rsquo;s own availability widget is better because it is more transparent.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I took a look at <a href="https://structured.app">Structured</a> when it first showed up a while back.  Since it prefers to work within the Apple ecosystem I couldn&rsquo;t use it for work because we&rsquo;re a Google shop.  Since then I&rsquo;ve started using the native-ish Apple internet accounts -&gt; Apple ecosystem integrations, which provide an indirect Google integration.  For apps that support the stuff Apple ships, that works pretty well.</p>
<p>In the case of anything to do with a calendar, where Google Calendar is providing the back end, there&rsquo;s going to be a certain amount of split living if you don&rsquo;t want to just go live in Google Calendar&rsquo;s web and mobile apps: Any video conferencing integrations you&rsquo;ve got will require a manual tweak for events created outside Google&rsquo;s web or mobile apps, and I&rsquo;d argue Google&rsquo;s own availability widget is better because it is more transparent.</p>
<p>But at the boundary of working <em>with</em> your calendar  as opposed to working <em>on</em> your calendar, Apple&rsquo;s stuff is fine. You can tell where stuff is scheduled, you can use the iOS and macOS widgets and alerts, you can get the benefits of Siri and Apple Intelligence integrations, etc.</p>
<p>Structured is a timeblocking tool. It shows you your Reminders, it shows you your calendars, and you can drag reminders into a list of your appointments for the day where they fit. It offers a few extra things, like assigning an energy level to each item so you can keep track of how sustainable your day&rsquo;s plan is.</p>
<p>Yep, there are other ways to time block. Reminders and Calendar integrate with drag-and-drop now, so you can literally drag a Reminder out of a list and into your calendar to schedule it if you like. Structured refines the idea a little:</p>
<p>To start, you can configure which calendars and Reminders lists it can work with.  I&rsquo;ve got some &ldquo;to-read,&rdquo; &ldquo;to check out,&rdquo; etc. Reminders I don&rsquo;t care to ever time block, so they stay out. I&rsquo;ve got a few other things that are super granular, and generally opportunistic, so they stay out. I leave in Reminder lists for broad areas of concern: Each of the three functions I direct at work, a few lists for broad initiatives or concerns, and a couple of domestic sphere things.</p>
<p>In the main Structured screen, you get a day view that shows all the scheduled blocks from your calendars.</p>
<ul>
<li>Any Reminders tasks with a scheduled date but no time appear at the top of the day. They&rsquo;re candidates for time blocking that you must have previously decided needed to happen on or by today.</li>
<li>Any Reminders tasks with a scheduled date and time appear blocked into the day&rsquo;s schedule.</li>
<li>You can view any Reminders tasks without a date/time by opening an &ldquo;Inbox&rdquo; sidebar.</li>
</ul>
<p>The Reminders from the top of the list and the Inbox area can be dragged in to the day&rsquo;s schedule. That&rsquo;s the core idea.</p>
<p>For instance, just now as I was sitting here typing, I couldn&rsquo;t unsee a Slack notification from someone working over the weekend. I made a Reminder in my inbox, gave it a due date of tomorrow and kept moving. Tomorrow morning, when I triage and block my day, it&rsquo;ll be in the list at the top of the day ready to be dropped in and time blocked.</p>
<p>For $15/year to unlock access to your calendars and Reminders instead of just using its internal appointment and calendar model, that seems fine: It&rsquo;s an overlay that lets you manage your time in a certain style.</p>
<p>There are a few other things that are potentially handy:</p>
<p>First, you can add subtasks to a calendar item. They&rsquo;re visible only to you and they don&rsquo;t turn up in Structured&rsquo;s task model. GTD people will probably grind their teeth at the idea of having another inbox, and that&rsquo;s reasonable. I think these are probably useful less as a whole unit of work and more as ticklers or reminders. The immediate idea I had for them was to add them to 1:1s and other meetings where I need to check in on something. There are other ways to do that.</p>
<p>Second, there&rsquo;s an AI assistant (using Apple Intelligence) that helps with subtasking a given item. I gave it a try on a few things where I had a loose list of next actions copied into the task note from somewhere else, and it did okay picking out the work items and making subtasks out of them with the prompt &ldquo;subtask based on the notes.&rdquo;</p>
<p>Third, there&rsquo;s a &ldquo;Replan&rdquo; feature that lets you visit the purgatory of tasks that have passed their due date and put them back into circulation (either by turning them back into Inbox candidates or giving them a new date).</p>
<p>Oh, it also provides a web app with a Pro ($15/year) subscription. I am trying it out on my iPad Pro with a keyboard (more or less my laptop replacement) so I haven&rsquo;t used that much.</p>
<p>There&rsquo;s also one glaring oversight: No search. That&rsquo;s on their roadmap. If you want to find things, you need to either pick through future dates or go back to Reminders and search from there. I wish it had search, and it <em>should</em> have search, but the app didn&rsquo;t start life as a task manager, it started life as a time blocker.</p>
<p>Structured is interesting because it can break either way in terms of how much of your task management life it takes over:</p>
<p>Because it starts from its own internal task and planning model, you could use it as your sole todo app, understanding that it won&rsquo;t lend a lot of support to your conception of task containers, whether those are &ldquo;Areas,&rdquo; &ldquo;Projects,&rdquo; &ldquo;Lists,&rdquo; or whatever. If you have a bunch of plates spinning in disparate areas, I don&rsquo;t think it&rsquo;d be a good desert island tool, because you&rsquo;d probably end up shimming in some kind of meta layer that would end up hiding work or making it fussy to manage.</p>
<p>(There is, btw,  <a href="https://feedback.structured.app/en/p/inbox-sortfilter">a ticket in their roadmap for filtering, folders, etc.</a>,  and the comments on that thread tell you all you need to know about how many ideas people have and what a recipe for UI messiness containers (projects, areas, whatever) could be. Good luck, Structured team.)</p>
<p>As an augment to Reminders, it sort of shrinks in ambition but gains in enabling easy timeblocking the work you&rsquo;re deeply organizing elsewhere. For instance, my Reminders set up has several groups:</p>
<ul>
<li>Work</li>
<li>Interesting Stuff</li>
<li>Home</li>
</ul>
<p>Within those groups you might see lists like:</p>
<ul>
<li>Enterprise Security</li>
<li>Application Management</li>
<li>Business Operations Support</li>
<li>donation roundup</li>
<li>administrivia</li>
<li>shows to watch, things to read, music to try</li>
<li>the packing list for some trip</li>
</ul>
<p>The groups provide high-level segregation of the modes I operate in. The lists are either very tactical enumeration of a bunch of little things to get a household project done, or just work items that fall under a broad area of concern.  Because I like my &ldquo;big dumb list,&rdquo; the Reminders &ldquo;Scheduled&rdquo; filter lets me see everything I put a date on, and the &ldquo;All&rdquo; filter just shows all of it by list. That more or less gives me the best of both worlds: Filtering to preserve attentional resources, and broad visibility to reassure myself nothing is hiding somewhere.</p>
<p>Structured just provides a sort of last mile for turning those things into action within the constraints meetings and 1:1s introduce into a given day.</p>
<p>Yesterday <a href="https://pdxmph.puddingtime.org/2025/12/06/goodtask-seems-to-make-reminders.html">I wrote up GoodTask </a>, which is more of a Reminders UI enhancement skin than a time blocker. It has some time blocking capabilities, but nothing quite this refined for timeblocking specifically. It&rsquo;s more like a way to wedge a lot of OmniFocus&rsquo;s Perspectives into the Reminders database while providing some ways to add metadata that are less fussy than Reminders itself.  You could use the two together and never even look at Reminders itself if you wanted.</p>
<h2 id="ecosystem-digression">Ecosystem digression</h2>
<p>Because I try very hard to keep third-party apps out of my life, Structured and GoodTask are interesting edge cases. Because they&rsquo;re inexpensive and don&rsquo;t mess with the underlying data in Reminders and my calendars, I&rsquo;m okay with them. They&rsquo;re just augments.  If they stopped working tomorrow, I&rsquo;d be left with the basic tools again, and still on a footing of having my data and being able to work with it in tools that are good enough. They&rsquo;re sort of like Greasemonkey scripts I can rent cheaply, just for apps.</p>
<p>I could choose a second order of rabbit-holing about whether or not the Apple ecosystem is forever. I&rsquo;ve decided that if the Apple ecosystem ever ends up not being forever, some change in life circumstances must have made any todos I was tracking irrelevant to the current moment.</p>
<p>Okay. Enough. The problem I&rsquo;ve been thinking about this weekend is &ldquo;where to keep things to do.&rdquo; I&rsquo;ve made a choice (Reminders) and have a couple of tools to augment it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>GoodTask seems to make Reminders viable for me</title>
      <link>https://mike.puddingtime.org/posts/2025-12-06-goodtask-seems-to-make-reminders/</link>
      <pubDate>Sat, 06 Dec 2025 12:09:21 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-06-goodtask-seems-to-make-reminders/</guid>
      <description>&lt;p&gt;I found &lt;a href=&#34;https://goodtaskapp.com&#34;&gt;GoodTask&lt;/a&gt; today. Or re-found it, anyhow,  because the App Store had the little cloud/down-arrow icon that told me I&amp;rsquo;ve downloaded it before at some point. It&amp;rsquo;s pretty much a skin for Reminders, but it&amp;rsquo;s a skin that gives me stuff I&amp;rsquo;d otherwise pay a lot for OmniFocus to do that instead costs $9.99 once, and it includes some affordances that make some of Reminders&amp;rsquo; more fussy UI gaps less fussy.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I found <a href="https://goodtaskapp.com">GoodTask</a> today. Or re-found it, anyhow,  because the App Store had the little cloud/down-arrow icon that told me I&rsquo;ve downloaded it before at some point. It&rsquo;s pretty much a skin for Reminders, but it&rsquo;s a skin that gives me stuff I&rsquo;d otherwise pay a lot for OmniFocus to do that instead costs $9.99 once, and it includes some affordances that make some of Reminders&rsquo; more fussy UI gaps less fussy.</p>
<p>It promises &ldquo;From Simple Checklists to Complex Project Management,&rdquo; but I don&rsquo;t really want a complex project management tool and need just a bit more than &ldquo;simple checklists&rdquo; and just a few more smart list options than Reminders provides.</p>
<p>Doing an inventory today, I realized how much I&rsquo;ve allowed the language of projects to slip into my mental model. I don&rsquo;t have &ldquo;projects,&rdquo; I have areas that occasionally involve things that have a couple of other things nested in them.  When something gets so complex that it&rsquo;s a project, there&rsquo;s a staff program manager sitting right there who can help with wrangling the work streams.</p>
<p>GoodTask includes a Smart List feature that works close enough to OmniFocus&rsquo;s Perspectives for my purposes: It took about two minutes to make a <a href="https://puddingtime.org/omnifocus-through-a-new-lens">Big Dumb List</a> of date-sorted tasks in my Work group. If all hell broke loose and GoodTask stopped working tomorrow, it&rsquo;d sort of suck but it separates its organizational metadata from Reminders&rsquo; enough that the real fallout would be &ldquo;well, I need to drag some of these groups I made into new Groups in Reminders.&rdquo;</p>
<p>It also lets you tell it to leave some lists in Reminders out of its reckoning. I have a few shoebox lists that just gather recommendations, items of passing curiosity, to-read, to-watch, etc. I don&rsquo;t want them in a tool I&rsquo;m using to manage things I have to actually do, so GoodTask hides them for me.</p>
<p>This is all coming after a reorg I did with my group at work. I&rsquo;ve got historical reasons to be a little averse to reorgs, but this was one of those times where I was watching managers tripping over each other to get capacity for their projects, unpleasant &ldquo;everybody in the org is at the same meeting&rdquo; experiences, and a realization two-and-a-half years into this place how few professional development opportunities we&rsquo;d made for people.  So we spent a month as a management team, talking about where we wanted to go and what we wanted to do, and how we could think beyond &ldquo;this team is full of people who do this kind of work, and that team is full of people who do that kind of work.&rdquo;</p>
<p>And for me, I felt mired in the day-to-day of the managers under me, trying to sort out what went where and playing a glue role all the time to hold us together at one level, with no room to figure out new levels.</p>
<p>Shifting from a very rigidly functional structure to a delivery-oriented structure is creating some definite short-term pain. We inventoried all the things we&rsquo;re doing and decided that we could allow one particular kind of work to be much more distributed in order to concentrate management attention on other kinds. That distributed work needs some supporting rituals and routines to keep on track.</p>
<p>But for all the short-term tradeoff pain we&rsquo;re dealing with, I came out of the planning cycle for next year with sign-off to build a new program and a new governance structure, and with a mandate to add a role that seemed out of the question a month ago. I <em>have</em> to refine my model of what I think work is.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, the Activation Lock thing resolved easily overnight ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-05-well-the-activation-lock-thing/</link>
      <pubDate>Fri, 05 Dec 2025 10:23:05 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-05-well-the-activation-lock-thing/</guid>
      <description>&lt;p&gt;Well, the Activation Lock thing resolved easily overnight and I&amp;rsquo;ve got this Mac mini M4 Pro in place now.  Now I need to decide how bananas minimalist I want to get with my desk.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/84b3947bb4.jpg&#34; width=&#34;600&#34; height=&#34;450&#34; alt=&#34;a Mac mini M4 Pro on a brown desk mat&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/db08d31fc8.jpg&#34; width=&#34;600&#34; height=&#34;600&#34; alt=&#34;Rear view of an Apple Studio Display with a Mac mini holder on the stand. &#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, the Activation Lock thing resolved easily overnight and I&rsquo;ve got this Mac mini M4 Pro in place now.  Now I need to decide how bananas minimalist I want to get with my desk.</p>
<p><img src="/uploads/microblog/2025/84b3947bb4.jpg" width="600" height="450" alt="a Mac mini M4 Pro on a brown desk mat"><img src="/uploads/microblog/2025/db08d31fc8.jpg" width="600" height="600" alt="Rear view of an Apple Studio Display with a Mac mini holder on the stand. "></p>
]]></content:encoded>
    </item>
    <item>
      <title>I changed my iCloud account address after I bought a Mac ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-04-i-changed-my-icloud-account/</link>
      <pubDate>Thu, 04 Dec 2025 19:37:03 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-04-i-changed-my-icloud-account/</guid>
      <description>&lt;p&gt;I changed my iCloud account address after I bought a Mac Studio. I was just now trying to deactivate and wipe the it for trade-in &amp;amp; the helper app won&amp;rsquo;t complete without the password for a non-existent account. Ticket in to remove the Activation Lock, but I had to jump through hoops to file it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I changed my iCloud account address after I bought a Mac Studio. I was just now trying to deactivate and wipe the it for trade-in &amp; the helper app won&rsquo;t complete without the password for a non-existent account. Ticket in to remove the Activation Lock, but I had to jump through hoops to file it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;The &#39;Mad Men&#39; in 4K on HBO Max Debacle&#34; I thought this was ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-04-the-mad-men-in-k/</link>
      <pubDate>Thu, 04 Dec 2025 18:23:04 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-04-the-mad-men-in-k/</guid>
      <description>&lt;p&gt;&amp;ldquo;The &amp;lsquo;Mad Men&amp;rsquo; in 4K on HBO Max Debacle&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I thought this was gonna be, like, when &amp;ldquo;typography nerds&amp;rdquo; complain about kerning or something.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://fxrant.blogspot.com/2025/12/the-mad-men-in-4k-on-hbo-max-debacle.html&#34;&gt;fxrant.blogspot.com/2025/12/t&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&ldquo;The &lsquo;Mad Men&rsquo; in 4K on HBO Max Debacle&rdquo;</p>
<p>I thought this was gonna be, like, when &ldquo;typography nerds&rdquo; complain about kerning or something.</p>
<p><a href="http://fxrant.blogspot.com/2025/12/the-mad-men-in-4k-on-hbo-max-debacle.html">fxrant.blogspot.com/2025/12/t&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Alison just reminded me YOB is coming up! What is YOB? YOB ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-04-alison-just-reminded-me-yob/</link>
      <pubDate>Thu, 04 Dec 2025 15:18:25 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-04-alison-just-reminded-me-yob/</guid>
      <description>&lt;p&gt;Alison just reminded me YOB is coming up!&lt;/p&gt;
&lt;p&gt;What is YOB? YOB is love.&lt;/p&gt;
&lt;p&gt;(And Buddhist doom metal)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Uif5XmYF7_k&#34;&gt;www.youtube.com/watch&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Alison just reminded me YOB is coming up!</p>
<p>What is YOB? YOB is love.</p>
<p>(And Buddhist doom metal)</p>
<p><a href="https://www.youtube.com/watch?v=Uif5XmYF7_k">www.youtube.com/watch</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>I just turned Center Stage on with a new machine. A ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-04-i-just-turned-center-stage/</link>
      <pubDate>Thu, 04 Dec 2025 15:09:37 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-04-i-just-turned-center-stage/</guid>
      <description>&lt;p&gt;I just turned Center Stage on with a new machine. A coworker said it was giving her motion sickness, which was weird because I&amp;rsquo;ve been using it around her for a week. Turns out the new machine was still Sequoia. Upgraded to Tahoe and it calmed down. Less &amp;ldquo;rocking boat&amp;rdquo; effect.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I just turned Center Stage on with a new machine. A coworker said it was giving her motion sickness, which was weird because I&rsquo;ve been using it around her for a week. Turns out the new machine was still Sequoia. Upgraded to Tahoe and it calmed down. Less &ldquo;rocking boat&rdquo; effect.</p>
]]></content:encoded>
    </item>
    <item>
      <title>If I had the patience to do this I probably would, but I ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-04-if-i-had-the-patience/</link>
      <pubDate>Thu, 04 Dec 2025 08:43:57 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-04-if-i-had-the-patience/</guid>
      <description>&lt;p&gt;If I had the patience to do this I probably would, but I &amp;ldquo;sacrificed&amp;rdquo; a Magic Keyboard using industrial strength hook-n-loop tape on the underside of my desk. I&amp;rsquo;d pay for a standalone device, though.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.jeffgeerling.com/blog/2025/why-doesnt-apple-make-standalone-touch-id&#34;&gt;www.jeffgeerling.com/blog/2025&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>If I had the patience to do this I probably would, but I &ldquo;sacrificed&rdquo; a Magic Keyboard using industrial strength hook-n-loop tape on the underside of my desk. I&rsquo;d pay for a standalone device, though.</p>
<p><a href="https://www.jeffgeerling.com/blog/2025/why-doesnt-apple-make-standalone-touch-id">www.jeffgeerling.com/blog/2025&hellip;</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>This is/was my favorite todo app, meaning it most closely ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-03-this-iswas-my-favorite-todo/</link>
      <pubDate>Wed, 03 Dec 2025 13:30:50 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-03-this-iswas-my-favorite-todo/</guid>
      <description>&lt;p&gt;This is/was my favorite todo app, meaning it most closely mapped to my brain and had as much stuff in it as I wanted and no more:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://puddingtime.org/denote-tasks&#34;&gt;puddingtime.org/denote-ta&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using it on iPad would entail hosting it where I could get at it from a mosh or ssh client.&lt;/p&gt;
&lt;p&gt;Sounds unwell.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This is/was my favorite todo app, meaning it most closely mapped to my brain and had as much stuff in it as I wanted and no more:</p>
<p><a href="https://puddingtime.org/denote-tasks">puddingtime.org/denote-ta&hellip;</a></p>
<p>Using it on iPad would entail hosting it where I could get at it from a mosh or ssh client.</p>
<p>Sounds unwell.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Snap. I got my way on a couple of things and suddenly have ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-02-snap-i-got-my-way/</link>
      <pubDate>Tue, 02 Dec 2025 18:51:33 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-02-snap-i-got-my-way/</guid>
      <description>&lt;p&gt;Snap. I got my way on a couple of things and suddenly have a backlog of stuff I deferred while I sat around waiting to see if I&amp;rsquo;d win +  new things. Apple Reminders is not going to cut it. Took a look &amp;amp; the OmniFocus sub I canceled runs out tomorrow. Gotta dig out my Things/OF bake-off notes.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Snap. I got my way on a couple of things and suddenly have a backlog of stuff I deferred while I sat around waiting to see if I&rsquo;d win +  new things. Apple Reminders is not going to cut it. Took a look &amp; the OmniFocus sub I canceled runs out tomorrow. Gotta dig out my Things/OF bake-off notes.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I wonder at what point all the costs of commodified housing ...</title>
      <link>https://mike.puddingtime.org/posts/2025-12-02-i-wonder-at-what-point/</link>
      <pubDate>Tue, 02 Dec 2025 08:40:35 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-12-02-i-wonder-at-what-point/</guid>
      <description>&lt;p&gt;I wonder at what point all the costs of commodified housing &amp;ndash; administrative overhead, ​NGO inefficiency, cost of mental health and addiction services, damage to the tax base, ​or cost of shelters &amp;ndash; make our conviction that &lt;a href=&#34;https://www.oregonlive.com/business/2025/12/nearly-1900-affordable-portland-apartments-sit-empty-while-thousands-need-homes.html&#34;&gt;the market is the answer&lt;/a&gt; sorta fall apart.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I wonder at what point all the costs of commodified housing &ndash; administrative overhead, ​NGO inefficiency, cost of mental health and addiction services, damage to the tax base, ​or cost of shelters &ndash; make our conviction that <a href="https://www.oregonlive.com/business/2025/12/nearly-1900-affordable-portland-apartments-sit-empty-while-thousands-need-homes.html">the market is the answer</a> sorta fall apart.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Al &amp; I took the Green line downtown for breakfast at Grits ...</title>
      <link>https://mike.puddingtime.org/posts/2025-11-30-al-i-took-the-green/</link>
      <pubDate>Sun, 30 Nov 2025 10:06:37 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-11-30-al-i-took-the-green/</guid>
      <description>&lt;p&gt;Al  &amp;amp; I took the Green line downtown for breakfast at Grits n&amp;rsquo; Gravy, then we walked up to Slabtown then down through the Alphabet District. I took the OM-3 with the 17mm/f1.8 II. Weird that after nine years of shooting with X100s/Fujifilm, the OM feels closer to natural after just a few months.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/5332f566a4.jpg&#34; alt=&#34;A brick building with a water tower on top is partially obscured by autumn trees under a cloudy sky.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/2a9b7fa89f.jpg&#34; alt=&#34;A city street features a modern building with bright red balconies under a partly cloudy sky.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/2791e98627.jpg&#34; alt=&#34;A building exterior features a grid of colorful rectangular panels above a row of parked cars in a shadowed area.&#34;&gt;&lt;img src=&#34;https://mike.puddingtime.org/uploads/microblog/2025/c67d05ce31.jpg&#34; alt=&#34;A city street scene with two people walking on the sidewalk surrounded by tall buildings, a tree with sparse yellow leaves, and parked cars.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Al  &amp; I took the Green line downtown for breakfast at Grits n&rsquo; Gravy, then we walked up to Slabtown then down through the Alphabet District. I took the OM-3 with the 17mm/f1.8 II. Weird that after nine years of shooting with X100s/Fujifilm, the OM feels closer to natural after just a few months.</p>
<p><img src="/uploads/microblog/2025/5332f566a4.jpg" alt="A brick building with a water tower on top is partially obscured by autumn trees under a cloudy sky."><img src="/uploads/microblog/2025/2a9b7fa89f.jpg" alt="A city street features a modern building with bright red balconies under a partly cloudy sky."><img src="/uploads/microblog/2025/2791e98627.jpg" alt="A building exterior features a grid of colorful rectangular panels above a row of parked cars in a shadowed area."><img src="/uploads/microblog/2025/c67d05ce31.jpg" alt="A city street scene with two people walking on the sidewalk surrounded by tall buildings, a tree with sparse yellow leaves, and parked cars."></p>
]]></content:encoded>
    </item>
    <item>
      <title>I&#39;m enjoying Pluribus. I didn&#39;t see the tagline until ...</title>
      <link>https://mike.puddingtime.org/posts/2025-11-30-im-enjoying-pluribus-i-didnt/</link>
      <pubDate>Sun, 30 Nov 2025 09:45:48 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-11-30-im-enjoying-pluribus-i-didnt/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m enjoying &lt;em&gt;Pluribus&lt;/em&gt;. I didn&amp;rsquo;t see the tagline until yesterday:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;the story of the most miserable person on Earth who must save the world from happiness.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;hellip; which would have affected my read a little. I haven&amp;rsquo;t been clear for the first six episodes that the world needs to be saved. 📺&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m enjoying <em>Pluribus</em>. I didn&rsquo;t see the tagline until yesterday:</p>
<p>&ldquo;the story of the most miserable person on Earth who must save the world from happiness.&rdquo;</p>
<p>&hellip; which would have affected my read a little. I haven&rsquo;t been clear for the first six episodes that the world needs to be saved. 📺</p>
]]></content:encoded>
    </item>
    <item>
      <title>Setting Aside the Unix Aesthetic</title>
      <link>https://mike.puddingtime.org/posts/2025-11-30-setting-aside-the-unix-aesthetic/</link>
      <pubDate>Sun, 30 Nov 2025 09:31:01 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-11-30-setting-aside-the-unix-aesthetic/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The bad news: You&amp;rsquo;re falling through the air with no parachute. The good news: There&amp;rsquo;s no ground.&amp;rdquo;&lt;br&gt;
— Chögyam Trungpa&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;m going to keep this first part short:&lt;/p&gt;
&lt;p&gt;I got my first account on a Unix machine some time around 1991 or 1992. Up until that year I&amp;rsquo;d almost solely used 8-bit computers at home, but had some experience using a DEC PDP-11 in college to work on the school newspaper.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>&ldquo;The bad news: You&rsquo;re falling through the air with no parachute. The good news: There&rsquo;s no ground.&rdquo;<br>
— Chögyam Trungpa</p>
</blockquote>
<p>I&rsquo;m going to keep this first part short:</p>
<p>I got my first account on a Unix machine some time around 1991 or 1992. Up until that year I&rsquo;d almost solely used 8-bit computers at home, but had some experience using a DEC PDP-11 in college to work on the school newspaper.</p>
<p>&ldquo;Unix&rdquo; became my home environment &ndash; the place I wanted to be regardless of what I <em>had</em> to use.  I was a little late to Linux, finally getting it installed on a machine in &lsquo;95 or &lsquo;96. I lucked into a freelance gig where I could write about Linux. I co-authored a book about Linux. I got some gigs helping complete books about Linux during the heyday of tech books, when Borders or Barnes and Noble had large tech sections. There are a lot of people in the world who read my chapters on how to use the command line in Linux. If they didn&rsquo;t read about it in the original edition of a doorstop-sized &ldquo;Unleashed&rdquo; book I contributed to, which I think was about Red Hat, then they read the mildly revised editions for other distros.</p>
<p>I completely subscribed to &ldquo;<a href="https://theody.net/elements.html">The Elements of Style: UNIX as Literature</a>&rdquo;:</p>
<blockquote>
<p>&ldquo;UNIX system utilities are a sort of Lego construction set for word-smiths. Pipes and filters connect one utility to the next, text flows invisibly between. Working with a shell, awk/lex derivatives, or the utility set is literally a word dance.</p>
</blockquote>
<blockquote>
<p>&ldquo;Working on the command line, hands poised over the keys uninterrupted by frequent reaches for the mouse, is a posture familiar to wordsmiths (especially the really old guys who once worked on teletypes or electric typewriters). It makes some of the same demands as writing an essay. Both require composition skills. Both demand a thorough knowledge of grammar and syntax. Both reward mastery with powerful, compact expression.</p>
</blockquote>
<blockquote>
<p>&ldquo;At the risk of alienating both techies and writers alike, I also suggest that UNIX offers something else prized in literature: a coherence, a consistent style, something writers call a voice.&rdquo;</p>
</blockquote>
<p>Like a lot of people, I ended up migrating to Macs once OS X came out, but I did so because there was Unix in there somewhere.</p>
<p>But today I don&rsquo;t live in a work world where it&rsquo;s a meaningful skill set. I spend a lot of time making decks and working on documents. I use a lot of browser-based SaaS for work. There&rsquo;s pretty much nothing to script at work, and when I do spot things where I <em>could</em>, the right play is invariably to drop a few suggestions about how to best write that script to the person I&rsquo;m paying to do that.</p>
<p>I&rsquo;ve worked on a few personal projects over the past few years that were meant to help me keep my hand in: TUI apps, a CLI interface to the SmugMug and flickr APIs, etc.</p>
<p>But I have also had to admit those projects haven&rsquo;t been particularly sticky, even though I spent a lot of time making sure they mapped to my sense of How Things Should Be, because a command line/shell orientation makes less and less sense to me. There&rsquo;s friction getting things in and out of a shell environment when so much of the work you have to do doesn&rsquo;t live in there. And once you start cobbling together tools that might let you live in both worlds, you&rsquo;re in a UI wild west, with myriad configuration conventions and differing ideas about ergonomics.</p>
<p>It has not been easy on the ego to slowly transition out of that Unix orientation. I have the career I have because of that first account on an Ultrix box and years spent in and out of the Unix and Linux orbit as a writer, sysadmin, web developer, consultant, and manager. It has been almost as much a cultural identity as a skill set, and possibly more.</p>
<p>But it also feels increasingly awkward and shoehorned into my day-to-day life, and clinging to it bothers me because I&rsquo;m at a stage of life where I want to be less set in my ways, not more. I think about how to maintain my fundamental plasticity as a matter of aging gracefully, remaining a learner, and embracing the ways the culture around me is changing in ways I&rsquo;m not always chill with, but need to accept.</p>
<p>As hard as it is to set aside or let go of something that was such a big part of my life, though, it&rsquo;s also nice to lose that sense of obligation to a past self who&rsquo;s indifferent to my present self.</p>
]]></content:encoded>
    </item>
    <item>
      <title>What is practice</title>
      <link>https://mike.puddingtime.org/posts/2025-07-14-what-is-practice/</link>
      <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-07-14-what-is-practice/</guid>
      <description>&lt;p&gt;Al and I went to a dome show at OMSI called &amp;ldquo;Trust the Universe: The Philosophy of Alan Watts.&amp;rdquo; Up front, because reviews are thin on the ground, I would recommend against it: It&amp;rsquo;s only 45 minutes long, feels pretty disjointed, and the psychedelic visuals are sometimes a little campy. When the lotus position guy sort of gets sucked up into the mandala having dissolved his own ego I was annoyed.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Al and I went to a dome show at OMSI called &ldquo;Trust the Universe: The Philosophy of Alan Watts.&rdquo; Up front, because reviews are thin on the ground, I would recommend against it: It&rsquo;s only 45 minutes long, feels pretty disjointed, and the psychedelic visuals are sometimes a little campy. When the lotus position guy sort of gets sucked up into the mandala having dissolved his own ego I was annoyed.</p>
<p>I find Alan Watts engaging. He was a gifted explainer who could make heady, paradoxical ideas flicker into solidity and coherence. There are a few moments in the show where his ideas do come together and you get a sense of what he was about, particularly about teaching and spiritual practice.</p>
<p>It ended up giving Al and I something to think about afterward. She&rsquo;s a member of a local Zen center. I&rsquo;ve never really felt very compelled to take up a formal practice. Certainly nothing like Soto Zen. I have some contradictory feelings about it that the show resurfaced, because Watts saw some spiritual practice and relationships with teachers as a sort of revolving door one could never get out of if they don&rsquo;t push us toward our &ldquo;oh, it&rsquo;s in here&rdquo; moment.</p>
<p>I guess I&rsquo;ve always felt like big changes and shifts are &ldquo;it&rsquo;s in here&rdquo; moments. There are lots of techniques and approaches to get us to those shifts, and a skilled coach, mentor, teacher, or counselor can help us to or through those shifts, but my moments of radical clarity have always come just bumping into life. It&rsquo;s interview season right now, for instance, and I have been reminded of the &ldquo;pouncer&rdquo; and &ldquo;stalker&rdquo; learning styles. I think in life matters I&rsquo;ve turned out to be a &ldquo;pouncer.&rdquo;</p>
<p>But I also think there&rsquo;s value in spiritual community &ndash; even having a teacher &ndash; because to be raised in a liberal society in the 21st century is, regardless of your ideological tilt, to be coached toward profound egoism and a kind of selective sollipsism. Finding someone to trust and someone willing to work through our egoism and self-protection can be helpful. I know I&rsquo;ve benefitted from it when I&rsquo;ve been stuck on something, even if the benefit I got wasn&rsquo;t a resolution, so much as an ability to sit with the discomfort of a lack of resolution.</p>
<p>I titled this post &ldquo;What is practice?&rdquo; because I&rsquo;m not always sure. If I ask that question of a Soto Zen practitioner I&rsquo;ll get a kind of answer. If I ask three Soto Zen practitioners, I will likely get three different answers. If I widen my survey to different sects, still more answers. If I ask the person trying to sell me a mindfulness app, there will be another answer, and since there seem to be dozens of those people, probably dozens more answers.</p>
<p>I think for now my working definition is &ldquo;whatever grants you the most ability to sit with your thoughts and feelings in a place of remove from them, but engagement with them.&rdquo; For some people, that will involve very austere forms &ndash; Al says at her Zen center you can opt in to a firm rod on the shoulder if your form slips &ndash; and for others not anything like that at all. I&rsquo;m most in a &ldquo;practice mindset&rdquo; when I&rsquo;m running, doing some kinds of writing, and playing some kinds of games.</p>
<p>Those aren&rsquo;t buttons I can push &ndash; click I am running so I am correctly engaged with my thoughts and feelings &ndash; because I find myself sometimes a mile down the trail having been eaten by a narrative instead of understanding where a narrative came from &ndash; but they&rsquo;re the most reliable cues to get to the right relationship.</p>
<p>So, I don&rsquo;t know, I said I wouldn&rsquo;t recommend that dome show. I suppose if you have a few Alan Watts books sitting around, or care to undertake some internet research and are careful to avoid what appears to be a recent trend of people making Alan Watts deep fakes that spout mysticism, you could sort of rig something up for yourself with headphones and a good screensaver. But it did remind me of a few questions about practice and mysticism I hadn&rsquo;t thought about for a while. It did smell a little like weed in the dome theater, though.</p>
]]></content:encoded>
    </item>
    <item>
      <title>About this project</title>
      <link>https://mike.puddingtime.org/posts/2025-07-13-about-this-project/</link>
      <pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-07-13-about-this-project/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m adding a section to my Claude Code-driven project READMEs (below).&lt;/p&gt;
&lt;p&gt;I came across someone&amp;rsquo;s attempt to create an &amp;ldquo;AI Free&amp;rdquo; badge people could adopt for their projects, and decided that while I appreciate the sentiment, it is not actually helpful to anyone besides people whose position stops at &amp;ldquo;I don&amp;rsquo;t want to use code produced by an LLM.&amp;rdquo; That&amp;rsquo;s a fine position I take no philosophical issue with, but it doesn&amp;rsquo;t help people who come across my projects, which are plainly excluded from using that badge, to understand what it means to use them or interact with the code base if their position is not reflexively anti-AI.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m adding a section to my Claude Code-driven project READMEs (below).</p>
<p>I came across someone&rsquo;s attempt to create an &ldquo;AI Free&rdquo; badge people could adopt for their projects, and decided that while I appreciate the sentiment, it is not actually helpful to anyone besides people whose position stops at &ldquo;I don&rsquo;t want to use code produced by an LLM.&rdquo; That&rsquo;s a fine position I take no philosophical issue with, but it doesn&rsquo;t help people who come across my projects, which are plainly excluded from using that badge, to understand what it means to use them or interact with the code base if their position is not reflexively anti-AI.</p>
<p>I <em>could</em> take a sort of naive position of, &ldquo;look, a repo on GitHub is just a repo on GitHub. There are no promises in this world.&rdquo; And I&rsquo;ve chosen the MIT license for everything, because it has such a &ldquo;do whatever you want with this&rdquo; vibe. But I got a PR on one of the projects, read it and the problem the user was trying to solve, and realized &ldquo;oh, right, it&rsquo;s a GitHub repo and even though Claude is signing all the commits, there&rsquo;s an expectation here that the act of having this code in a public repo on GitHub sets with at least some people.&rdquo; Making it worse, the PR tripped my &ldquo;I don&rsquo;t think this PR sounds safe, exactly,&rdquo; instincts, which meant I had now incurred <em>work</em> by being unclear about what it is I am up to here.</p>
<p>The other thought that crossed my mind came from a conversation with a VP of UX years ago, when I told him we were struggling to make the CSS for our very oldest Puppet documentation work with recent design changes.</p>
<p>He asked me, &ldquo;do you maintain those docs anymore?&rdquo;</p>
<p>&ldquo;No. And we say so.&rdquo;</p>
<p>&ldquo;Are the releases they cover supported anymore?&rdquo;</p>
<p>&ldquo;No. We mention that, too.&rdquo;</p>
<p>&ldquo;Can you still read the docs, even if the CSS is broken?&rdquo;</p>
<p>&ldquo;Well, it&rsquo;s ugly and a bit distracting, but the content is there.&rdquo;</p>
<p>&ldquo;Good. Then it sets the right expectation. Let it serve as signal. You&rsquo;ll probably get less complaints about it because you&rsquo;ve made your position clear with the non-support message, and backed it up with obvious neglect.&rdquo;</p>
<p>So instead I&rsquo;m going to disable PRs to just foreclose on potential for misunderstanding, and also do my own version of a &ldquo;Made with AI&rdquo; Dubious Housekeeping Seal.</p>
<p>I&rsquo;m going to also make a commitment to make my language about these experiments less twee:</p>
<p>I did not &ldquo;work with the robots,&rdquo; &ldquo;ask the robots,&rdquo; &ldquo;torture a bot,&rdquo; etc. I used an LLM, used AI, used Claude, etc.</p>
<p>Whether it shows or not, I am in some fairly serious <em>internal</em> discussion about what these tools mean, how we should use them, how/if there can be ethical use of them, etc. The spectrum of takes on AI covers a range of people I know, care about, and respect. It feels disingenuous and a little dishonest for <em>me</em> to use diminishing or <em>faux</em> naive language to describe what I&rsquo;m doing here, as if to me it is a matter of idle amusement or something I don&rsquo;t understand I should take seriously or be thinking about.</p>
<p>So, this is the new README edition. And once I resolve the issue the PR I got against one of the projects is resolved, I&rsquo;ll turn off PRs: More signal.</p>
<h2 id="important-consideration-before-using-this-code-or-interacting-with-this-codebase">Important consideration before using this code or interacting with this codebase</h2>
<p>This application is an experiment in using Claude Code as the primary driver the development of a small, focused app that concerns itself with the owner&rsquo;s particular point of view on the task it is accomplishing.</p>
<p>As such, this is not meant to be what people think of as &ldquo;an open source project,&rdquo; because I don&rsquo;t have a commitment to building a community around it and don&rsquo;t have the bandwidth to maintain it beyond &ldquo;fix bugs I find in the process of pushing it in a direction that works for me.&rdquo;</p>
<p>It&rsquo;s important to understand this for a few reasons:</p>
<ol>
<li>
<p>If you use this code, you&rsquo;ll be using something largely written by an LLM with all the things we know this entails in 2025: Potential inefficiency, security risks, and the risk of data loss.</p>
</li>
<li>
<p>If you use this code, you&rsquo;ll be using something that works for me the way I would like it to work. If it doesn&rsquo;t do what you want it to do, or if it fails in some way particular to your preferred environment, tools, or use cases, your best option is to take advantage of its very liberal license and fork it.</p>
</li>
<li>
<p>I&rsquo;ll make a best effort to only tag the codebase when it is in a working state with no bugs that functional testing has revealed. Tags just mean &ldquo;seemed to be in working order.&rdquo;</p>
</li>
</ol>
<p>While I appreciate and applaud assorted efforts to certify code and projects AI-free, I think it&rsquo;s also helpful to post commentary like this up front: Yes, this was largely written by an LLM so treat it accordingly. Don&rsquo;t think of it like code you can engage with, think of it like someone&rsquo;s take on how to do a task or solve a problem.</p>
]]></content:encoded>
    </item>
    <item>
      <title>OmniFocus through a new lens</title>
      <link>https://mike.puddingtime.org/posts/2025-07-11-omnifocus-through-a-new-lens/</link>
      <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-07-11-omnifocus-through-a-new-lens/</guid>
      <description>&lt;p&gt;I got a notification that the OmniFocus subscription I forgot all about was about to expire, so naturally I had to go see what I made of that. It was sort of interesting reapproaching OF through the lens of having spent a bunch of time trying different task management tools before deciding to make my own that did everything I wanted.&lt;/p&gt;
&lt;p&gt;My past reaction to OmniFocus has traditionally been &amp;ldquo;no, get it away from me.&amp;rdquo; Some of that reaction is to the tool itself and some of it is cultural: I remember OmniFocus when it was a bunch of AppleScript meant to make OmniOutliner do unnatural things, and I remember the culture it came out of. And some of that reaction is from thinking it is just too much, but that &amp;ldquo;productivity wang overkill&amp;rdquo; is pretty much its most loyal niche.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I got a notification that the OmniFocus subscription I forgot all about was about to expire, so naturally I had to go see what I made of that. It was sort of interesting reapproaching OF through the lens of having spent a bunch of time trying different task management tools before deciding to make my own that did everything I wanted.</p>
<p>My past reaction to OmniFocus has traditionally been &ldquo;no, get it away from me.&rdquo; Some of that reaction is to the tool itself and some of it is cultural: I remember OmniFocus when it was a bunch of AppleScript meant to make OmniOutliner do unnatural things, and I remember the culture it came out of. And some of that reaction is from thinking it is just too much, but that &ldquo;productivity wang overkill&rdquo; is pretty much its most loyal niche.</p>
<p>So I didn&rsquo;t like its chances. But I had Claude write a quick importer for me that turned all my denote-task tasks into OmniFocus tasks, and I was able to quickly get some production data to work with.</p>
<p>My sole objective was to see how amenable &ndash; despite all its gears, buttons, and blinking lights &ndash; OmniFocus would be to just giving me my river of tasks and then providing ways to filter the river down.</p>
<p>To be honest, pretty well. The tool to use to get to the base view is Perspectives, and you can make a simple one that just shows all your open tasks and lists due dates, tags, and parent projects. I added a group-by-date to give me &ldquo;today, the next week, the next month, beyond&rdquo; grouping.</p>
<p>For project view, there&rsquo;s a Projects perspective that&rsquo;s fine. I just dragged them all into order.</p>
<p>To clean up the view a little I just collapsed the inspector sidebar on the right and the &hellip; sidebar sidebar? &hellip; on the left. That got me pretty much the view I have in denote-tasks, which I&rsquo;ve taken to thinking of as &ldquo;the big dumb list view.&rdquo;</p>
<p>I still think OmniFocus is probably overkill for me, but I have a new appreciation for its flexibility.</p>
<p>I also did this exercise with Things, which I&rsquo;ve always felt more warmly toward.</p>
<p>It is not really able to do the Big Dumb List view because it wants to show you today, upcoming, and anytime in discrete areas. I prefer seeing today + upcoming in the same place because sometimes I don&rsquo;t want to do a today thing right now and like just looking down the list for a one- or two-pointer I can pick off.</p>
]]></content:encoded>
    </item>
    <item>
      <title>denote-tasks</title>
      <link>https://mike.puddingtime.org/posts/2025-07-10-denote-tasks/</link>
      <pubDate>Thu, 10 Jul 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-07-10-denote-tasks/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/65535/54647278914_80ca1a82ff_b.jpg&#34; alt=&#34;Denote Tasks&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/pdxmph/denote-tasks&#34;&gt;denote-tasks&lt;/a&gt; is pretty much &amp;ldquo;what I hoped to get with TaskWarrior but didn&amp;rsquo;t.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Rather than using sqlite it uses Markdown files named using Denote conventions, with some extra metadata in the YAML frontmatter for priority, due date, and project associations.&lt;/p&gt;
&lt;p&gt;I chose to use the Denote naming convention because it gives me a reliable index for making associations between normal tasks and projects and can be the foundation for subtasks at some point. That also means you can use it in the context of a normal Denote notes corpus and take advantage of Denote stuff like dblocks if you like.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://live.staticflickr.com/65535/54647278914_80ca1a82ff_b.jpg" alt="Denote Tasks"></p>
<p><a href="https://github.com/pdxmph/denote-tasks">denote-tasks</a> is pretty much &ldquo;what I hoped to get with TaskWarrior but didn&rsquo;t.&rdquo;</p>
<p>Rather than using sqlite it uses Markdown files named using Denote conventions, with some extra metadata in the YAML frontmatter for priority, due date, and project associations.</p>
<p>I chose to use the Denote naming convention because it gives me a reliable index for making associations between normal tasks and projects and can be the foundation for subtasks at some point. That also means you can use it in the context of a normal Denote notes corpus and take advantage of Denote stuff like dblocks if you like.</p>
<p>I chose plain text instead of a database because you can just pop open a task or project and make notes in it, or link to other notes, or whatever. There&rsquo;s a <code>(l)og</code> hotkey to drop a quick timestamped note into any project or task. I use it when I close a task out or have new context to add.</p>
<p>I do need to go in and straighten out some of the hotkeys, because it started life as an extension to another notes management TUI, but that got a little cumbersome and complex.</p>
<p>Either way, it&rsquo;s very keyboard-centric: Hotkeys let you change priorities, dates, and tags from the task list. No need to open a metadata window or sidebar, which drives me crazy with a lot of todo apps. You can navigate the task list with j/k/gg/G.</p>
<p>There&rsquo;s a plain old CLI, too, for scriptability and because I like having an alias that just pops out today&rsquo;s todos without opening an app, but it needs a bit more work &ndash; the syntax is a bit mangled from going a couple of wrong directions.</p>
<p>I liked TaskWarrior&rsquo;s conception of &ldquo;contexts&rdquo; but borrowed Things3&rsquo;s &ldquo;areas&rdquo; to name it. You can filter by area at launch, so <code>denote-tasks -t --area=work</code> will open up the task list to your work tasks and projects.</p>
<p>And I liked TaskWarrior&rsquo;s core UI: A big list. Partly because it feels grounding. A lot of task management tools hide tasks away behind whatever their organizational containers are (projects, etc.) and while I get that this is meant to be a calming design decision, it doesn&rsquo;t work for my particular brain. I take a little of the potential sense of overwhelm out with a simple horizontal rule that underlines the block of tasks due today, and have filters for priority, estimate, tag, etc. so I can quickly narrow things down if I need.</p>
<p>It also has the core task states I tend to think in: open, done, delegated, paused, dropped. There are little visual indicators for those states, and the list is filterable by those, too.</p>
<p>Oh, there&rsquo;s also fuzzy search and tag search. Great for 1:1s if you take the time to tag tasks with people.</p>
<p>So, I think mooooost people who are super into Denote would probably tend to just use org-mode for tasks. Moooost people who are into Denote would just tend to use Denote in the context of Emacs. I just really like Denote naming conventions conceptually, and like some of the portability baked into them and I don&rsquo;t want to go live in Emacs right now. I&rsquo;m still really digging Helix because since first setting up LSPs for it and doing basic configuration, I haven&rsquo;t felt the urge to fiddle with it. Launches super fast, doesn&rsquo;t need a daemon, does everything I want.</p>
<p>And denote-tasks does everything I want. I really wanted to like TaskWarrior, and like a lot of its ideas. But other parts of it were a little hard to swallow and there&rsquo;s a ton of complexity there. This gets me the parts I liked, inflected to suit my particular mental model a bit better.</p>
<p>Oh &hellip; also I did this one with Claude Code as opposed to Claude Desktop. It is a lot more eager to take credit when it makes commits, and I think that&rsquo;s a good thing. It&rsquo;s fine and probably good if people know they&rsquo;re getting code churned out by a bot.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Trying to figure out how to live with LLMs at work</title>
      <link>https://mike.puddingtime.org/posts/2025-07-03-trying-to-figure-out-how-to-live-with-llms-at-work/</link>
      <pubDate>Thu, 03 Jul 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-07-03-trying-to-figure-out-how-to-live-with-llms-at-work/</guid>
      <description>&lt;p&gt;Today I was writing an interview summary in Greenhouse, the recruiting tool, when I noticed one of those little &amp;ldquo;pixie dust&amp;rdquo; icons I have come to understand means &amp;ldquo;AI here!&amp;rdquo; It made me curious, so I carefully saved my work elsewhere then clicked the button.&lt;/p&gt;
&lt;p&gt;Because I sit on my company&amp;rsquo;s AI governance committee, I have spent a lot of time over the past 18 months or so wondering what that button does in its many manifestations in all the apps where it appears. Sometimes it suggests some stuff you might want the LLM to do for you, like help plan a project, and other times it just does some sort of rewrite based on &amp;hellip; ideas? &amp;hellip; about &amp;ldquo;helping&amp;rdquo; you with your writing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today I was writing an interview summary in Greenhouse, the recruiting tool, when I noticed one of those little &ldquo;pixie dust&rdquo; icons I have come to understand means &ldquo;AI here!&rdquo; It made me curious, so I carefully saved my work elsewhere then clicked the button.</p>
<p>Because I sit on my company&rsquo;s AI governance committee, I have spent a lot of time over the past 18 months or so wondering what that button does in its many manifestations in all the apps where it appears. Sometimes it suggests some stuff you might want the LLM to do for you, like help plan a project, and other times it just does some sort of rewrite based on &hellip; ideas? &hellip; about &ldquo;helping&rdquo; you with your writing.</p>
<p>I know some ESL folks who like the pixie dust button when it stands for &ldquo;writing aid,&rdquo; because they want help with their writing. Because they&rsquo;re on their second or third language, while they may not be experts about English they have a proven skill in language acquisition, so they&rsquo;re not naive about what the button means. Not nearly as naive, at least, as people who speak one language and don&rsquo;t give a fuck about that one, let alone any others. So they scrutinize the output. One of them consults unfamiliar words in the dictionary before accepting them, but appreciates the help with basic structure.</p>
<p>I also know people who want help with their effectiveness. Like the ESL people I know, they&rsquo;re coming into that interaction less from the perspective of &ldquo;I barfed some shit into a form and the robot made it good.&rdquo; They&rsquo;re coming at it with a use case like, &ldquo;my boss is think-skinned, defensive, reactive, and mildly paranoid so how can I tell them something they don&rsquo;t want to hear without triggering an episode?&rdquo;</p>
<p>Having typed in what they <em>want</em> to say, then prompting for how they want to be received, when a more diplomatic revision comes out of the little pixie dust slot, they read it carefully, think about using it, then maybe massage it a little, or just use it as a suggestion. In other words, they apply their judgment, but benefit from the slight frame shift to imagine better alternatives.</p>
<p>One person I&rsquo;ve talked to who uses AI in that mode has had a lot of success with the approach. It takes a little extra time because she never just copy/pastes the output, but it has gotten her good results: She truly struggled to express herself in a way that her thin-skinned, defensive, reactive, mildly paranoid boss could hear, and now she&rsquo;s getting better outcomes in those interactions.</p>
<p>&ldquo;I feel like I&rsquo;m cheating,&rdquo; she said. &ldquo;Like I&rsquo;m not doing my job.&rdquo;</p>
<p>I said, &ldquo;you&rsquo;re a senior director for one of the largest Medicaid consumers in the state, and your <em>job</em> is to communicate effectively enough that your 100 employees can get shit done without you triggering a diplomatic incident or your boss losing her shit because you decided fuck it, she doesn&rsquo;t <em>need</em> to like what she&rsquo;s reading.&rdquo;</p>
<p>So I don&rsquo;t really judge the pixie dust button or the edits it sometimes suggests to be an unalloyed social ill.</p>
<p>It was in that spirit I clicked the Greenhouse button.</p>
<p>I was <em>hoping</em> it&rsquo;d be something novel or different. Like, maybe it would offer some insight particular to this kind of writing, or would analyze my commentary for unconscious bias, or even warn me that I was about to commit a hiring practices violation to a corporate system of record. Instead it just mostly repeated my writing but replaced a few turns of phrase I chose very intentionally with more cliched ones that altered my meaning.</p>
<p>I don&rsquo;t know how many hires I&rsquo;ve done, nor how many hundreds of interviews I&rsquo;ve conducted. Lots. Lots and lots. When I&rsquo;m the hiring manager, I&rsquo;m a close reader of interview notes. I pay attention. When I&rsquo;m on someone else&rsquo;s panel, I write carefully and want to be clear.</p>
<p>Today was the first day that I acutely felt the impact of AI fucking with two things I care about: Hiring and communicating. It took my words and Business Englished them into something other. It altered meaning, and to no good end. Nothing was more clear. There were no syntactical, grammar or punctuation issues to call out. It just, I dunno, <strong>blorped</strong> them. There&rsquo;s no word for it. It didn&rsquo;t, like, insert sexist slurs or generate a picture of a Black Nazi. It just sorta gnawed the input like a slobbery, toothless dog and left a saliva-covered pile of verbiage normalized to some inscrutable standard. It was sort of like how when you have shake reduction on a camera, you&rsquo;re supposed to turn it <em>off</em> when you put the camera on a tripod because it counter-intuitively risks blur: Feed the LLM good enough English, just not statistically congruent English, and it&rsquo;ll just sort of cock its head then spit on your sandwich because it&rsquo;s supposed to do <em>something</em> when you click the pixie dust button.</p>
<p>So my mind went immediately to some recent examples I&rsquo;ve caught go by in other parts of my job where someone was plainly hucking their shit into a form and pressing the pixie dust button. The tells were the tells we&rsquo;re all learning to spot &ndash; the sorta flowery lilt, needless explication, and obtuse summarizing; the gratuitous length that reminds me of early efforts to use CG in superhero movies, where it&rsquo;s just obvious that it&rsquo;s CG because human bodies just can&rsquo;t articulate like that, and would rip their own arms off or snap their own necks moving with that kind of speed. Like, nobody in their right mind, asked for a quick outline of a modified five step process you could fit on half a sheet of paper, would spend the time it took to extend that to five pages.</p>
<p>But as much as it was a waste of my time, it was easily addressed because it was obvious and gratuitous. The perp owned it, reminded me of their insecurities about writing, and agreed that they&rsquo;d lost sight of the problem they were trying to solve because for a few seconds it felt really good to not struggle quite as much to make words come out. I don&rsquo;t think it was meant to be a knife-twist that they said they fed it some of my writing as a guide.</p>
<p>And for a lot of business writing tasks, I worry less. If my helpdesk manager wants to send a quick nastygram to three engineers who won&rsquo;t send back their old laptops because they&rsquo;re too lazy to get their shit off of them and put them in the return box, I don&rsquo;t care. &ldquo;My director is going to tell your director, then he said I can lock that fucking thing and delete all your shit&rdquo; is going to be clear no matter what the pixie dust button does.</p>
<p>But I benefitted from Puppet&rsquo;s outstanding emphasis on interviewing and hiring a long time ago, and every detail of those things has mattered to me ever since. I&rsquo;ll cut corners, let myself have bad days, fudge, procrastinate, take unwarranted mental health days, accidentally nap through the first 30 minutes of a QBR, and generally be a slob about a lot of other things, but interviews matter. Period. They&rsquo;re an absolute. When I have one coming up, I pull my shit together and go do it. When I sense someone else isn&rsquo;t invested, or they&rsquo;re phoning in their feedback, or they didn&rsquo;t pay attention during the kickoff, I judge.</p>
<p>Greenhouse provides a button to fuck with something that matters. A kind of writing that matters. It was just a stupid fucking five-pointer to some dev, plopped in the backlog by some product owner who might not even see the sense in it but knew they needed a third bullet for the AI features list, mandated by some director of product who got it loud and clear from someone above them that the market demands moar pixie dust buttons.</p>
<p>Anyhow, it was sort of clarifying. I&rsquo;ve been a little paralyzed when I get the weird AI documents, because sometimes they&rsquo;re non-objectionable. Maybe too long, or too wordy, or with odd little nuances that aren&rsquo;t <em>wrong</em> but are <em>off</em>, but I ask myself &ldquo;for everyday dumb bloodless business writing meant to detail a process, explain a system, or document some steps, is this okay?&rdquo;</p>
<p>Usually yeah. It&rsquo;s fine.</p>
<p>But this got me off the fence a little. I know some people like to announce total bans on AI assistance. I think that&rsquo;s risking losing sight of some things, and I actually can&rsquo;t because we&rsquo;re under a mandate at work to use exactly the kinds of integrated assistance these things offer via all the Google Gemini integrations. (I did overhear a team mentioning that something they were given to work with by their leader would need careful review &ldquo;because it came straight out of AI and probably has mistakes,&rdquo; and that made me cringe.)</p>
<p>So I just told my folks that I&rsquo;ve needed a reason to follow the thirty percent rule a little more, anyhow &ndash; ask for review when you think you&rsquo;re thirty percent done &ndash; and that I want the 30 percent they put in front of me to be just them, not a bot. I just want to know they thought about the core of the thing they&rsquo;re doing, and that they&rsquo;ve chosen a direction we can discuss further if needed, before pressing the pixie dust button. If that runs afoul of the &ldquo;use this shit&rdquo; mandate, because we&rsquo;re also supposed to be offloading our thinking, I&rsquo;ll see ya on the soup line.</p>
<p>If I could burn that button out of Greenhouse though, I totally would.</p>
<p><strong>Coda, bright spot:</strong> I listened to a C-level exec from a major software company say that the biggest challenge they have with AI features is that uptake is really poor. People don&rsquo;t like a lot of it, or technology leaders are resistant. That sort of tracks with the tools I&rsquo;ve got in my portfolio at work. AI was pitched as an expansion or upsell a lot last year. This past several months, three pretty big ones I manage just said &ldquo;fuck it, you win,&rdquo; turned the features on for me, and rolled them into the main SKU without charge. That&rsquo;s some money and time down a hole.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I think I&#39;m finally over the savage wound that was GNOME 2.</title>
      <link>https://mike.puddingtime.org/posts/2025-07-02-i-think-im-finally-over-the-savage-wound-that-was-gnome-2/</link>
      <pubDate>Wed, 02 Jul 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-07-02-i-think-im-finally-over-the-savage-wound-that-was-gnome-2/</guid>
      <description>&lt;p&gt;I finally remembered after a lot of &amp;ldquo;it must be in here somewhere&amp;rdquo; through each tiny little submenu of GNOME Tweaks that the &amp;ldquo;swap fn and ctrl&amp;rdquo; option is actually in Framework&amp;rsquo;s BIOS settings, not somewhere near &amp;ldquo;swap meta and super&amp;rdquo; in GNOME Tweaks.&lt;/p&gt;
&lt;p&gt;I got so used to GNOME&amp;rsquo;s overview being under my thumb with only x percent of thumb curl instead of the pre-tweak y percent that the Framework 12 felt actively hostile. Now it matches my other Linux stuff and the slight change in the number of milimeters my thumb curls to invoke the overview/launcher feels like much less effort.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I finally remembered after a lot of &ldquo;it must be in here somewhere&rdquo; through each tiny little submenu of GNOME Tweaks that the &ldquo;swap fn and ctrl&rdquo; option is actually in Framework&rsquo;s BIOS settings, not somewhere near &ldquo;swap meta and super&rdquo; in GNOME Tweaks.</p>
<p>I got so used to GNOME&rsquo;s overview being under my thumb with only x percent of thumb curl instead of the pre-tweak y percent that the Framework 12 felt actively hostile. Now it matches my other Linux stuff and the slight change in the number of milimeters my thumb curls to invoke the overview/launcher feels like much less effort.</p>
<p>Now I&rsquo;m eyeing the Mac Studio. It&rsquo;s a first-gen M1 Max model and it is still going strong, but when I&rsquo;m being realistic, my <em>main</em> tether to macOS is Lightroom, and my main tethers to Lightroom are a. it has 24 years of digital photos in it that and b. a few raw profiles I&rsquo;d need to figure out how to replicate with another tool.</p>
<p>I like the occasional abrupt swerve into more Linux usage because it&rsquo;s got that whole &ldquo;slightly parallax world&rdquo; thing going on. My mindset in front of a Linux machine is much less interested in hucking stuff on it than I&rsquo;m willing to do with a Mac, and I&rsquo;m less willing to keep stuff on it just in case. It&rsquo;s a much more down to business or, at least, down to the task at hand mindset.</p>
<p>I remember being <em>furious</em> over the turn GNOME 2 took in the naughts, after Sun did a usability study and the team started unbolting shit and tossing it out the back of the plane. Years of configuration equity and tweaks went out the window overnight, and the project leadership just did. not. care. if you were mad about it.</p>
<p>Over 20 years later, though, when I sit down to a fresh GNOME instance where I haven&rsquo;t yet had an opportunity to add &ldquo;missing&rdquo; features with assorted tweaks, I appreciate the mindset. It&rsquo;s a very calm interface.</p>
<p>It&rsquo;s not entirely the fault of Apple or macOS designers that macOS feels more and more busy to me these days. It&rsquo;s that most macOS apps seem to feel entitled to taskbar real estate, so you spend a lot of time finding the &ldquo;show in task bar&rdquo; option as you realize your taskbar situation is out of control.</p>
<p>It&rsquo;s clockwork predictable that after I set up a new Linux machine or start using one after time away I will go through my Macs and do everything I can to remove anything that detracts from a sense of a blank slate when I start a session.</p>
<p>If you asked me if, in the abstract, which desktop ecosystem would produce the more consistent, calm behavior on my part, I&rsquo;d probably reason that the edge macOS has in uniformity would lead to more ordered behavior.</p>
<p>In practice, my Linux machines seem to be the more restrained ones, and a little time on one of them causes me to pare back the widget creep that happens on my Macs.</p>
<p>I wonder if some of that is that my formative years on Linux well preceded the iPhone era and the way it kind of &ldquo;appified&rdquo; the macOS mindset. Like, when I look at what&rsquo;s in /Applications on a long-lived Mac, I <em>wish</em> my biggest problem was that I can never bring myself to drag Pages into the trash &ldquo;just in case.&rdquo; My biggest problem is that I&rsquo;ve got a ton of unneeded single-purpose things it was easy enough to add and inoffensive enough to leave, letting the clutter pile up. I just don&rsquo;t act like that on a Linux system.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Just me, my list, and a day with no meetings</title>
      <link>https://mike.puddingtime.org/posts/2025-06-27-just-me-my-list-and-a-day-with-no-meetings/</link>
      <pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-27-just-me-my-list-and-a-day-with-no-meetings/</guid>
      <description>&lt;p&gt;Today was the first day in a little while that I had a true &amp;ldquo;heads down&amp;rdquo; day to truly dig in on the backlog I&amp;rsquo;ve been storing in Taskwarrior: No scheduled meetings, a painful awareness I&amp;rsquo;m behind on a few things, and a vague unease over the fact that unstructured time is my biggest enemy.&lt;/p&gt;
&lt;p&gt;It was off to a good start, though, when I just made sure I was in the right context in TW and got ready to dig in: &lt;code&gt;task context:work&lt;/code&gt; filtered out the non-work stuff, and all my &amp;ldquo;today&amp;rdquo; stuff was red, with tasks from my current focus project in yellow. Very easy to be clear on what I&amp;rsquo;d committed to or what the best things to pull forward would be if I exhausted the day&amp;rsquo;s list, and it helped me spot things that I knew I&amp;rsquo;d need to rethink as I worked through the focus project and future tasks were affected by current work.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today was the first day in a little while that I had a true &ldquo;heads down&rdquo; day to truly dig in on the backlog I&rsquo;ve been storing in Taskwarrior: No scheduled meetings, a painful awareness I&rsquo;m behind on a few things, and a vague unease over the fact that unstructured time is my biggest enemy.</p>
<p>It was off to a good start, though, when I just made sure I was in the right context in TW and got ready to dig in: <code>task context:work</code> filtered out the non-work stuff, and all my &ldquo;today&rdquo; stuff was red, with tasks from my current focus project in yellow. Very easy to be clear on what I&rsquo;d committed to or what the best things to pull forward would be if I exhausted the day&rsquo;s list, and it helped me spot things that I knew I&rsquo;d need to rethink as I worked through the focus project and future tasks were affected by current work.</p>
<p>It&rsquo;s one thing to sort of develop a model in your head and get it set up. It&rsquo;s another thing to nibble around the edges with a little use here and there while you&rsquo;re figuring out the model. It&rsquo;s a completely other thing to have a long stretch of time in front of you where it&rsquo;s just you and the system and an opportunity to do all the things with it.</p>
<p>So glad I took an axe to the default color scheme and made a much more simplified one. I felt pretty relaxed having only maybe four status colors to deal with for &ldquo;today,&rdquo; &ldquo;next few days,&rdquo; &ldquo;projects,&rdquo; and &ldquo;all the rest.&rdquo;</p>
<p>I&rsquo;m glad I&rsquo;ve taken the time to set up simple shell aliases to make some tagging implicit. It was easy to capture stuff as it came in via Slack, etc. and when I took a pause mid-day to triage some of the incoming it was easy to start from the bottom and retag/add to projects/etc. I&rsquo;m okay with a very linear list of tasks with high resolution at the top and very little at the bottom.</p>
<p>I wasn&rsquo;t sure how I&rsquo;d deal with the wall of tasks I get when I have a minimal filter in place and run the basic list. But after a day of checking in with it, I realized I really like it: Yep, there&rsquo;s a lot to do, but I do really poorly with tools that tidy things up, hide next steps, etc. I know GTD theory says &ldquo;don&rsquo;t try to keep it all in your head,&rdquo; but I appreciate the reinforcement and feel less likely to have something languish because it&rsquo;s out of sight, and I like the opportunity to make a random connection.</p>
<p>On that last point, for instance, one of the folks on my team shared some concerns about their career growth. I made the concern a task, because I owe a conversation about that, and I made it a p1 so it gets a brighter color treatment, and as I worked through a couple of strategic projects today, whenever I checked back in with my list, there was that bright orange, unscheduled p1 sitting down there reminding me that as I think about the big picture I&rsquo;ve got to also pull some things into its wake. There are some things you can&rsquo;t compartmentalize.</p>
<p>I think TW has some features that would allow me to get to a bit more of a &ldquo;only see as much as you need to take the next step&rdquo; state without losing sight of stuff, but one piece of meta awareness I&rsquo;m bringing to this iteration is that leaving features on the table is healthy. The mental complexity people describe when they talk about their &ldquo;productivity methodologies&rdquo; always leaves me feeling skeptical that the system they&rsquo;re describing is sustainable or helpful. One reason I&rsquo;ve always appreciated Things in the Things/OmniFocus debate is that Things does a better job of sort of tucking away all the options unless you choose to use them. Maybe OmniFocus has improved in this regard, but it always felt more willing to expose all the knobs and dials.</p>
<p>So, great experience. I don&rsquo;t have a ton of them next week owing to the compressed holiday timeline, but I do have a few stretches of time, and I&rsquo;m already feeling a little less of the nervousness I feel when I see I&rsquo;ve got some hours to fill.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, I remember kind of what I was thinking</title>
      <link>https://mike.puddingtime.org/posts/2025-06-27-well-i-remember-kind-of-what-i-was-thinking/</link>
      <pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-27-well-i-remember-kind-of-what-i-was-thinking/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/65535/54618930208_1787c2eeae_b.jpg&#34; alt=&#34;tinyPod&#34;&gt;&lt;/p&gt;
&lt;p&gt;I forgot I even ordered a &lt;a href=&#34;https://thetinypod.com&#34;&gt;tinyPod&lt;/a&gt; until it showed up at my door Wednesday. I ordered it a very long time ago. (Checked the mail after posting this: &lt;em&gt;10 months ago&lt;/em&gt;!)&lt;/p&gt;
&lt;p&gt;It, uh, it turns your Apple Watch into an Apple Watch encased in plastic with a scroll wheel.&lt;/p&gt;
&lt;p&gt;I think the logic of this purchase was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I don&amp;rsquo;t really like my Apple Watch as a watch anymore. I am wearing my field watch these days.&lt;/li&gt;
&lt;li&gt;It seems like a neat idea to have a little iPod-like thing with cellular connectivity.&lt;/li&gt;
&lt;li&gt;I like the idea of having access to things like calendar, weather, directions, etc. without having my phone along.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One could say, &amp;ldquo;if you&amp;rsquo;re getting all that utility out of the watch anyhow, one easy way to carry it would be on your wrist.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://live.staticflickr.com/65535/54618930208_1787c2eeae_b.jpg" alt="tinyPod"></p>
<p>I forgot I even ordered a <a href="https://thetinypod.com">tinyPod</a> until it showed up at my door Wednesday. I ordered it a very long time ago. (Checked the mail after posting this: <em>10 months ago</em>!)</p>
<p>It, uh, it turns your Apple Watch into an Apple Watch encased in plastic with a scroll wheel.</p>
<p>I think the logic of this purchase was:</p>
<ul>
<li>I don&rsquo;t really like my Apple Watch as a watch anymore. I am wearing my field watch these days.</li>
<li>It seems like a neat idea to have a little iPod-like thing with cellular connectivity.</li>
<li>I like the idea of having access to things like calendar, weather, directions, etc. without having my phone along.</li>
</ul>
<p>One could say, &ldquo;if you&rsquo;re getting all that utility out of the watch anyhow, one easy way to carry it would be on your wrist.&rdquo;</p>
<p>Fair point!</p>
<p>In this case, I had just sort of moved on from wearing any kind of wearable and was back to my trusty titanium field watch, and I couldn&rsquo;t bring myself to sell the Apple Watch because I doubted I&rsquo;d get much for it. The &lt;$100 I paid for the tinyPod meant I could have a little connected device that wasn&rsquo;t a phone, and do something with the watch that I kept not selling.</p>
<p>I think the natural niche for these is probably &ldquo;get a deal on a used Apple Watch, convert it to one of these things to have a smart iPod nano.&rdquo;</p>
<p>Oh, details, I guess:</p>
<p>A few of the buttons are a little stiff/vague, but the main one works well enough. The scroll wheel is fine; though you sort of want the middle bump to be a clicker and it isn&rsquo;t. The natural way to operate the screen is with your thumb and that works fine. There&rsquo;s a cutout in the back so you can use your watch charger with it. It feels very nice and solid in the hand. They did a nice job with most of the design: It fits right in with an AirPods case.</p>
<p>I&rsquo;d really like it if someone just made something like this that was a purpose-built connected smart device in a tiny, non-phone form-factor. There is some serious wasted space in this thing that could go to battery. In low power mode with all the health detection features turned off, it sips power. I think a solid week from a charge could be a reasonable expectation.</p>
<p>And the why is just &ldquo;I don&rsquo;t like carrying a slab around in my pocket, and I don&rsquo;t like all the things that slab does, but I do want access to a limited amount of data now and then.&rdquo;</p>
<p>A few years back I got into a habit I liked of just leaving my phone and not having it around the house, and leaving it behind sometimes when I went out for coffee or whatever. My job affords me some roaming and flexibility, and it&rsquo;s nice to be able to go, &ldquo;oh, when&rsquo;s that thing I&rsquo;ve got to be back at my desk for?&rdquo; without having a phone to do that.</p>
<p>I guess it&rsquo;s partly an esthetic thing, partly a bent kind of over-optimization, and partly contrarianism. I guess I like some of the things that smartphones allow, but sort of hate that smartphones continue to get bigger and do more.</p>
<p>Anyhow, I guess I <em>have</em> a tiny connected device that can do all that stuff now, and I <em>don&rsquo;t</em> need to haul my phone around or have it to fuck around with when I&rsquo;ve generally been happier when, sitting and waiting for my order, or for the movie to start, or whatever, I&rsquo;m not doing anything but sitting quietly and thinking about whatever.</p>
<p>Okay. I guess I&rsquo;m okay with this thing. Thank you past me. You were momentarily inscrutable and mysterious, but you made a good call.</p>
]]></content:encoded>
    </item>
    <item>
      <title>More on managing Taskwarrior (and integrating with mutt and notes-tui)</title>
      <link>https://mike.puddingtime.org/posts/2025-06-26-more-on-managing-taskwarrior-and-integrating-with-mutt-and-notes-tui/</link>
      <pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-26-more-on-managing-taskwarrior-and-integrating-with-mutt-and-notes-tui/</guid>
      <description>&lt;p&gt;After a few days of fiddling, I almost feel like Taskwarrior is dialed in.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve got a pair of aliases that take away some of the wordiness of task entry: &lt;code&gt;twa&lt;/code&gt; and &lt;code&gt;twp&lt;/code&gt; for things that get either the work or personal tag. If I want to add metadata I can, but if I need to just dash something in, it&amp;rsquo;s fast.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve set up a &lt;code&gt;work&lt;/code&gt; context, a &lt;code&gt;personal&lt;/code&gt; context (which is just &lt;code&gt;not tagged work&lt;/code&gt;), and a &lt;code&gt;contacts&lt;/code&gt; context. So it&amp;rsquo;s easy to cut away the noise from different areas of concern.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>After a few days of fiddling, I almost feel like Taskwarrior is dialed in.</p>
<p>I&rsquo;ve got a pair of aliases that take away some of the wordiness of task entry: <code>twa</code> and <code>twp</code> for things that get either the work or personal tag. If I want to add metadata I can, but if I need to just dash something in, it&rsquo;s fast.</p>
<p>I&rsquo;ve set up a <code>work</code> context, a <code>personal</code> context (which is just <code>not tagged work</code>), and a <code>contacts</code> context. So it&rsquo;s easy to cut away the noise from different areas of concern.</p>
<p>I customized <code>priority</code> to <code>p1</code>, <code>p2</code>, and <code>p3</code> and I customized <code>estimate</code> to ye olde Fibonacci sequence.</p>
<p>I tried using the start/stop functionality and it created an overwhelming amount of visual noise, so I promptly quit doing that, and had such a bad reaction that I ended up radically simplifying the color scheme:</p>
<ul>
<li>red: overdue</li>
<li>paleish orange: due next 48 hours</li>
<li>yellow: active tasks, which by convention I am limiting to my most important project</li>
<li>normal text: the rest</li>
<li>cyan: a &ldquo;project container&rdquo;</li>
</ul>
<p>On that last, Taskwarrior doesn&rsquo;t really have subtasks. It does have dependencies and it does have projects. I&rsquo;m not sure where I&rsquo;m at on the lack of subtasks. Right now I&rsquo;m feeling my way through. One way I&rsquo;ve adapted is to make a task that I tag with <code>project</code> that states the outcome of the project. Something like &ldquo;Turn off Otter Integration.&rdquo; Then I set the date I want that to happen and tag it <code>project</code> as well as add it to, e.g. <code>project:otter</code> along with all the related tasks.</p>
<p>When I run the big task list report, the project deadlines/delivery dates all show up in cyan, so I can get a sense of relative timing of everything I have going on, or will have going on, and how much stuff is between me and getting that thing done.</p>
<p>I&rsquo;m trying to be sort of roadmappy/backloggy about all this. I am trying to avoid prematurely assigning due dates until I feel pretty confident I can honor them, or until I&rsquo;m getting close enough to &ldquo;due&rdquo; on a project that I better make a plan.</p>
<p>Since I due-sort everything on my lists, it means there&rsquo;s sort of a pool of undated tasks down at the bottom of the report just bumping around. That&rsquo;s fine. They&rsquo;re the backlog. The meaningful action is the stuff to the top of the list with light color-coding for the stuff I&rsquo;ve decided needs to happen right now. If I want to start more detailed scheduling on a given project, I can just run the list for it, e.g. <code>task project:otter</code>, and then assign due dates on as much as I need to keep going. If I want to go prospecting, I can run <code>task undue</code> to find things without dates.</p>
<p>I once knew an engineering director the project managers dreaded because he wanted to plan out and schedule the next six sprints in detail, then re-ripple the plan at every sprint close. Basically pantomime horse Agile, I guess, shoving Jira tickets around a board. It was tedious make-work in the service of a fundamental hypocrisy of the place we were working, which was that we&rsquo;d &ldquo;gone Agile&rdquo; but weren&rsquo;t at all Agile.</p>
<p>I am not making software. I&rsquo;m just running an IT org in the middle of a pre-IPO tech company. That company has four or five processes for everything and has the usual struggles around alignment and prioritization that 600 people are going to have. A lot of deadlines are negotiable. The hardest deadlines tend to be based on contract cycles or compliance motions. So there&rsquo;s no sense in me deciding I&rsquo;m going to be utter death about turning off the Otter integration on time: It isn&rsquo;t costing money, it&rsquo;s just making Legal nervous and it&rsquo;s annoying me. So planning it all out is pointless, unrealistic, and fussy.</p>
<p>On the other hand, there&rsquo;s that one app I&rsquo;ve been gunning for two years running, I keep missing the window to run a sunsetting motion, and this is the year for it. That requires some detailed dates.</p>
<p>I&rsquo;m leaving some Taskwarrior stuff on the table:</p>
<p>It has a calculated &ldquo;urgency&rdquo; score that I have disabled on all the task lists and taken out of the color scheme. It&rsquo;s information overload and I don&rsquo;t need it.</p>
<p>You can make things active and inactive. That also makes more visual noise than adds clarity, though I am experimenting with making all the tasks in the highest priority project active and giving them a different color treatment so I can keep them in easy view.</p>
<p>There are dependencies. Yet more detail that I don&rsquo;t need to manage. If I get into something so deep that I need to do dependency mapping, the staff program manager will probably be insisting she be allowed to get involved, and all that shit is going in Jira.</p>
<p>So I think what I&rsquo;m left with is a task list that has some nice ways of storing task metadata (tags, projects, due dates, priority, estimation) without needing to manage fussy plaintext syntax: Taskwarrior uses sqlite, so while you need to type it in correctly, you don&rsquo;t have to worry about an errant semicolon blowing up your carefully manicured plaintext todo list.</p>
<p>You can leave a lot of features on the table if you like, and everything is amenable to customization.</p>
<h2 id="tying-into-notes-tui">Tying into notes-tui</h2>
<p>Today I spent some time working on integrating this with notes-tui, which is now mostly compatible with Denote, meaning every file has an identifier.</p>
<ul>
<li>I added a feature to notes-tui to open a note by identifier</li>
<li>I added a custom data type to Taskwarrior to store a note identifier</li>
<li>I added a command to notes-tui to create a Taskwarrior task storing the note identifier</li>
<li>I have a wrapper script that lets me type <code>tasknote 52</code> (or whatever task number) and open the associated note.</li>
</ul>
<h2 id="tying-into-mutt">Tying into mutt</h2>
<p>Likewise, I have a mutt macro that creates a task with the subject and sender and stores the msgid in a custom field in the task, and a wrapper script that finds the associated message for a task in mutt and opens it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>On Monokai Pro</title>
      <link>https://mike.puddingtime.org/posts/2025-06-26-on-monokai-pro/</link>
      <pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-26-on-monokai-pro/</guid>
      <description>&lt;p&gt;I really like the Monokai Pro theme. I&amp;rsquo;m using it in Helix as I write this post. Specifically, I really like the &amp;ldquo;Ristretto&amp;rdquo; sub theme, which hits a really nice note with its browns, oranges, and cyans. (Green figures heavily in it, too, and it&amp;rsquo;s one of those things where it can be used well or used too much, so I won&amp;rsquo;t use kitty&amp;rsquo;s version of Ristretto because I&amp;rsquo;d need to go in and figure out how to swap out the green in my shell color scheme and haven&amp;rsquo;t yet.)&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I really like the Monokai Pro theme. I&rsquo;m using it in Helix as I write this post. Specifically, I really like the &ldquo;Ristretto&rdquo; sub theme, which hits a really nice note with its browns, oranges, and cyans. (Green figures heavily in it, too, and it&rsquo;s one of those things where it can be used well or used too much, so I won&rsquo;t use kitty&rsquo;s version of Ristretto because I&rsquo;d need to go in and figure out how to swap out the green in my shell color scheme and haven&rsquo;t yet.)</p>
<p>So today I made Monokai Pro Ristretto themes for mutt and Taskwarrior, and in the process discovered that there&rsquo;s a business entity that licenses an icon pack and themes for a few editors. It grants an endless demo license or you can pay a few Euro to license it for your editor, so there&rsquo;s not exactly a heinous money grab involved. If Monokai has been involved in cease and desists against terminal theme authors, feel free to inform me.</p>
<p>But I&rsquo;ve been seeing Monokai, Monokai Pro, and the assorted variants around forever, everywhere, and never realized anyone was selling licenses. I&rsquo;d be gobsmacked if any of the people shipping Monokai Pro themes (as opposed to plain old Monokai) licensed them for distribution. I get the impression the designer is happy to get a few euro for his efforts and more pleased to have made a thing that is literally everywhere.</p>
<p>Anyhow, I guess there&rsquo;s sort of an applied ethics thing here, which is &ldquo;now I know,&rdquo; so I&rsquo;ll keep what I came up with to myself and slide a few bucks to the designer, because Monokai and/or Monokai Pro has been a goto for me on every terminal app and editor I&rsquo;ve used that supports it for a while, and the creator has signaled that he&rsquo;d like some money for his work.</p>
<p>You can read about <a href="https://monokai.pro/history">Monokai Pro&rsquo;s history</a> from back in TextMate days to today if you&rsquo;re curious. I think if my theme had screen time on an episode of <em>Silicon Valley</em> I&rsquo;d be jazzed, too.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Seeking the right kind of friction</title>
      <link>https://mike.puddingtime.org/posts/2025-06-24-seeking-the-right-kind-of-friction/</link>
      <pubDate>Tue, 24 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-24-seeking-the-right-kind-of-friction/</guid>
      <description>&lt;p&gt;I picked TaskWarrior as an entry point into CLI todo tools. There are a lot of them, and the struggle between Danny-O&amp;rsquo;Brien-style &amp;ldquo;just write it in a text file&amp;rdquo; minimalism and &amp;hellip; the other extreme &amp;hellip; is real.&lt;/p&gt;
&lt;p&gt;I picked TW because it has been around forever. I will not presume to judge its design decisions. I can tell a few strategically placed aliases would do a lot to remove the sense of crushing overhead. I also picked it because it is super scriptable, so it was easy to build a tasks backend into my contacts TUI with it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I picked TaskWarrior as an entry point into CLI todo tools. There are a lot of them, and the struggle between Danny-O&rsquo;Brien-style &ldquo;just write it in a text file&rdquo; minimalism and &hellip; the other extreme &hellip; is real.</p>
<p>I picked TW because it has been around forever. I will not presume to judge its design decisions. I can tell a few strategically placed aliases would do a lot to remove the sense of crushing overhead. I also picked it because it is super scriptable, so it was easy to build a tasks backend into my contacts TUI with it.</p>
<p>I decided, alongside implementing TaskWarrior support, that I&rsquo;d probably better implement Things support. Of all the task management tools I&rsquo;ve ever used, Things has been the most sticky, because it&rsquo;s always lurking around whatever device from the last time I used it, and it is so easy to ramp back up. Whenever I pick Things back up again I collapse the sidebar and live in the Inbox list until it gets to the point I&rsquo;m setting up projects again. So I added Things support in case TaskWarrior turned into a misadventure, as these things can.</p>
<p>The best way to describe my relationship to any task management tool is probably &ldquo;anticipated decay&rdquo; I never get into one thinking &ldquo;this is it forever.&rdquo; I know it&rsquo;s going to follow a cycle:</p>
<ul>
<li>Tentative first steps, barely justifying its existence over a legal pad or Apple Reminders with just one todo list</li>
<li>Creeping complexity: Projects, areas, tagging, subtasks</li>
<li>Data entry simplification. If there&rsquo;s a hotkey, widget, Raycast thinger or whatever, I&rsquo;m all about it. This is always the beginning of the end. It really should not be easy to make work for yourself.</li>
<li>Fully operational battle station. A sense of pleased familiarity when I review what&rsquo;s in it each day.</li>
<li>Minor vibrations and oscillations as priorities shift; increasing in intensity until I dread reviewing what&rsquo;s in it each day.</li>
<li>Collapse. I go into crisis for a few weeks and write a few hasty export scripts to at least remember what plates were spinning. Then I walk away.</li>
</ul>
<p>Inevitably, somewhere between the &ldquo;things are getting real with this thing&rdquo; and the &ldquo;I need to make the process of making work for myself buttery smooth,&rdquo; the mobile or multi-platform questions rear their heads.</p>
<p>I imagine life without being able to consult my many deliverables from my phone and some unpleasant part of my personality sends a jolt to the pain and nausea centers, hitting the intersection of old work trauma and pigheaded nerd completionism.</p>
<p>The old work trauma is simple to explain:</p>
<p>My first well-paying job was for an online content play whose leadership utterly failed to anticipate the devastation of the dotcom bust in the early aughts.</p>
<p>When they hired me I was a recently discharged paratrooper splitting my days between running a database for a school and doing secretarial work. The pay was miserable, but my half of the rent came out to $250 a month so I spent my time screwing around with that database and getting called &ldquo;four-eyes&rdquo; by the kids who got sent to the office. I wrote a long comment about <code>man</code> pages on Slashdot that caught the attention of a Linux.com editor who turned it into an article, and that caught the notice of a website editor who offered me 3x the pay to come write a story a week, moderate comments, and keep a newswire site running.</p>
<p>So when the good times began to run out the next year, and the layoffs started, my little workgroup went from 15 people to just me in about six months because, I later figured out, &ldquo;3x part-time database, part-time secretary pay&rdquo; was still pretty cheap in the online content world at the time.</p>
<p>But I was terrified of losing that job. Terrified at the prospect of being laid off. I spent one nine-month stretch working every single day of the week. I got good at a very primitive sort of early 2000s mobile computing because if I wanted to leave the house on a Sunday afternoon, I needed to at least moderate comments from a device, somehow.</p>
<p>Eventually some things went really, really wrong with that place and I quit caring whether I kept the job or not, and I finally just left and went back to school, but I never really lost the habit of thought that some mobile access is very, very important.</p>
<p>When I pause for a moment and have a thought, I realize that is mostly ridiculous.</p>
<p>At work, I live on director time. I&rsquo;m struggling mightily to imagine a scenario where I would need to know the details of some particular task on the spot, or where it would not be okay for me to say, &ldquo;you know what, I know that&rsquo;s in my tracker. When I get home I&rsquo;ll Slack it to you.&rdquo;</p>
<p>In my personal life, again, no. Groceries, I guess, but those go in Apple Reminders because we&rsquo;re an Apple family, as do most little one-offs.</p>
<p>Someone, somewhere mightily disagrees with all this. That is fine. I&rsquo;ve been reading about peoples&rsquo; assorted &ldquo;systems&rdquo; and &ldquo;methodologies&rdquo; for, like, decades. Everyone needs what they need.</p>
<p>And what I need is &ldquo;less,&rdquo; because my unchecked impulse is to optimize for things that I don&rsquo;t need to optimize for just because I can, and because the <em>correct</em> direction for anything having to do with work and a mobile device is toward little more than &ldquo;whatever I need to answer a management on-call page or do backup 2FA for Okta.&rdquo;</p>
<p>So as I was fussing around figuring out the useful aliases to set up for TaskWarrior I had a brief &ldquo;but how do I check tasks on my iPhone?&rdquo; thought that yielded gratifyingly quickly to &ldquo;I know there are ways, but just don&rsquo;t allow for that use case this time.&rdquo;</p>
<p>So I&rsquo;m not.</p>
<p>There&rsquo;s a tiny bit of friction in the system as a result, and I think that is fine.</p>
<p>I do some extra data entry: During the day I have a daily note with Markdown checkboxes for todos I acquire during meetings and 1:1s. I have a calendared reminder called &ldquo;clear the decks&rdquo; around five on weekdays that is my cue to sweep the tasks from my daily note into my task system, when I can think about describing them better. My notes tool has an &ldquo;unchecked box&rdquo; search I can use to make sure I haven&rsquo;t missed a stray item.</p>
<p>This afternoon&rsquo;s deck sweeping netted a few things that I shouldn&rsquo;t have written down in the first place, and a chance to catch a pattern from reviewing the day that I missed in three separate moments during the day.</p>
<p>As with any CLI tool, a certain amount of practice is in order, so I&rsquo;ve invested some time doing a lot of manual task entry just to get the basic syntax burned in. Yes, I briefly considered scripting an import, but decided to do it the hard way for the practice, so no AI-fueled moral hazard for me!</p>
<p>(While I was puttering around, I was briefly reminded of when I was a really big fan of the old <a href="https://dianne.skoll.ca/projects/remind/">Remind</a> app, too.)</p>
<p>Anyhow, it&rsquo;s been sort of interesting rewiring my brain around CLI/TUI tools the past few weeks. My sense of what it means for something to be discoverable, scannable, or legible has shifted a little as I&rsquo;ve built interfaces that suit my particular sensibility about how to be keyboard-oriented. Things that initially felt a little opaque or closed-in have begun to feel more expansive.</p>
<p>I&rsquo;ve tried to be mindful about how much time things <em>really</em> take, not just how long we&rsquo;re sort of <em>conditioned</em> to think things take, or conditioned to believe are more easy or discoverable.</p>
<p>It led to a curious iteration where I got sort of tired of dealing with Emacs as an uneasy citizen of macOS, to deciding maybe if I pared back Obsidian&rsquo;s UI a ton I&rsquo;d be happier there, to wandering into my own notes app backed by Helix, where I&rsquo;ve been able to define what is most legible and discoverable to <em>me</em>.</p>
<p>It is pretty nice to just fullscreen Helix in a kitty session, or split my notes into one <a href="https://zellij.dev">Zellij</a> pane and my tasks into another. There are some tradeoffs living that life, but it feels less cluttered.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Helix and Marksman LSP server</title>
      <link>https://mike.puddingtime.org/posts/2025-06-23-helix-and-marksman-lsp-server/</link>
      <pubDate>Mon, 23 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-23-helix-and-marksman-lsp-server/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://github.com/artempyanykh/marksman&#34;&gt;Marksman&lt;/a&gt; LSP server experience with Helix is so smooth. Given a directory of Markdown files, dropping in a blank &lt;code&gt;.marksman.toml&lt;/code&gt; or running &lt;code&gt;git init .&lt;/code&gt; puts the directory on Marksman&amp;rsquo;s radar as a thing to work with. Provided Marksman is in your path, there&amp;rsquo;s no need for additional config.&lt;/p&gt;
&lt;p&gt;Drop into insert mode, start typing wikilink brackets (&lt;code&gt;[[&lt;/code&gt;) and it invokes autocomplete on every file in the directory.&lt;/p&gt;
&lt;p&gt;Placing the cursor over a wikilink, you can use &lt;code&gt;gd&lt;/code&gt; (&lt;code&gt;go to definition&lt;/code&gt;) to open that file in a new buffer.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The <a href="https://github.com/artempyanykh/marksman">Marksman</a> LSP server experience with Helix is so smooth. Given a directory of Markdown files, dropping in a blank <code>.marksman.toml</code> or running <code>git init .</code> puts the directory on Marksman&rsquo;s radar as a thing to work with. Provided Marksman is in your path, there&rsquo;s no need for additional config.</p>
<p>Drop into insert mode, start typing wikilink brackets (<code>[[</code>) and it invokes autocomplete on every file in the directory.</p>
<p>Placing the cursor over a wikilink, you can use <code>gd</code> (<code>go to definition</code>) to open that file in a new buffer.</p>
<p>In other Helix progress notes, I briefly had a bunch of vim keybindings set up to quit stumbling over the evil muscle memory I picked up from Doom Emacs. Over the weekend, sitting in a hotel room waiting for a concert to start, I decided I wasn&rsquo;t so proficient at vim that I should cling to it, so I got rid of them.</p>
<p>That is definitely making for a few mistakes here and there, but Helix isn&rsquo;t <em>that</em> hard to pick up.</p>
<p>Other Helix stuff I picked up:</p>
<p>You can hack in Markdown auto-increment for unordered lists and tasks by saying they&rsquo;re comments in your <code>languages.toml</code> file:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">language</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">name</span> <span class="p">=</span> <span class="s2">&#34;markdown&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">comment-tokens</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;-&#34;</span><span class="p">,</span> <span class="s2">&#34;+&#34;</span><span class="p">,</span> <span class="s2">&#34;*&#34;</span><span class="p">,</span> <span class="s2">&#34;1.&#34;</span><span class="p">,</span> <span class="s2">&#34;&gt;&#34;</span><span class="p">,</span> <span class="s2">&#34;- [ ]&#34;</span><span class="p">]</span></span></span></code></pre></div>
<p>&hellip; and this lets me check off Markdown tasks with <code>spc x</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">keys</span><span class="p">.</span><span class="nx">normal</span><span class="p">.</span><span class="s2">&#34;space&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">x</span> <span class="p">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;extend_to_line_start&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;flip_selections&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;extend_to_line_end&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;extend_line&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;&#34;&#34;:pipe awk &#39;{
</span></span></span><span class="line"><span class="cl"><span class="s2">    if ($0 ~ /^- \\[ \\]/) {
</span></span></span><span class="line"><span class="cl"><span class="s2">      sub(/^- \\[ \\]/, &#34;</span><span class="nx">-</span> <span class="p">[</span><span class="nx">x</span><span class="p">]</span><span class="s2">&#34;); print;
</span></span></span><span class="line"><span class="cl"><span class="s2">    } else if ($0 ~ /^- \\[x\\]/) {
</span></span></span><span class="line"><span class="cl"><span class="s2">      sub(/^- \\[x\\]/, &#34;</span><span class="nx">-</span> <span class="p">[</span> <span class="p">]</span><span class="s2">&#34;); print;
</span></span></span><span class="line"><span class="cl"><span class="s2">    } else if ($0 ~ /^- /) {
</span></span></span><span class="line"><span class="cl"><span class="s2">      sub(/^- /, &#34;</span><span class="nx">-</span> <span class="p">[</span> <span class="p">]</span> <span class="s2">&#34;); print;
</span></span></span><span class="line"><span class="cl"><span class="s2">    } else {
</span></span></span><span class="line"><span class="cl"><span class="s2">      print &#34;</span><span class="nx">-</span> <span class="p">[</span> <span class="p">]</span> <span class="s2">&#34; $0;
</span></span></span><span class="line"><span class="cl"><span class="s2">    }
</span></span></span><span class="line"><span class="cl"><span class="s2">  }&#39;&#34;&#34;&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;goto_first_nonwhitespace&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;collapse_selection&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;move_line_down&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span></span></span></code></pre></div>
<p>When I kick off the day with a daily note I like to check whatever I&rsquo;m using for tasks to figure out the most pressing stuff, and it goes into a checklist where it&rsquo;s not an official todo, just a priority I&rsquo;ll keep seeing as I go in and out of the daily note to log stuff during the day.</p>
<p>It is a little disorienting to have a full-featured editor that launches so quickly without worrying about daemonizing it. I mean, micro is pretty full-featured and has some nice plugins, but at some point evil-mode won me over to modal editing and micro doesn&rsquo;t do that. It&rsquo;s got a remarkably flexible keymapping system, but not so flexible that you can go modal with it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Integrating notes and contacts</title>
      <link>https://mike.puddingtime.org/posts/2025-06-20-integrating-notes-and-contacts/</link>
      <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-20-integrating-notes-and-contacts/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been plugging away at another TUI app, &lt;a href=&#34;https://github.com/pdxmph/notes-tui&#34;&gt;this time for notes&lt;/a&gt;. It&amp;rsquo;s very much in line with the thing I was trying to do with bash and fzf, but instead in Go. Right now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fast search for notes in either a configured directory or one named on the command line&lt;/li&gt;
&lt;li&gt;Tag search, either in-line (&lt;code&gt;#tag&lt;/code&gt;) or in YAML frontmatter&lt;/li&gt;
&lt;li&gt;Open to-do search&lt;/li&gt;
&lt;li&gt;Hotkey to make a daily note of a given format&lt;/li&gt;
&lt;li&gt;Alternate note template. If you see the point in YAML frontmatter, it&amp;rsquo;ll do that. If you prefer &amp;ldquo;l1 heading from the title&amp;rdquo; it&amp;rsquo;ll do that.&lt;/li&gt;
&lt;li&gt;It does a very basic sort of Markdown rendering on its own for note preview, or you can configure it to shell out to bat, glow, etc. I am using glow because it has an option to edit a file under preview.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It works really well with Helix or other LSP-aware editors, because you can add the &lt;a href=&#34;https://github.com/artempyanykh/marksman&#34;&gt;Marksman&lt;/a&gt; LSP server and have your own connected notes system with wiki-linking without having to adopt another app, like Obsidian, if you don&amp;rsquo;t want that whole ride.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been plugging away at another TUI app, <a href="https://github.com/pdxmph/notes-tui">this time for notes</a>. It&rsquo;s very much in line with the thing I was trying to do with bash and fzf, but instead in Go. Right now:</p>
<ul>
<li>Fast search for notes in either a configured directory or one named on the command line</li>
<li>Tag search, either in-line (<code>#tag</code>) or in YAML frontmatter</li>
<li>Open to-do search</li>
<li>Hotkey to make a daily note of a given format</li>
<li>Alternate note template. If you see the point in YAML frontmatter, it&rsquo;ll do that. If you prefer &ldquo;l1 heading from the title&rdquo; it&rsquo;ll do that.</li>
<li>It does a very basic sort of Markdown rendering on its own for note preview, or you can configure it to shell out to bat, glow, etc. I am using glow because it has an option to edit a file under preview.</li>
</ul>
<p>It works really well with Helix or other LSP-aware editors, because you can add the <a href="https://github.com/artempyanykh/marksman">Marksman</a> LSP server and have your own connected notes system with wiki-linking without having to adopt another app, like Obsidian, if you don&rsquo;t want that whole ride.</p>
<p>This morning I realized there is an opportunity to integrate it with <a href="https://github.com/pdxmph/contacts-tui">contacts-tui</a> via tag searching, so I added a command line switch to search for a tag and launch with that tag search: <code>notes-tui --tag=@label</code>. On the <code>contacts-tui</code> side, I added a command to launch that search by tapping <code>O</code> on a selected contact.</p>
<p>Launching that tag search from contacts-tui, I end up in the notes app with all the related notes for that contact in view. I can cursor around, read the notes, etc. and when I <code>ESC</code> out of the notes app, I&rsquo;m back at the contact record in the contacts app. Tap <code>t</code> and I get a list of open tasks for that contact in TaskWarrior, Things, or dstask.</p>
<p>Or do none of that, because both tools work fine on their own.</p>
<p>It kinda gives me the idea to move contacts out of its sqlite backend and just move to plaintext serializing for contact info, with ripgrep to manage contact search.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Helix</title>
      <link>https://mike.puddingtime.org/posts/2025-06-19-helix/</link>
      <pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-19-helix/</guid>
      <description>&lt;p&gt;I had insomnia a few nights ago, so I started fiddling with different things, including the CLI tasks tool dstask, which is sort of TaskWarrior without the misanthropy. (I kid.)&lt;/p&gt;
&lt;p&gt;So a kind of nice thing about dstask is that with &lt;code&gt;dstask #{note number} note&lt;/code&gt; you pop open $EDITOR in a Markdown note attached to the task. dstask is aware of any Markdown checklists inside the task note and blocks completion of the task if there are open ones.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I had insomnia a few nights ago, so I started fiddling with different things, including the CLI tasks tool dstask, which is sort of TaskWarrior without the misanthropy. (I kid.)</p>
<p>So a kind of nice thing about dstask is that with <code>dstask #{note number} note</code> you pop open $EDITOR in a Markdown note attached to the task. dstask is aware of any Markdown checklists inside the task note and blocks completion of the task if there are open ones.</p>
<p>That&rsquo;s maybe bad for me because I am a compulsive subtask-maker with a bad habit of opening a task, loading the subtasks into my buffer, and just doing them all without looking back. So if I stick with it dstask may shape my habits that way.</p>
<p>For some annoying reason, dstask also barfs if <code>$EDITOR</code> has an argument, e.g. <code>emacsclient -nw</code>, and I found myself once again writing some kind of wrapper for emacsclient. That is not Emacs&rsquo; fault, but it raised the perennial question &ldquo;when does $EDITOR come into play and do you need a whole-ass Emacs config for those times?&rdquo;</p>
<p>So I think &ldquo;your go-to for this used to be jed, which acts like Emacs where it matters.&rdquo; But I&rsquo;ve been using evil in Emacs for years now: If I want to keep my muscle memory between quick CLI edits and my whole-ass Emacs config, what I really need is something from the <code>vi</code> family.</p>
<p>It being 3 in the morning, I embark on a tour of modern vi&rsquo;s, looking for some sweet spot of &ldquo;nimble&rdquo; and &ldquo;feature-packed.&rdquo; I burn through a few neovim tutorials and starter kits (nooooooope) before stumbling into a feud between neovim people and Helix people on reddit.</p>
<p>So around 4 I&rsquo;m running <code>brew install helix</code> and going through <code>:tutorial</code>.</p>
<p>It&rsquo;s pretty nice! It launches quickly. No plugin system so the futzmonkey sort of has to stay in its cage, but it&rsquo;s very batteries-included. I found a <a href="https://helix-editor-tutorials.com/tutorials/writing-documentation-and-prose-in-markdown-using-helix/">tutorial for setting it up for Markdown</a> that wasn&rsquo;t overwhelming and helped me get a sense of how its config works.</p>
<p>It is <em>not</em> &ldquo;just a batteries included vim.&rdquo; It has its own keybinding grammar (subject/verb, not verb/subject), so after bonking my head on those changes a few times I <a href="https://github.com/LGUG2Z/helix-vim/blob/master/config.toml">cheated</a> and lifted a few vimisms.</p>
<p>I guess I also went through a quick consideration of micro, but the CUA-style default keybindings confused me the way nano often confuses me.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Integrating task trackers with contacts-tui</title>
      <link>https://mike.puddingtime.org/posts/2025-06-18-integrating-task-trackers-with-contacts-tui/</link>
      <pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-18-integrating-task-trackers-with-contacts-tui/</guid>
      <description>&lt;p&gt;One of the best parts of my org-contacts setup was that when I moved a contact into a given state (followup, call, write, etc.) it&amp;rsquo;d become a task in my org agenda, along with all my other todos.&lt;/p&gt;
&lt;p&gt;I added integrations with TaskWarrior, dstask, and Things to contacts-tui this evening:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Put a contact in a given state, the tasks backend creates a todo in your configured tracker with that contact&amp;rsquo;s label as a tag.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>One of the best parts of my org-contacts setup was that when I moved a contact into a given state (followup, call, write, etc.) it&rsquo;d become a task in my org agenda, along with all my other todos.</p>
<p>I added integrations with TaskWarrior, dstask, and Things to contacts-tui this evening:</p>
<ul>
<li>
<p>Put a contact in a given state, the tasks backend creates a todo in your configured tracker with that contact&rsquo;s label as a tag.</p>
</li>
<li>
<p>The task view on each contact includes tasks with their contact tag. You can close them out from within contacts-tui with a note.</p>
</li>
</ul>
<p>This bridges the gap between contacts-tui and my todos, which is pretty important to me: If I want to be good at keeping up connections, I need the reinforcement that this is a thing as meaningful to me as any other thing I&rsquo;m willing to commit to a tracker.</p>
<p>The connection isn&rsquo;t truly bidirectional: If I close a task in contacts-tui, it&rsquo;s closed in the tracker. If I close a task in the tracker, it&rsquo;s still open in contacts-tui, but there&rsquo;s some incentive to just close it out there: When you do, you can include a quick note about the call, email exchange, followups, etc. to keep the system up to date. (The note you enter in contacts-tui gets added to the Things note when it closes, so you keep the information both places, fwiw.)</p>
<p>The task backends are pretty modular and follow a simple pattern with just three calls (make, find, close), so just about any CLI task tool or scriptable tool could have a backend.</p>
<p>I started with TaskWarrior last night out of curiosity. I&rsquo;ve never really warmed up to it but it&rsquo;s sorta the big CLI task tool. I like <a href="https://github.com/naggie/dstask">dstask</a> a little better and learned how to use it through a bout of insomnia last night. But cold light of day thinking told me that when I go on these CLI kicks for productivity tools they don&rsquo;t usually last, so I added Things support as the realist option.</p>
<p><a href="https://github.com/pdxmph/contacts-tui/releases/tag/v0.5.0">v0.5.0</a> has all the new stuff.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Contacts management in a TUI</title>
      <link>https://mike.puddingtime.org/posts/2025-06-17-contacts-management-in-a-tui/</link>
      <pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-17-contacts-management-in-a-tui/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/65535/54595512292_cf719d7c1e_b.jpg&#34; alt=&#34;Contacts TUI screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t really liked social networking as a development. Sometimes I&amp;rsquo;d even say I mourn its existence. I used to have people with whom I shared a great email correspondence who abandoned that in favor of the Eternal Holiday Newsletter mode of Facebook, or the &amp;ldquo;oh, I tweeted about it last week if you want to look it up&amp;rdquo; of the assorted microblogging services.&lt;/p&gt;
&lt;p&gt;The kind of conversation we can have at a BBQ you invited your high school friends to is different from the one we can have over coffee. The kinds of things I&amp;rsquo;d say to you on my front porch might even be different from what I&amp;rsquo;d say at the cafe.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://live.staticflickr.com/65535/54595512292_cf719d7c1e_b.jpg" alt="Contacts TUI screenshot"></p>
<p>I haven&rsquo;t really liked social networking as a development. Sometimes I&rsquo;d even say I mourn its existence. I used to have people with whom I shared a great email correspondence who abandoned that in favor of the Eternal Holiday Newsletter mode of Facebook, or the &ldquo;oh, I tweeted about it last week if you want to look it up&rdquo; of the assorted microblogging services.</p>
<p>The kind of conversation we can have at a BBQ you invited your high school friends to is different from the one we can have over coffee. The kinds of things I&rsquo;d say to you on my front porch might even be different from what I&rsquo;d say at the cafe.</p>
<p>So the net effect has been to have a higher volume of very lossy connections at the cost of some very meaningful and higher-fidelity connections.</p>
<p>As I get older, that has gone from something I don&rsquo;t like to something I feel very concerned about. Alison is constantly on me to stretch before and after our morning runs because she&rsquo;s right: I do not have the body that once came off a six-week layoff from a parachuting injury to run in the Ft. Bragg 10-Miler the first day I was allowed to run again. Likewise, as much as I have a few habits of thought I try to cultivate to keep from turning completely inward sometimes, there are some parts of the world that don&rsquo;t become <em>more</em> comfortable to deal with as we age. Some days, my reaction to whatever is going on out there is to wish people would just shut the fuck up about it. I think that&rsquo;s a fair, reasonable, understandable reaction, but I also think that&rsquo;s not a great place to go live.</p>
<p>As much as I&rsquo;m introverted, politely contrarian, and completely over some of the fucking takes I&rsquo;m reading, I have to stretch. As much as there are some people I&rsquo;d love to hear more and different from, at some point you just have to acknowledge that for whatever reason, those vibrant email threads petered out and are not coming back, so you have to replenish the supply of human connection.</p>
<p>During my unplanned sabbatical a couple of years ago, I realized I was going to need to settle in for a few months of being at loose ends while I figured out what was next and started to drum up opportunities. I knew I needed to network, and I also knew I needed to just interact with people. Left to my own devices, and without a plan, I knew I&rsquo;d just go full introvert and I didn&rsquo;t want to go full introvert.</p>
<p>So I set about leveraging org-contacts to build what I called the <a href="https://gist.github.com/pdxmph/c24471962cdf18e4b781718944073a12">plaintext CRM</a>: A bunch of functions that made it easier to keep in touch with people. The core ideas were:</p>
<ul>
<li>Different kinds of relationships need different kinds of attention</li>
<li>It&rsquo;s easy to lose track of a thread, so it helps to have some workflow management when you reach out to someone</li>
<li>It&rsquo;d be nice to have a log of contacts so you could remember where you left off</li>
<li>It&rsquo;d be nice to integrate this with org-mode so ticklers to ping people or follow up, or just mark a contact &ldquo;timed out&rdquo; would show up in my agenda each day.</li>
</ul>
<p>I used it for plain old social stuff during my layoff, and also to track recruiter pings. It helped me feel (and behave) a lot less transactionally about reaching out to people, because while I did have a small pitchfork at my back to get out and network, it reminded me to follow up on social stuff as well.</p>
<p>It was a good system for where I was at, because I was living in Emacs, it was sort of a fun and stunty layoff project to implement something like that in Emacs, and I was able to stick to it because it was right there in my todo system.</p>
<p>Usage fell off once I was back at work and got busy again, which has bothered me on and off for a while now.</p>
<p>Several weeks ago, I fed the elisp to Claude as a proof of concept for an MCP. The repo for that is private because I did put it into production for a period and the security studies on MCP are a little dire. They&rsquo;re just modulations on common security issues other protocols can present, but I&rsquo;m not gonna lay bare my vibe-coded contact management infra.</p>
<p>The MCP itself worked as well as a chat-based interface can, and did what a lot of AI stuff does these days: Points to something that is both pretty cool and simply not there yet.</p>
<p>The pretty cool part was making Claude aware of my contacts database and the state of contact with everyone in it. During day-planning, I had it set up to check in on the state of contacts and drop a few pings, followups, or calls into my calendar for the day. That was a small proof of concept for MCPs as a kind of executive assistant.</p>
<p>The parts that were not there yet:</p>
<ul>
<li>It&rsquo;s a slow interface. An MCP is just API calls, which are fast enough over a local network and hitting a sqlite db, but there&rsquo;s some overhead to get an LLM to invoke the tool, interpret the results, and do something with them.</li>
<li>It&rsquo;s a lossy interface. I spent a few iterations tuning instructions to get Claude to do the right thing with certain language, but there was still an element of the <a href="https://puddingtime.org/the-one-armed-bandit">one-armed bandit effect</a>: Make a comment the wrong way, and Claude would add to a contact&rsquo;s note instead of recording an interaction, for instance.</li>
<li>It&rsquo;s an opaque interface. Some of the better MCPs include some kind of CLI component so you can directly manage their state. I was stuck with telling Claude to change this or that thing once I realized it had done something I didn&rsquo;t like &ndash; a whole lost several minutes to &ldquo;show me what you did; change what you did; no not that way &ndash; this way.&rdquo;</li>
<li>It&rsquo;s a bad idea to let an LLM near this kind of information.</li>
</ul>
<p>On that last point:</p>
<p>You see people advertising their MCPs as &ldquo;running locally and completely in your control.&rdquo; Well, okay, but what the LLM is doing with that data is not completely in your control. What the LLM&rsquo;s owner is doing with that data is not completely in your control. And for a homebrew sort of hobby implementation of a new protocol in a fast-moving technology, you&rsquo;re assuming extra risk.</p>
<p>Second, I&rsquo;m just curious, not completely obtuse. I want to learn about these things &ndash; work actually <em>requires</em> me to learn about these things &ndash; but there are people with heartfelt, sincere, thought-through objections to the AI industry whom I know would not like that even innocuous data about them is being fed into an LLM maw. I&rsquo;m sorry I picked a project that involved that. I stopped at &ldquo;actual need and well-understood problem&rdquo; and didn&rsquo;t think past that.</p>
<p>So I took the MCP down, which left me a little frustrated: I really did not want to go back to managing contacts in Emacs, and I really do not like any of the alternatives I&rsquo;ve found for contact management: Finding the sweet spot of actually managing contact information and also managing the workflow of interacting with contacts has been a little hard.</p>
<p>So I teed up one last session with Claude to use the existing MCP workflows, data structures, and actions and turned them into a Go TUI that just repurposed my existing sqlite-hosted data into a database on my local disk. It does pretty much what my original elisp implementation does, but it&rsquo;s written in Go so it&rsquo;s a compact binary (and Claude is sort of a Go prodigy compared to experiments in Typsecript, Ruby, and bash).</p>
<p>I&rsquo;m pretty happy with what I got:</p>
<ul>
<li>It&rsquo;s fast.</li>
<li>It does all the contact lifecycle stuff I used to do in Emacs.</li>
<li>It adds the ability to define a custom cadence and style for some individuals, because there are folks you don&rsquo;t need to reach out to much but if you see they had a nice life event or career development, it&rsquo;s good to drop in a reminder to ping them with congratulations (or condolences).</li>
<li>It has hot keys for most interactions, so there&rsquo;s not a lot of cursoring around the interface.</li>
<li>It has some nice state-setting and filtering hot keys: Quick to find overdue contacts, filter down to family, friends, or professional network.</li>
<li>It has archiving, so for that one recruiter from a few years ago at the place you walked away from, you can get them out of the contact management cadence but keep the context for later, just in case.</li>
<li>It&rsquo;s completely local and un-networked. Not only is everyone&rsquo;s data not going into the LLM maw, it&rsquo;s not getting sucked in by anyone else trying to build their graph on your friends&rsquo; data.</li>
</ul>
<p>This version is publicly available and pretty easy to build and install on a Mac, at least:</p>
<p><a href="https://github.com/pdxmph/contacts-tui">pdxmph/contacts-tui</a></p>
<p>There are a few features mentioned in the docs for creating a fixtures db you can kick the tires with, or just onboard with a blank db and start using it. There is no contact import tooling. Given the simplicity of the sqlite backend, it&rsquo;d be pretty easy to lash up a CSV importer, and iirc it is not terribly hard to write some AppleScript to do that from the Contacts app or from a format like VCF.</p>
<p>I&rsquo;m not sure it solves anything for anyone else the way they&rsquo;d like, but it hits an intersection that&rsquo;s useful to me by creating structure to be better at something I often neglect and wish I did better.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The One-Armed Bandit</title>
      <link>https://mike.puddingtime.org/posts/2025-06-14-the-one-armed-bandit/</link>
      <pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-14-the-one-armed-bandit/</guid>
      <description>&lt;p&gt;Well, I&amp;rsquo;ve spent a few weeks now playing around with Claude on two projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An MCP for Remember the Milk&lt;/li&gt;
&lt;li&gt;An MCP for contacts management&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I haven&amp;rsquo;t read a lot of commentary on how to code with AI, and I&amp;rsquo;ll say a little more on the kind of AI-related commentary I &lt;em&gt;have&lt;/em&gt; read in a bit. Instead, I just let myself stumble into the challenges and try to figure out my way around them. The biggest ones were:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, I&rsquo;ve spent a few weeks now playing around with Claude on two projects:</p>
<ul>
<li>An MCP for Remember the Milk</li>
<li>An MCP for contacts management</li>
</ul>
<p>I haven&rsquo;t read a lot of commentary on how to code with AI, and I&rsquo;ll say a little more on the kind of AI-related commentary I <em>have</em> read in a bit. Instead, I just let myself stumble into the challenges and try to figure out my way around them. The biggest ones were:</p>
<ul>
<li>Session length. Once either project got into complexity, the amount of progress I could make in a session slowed down. Claude would end conversations for going on too long in the middle of a debugging session, and all the context would get dumped.</li>
<li>Context preservation. If you have to chain together a series of sessions to get one feature done, then you need some way for Claude to remember what it was up to.</li>
<li>&ldquo;Behavioral.&rdquo; Sometimes Claude does dumb or misguided things. Describing them would be as fun for you as making you listen to me talk about a dream I had, so I won&rsquo;t.</li>
</ul>
<p>So as I&rsquo;d pick up on a problem, I&rsquo;d look for a way to address it, and largely landed on:</p>
<ul>
<li>User preferences that stress collaborative testing, step-by-step examination of a problem, and limited ability to move on until the user has said it&rsquo;s okay to move on.</li>
<li>Specific project instructions that explain what the sources of truth are, where the local code lives, how to go about selecting what to work on, and further reinforcement that we don&rsquo;t write scripts to test scripts that test the code, etc.</li>
<li>Reliance on continuity tools of some kind.
<ul>
<li>Markdown notes of what it has gotten done so far, what it needs to know to return to work on a problem, etc.</li>
<li>Continutity notes in GitHub issues, so it can pull the original issue, then record and catch up on its own progress with comments on the issue.</li>
</ul>
</li>
<li>Remembering to explicitly dig out API docs and include them in the prompt with little nudges: &ldquo;I see a parameter asking for a location id &hellip;&rdquo;</li>
<li>Continuity prompts: &ldquo;You were doing this, you recorded progress here, as always you can read about this entire project here.&rdquo;</li>
</ul>
<p>Luke sent me <a href="https://ferd.ca/the-gap-through-which-we-praise-the-machine.html">an article that very thoughtfully dissected this process</a>:</p>
<blockquote>
<p>&ldquo;&hellip; the people I’ve seen most excited and effective about agentic work were deeply involved in constantly correcting and recognizing bugs or loops or dead ends the agent was getting into, steering them away from it, while also adding a bunch of technical safeguards and markers to projects to try and make the agents more effective. When willingly withholding these efforts, their agents’ token costs would double as they kept growing their context windows through repeating the same dead-end patterns; oddities and references to non-existing code would accumulate, and the agents would increasingly do unhinged stuff like removing tests they wrote but could no longer pass.</p>
</blockquote>
<blockquote>
<p>&ldquo;I’ve seen people take the blame for that erratic behavior on themselves (&lsquo;oh I should have prompted in <em>that</em> way instead, my bad&rsquo;), while others would just call out the agent for being stupid or useless.&rdquo;</p>
</blockquote>
<p>&hellip; then turned it around:</p>
<blockquote>
<p>&ldquo;It may sound demeaning, like I’m implying people lack awareness of their own processes, but it absolutely isn’t. The process of adaptation is often not obvious, even to the people doing it. There are lots of strategies and patterns and behaviors people pick up or develop tacitly as a part of trying to meet goals. Cognitive work that gets deeply ingrained sometimes just feels effortless, natural, and obvious. Unless you’re constantly interacting with newcomers, you forget what you take for granted—you just know what you know and get results.&rdquo;</p>
</blockquote>
<blockquote>
<p>&ldquo;By extension, my supposition is that those who won’t internalize the idiosyncrasies and the motions of doing the scaffolding work are disappointed far more quickly: they may provide more assistance to the agent than the agent provides to them, and this is seen as the AI failing to improve their usual workflow and to deliver on the wonders advertised by its makers.&rdquo;</p>
</blockquote>
<p>Phil Agre <a href="https://pages.gseis.ucla.edu/faculty/agre/how-to-help.html">wrote about this</a> years ago: &ldquo;Most user interfaces are terrible. When people make mistakes it&rsquo;s usually the fault of the interface. You&rsquo;ve forgotten how many ways you&rsquo;ve learned to adapt to bad interfaces.&rdquo;</p>
<p>Both the contacts MCP and the Remember the Milk MCP were easy assignments: The contacts MCP just keeps a sqlite database and operates under some rules about when to nudge the user to check in on a contact and what to do when the user reports a contact. The RTM MCP takes advantage of a comprehensive, mostly straightforward API, mapping each tool to an endpoint with a pretty obvious purpose.</p>
<p>I won&rsquo;t go into a ton of detail about the bad derails that still happened. The content of those derails is less the point than the simple fact that over a couple of weeks of evolving a pretty elaborate set of rituals to avoid memory issues, session length issues, and behavioral issues, there was still always a nagging sense of &ldquo;when will this go wrong and how?&rdquo;</p>
<p>For instance, the underlying Claude service itself is flakey. After a while I&rsquo;d developed a pretty good sense of when a conversation was going long, but every now and then I&rsquo;d get two or three messages into one &ndash; right at the point where the furniture had been rearranged in some function &ndash; and get a session length error. There went the context <em>and</em> all the sources of truth were out of sync with the code base.</p>
<p>Or it&rsquo;d report writing the continuity note but truncate it. Or, or, or.</p>
<p>A boss of mine once said about an early scripting effort of mine, &ldquo;it&rsquo;s not that the bear dances well, but that it dances at all.&rdquo;</p>
<p>That&rsquo;s sort of where I&rsquo;m at. In the end, I agree with this:</p>
<blockquote>
<p>&ldquo;&hellip; what is imagined is powerful agents who replace engineers (at least junior ones), make everyone more productive, and that will be a total game changer. LLMs are artifacts. The scaffolding we put in place to control them are how we try to transform the artifacts into tools; the learning we do to get better at prompting and interacting with the LLMs is part of how they transform us. If what we have to do to be productive with LLMs is to add a lot of scaffolding and invest effort to gain important but poorly defined skills, we should be able to assume that what we’re sold and what we get are rather different things.&rdquo;</p>
</blockquote>
<blockquote>
<p>&ldquo;That gap implies that better designed artifacts could have better affordances, and be more appropriate to the task at hand. They would be easier to turn into productive tools. A narrow gap means fewer adaptations are required, and a wider gap implies more of them are needed.</p>
</blockquote>
<blockquote>
<p>&ldquo;Flipping it around, we have to ask whether the amount of scaffolding and skill required by coding agents is acceptable. If we think it is, then our agent workflows are on the right track. If we’re a bit baffled by all that’s needed to make it work well, we may rightfully suspect that we’re not being sold the right stuff, or at least stuff with the right design.&rdquo;</p>
</blockquote>
<p>&hellip; because as I painstakingly evolved my &ldquo;get working code out of this thing&rdquo; workflow, there were two things on my mind:</p>
<ul>
<li>Learning how to write all this for myself would keep me from having the tool I&rsquo;ve imagined any time soon.</li>
<li>If I&rsquo;m sitting here in my living room working through this process with these readily identified limitations, other people who are starting from a place of more sophistication and more ability to do the meta-work of hiding all this tool-building I&rsquo;m doing will probably be getting on that. In fact, they are. I added an MCP called &ldquo;vibe check&rdquo; that arrested a few spinouts before they happened by making the LLM ask what its original prompt was before it does anything. The number of memory persistence MCPs is growing.</li>
</ul>
<p>On that latter bullet, I guess this puts me on the vaguely optimistic side about all this: My Brompton is a <em>great</em> implementation of a bike. Penny Farthing bikes are &ndash; given all we know <em>today</em> &ndash; a <em>terrible</em> implementation of a bike. If I tried to do an eight-mile ride downtown on a Penny Farthing bike, I&rsquo;d say &ldquo;bikes don&rsquo;t work for commuting shortish distances.&rdquo; With the Brompton, on the other hand, the gearing is excellent and does a lot to offset those 16&rdquo; wheels. It&rsquo;s <em>fine</em> for six or eight miles. Given the kind of Schwinn I had in grade school, with a banana seat, a big lever for a shifter, and high handle bars for that cool chopper look, I&rsquo;d probably say &ldquo;bikes aren&rsquo;t great for commuting medium distances, but are fine for a spin around the neighborhood, and I can see how a few design changes could make them better.&rdquo;</p>
<p>The metaphor breaks down quickly the second you shift out of &ldquo;does it work&rdquo; questions and move into asking &ldquo;what is the return given the consumption of resources?&rdquo; whether that&rsquo;s electricity, water, developer hours lost to correcting spinouts, support tickets, or the human toll of inevitable misapplications at all levels of society.</p>
<h2 id="the-one-armed-bandit">The one-armed bandit</h2>
<p>So, I&rsquo;m glad to be sitting here writing instead of sitting on top of Claude, waiting for it to invent a non-existent API call, forget that a given parameter is an id and not a string, crash and burn with a partially edited private function I hadn&rsquo;t realized was in there, or take it upon itself to push a broken image into production.</p>
<p>My two MCPs work pretty well, harmonizing with each other the way I hoped they would, giving me a conversational interface into personal planning that does a good job of &ldquo;remembering&rdquo; stuff and getting it back in front of me when I need it to. Claude itself has written READMEs that vastly oversell what it is accomplishing, because it has never met a project it has worked on with anything other than intimations of brilliance and completeness.</p>
<p>I had a good experience working on these things in a few ways. I got working tools, learned a bit more about what the tech is good for and not, and just as I was deep in the process, MCPs flared up as a security topic at work. It was very, very useful to be able to listen patiently, knowing something about how these things work, and have a useful opinion or two about how to characterize the risk they pose.</p>
<p>During this period, there was no avoiding The AI Discourse, and that was less fun. The discursive environment is up to the same shit it is with everything, and my deep annoyance with rhetorical moves that involve psychologizing people with whom we disagree has found no relief.</p>
<p>But for as much as the experience was edifying and interesting, the image that kept coming to mind was a slot machine, or a video poker game.</p>
<p>I once ended work early during a week in Las Vegas, gave myself an allowance to try gambling, and had a pretty terrible experience with it all. Years later I read that humans are succeptible to gambling addiction because we&rsquo;re very inclined to seek patterns, and very inclined to misinterpret things as patterns, and easily unhinged by rewards we believe we can unlock if we just figure out the pattern.</p>
<p>If you&rsquo;ve never gambled but have sat up all night trying to beat that one boss, getting worse and worse at it as you get more and more tired and frustrated, that&rsquo;s sort of how a bad session with Claude felt, because yes, these things &ldquo;work,&rdquo; but for particular definitions of &ldquo;work&rdquo; that have to include the derails, setbacks, workarounds, constant vigilance, and ever-present awareness that Anthropic, OpenAI, Google, or whichever could twist some tuning screw down in the clockwork and alter the thing&rsquo;s operating model in a way that throws it all out of sync, creating more digressions to unwind.</p>
<p>In the end, that level of engagement with the toolmaking tool to get the tools I was trying to make was sort of exhausting. I kept thinking of Bill Murray in <em>Groundhog Day</em>, waking up every morning to Sonny and Cher, wondering how far I&rsquo;d make it.</p>
<p>Funny enough, Claude itself sort of pointed that out to me, because a few weeks ago I added something to my user preferences called &ldquo;Focus Guardian,&rdquo; which is a set of directives to catch me spiraling on stuff that is not what I want to spend my time on. Diving into yet another session to add just one more feature, with all the uncertainty of whether it&rsquo;d be a quick walk in the park or a long slog, the focus guardian protocol kicked in and asked &ldquo;are you doing this because it furthers one of the things that brings you joy or because you&rsquo;re curious about some new tool or over-optimizing? Is there a writing project you could tackle instead?&rdquo;</p>
<p>I guess AI &ldquo;works.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Remember the Milk MCP</title>
      <link>https://mike.puddingtime.org/posts/2025-06-07-remember-the-milk-mcp/</link>
      <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-07-remember-the-milk-mcp/</guid>
      <description>&lt;p&gt;I have a lot of todos and a lot of meetings. I hate playing task/calendar Tetris. Sometimes my task list gets way out in front of my calendar. I got pretty curious about &amp;ldquo;what is an MCP and how do they work?&amp;rdquo; So this morning, when I woke up early anyhow, I set about to work with Claude to make a Remember the Milk MCP using some stuff I learned from making imgup.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have a lot of todos and a lot of meetings. I hate playing task/calendar Tetris. Sometimes my task list gets way out in front of my calendar. I got pretty curious about &ldquo;what is an MCP and how do they work?&rdquo; So this morning, when I woke up early anyhow, I set about to work with Claude to make a Remember the Milk MCP using some stuff I learned from making imgup.</p>
<p>I set a goal of getting enough functionality in the MCP right away to start using the MCP to help manage development by keeping the project backlog in it.</p>
<p>And my long-term (for as long-term as &ldquo;get this done before lunch&rdquo; can be) goal was &ldquo;get this into a place where I can use Claude&rsquo;s connection to my calendar and RTM to do a planning session.&rdquo;</p>
<p>A couple of things went well, a couple of things did not:</p>
<p>I did a test implementation of an MCP for Things last night. It went really quickly because the Things scripting API is pretty simple overall, until it didn&rsquo;t go quickly because there are blind spots in either the Apple Events (Applescript/JXA) or URL scheme APIs. But a lot of time was eaten up by the fact that Applescript APIs are a bit more opaque to Claude than a published API. RTM on the other hand, has a pretty thoroughly documented one that Claude was able to grok in one shot most of the time.</p>
<p>I set aside the Things implementation because RTM is, overall, a more feature-complete tool, and its mental model is a bit more like mine. I think when I got to the part of the Things doc about prioritization that read sort of like a climb-down from an orthodox position, I felt a little impatient.</p>
<p>So, getting the foundations layed in for RTM worked well.</p>
<p>At one point, my very methodical approach to keeping project context intact worked against me, because I let Claude pick what to work on next and it rabbitholed on something it had done, but hadn&rsquo;t marked as done in the project todos, because I have pretty rigid Project Instructions to keep things focused on preserving context. It managed to exhaust its chat length spinning out, left some half-complete work in place, and it took a lot of screwing around to sort out the damage.</p>
<p>At one point mid-morning the Claude API started getting irritable and dumped a few chats mid-session. I downshifted from Opus to Sonnet and that helped it move faster, but at the expense of having to get very controlling about its test cycle and occasionally needing to go look up API calls and explain them to it.</p>
<p>But by lunch time it was pretty far along. Far enough along that I set up Project Instructions for a personal organization project that:</p>
<ul>
<li>Allows Claude to work with my Google calendar and RTM to examine priorities and figure out good start times given my time estimates</li>
<li>Catch when people, tasks, and meetings intersect, flagging those for a daily note</li>
<li>Create Markdown project notes out of projects I have it create in RTM so I&rsquo;ve got a place to hold more context</li>
<li>Reprioritize, defer, flag, and remove assorted tasks</li>
</ul>
<p>I&rsquo;ve tried a few variants of this kind of workflow over the past month with different tools and approaches, and this is the most fluid I&rsquo;ve managed to get it, combining calendar access, a todo app, and an LLM with structured guardrails on what goes where and what does what.</p>
<p>In the background, I&rsquo;ve woken my <a href="https://gist.github.com/pdxmph/c24471962cdf18e4b781718944073a12">plaintext people relationship manager idea</a> back up, because once I realized MCPs are not the most complex things on the planet, and that I&rsquo;ve got a working way to talk to an LLM about things I need to do, it&rsquo;d be pretty simple to move the contact management workflow into sqlite for state, and delegate the contact workflow to whatever task backend I want to use. The last time I came at this idea I felt pretty sharply at odds with other peoples&rsquo; ideas of what a good contact manager on the Mac is for what I want to keep track of.</p>
<p>Anyhow, <a href="https://github.com/pdxmph/rtm-mcp">here&rsquo;s the MCP</a>. Just a hunk of Ruby with a script-driven OAuth onboarding workflow. I mean to just live with it for a while and see how it goes.</p>
]]></content:encoded>
    </item>
    <item>
      <title>imgup v0.12.0 (flipping the script)</title>
      <link>https://mike.puddingtime.org/posts/2025-06-05-imgup-v0120-flipping-the-script/</link>
      <pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-05-imgup-v0120-flipping-the-script/</guid>
      <description>&lt;p&gt;One of my bigger annoyances with Lightroom CC is how magestically indifferent it is to anything a normal human being using a Mac in 2025 might want to with it in the way of sharing your pictures. It is a literal void on the desktop: AppleScript? lol. Even the standard macOS share sheet? Nope. You can export out to disk, and you can share things to Adobe&amp;rsquo;s own services. If you want more extensibility or flexibility well, go use Lightroom Classic.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>One of my bigger annoyances with Lightroom CC is how magestically indifferent it is to anything a normal human being using a Mac in 2025 might want to with it in the way of sharing your pictures. It is a literal void on the desktop: AppleScript? lol. Even the standard macOS share sheet? Nope. You can export out to disk, and you can share things to Adobe&rsquo;s own services. If you want more extensibility or flexibility well, go use Lightroom Classic.</p>
<p>LR CC does offer one out, though: It has this idea of &ldquo;Connections,&rdquo; of which there are very few. One of them happens to be SmugMug. So as I ponder whether I want to stick with Lightroom as my DAM &ndash; and I am leaning against, but feel very fluid with it as an editing tool &ndash; I realized I can save a tiny bit of the wasted motion Lightroom&rsquo;s blinkered refusal to participate in a normal &ldquo;share this image to these desktop endpoints and services&rdquo; by using imgup to not just <em>push</em> up to backend storage services, but <em>pull</em> from them as well.</p>
<p>So I&rsquo;ve added <code>pull</code> to its list of things it can do as a cheap and cheerful way to squirt a few images from Lightroom up to a SmugMug album, then make a post from the CLI.</p>
<p><code>imgup pull</code> takes a few arguments: the number of images to pull, any post text you care to add, which storage backend, which album on that backend, and which destination social media services (Mastodon or Bluesky right now).</p>
<p>So:</p>
<p><code>imgup pull 5 --service smugmug --album &quot;uploads&quot; --mastodon --post &quot;Pictures from the show&quot;</code></p>
<p>&hellip; will trigger a pull from the last five images. If you&rsquo;re using a plain old terminal, you get a list of image filenames and the description metadata if you took the time to add it at some point. Pick the index numbers of the ones you want to post and imgup will make a post to Mastodon pulling in the tags from each image.</p>
<p>If you&rsquo;re using kitty and set <code>kitty_thumbnails&quot;: true</code> you get thumbnails to help you make the right choice.</p>
<p><a href="https://www.flickr.com/photos/98806759@N00/54570607303"><img src="https://live.staticflickr.com/65535/54570607303_302bc6e8c7_b.jpg" alt="imgupv2 using Kitty for thumbnail preview"></a></p>
<p>If you leave out the <code>--post</code> switch, you get the same list and can make your selection, and imgup generates JSON and opens it in <code>$EDITOR</code>. There you can add the post text, tweak alt tags, etc. before closing the file, which pipes it back in for sharing to Mastodon or Bluesky.</p>
<p><code>pull</code> has one other thing it can do, which is filter by tags with the <code>--tags</code> switch.</p>
<p><a href="https://github.com/pdxmph/imgupv2/">v0.12.0 is up on GitHub</a>.</p>
<p>If you use Homebrew, the easy way to get it is:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">$ brew tap pdxmph/tap
</span></span><span class="line"><span class="cl">$ brew install --cask pdxmph/tap/imgupv2</span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>imgupv2 0.9.0 - Bluesky, multi-image, caching</title>
      <link>https://mike.puddingtime.org/posts/2025-06-03-imgupv2-090-bluesky-multi-image-caching/</link>
      <pubDate>Tue, 03 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-03-imgupv2-090-bluesky-multi-image-caching/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/65535/54566811333_767aa432cf_b.jpg&#34; alt=&#34;Screenshot of imgupv2 ready to upload multiple images with indicators for completed alt text&#34;&gt;&lt;/p&gt;
&lt;p&gt;I pushed out &lt;a href=&#34;https://github.com/pdxmph/imgupv2&#34;&gt;imgupv2 0.9.1&lt;/a&gt;. It&amp;rsquo;s what I&amp;rsquo;d call feature complete:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multi-image posting to Flickr, Smugmug, Bluesky, and Mastodon&lt;/li&gt;
&lt;li&gt;world&amp;rsquo;s crabbiest, most indifferent caching strategy&lt;/li&gt;
&lt;li&gt;GUI for posting straight from Apple Photos or Finder selection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I kinda like where it ended up with multi-images from the command line. They were super clunky using standard command line switches and positional arguments, and I think that&amp;rsquo;s a weird use case for the command line, but it&amp;rsquo;s a normal use case for automation, so the tool biases in favor of machines talking at each other in those instances:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://live.staticflickr.com/65535/54566811333_767aa432cf_b.jpg" alt="Screenshot of imgupv2 ready to upload multiple images with indicators for completed alt text"></p>
<p>I pushed out <a href="https://github.com/pdxmph/imgupv2">imgupv2 0.9.1</a>. It&rsquo;s what I&rsquo;d call feature complete:</p>
<ul>
<li>multi-image posting to Flickr, Smugmug, Bluesky, and Mastodon</li>
<li>world&rsquo;s crabbiest, most indifferent caching strategy</li>
<li>GUI for posting straight from Apple Photos or Finder selection</li>
</ul>
<p>I kinda like where it ended up with multi-images from the command line. They were super clunky using standard command line switches and positional arguments, and I think that&rsquo;s a weird use case for the command line, but it&rsquo;s a normal use case for automation, so the tool biases in favor of machines talking at each other in those instances:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="c1"># Create JSON and pipe it</span>
</span></span><span class="line"><span class="cl"><span class="n">echo</span> <span class="s1">&#39;{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;images&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;path&#34;</span><span class="p">:</span> <span class="s2">&#34;/path/to/image1.jpg&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Sunset&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Beautiful sunset&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;tags&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;sunset&#34;</span><span class="p">,</span> <span class="s2">&#34;photography&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;alt&#34;</span><span class="p">:</span> <span class="s2">&#34;Orange sunset over mountains&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;path&#34;</span><span class="p">:</span> <span class="s2">&#34;/path/to/image2.jpg&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Moon&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Full moon&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;tags&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;moon&#34;</span><span class="p">,</span> <span class="s2">&#34;night&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;alt&#34;</span><span class="p">:</span> <span class="s2">&#34;Full moon in clear sky&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;social&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;mastodon&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;enabled&#34;</span><span class="p">:</span> <span class="bp">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;Some photos&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;visibility&#34;</span><span class="p">:</span> <span class="s2">&#34;public&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;bluesky&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;enabled&#34;</span><span class="p">:</span> <span class="bp">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;Hello, thirst-trap bots.&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span><span class="s1">&#39; | imgup upload --json</span></span></span></code></pre></div>
<p>The GUI poster is sort of nice: Little thumbnails so you can catch it if you meant to upload from Finder but have Photos selected (and v/v), and while it won&rsquo;t <em>force</em> you to add alt text, you get an affirming little green check if you add it to each of your multi-post images so that you don&rsquo;t have to go back and check.</p>
<p>The caching thing &hellip; it&rsquo;s okay. Basically, you upload something and its URL and some metadata get written into a sqlite db, so if you ever try to upload the same image again, you just get your snippet back without a duplicate. If you delete the image from SmugMug or Flickr, you&rsquo;ll just get a broken image link in your clipboard, so if you&rsquo;re a <em>volatile</em> Flickr or SmugMug user, just:</p>
<p><code>imgup config set default.duplicate_check false</code></p>
<p>And it&rsquo;s installable with Homebrew:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">brew tap pdxmph/tap
</span></span><span class="line"><span class="cl">brew install --cask pdxmph/tap/imgupv2</span></span></code></pre></div>
<p>&hellip; assign the <code>imgupv2-gui.app</code> a keyboard shortcut from Shortcuts or FastScripts or whatever you care to do and invoke it on a Photos or Finder photo selection.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, I&#39;m less likely to subtoot, anyhow.</title>
      <link>https://mike.puddingtime.org/posts/2025-06-02-well-im-less-likely-to-subtoot-anyhow/</link>
      <pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-02-well-im-less-likely-to-subtoot-anyhow/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m currently on my second life in Mastodon. I deleted my omg.lol account after a long period of having 30-day self-destructing toots anyhow, then sort of pulled myself together and &lt;a href=&#34;https://social.lol/@mph&#34;&gt;reinstated it&lt;/a&gt;. I turned off the self-destructing part, too.&lt;/p&gt;
&lt;p&gt;But part of the reason for getting rid of almost all my social accounts was frustration over seeing things go by and rinsing/repeating the whole &amp;ldquo;someone is wrong on the internet&amp;rdquo; cycle, except I&amp;rsquo;m way too retiring to do anything other than delete the post or turn it into a homeopathically vague subtoot. &amp;ldquo;If a tree falls on Jupiter and nobody is around to hear it&amp;rdquo; levels of vague.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m currently on my second life in Mastodon. I deleted my omg.lol account after a long period of having 30-day self-destructing toots anyhow, then sort of pulled myself together and <a href="https://social.lol/@mph">reinstated it</a>. I turned off the self-destructing part, too.</p>
<p>But part of the reason for getting rid of almost all my social accounts was frustration over seeing things go by and rinsing/repeating the whole &ldquo;someone is wrong on the internet&rdquo; cycle, except I&rsquo;m way too retiring to do anything other than delete the post or turn it into a homeopathically vague subtoot. &ldquo;If a tree falls on Jupiter and nobody is around to hear it&rdquo; levels of vague.</p>
<p>But having picked up and stuck to <a href="https://puddingtime.org/experiments-in-atomic-writing">an atomic writing practice</a> over the past few weeks, I have taken to just letting myself feel my first reaction and commit it to a note that I might drop a few tags into if I have recently written notes about similar things, and I then I keep going with whatever I was up to. The impulse to &ldquo;say&rdquo; something is honored, I waste no time crafting it down to a mild subtoot, and it&rsquo;s actually better for later thinking, because it&rsquo;s way easier to process a very brief, unfiltered observation than it is to process an overcooked one. The atomic note is just a hunk of raw ore for later.</p>
<p>One piece of advice I gave myself this time around was to not think about how all the notes would hang together, but to just write, tag a little, and periodically link back to the top of a topical tree or nearby note, not in a rigid <a href="https://zettelkasten.de/folgezettel/">folgezettel</a> kind of way, but in a &ldquo;this is part of a cluster&rdquo; kind of way. I will not have a very awe inspiring graph view. That&rsquo;s fine. This is more of a mental health exercise than a &ldquo;walk in the footsteps of Luhmann&rdquo; exercise.</p>
]]></content:encoded>
    </item>
    <item>
      <title>There&#39;s an addressable market of 1</title>
      <link>https://mike.puddingtime.org/posts/2025-06-01-theres-an-addressable-market-of-1/</link>
      <pubDate>Sun, 01 Jun 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-06-01-theres-an-addressable-market-of-1/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/65535/54560878713_25a7191dce_b.jpg&#34; alt=&#34;Screenshot of the imgupv2 GUI prepared to upload the selected file from Photos&#34;&gt;&lt;/p&gt;
&lt;p&gt;Years ago when I was first learning to write scripts, I&amp;rsquo;d come up with stuff that made my life much better and would have helped other people on my team, and I&amp;rsquo;d run into the kinds of distribution problems you&amp;rsquo;d expect: I was a Linux/Mac guy, everyone around me was a Windows person, etc. I am guessing the 20th anniversary of the first time I said &amp;ldquo;well, it runs on &lt;em&gt;my&lt;/em&gt; laptop&amp;rdquo; is right around the corner. Even people who &lt;em&gt;could&lt;/em&gt; download the OSAX I was using for an AppleScript weren&amp;rsquo;t necessarily interested in doing it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://live.staticflickr.com/65535/54560878713_25a7191dce_b.jpg" alt="Screenshot of the imgupv2 GUI prepared to upload the selected file from Photos"></p>
<p>Years ago when I was first learning to write scripts, I&rsquo;d come up with stuff that made my life much better and would have helped other people on my team, and I&rsquo;d run into the kinds of distribution problems you&rsquo;d expect: I was a Linux/Mac guy, everyone around me was a Windows person, etc. I am guessing the 20th anniversary of the first time I said &ldquo;well, it runs on <em>my</em> laptop&rdquo; is right around the corner. Even people who <em>could</em> download the OSAX I was using for an AppleScript weren&rsquo;t necessarily interested in doing it.</p>
<p>I learned Sinatra and HAML because I wanted to make work I was doing accessible to other people, and the best way to solve the distribution problem was to just build a web GUI and plumb all those Ruby scripts in as controllers.</p>
<p>When I wrote the first imgup, I did it in Sinatra and got it going on Heroku well enough that I could document how someone else could grab the source and run it for themselves. When I decided to pivot it into a command line app, the distribution problem came back, but I&rsquo;ve learned enough over the years that if there were any issues with someone else using the code, I can&rsquo;t really blame it on distribution woes, just my own disinterest in a test matrix bigger than &ldquo;the OS running on the machine I am testing on.&rdquo;</p>
<p>So after deciding to quit futzing with imgup &ndash; that it was as done as it can be &ndash; I started writing a blog post about the experience of doing the migration from Sinatra/Web to a command line tool using Claude.</p>
<p>The development loop I landed on over a few weeks of intermittent fussing had come down to leveraging the <a href="https://basicmachines.co">Basic Memory MCP</a> to preserve more project context between sessions, and to chain project context with a special project architecture note in Basic Memory and what I came to call &ldquo;continuity prompts.&rdquo;</p>
<p>Basic Memory is just an archive of Markdown/YAML files kept on your disk with light markup to create persistence: You can annotate Basic Memory notes with &ldquo;Observations&rdquo; and &ldquo;Relationships&rdquo; that it uses to build a graph out of notes.</p>
<p>Observations look like:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="k">-</span> [architecture] Direct API metadata is cleaner than file embedding
</span></span><span class="line"><span class="cl"><span class="k">-</span> [performance] Removing exiftool dependency significantly improved upload speed
</span></span><span class="line"><span class="cl"><span class="k">-</span> [simplicity] Upload-then-set pattern is more maintainable than metadata embedding
</span></span><span class="line"><span class="cl">- [consistency] Aligning Flickr with SmugMug&#39;s approach simplified the codebase</span></span></code></pre></div>
<p>&hellip; and they work, to the extent that when I would turn on Extended Thinking and watch Claude talking to itself, it would mention them as things it &ldquo;knew&rdquo; or was trying to take into account when working on a chunk of code.</p>
<p>My <code>Project Context</code> note provides all the things Claude needed to know to start each session without going through rediscovery each time we worked on a new feature or bugfix. I devised a continuity prompt that reminded Claude to check out the project context:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">I&#39;m working on imgupv2, my fast image uploader for photographers. Please read the project context first:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">memory://imgupv2-project-context-working-preferences
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Key reminders:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> The GUI is Wails (Go + Web), NOT Swift
</span></span><span class="line"><span class="cl"><span class="k">-</span> External dependencies need full paths (GUI apps don&#39;t inherit shell PATH)
</span></span><span class="line"><span class="cl"><span class="k">-</span> Always ask before making changes
</span></span><span class="line"><span class="cl">- Work incrementally and wait for confirmation</span></span></code></pre></div>
<p>The Project Context note includes things like:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gu">### 1. CLI Binary (`imgup`)
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> **Location**: <span class="sb">`/Users/mph/code/imgupv2/cmd/imgup/`</span>
</span></span><span class="line"><span class="cl"><span class="k">-</span> **Binary locations**:
</span></span><span class="line"><span class="cl">  <span class="k">-</span> Development: <span class="sb">`/Users/mph/code/imgupv2/imgup`</span>
</span></span><span class="line"><span class="cl">  <span class="k">-</span> Installed: <span class="sb">`~/go/bin/imgup`</span> or <span class="sb">`/usr/local/bin/imgup`</span> or <span class="sb">`/opt/homebrew/bin/imgup`</span>
</span></span><span class="line"><span class="cl"><span class="k">-</span> **Purpose**: Core upload functionality, authentication, configuration
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 2. GUI Application (`imgupv2-gui.app`)
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> **Location**: <span class="sb">`/Users/mph/code/imgupv2/gui/`</span>
</span></span><span class="line"><span class="cl"><span class="k">-</span> **Technology**: Wails (Go + Web frontend, NOT Swift)
</span></span><span class="line"><span class="cl">  <span class="k">-</span> [architecture] GUI uses Wails (Go + Web frontend), NOT Swift <span class="ni">#imgupv2</span> <span class="ni">#wails</span> (correcting common misconception)
</span></span><span class="line"><span class="cl"><span class="k">-</span> **Frontend**: <span class="sb">`/Users/mph/code/imgupv2/gui/frontend/`</span> (HTML/JS/CSS)
</span></span><span class="line"><span class="cl"><span class="k">-</span> **Features**:
</span></span><span class="line"><span class="cl">  <span class="k">-</span> Detects selected images from Finder/Photos.app
</span></span><span class="line"><span class="cl">  <span class="k">-</span> Metadata review before upload
</span></span><span class="line"><span class="cl">  <span class="k">-</span> Mastodon integration with dynamic form
</span></span><span class="line"><span class="cl">  - Seamless white window design</span></span></code></pre></div>
<p>and &hellip;</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gu">## Project Structure
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">/Users/mph/code/imgupv2/ ├── cmd/imgup/ # CLI entry point ├── pkg/ │ ├── services/ # Service implementations │ │ ├── flickr/ # Flickr client │ │ └── mastodon/ # Mastodon client │ ├── config/ # Configuration management │ └── metadata/ # EXIF/metadata extraction ├── gui/ # Wails GUI application │ └── frontend/ # Web frontend (NOT Swift!) │ └── dist/ # Must copy files here for build ├── homebrew/ # Homebrew cask definition ├── build-macos-release.sh # Release packaging script ├── release.sh # GitHub release automation └── build-and-release.sh # Complete release automation</span></span></code></pre></div>
<p>That is, btw, a Go project. Because in the midst of writing up my notes about what I learned working with Claude, I realized ways in which I&rsquo;d made a very useful workflow that would have saved me a ton of time doing what should have been a simple migration of some controller logic out to a command line script, and that if could use Claude <em>poorly</em> to get a mostly okay reimplementation in a language I know, maybe if I used it <em>well</em> I could get a good reimplementation &ndash; and a more portable, accessible one &ndash; with a language I don&rsquo;t know so well.</p>
<p>So I started with a clean slate, started a new Claude &ldquo;Project,&rdquo; and set out to make <a href="https://github.com/pdxmph/imgupv2">imgupv2</a> in Go using everything I learned to work with Claude and the Basic Memory MCP.</p>
<p>I would have been happy to just have a distributable binary I could share, but the approach I took to the whole thing let everything move super fast. To the point imgup can be installed with Homebrew, and ships with a little (optional) popup GUI so you can just select an image in the Finder or Photos, invoke a Shortcut with a hotkey. Its backward compatible with the old Ruby version, so it can be wired into anything you&rsquo;d care to script, like Raycast Script Actions or Hazel folder actions.</p>
<p>I also added some new features because the core feature set went in fast. Oauth registration with Flickr, SmugMug, and Mastodon works without pasting URLs, etc. because imgup config fires up a little callback server duing onboarding. And after <a href="https://baty.net/posts/2025/05/letting-flickr-host-my-blog-s-images/">Jack Baty mentioned wanting to customize another little flickr script</a> I had come up with, I added snippet templating:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl">  <span class="s2">&#34;templates&#34;</span><span class="err">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;html&#34;</span><span class="p">:</span> <span class="s2">&#34;\u003cimg src=\&#34;%image_url%\&#34; alt=\&#34;%alt|description|title|filename%\&#34;\u003e&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;json&#34;</span><span class="p">:</span> <span class="s2">&#34;{\&#34;photo_id\&#34;:\&#34;%photo_id%\&#34;,\&#34;url\&#34;:\&#34;%url%\&#34;,\&#34;image_url\&#34;:\&#34;%image_url%\&#34;}&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;markdown&#34;</span><span class="p">:</span> <span class="s2">&#34;![%alt|description|title|filename%](%image_url%)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;org&#34;</span><span class="p">:</span> <span class="s2">&#34;[[%image_url%][%alt|description|title|filename%]]&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;url&#34;</span><span class="p">:</span> <span class="s2">&#34;%url%&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span></span></span></code></pre></div>
<p>&hellip; so instead of living with my particular idea of how an HTML snippet should look, you can roll your own and override the default.</p>
<p>I also added accessibilty prompts and support (you get a reminder if you don&rsquo;t specify an <code>--alt</code> flag, but the snippet will degrade from <code>alt</code> to the image <code>description</code> to the image <code>title</code> when making a post.)</p>
<p>&hellip; and I successfully used Claude itself as a sort of consultant. I was miserable about the way I&rsquo;d added flickr support because it was dog slow due to my own limitations, but I was able to use Claude to reimplement flickr uploads in a way that makes them super fast and removes external dependencies on exiftool: I told it the pain point, which involved extracting images, writing them out to disk, and embedding the metadata from Photos <em>then</em> uploading them; and it suggested a pair of API calls: One to upload the image, and one to write the metadata over the API.</p>
<p>And the last &ldquo;feature&rdquo; is an automated build and distribution pipeline, complete with Apple notarization. One build script compiles the macOS and Linux binaries, signs the macOS binaries, builds the GUI, tags a release, and updates the Homebrew cask:</p>
<p><code>brew install --cask pdxmph/tap/imgupv2</code></p>
<p>&hellip; but also just &hellip;</p>
<p><code>go install github.com/pdxmph/imgupv2/cmd/imgup@latest</code> if you don&rsquo;t care about the GUI or want to build something in Raycast, Apple Shortcuts, Alfred, etc.</p>
<h2 id="but-why-tho">But why tho</h2>
<p>Just curiosity, I guess. AI is a big deal at work right now, and my job puts me in the middle of a lot of it: Working through security issues, thinking about how to onboard and configure the flood of new AI features rolling out from all our vendors, and lately helping out with a training program. Our product is going to be using AI a lot more in the coming year.</p>
<p>There are a lot of folks around me at work who have a lot of takes, good and bad, realistic and unrealistic. One person scoffed, &ldquo;I tried to get AI to write a program for my kids and it couldn&rsquo;t! Smoke and mirrors!&rdquo; Plot that take on a <code>skepticism -&gt; credulity</code> bell curve, and I can probably think of equal and opposite occupants on the other end that I&rsquo;ve heard.</p>
<p>Up until this past month, I&rsquo;d mostly used LLMs as a coding <em>augment</em>. When I was writing the first, Sinatra-based imgup, I struggled with the syntax for building and tearing down OAuth sessions in Ruby, so ChatGPT helped me out there. I did a few proofs of concept for things like &ldquo;write some Ruby that uses the TriMet API to tell me when the next three trains are due at my Max station&rdquo; just to understand how it worked and what it could do. And if I&rsquo;d come across an error, I&rsquo;d use it to paste in the error, provide a little context, and get something as serviceable as a direct visit to Stack Overflow.</p>
<p>I&rsquo;d never tried to use one to do a whole project with multiple discrete pieces.</p>
<p>Could I have, as that one person apparently tried, just said &ldquo;make a thing called imgup. It needs to post pictures to flickr or smugmug from the command line, operate on the selected file in the Finder or Photos, and optionally post to Mastodon,&rdquo; well, no, that would not have worked.</p>
<p>It didn&rsquo;t even &ldquo;work,&rdquo; in my early first attempt to allow for its shortcomings, to make a thorough project prompt and keep sessions concise: It was incredibly inefficient, forgetful, and self-defeating, constantly introducing regressions as it forgot how one piece connected to the other, even when it had a copy of the repo attached to its project memory.</p>
<p>What finally made it &ldquo;work,&rdquo; if our definition of &ldquo;work&rdquo; is &ldquo;make code that does what I want with about as many obvious bugs or issues as if I&rsquo;d devoted months to this project starting from scratch,&rdquo; was leveraging Basic Memory to give it some persistent project knowledge, careful marshaling of its limited session lengths, fastidious continuity prompting, and the occasional &ldquo;go describe this problem to another instance outside the project to see if an evil twin can poke holes in the solutions offered by the other AI &lsquo;developer.&rsquo;&rdquo;</p>
<p>So my curiosity is satisfied, for the most part.</p>
<p>Less public than this project, though, is all the writing I&rsquo;m doing for myself right now not about how to make it work, but what to make of it &ndash; &ldquo;AI&rdquo; &ndash; generally. Because as surely as there&rsquo;s a wide and varied distribution of takes on whether AI can do this or do that, if it&rsquo;s &ldquo;real&rdquo; or &ldquo;just smoke and mirrors,&rdquo; the social issues are at our doorstep. This almost felt like me saying to myself, &ldquo;well, you know what it <em>can</em> do; so now you can figure out what it <em>means</em>.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>imgup v0.13.0 (Fedi-Ready)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-28-imgup-v0130-fedi-ready/</link>
      <pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-28-imgup-v0130-fedi-ready/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54550622732_10eb18d114_b.jpg&#34; alt=&#34;Asphalt factory machine shack&#34;&gt;&lt;/p&gt;
&lt;p&gt;Over the weekend I roughed in support for posting to gotosocial or Mastodon &lt;a href=&#34;https://github.com/pdxmph/imgup-cli&#34;&gt;imgup&lt;/a&gt;, but made a decision about UI that my old jazz band director would have called &amp;ldquo;a choice that was not as good as the other ones,&amp;rdquo; and it took trying to wire the new functionality into a Raycast script to catch how it was a problem.&lt;/p&gt;
&lt;p&gt;So this morning was &amp;ldquo;untangle that mess&amp;rdquo; and I think it&amp;rsquo;s in a way better place:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54550622732_10eb18d114_b.jpg" alt="Asphalt factory machine shack"></p>
<p>Over the weekend I roughed in support for posting to gotosocial or Mastodon <a href="https://github.com/pdxmph/imgup-cli">imgup</a>, but made a decision about UI that my old jazz band director would have called &ldquo;a choice that was not as good as the other ones,&rdquo; and it took trying to wire the new functionality into a Raycast script to catch how it was a problem.</p>
<p>So this morning was &ldquo;untangle that mess&rdquo; and I think it&rsquo;s in a way better place:</p>
<ul>
<li>Post to flickr or SmugMug and get back a Markdown, org-mode, or HTML snippet, same as before.</li>
<li>Post to Mastodon or gotosocial with post text and visibility settings</li>
<li>Optional tags, title, and caption (which we use as alt text for image tags and social posts)</li>
</ul>
<p>I have a couple of Linux laptops, so the core tool is written for the command line to make it easily scriptable, but remain amenable to working in demi-GUI workflows, such as a Raycast shell script action or something like Shortcuts or Automator. <a href="https://github.com/pdxmph/raycast-actions/blob/main/photos-to-imgup.sh">Here&rsquo;s a sample Raycast action to upload the selected image in Photos</a>. You can even hook it up to a <a href="https://github.com/pdxmph/imgup-cli/blob/main/extras/hazel_smugmug.sh">Hazel folder action</a> that knows to pull the title and caption from metadata.</p>
<p>To add an image to this post, for instance, I:</p>
<ul>
<li>Found a photo in Apple Photos</li>
<li>Triggered a Raycast script and added title, caption/alt, and tags</li>
<li>Got back a Markdown snippet on my clipboard: <code>![Asphalt factory machine shack](https://farm66.staticflickr.com/65535/54550622732_10eb18d114_b.jpg)</code></li>
<li>Pasted it into this post</li>
</ul>
<p>The original impetus for all this was &ldquo;blogging providers don&rsquo;t care about image quality and it shows,&rdquo; and that was why imgup started as a little <a href="https://github.com/pdxmph/imgup">Sinatra-backed web tool</a>. The impulse that eventually took over was &ldquo;reduce as much friction to uploading and sharing images as possible.&rdquo;</p>
<p>For my own use, I&rsquo;m trying to build surrounding tools that reward good behavior: The Hazel upload action, for instance, will grab existing metadata: That&rsquo;s a great reason to include title and caption in my editing workflow in Lightroom. In the short term it makes posting simple and frictionless. In the future, I&rsquo;ll be more grateful for the title and caption than the 30 seconds I saved by not posting &ldquo;the long way.&rdquo;</p>
<p>One semantic thing I need to back out of or address: Photo tools are all over the place on the metadata they expose and allow you to edit. At some point LR CC added an alt text field, but imgup&rsquo;s &ldquo;caption&rdquo; flag acts as the alt text for the image tags it produces or the social media posts it makes. I need to look at the SmugMug and Flickr APIs and think about the logic there.</p>
<p>And I want to add Bluesky to the list of supported services.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Exposure therapy</title>
      <link>https://mike.puddingtime.org/posts/2025-05-26-exposure-therapy/</link>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-26-exposure-therapy/</guid>
      <description>&lt;p&gt;I should probably apologize to a few people on the Fediverse for double-follows or weird Mastodon noise, but I&amp;rsquo;m not entirely clear on what kind of noise a small experiment might have generated. If you know me and noticed a weird follow, it&amp;rsquo;s because a quick automated trawl of my timeline flagged you as low-noise, high-signal for photography-related stuff and dropped you into my Photographers list.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;reason&lt;/em&gt; for the trawl was to get back to a practice I used to follow a long time ago where I&amp;rsquo;d wake up in the morning and load up Flickr&amp;rsquo;s &amp;ldquo;Explore&amp;rdquo; feed in Flipboard and make myself flip through it for a while. It was a little hard to do some mornings, but I stuck with it, adopting a mindset of:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I should probably apologize to a few people on the Fediverse for double-follows or weird Mastodon noise, but I&rsquo;m not entirely clear on what kind of noise a small experiment might have generated. If you know me and noticed a weird follow, it&rsquo;s because a quick automated trawl of my timeline flagged you as low-noise, high-signal for photography-related stuff and dropped you into my Photographers list.</p>
<p>The <em>reason</em> for the trawl was to get back to a practice I used to follow a long time ago where I&rsquo;d wake up in the morning and load up Flickr&rsquo;s &ldquo;Explore&rdquo; feed in Flipboard and make myself flip through it for a while. It was a little hard to do some mornings, but I stuck with it, adopting a mindset of:</p>
<ul>
<li>You don&rsquo;t have to like all of it.</li>
<li>There are better and worse choices, so figure out why you think which is which.</li>
<li>You&rsquo;re not as good as a lot of these people, but you do your thing for your own reasons, not Flickr&rsquo;s (or anyone else).</li>
<li>Figure out why things work or don&rsquo;t work for you. Don&rsquo;t do the things that don&rsquo;t work, learn how to do the things that do work.</li>
</ul>
<p>I think this is just basic self-development for people, I just had to learn it for myself because &hellip; well because.</p>
<p>So the trawl was to find accounts with a high percentage of media-only posts along with the absence of a list of stopwords in their posts, and the reason was to put them in a Mastodon list so I can wake up my Exposure Therapy approach, just using Mastodon instead of Flickr Explore. I just looked in on Explore, and it is about the same as it was. I think it could serve the same purpose, but I think the photography I see on Mastodon is a little more to my general taste, but not so much I&rsquo;m closing myself off from learning opportunities.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Focus Guardian</title>
      <link>https://mike.puddingtime.org/posts/2025-05-26-focus-guardian/</link>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-26-focus-guardian/</guid>
      <description>&lt;p&gt;Claude has enabled a sort of exuberant play recently, as I&amp;rsquo;ve figured out what it is good for and how it can help me do stuff that I&amp;rsquo;ve thought would be interesting or fun to play with, but not practical to implement on my own. That&amp;rsquo;s been fun, but also it has felt a little weird because it has led me fully into the territory of doing things because I can, not because they&amp;rsquo;re really useful.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Claude has enabled a sort of exuberant play recently, as I&rsquo;ve figured out what it is good for and how it can help me do stuff that I&rsquo;ve thought would be interesting or fun to play with, but not practical to implement on my own. That&rsquo;s been fun, but also it has felt a little weird because it has led me fully into the territory of doing things because I can, not because they&rsquo;re really useful.</p>
<p>Several years ago I read Cal Newport&rsquo;s <em>Digital Minimalism</em>, going into the book thinking it would be one thing and learning it was something else I was much happier to think about, which was &ldquo;why am I doing any of the things I do?&rdquo; I spent a lot of time inventorying, thinking, and writing about that question, figuring out what my purpose was.</p>
<p>Some of that was painful to do. A few weeks ago Al asked me for some advice on a problem she was dealing with at work, and my opinions on the matter were so reflexive and so anchored on what is turning into a big portion of my life thinking about management problems that I felt a little dizzy and had to just stop and reflect on where that all even came from.</p>
<p>&ldquo;I wish,&rdquo; I said, &ldquo;that I knew less about solving management problems than I seem to know. I could have been doing something else with all that bandwidth.&rdquo;</p>
<p>So &ldquo;what is my purpose? Why do I do these things?&rdquo; were hard to ask because I had to spend a lot of time thinking about what the answers might have once been, and consider what I thought of being pulled away from that.</p>
<p>But from the exercise came some clear answers about <em>what</em> I do: I write, I take pictures, I read. Almost everything I screw around with, fiddle with, experiment with, or futz with has something to do with one of those things and some idea I have about how it will make one of those things better somehow. My <em>reasons</em> for doing those things are going to remain my own. I could share the ones that don&rsquo;t feel super personal to me, but they&rsquo;re the kinds of reasons you probably have yourself if you do any of those things much.</p>
<p>I&rsquo;ve made a sort of mantra out of that list.</p>
<p>My rabbit holes are adjacent to my interests most of the time, but their utility is never completely guaranteed: Sometimes parts of my personality come to the fore that make my rabbit holes and digressions feel wasteful. They don&rsquo;t pan out, or they do and they aren&rsquo;t as useful as I hoped, or they triggered a bunch of fussing around with something that was fine as is. When I&rsquo;m done, I feel a little dulled and uneasy, and I think &ldquo;I could&rsquo;ve been writing, or reading, or taking pictures.&rdquo;</p>
<p>When I&rsquo;m feeling very reflective I feel pretty self-conscious about those time-sucks. They feel like failures. I try not to be too hard on myself, because I&rsquo;ve also come to realize there is probably something going on it&rsquo;d be good to try to tease out. Like, I can tell you <em>exactly</em> why I haven&rsquo;t been reading or writing much lately, and it has been helpful to know that and remember it.</p>
<p>So back to Claude: It has powered a sort of &ldquo;oh, that&rsquo;d be cool&rdquo; digression factory that is always in sight of what I care about, but is always not doing the things I care about. It got really bad with one small project that spun out until I&rsquo;d burned a whole evening on it. The time was just gone. And I wish I&rsquo;d noticed for some reason besides &ldquo;this didn&rsquo;t pan out, why did I spend this time on it?&rdquo;</p>
<p>So today I made the &ldquo;focus guardian&rdquo; prompt and stuck it in Claude&rsquo;s user instructions. I think people tend to use that for facts about themselves, or the tone they prefer in responses, or whatever. I decided to use it to get a little help with my digressions. It&rsquo;s a little lengthy, and I&rsquo;m saying enough about the inside of my own head to even discuss this in public, so I&rsquo;ll just outline what it does in the 350 words it takes:</p>
<ul>
<li>Looks for red flag expressions and requests</li>
<li>Intervenes with a mix of questions and principles</li>
<li>Suggests some alternatives</li>
</ul>
<p>It caught me this afternoon, asked an intervening question, and provided some suggestions. I folded my laptop shut for a few minutes and wondered what I had been about to do, and decided I might as well enforce this new protocol I&rsquo;m trying to implement in my own skull by writing about it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>imgup v0.10.0 - sharing is caring (fedi support)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-25-imgup-v0100-sharing-is-caring-fedi-support/</link>
      <pubDate>Sun, 25 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-25-imgup-v0100-sharing-is-caring-fedi-support/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54545850354_7d63ed0380_b.jpg&#34; alt=&#34;A test post from imgup to gotosocial&#34;&gt;&lt;/p&gt;
&lt;p&gt;I started the day working through the setup for a &lt;a href=&#34;https://gotosocial.org&#34;&gt;gotosocial&lt;/a&gt; server. It took a little fussing with the Synology, but it&amp;rsquo;s &lt;a href=&#34;https://social.puddingtime.org&#34;&gt;up and running&lt;/a&gt;. There&amp;rsquo;s a little more to it than &amp;ldquo;because I could,&amp;rdquo; but not much. I think I&amp;rsquo;ll find a few things to follow from there that are not humans with feelings and see how well it runs before moving there.&lt;/p&gt;
&lt;p&gt;But that made me start thinking about imgup and how it&amp;rsquo;d be kind of cool to be able to use it to post to Fediverse services. So &lt;a href=&#34;https://github.com/pdxmph/imgup-cli/&#34;&gt;imgup 0.10.0&lt;/a&gt; does that by adding a way to enroll it with gotosocial as an app then adding it as an option when posting to Flickr or Smugmug.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54545850354_7d63ed0380_b.jpg" alt="A test post from imgup to gotosocial"></p>
<p>I started the day working through the setup for a <a href="https://gotosocial.org">gotosocial</a> server. It took a little fussing with the Synology, but it&rsquo;s <a href="https://social.puddingtime.org">up and running</a>. There&rsquo;s a little more to it than &ldquo;because I could,&rdquo; but not much. I think I&rsquo;ll find a few things to follow from there that are not humans with feelings and see how well it runs before moving there.</p>
<p>But that made me start thinking about imgup and how it&rsquo;d be kind of cool to be able to use it to post to Fediverse services. So <a href="https://github.com/pdxmph/imgup-cli/">imgup 0.10.0</a> does that by adding a way to enroll it with gotosocial as an app then adding it as an option when posting to Flickr or Smugmug.</p>
<p>Nothing has changed about the way it has traditionally worked:</p>
<p><code>imgup -c &quot;Some caption/the alt text&quot; --tags some,tags -b flickr imgfile000.jpg</code></p>
<p>&hellip; but if you register it with gotosocial, you can add the <code>--post</code> and <code>--fedi</code> switches to compose the post text and make a post.</p>
<p><code>imgup -c &quot;Some caption&quot; --tags some,tags -b flickr imgfile000.jpg --fedi --post &quot;the text of your post&quot;</code></p>
<p>You can run the OAuth setup for that up with <code>imgup setup fedi</code>.</p>
<p>v0.11.0, which I have not full tested offers a simplifed flow to sign imgup to use your Mastodon instance, and adds the <code>--mastodon</code> switch, which behaves the same way.</p>
<p>So, it&rsquo;s becoming a little bit of a Swiss Army Knife:</p>
<ul>
<li>Use it to upload photos to Flickr or SmugMug and get back a snippet you can paste into your blog</li>
<li>Use it to post photos to those services and also make a Fediverse post out of them</li>
<li>Use it to just post to the Fediverse</li>
</ul>
<p>When you use Flickr or SmugMug alongside creating a post, you get to take advantage of their image resizing, which is nicer than a lot of blog hosting services: The images being shared are optimized without being turned into mush.</p>
<p>I&rsquo;ve got a few ideas about extending it to support Bluesky and Pixelfed. Bluesky would behave a lot more like the Mastodon or gotosocial functionality. Pixelfed has a few other features around albums and stories worth considering. Adding those sort of turns it into an image cross-posting tool for services open enough to work with one.</p>
]]></content:encoded>
    </item>
    <item>
      <title>lmno-blog-capture bump (adds and polishes &#39;drafts&#39;)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-24-lmno-blog-capture-bump-adds-and-polishes-drafts/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-24-lmno-blog-capture-bump-adds-and-polishes-drafts/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/65535/54513598558_7def3a08a0_b.jpg&#34; alt=&#34;bike commuter on a foggy morning&#34;&gt;&lt;/p&gt;
&lt;p&gt;I rolled the lmno &amp;lsquo;drafts&amp;rsquo; stuff into &lt;a href=&#34;https://github.com/pdxmph/lmno-blog-capture&#34;&gt;lmno-blog-capture&lt;/a&gt;, which is sort of like org-capture for a &lt;a href=&#34;https://lmno.lol&#34;&gt;monolithic lmno.lol blog file&lt;/a&gt;: Invoke it, get a little transient window with a pre-populated heading, do your thing, &lt;code&gt;C-c C-c&lt;/code&gt; to save/exit.&lt;/p&gt;
&lt;p&gt;With the drafts feature added, you can configure a drafts file (e.g. &lt;code&gt;drafts-lmno.md&lt;/code&gt;), position the cursor inside a draft you&amp;rsquo;re working on in your main blog file, and teleport it to your drafts file. If you&amp;rsquo;re done with a draft, you can send it back over to the top of your lmno.lol file.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://live.staticflickr.com/65535/54513598558_7def3a08a0_b.jpg" alt="bike commuter on a foggy morning"></p>
<p>I rolled the lmno &lsquo;drafts&rsquo; stuff into <a href="https://github.com/pdxmph/lmno-blog-capture">lmno-blog-capture</a>, which is sort of like org-capture for a <a href="https://lmno.lol">monolithic lmno.lol blog file</a>: Invoke it, get a little transient window with a pre-populated heading, do your thing, <code>C-c C-c</code> to save/exit.</p>
<p>With the drafts feature added, you can configure a drafts file (e.g. <code>drafts-lmno.md</code>), position the cursor inside a draft you&rsquo;re working on in your main blog file, and teleport it to your drafts file. If you&rsquo;re done with a draft, you can send it back over to the top of your lmno.lol file.</p>
<p>I added a bit of polish/a potential shoe-gun to the draft thing since I last wrote about it: When you shuttle something out of the drafts file, it overwrites the date stamp with the current date.</p>
<p>That&rsquo;s me thinking more like a writer-who-publishes than a diarist-who-logs, and also keeps me from having to contemplate sorting the headings in the monolith.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The FujiFilm half made me think about the XF10</title>
      <link>https://mike.puddingtime.org/posts/2025-05-23-the-fujifilm-half-made-me-think-about-the-xf10/</link>
      <pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-23-the-fujifilm-half-made-me-think-about-the-xf10/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54540514424_4bfef2f15b_b.jpg&#34; alt=&#34;Portland waterfront on a misty morning&#34;&gt;&lt;/p&gt;
&lt;p&gt;The new #fujifilm #half looks sort of fun. I checked its dimensions against the XF10, and they&amp;rsquo;re quite similar.&lt;/p&gt;
&lt;p&gt;I re-read some release reviews of the XF10, then looked it up in Lightroom. I didn&amp;rsquo;t take too many pictures with it: I&amp;rsquo;ve never really done well with cameras that don&amp;rsquo;t have a viewfinder, and I got mine during the summer, when working with an LCD on bright beaches, etc. was a challenge.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54540514424_4bfef2f15b_b.jpg" alt="Portland waterfront on a misty morning"></p>
<p>The new #fujifilm #half looks sort of fun. I checked its dimensions against the XF10, and they&rsquo;re quite similar.</p>
<p>I re-read some release reviews of the XF10, then looked it up in Lightroom. I didn&rsquo;t take too many pictures with it: I&rsquo;ve never really done well with cameras that don&rsquo;t have a viewfinder, and I got mine during the summer, when working with an LCD on bright beaches, etc. was a challenge.</p>
<p>But still: APS-C sensor in a genuinely pocketable camera, similar to a GRIII, and it had a snap focus setup I didn&rsquo;t appreciate at the time but got better at when I did get a GRIII, which has a similar feature.</p>
<p>I think, at the time, I was perturbed that it didn&rsquo;t have Acros, and I was still all in on the notion that X-Trans sensors were dipped in unicorn juices before getting seated in the camera. Still, I never got rid of it, so I dug it out yesterday and charged the battery. I think the trick with it might be to re-learn the snap focus feature and dial in a decent film simulation preset.</p>
<p>I also don&rsquo;t see a half in my future <em>too</em> soon. I own one of the digital Instax hybrids. It&rsquo;s far too bulky to just carry around, and the &hellip; hybridity? &hellip; of the thing feels grubby: They don&rsquo;t let you use the camera to its fullest without forcing a film purchase on you. The half isn&rsquo;t that bad about it, but <a href="https://petapixel.com/2025/05/21/fujifilm-x-half-review-as-close-to-film-as-digital-can-get/">the most thorough review I&rsquo;ve found</a> suggests they&rsquo;ve committed to the bit a little too hard for the money. What I&rsquo;d <em>like</em> would be an XF10 successor with an optional OVF or EVF and a little more wherewithal. Or maybe not. I eventually sold the GRIII because it wasn&rsquo;t so pocketable that it made a ton more sense than an X100.</p>
<p>Anyhow &hellip; the XF10 is sitting there. Seems like fun to mess around with it.</p>
<p>Oh, the comments in the Petapixel review are tragicomic. The worst part of photography sites is truly all the photographers.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Priorities app</title>
      <link>https://mike.puddingtime.org/posts/2025-05-23-the-priorities-app/</link>
      <pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-23-the-priorities-app/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54541134086_eb2d7a9765_b.jpg&#34; alt=&#34;Priorities PWA&#34;&gt;&lt;/p&gt;
&lt;p&gt;A long while back I had a small falling out with a boss. I was a green manager and we were trying to figure out what I needed for headcount. I had no idea how to have that conversation: I just knew &amp;ldquo;more people == more work done.&amp;rdquo; After a few back-and-forths, he finally realized I wasn&amp;rsquo;t getting it, and he said, &amp;ldquo;Look, I need to know each thing the team is doing, how important you think it is, and what it takes to keep the lights on. Tell me that and we can figure out if there&amp;rsquo;s something we could be doing differently, or slow down on, or reprioritize.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54541134086_eb2d7a9765_b.jpg" alt="Priorities PWA"></p>
<p>A long while back I had a small falling out with a boss. I was a green manager and we were trying to figure out what I needed for headcount. I had no idea how to have that conversation: I just knew &ldquo;more people == more work done.&rdquo; After a few back-and-forths, he finally realized I wasn&rsquo;t getting it, and he said, &ldquo;Look, I need to know each thing the team is doing, how important you think it is, and what it takes to keep the lights on. Tell me that and we can figure out if there&rsquo;s something we could be doing differently, or slow down on, or reprioritize.&rdquo;</p>
<p>Oh.</p>
<p>At the time I was full steam ahead on <a href="https://github.com/pdxmph/docs_decomposer/">a Rails app that helped manage technical docs</a>. We&rsquo;d grown the page count 3x in just over a year, and we were starting to miss things like product screenshots that didn&rsquo;t change. We also had problems with internal customers telling us they weren&rsquo;t sure how to tell us about issues. So the Docs Decomposer offered up a rendered view of all our Markdown docs. You could leave a Google Docs-style comment on a selection, and you could also use a bookmarklet with it that let you select a problematic passage and file a Jira ticket with it. It <em>also</em> tracked screenshots and reported on which ones hadn&rsquo;t changed between versions so we could look in and make sure the product hadn&rsquo;t changed too much.</p>
<p>Since it was already up and running on internal infra, I just went home and started modeling how my boss had told me how to think about prioritization, and I made a tool that sat in an unlinked page in the Decomposer. You could enter a list of the stuff your team did, then tell it the priority of the item, how well you thought you were doing it, and how much effort it took. If you said something was a P1, but you weren&rsquo;t doing it well, you got a little &ldquo;this is on fire&rdquo; treatment on the priorities report.</p>
<p>So at our next 1:1 I put my browser on the screen in the conference room and walked my boss through what we were up to. We had a great conversation. He thought some stuff we were doing was better left to developers to work on, and he had some stuff he wanted me to emphasize more, and he agreed two more writers for the coming year would be a great idea.</p>
<p><img src="https://farm66.staticflickr.com/65535/54541500910_821e442836_b.jpg" alt="Priorities Rails"></p>
<p>I ended up turning it into an app of its own, adding accounts and separate projects. I developed a practice around it with my teams:</p>
<ol>
<li>Dump what you&rsquo;re doing into the tool.</li>
<li>Set Priority, Support, and Effort.</li>
<li>Look for disconnects.</li>
<li>Renegotiate priorities.</li>
</ol>
<p>I kept it pretty simple. Each priority has a page that shows similarly prioritized or supported items to give you an idea of what you&rsquo;re ranking similarly, and there&rsquo;s a notes field to capture whatever.</p>
<p>It works well with some teams, not so well with others. I&rsquo;ve learned over the years that you have to help the team keep from spiraling into minutiae, and you need to keep an eye on guilt reactions. But when it works, it&rsquo;s very clarifying and you can cut a lot of junk out of the backlog.</p>
<p>It&rsquo;s such a simple idea that it didn&rsquo;t really need a Rails app. One manager I hired just made his own version in a spreadsheet. Another did Jira reporting with labels. The value isn&rsquo;t so much the app as it is the thinking process, and having a supportive, thoughtful conversation with your team about what they&rsquo;re up to, what you can take off their plate, and where their time could be better spent.</p>
<p>Tonight it took about 30 minutes with Claude to get it turned into <a href="https://pdxmph.github.io/priorities-web">a PWA</a> that does about the same thing. It uses local storage and you can save it to your phone&rsquo;s homescreen. I don&rsquo;t think the app interface is good for a tool like this. It&rsquo;s meant to be a &ldquo;put it on the screen and let everyone talk about it,&rdquo; but I wanted to see how simple it would be to talk through the design and turn Claude loose on it. It took about 30 minutes of back-and-forth. Enough to get it working and convince me it&rsquo;s not a great idea for phones, but could be a simple webapp that doesn&rsquo;t need any infra.</p>
<p>People have asked me if I could dig out their logins to it years after we&rsquo;d worked together, so it works for some kinds of brains. And I&rsquo;ve thought a lot more about how prioritization works (or doesn&rsquo;t) since I built it. I like the idea of treating it less like AN APP YOU USE and almost more like an educational tool for people who are new to thinking about prioritization and don&rsquo;t really have their own model yet.</p>
<p>For instance, just looking at the little report, it could do more to suggest overall backlog health, and it could offer ways to think about disconnects. One thing I never got around to coding in last time but was able to add in two minutes tonight was what to do when something is low priority and getting a lot of effort. It used to be those items got a green checkmark &hellip; now they get called out.</p>
<p>Anyhow, fun.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Plain text is calming</title>
      <link>https://mike.puddingtime.org/posts/2025-05-21-plain-text-is-calming/</link>
      <pubDate>Wed, 21 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-21-plain-text-is-calming/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54537151905_067d9236ec_b.jpg&#34; alt=&#34;Monochrome: Two fishermen walk on a jetty under tall clouds.&#34;&gt;&lt;/p&gt;
&lt;p&gt;I managed to get too many plates spinning again, and made it worse for myself by trying very hard to use Asana, because it&amp;rsquo;s what we use for a few things at work and it&amp;rsquo;s easier to send todos back and forth in 1:1 and team boards. My own personal project board isn&amp;rsquo;t great and I vacillate between a column view and list view, but the fact is Asana just makes my brain freeze. I do not like it. It doesn&amp;rsquo;t matter how I arrange the view.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54537151905_067d9236ec_b.jpg" alt="Monochrome: Two fishermen walk on a jetty under tall clouds."></p>
<p>I managed to get too many plates spinning again, and made it worse for myself by trying very hard to use Asana, because it&rsquo;s what we use for a few things at work and it&rsquo;s easier to send todos back and forth in 1:1 and team boards. My own personal project board isn&rsquo;t great and I vacillate between a column view and list view, but the fact is Asana just makes my brain freeze. I do not like it. It doesn&rsquo;t matter how I arrange the view.</p>
<p>I think it is extra infuriating to me because I recently tried to add a project status field and noticed that easily ten of my coworkers had each created their own custom &ldquo;red/yellow/green&rdquo; status fields and added them to the collective library. They&rsquo;re <em>all</em> just red/yellow/green. Not other metadata, no nothing. You can&rsquo;t have not seen the other nine in the library in the process of deciding to make your own, but here we are. People are animals.</p>
<p>But too many plates, and I was feeling miserable and behind, so I opened up a fresh org-mode buffer and started outlining it all instead of trying to make it into little tasks or cards or whatever.</p>
<p>I keep coming back to something I love about org-mode: You can dip in and out of planning and writing about what you&rsquo;re planning so easily: One second you&rsquo;re defining a TODO, the next line down you&rsquo;re writing about it. No dipping into a notes box, etc. If a paragraph into the whole thing you think of a few extraneous tasks, make them checkboxes, keep writing, and add a cookie to the parent when you think of it so you can see completion. Decide a thing needs to get parked &hellip; org-refile it to the <code>* Parked</code> heading and keep moving. Setting priority is just <code>S-up</code> or <code>S-down</code>.</p>
<p>The only thing I regret is having to re-learn this over and over. There is a little extra overhead to keep an org project file and also do the necessary ticketing in Asana to keep things going with the team, but I can&rsquo;t <em>think</em> in Asana, I can just <em>track</em> there. Different things.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Hoarder</title>
      <link>https://mike.puddingtime.org/posts/2025-05-20-hoarder/</link>
      <pubDate>Tue, 20 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-20-hoarder/</guid>
      <description>&lt;p&gt;I started to write about Basic Memory this afternoon, and that gave me an idea that turned into an evening of coaching Claude into helping me do some stuff:&lt;/p&gt;
&lt;p&gt;I took my corpus of old micro.blog posts and migrated them into my notes. They&amp;rsquo;re all YAML-n-Markdown, so they could just be imported.&lt;/p&gt;
&lt;p&gt;I did the same with my mono-topic Hugo posts. Same idea.&lt;/p&gt;
&lt;p&gt;I made a script for the many, many daily posts I wrote over a few years, grateful that I stuck to a convention of organizing them with l2 headings: Each heading became a title of a new, atomized post. I did that because my daily posts could cover a lot, so now it&amp;rsquo;s all more searchable.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I started to write about Basic Memory this afternoon, and that gave me an idea that turned into an evening of coaching Claude into helping me do some stuff:</p>
<p>I took my corpus of old micro.blog posts and migrated them into my notes. They&rsquo;re all YAML-n-Markdown, so they could just be imported.</p>
<p>I did the same with my mono-topic Hugo posts. Same idea.</p>
<p>I made a script for the many, many daily posts I wrote over a few years, grateful that I stuck to a convention of organizing them with l2 headings: Each heading became a title of a new, atomized post. I did that because my daily posts could cover a lot, so now it&rsquo;s all more searchable.</p>
<p>And I <em>finally</em> sat down with my DayOne journals, all exported as JSON, and turned them into Basic-Memory-ready Markdown (which is to say &ldquo;Markdown&rdquo;). That included not just my journals from as long as I&rsquo;ve been using DayOne, but also the entire collection of 2,000 posts from my original blog &ndash; the one that started as MovableType, then became WordPress.</p>
<p>Oh, I also imported my Scribbles blog.</p>
<p>I&rsquo;ll put the source material up somewhere safe, but for the first time I have about 25 years worth of journals, diary entries, blog posts, and other personal writing sitting in a repo in a mostly standard format, organized by source.</p>
<p>It all also caused me to look at a 15-year-old project I worked on when management came around and told my team we&rsquo;d have to spend three weeks classifying 17 years worth of articles from 40 sites in a spreadsheet. I mustered my rudimentary Ruby and wrote <a href="https://github.com/pdxmph/autotaxonomizer">autotaxonomizer</a> in an afternoon, got a friendly dba to give me an article dump, sold my boss with a proof of concept, and reduced a three-week slog for 12 editors to each of them spending maybe 30 minutes filling out a spreadsheet with the keywords for their site categories.</p>
<p>Maybe the best part was after I talked the rest of the team through what I was going to do and noticed a text from my best work friend, Amy. I thought it was gonna be &ldquo;awesome!&rdquo; but it was &ldquo;This sucks. I was looking forward to three weeks of just filling out a spreadsheet.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>The eglot/lsp/apheleia rabbithole</title>
      <link>https://mike.puddingtime.org/posts/2025-05-20-the-eglotlspapheleia-rabbithole/</link>
      <pubDate>Tue, 20 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-20-the-eglotlspapheleia-rabbithole/</guid>
      <description>&lt;p&gt;&amp;hellip; I went down it last night and this morning.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m back on Doom after patiently dismantling a bunch of cruft I&amp;rsquo;d added to it. I set a goal of getting my package count under 200 (including all the batteries Doom includes). Because its default stance is that you want &lt;a href=&#34;https://github.com/emacs-lsp&#34;&gt;emacs-lsp&lt;/a&gt; and not &lt;a href=&#34;https://github.com/joaotavora/eglot&#34;&gt;eglot&lt;/a&gt; I went along with that initially, and it drove me a little bonkers. I think these things assume a much more organized person than I am, and LSP began to nag pretty much constantly until I made the mistake of telling it to blocklist &lt;code&gt;~/&lt;/code&gt;, at which point it pretty much stopped working, because there&amp;rsquo;s an implicit &lt;code&gt;-r&lt;/code&gt; in there.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&hellip; I went down it last night and this morning.</p>
<p>I&rsquo;m back on Doom after patiently dismantling a bunch of cruft I&rsquo;d added to it. I set a goal of getting my package count under 200 (including all the batteries Doom includes). Because its default stance is that you want <a href="https://github.com/emacs-lsp">emacs-lsp</a> and not <a href="https://github.com/joaotavora/eglot">eglot</a> I went along with that initially, and it drove me a little bonkers. I think these things assume a much more organized person than I am, and LSP began to nag pretty much constantly until I made the mistake of telling it to blocklist <code>~/</code>, at which point it pretty much stopped working, because there&rsquo;s an implicit <code>-r</code> in there.</p>
<p>So I toggled eglot in <code>init.el</code>, and the nagging stopped. It seems to need less explicit guidance.</p>
<p>Something I like about eglot as it works in Doom vs. emacs-lsp is that if it doesn&rsquo;t have a needed server for a given mode, it just tells you that in the minibuffer. It doesn&rsquo;t steal focus, demand action, or try to download anything for you. emacs-lsp (at least as Doom handles it) does all of that stuff and it&rsquo;s disruptive. I think it&rsquo;s an attempt to help you keep flow by just handling the matter, but about 1 time in 10 in the past it causes a hang and that sucks way worse than &ldquo;first time editing this code, pause, install, resume.&rdquo;</p>
<p>That brought me to &ldquo;now that it is not driving me to distraction, why do we even want LSPs?&rdquo;</p>
<p>With Markdown it&rsquo;s to have <a href="https://github.com/artempyanykh/marksman">Marksman</a>, which does this very cool thing where if you lead with <code>[[</code> it offers autocompletions of all the Markdown files in your project and creates a wiki link to the file you can then hop over to with <code>C-c C-o</code> or just by tapping <code>return</code> if you <code>toggle wiki links</code> in markdown-mode.</p>
<p>With everything else, it&rsquo;s just sort of educational to have something smarter about the code than me providing running commentary.</p>
<p>Next up, I had turned on Doom&rsquo;s support for code formatting/prettification, and that was causing everything to barf errors on save, most because I hadn&rsquo;t installed an expected formatter. Doom uses <a href="https://github.com/radian-software/apheleia">apheleia</a>, which is pretty well behaved but was not working with Ruby. That got annoying because you have to grab the formatter (<a href="https://prettier.io">prettier</a>), then deal with some errors that&rsquo;d seem to have nothing to do at all with the fact that it wants a <code>.prettierrc</code> either in project root or <code>~/</code>.</p>
<p>I knew I got it working because I ran it on this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">fruits</span> <span class="o">=</span> <span class="o">[</span><span class="s2">&#34;apple&#34;</span><span class="p">,</span><span class="s2">&#34;banana&#34;</span><span class="p">,</span><span class="s2">&#34;orange&#34;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">fruits</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="nb">puts</span> <span class="n">f</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">apples</span> <span class="o">=</span> <span class="o">[</span><span class="s2">&#34;golden delicious&#34;</span><span class="p">,</span> <span class="s2">&#34;honeycrisp&#34;</span><span class="p">,</span> <span class="s2">&#34;fuji&#34;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">apples</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">a</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="nb">puts</span> <span class="n">a</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div>
<p>&hellip; and got back:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">fruits</span> <span class="o">=</span> <span class="sx">%w[apple banana orange]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">fruits</span><span class="o">.</span><span class="n">each</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="nb">puts</span> <span class="n">f</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">apples</span> <span class="o">=</span> <span class="o">[</span><span class="s2">&#34;golden delicious&#34;</span><span class="p">,</span> <span class="s2">&#34;honeycrisp&#34;</span><span class="p">,</span> <span class="s2">&#34;fuji&#34;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">apples</span><span class="o">.</span><span class="n">each</span> <span class="p">{</span> <span class="o">|</span><span class="n">a</span><span class="o">|</span> <span class="nb">puts</span> <span class="n">a</span> <span class="p">}</span></span></span></code></pre></div>
<p>I sat with my feelings about that for a few seconds and decided it was educational. It&rsquo;s never really been about being particularly <em>good</em> or <em>sound</em> or <em>correct</em>, just about getting the thing to run.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Simple &#39;drafts&#39; for lmno.lol</title>
      <link>https://mike.puddingtime.org/posts/2025-05-19-simple-drafts-for-lmnolol/</link>
      <pubDate>Mon, 19 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-19-simple-drafts-for-lmnolol/</guid>
      <description>&lt;p&gt;lmno.lol does have a feature for hiding posts, but the last time I did blogging out of a monolithic file I struggled to remember to toggle that, so when I started working on a post that got longer and longer I ended up moving the work into a scratch buffer. That was annoying to me, so there&amp;rsquo;s this:&lt;/p&gt;






&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defvar&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mph/blog-drafts-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;expand-file-name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;drafts_lmno.md&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;~/journal/blog/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defvar&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mph/blog-published-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;expand-file-name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;lmno.md&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;~/journal/blog/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mph/move-heading-between-draft-and-published&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Move current Markdown L1 heading to the other blog file (drafts_lmno.md or lmno.md).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;If in drafts_lmno.md, moves to lmno.md. If in lmno.md, moves to drafts_lmno.md.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Always inserts at the beginning of the file.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;let*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;current-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;buffer-file-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;target-file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cond&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;string=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-truename&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;current-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-truename&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mph/blog-drafts-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mph/blog-published-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;string=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-truename&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;current-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-truename&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mph/blog-published-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mph/blog-drafts-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;user-error&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;This file is not drafts_lmno.md or lmno.md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;;; Save and cut the heading&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;save-excursion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;;; Find the beginning of the current L1 heading&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;beginning-of-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;looking-at&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;^# &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;bobp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;forward-line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;unless&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;looking-at&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;^# &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;user-error&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Not on a Markdown L1 heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;;; Find the end of the current heading (next L1 heading or end of buffer)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;forward-line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;looking-at&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;^# &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;eobp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;forward-line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;;; Cut the heading and its content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;heading-text&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;buffer-substring-no-properties&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;delete-region&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;c1&#34;&gt;;; Paste into target file at beginning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;with-current-buffer&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;find-file-noselect&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;target-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;goto-char&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;point-min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;insert&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;heading-text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;save-buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Moved heading to %s&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file-name-nondirectory&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;target-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;;; Doom leader key setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;map!&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;:leader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;ss&#34;&gt;:desc&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Blog commands&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s&#34;&gt;&amp;#34;l&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;:ignore&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;:which-key&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;blog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;ss&#34;&gt;:desc&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Move heading to other blog file&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s&#34;&gt;&amp;#34;l r&amp;#34;&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;mph/move-heading-between-draft-and-published&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;ss&#34;&gt;:desc&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;New lmno blog entry (md)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s&#34;&gt;&amp;#34;l b&amp;#34;&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;lmno-capture-post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Just, &lt;code&gt;SPC l r&lt;/code&gt; on a given l1 heading to shuttle it to either the drafts file or the main blog file.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>lmno.lol does have a feature for hiding posts, but the last time I did blogging out of a monolithic file I struggled to remember to toggle that, so when I started working on a post that got longer and longer I ended up moving the work into a scratch buffer. That was annoying to me, so there&rsquo;s this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defvar</span> <span class="nv">mph/blog-drafts-file</span> <span class="p">(</span><span class="nv">expand-file-name</span> <span class="s">&#34;drafts_lmno.md&#34;</span> <span class="s">&#34;~/journal/blog/&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defvar</span> <span class="nv">mph/blog-published-file</span> <span class="p">(</span><span class="nv">expand-file-name</span> <span class="s">&#34;lmno.md&#34;</span> <span class="s">&#34;~/journal/blog/&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/move-heading-between-draft-and-published</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="s">&#34;Move current Markdown L1 heading to the other blog file (drafts_lmno.md or lmno.md).
</span></span></span><span class="line"><span class="cl"><span class="s">If in drafts_lmno.md, moves to lmno.md. If in lmno.md, moves to drafts_lmno.md.
</span></span></span><span class="line"><span class="cl"><span class="s">Always inserts at the beginning of the file.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">current-file</span> <span class="p">(</span><span class="nv">buffer-file-name</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">target-file</span> <span class="p">(</span><span class="nb">cond</span>
</span></span><span class="line"><span class="cl">                       <span class="p">((</span><span class="nf">string=</span> <span class="p">(</span><span class="nv">file-truename</span> <span class="nv">current-file</span><span class="p">)</span> <span class="p">(</span><span class="nv">file-truename</span> <span class="nv">mph/blog-drafts-file</span><span class="p">))</span> <span class="nv">mph/blog-published-file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                       <span class="p">((</span><span class="nf">string=</span> <span class="p">(</span><span class="nv">file-truename</span> <span class="nv">current-file</span><span class="p">)</span> <span class="p">(</span><span class="nv">file-truename</span> <span class="nv">mph/blog-published-file</span><span class="p">))</span> <span class="nv">mph/blog-drafts-file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                       <span class="p">(</span><span class="no">t</span> <span class="p">(</span><span class="nv">user-error</span> <span class="s">&#34;This file is not drafts_lmno.md or lmno.md&#34;</span><span class="p">)))))</span>
</span></span><span class="line"><span class="cl">    <span class="c1">;; Save and cut the heading</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">save-excursion</span>
</span></span><span class="line"><span class="cl">      <span class="c1">;; Find the beginning of the current L1 heading</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">beginning-of-line</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">while</span> <span class="p">(</span><span class="nb">and</span> <span class="p">(</span><span class="nf">not</span> <span class="p">(</span><span class="nv">looking-at</span> <span class="s">&#34;^# &#34;</span><span class="p">))</span> <span class="p">(</span><span class="nf">not</span> <span class="p">(</span><span class="nv">bobp</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">forward-line</span> <span class="mi">-1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">unless</span> <span class="p">(</span><span class="nv">looking-at</span> <span class="s">&#34;^# &#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">user-error</span> <span class="s">&#34;Not on a Markdown L1 heading&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="k">let</span> <span class="p">((</span><span class="nv">start</span> <span class="p">(</span><span class="nv">point</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">        <span class="c1">;; Find the end of the current heading (next L1 heading or end of buffer)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">forward-line</span> <span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">while</span> <span class="p">(</span><span class="nb">and</span> <span class="p">(</span><span class="nf">not</span> <span class="p">(</span><span class="nv">looking-at</span> <span class="s">&#34;^# &#34;</span><span class="p">))</span> <span class="p">(</span><span class="nf">not</span> <span class="p">(</span><span class="nv">eobp</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nv">forward-line</span> <span class="mi">1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="c1">;; Cut the heading and its content</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="k">let</span> <span class="p">((</span><span class="nv">heading-text</span> <span class="p">(</span><span class="nv">buffer-substring-no-properties</span> <span class="nv">start</span> <span class="p">(</span><span class="nv">point</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nv">delete-region</span> <span class="nv">start</span> <span class="p">(</span><span class="nv">point</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">          <span class="c1">;; Paste into target file at beginning</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nv">with-current-buffer</span> <span class="p">(</span><span class="nv">find-file-noselect</span> <span class="nv">target-file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">goto-char</span> <span class="p">(</span><span class="nv">point-min</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">insert</span> <span class="nv">heading-text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">save-buffer</span><span class="p">)))))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">message</span> <span class="s">&#34;Moved heading to %s&#34;</span> <span class="p">(</span><span class="nv">file-name-nondirectory</span> <span class="nv">target-file</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl"><span class="c1">;; Doom leader key setup</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="ss">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="ss">:desc</span> <span class="s">&#34;Blog commands&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;l&#34;</span> <span class="o">&#39;</span><span class="p">(</span><span class="ss">:ignore</span> <span class="no">t</span> <span class="ss">:which-key</span> <span class="s">&#34;blog&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="ss">:desc</span> <span class="s">&#34;Move heading to other blog file&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;l r&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/move-heading-between-draft-and-published</span>
</span></span><span class="line"><span class="cl">      <span class="ss">:desc</span> <span class="s">&#34;New lmno blog entry (md)&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;l b&#34;</span> <span class="nf">#&#39;</span><span class="nv">lmno-capture-post</span><span class="p">)</span></span></span></code></pre></div>
<p>Just, <code>SPC l r</code> on a given l1 heading to shuttle it to either the drafts file or the main blog file.</p>
]]></content:encoded>
    </item>
    <item>
      <title>So many brooms, so many buckets (Updated)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-17-so-many-brooms-so-many-buckets-updated/</link>
      <pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-17-so-many-brooms-so-many-buckets-updated/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54525470407_762922cb42_b.jpg&#34; alt=&#34;A yellow CAT with a big claw approaches a big blue box.&#34;&gt;&lt;/p&gt;
&lt;p&gt;I started the day playing around with &lt;a href=&#34;https://modelcontextprotocol.io/introduction&#34;&gt;MCP&amp;rsquo;s&lt;/a&gt; for Claude Desktop. I found &lt;a href=&#34;https://github.com/keegancsmith/emacs-mcp-server&#34;&gt;one for Emacs&lt;/a&gt; and one called &lt;a href=&#34;https://github.com/basicmachines-co/basic-memory&#34;&gt;Basic Memory&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;emacs-mcp-server sends evals to your running Emacs instance via &lt;code&gt;emacsclient.&lt;/code&gt; It&amp;rsquo;s sort of fascinating to watch in progress. Not the fastest thing on the planet, but it was a jolt the first time I turned my attention to something else and came back to realize it had created a new function and added it to my configuration.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54525470407_762922cb42_b.jpg" alt="A yellow CAT with a big claw approaches a big blue box."></p>
<p>I started the day playing around with <a href="https://modelcontextprotocol.io/introduction">MCP&rsquo;s</a> for Claude Desktop. I found <a href="https://github.com/keegancsmith/emacs-mcp-server">one for Emacs</a> and one called <a href="https://github.com/basicmachines-co/basic-memory">Basic Memory</a>.</p>
<p>emacs-mcp-server sends evals to your running Emacs instance via <code>emacsclient.</code> It&rsquo;s sort of fascinating to watch in progress. Not the fastest thing on the planet, but it was a jolt the first time I turned my attention to something else and came back to realize it had created a new function and added it to my configuration.</p>
<p>It was an even <em>bigger</em> jolt when I went after the problem of Emacs not being properly associated with a number of file types on my Mac:</p>
<p>It wrote a script to use <a href="https://github.com/moretension/duti">duti</a> to make all the associations, and when I reported that they weren&rsquo;t &ldquo;sticking&rdquo; it decided to write a systemd agent to periodically re-run its duti script. I didn&rsquo;t realize that had happened until macOS sent me a notification that something new was running on my behalf.</p>
<p>I &hellip; am not sure what to make of this, entirely.</p>
<p>Well &hellip; a little I am.</p>
<p>For about an hour, this seemed very cool. I haven&rsquo;t used Claude much, but with it able to pilot Emacs we got through a small reimplementation of org-capture for Markdown files that built on a few recent projects and allows for simple templating. Neat. Pretty complex. Functioned correctly.</p>
<p>Unlike previous sessions with an LLM doing this kind of thing, though, it was a little dulling and weird to have Claude and Emacs quietly collaborating to write all this. It got me to a fundamental understanding of how I am feeling about LLM-driven development:</p>
<p>I have one eye cocked over my shoulder because most people I know personally do not like to admit they perceive any utility with these things, often seem uncomfortable mentioning it if they do use them, and seem to feel a small, almost ritualized compulsion to shit on them even if they do perceive utility. There are any number of reasons someone might be there with these things. They activate a whole catalog of anxieties and irritations.</p>
<p><em>But</em> I am able to make things with these tools I couldn&rsquo;t make without 10x the time and effort, and the things I make let me get to what I want to do and spend less time doing the toil of supporting activities more quickly.</p>
<p>I guess I think that they are labor saving devices with the same caveats riding lawnmowers are. Like, I&rsquo;m glad to be free of the scythe, but also once I have a new John Deer riding mower I understand I can&rsquo;t sort of tie the steering wheel to a 15 degree angle, put a brick on the accelerator, and get back to my nap.</p>
<p>And I understand they&rsquo;re not people replacing. Even with the modest projects I work on I can see that.</p>
<p>But one thing I&rsquo;ve come to enjoy is the part that involves playing to their weaknesses:</p>
<p>I can&rsquo;t sit back and say &ldquo;make this thing for me that does <em>some broad directive</em>.&rdquo;</p>
<p>I have to ask for something simple, then slowly layer things on, redirecting from blind alleys or unwanted optimizations. It&rsquo;s a creative, iterative process and I enjoy it. It&rsquo;s a way to engage with a problem I&rsquo;d like to solve that involves patiently working through the steps of the problem, having second thoughts, realizing that I want things that are at odds with each other, sometimes realizing there&rsquo;s a much more elegant way to do something. The things I end up with are maybe not the best in terms of their coding craft, but they&rsquo;re tailored to my mental model.</p>
<p>So Claude and Emacs working in concert removed a small amount of friction I actually welcome in the process of looking at code, moving it over, reading it before evaluating it in a buffer, etc. I didn&rsquo;t care for that. It was alienating.</p>
<p>The <em>other</em> MCP server I mentioned, <a href="https://github.com/basicmachines-co/basic-memory">Basic Memory</a>, sits in Claude Desktop and remembers what you tell it by writing Markdown notes in a directory. They&rsquo;re basic &ldquo;Markdown-n-YAML&rdquo; files with light structure. You can have the usual sort of &ldquo;talk to a robot&rdquo; conversation for a while, then prompt it to make a note, and it does. Then those notes become part of its persistent context. There are db-backed services to do this at scale, but it suits me very much to have something like this. It&rsquo;s super transparent and introspectable.</p>
<p>In addition to notes, you can record &ldquo;Observations&rdquo; in your Markdown files. Observations are simple lines of Markdown, as these examples from the project repo:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="k">-</span> [method] Pour over extracts more floral notes than French press
</span></span><span class="line"><span class="cl"><span class="k">-</span> [tip] Grind size should be medium-fine for pour over <span class="ni">#brewing</span>
</span></span><span class="line"><span class="cl"><span class="k">-</span> [preference] Ethiopian beans have bright, fruity flavors (especially from Yirgacheffe)
</span></span><span class="line"><span class="cl"><span class="k">-</span> [fact] Lighter roasts generally contain more caffeine than dark roasts
</span></span><span class="line"><span class="cl"><span class="k">-</span> [experiment] Tried 1:15 coffee-to-water ratio with good results
</span></span><span class="line"><span class="cl"><span class="k">-</span> [resource] James Hoffman&#39;s V60 technique on YouTube is excellent
</span></span><span class="line"><span class="cl"><span class="k">-</span> [question] Does water temperature affect extraction of different compounds differently?
</span></span><span class="line"><span class="cl">- [note] My favorite local shop uses a 30-second bloom time</span></span></code></pre></div>
<p>These become grist for the MCP, alongside your notes, creating a sort of synthesizing glue, and it persists from session to session.</p>
<p>It is still far too early to say much about this. I&rsquo;ve got a few ideas about how to use it in some work and personal contexts, but haven&rsquo;t paused long enough to think of a workflow to facilitate those ideas.</p>
<p><em>( <strong>Note:</strong> Updated this post to narrow down a little more finely the kinds of social responses to LLMs and their use I have noticed.)</em></p>
]]></content:encoded>
    </item>
    <item>
      <title>A cautionary Syncthing tale</title>
      <link>https://mike.puddingtime.org/posts/2025-05-15-a-cautionary-syncthing-tale/</link>
      <pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-15-a-cautionary-syncthing-tale/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54521695712_d63f238ec5_b.jpg&#34; alt=&#34;Sticker: &amp;ldquo;Fresh meat for the grinder&amp;rdquo;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Over on the other blog I &lt;a href=&#34;https://mike.puddingtime.org/synctrain-for-syncthing-on-ios/&#34;&gt;recently enthused about SyncTrain&lt;/a&gt;, an iOS SyncThing client. I still maintain it is very good, but wow did I end up foot-gunning with it:&lt;/p&gt;
&lt;p&gt;I set Journelly up to use a SyncTrain share on my iPhone, promising myself I&amp;rsquo;d make sure to do the occasional manual sync, never leave my Journelly file open when not editing it on one of the real computers, etc. I still managed to end up with a sync error, and SyncThing dutifully created a sync error file. The Journelly app picked up that file and started using it as the default file to write to – I&amp;rsquo;m assuming iOS filesystem arcana is involved – which I wouldn&amp;rsquo;t have noticed if I hadn&amp;rsquo;t manually peeked in the directory instead of just using an org-capture template to make Journelly entries on my Mac.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54521695712_d63f238ec5_b.jpg" alt="Sticker: &ldquo;Fresh meat for the grinder&rdquo;"></p>
<p>Over on the other blog I <a href="https://mike.puddingtime.org/synctrain-for-syncthing-on-ios/">recently enthused about SyncTrain</a>, an iOS SyncThing client. I still maintain it is very good, but wow did I end up foot-gunning with it:</p>
<p>I set Journelly up to use a SyncTrain share on my iPhone, promising myself I&rsquo;d make sure to do the occasional manual sync, never leave my Journelly file open when not editing it on one of the real computers, etc. I still managed to end up with a sync error, and SyncThing dutifully created a sync error file. The Journelly app picked up that file and started using it as the default file to write to – I&rsquo;m assuming iOS filesystem arcana is involved – which I wouldn&rsquo;t have noticed if I hadn&rsquo;t manually peeked in the directory instead of just using an org-capture template to make Journelly entries on my Mac.</p>
<p>This was only going on for two days and three short entries, but it was pesky: I had a Journelly.org file that went up to Sunday, then a Journelly.sync-error.org file that had grabbed those three short entries, and also spawned a Journelly media folder with the same name. The fix, in the end, was to move my Journelly.org file and media folder into an empty iCloud folder, delete the Journelly app, then reinstall it and immediately tell it to use the new iCloud location. Then I was able to go in and tack on the three entries from the conflicted version. So no data lost, but in hindsight it was a bad move to try to use SyncThing on iOS for app data: There is no reliable background syncing on iOS, just semi-manual workarounds, so it&rsquo;s inevitable that there&rsquo;ll be a conflict.</p>
<p>The recommended non-in-app storage method for Journelly is iCloud, and I&rsquo;d endorse that if being able to edit your Journelly file on the desktop is mandatory.</p>
<p>It&rsquo;s not a ding on Journelly. It can only work with the files it tells you to. It&rsquo;s not a ding on SyncThing, which I use for several other applications. It&rsquo;s not a ding on SyncTrain, which does the best it can with the limitations iOS imposes. And it&rsquo;s not a ding on iOS, which we all understand quite well at this point: It doesn&rsquo;t really tolerate long-lived background services and nobody has ever pretended otherwise. It&rsquo;s on me for thinking it was a good idea in the first place.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Offsite&#39;s over</title>
      <link>https://mike.puddingtime.org/posts/2025-05-15-offsites-over/</link>
      <pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-15-offsites-over/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54522731514_e87aff2e15_b.jpg&#34; alt=&#34;A table by a corner window with metal stools around it.&#34;&gt;&lt;/p&gt;
&lt;p&gt;Rainy afternoon here on the last day of the work offsite. We all went down to Pine St. Market and had ramen at the end of the day, and I said goodbye to some of the folks who came in from out of town. A few I&amp;rsquo;ll see once more for dinner tomorrow.&lt;/p&gt;
&lt;p&gt;This kind of work function is always a little draining by the time it&amp;rsquo;s over. Spending days in a small room, even with pretty good people, just takes some battery, and this one was a little melancholy because one of my teammates is moving on.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54522731514_e87aff2e15_b.jpg" alt="A table by a corner window with metal stools around it."></p>
<p>Rainy afternoon here on the last day of the work offsite. We all went down to Pine St. Market and had ramen at the end of the day, and I said goodbye to some of the folks who came in from out of town. A few I&rsquo;ll see once more for dinner tomorrow.</p>
<p>This kind of work function is always a little draining by the time it&rsquo;s over. Spending days in a small room, even with pretty good people, just takes some battery, and this one was a little melancholy because one of my teammates is moving on.</p>
]]></content:encoded>
    </item>
    <item>
      <title>trying to get org-capture to work is nature&#39;s way of telling us to slow down</title>
      <link>https://mike.puddingtime.org/posts/2025-05-13-trying-to-get-org-capture-to-work-is-natures-way-of-telling-us-to-slow-down/</link>
      <pubDate>Tue, 13 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-13-trying-to-get-org-capture-to-work-is-natures-way-of-telling-us-to-slow-down/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54518426203_6e7fccbac4_b.jpg&#34; alt=&#34;An attendant stands alone in front of a house of mirrors.&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been so happy with my emacs-plus install that there was an when-not-if element to the whole thing. It came today when I tried to get org-capture to work and it … just wouldn&amp;rsquo;t. So I tried an alternate build and lost over an hour I could have spent writing to uninstalling, reinstalling, troubleshooting, rewriting a launchd agent, etc.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54518426203_6e7fccbac4_b.jpg" alt="An attendant stands alone in front of a house of mirrors."></p>
<p>I&rsquo;ve been so happy with my emacs-plus install that there was an when-not-if element to the whole thing. It came today when I tried to get org-capture to work and it … just wouldn&rsquo;t. So I tried an alternate build and lost over an hour I could have spent writing to uninstalling, reinstalling, troubleshooting, rewriting a launchd agent, etc.</p>
<p>I&rsquo;m sensitive about my writing time, because my first team is in town this week and I&rsquo;ll be spending most of my days and a chunk of my evenings downtown doing <em>strategy stuff</em> with some great people, but I won&rsquo;t have any writing time. So that time I could have had today is lost.</p>
<p>… and I guess I&rsquo;m annoyed because it was such a stupid little rabbit hole: I thought something sounded sorta cool, figured it&rsquo;d just take a second and then <em>poof</em>. And such a violent <em>poof</em> that stuff I&rsquo;d had working <em>just fine</em> an hour earlier suddenly <em>wasn&rsquo;t working</em> thanks to some mystery of I don&rsquo;t even know what.</p>
<p>So, back on track again. In the end I just had to clean up some of my config&rsquo;s hygiene, and that was probably for the best anyhow.</p>
<p>But still down over an hour of writing time.</p>
<p>Spending this much time writing about it probably seems like a bad reaction to a small thing, but part of what I have liked a lot about my increased journaling and personal writing output has been the opportunity it affords me to learn and internalize. So this is sort of a public exercise in re-learning something: I&rsquo;m happier when I&rsquo;m making a thing, not when I&rsquo;m fucking around with the tools to make things.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Digging in on the photo project</title>
      <link>https://mike.puddingtime.org/posts/2025-05-12-digging-in-on-the-photo-project/</link>
      <pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-12-digging-in-on-the-photo-project/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54515858100_18cc789705_b.jpg&#34; alt=&#34;A man walks by a brick building, partially painted light blue partially natural brick.&#34;&gt;&lt;/p&gt;
&lt;p&gt;I abhor feeling attachment to &lt;em&gt;things&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Years ago I was out in the garage going through some old boxes at the same time I was thinking about some people I knew who seemed very connected to what they had been, and uncertain of how to go about being who they had become. So when I reached into the box and pulled out some old object I thought, &amp;ldquo;I don&amp;rsquo;t want this thing anymore,&amp;rdquo; then I thought &amp;ldquo;oh, but it&amp;rsquo;s a reminder of …&amp;rdquo; and then I thought, &amp;ldquo;I&amp;rsquo;m in no danger of forgetting that time.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54515858100_18cc789705_b.jpg" alt="A man walks by a brick building, partially painted light blue partially natural brick."></p>
<p>I abhor feeling attachment to <em>things</em>.</p>
<p>Years ago I was out in the garage going through some old boxes at the same time I was thinking about some people I knew who seemed very connected to what they had been, and uncertain of how to go about being who they had become. So when I reached into the box and pulled out some old object I thought, &ldquo;I don&rsquo;t want this thing anymore,&rdquo; then I thought &ldquo;oh, but it&rsquo;s a reminder of …&rdquo; and then I thought, &ldquo;I&rsquo;m in no danger of forgetting that time.&rdquo;</p>
<p>Since then, I&rsquo;ve tried to just … put things aside when it occurs to me.</p>
<p>My collection of digital photographs is not something I feel able to simply set aside. I got a reminder of that this afternoon, when I noticed Arq complaining about a failed Lightroom backup that, on initial investigation, appeared to be a tanked drive. The drive had not tanked, but there was a moment of uncertainty about whether data was lost, and how much that might be, what it would take to recover it, etc.</p>
<p>I&rsquo;ve got my Lightroom stuff split into two vaults. One runs from ca. 2000 to 2014, and the other covers 2015 to now. The vault with older stuff just sits there. It&rsquo;s poorly curated, with duplicates and culls all mixed in. I am sure most of what I care about at all is in the equally desultory shoebox that is my iCloud Photos collection. It&rsquo;s all backed up both to NAS and my B2 account (though, you know, B2 seems <a href="https://arstechnica.com/gadgets/2025/04/backblaze-responds-to-claims-of-sham-accounting-customer-backups-at-risk/">less ikely to outlive me</a> than I&rsquo;d hoped) but it&rsquo;s not usable to anyone in my family, really. It&rsquo;s just a mess that happens to be backed up. The newer vault is in a little better shape, but it&rsquo;s still not great.</p>
<p>Anyhow, the brief not-incident reminded me of the project I&rsquo;ve meant to for a couple of years:</p>
<ul>
<li>Go through year by year and figure out the 50 or 100 images from each year that get five stars. I&rsquo;ve done that for a few years, but when I went way back it got hard.</li>
<li>Opportunistically delete the culls and duplicates when I spot them.</li>
<li>Make an artifact out of the five-star images. Right now I&rsquo;m thinking photo books.</li>
<li>Organize those &ldquo;best of the year&rdquo; images somewhere they&rsquo;re easy for family to find. flickr has an actual non-profit foundation now, and it&rsquo;s not expensive to maintain a Pro account.</li>
<li>Establish 3-2-1 backups terminating in Glacier, and quit thinking about it all as a potential thing. Rather, realize the potential as best I can imagine living with, and then set it aside.</li>
</ul>
<p>There are a few other moving parts I identified as I was outlining how to set the project up and actually do it, but it&rsquo;s definitely time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Experiments in atomic writing</title>
      <link>https://mike.puddingtime.org/posts/2025-05-12-experiments-in-atomic-writing/</link>
      <pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-12-experiments-in-atomic-writing/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54516189438_ec2728009f_b.jpg&#34; alt=&#34;Three men sit around a Starbucks.&#34;&gt;&lt;/p&gt;
&lt;p&gt;I am not sure how this will go and it could be this is futzing under another guise, but this evening I &lt;em&gt;did&lt;/em&gt; improve on my futz pattern a little by choosing to devote a journal entry to some thinking I&amp;rsquo;ve been doing about The News, how to consume it, how much to consume, etc. etc. IOW, instead of diddling around with a tool or a toy, I started writing about something that matters to me.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54516189438_ec2728009f_b.jpg" alt="Three men sit around a Starbucks."></p>
<p>I am not sure how this will go and it could be this is futzing under another guise, but this evening I <em>did</em> improve on my futz pattern a little by choosing to devote a journal entry to some thinking I&rsquo;ve been doing about The News, how to consume it, how much to consume, etc. etc. IOW, instead of diddling around with a tool or a toy, I started writing about something that matters to me.</p>
<p>Ordinarily, writing like that either gets punted into a blog post pretty quickly or gets a few sentences then peters off. Worse, it sometimes becomes a blog draft that I kill because it&rsquo;s not a viable blog post for whatever reason, but now it&rsquo;s too other-oriented to be a good journal entry any longer.</p>
<p>Tonight I started drifting in that direction – the blog post that would not come to a good end– and I didn&rsquo;t like that. But there&rsquo;s more to think about because when I look at my behavior toward news media in the past several months something has definitely changed very profoundly, and while we can all guess <em>why</em> I&rsquo;m not sure how to feel about that yet.</p>
<p>Last time around, post-2016, I picked up a lot of baggage about media consumption, what I made of <em>other</em> peoples&rsquo; apparent patterns, what I thought that was doing to them, where I thought it was coming from, and what I thought of all the rationales people deploy to justify their choices.</p>
<p>This time around, I can feel some of those thoughts rolling around inside, but I feel a little more detached from them, it feels a little less personal, things that seemed very urgent seem less so, and some stuff just can&rsquo;t be allowed to matter. It turns out <a href="https://xkcd.com/386/">someone is <em>still</em> wrong on the internet</a>.</p>
<p>But I don&rsquo;t want to write an essay about all of it. I&rsquo;ve never liked outlines much. So I decided to experiment with atomic notes on this topic, just committing little nuggets and chaining them off of each other, but when I could tell I was headed out of the narrow confines of one atom – say, &ldquo;what&rsquo;s good about the news?&rdquo; – and into another atom – &ldquo;how much news is enough to get the good parts?&rdquo; – I made a new atom and picked up there.</p>
<p>It helped me in one way that didn&rsquo;t occur to me going in, which is that it&rsquo;s much easier to resist having a narrative of some kind, or an urge toward a conclusion. When I asked &ldquo;what&rsquo;s good about the news?&rdquo; and wrote about that, and then thought, &ldquo;probably a good idea to make a sibling to ask what&rsquo;s bad about it,&rdquo; that got its own node and I didn&rsquo;t have both sets of things sitting there right next to each other jostling for head of the line, or demanding I steer toward the conclusion.</p>
<p>Because I don&rsquo;t <em>have</em> a conclusion. All I know is that something has definitely changed in my thinking and behavior around a core part of most college-educated peoples&rsquo; ideas about how they&rsquo;re supposed to behave in the world, and I&rsquo;d like to think it through without having a conclusion in mind. So we&rsquo;ll keep at this for now.</p>
<p>Oh, right, what&rsquo;s the toy: <a href="https://protesilaos.com/emacs/denote">Denote</a> and <a href="https://protesilaos.com/emacs/denote-sequence">denote-sequence</a>. Of all the note frameworks, etc. that I&rsquo;ve played around with, my org-based Denote notes are still the most legible, useful, and navigable. Still getting the hang of how to wrangle a sequence, but not so much that I&rsquo;ve had to stop writing and screw around with it to the point of a derail.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Eugene</title>
      <link>https://mike.puddingtime.org/posts/2025-05-11-eugene/</link>
      <pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-11-eugene/</guid>
      <description>&lt;p&gt;We took a trip to Eugene to visit Ben. Walking around this morning we came across the &lt;a href=&#34;https://smjhouse.org&#34;&gt;Shelton McMurphey Johnson House&lt;/a&gt;, and then picked up the trail up Skinner&amp;rsquo;s Butte.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54513438300_9ff7ef8f66_b.jpg&#34; alt=&#34;Concrete steps leading up to an old Victorian mansion&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54513267499_f2417da57f_b.jpg&#34; alt=&#34;An air conditioner, old electricity meters, and barred windows on a green building&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54513346273_fc50bfb2b1_b.jpg&#34; alt=&#34;A rock climber scales a face&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54513438965_7fa5b541d0_b.jpg&#34; alt=&#34;A covered parking area in green and yellow light at night&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>We took a trip to Eugene to visit Ben. Walking around this morning we came across the <a href="https://smjhouse.org">Shelton McMurphey Johnson House</a>, and then picked up the trail up Skinner&rsquo;s Butte.</p>
<p><img src="https://farm66.staticflickr.com/65535/54513438300_9ff7ef8f66_b.jpg" alt="Concrete steps leading up to an old Victorian mansion"></p>
<p><img src="https://farm66.staticflickr.com/65535/54513267499_f2417da57f_b.jpg" alt="An air conditioner, old electricity meters, and barred windows on a green building"></p>
<p><img src="https://farm66.staticflickr.com/65535/54513346273_fc50bfb2b1_b.jpg" alt="A rock climber scales a face"></p>
<p><img src="https://farm66.staticflickr.com/65535/54513438965_7fa5b541d0_b.jpg" alt="A covered parking area in green and yellow light at night"></p>
]]></content:encoded>
    </item>
    <item>
      <title>flickr&#39;s alright</title>
      <link>https://mike.puddingtime.org/posts/2025-05-11-flickrs-alright/</link>
      <pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-11-flickrs-alright/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using SmugMug for a while, and really like how well it has worked for &lt;a href=&#34;https://pix.puddingtime.org&#34;&gt;my pix subdomain&lt;/a&gt;, but it has always come with a little feeling of &amp;ldquo;what am I even doing on SmugMug to begin with?&amp;rdquo; It&amp;rsquo;s meant for people who want to sell their photography, and everything about its customer comms reminds you of that.&lt;/p&gt;
&lt;p&gt;In the process of getting imgup to broaden its horizons and work with flickr, I remembered that I actually &lt;em&gt;like&lt;/em&gt; flickr (which is owned and operated by SmugMug now). It&amp;rsquo;s just more oriented around &amp;ldquo;you want to put photos up online,&amp;rdquo; without any emphasis on being a &amp;ldquo;pro,&amp;rdquo; and without Glass&amp;rsquo;s … whatever it is about Glass&amp;rsquo;s vibe.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been using SmugMug for a while, and really like how well it has worked for <a href="https://pix.puddingtime.org">my pix subdomain</a>, but it has always come with a little feeling of &ldquo;what am I even doing on SmugMug to begin with?&rdquo; It&rsquo;s meant for people who want to sell their photography, and everything about its customer comms reminds you of that.</p>
<p>In the process of getting imgup to broaden its horizons and work with flickr, I remembered that I actually <em>like</em> flickr (which is owned and operated by SmugMug now). It&rsquo;s just more oriented around &ldquo;you want to put photos up online,&rdquo; without any emphasis on being a &ldquo;pro,&rdquo; and without Glass&rsquo;s … whatever it is about Glass&rsquo;s vibe.</p>
<p>In the end, it&rsquo;s not about flickr being a permanent &ldquo;home.&rdquo; I wouldn&rsquo;t trust any commercial entity to be home for my photos. But it&rsquo;s a fine place to put photos to share.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The futzes</title>
      <link>https://mike.puddingtime.org/posts/2025-05-11-the-futzes/</link>
      <pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-11-the-futzes/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54513392574_38506308f6_b.jpg&#34; alt=&#34;Seattle Waterfront&#34;&gt;&lt;/p&gt;
&lt;p&gt;Yeesh. So, re: imgup. It is pretty much &amp;ldquo;done&amp;rdquo; to me as a tool. Meaning, it does exactly what I want it to do, plus a few things I didn&amp;rsquo;t start out with. There&amp;rsquo;s maybe one more tweak (&amp;ldquo;just give me the URL&amp;rdquo;) I can go add in five minutes when I get around to it. But today I was thinking &amp;ldquo;oh, it&amp;rsquo;d be cool if it had a history,&amp;rdquo; and &amp;ldquo;oh, it&amp;rsquo;d be cool if it could show thumbnails in kitty.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54513392574_38506308f6_b.jpg" alt="Seattle Waterfront"></p>
<p>Yeesh. So, re: imgup. It is pretty much &ldquo;done&rdquo; to me as a tool. Meaning, it does exactly what I want it to do, plus a few things I didn&rsquo;t start out with. There&rsquo;s maybe one more tweak (&ldquo;just give me the URL&rdquo;) I can go add in five minutes when I get around to it. But today I was thinking &ldquo;oh, it&rsquo;d be cool if it had a history,&rdquo; and &ldquo;oh, it&rsquo;d be cool if it could show thumbnails in kitty.&rdquo;</p>
<p>No real utility to those things, exactly. Well, the history idea <em>kind of</em> has utility. The kitty thumbnails thing is sheer &ldquo;what if I could …&rdquo; pointlessness I&rsquo;d never take advantage of. I was just riding in the car up I5 from Eugene, sort of daydreaming, and I imagined what the feature would look like and got a little curious.</p>
<p>But making it do that would just be noodling I could do to noodle. It&rsquo;s <em>not</em> doing the things I made that tool to help me do, which are write and share photos.</p>
<p>I&rsquo;m glad I realized I didn&rsquo;t need to do anything more with it. I guess I just wish I didn&rsquo;t have the impulse to begin with. I&rsquo;m sitting around the house, maybe a little bored, not wanting to do anything in particular … I&rsquo;d rather my first impulse be &ldquo;pick up a book,&rdquo; or &ldquo;work with some photos,&rdquo; or &ldquo;listen carefully to some album.&rdquo;</p>
<p>I think some of this is recent back problems. I let myself stop running for a few weeks and tightened up, so now it&rsquo;s a back-and-forth process to get the stiffness worked out, and it feels <em>great</em> to spend a lot of time in a chair with a heating pad, being acutely aware that I don&rsquo;t want to do much. But &ldquo;not doing much&rdquo; has seeped into things I could be doing, not just things it&rsquo;s probably not a good idea to do a ton of.</p>
]]></content:encoded>
    </item>
    <item>
      <title>writeroom-mode</title>
      <link>https://mike.puddingtime.org/posts/2025-05-11-writeroom-mode/</link>
      <pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-11-writeroom-mode/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54513402166_3694b82d0c_b.jpg&#34; alt=&#34;rusty tools hanging on a barn wall&#34;&gt;&lt;/p&gt;
&lt;p&gt;For whatever reason I have an allergic reaction to the phrase &amp;ldquo;distraction-free,&amp;rdquo; but as I&amp;rsquo;ve waffled back and forth between org-mode and Markdown as the starting point for prose I&amp;rsquo;ve also thought about how my model writing app on macOS is probably &lt;a href=&#34;https://ia.net/writer&#34;&gt;iA Writer&lt;/a&gt;, because it&amp;rsquo;s just so easy on the eyes. I kinda buy the limited choice it offers, too. That might be why it edges out Ulysses.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54513402166_3694b82d0c_b.jpg" alt="rusty tools hanging on a barn wall"></p>
<p>For whatever reason I have an allergic reaction to the phrase &ldquo;distraction-free,&rdquo; but as I&rsquo;ve waffled back and forth between org-mode and Markdown as the starting point for prose I&rsquo;ve also thought about how my model writing app on macOS is probably <a href="https://ia.net/writer">iA Writer</a>, because it&rsquo;s just so easy on the eyes. I kinda buy the limited choice it offers, too. That might be why it edges out Ulysses.</p>
<p>So I&rsquo;ve given <a href="https://github.com/joostkremers/writeroom-mode">writeroom-mode</a> for Emacs a spin and it does a nice job of presenting a simple, clean writing screen. No modeline, pulls the margins in, and you can enlarge the font (and pick a variable pitch one).</p>
<p>On a macBook with Emacs running in full screen mode it is, indeed, pretty distraction free. Using the monokai-pro theme, it&rsquo;s plenty contrasty, but not glaring.</p>
<p>It&rsquo;s sort of nice <a href="https://puddingtime.org/emacs-plus">having a good Emacs build again</a>. When I have an overloaded config with too much going on, things feel sort of rickety and weird and there&rsquo;s an underlying sense of non-calm under the surface that makes it hard to use as a creative tool.</p>
<p>When it&rsquo;s set up for simplicity and stability – when there&rsquo;s less junk going on – it&rsquo;s able to just sort of look nice and feel comfortable.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Missing Mixel</title>
      <link>https://mike.puddingtime.org/posts/2025-05-10-missing-mixel/</link>
      <pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-10-missing-mixel/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/7146/6774603235_d9ee88a716_b.jpg&#34; alt=&#34;A collage of clipart and Soviet-era imagery&#34;&gt;&lt;/p&gt;
&lt;p&gt;Does anyone else remember Mixel? It was a collaborative collage app that arrived early in the iPad era, was amazing for a little while, then pivoted into online postcards or something, then slipped under the waves.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://live.staticflickr.com/7174/6810827461_e4c9ba06a0_b.jpg&#34; alt=&#34;Line art astronauts come through a swirling portal in a wheat field&#34;&gt;&lt;/p&gt;
&lt;p&gt;You started with a blank canvas and a collection of images that sort of acted like stickers you could plop on the canvas and manipulate into a collage. The collection was socially driven, so for periods something would find its way into collective consciousness, spawning a bunch of riffs on a theme.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://live.staticflickr.com/7146/6774603235_d9ee88a716_b.jpg" alt="A collage of clipart and Soviet-era imagery"></p>
<p>Does anyone else remember Mixel? It was a collaborative collage app that arrived early in the iPad era, was amazing for a little while, then pivoted into online postcards or something, then slipped under the waves.</p>
<p><img src="https://live.staticflickr.com/7174/6810827461_e4c9ba06a0_b.jpg" alt="Line art astronauts come through a swirling portal in a wheat field"></p>
<p>You started with a blank canvas and a collection of images that sort of acted like stickers you could plop on the canvas and manipulate into a collage. The collection was socially driven, so for periods something would find its way into collective consciousness, spawning a bunch of riffs on a theme.</p>
<p><img src="https://live.staticflickr.com/7188/6855269919_9ee3c8f452_b.jpg" alt="Photo montage of a giant Leonardo DiCaprio against a burning cityscape"></p>
<p>You could import someone else&rsquo;s Mixel and get access to all the little clips and elements they created.</p>
<p><img src="https://live.staticflickr.com/7162/6777265173_38d418f3e3_b.jpg" alt="Photo collage of a vintage station wagon and camper against an infernal backdrop"></p>
<p>There were some genuinely gifted people on Mixel, making little collages out of tiny, intricate parts. There were a lot of goofballs. For periods someone would drift through your field of view, and maybe you&rsquo;d start playfully volleying ideas back and forth, then one or the other would drift off.</p>
<p>Possibly one of the best creative-apps-with-social-component ever.</p>
<p><a href="https://www.flickr.com/photos/michaelhall/albums/72157628944175181/with/6794392705">All the ones I managed to preserve before the service tanked.</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>I don&#39;t miss lockdown &amp;#x2026;</title>
      <link>https://mike.puddingtime.org/posts/2025-05-09-i-dont-miss-lockdown-x2026/</link>
      <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-09-i-dont-miss-lockdown-x2026/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-SSQFFqX/0/NPD7vdwXBLPJgbgpBT98zkw3CVVLrKgrsjKngT7df/XL/i-SSQFFqX-XL.jpg&#34; alt=&#34;A woman eats alone in a plastic-enclosed outdoor eating area&#34;&gt; … but I do miss that it exerted tremendous pressure to figure out whatever it took to do things I cared about, and that sustained me.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-mBV2z7q/0/Kv53qhgKf4WqrQPrvdrDcbG86HRjPZkfVQwMJJF8Z/XL/i-mBV2z7q-XL.jpg&#34; alt=&#34;Food Cart&#34;&gt;&lt;/p&gt;
&lt;p&gt;So for a long while there, almost every night, it was just &amp;ldquo;grab a camera and go somewhere.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-WJb98qh/0/KkxRPKKL9FxD5rfZBN7JwjchQgsq3kXWShFW4p9Xg/XL/i-WJb98qh-XL.jpg&#34; alt=&#34;A masked man in a red hat reads a menu on the wall&#34;&gt;&lt;/p&gt;
&lt;p&gt;I guess I&amp;rsquo;m thinking about it because when we were walking on Foster Road last night I noticed that three places that had kept their outdoor areas all the way through now have taken them down in the space of a week.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://photos.smugmug.com/photos/i-SSQFFqX/0/NPD7vdwXBLPJgbgpBT98zkw3CVVLrKgrsjKngT7df/XL/i-SSQFFqX-XL.jpg" alt="A woman eats alone in a plastic-enclosed outdoor eating area"> … but I do miss that it exerted tremendous pressure to figure out whatever it took to do things I cared about, and that sustained me.</p>
<p><img src="https://photos.smugmug.com/photos/i-mBV2z7q/0/Kv53qhgKf4WqrQPrvdrDcbG86HRjPZkfVQwMJJF8Z/XL/i-mBV2z7q-XL.jpg" alt="Food Cart"></p>
<p>So for a long while there, almost every night, it was just &ldquo;grab a camera and go somewhere.&rdquo;</p>
<p><img src="https://photos.smugmug.com/photos/i-WJb98qh/0/KkxRPKKL9FxD5rfZBN7JwjchQgsq3kXWShFW4p9Xg/XL/i-WJb98qh-XL.jpg" alt="A masked man in a red hat reads a menu on the wall"></p>
<p>I guess I&rsquo;m thinking about it because when we were walking on Foster Road last night I noticed that three places that had kept their outdoor areas all the way through now have taken them down in the space of a week.</p>
<p><img src="https://photos.smugmug.com/photos/i-NMkJTqS/0/MdWrGfPSxSsf3Vdw8tpp9srq2qF2PJrbncChsPhMk/XL/i-NMkJTqS-XL.jpg" alt="A gas station attendant at run down station"></p>
]]></content:encoded>
    </item>
    <item>
      <title>imgup 0.6 (flickr!)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-09-imgup-06-flickr/</link>
      <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-09-imgup-06-flickr/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm66.staticflickr.com/65535/54509153410_4d4d6e94e3_b.jpg&#34; alt=&#34;Yellow brick walls in an SF Chinatown alley at night&#34;&gt;&lt;/p&gt;
&lt;p&gt;flickr&amp;rsquo;s API is way more comprehensible than SmugMug&amp;rsquo;s, so adding flickr support went down much more quickly. Just get an API key/secret (links in the README) and step through onboard to auth your copy of imgup.&lt;/p&gt;
&lt;p&gt;Otherwise, it&amp;rsquo;s the exact same interface and UI. You just have to add a &lt;code&gt;--backend&lt;/code&gt; argument to use flickr when you run it:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;imgup -b flickr -t &amp;quot;The Title&amp;quot; -c &amp;quot;The Caption&amp;quot; -f md img_123.jpg&lt;/code&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://farm66.staticflickr.com/65535/54509153410_4d4d6e94e3_b.jpg" alt="Yellow brick walls in an SF Chinatown alley at night"></p>
<p>flickr&rsquo;s API is way more comprehensible than SmugMug&rsquo;s, so adding flickr support went down much more quickly. Just get an API key/secret (links in the README) and step through onboard to auth your copy of imgup.</p>
<p>Otherwise, it&rsquo;s the exact same interface and UI. You just have to add a <code>--backend</code> argument to use flickr when you run it:</p>
<p><code>imgup -b flickr -t &quot;The Title&quot; -c &quot;The Caption&quot; -f md img_123.jpg</code></p>
<p>You can skip any of them except the image itself, but you probably want to set <code>--caption</code> to get a description/alt text back.</p>
<p><a href="https://github.com/pdxmph/imgup-cli">pdxmph/imgup-cli</a> (Gem on the release page)</p>
<p>I also added a pair of extras:</p>
<ul>
<li>A Hazel folder action script: If you set the &ldquo;caption&rdquo; field in LightRoom or Apple Photos, then export an image into the watched folder, you&rsquo;ll get a snippet back to your clipboard with the caption as description/alt text.</li>
<li>A Raycast script action: (Needs to be fixed to use the new backend selector, so hardcode that if you want to just get it running with flickr by adding the argument in the script)</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>imgup-cli 0.1.0</title>
      <link>https://mike.puddingtime.org/posts/2025-05-09-imgup-cli-010/</link>
      <pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-09-imgup-cli-010/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-rxrZLQf/0/KRxchj8kFzcmvbhrL9LwhnSKH8xg2PMq4JgzfmJvZ/XL/i-rxrZLQf-XL.jpg&#34; alt=&#34;High on Fire&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using imgup as a cli tool for a few days and it has worked pretty well. A few things bothered me about it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The OAuth situation was janky and not very portable. You had to have a .env file with very little help in the way of configuring it.&lt;/li&gt;
&lt;li&gt;Onboarding via oauth was non-existent.&lt;/li&gt;
&lt;li&gt;Configuring a target album involved fiddling around in the API or knowing exactly where to hover your mouse on the website.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I spent some time just cleaving the CLI out of the core project and working on cleaning some of that up.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://photos.smugmug.com/photos/i-rxrZLQf/0/KRxchj8kFzcmvbhrL9LwhnSKH8xg2PMq4JgzfmJvZ/XL/i-rxrZLQf-XL.jpg" alt="High on Fire"></p>
<p>I&rsquo;ve been using imgup as a cli tool for a few days and it has worked pretty well. A few things bothered me about it:</p>
<ul>
<li>The OAuth situation was janky and not very portable. You had to have a .env file with very little help in the way of configuring it.</li>
<li>Onboarding via oauth was non-existent.</li>
<li>Configuring a target album involved fiddling around in the API or knowing exactly where to hover your mouse on the website.</li>
</ul>
<p>So I spent some time just cleaving the CLI out of the core project and working on cleaning some of that up.</p>
<p>There&rsquo;s <a href="https://github.com/pdxmph/imgup-cli">a new repo</a>, and a better onboarding deal:</p>
<ul>
<li>Install the gem (available from the <a href="https://github.com/pdxmph/imgup-cli/releases">release page</a>)</li>
<li>Run <code>imgup setup</code></li>
<li>Go through a not-great but viable oauth setup</li>
<li>Reply to a prompt to pick a target album</li>
<li>Get your config file written for you in a normal place</li>
<li>Start using</li>
</ul>
<p>No more .env files or any of that. It behaves way more like a normal app you can just go install.</p>
<p>I wanted to get it into that shape because I like how it is working now: It&rsquo;s a little bit of plumbing you can fit into all sorts of possible workflows to make it easier to do a small thing that can involve fiddling and typos when all you really want to do is put an image in a blog post. At the same time, while SmugMug is cool and all, I&rsquo;d like to fold in support for flickr, imgur, and maybe a few others that are more common, and also leave the web UI behind.</p>
<p>So as I have time and feel like messing around, I&rsquo;ll probably go after flickr next, since I have an account and plenty of albums to play around with.</p>
<p>(I was hoping to include <a href="https://some.pics">omg.lol&rsquo;s some.pics</a>, but there&rsquo;s no API to talk to.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Bar Carlo</title>
      <link>https://mike.puddingtime.org/posts/2025-05-08-bar-carlo/</link>
      <pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-08-bar-carlo/</guid>
      <description>&lt;p&gt;We decided to walk down to Foster Rd. for dinner at Bruno&amp;rsquo;s tonight, and walked past Bar Carlo. I still haven&amp;rsquo;t adjusted to the new red paint job, but it&amp;rsquo;s pretty striking.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-fCcB6kT/0/MLNM2mmfRCQZ9FxXZTgCN3N7b8kz46g8FqWC2wnPg/XL/i-fCcB6kT-XL.jpg&#34; alt=&#34;Bright red Bar Carlo in the low evening sun.&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-mrCZ4ww/0/Mmt8TSGDpcTTC6nbVf9hczFRcQckMNkbMFkXrjnMb/XL/i-mrCZ4ww-XL.jpg&#34; alt=&#34;Bar Carlo back when it was blue.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>We decided to walk down to Foster Rd. for dinner at Bruno&rsquo;s tonight, and walked past Bar Carlo. I still haven&rsquo;t adjusted to the new red paint job, but it&rsquo;s pretty striking.</p>
<p><img src="https://photos.smugmug.com/photos/i-fCcB6kT/0/MLNM2mmfRCQZ9FxXZTgCN3N7b8kz46g8FqWC2wnPg/XL/i-fCcB6kT-XL.jpg" alt="Bright red Bar Carlo in the low evening sun."></p>
<p><img src="https://photos.smugmug.com/photos/i-mrCZ4ww/0/Mmt8TSGDpcTTC6nbVf9hczFRcQckMNkbMFkXrjnMb/XL/i-mrCZ4ww-XL.jpg" alt="Bar Carlo back when it was blue."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Black mist filters</title>
      <link>https://mike.puddingtime.org/posts/2025-05-08-black-mist-filters/</link>
      <pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-08-black-mist-filters/</guid>
      <description>&lt;p&gt;Late in the season last year I started getting into black mist filters on my cameras. They&amp;rsquo;re just glass with little black flecks that end up creating a really nice halation effect with night-time lighting; and they soften digital images a tiny bit, in a way that pairs well with the right preset if you like a kinda vintage look.&lt;/p&gt;
&lt;p&gt;I forgot I had one along on my trip to the Mutoid Man show and that was a mild bummer: The light was so low that the X100VI&amp;rsquo;s perfectly serviceable 3200 ISO had more of an uphill battle. On the other end of the spectrum, during bright daylight, they turn the highlights into a glowing mess.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Late in the season last year I started getting into black mist filters on my cameras. They&rsquo;re just glass with little black flecks that end up creating a really nice halation effect with night-time lighting; and they soften digital images a tiny bit, in a way that pairs well with the right preset if you like a kinda vintage look.</p>
<p>I forgot I had one along on my trip to the Mutoid Man show and that was a mild bummer: The light was so low that the X100VI&rsquo;s perfectly serviceable 3200 ISO had more of an uphill battle. On the other end of the spectrum, during bright daylight, they turn the highlights into a glowing mess.</p>
<p>I&rsquo;m on the fence because I like the effect, but don&rsquo;t like remembering/forgetting that the filter is on there at all.</p>
<p><img src="https://photos.smugmug.com/photos/i-43Nvd82/0/NTT8RDTv8SWxkFFXnj3mLTJ3q4fHwwqX7rhVkr2dJ/XL/i-43Nvd82-XL.jpg" alt="Steven Brodsky plays a solo"></p>
<p><img src="https://photos.smugmug.com/photos/i-LsppZ9B/0/NJmCzBvGs3H925CWPrWMMgzgv6jMwmfk8TtqtKxT2/XL/i-LsppZ9B-XL.jpg" alt="John Doe plays a solo"></p>
<p><img src="https://photos.smugmug.com/photos/i-W3DMnT2/0/Mzs5m2tW4jGrNjcJgc8KbTg5Kn7g9Xmp8MTCgPFnH/XL/i-W3DMnT2-XL.jpg" alt="red neon at Kelly&rsquo;s"></p>
<p><img src="https://photos.smugmug.com/photos/i-c2FTfF9/0/L7XDvHhbF68HPdzvFP6VsssLmjGm7vmBLnRCvPRLR/XL/i-c2FTfF9-XL.jpg" alt="Neon lit stairwell at Pike Place"></p>
<p><img src="https://photos.smugmug.com/photos/i-g3Km9Wb/0/K3gVxn6RPGw559vQNDDWt9QbhxvXmpM9H9MhjMFLx/XL/i-g3Km9Wb-XL.jpg" alt="Fish market at Pike Place"></p>
]]></content:encoded>
    </item>
    <item>
      <title>lmno-export</title>
      <link>https://mike.puddingtime.org/posts/2025-05-08-lmno-export/</link>
      <pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-08-lmno-export/</guid>
      <description>&lt;p&gt;I packageized &lt;a href=&#34;https://github.com/pdxmph/lmno-export&#34;&gt;lmno-export&lt;/a&gt;, which just lets you work on your lmno blog in org-mode then export it to clean Markdown. Mainly I wanted &amp;ldquo;real&amp;rdquo; org-capture instead of my &lt;a href=&#34;https://github.com/pdxmph/lmno-blog-capture&#34;&gt;hacky alternative&lt;/a&gt;, and I like being able to reuse my org-mode notes as-is instead of extracting and converting them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write your blog in a monolithic org-mode file (set in Customize).&lt;/li&gt;
&lt;li&gt;Export it with &lt;code&gt;lmno-org-export-blog&lt;/code&gt; .&lt;/li&gt;
&lt;li&gt;It opens the target file (set in Customize).&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re a Mac person, drag the proxy icon into the lmno.lol uploader.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&amp;rsquo;s the org-capture template, which reuses the source file variable:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I packageized <a href="https://github.com/pdxmph/lmno-export">lmno-export</a>, which just lets you work on your lmno blog in org-mode then export it to clean Markdown. Mainly I wanted &ldquo;real&rdquo; org-capture instead of my <a href="https://github.com/pdxmph/lmno-blog-capture">hacky alternative</a>, and I like being able to reuse my org-mode notes as-is instead of extracting and converting them.</p>
<ul>
<li>Write your blog in a monolithic org-mode file (set in Customize).</li>
<li>Export it with <code>lmno-org-export-blog</code> .</li>
<li>It opens the target file (set in Customize).</li>
<li>If you&rsquo;re a Mac person, drag the proxy icon into the lmno.lol uploader.</li>
</ul>
<p>Here&rsquo;s the org-capture template, which reuses the source file variable:</p>
<pre><code>(add-to-list 'org-capture-templates
  '(&quot;l&quot;
    &quot;LMNO blog post&quot;
    entry
    (file lmno-org-input-file)
    &quot;* [%&lt;%Y-%m-%d&gt;] %?\n\n&quot;
    :prepend t))
</code></pre>
<p>Under the hood, it has to do some footwork: org-export wants to wrap anything that looks like an org-mode date stamp with spans, and there is no configurable option for that. Likewise, it applies anchor id&rsquo;s to every heading.</p>
<p>I am not sure what was going on with image attributes in all that, either, but they weren&rsquo;t surviving the export with alt tags in place, so I found this custom link format in a Stack Overflow answer that somehow sidestepped the issue:</p>
<pre><code>(org-add-link-type
 &quot;img&quot; nil
 (lambda (path desc backend)
   (when (org-export-derived-backend-p backend 'md)
     (format &quot;![%s](%s)&quot; desc path))))
</code></pre>
]]></content:encoded>
    </item>
    <item>
      <title>Make a Markdown or org snippet from the flickr image in your browser (Raycast)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-08-make-a-markdown-or-org-snippet-from-the-flickr-image-in-your-browser-raycast/</link>
      <pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-08-make-a-markdown-or-org-snippet-from-the-flickr-image-in-your-browser-raycast/</guid>
      <description>&lt;p&gt;I don&amp;rsquo;t think I&amp;rsquo;ll use this a ton day-to-day because I haven&amp;rsquo;t put anything in flickr for a while, and generally use SmugMug these days for embedding stuff in a blog, but I&amp;rsquo;ve been learning how Raycast script actions work and this was an exercise in how to pass arguments in an action instead of going out to osascript dialogs.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Visit a flickr image in Safari or Chrome&lt;/li&gt;
&lt;li&gt;Invoke the action from Raycast and:
&lt;ul&gt;
&lt;li&gt;select a snippet format&lt;/li&gt;
&lt;li&gt;type in some alt text&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Get a snippet in Markdown, org, or HTML with your alt text, suitable for pasting into a blog post&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Why you want to do this:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I don&rsquo;t think I&rsquo;ll use this a ton day-to-day because I haven&rsquo;t put anything in flickr for a while, and generally use SmugMug these days for embedding stuff in a blog, but I&rsquo;ve been learning how Raycast script actions work and this was an exercise in how to pass arguments in an action instead of going out to osascript dialogs.</p>
<ol>
<li>Visit a flickr image in Safari or Chrome</li>
<li>Invoke the action from Raycast and:
<ul>
<li>select a snippet format</li>
<li>type in some alt text</li>
</ul>
</li>
<li>Get a snippet in Markdown, org, or HTML with your alt text, suitable for pasting into a blog post</li>
</ol>
<p>Why you want to do this:</p>
<ol>
<li>If you&rsquo;re all in on Flickr, then your blog becomes more easily portable if you ever move it, because the image tags have a stable URL</li>
<li>Flickr cares more about the quality of the embeds than a lot of blogging providers.</li>
<li>You&rsquo;re using lmno or some other service that doesn&rsquo;t manage image uploads at all, and you <em>have</em> to have a third party host.</li>
</ol>
<p>Pick your poison: If you&rsquo;re a forward-thinking SSG kinda person who has made it easy to ensure image tag hygiene in the event of a domain or platform change, this might not be appealing. If you&rsquo;ve been doing this for 25 or 30 years and occasionally stray into the less portable corners of the web, but are willing to hitch your wagon to flickr, this is an option that compares favorably to &ldquo;all your images were ingested, compressed into a mealy, blurry mess, and given an indecipherable path to some S3 bucket.&rdquo; If you&rsquo;re constantly playing around and moving posts back and forth between providers and frameworks, this could also be a helpful strategy.</p>
<pre><code>#!/usr/bin/env bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title  Flickr snippet from active tab
# @raycast.mode silent
# @raycast.icon 🌄
# @raycast.description  Grab the URL of your frontmost browser tab (Flickr only) and copy a Markdown/Org/HTML &lt;img&gt; snippet
# @raycast.argument1 { &quot;type&quot;: &quot;dropdown&quot;, &quot;placeholder&quot;: &quot;Format&quot;, &quot;optional&quot;: false, &quot;data&quot;: [ { &quot;title&quot;: &quot;Markdown&quot;, &quot;value&quot;: &quot;md&quot; }, { &quot;title&quot;: &quot;Org‑mode&quot;, &quot;value&quot;: &quot;org&quot; }, { &quot;title&quot;: &quot;HTML&quot;, &quot;value&quot;: &quot;html&quot; } ] }
# @raycast.argument2 { &quot;type&quot;: &quot;text&quot;, &quot;placeholder&quot;: &quot;Alt text (optional)&quot;, &quot;optional&quot;: true }

set -euo pipefail

FORMAT=$1
ALT_TEXT=${2:-&quot;&quot;}

# 1) Get frontmost browser’s URL
APP=$(osascript -e 'tell application &quot;System Events&quot; to name of first application process whose frontmost is true')
case &quot;$APP&quot; in
Safari)
    URL=$(osascript -e 'tell application &quot;Safari&quot; to return URL of front document') # :contentReference[oaicite:0]{index=0}
    ;;
&quot;Google Chrome&quot; | &quot;Brave Browser&quot; | &quot;Microsoft Edge&quot;)
    URL=$(osascript -e 'tell application &quot;Google Chrome&quot; to return URL of active tab of first window') # :contentReference[oaicite:1]{index=1}
    ;;
*)
    echo &quot;⚠️ Unsupported app: $APP&quot;
    exit 1
    ;;
esac

# 2) Validate it’s a Flickr photo page
if [[ ! $URL =~ https?://(www\.)?flickr\.com/photos/ ]]; then
    echo &quot;⚠️ Not a Flickr photo URL: $URL&quot;
    exit 1
fi

# 3) oEmbed → JSON
ENC=$(python3 -c 'import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1], safe=&quot;&quot;))' &quot;$URL&quot;)
OEMBED=$(curl -s &quot;https://www.flickr.com/services/oembed?format=json&amp;url=$ENC&quot;)

# 4) Extract direct image URL
IMG_URL=$(echo &quot;$OEMBED&quot; | /usr/bin/jq -r .url)
if [[ -z $IMG_URL || $IMG_URL == &quot;null&quot; ]]; then
    echo &quot;⚠️ Failed to extract image URL.&quot;
    exit 1
fi

# 5) Build snippet
case $FORMAT in
md)
    [[ -n $ALT_TEXT ]] &amp;&amp; SNIP=&quot;![${ALT_TEXT//\&quot;/\\\&quot;}]($IMG_URL)&quot; || SNIP=&quot;![]($IMG_URL)&quot;
    ;;
org)
    [[ -n $ALT_TEXT ]] &amp;&amp; SNIP=&quot;[[${IMG_URL}][${ALT_TEXT//\]/\\]}]]&quot; || SNIP=&quot;[[${IMG_URL}]]&quot;
    ;;
html)
    [[ -n $ALT_TEXT ]] &amp;&amp; SNIP=&quot;&lt;img src=\&quot;$IMG_URL\&quot; alt=\&quot;${ALT_TEXT//\&quot;/\\\&quot;}\&quot;&gt;&quot; || SNIP=&quot;&lt;img src=\&quot;$IMG_URL\&quot;&gt;&quot;
    ;;
esac

# 6) Copy &amp; notify
printf '%s' &quot;$SNIP&quot; | pbcopy
terminal-notifier -title &quot;Flickr snippet&quot; -message &quot;Copied $FORMAT snippet&quot; -sound default
</code></pre>
<p><img src="https://live.staticflickr.com/65535/52583647627_296a68de1c_b.jpg" alt="A skateboarder cruises by The Newberry in downtown Portland"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Maybe it was the shell scripts we made along the way</title>
      <link>https://mike.puddingtime.org/posts/2025-05-08-maybe-it-was-the-shell-scripts-we-made-along-the-way/</link>
      <pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-08-maybe-it-was-the-shell-scripts-we-made-along-the-way/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-dwXr6Bv/0/LrhHRTQPDvFHpCwDNj38f2cXbKQJLCDFgs9LLpQTF/XL/i-dwXr6Bv-XL.jpg&#34; alt=&#34;Tourists in a Seattle alley&#34;&gt;&lt;/p&gt;
&lt;p&gt;The fundamental mania at work here is basically &amp;ldquo;wring all the motion out of a thing you can.&amp;rdquo; I wrote imgup because I hated what Microblog was doing to my photos, but also hated the whole shuffle of &amp;ldquo;upload an image to SmugMug, hand-write the markup to embed it in a post.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;So it was an incremental improvement to build a web UI that stripped all the extraneous motion out of that workflow using the only thing I knew very well, which is Ruby/Sinatra.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://photos.smugmug.com/photos/i-dwXr6Bv/0/LrhHRTQPDvFHpCwDNj38f2cXbKQJLCDFgs9LLpQTF/XL/i-dwXr6Bv-XL.jpg" alt="Tourists in a Seattle alley"></p>
<p>The fundamental mania at work here is basically &ldquo;wring all the motion out of a thing you can.&rdquo; I wrote imgup because I hated what Microblog was doing to my photos, but also hated the whole shuffle of &ldquo;upload an image to SmugMug, hand-write the markup to embed it in a post.&rdquo;</p>
<p>So it was an incremental improvement to build a web UI that stripped all the extraneous motion out of that workflow using the only thing I knew very well, which is Ruby/Sinatra.</p>
<p>My recent journey into better note management reminded me it&rsquo;s not terrible to work in a shell scripting environment, so that&rsquo;s why I dusted off imgup, which was nothing but a web front-end until this week, and bolted on a CLI interface. I started that thinking &ldquo;well, you usually just export photos from Lightroom or Photos onto ~/Desktop before uploading them with imgup, so just save a trip to the browser.&rdquo;</p>
<p>Then <em>that</em> became &ldquo;why even open a shell when you have Raycast there and understand how to work on selections in Photos or Finder with AppleScript?&rdquo;</p>
<p>And then I remembered that an early pass at imgup extracted the exif caption to provide the alt text (since then Adobe has exposted a literal alt text field in Lightroom) because I was thinking &ldquo;why not just embed that in the photo itself once, when you&rsquo;re already processing it?&rdquo; I don&rsquo;t know why I abandoned that, but this evening my thinking took me toward &ldquo;why even work on a file in the Finder from Raycast when you could just export the image straight from Lightroom to Smugmug via this shell tool you&rsquo;ve built?&rdquo;</p>
<p>So I wired imgup&rsquo;s CLI to a Hazel folder action:</p>
<ul>
<li>Edit the photo in Lightroom</li>
<li>Make sure to edit the caption field (this is the only thing Photos and Lightroom expose in common)</li>
<li>Export to a Hazel-watched folder</li>
<li>Set up a folder action that grabs the photo, extracts the caption, and feeds that as an argument to imgup</li>
<li>Copy the resulting SmugMug link/markup/etc. to the clipboard</li>
<li>Hazel dumps the copy in the trash</li>
</ul>
<p>Barring Adobe doing something freakishly helpful, like adding a scripting library, I can&rsquo;t think of any way to wring any more motion out of this thing: Type in a caption, press cmd-e to do the last export action, and the photo goes from Lightroom up to SmugMug and back to a snippet in my clipboard.</p>
<p>There&rsquo;s one small tragedy in this, which is that Apple Photos both tells you that you are setting the &ldquo;Caption&rdquo; for a photo, then seems to fail to actually store that anywhere in the EXIF data. <code>exiftool</code> can&rsquo;t find it, anyhow. OTOH, now that I have the Hazel/imgup folder going, I can process images-to-snippets from any photo tool, and Photos was at least amenable to making a QuickAction to dump the selected photo into the upload folder. I just end up having to add the caption after the snippet is made, and my SmugMug photo hygiene suffers.</p>
<p>(Update: Apple Photos actually does seem to set the field, but my code was exporting the original photo, and Apple seems to treat any metadata you add in Photos as a non-destructive change, so you have to disable the &ldquo;original&rdquo; flag in the AppleScript export.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>imgup CLI improvement</title>
      <link>https://mike.puddingtime.org/posts/2025-05-07-imgup-cli-improvement/</link>
      <pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-07-imgup-cli-improvement/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-bcCGxXj/0/NHVh4RT7f5wwdCPHt5kPcCXL9s5qvwcRtSLP9559d/XL/i-bcCGxXj-XL.jpg&#34; alt=&#34;CLI imgup outputting multiple formats&#34;&gt;&lt;/p&gt;
&lt;p&gt;I added a &lt;code&gt;format&lt;/code&gt; option to the &lt;a href=&#34;https://github.com/pdxmph/imgup&#34;&gt;imgup&lt;/a&gt; CLI, so it&amp;rsquo;ll provide a snippet in either org, Markdown, or HTML markup now, matching what it can do from the web interface. Also realized I don&amp;rsquo;t have a &amp;ldquo;picture of the week&amp;rdquo; feature anymore, so I replaced that part of the menu with a direct link to the Smugmug target album in the Smugmug management UI. Great for quickly getting to a bunch of test photos and removing them.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://photos.smugmug.com/photos/i-bcCGxXj/0/NHVh4RT7f5wwdCPHt5kPcCXL9s5qvwcRtSLP9559d/XL/i-bcCGxXj-XL.jpg" alt="CLI imgup outputting multiple formats"></p>
<p>I added a <code>format</code> option to the <a href="https://github.com/pdxmph/imgup">imgup</a> CLI, so it&rsquo;ll provide a snippet in either org, Markdown, or HTML markup now, matching what it can do from the web interface. Also realized I don&rsquo;t have a &ldquo;picture of the week&rdquo; feature anymore, so I replaced that part of the menu with a direct link to the Smugmug target album in the Smugmug management UI. Great for quickly getting to a bunch of test photos and removing them.</p>
<p>Next on the todo list:</p>
<ul>
<li>Wire it into Raycast for quick &ldquo;upload this image and return a snippet&rdquo; action.</li>
<li>Figure out if there&rsquo;s a way to make a Photos sharing action out of it, too.</li>
</ul>
<p>To restate the problem imgup started out solving:</p>
<p>You never know what your blog hosting provider is going to do to your photos when you upload them. Gnarly compression, weird image renames, path rewrites, maybe they don&rsquo;t even support image uploads and you&rsquo;re left to your own devices for hosting. Move your blog, and the images are probably going to break if you were depending on any provider magic at all.</p>
<p>So … skip all that. If you have an image hosting service you already like, and if they specialize in treating your photographs well, use &rsquo;em!</p>
<p>imgup just takes a photo, uploads it to a hidden (but not private) album, and returns a snippet of Markdown, org, or HTML you can paste into your blog post, complete with alt text if you provide it.</p>
<p>The command line tool is a recent addition because the &ldquo;open web UI, select, upload, copy, paste&rdquo; workflow is fine given how many steps it saves otherwise, but a CLI option is even more efficient (and automatable).</p>
<p>The thing imgup can&rsquo;t solve is using it to do something besides share screenshots of things that make blogging easier. Lately we&rsquo;ve been verging into &ldquo;blogging about things that make blogging easier&rdquo; territory, and that feels icky.</p>
]]></content:encoded>
    </item>
    <item>
      <title>In which I solve a food bank communications problem</title>
      <link>https://mike.puddingtime.org/posts/2025-05-07-in-which-i-solve-a-food-bank-communications-problem/</link>
      <pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-07-in-which-i-solve-a-food-bank-communications-problem/</guid>
      <description>&lt;p&gt;I volunteered at the neighborhood food bank/pantry again today. &lt;a href=&#34;https://puddingtime.org/everyone-gets-a-number-choose-one-were-great-on-funyuns-but-the-rice-ran-out&#34;&gt;Like last week&lt;/a&gt; I was put on what I guess is the &amp;ldquo;starch and carbs&amp;rdquo; station:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One from a selection of a bag of flour, a bag of baking mix, or a bag of generic corn flakes cereal&lt;/li&gt;
&lt;li&gt;One or the other of a packet of spaghetti noodles or rice&lt;/li&gt;
&lt;li&gt;a can of pureed pumpkin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I had more to keep track of this week, and there was something in the air. The first people to draw numbers for their place in the line got high ones: in the 90s and 100s. They didn&amp;rsquo;t want high numbers because the better items are long gone by the last 25 or so people, but the food bank folks don&amp;rsquo;t allow do-overs. Then a general mood hit and everybody started crowding for their number, a few people darted past the line control people and tried to get a second number, and it got a little rowdy.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I volunteered at the neighborhood food bank/pantry again today. <a href="https://puddingtime.org/everyone-gets-a-number-choose-one-were-great-on-funyuns-but-the-rice-ran-out">Like last week</a> I was put on what I guess is the &ldquo;starch and carbs&rdquo; station:</p>
<ul>
<li>One from a selection of a bag of flour, a bag of baking mix, or a bag of generic corn flakes cereal</li>
<li>One or the other of a packet of spaghetti noodles or rice</li>
<li>a can of pureed pumpkin</li>
</ul>
<p>I had more to keep track of this week, and there was something in the air. The first people to draw numbers for their place in the line got high ones: in the 90s and 100s. They didn&rsquo;t want high numbers because the better items are long gone by the last 25 or so people, but the food bank folks don&rsquo;t allow do-overs. Then a general mood hit and everybody started crowding for their number, a few people darted past the line control people and tried to get a second number, and it got a little rowdy.</p>
<p>Once things settled down and people started coming down the line I found it pretty hard to communicate &ldquo;one from this group of three, one from this set of two.&rdquo; Most of the patrons are elderly Asian folks, so there&rsquo;s a language barrier that both sides of the table try to mitigate with broad gestures and repetition.</p>
<p>I realized about five minutes in that the line is just sort of set up wrong for those conditions:</p>
<p>When you have a pair of crates side-by-side with bags of rice in one and bags of noodles in the other and no way to communicate what &ldquo;one&rdquo; means in that context when &ldquo;one or the other&rdquo; doesn&rsquo;t mean anything to the other person, there&rsquo;s a lot of gesturing and a few attempts to just take one of each, and then some unhappiness when you ask for them to put one back (with a lot of gesturing and repeating and some of the other volunteers weighing in because nothing breaks down language barriers like <em>everyone</em> yelling in unison).</p>
<p>So I rearranged my station:</p>
<ul>
<li>The flour, cereal, and baking mix all went in one column.</li>
<li>The rice and noodles went in another column.</li>
<li>The pumpkin puree just sat there. I said to the coordinator at the start of the shift, &ldquo;guessin&rsquo; that&rsquo;s not gonna fly off the shelves&rdquo; and got a wry smile.</li>
</ul>
<p>Set up thus, I could just make eye contact, hold my hand out over a column, say &ldquo;one,&rdquo; and it seemed much more clear that I meant &ldquo;one from this column.&rdquo; And that was <em>great</em>, partly because it just helped things move along and partly because having removed the overhead of gesticulating, repeating, and the hurt feelings of people having to put things back, people were more inclined to say thank you, or make jokes about <em>wanting</em> more than one, and I had more time to help them load their bags or remember to hand things over with both hands when they preferred that I hand things to them.</p>
<p>It did mean I had to keep more stuff readily at hand and I had to more frequently re-up my columns, but I think a concentrated 60 or 70 minutes of moving a little quickly for the sake of making it less sucky was a good tradeoff.</p>
<p>This week we ran out of rice early. Plenty of Funyuns, same as last week. The coordinator tells me the money has been drying up, so they can&rsquo;t buy the staples, but donations of junk food tend to be plentiful.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Uploading to imgup from Photos</title>
      <link>https://mike.puddingtime.org/posts/2025-05-07-uploading-to-imgup-from-photos/</link>
      <pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-07-uploading-to-imgup-from-photos/</guid>
      <description>&lt;p&gt;Woof. It involved some AppleScripting, shell scripting, and some ugliness due to RayCast not wanting to inherit my login shell environment (circumventing rbenv to run imgup), but I finally got it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pick an image in photos&lt;/li&gt;
&lt;li&gt;Fire off the action in RayCast&lt;/li&gt;
&lt;li&gt;Select a snippet format of `org` or `markdown`&lt;/li&gt;
&lt;li&gt;Provide an alt tag&lt;/li&gt;
&lt;li&gt;Get a copy/pasteable snippet back from imgup I can drop into the blog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have a matching one for a selected file in the Finder.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Woof. It involved some AppleScripting, shell scripting, and some ugliness due to RayCast not wanting to inherit my login shell environment (circumventing rbenv to run imgup), but I finally got it:</p>
<ul>
<li>Pick an image in photos</li>
<li>Fire off the action in RayCast</li>
<li>Select a snippet format of `org` or `markdown`</li>
<li>Provide an alt tag</li>
<li>Get a copy/pasteable snippet back from imgup I can drop into the blog</li>
</ul>
<p>I have a matching one for a selected file in the Finder.</p>
<p>Now I just need to go take pictures.</p>
]]></content:encoded>
    </item>
    <item>
      <title>imgup and org-mode (and lmno.org)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-06-imgup-and-org-mode-and-lmnoorg/</link>
      <pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-06-imgup-and-org-mode-and-lmnoorg/</guid>
      <description>&lt;p&gt;This morning I woke up wondering &amp;ldquo;what if I could do my lmno blogging from org-mode instead of Markdown?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Partly &amp;ldquo;why not&amp;rdquo; and partly &amp;ldquo;you get real org-capture and it becomes easier to shuttle text around.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That led to this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defun lmno/org-export-blog ()
  &amp;quot;Export ~/notes/blog.org → ~/notes/lmno.md.&amp;quot;
  (interactive)
  (let* ((input-file  (expand-file-name &amp;quot;~/notes/lmno.org&amp;quot;))
         (output-file (expand-file-name &amp;quot;~/notes/lmno.md&amp;quot;)))
    (with-temp-buffer
      (insert-file-contents input-file)
      (org-mode)
      ;; turn off all the bells that inject TOC, numbers, dates, etc.
      (let ((org-export-with-toc            nil)
            (org-export-with-section-numbers nil)
            (org-export-with-author         nil)
            (org-export-with-creator        nil)
            (org-export-with-date           nil)
            (org-export-with-priorities     nil)
            (org-export-with-timestamps     nil)
            (org-export-with-smart-quotes   nil)
            (org-export-with-broken-links   &#39;mark))
      (org-export-to-buffer &#39;md &amp;quot;*lmno-export*&amp;quot; nil nil nil nil))
      (with-current-buffer &amp;quot;*lmno-export*&amp;quot;
        ;; strip the anchors org&#39;s export insists on inserting
        (goto-char (point-min))
        (while (re-search-forward &amp;quot;&amp;lt;a id=\&amp;quot;[^\&amp;quot;]+\&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;quot; nil t)
          (replace-match &amp;quot;&amp;quot;))
        ;; strip the overhelpful datestamp spans
        (goto-char (point-min))
        (while (re-search-forward &amp;quot;&amp;lt;/?span[^&amp;gt;]*&amp;gt;&amp;quot; nil t)
          (replace-match &amp;quot;&amp;quot;)))
      ;; write out the clean Markdown
      (with-current-buffer &amp;quot;*lmno-export*&amp;quot;
        (write-region (point-min) (point-max) output-file)))
    (message &amp;quot;Clean export complete → %s&amp;quot; output-file)))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It has to do two things I wish it didn&amp;rsquo;t:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This morning I woke up wondering &ldquo;what if I could do my lmno blogging from org-mode instead of Markdown?&rdquo;</p>
<p>Partly &ldquo;why not&rdquo; and partly &ldquo;you get real org-capture and it becomes easier to shuttle text around.&rdquo;</p>
<p>That led to this:</p>
<pre><code>(defun lmno/org-export-blog ()
  &quot;Export ~/notes/blog.org → ~/notes/lmno.md.&quot;
  (interactive)
  (let* ((input-file  (expand-file-name &quot;~/notes/lmno.org&quot;))
         (output-file (expand-file-name &quot;~/notes/lmno.md&quot;)))
    (with-temp-buffer
      (insert-file-contents input-file)
      (org-mode)
      ;; turn off all the bells that inject TOC, numbers, dates, etc.
      (let ((org-export-with-toc            nil)
            (org-export-with-section-numbers nil)
            (org-export-with-author         nil)
            (org-export-with-creator        nil)
            (org-export-with-date           nil)
            (org-export-with-priorities     nil)
            (org-export-with-timestamps     nil)
            (org-export-with-smart-quotes   nil)
            (org-export-with-broken-links   'mark))
      (org-export-to-buffer 'md &quot;*lmno-export*&quot; nil nil nil nil))
      (with-current-buffer &quot;*lmno-export*&quot;
        ;; strip the anchors org's export insists on inserting
        (goto-char (point-min))
        (while (re-search-forward &quot;&lt;a id=\&quot;[^\&quot;]+\&quot;&gt;&lt;/a&gt;&quot; nil t)
          (replace-match &quot;&quot;))
        ;; strip the overhelpful datestamp spans
        (goto-char (point-min))
        (while (re-search-forward &quot;&lt;/?span[^&gt;]*&gt;&quot; nil t)
          (replace-match &quot;&quot;)))
      ;; write out the clean Markdown
      (with-current-buffer &quot;*lmno-export*&quot;
        (write-region (point-min) (point-max) output-file)))
    (message &quot;Clean export complete → %s&quot; output-file)))
</code></pre>
<p>It has to do two things I wish it didn&rsquo;t:</p>
<ul>
<li>Find and replace a bunch of anchor links org&rsquo;s HTML export drops onto headings</li>
<li>Find and replace a bunch of spans org&rsquo;s HTML export wraps around what it considers datestamps</li>
</ul>
<p>But then it just plops the whole monolith into the Markdown file I can drag into lmno&rsquo;s uploader.</p>
<p>… then I noticed &ldquo;the images have no alt tags,&rdquo; so I found someone wrote this custom org link type:</p>
<pre><code>(org-add-link-type
 &quot;img&quot; nil
 (lambda (path desc backend)
   (when (org-export-derived-backend-p backend 'md)
     (format &quot;![%s](%s)&quot; desc path))))
</code></pre>
<p>It just registers a custom org-mode <code>img</code> link, and exports to Markdown with an alt tag, so this in org-mode:</p>
<pre><code>[[img:https://photos.smugmug.com/photos/i-rnGMdNb/0/K3vtM5mZMTn4s9zVwkhdGBXdcBgNPzD74g957cG6J/XL/i-rnGMdNb-XL.jpg][Some alt text]]
</code></pre>
<p>becomes this when exported to Markdown:</p>
<pre><code>![Some alt text](https://photos.smugmug.com/photos/i-rnGMdNb/0/K3vtM5mZMTn4s9zVwkhdGBXdcBgNPzD74g957cG6J/XL/i-rnGMdNb-XL.jpg)
</code></pre>
<p>… so then I thought, what if imgup could provide not just Markdown and HTML snippets, but also org-mode img link snippets?</p>
<p><img src="https://photos.smugmug.com/photos/i-VBbRpJz/0/M6nqkvphptZnK7kD7k6t2sTmCpQjkj6vsKzXqr9Bk/XL/i-VBbRpJz-XL.jpg" alt="An imgup window showing snippets for Markdown, org, and HTML"></p>
<p>(It&rsquo;ll do that from the command line version, too.)</p>
<p>Fifteen years later, <a href="https://mike.puddingtime.org/org-mode-in-your-pocket-is-a-gnu-shaped-devil/">still true.</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>git-auto-sync (and LaunchControl, and the Jurassic Park kid)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-05-git-auto-sync-and-launchcontrol-and-the-jurassic-park-kid/</link>
      <pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-05-git-auto-sync-and-launchcontrol-and-the-jurassic-park-kid/</guid>
      <description>&lt;p&gt;I don&amp;rsquo;t think it&amp;rsquo;s as magical as whatever nb is up to, but for wandering from machine to machine and not getting &lt;em&gt;too&lt;/em&gt; out of control with it, &lt;a href=&#34;https://github.com/GitJournal/git-auto-sync/&#34;&gt;git-auto-sync&lt;/a&gt; seems to do an okay job of periodically syncing up with a remote behind your back. When you target a directory with it, it creates a launchd agent, so the syncing daemon persists over reboots, etc.&lt;/p&gt;
&lt;p&gt;I got it from Homebrew, and discovered one issue with it, which is that the agent it sets up wants to log to &lt;code&gt;/usr/local/var/log&lt;/code&gt;, which is locked down in at least recent versions of macOS (and ignores &lt;code&gt;/opt/homebrew/var/log&lt;/code&gt;, which is already correctly permissioned, so now I&amp;rsquo;m wondering if I have the wherewithal to submit a patch somewhere). So you can either make that directory and set the right permissions, or twiddle the launch agent.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I don&rsquo;t think it&rsquo;s as magical as whatever nb is up to, but for wandering from machine to machine and not getting <em>too</em> out of control with it, <a href="https://github.com/GitJournal/git-auto-sync/">git-auto-sync</a> seems to do an okay job of periodically syncing up with a remote behind your back. When you target a directory with it, it creates a launchd agent, so the syncing daemon persists over reboots, etc.</p>
<p>I got it from Homebrew, and discovered one issue with it, which is that the agent it sets up wants to log to <code>/usr/local/var/log</code>, which is locked down in at least recent versions of macOS (and ignores <code>/opt/homebrew/var/log</code>, which is already correctly permissioned, so now I&rsquo;m wondering if I have the wherewithal to submit a patch somewhere). So you can either make that directory and set the right permissions, or twiddle the launch agent.</p>
<p>So if one wanted to use something like cielagonote with Gollum and didn&rsquo;t care for nb as an intermediary, this might be a way to go.</p>
<p>In addition to the daemon, you can also manually fire off a sync, so I can see making a little script for Alfred or RayCast that does a sync before stepping away from a machine.</p>
<p>In the process of debugging the log issue I discovered <a href="https://www.soma-zone.com/LaunchControl/">LaunchControl</a>, which does a lot to make launchd a little more legible with a mildly busy but helpful GUI.</p>
<p><img src="https://photos.smugmug.com/photos/i-SDBqrHr/0/LQqDSJvvPtKgW2TszkgDGpxc3ZhhbqTshSnzs3dw9/XL/i-SDBqrHr-XL.png" alt="img"></p>
<p>Through this I learned that <code>launchd</code> is pretty irritable with jobs it considers &ldquo;inefficient&rdquo; for reasons I am not completely clear on, so I saw watching the Homebrew <code>emacs-plus</code> service failing/starting/failing/starting over and over. From the point of view of someone who is just launching <code>emacsclient -c --no-wait</code> from RayCast, there is nothing untoward going on: It launches in an eyeblink. I did a little reading about what the throttling/inefficiency issue might be, but we&rsquo;re rapidly getting into the ineffable wisdom/hatred of experts that informs the macOS ecosystem and I think I&rsquo;m gonna just close that window and pretend it&rsquo;s fine.</p>
<p><strong>Us:</strong> &ldquo;It&rsquo;s a UNIX system! I know this!&rdquo;</p>
<p><strong>Apple:</strong> &ldquo;Whatever, kid.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>git-auto-sync, Raycast, and terminal-notifier</title>
      <link>https://mike.puddingtime.org/posts/2025-05-05-git-auto-sync-raycast-and-terminal-notifier/</link>
      <pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-05-git-auto-sync-raycast-and-terminal-notifier/</guid>
      <description>&lt;p&gt;Raycast has a nice setup for making shell scripts into actions. I have one wrapper for emacsclient that just invokes a GUI Emacs window from a running Emacs server and then foregrounds the window:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Emacsd
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖
# @raycast.packageName Emacs

# Documentation:
# @raycast.description Launch Emacs
# @raycast.author pdxmph
# @raycast.authorURL https://raycast.com/pdxmph

/opt/homebrew/bin/emacsclient -c --no-wait
osascript -e &#39;tell application &amp;quot;Emacs&amp;quot; to activate&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;… and I made another one that lets me trigger &lt;code&gt;git-auto-sync&lt;/code&gt; operations when I&amp;rsquo;m going to step away for a while and want to make sure everything in my notes repo has been pushed:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Raycast has a nice setup for making shell scripts into actions. I have one wrapper for emacsclient that just invokes a GUI Emacs window from a running Emacs server and then foregrounds the window:</p>
<pre><code>#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Emacsd
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖
# @raycast.packageName Emacs

# Documentation:
# @raycast.description Launch Emacs
# @raycast.author pdxmph
# @raycast.authorURL https://raycast.com/pdxmph

/opt/homebrew/bin/emacsclient -c --no-wait
osascript -e 'tell application &quot;Emacs&quot; to activate'
</code></pre>
<p>… and I made another one that lets me trigger <code>git-auto-sync</code> operations when I&rsquo;m going to step away for a while and want to make sure everything in my notes repo has been pushed:</p>
<pre><code>#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Sync Notes
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖

# Documentation:
# @raycast.description Run git-auto-sync on notes directory
# @raycast.author pdxmph
# @raycast.authorURL https://raycast.com/pdxmph

set -euo pipefail
IFS=$'\n\t'

# ——— set up a user‐level log directory ———
LOGDIR=&quot;$HOME/Library/Logs/git-auto-sync&quot;
mkdir -p &quot;$LOGDIR&quot;
LOGFILE=&quot;$LOGDIR/sync.log&quot;

on_error() {
    local exit_code=$?
    local lineno=$1
    local msg=&quot;ERROR on line $lineno (exit $exit_code)&quot;
    echo &quot;$(date '+%Y-%m-%d %H:%M:%S') ▶ $msg&quot; &gt;&gt;&quot;$LOGFILE&quot;
    logger -t git-auto-sync &quot;$msg&quot;
    terminal-notifier \
        -title &quot;🔥🤖🔥 git-auto-sync FAILED&quot; \
        -message &quot;See Console.app or $LOGFILE&quot; \
        -sound default
    exit $exit_code
}
trap 'on_error $LINENO' ERR

{
    echo &quot;=== Sync started at $(date '+%Y-%m-%d %H:%M:%S') ===&quot;
    logger -t git-auto-sync &quot;Sync started&quot;
    cd &quot;$HOME/notes&quot;
    /opt/homebrew/bin/git-auto-sync s
    echo &quot;=== Sync succeeded at $(date '+%Y-%m-%d %H:%M:%S') ===&quot;
    logger -t git-auto-sync &quot;Sync succeeded&quot;
} &gt;&gt;&quot;$LOGFILE&quot; 2&gt;&amp;1

terminal-notifier \
    -title &quot;🤖 git-auto-sync&quot; \
    -message &quot;Sync complete&quot; \
    -sound default
</code></pre>
<p>It uses <a href="https://github.com/julienXX/terminal-notifier">terminal-notifier</a> to let me know things either worked:</p>
<p><img src="https://photos.smugmug.com/photos/i-wHnHvPF/0/NZVTSQQhCxStZKWpDpWB4s3GRVL89gZS7d3HFhNFm/XL/i-wHnHvPF-XL.png" alt="img"></p>
<p>… or didn&rsquo;t:</p>
<p><img src="https://photos.smugmug.com/photos/i-2JxZZj4/0/KfZpN6T9mRNwRJLBnH2TLzh3FhBP8g7gfQsSTqzsW/XL/i-2JxZZj4-XL.png" alt="img"></p>
<p>I pinned both actions to the top of my Raycast window:</p>
<p><img src="https://photos.smugmug.com/photos/i-Gqg3j8T/0/KgLppR9hgCt2TdKZJ2PWh58Mpdm52q29R3KMDq4gf/XL/i-Gqg3j8T-XL.jpg" alt="img"></p>
<p>Left to its own devices, git-auto-sync does its thing every few minutes. This is just a way to know it&rsquo;s safe to close the laptop if I&rsquo;ve been working in my notes.</p>
<p>I really like Raycast. The number of supported apps in the store is pretty impressive, and there&rsquo;s a nice SDK/API for making GUI tools. My work Asana is much easier to deal with when I can make a card without having to actually be in the Asana web app, and without having to deal with a plaintext syntax to express which project/board, who owns it, the deadline, etc.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Taking the X100VI to shows</title>
      <link>https://mike.puddingtime.org/posts/2025-05-04-taking-the-x100vi-to-shows/</link>
      <pubDate>Sun, 04 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-04-taking-the-x100vi-to-shows/</guid>
      <description>&lt;p&gt;I guess every music venue has rules for cameras and photography, and the nice thing about the X100VI is that it manages to avoid the &amp;ldquo;no interchangeable lens cameras&amp;rdquo; and &amp;ldquo;no lenses over 4 inches long&amp;rdquo; rules while also avoiding scrutiny as a &amp;ldquo;professional camera&amp;rdquo; because it&amp;rsquo;s small and vintage-looking. And it&amp;rsquo;s great for carrying along because it&amp;rsquo;s easy to cinch the strap up and have it close without a lot of bulk or weight.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I guess every music venue has rules for cameras and photography, and the nice thing about the X100VI is that it manages to avoid the &ldquo;no interchangeable lens cameras&rdquo; and &ldquo;no lenses over 4 inches long&rdquo; rules while also avoiding scrutiny as a &ldquo;professional camera&rdquo; because it&rsquo;s small and vintage-looking. And it&rsquo;s great for carrying along because it&rsquo;s easy to cinch the strap up and have it close without a lot of bulk or weight.</p>
<p>I took it to see X a few weeks ago and it was fine from the front row. There was a guy standing a bit forward of me who <em>also</em> had an X100VI, and he was doing a lot of double-exposure stuff that involved waving the camera around for a slow exposure, then taking a faster one. I&rsquo;m sure the effect is neat, but one <em>drawback</em> of the X100VI is that the rear panel doesn&rsquo;t fold in, so if you&rsquo;re a &ldquo;preview via the rear panel&rdquo; person, everyone&rsquo;s getting a face full of that unless you turn off the rear display, which I will do once I remember all the possible combinations.</p>
<p>Anyhow, I got a lot of shots I was pretty happy with for being behind a rail, and the 40MP sensor lets you crop a ton.</p>
<p><img src="https://photos.smugmug.com/photos/i-MdQMSBZ/0/MPKB6zqpPvRdZw4ZsGffTdj399ffDdt6kNcST25qw/XL/i-MdQMSBZ-XL.jpg" alt="img"></p>
<p>I also took it to see Mutoid Man at the Twilight Cafe, and that was a much bigger win for the small size. It was a pretty crowded, excited room and I was pressed against the low stage, so I kept the camera close with an eye out for the mosh finding me. I guess, as that picture shows, I also liked that the small size let me do some discrete documentary shooting waiting for the show to start.</p>
<p><img src="https://photos.smugmug.com/photos/i-DhK9Bnm/0/KNpkCMzZZmP4BvwrnXPTwwH2kvBFJGQcHJRG9zpgs/XL/i-DhK9Bnm-XL.jpg" alt="Stephen Brodsky and Ben Koller before Mutoid Man performed"></p>
<p>The stage at the Twilight Cafe was much less well lit than the Crystal Ballroom, and I keep auto ISO set to go as high as it needs while holding the shutter speed to 200. That meant an ISO of 3200 for most shots, which is noisy but fine for the subject matter.</p>
<p>I experimented a little with face detection AF and got mixed results. I was much closer to Steven Brodsky than I was Jeff Matz, and sometimes – maybe due to the lighting and motion – the AF would target Jeff, which wasn&rsquo;t great with a wide open aperture. I think I may map one of the buttons to toggling that on and off if I see it getting flaky. I don&rsquo;t tend to trust AF much beyond &ldquo;set to a small point, set that point manually, don&rsquo;t do subject detection.&rdquo;</p>
<p>Then there was Silver Lake, who performed in a small bar/guitar shop. It was super crowded and I hadn&rsquo;t meant to take many pictures, but Al asked me to for her friend. The light was mixed and it was super crowded so I had to shoot over peoples&rsquo; heads. I was glad for plenty of megapixels to crop because I was so far away, and I was glad for the small size because it was a pretty intimate setting and there was already a videographer at work. Face detection was much more reliable in that setting, too. Every now and then it sort of hunted between the lead singer and the bass player because they were right next to each other.</p>
<p><img src="https://photos.smugmug.com/photos/i-tpDkcPf/0/LHmC9vV44z9d9vF9CkpnPQmZBpKtN5wvkmCGFJVv8/XL/i-tpDkcPf-XL.jpg" alt="img"></p>
<p>For both Mutoid Man and Silver Lake I could have brought along either my Olympus with its f1.4/20mm or my Fujifilm X-T5 with its f1.4/33mm and might have liked having a little more light-gathering, but the X100VI works fine for what I&rsquo;m doing and doesn&rsquo;t look threatening to security. I just want to work on quieting down that rear screen.</p>
]]></content:encoded>
    </item>
    <item>
      <title>emacs-plus</title>
      <link>https://mike.puddingtime.org/posts/2025-05-03-emacs-plus/</link>
      <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-03-emacs-plus/</guid>
      <description>&lt;p&gt;I switched my Homebrew Emacs package to &lt;a href=&#34;https://github.com/d12frosted/homebrew-emacs-plus&#34;&gt;emacs-plus@30&lt;/a&gt; this past week. I am sure there are nuances that are escaping me, but I was mostly after something with a tested launchd service I could manage from &lt;code&gt;brew services&lt;/code&gt;, and I thought the built-in support for system appearance changes seemed pretty cool, since it let me retire 20 lines of elisp that wasn&amp;rsquo;t nearly as effective as this build is at detecting when Dark Mode is on or off.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I switched my Homebrew Emacs package to <a href="https://github.com/d12frosted/homebrew-emacs-plus">emacs-plus@30</a> this past week. I am sure there are nuances that are escaping me, but I was mostly after something with a tested launchd service I could manage from <code>brew services</code>, and I thought the built-in support for system appearance changes seemed pretty cool, since it let me retire 20 lines of elisp that wasn&rsquo;t nearly as effective as this build is at detecting when Dark Mode is on or off.</p>
<p>With emacs-plus, I think I&rsquo;ve found the thing that most conforms to what I&rsquo;m willing to be patient with. Enough so that I was able to make a simple <a href="https://www.raycast.com">Raycast</a> launcher that wraps <code>emacsclient -c --no-wait</code> (and could easily make something similar for Alfred or just an Automator app) then hide the Emacs.app from possible completions, and I can get a fresh Emacs frame as close to instantaneously as I care to imagine, without a lot of hassle. I tossed in a quick <code>osascript</code> at the bottom of the Raycast launcher script to make sure my new frame gets focus right away.</p>
<p>Unlike running <code>(server-start)</code> inside my init file, the combination of emacs-plus and a service is immune to accidentally bonking my entire Emacs instance: The daemon still toils away in the background even with errant cmd-q&rsquo;s. I know there are recipes for homegrown launchd services and that none of this is new. I guess the nice part is knowing that this is all packaged up and tested.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Ignoring the plumbing; Journelly and hashtags for mindful journaling</title>
      <link>https://mike.puddingtime.org/posts/2025-05-03-ignoring-the-plumbing-journelly-and-hashtags-for-mindful-journaling/</link>
      <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-03-ignoring-the-plumbing-journelly-and-hashtags-for-mindful-journaling/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s fun watching the threads around what people have been doing with &lt;a href=&#34;https://apps.apple.com/us/app/journelly/id6470714669&#34;&gt;Journelly&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A lot of people are very into the fact that it uses org-mode underneath. I am, too, because unlike Markdown, org-mode is super amenable to a variety of plaintext workflows that you could probably pull off with Markdown but without all the supporting infrastructure to make it easier.&lt;/p&gt;
&lt;p&gt;Take, for instance, the small problem of recreating reverse-chronological posting to a file:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It&rsquo;s fun watching the threads around what people have been doing with <a href="https://apps.apple.com/us/app/journelly/id6470714669">Journelly</a>.</p>
<p>A lot of people are very into the fact that it uses org-mode underneath. I am, too, because unlike Markdown, org-mode is super amenable to a variety of plaintext workflows that you could probably pull off with Markdown but without all the supporting infrastructure to make it easier.</p>
<p>Take, for instance, the small problem of recreating reverse-chronological posting to a file:</p>
<h2 id="part-1-content-authoring-vs-information-management">Part 1. Content authoring vs. information management</h2>
<p>When I wanted to do that with org-capture and Journelly, it just took this:</p>
<pre><code>(after! org
(add-to-list 'org-capture-templates
'(&quot;j&quot; &quot;Journelly&quot; entry (file &quot;~/journal/Journelly.org&quot;) &quot;* %U @ Home\n%?&quot; :prepend t)))
</code></pre>
<p>… because org-mode provides a ton of infrastructure, including the ability to assume that if I tell an org-capture template to <code>prepend</code> to a given file, it will know to skip all the metadata at the top of the file and just plop the new level-1 entry on top of the top-most heading. Done. (Though I didn&rsquo;t realize prepend was that clever, so I&rsquo;ll just not show the eight or ten lines of lisp I thought I needed to do that with before <a href="https://xenodium.com">Álvaro</a> kindly straightened me out.)</p>
<p>I guess the thing about org-mode is that it&rsquo;s not just a kind of markup, but is also an information management framework and its internal tooling has grown up to reflect that.</p>
<p>But when we take the use case of reverse-chronological posting to a Markdown journal, it can get dicey. The infrastructure really isn&rsquo;t there, because at its core Markdown is just there to ease authoring, not management. I once ran a team of technical writers who struggled with The Markdown Revolution, because technical writers are also technical information managers who want to think in terms of efficient content reuse and refactored and recombined information. They ended up migrating to <a href="https://dita-lang.org">DITA</a> (sit with that home page for a while), which was hugely alienating to the developer teams they worked with, but which allowed them to do stuff like localize their docs or effectively refactor documentation for a bunch of different kinds of presentation. I still grind my teeth on their behalf when I run into Markdown reductionists.</p>
<p>Anyhow, the reverse-chronological posting thing in Markdown:</p>
<p>There are three ways assorted Markdown systems I&rsquo;ve come across handle how to set the title of a file.</p>
<p>YAML (or TOML) frontmatter:</p>
<pre><code>---
title: &quot;This pretty good file&quot;
---
</code></pre>
<p>&ldquo;The first H1 is implicitly the title&rdquo;:</p>
<pre><code># This Pretty Good File
</code></pre>
<p>… and even one &ldquo;piece it together from the slugified file name&rdquo; case I spotted somewhere:</p>
<pre><code>this-pretty-good-file.md
</code></pre>
<p>… which makes my gums itch.</p>
<p>All of those require some footwork to get a new Markdown H2 wedged into a file, and because Markdown is fragmented all to hell in part to solve information management problems it wasn&rsquo;t designed to consider in the first place, there is no general-purpose solution. The best you can do is pick how you&rsquo;re going to do it and build your tools accordingly.</p>
<p>In a situation where you&rsquo;re making a logging tool, I imagine most people would just punt and append to a log file and live with chronologically-ordered entries. I happen to like reverse-chronological logs, so I made <a href="https://github.com/pdxmph/md-capture/blob/main/md-capture.el">md-capture.el</a> to recreate the org-capture experience in Markdown, and it is 105 lines of Emacs lisp that is to org-capture as a donkey in a dead lion&rsquo;s pelt is to Aslan. If anything, md-capture convinced me that I should just use org-mode for any writing I care about and that needs to be part of a larger body of writing or interact with other parts of that body.</p>
<h2 id="part-2-you-dont-have-to-care-about-any-of-that-with-journelly">Part 2. You don&rsquo;t have to care about any of that with Journelly</h2>
<p>org-mode&rsquo;s &ldquo;problem,&rdquo; to the extent it has one, is that it&rsquo;s a creature of Emacs and lisp, so it inherits their marginalized status. It was sort of fun when Puppet started using Clojure, because overnight I started seeing Spacemacs start popping up on developer screens: lisp was back! As someone who&rsquo;d been thinking of Emacs as home since 1992, I felt vindicated!</p>
<p>Talking to a Puppet product manager in the ensuing years, how much of a win that shift was for anyone is an open question: Even Puppet&rsquo;s traditional Ruby foundation was a <em>touch</em> exotic for the average sysadmin who might also be willing to submit a PR, but was way more legible than Clojure. I don&rsquo;t know if Puppet was cooling off anyhow, or if Clojure just made it impenetrable to would-be contributors, but the claim was made that community contributions to the core seemed to drop off with Clojure.</p>
<p>Well, anyhow, you don&rsquo;t <em>need</em> to understand org-mode to get benefit from Journelly. This is the third tool Álvaro has made that bridges the world of org-mode with iOS, and does so in a way that lets &ldquo;app people&rdquo; just have an app they can use, while &ldquo;org-mode people&rdquo; can take advantage of the wider org-mode ecosystem if they so choose.</p>
<p>There are other org-mode &ldquo;bridge&rdquo; apps out there, but my observation has been that even with a touch-driven GUI they seem to prefer to expose the functionality in a way that is still visually anchored on org-mode as a way to markup text for information management. Journelly, along with <a href="https://xenodium.com/plain-org-for-ios">Plain Org</a> and <a href="https://xenodium.com/flat-habits-for-ios">Flat Habits</a>, does a great good job of &ldquo;just working&rdquo; without needing to know about all the infrastructure available to you if you care to use it, and without making you deal with UI elements that want to remind you of their plaintext counterparts. Technically its use of hashtags probably counts as an extension of org-mode, since they&rsquo;re not, as near as I understand, in the org-mode spec. In day-to-day use with standard Emacs tools, I&rsquo;m not sure how much it matters.</p>
<p>So with Journelly we get an app that a non-Emacs person who just wants to have a flexible, elegant journaling tool can pick up and use: It has hashtags, you can add pictures to your entries, there&rsquo;s search, etc. etc. and you don&rsquo;t need to know about the plumbing that holds it all together. You still <em>benefit</em>, because if Álvaro announced tomorrow he was done with it and pulling it from the market, your stuff could be exported into a format that might not be <em>popular</em> but that is easily processed into something that <em>is</em> by Pandoc.</p>
<h2 id="part-3-forgetting-the-plumbing-helped-me-use-journelly-better">Part 3. Forgetting the plumbing helped me use Journelly better</h2>
<p>So I mentioned that I&rsquo;m not sure about the place of <code>#hashtags</code> in the org-mode specification.</p>
<p>&ldquo;Tagging&rdquo; in org-mode happens at the heading level:</p>
<pre><code>** This is a sub-heading about particular fruits :grapefruit:citrus:
</code></pre>
<p>When you search for tags in assorted parts of the org-mode ecosystem, you are searching for <code>:tag:</code>, and <code>:tag:</code> occurs at the end of a heading.</p>
<p>The social-media-era <code>#hashtag</code> doesn&rsquo;t exist in org-mode, so you don&rsquo;t get any of the org-mode infrastructure benefits of using them in an org-mode file. They&rsquo;re still perfectly <em>searchable</em> as a matter of being a string that starts with <code>#</code>, but org-mode has no place for them semantically. <a href="https://www.reddit.com/r/orgmode/comments/70p9lk/hashtags_in_orgmode/">People have behaved unpleasantly to each other about this.</a></p>
<p>When I first picked up Journelly, I remember <em>seeing</em> the little <code>#</code> button, and not even knowing how to process it, because I knew Journelly was using org-mode underneath. So I ignored it. I was sort of excited that there was this very friendly journaling tool that I could use as a plain old mobile app, and that underneath it had this familiar, feature-rich format if I wanted to do something with my data in Emacs. In my mental model of how to use a tool that uses org-mode underneath, I was doing the same thing some other org-mode app designers have done, which is try to exist inside org-mode&rsquo;s markup model.</p>
<p>I don&rsquo;t even know why I decided to see what the <code>#</code> button would do. I think I had just downloaded the latest Testflight beta and maybe tags were mentioned. Maybe I was bored. So I tapped it and added some text and saved the entry. Oh … huh … that text had become a tappable link that listed my one entry with that <code>#tag</code>. So I went back to some past entries and stuck some tags in and proved to myself that <code>#tags</code> do something in Journelly that is technically a divergence from org-mode proper, but which are useful and intuitive in the app context.</p>
<p>It was the &ldquo;technically a divergence from org-mode proper&rdquo; part that stuck with me, because in the moment I had to make a decision, I guess:</p>
<p>Ignore <code>#tags</code> because they wouldn&rsquo;t work quite like <code>:tags:</code> in Emacs, or accept them in the context of Journelly because they&rsquo;re useful.</p>
<p>An exchange I&rsquo;d had with Álvaro gave me another useful nudge. I was trying to solve the problem of how to edit my Journelly file from the desktop without blowing it up in a sync error, and sort of problem-solved my way into thinking it&rsquo;d be interesting if Journelly could handle multiple files and maybe interleave them since the entries are all predictably time/date-stamped. He said he liked having a monolithic file because he could find everything with <a href="https://github.com/abo-abo/swiper">swiper</a> searches. I&rsquo;d never used it myself, but I had my Doom config going and it&rsquo;s already wired up with SPC-s-s (or SPC-s-S to search for the thing at point), so I learned it&rsquo;s a fuzzy search tool.</p>
<p>Well, there&rsquo;s your &ldquo;how a <code>#hashtag</code> would work in org-mode&rdquo; solution: It&rsquo;s just text. Use a native tool in the context of a monolithic journal. And there are plenty of other fuzzy search tools for multi-file search.</p>
<p>So I got unstuck on using hashtags in Journelly and decided Álvaro wasn&rsquo;t trying to embrace/extend/extinguish org-mode to build his app empire.</p>
<h2 id="part-4-mindful-journaling-with-hashtags">Part 4. mindful journaling with hashtags</h2>
<p>Which is what brings me to something I&rsquo;ve never used a journal for before: Checking back in on how I think or feel about something, which I stumbled into.</p>
<p>Once I decided to start using hashtags in my Journelly entries, I wasn&rsquo;t sure how to use them. Semantically, in a social media context, they are a discovery tool. I&rsquo;ve read it recommended that if you&rsquo;re using Mastodon you should <em>really</em> lean into them, because say what you will about the toxicity of algorithmic discovery, without it you need to figure out some other way to discover stuff.</p>
<p>I won&rsquo;t use Microblog because it has taken the position that hashtags aren&rsquo;t okay, and the one time I mentioned the discovery use case I got a snide &ldquo;why is it so important to be discovered?&rdquo; from the founder that was just … like … because <em>I want my writing to be discovered by people who may share my interests or even express appreciation for my writing or photography or other endeavors</em>. Why the fuck do you have a first and last name, asshole? For a period I wedged hashtags into my Microblog blog with <a href="https://paste.lol/mph/tags.html">a Hugo shortcode that linked to a Mastodon search for a given tag</a> and a custom social posting feed that made sure the tags were injected into the description, but decided if a service has set aside a very basic and commonly understood tool for discovery because the founder thinks hashtags ruined Twitter, why bother?</p>
<p>So I was just putting tags on all sorts of things to see what would stick: People, moods, places, kinds of events, themes, etc. etc.</p>
<p>The most useful pattern to emerge was completely coincidental:</p>
<p>I was struggling to manage interactions with someone at work, to the point I was dreading every call or meeting. I had deeply internalized the idea that this person was impossible. If asked &ldquo;what do you think of this person,&rdquo; I&rsquo;d have described someone who could not be worked with, would not respond to basic interpersonal communications strategies, and for whom I&rsquo;d resigned myself to merely co-existing.</p>
<p>Over a few weeks, as I&rsquo;d come out of meetings or interactions, I&rsquo;d do my best to remember the positive parts of the interaction: Things where maybe they were their usual intransigent self, but had surprised me by showing up better, or responding well. But when talking about them over dinner, after work, my &ldquo;they&rsquo;re impossible&rdquo; narrative would crowd out any in-the-minute observations.</p>
<p>Then one day, having just finished a post-meeting entry, I tapped on their name hashtag and got all my past entries where I&rsquo;d mentioned them, and had a ton of evidence in front of me that for weeks I&rsquo;d been seeing good things, positive signs, indications that they were not, in fact, impossible or hopeless. That <em>most</em> of the time they were showing up okay. The &ldquo;omg nothing good came of that&rdquo; entries were pretty sparse.</p>
<p>I guess if I were faced with a solid cube with no apparent openings that didn&rsquo;t respond to anything I did to find out what was inside it, or a solid cube with a small number pad that required a eight-digit pin to open, I&rsquo;d probably complain that seven digits is a documented boundary of our ability to memorize a string of digits, but would prefer that to not being able to open the cube at all. I would probably save the eight digits in 1Password or write them on a sticky or make a snippet of them.</p>
<p>Which is sort of what using hashtags for a difficult human being helped me do in Journelly.</p>
]]></content:encoded>
    </item>
    <item>
      <title>lmno-blog-capture v0.2 (&#39;won&#39;t somebody think of the windows&#39; edition)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-03-lmno-blog-capture-v02-wont-somebody-think-of-the-windows-edition/</link>
      <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-03-lmno-blog-capture-v02-wont-somebody-think-of-the-windows-edition/</guid>
      <description>&lt;p&gt;My initial idea for &lt;a href=&#34;https://github.com/pdxmph/lmno-blog-capture&#34;&gt;lmno-blog-capture&lt;/a&gt; was &amp;ldquo;for dashing off super small posts in a transient window.&amp;rdquo; I wanted something org-capture-like so I could be writing about something, have a thought, and keep whatever I was working on in sight.&lt;/p&gt;
&lt;p&gt;So it never occurred to me to test what would happen if I had ended up going long and deciding to give myself more screen real estate with &lt;code&gt;C-x 1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then I did that and Emacs started squawking about having only one window to close, so even though it was saving my lmno.md file, it was complaining and not closing the posting minibuffer. I thought I fixed it once, but turns out I was fixing the wrong file in the wrong place for another project. Then it complained at me again today so I fixed it for real this time.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>My initial idea for <a href="https://github.com/pdxmph/lmno-blog-capture">lmno-blog-capture</a> was &ldquo;for dashing off super small posts in a transient window.&rdquo; I wanted something org-capture-like so I could be writing about something, have a thought, and keep whatever I was working on in sight.</p>
<p>So it never occurred to me to test what would happen if I had ended up going long and deciding to give myself more screen real estate with <code>C-x 1</code>.</p>
<p>Then I did that and Emacs started squawking about having only one window to close, so even though it was saving my lmno.md file, it was complaining and not closing the posting minibuffer. I thought I fixed it once, but turns out I was fixing the wrong file in the wrong place for another project. Then it complained at me again today so I fixed it for real this time.</p>
<h2 id="the-sublime-distraction">The Sublime distraction</h2>
<p>While I was In the midst of thrashing around with Emacs configs I wanted to keep working on another project, so I dusted off Sublime Text to just keep moving while I worked through my feelings about Emacs (again). I&rsquo;ve always had an uneasy relationship with it. I love that it&rsquo;s fast and smooth and runs on everything in the house, Linux and Mac alike. I love that it&rsquo;s got a good package ecosystem. I&rsquo;m not a Python person, though, so if I had an itch to scratch in the form of making my own plugin for it, I&rsquo;d be back at the bottom of the hill. I liked Textmate back when because I could write my own plugins in Ruby, and I like BBEdit for similar reasons: Text filters can be any scripting language.</p>
<p>But I&rsquo;m not actually <em>good</em> at Emacs lisp. Not on the level of something like making lmno-blog-capture on my own. Instead I fire up whichever LLM I want to play with and go through a sort of iterative process of describing what I&rsquo;d like to see happen, then testing it out, then layering on another idea, etc. etc.</p>
<p>That&rsquo;s time that could be spent getting gud at Emacs lisp, I guess, but when I think about making that investment … it just doesn&rsquo;t strike me.</p>
<p>I asked ChatGPT to translate lmno-blog-capture to a Sublime Text plugin for me, just to see the code side-by-side, and it was pretty legible. It also took zero iterations to have a working version. Getting an LLM to kick out working lisp on the first go is often hilarious, which makes sense.</p>
<p>Anyhow, nothing to do with it for now. I&rsquo;ve got this emacs-plus setup in a good place, and there&rsquo;s usually something that does what I want already in the ecosystem.</p>
<p><strong>Update:</strong> I did go ahead and <a href="https://github.com/pdxmph/subl-lmno-blog-capture">make a package out of the Sublime version</a> because why not. There&rsquo;s a package file you can download and install in the releases. It&rsquo;s funny because it is just not my conception of Sublime Text that you&rsquo;d live in it in this manner, but it seems completely right and proper that the exact same functionality would exist in Emacs.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Music night: Mutoid Man and Silver Lake</title>
      <link>https://mike.puddingtime.org/posts/2025-05-03-music-night-mutoid-man-and-silver-lake/</link>
      <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-03-music-night-mutoid-man-and-silver-lake/</guid>
      <description>&lt;p&gt;Last night ended up being kinda &amp;ldquo;music night&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;Alison&amp;rsquo;s friend Patricia Rojas played a set with her band, Silver Lake, at a guitar shop/bar in Buckman. Really nice Americana.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-CwCZvzM/0/Mg5T7kpr39CRNnDv5fpWrbRXGgwSLm9Hvd7M92hBN/XL/i-CwCZvzM-XL.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then we headed to the Twilight Cafe for Mutoid Man. I was super-excited for that one because I love just that band, and because all three members are in other bands I really love: High on Fire, Converge, and Cave In. They were really, really good and it was a great audience.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Last night ended up being kinda &ldquo;music night&rdquo;:</p>
<p>Alison&rsquo;s friend Patricia Rojas played a set with her band, Silver Lake, at a guitar shop/bar in Buckman. Really nice Americana.</p>
<p><img src="https://photos.smugmug.com/photos/i-CwCZvzM/0/Mg5T7kpr39CRNnDv5fpWrbRXGgwSLm9Hvd7M92hBN/XL/i-CwCZvzM-XL.jpg" alt="img"></p>
<p>Then we headed to the Twilight Cafe for Mutoid Man. I was super-excited for that one because I love just that band, and because all three members are in other bands I really love: High on Fire, Converge, and Cave In. They were really, really good and it was a great audience.</p>
<p><img src="https://photos.smugmug.com/photos/i-74VNnM7/0/L2KrVvkvwDptBMFnbwR2HcRrVsmr5RLNthVvjSj4W/XL/i-74VNnM7-XL.jpg" alt="img"></p>
]]></content:encoded>
    </item>
    <item>
      <title>cielagonote v0.11 (Home of the Whopper)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-02-cielagonote-v011-home-of-the-whopper/</link>
      <pubDate>Fri, 02 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-02-cielagonote-v011-home-of-the-whopper/</guid>
      <description>&lt;p&gt;I sat for a day with the nb daily plugin support question, a little torn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I do not like the daily file-naming convention (&lt;code&gt;yyyymmdd.ext&lt;/code&gt;), especially since other files have datestamps in the names.&lt;/li&gt;
&lt;li&gt;I much prefer the &lt;code&gt;daily-yyyy-mm-dd.ext&lt;/code&gt; for scanability and fuzzy-finding, and I like the way cielagonote titles the daily file, which matters in some parts of the Markdown ecosystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So my initial approach was to tell nb people to just not expect the daily functionality to work in cielagonote, or that they&amp;rsquo;d just get a &lt;code&gt;daily-yyyy-mm-dd&lt;/code&gt; file dropped in their nb instance that wouldn&amp;rsquo;t work with the &lt;code&gt;daily&lt;/code&gt; plugin. I didn&amp;rsquo;t like that much.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I sat for a day with the nb daily plugin support question, a little torn:</p>
<ul>
<li>I do not like the daily file-naming convention (<code>yyyymmdd.ext</code>), especially since other files have datestamps in the names.</li>
<li>I much prefer the <code>daily-yyyy-mm-dd.ext</code> for scanability and fuzzy-finding, and I like the way cielagonote titles the daily file, which matters in some parts of the Markdown ecosystem.</li>
</ul>
<p>So my initial approach was to tell nb people to just not expect the daily functionality to work in cielagonote, or that they&rsquo;d just get a <code>daily-yyyy-mm-dd</code> file dropped in their nb instance that wouldn&rsquo;t work with the <code>daily</code> plugin. I didn&rsquo;t like that much.</p>
<p>I had a fork of the nb daily plugin anyhow so that I could have my preferred file-naming convention for daily notes using stock <code>nb</code> and I&rsquo;ve added some configuration logic that lets people go a few ways:</p>
<ul>
<li>Use completely stock nb and its daily plugin in or out of cn. On first daily entry of the day, you get dropped into a command line where you can type in your first log.</li>
<li>Use stock nb with the forked plugin and get the same behavior, but with a more readable file naming scheme.</li>
<li>Don&rsquo;t use nb and get the more readable file-naming scheme.</li>
</ul>
<p>This is all managed with a new <code>daily_format:</code> setting that can be set to either <code>nb</code> or <code>cn</code> to drive how files are named.</p>
<p>Personally, I&rsquo;m going to use the forked plugin so I can keep using nb for management and git syncing but have more legible filenames for daily notes.</p>
<p>You can install it from the command line with the URL and use it either in the context of cielagonote or just use it alone to pretty up your daily note filenames:</p>
<p><code>nb plugin install https://github.com/pdxmph/cielagonote/blob/main/extras/cn-daily.nb-plugin</code></p>
]]></content:encoded>
    </item>
    <item>
      <title>cielagonote v0.3</title>
      <link>https://mike.puddingtime.org/posts/2025-05-01-cielagonote-v03/</link>
      <pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-01-cielagonote-v03/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pdxmph/cielagonote/releases/tag/v0.3&#34;&gt;This version&lt;/a&gt; just gets rid of a terminal reset after exiting the editor. It slowed things down, felt laggy, and seemed to be down to a thing that comes and goes depending on the combination of terminal, editor, and sunspots. Maybe I&amp;rsquo;ll add it to the configuration options.&lt;/p&gt;
&lt;p&gt;It also adds a warning in the README that &lt;code&gt;nb&lt;/code&gt; support is incomplete. I do want to make a config switch for that.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/pdxmph/cielagonote/releases/tag/v0.3">This version</a> just gets rid of a terminal reset after exiting the editor. It slowed things down, felt laggy, and seemed to be down to a thing that comes and goes depending on the combination of terminal, editor, and sunspots. Maybe I&rsquo;ll add it to the configuration options.</p>
<p>It also adds a warning in the README that <code>nb</code> support is incomplete. I do want to make a config switch for that.</p>
]]></content:encoded>
    </item>
    <item>
      <title>cielagonote v0.5 (No Really)</title>
      <link>https://mike.puddingtime.org/posts/2025-05-01-cielagonote-v05-no-really/</link>
      <pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-05-01-cielagonote-v05-no-really/</guid>
      <description>&lt;p&gt;Well, my lunch date canceled, so … with this version, &lt;code&gt;nb&lt;/code&gt; support is switchable:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;notes_dir: ~/notes
default_extension: md # or org
exclude_dirs:
  - denote
  - .git
hide_hidden: true # hides .files when enabled
editor: micro # will be overridden with `nb edit` if nb_support == true
nb_support: false # if true, overrides your editor: setting and enables nb file management
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So you can either just use cielagonote as a standalone note manager with no supporting ecosystem, or you can flip &lt;code&gt;nb_support:&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; and it&amp;rsquo;ll use nb&amp;rsquo;s native commands to create, rename, and delete notes, ensuring that &lt;code&gt;nb&lt;/code&gt;&amp;rsquo;s underlying git repo stays clean and in sync with remotes.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, my lunch date canceled, so … with this version, <code>nb</code> support is switchable:</p>
<pre><code>notes_dir: ~/notes
default_extension: md # or org
exclude_dirs:
  - denote
  - .git
hide_hidden: true # hides .files when enabled
editor: micro # will be overridden with `nb edit` if nb_support == true
nb_support: false # if true, overrides your editor: setting and enables nb file management
</code></pre>
<p>So you can either just use cielagonote as a standalone note manager with no supporting ecosystem, or you can flip <code>nb_support:</code> to <code>true</code> and it&rsquo;ll use nb&rsquo;s native commands to create, rename, and delete notes, ensuring that <code>nb</code>&rsquo;s underlying git repo stays clean and in sync with remotes.</p>
<p>One bit of config logic: if you enable nb support, the editor cn invokes will be based on your nb setting, not what you configured in <code>.cnconfig.yml</code>. That&rsquo;s just to be compliant with <code>nb</code>&rsquo;s expected behavior to keep the underlying repo clean.</p>
<p>… and there&rsquo;s one tradeoff: nb&rsquo;s <code>daily</code> plugin expects you to just provide it with an input argument and logs the entry for you in the daily note. I wasn&rsquo;t aware of the daily plugin when I started using nb and settled into my own <code>daily-yyyy-mm-dd.ext</code> convention. I think there&rsquo;s a way to address the whole thing that leaves both approaches intact if you choose to turn on <code>nb_support</code>, but for now the README just says &ldquo;don&rsquo;t use the <code>^t</code> keystroke if you&rsquo;re using <code>nb</code> because it doesn&rsquo;t honor the nb daily file naming convention.&rdquo;</p>
<p>I think I&rsquo;ll stop messing with it for a while now. It does what I want either as a standalone tool for anyone, or as a way to use <code>nb</code> with a slightly different twist on its native behavior. There is an fzf plugin for nb that gives you a fast way to access notes, cielagonote just adds a few conveniences so you can stay in its interface and manage notes a little more visually and a little less &ldquo;dig up a number, enter a number&rdquo; to do operations.</p>
<p><strong>Update:</strong> Oops. Introduced a regression. 0.7 is the way to go:</p>
<p><a href="https://github.com/pdxmph/cielagonote/releases/tag/v0.7">Link</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Everyone gets a number. Choose one. We&#39;re great on Funyuns, but the rice ran out.</title>
      <link>https://mike.puddingtime.org/posts/2025-04-30-everyone-gets-a-number-choose-one-were-great-on-funyuns-but-the-rice-ran-out/</link>
      <pubDate>Wed, 30 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-30-everyone-gets-a-number-choose-one-were-great-on-funyuns-but-the-rice-ran-out/</guid>
      <description>&lt;p&gt;I did my first volunteer shift at a neighborhood food pantry today. It was over at the elementary school across the park, where Ben went. The person running things seemed a little harried, but did take the time to show me how to stand behind several bins and ensure proper distribution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One or the other of a packet of spaghetti noodles or a pound of white rice&lt;/li&gt;
&lt;li&gt;One can of tomato paste, sauce, or diced tomatoes&lt;/li&gt;
&lt;li&gt;One jar of peanut butter&lt;/li&gt;
&lt;li&gt;One or the other from a box full of ramen, canned fruit, and other stuff &lt;em&gt;or&lt;/em&gt; baby food, apple sauce, white vinegar, soy sauce and cooking oils&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The station to my right had Funyuns and Nerds candies, and they were allowed to give away three of either. The station to my left had assorted meats: Hamburger, chicken thighs, and a few racks of ribs. Further down the way there was a vegetable person who had purple onions and some other vegetables.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I did my first volunteer shift at a neighborhood food pantry today. It was over at the elementary school across the park, where Ben went. The person running things seemed a little harried, but did take the time to show me how to stand behind several bins and ensure proper distribution:</p>
<ul>
<li>One or the other of a packet of spaghetti noodles or a pound of white rice</li>
<li>One can of tomato paste, sauce, or diced tomatoes</li>
<li>One jar of peanut butter</li>
<li>One or the other from a box full of ramen, canned fruit, and other stuff <em>or</em> baby food, apple sauce, white vinegar, soy sauce and cooking oils</li>
</ul>
<p>The station to my right had Funyuns and Nerds candies, and they were allowed to give away three of either. The station to my left had assorted meats: Hamburger, chicken thighs, and a few racks of ribs. Further down the way there was a vegetable person who had purple onions and some other vegetables.</p>
<p>The shift started with number distribution: A bit over 100 people lined up, and each got a token out of a plastic bin. The first person got number 1 and that made everybody laugh. The coordinator asked me to please keep an eye out for people slipping past the guy controlling the line to get a second number. Once the numbers were distributed, everyone came back into the area in front of the tent we were set up under and starting filing past.</p>
<p>I spent about an hour pointing to the spaghetti and rice bins and saying &ldquo;this or that, only one&rdquo; a lot. Some folks tried to grab both, and at first I&rsquo;d say &ldquo;oh, no … just one or the other&rdquo; but the people on either side of me faced with similar situations just firmly took the second item out of their hands, so I started doing that.</p>
<p>There was a small ripple down the line when someone lifted a pound of white rice out of the bin and discovered a different kind of rice with a more colorful label and maybe more of it. That caused a few people to double back and swap their rice out. When I ran out of peanut butter to distribute one of the other volunteers dumped a box of small Nutella knock-off jars into the bin, which didn&rsquo;t move super fast. Eventually, I was out of rice, but the Funyun station was in fine shape. I spotted a ton of extra boxes of that behind the line. Thanks, Funyun patron.</p>
<p>After distribution was mostly over a few people who couldn&rsquo;t get numbers came through, then I helped break down the tents and haul what was left back to the supply room, then grabbed some gloves and disinfected all the meat storage tubs. The coordinator was curious about what I was doing there. Given the application process and time sheet, I guess some volunteers are fulfilling a community service obligation. I just explained that I&rsquo;d searched for volunteer opportunities, wanted to support <a href="https://www.oregonfoodbank.org">the Oregon Food Bank</a>, and saw this location, which is just a five minute walk away. So I think I&rsquo;ll be going back every Wednesday: I&rsquo;m giving up my lunch and the company is giving me up from 1-2 in the afternoon.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Post-haircut drink at Bruno&#39;s</title>
      <link>https://mike.puddingtime.org/posts/2025-04-30-post-haircut-drink-at-brunos/</link>
      <pubDate>Wed, 30 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-30-post-haircut-drink-at-brunos/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-hRKCZhv/0/KF2zvZbjm3JJvBxFjwzJ8wLM4nGF4XCMQV4SHGcHF/XL/i-hRKCZhv-XL.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://photos.smugmug.com/photos/i-hRKCZhv/0/KF2zvZbjm3JJvBxFjwzJ8wLM4nGF4XCMQV4SHGcHF/XL/i-hRKCZhv-XL.jpg" alt="img"></p>
]]></content:encoded>
    </item>
    <item>
      <title>cielagonote 0.2.1 (changed daily notes and an nb plugin)</title>
      <link>https://mike.puddingtime.org/posts/2025-04-29-cielagonote-021-changed-daily-notes-and-an-nb-plugin/</link>
      <pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-29-cielagonote-021-changed-daily-notes-and-an-nb-plugin/</guid>
      <description>&lt;p&gt;I did some quick fixups to daily notes in cielagonote this morning.&lt;/p&gt;
&lt;p&gt;You can start or add to a daily note in cielagonote with &lt;code&gt;C-t&lt;/code&gt;. That opens a file named &lt;code&gt;daily-yyyy-mm-dd.ext&lt;/code&gt; (where .ext is either &lt;code&gt;.org&lt;/code&gt; or &lt;code&gt;.md&lt;/code&gt; depending on what you set in &lt;code&gt;.cnconfig.yml&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the naming convention I&amp;rsquo;ve been using forever for daily notes, and is at odds with nb&amp;rsquo;s own daily plugin, so I forked that and added it to the cielagonote repo as an extra.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I did some quick fixups to daily notes in cielagonote this morning.</p>
<p>You can start or add to a daily note in cielagonote with <code>C-t</code>. That opens a file named <code>daily-yyyy-mm-dd.ext</code> (where .ext is either <code>.org</code> or <code>.md</code> depending on what you set in <code>.cnconfig.yml</code>).</p>
<p>That&rsquo;s the naming convention I&rsquo;ve been using forever for daily notes, and is at odds with nb&rsquo;s own daily plugin, so I forked that and added it to the cielagonote repo as an extra.</p>
<p><code>$ nb plugin install https://github.com/pdxmph/cielagonote/blob/main/extras/cn-daily.nb-plugin</code></p>
<p><code>$ nb help daily</code> for usage, but <code>nb daily 'log text'</code> will get you going.</p>
<p>I think next up should probably be the config switch for &ldquo;fully in the nb world&rdquo; vs. &ldquo;just doing your own thing.&rdquo; That would just mean adding a line to the config file to set that switch and changing the behavior for:</p>
<ul>
<li>deleting notes</li>
<li>renaming notes</li>
<li>daily notes (to conform to the stock nb plugin)</li>
</ul>
<p>… to use the stock nb commands for those things under the hood, which will trigger nb syncs and reduce the chances of collisions if you&rsquo;re the type to walk away from an open buffer.</p>
<p>As a matter of tools therapy, I&rsquo;m enjoying this little project. It all starts from the assumption that you shouldn&rsquo;t care too much what you called the things you stuffed in the shoebox, you should just be able to find them, and you should be able to make new ones that might as well be consistently named but don&rsquo;t have to be. That has created a sense of lightness in daily usage, even as I enjoy thinking about how to keep it all that simple but layer on ways to interact with it efficiently.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Headspace</title>
      <link>https://mike.puddingtime.org/posts/2025-04-28-headspace/</link>
      <pubDate>Mon, 28 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-28-headspace/</guid>
      <description>&lt;p&gt;I spent today in my pretty stripped down Emacs config. In the end, setting aside dependencies that got pulled in, I&amp;rsquo;ve installed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LSP&lt;/li&gt;
&lt;li&gt;Vertico&lt;/li&gt;
&lt;li&gt;osx-clipboard&lt;/li&gt;
&lt;li&gt;exec-path-from-shell&lt;/li&gt;
&lt;li&gt;recentf&lt;/li&gt;
&lt;li&gt;company&lt;/li&gt;
&lt;li&gt;orderless&lt;/li&gt;
&lt;li&gt;which-key&lt;/li&gt;
&lt;li&gt;marginalia&lt;/li&gt;
&lt;li&gt;evil&lt;/li&gt;
&lt;li&gt;prescient&lt;/li&gt;
&lt;li&gt;undo-fu&lt;/li&gt;
&lt;li&gt;lmno-blog-capture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are 269 lines in my tangled config file to make it all work, and it seems to take somewhere around 0.7 seconds to launch from the shell (more like 1.3 seconds as a GUI). I had 387 lines in my Doom config, which is honestly a decent reflection on Doom: You can go totally &amp;ldquo;kid in a candy store&amp;rdquo; with that thing and it&amp;rsquo;s doing a lot to help you suffer less for that impulse.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I spent today in my pretty stripped down Emacs config. In the end, setting aside dependencies that got pulled in, I&rsquo;ve installed:</p>
<ul>
<li>LSP</li>
<li>Vertico</li>
<li>osx-clipboard</li>
<li>exec-path-from-shell</li>
<li>recentf</li>
<li>company</li>
<li>orderless</li>
<li>which-key</li>
<li>marginalia</li>
<li>evil</li>
<li>prescient</li>
<li>undo-fu</li>
<li>lmno-blog-capture</li>
</ul>
<p>There are 269 lines in my tangled config file to make it all work, and it seems to take somewhere around 0.7 seconds to launch from the shell (more like 1.3 seconds as a GUI). I had 387 lines in my Doom config, which is honestly a decent reflection on Doom: You can go totally &ldquo;kid in a candy store&rdquo; with that thing and it&rsquo;s doing a lot to help you suffer less for that impulse.</p>
<p>I am probably not done adding stuff. Most of what&rsquo;s in that list is stuff I got used to in Doom (in significantly less engineered form than you get there). I was mildly surprised to realize how much I&rsquo;ve gotten used to <a href="https://github.com/emacs-evil/evil">evil</a>, but after an hour of blundering around and leaving stray ^, $, x, and p in my documents, I broke down and installed it.</p>
<p>The net result of the whole thing today was one of feeling uncluttered. Like, there are things I never really learned how to do with Doom because there was so much to do, and because I couldn&rsquo;t understand <em>why</em> it was doing some of what it was doing out of the box. The value of taking a step back and just putting back the things I noticed and liked includes knowing why things are doing what they&rsquo;re doing, and feeling significantly less like my editor is a mysterious box of perils and wonders. And less like an attentional honeypot.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Making an nb bookmark from iOS</title>
      <link>https://mike.puddingtime.org/posts/2025-04-28-making-an-nb-bookmark-from-ios/</link>
      <pubDate>Mon, 28 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-28-making-an-nb-bookmark-from-ios/</guid>
      <description>&lt;p&gt;Couldn&amp;rsquo;t resist figuring this out. You can run scripts over ssh with Shortcuts and iOS:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-RhLtbpt/0/NT4NdwNxRK5HFVQB6ZWTfq9CQkJKqqDw3FR25BbJv/XL/i-RhLtbpt-XL.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;The script on the receiving end:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/opt/homebrew/bin/bash
url=${1)
/opt/homebrew/bin/nb ${1}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&#34;https://tailscale.com/&#34;&gt;Tailscale&lt;/a&gt; makes this kind of thing easier. (And yes, use an ssh key.)&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Couldn&rsquo;t resist figuring this out. You can run scripts over ssh with Shortcuts and iOS:</p>
<p><img src="https://photos.smugmug.com/photos/i-RhLtbpt/0/NT4NdwNxRK5HFVQB6ZWTfq9CQkJKqqDw3FR25BbJv/XL/i-RhLtbpt-XL.png" alt="img"></p>
<p>The script on the receiving end:</p>
<pre><code>#!/opt/homebrew/bin/bash
url=${1)
/opt/homebrew/bin/nb ${1}
</code></pre>
<p><a href="https://tailscale.com/">Tailscale</a> makes this kind of thing easier. (And yes, use an ssh key.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Bolting a CLI interface onto imgup for SmugMug uploading and blogging</title>
      <link>https://mike.puddingtime.org/posts/2025-04-27-bolting-a-cli-interface-onto-imgup-for-smugmug-uploading-and-blogging/</link>
      <pubDate>Sun, 27 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-27-bolting-a-cli-interface-onto-imgup-for-smugmug-uploading-and-blogging/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pdxmph/imgup&#34;&gt;imgup&lt;/a&gt; is a project I worked on a few years ago to solve the problem of where to put photos for my blogs after experiencing a few weird things with different services: The image files being renamed into something illegible, or suffering from crappy compression. Since I have been using SmugMug for years and keep everything there, I decided to create a non-browseable album I could upload images to, then share from there.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/pdxmph/imgup">imgup</a> is a project I worked on a few years ago to solve the problem of where to put photos for my blogs after experiencing a few weird things with different services: The image files being renamed into something illegible, or suffering from crappy compression. Since I have been using SmugMug for years and keep everything there, I decided to create a non-browseable album I could upload images to, then share from there.</p>
<p>The problem with that idea was how cumbersome/tedious it was to upload things to SmugMug, grab the URL for the image, etc., so I made imgup to solve that: You just give it an image, a caption, and a title, and get back a link to the SmugMug-hosted image along with all the markup for copy/paste into a post, either as Markdown or HTML. There&rsquo;s a history page with recent uploads, too.</p>
<p>I recently migrated it off of its Heroku hosting and into Docker on my Synology, and I&rsquo;ve been especially glad for it since starting to blog on lmno, which offers no image hosting of its own, but I&rsquo;ve also wanted to be able to run it as a CLI app, so this evening I got around to making that interface for it.</p>
<p>It just takes a <code>--title</code> and <code>--caption</code> along with a filename and returns a Markdown snippet:</p>
<pre><code>$ imgup -t &quot;Breakfast at Grits 'n Gravy&quot; -c &quot;Saturday morning breakfast&quot; /Users/mph/Desktop/IMG_0627.jpg

![Breakfast at Grits 'n Gravy](https://pix.puddingtime.org/Uploads/n-47GBfb/i-CDnXqDV)
</code></pre>
<p>… which gives me this:</p>
<p><img src="https://photos.smugmug.com/photos/i-CDnXqDV/0/NZKr7D3jLjk8Q22ttSqjVsWm5M4w8BTRkL43sp5VM/XL/i-CDnXqDV-XL.jpg" alt="img"></p>
<p>The home screen of the web interface:</p>
<p><img src="https://photos.smugmug.com/photos/i-rrm879C/0/LVDzJXXM7SCPXg8BFBDGsP3ZVFRm6GW4skmvk9cqS/XL/i-rrm879C-XL.png" alt="img"></p>
<p>… and recent uploads, with snippets ready for copy/paste as either HTML or Markdown image tags:</p>
<p><img src="https://photos.smugmug.com/photos/i-4BgdznH/0/KvtLrGtBkrSDhS94n7HVbdGbKPkLpBrMbzLpCchP6/XL/i-4BgdznH-XL.png" alt="img"></p>
]]></content:encoded>
    </item>
    <item>
      <title>All along the watchtower</title>
      <link>https://mike.puddingtime.org/posts/2025-04-26-all-along-the-watchtower/</link>
      <pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-26-all-along-the-watchtower/</guid>
      <description>&lt;p&gt;I used to have a chief engineer on my team whom I loved dearly, because when I&amp;rsquo;d be in the throes of my worst managerial contortions, he&amp;rsquo;d quietly ask, &amp;ldquo;Mike, what problem are you trying to solve?&amp;rdquo; He was very good at winding things back and resetting.&lt;/p&gt;
&lt;p&gt;At the beginning of our relationship I would feel attacked, because it&amp;rsquo;s so easy to get so far out to sea that you lose sight of that initial thing that started the process of piling up fixes and solutions and almost feel like you didn&amp;rsquo;t even know what problem you were trying to solve, you just sort of got caught up in all that change-agent energy and felt like doing something.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I used to have a chief engineer on my team whom I loved dearly, because when I&rsquo;d be in the throes of my worst managerial contortions, he&rsquo;d quietly ask, &ldquo;Mike, what problem are you trying to solve?&rdquo; He was very good at winding things back and resetting.</p>
<p>At the beginning of our relationship I would feel attacked, because it&rsquo;s so easy to get so far out to sea that you lose sight of that initial thing that started the process of piling up fixes and solutions and almost feel like you didn&rsquo;t even know what problem you were trying to solve, you just sort of got caught up in all that change-agent energy and felt like doing something.</p>
<p>So, re: fiddling around with micro to make it behave more like Emacs, the real problem I was trying to solve was how to get in and out of an editor quickly without dealing with a lot of infrastructure and assumptions.</p>
<p>So I moved my Doom Emacs config out of the way and made a very small one.</p>
<p>I know, I know. We&rsquo;re in Battlestar Galactica territory. This has happened before, it will happen again: Then the layering on begins and soon we have a teetering edifice of bespoke config that becomes harder and harder to manage so we cry out for help to one of the <em>frameworks</em> to save us from ourselves.</p>
<p>I think the interesting thing about the past several days of iterating on cielagonotes is that once I had it into a useful state and was not only iterating on it but using it to jot things down, I felt sort of relieved. And once I <a href="https://puddingtime.org/lol">found that fzf plugin</a>, I felt even more relieved, because just typing <code>nbf</code> into a shell prompt and getting to what I wanted to get to felt like a reconnection with the problem I was trying to solve. I like some of the stuff I&rsquo;ve added into cn, but that plugin solves the vast majority of the problem.</p>
<p>And it&rsquo;s not that I don&rsquo;t want an Emacs-class editor in the mix somewhere. As I was writing down some stuff I&rsquo;d learned yesterday I found myself missing stuff you wouldn&rsquo;t think twice about in an Emacs-class editor, but that isn&rsquo;t really stuff you need massive infrastructure to achieve. Like inserting another file into the current buffer.</p>
<p>So, here we go again.</p>
]]></content:encoded>
    </item>
    <item>
      <title>cielagonote is what I woke up yesterday morning wanting to find</title>
      <link>https://mike.puddingtime.org/posts/2025-04-25-cielagonote-is-what-i-woke-up-yesterday-morning-wanting-to-find/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-25-cielagonote-is-what-i-woke-up-yesterday-morning-wanting-to-find/</guid>
      <description>&lt;p&gt;My &lt;a href=&#34;https://puddingtime.org/lmno-blog-captureel-and-the-whole-lightweight-text-thing&#34;&gt;kick&lt;/a&gt; has reached some kind of logical conclusion in the form of &lt;a href=&#34;https://github.com/pdxmph/cielagonote&#34;&gt;cielagonote&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://puddingtime.org/nuhtizhunal-veblocitrix&#34;&gt;This morning&lt;/a&gt; I started off with a zsh wrapper around fzf and nb for finding and editing notes. nb is fine and all, but I really like the sort of speedy narrowing you get from something like &lt;a href=&#34;https://github.com/jrblevin/deft&#34;&gt;deft&lt;/a&gt; or other members of the Notational Velocity family tree.&lt;/p&gt;
&lt;p&gt;So I was looking for something to wrap around nb to keep taking advantage of its git syncing and a few other features, but also warily eyeing too much dependence on it. If the Giant nb-Eating Space Goat were to pull into orbit tomorrow, I would want to simply watch it magestically devour nb, then have a quick way to write a note about my impressions of the experience without accidentally naming that note the same as another about a similar experience.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>My <a href="https://puddingtime.org/lmno-blog-captureel-and-the-whole-lightweight-text-thing">kick</a> has reached some kind of logical conclusion in the form of <a href="https://github.com/pdxmph/cielagonote">cielagonote</a>.</p>
<p><a href="https://puddingtime.org/nuhtizhunal-veblocitrix">This morning</a> I started off with a zsh wrapper around fzf and nb for finding and editing notes. nb is fine and all, but I really like the sort of speedy narrowing you get from something like <a href="https://github.com/jrblevin/deft">deft</a> or other members of the Notational Velocity family tree.</p>
<p>So I was looking for something to wrap around nb to keep taking advantage of its git syncing and a few other features, but also warily eyeing too much dependence on it. If the Giant nb-Eating Space Goat were to pull into orbit tomorrow, I would want to simply watch it magestically devour nb, then have a quick way to write a note about my impressions of the experience without accidentally naming that note the same as another about a similar experience.</p>
<p>So you just get the basic &ldquo;fuzzy-searchin&rsquo; notes&rdquo; thing:</p>
<ul>
<li>Start typing</li>
<li>full-text search narrows your options</li>
<li>Hit return to pick one and start editing or ^n to make a uniquified duplicate title for whatever reason I was worried about that.</li>
</ul>
<p>It doesn&rsquo;t do deleting or other management (yet).</p>
<p>There&rsquo;s a config file:</p>
<pre><code>notes_dir: ~/notes
default_extension: org
exclude_dirs:
  - denote_archive
  - .git
hide_hidden: true
editor: nb edit
</code></pre>
<p>If you set your editor to <code>nb edit</code> you can be assured your stuff is getting synced. Pick something else and it&rsquo;ll just manage a directory of notes.</p>
<p><code>hide_hidden:</code> just means &ldquo;no dotfiles.&rdquo; <code>exclude_dirs</code> means what it says.</p>
<p>One thing I probably ought to do is ask what file extensions you&rsquo;d <em>like</em> to see. Since this is for me, it just has .org and .md hard-coded.</p>
<p><img src="https://photos.smugmug.com/photos/i-PFWJgW5/0/LGkpRcqsNGCF48pbjvS6NxmbxGPqvQ8DtGr89qzzm/XL/i-PFWJgW5-XL.png" alt="img"></p>
<p>Down here way under the fold, probably also good and proper to note that this was mostly me fumbling around and getting help from ChatGPT. I knew the pieces I wanted to glue together, and I knew how I wanted it to behave, but it took a lot of prompting and nagging. And it&rsquo;s not a new idea. I just couldn&rsquo;t find anything that did exactly what I woke up imagining in a terminal.</p>
]]></content:encoded>
    </item>
    <item>
      <title>cielagonote v0.2.0 - WMD Edition</title>
      <link>https://mike.puddingtime.org/posts/2025-04-25-cielagonote-v020-wmd-edition/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-25-cielagonote-v020-wmd-edition/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pdxmph/cielagonote/releases/tag/v0.2.0&#34;&gt;cielagonote 0.2.0&lt;/a&gt; adds some basic file management and a convenience feature for daily notes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-VmRPJDC/0/MTkthHNsmB3FZKp4s8WhM62nKCxjDgLHgLq6sGxRd/XL/i-VmRPJDC-XL.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;There are two things that I would love to polish up but probably never will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Since I am a heavy emacsclient user, I run into some interactions between it and &lt;a href=&#34;https://sw.kovidgoyal.net/kitty/&#34;&gt;kitty&lt;/a&gt; that leave the terminal in a disordered state. I&amp;rsquo;ve solved that with a reset after exiting an edit operation. It adds a small bit of latency to an otherwise zippy interaction.&lt;/li&gt;
&lt;li&gt;The rename and delete operations drop you back into the command line for a second. It&amp;rsquo;d be a lot spiffier if that were handled more nicely.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On the other hand, this is 233 lines of Ruby and an off-the-shelf cast of supporting characters. It was pretty delightful to use it in anger a few times with my topic logs this morning, and it did what I wanted by feeling way less in the way and less &amp;ldquo;now I am entering into some other place and descending down into a corner of it and doing a thing and coming back up out of it.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/pdxmph/cielagonote/releases/tag/v0.2.0">cielagonote 0.2.0</a> adds some basic file management and a convenience feature for daily notes.</p>
<p><img src="https://photos.smugmug.com/photos/i-VmRPJDC/0/MTkthHNsmB3FZKp4s8WhM62nKCxjDgLHgLq6sGxRd/XL/i-VmRPJDC-XL.png" alt="img"></p>
<p>There are two things that I would love to polish up but probably never will:</p>
<ol>
<li>Since I am a heavy emacsclient user, I run into some interactions between it and <a href="https://sw.kovidgoyal.net/kitty/">kitty</a> that leave the terminal in a disordered state. I&rsquo;ve solved that with a reset after exiting an edit operation. It adds a small bit of latency to an otherwise zippy interaction.</li>
<li>The rename and delete operations drop you back into the command line for a second. It&rsquo;d be a lot spiffier if that were handled more nicely.</li>
</ol>
<p>On the other hand, this is 233 lines of Ruby and an off-the-shelf cast of supporting characters. It was pretty delightful to use it in anger a few times with my topic logs this morning, and it did what I wanted by feeling way less in the way and less &ldquo;now I am entering into some other place and descending down into a corner of it and doing a thing and coming back up out of it.&rdquo;</p>
<p>This has also been piquing my interest in <a href="https://micro-editor.github.io/">micro</a>. There are some good features there, and it is super fast from a standing start, but it feels less like a rabbit hole.</p>
<p>Oh, right: cn 0.2.0 is also set up as a gem now. That was sort of fun to figure out, too.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Emacs keybindings for micro</title>
      <link>https://mike.puddingtime.org/posts/2025-04-25-emacs-keybindings-for-micro/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-25-emacs-keybindings-for-micro/</guid>
      <description>&lt;p&gt;The biggest problem I&amp;rsquo;ve had with &lt;a href=&#34;https://micro-editor.github.io/&#34;&gt;micro&lt;/a&gt; has been getting used to its very CUA-like sensibility. Sticking these in &lt;code&gt;~/.config/micro/bindings.json&lt;/code&gt; looks like it is relieving the worst of it, leaving me with a just-fine zippy little editor that doesn&amp;rsquo;t need Emacs infrastructure to operate.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &amp;quot;\u001b\u003c&amp;quot;: &amp;quot;CursorStart&amp;quot;,
    &amp;quot;\u001b\u003e&amp;quot;: &amp;quot;CursorEnd&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003c0\u003e&amp;quot;: &amp;quot;Unsplit&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003c2\u003e&amp;quot;: &amp;quot;HSplit&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003c3\u003e&amp;quot;: &amp;quot;VSplit&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003cCtrl-c\u003e&amp;quot;: &amp;quot;Quit&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003cCtrl-f\u003e&amp;quot;: &amp;quot;OpenFile&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003cCtrl-s\u003e&amp;quot;: &amp;quot;Save&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003ch\u003e&amp;quot;: &amp;quot;SelectAll&amp;quot;,
    &amp;quot;\u003cCtrl-x\u003e\u003co\u003e&amp;quot;: &amp;quot;command:fzf&amp;quot;,
    &amp;quot;Alt-/&amp;quot;: &amp;quot;lua:comment.comment&amp;quot;,
    &amp;quot;Alt-a&amp;quot;: &amp;quot;lua:snippets.Accept&amp;quot;,
    &amp;quot;Alt-b&amp;quot;: &amp;quot;WordLeft&amp;quot;,
    &amp;quot;Alt-d&amp;quot;: &amp;quot;lua:snippets.Cancel&amp;quot;,
    &amp;quot;Alt-f&amp;quot;: &amp;quot;WordRight&amp;quot;,
    &amp;quot;Alt-s&amp;quot;: &amp;quot;lua:snippets.Insert&amp;quot;,
    &amp;quot;Alt-v&amp;quot;: &amp;quot;CursorPageUp&amp;quot;,
    &amp;quot;Alt-w&amp;quot;: &amp;quot;Copy&amp;quot;,
    &amp;quot;Alt-x&amp;quot;: &amp;quot;CommandMode&amp;quot;,
    &amp;quot;Ctrl-a&amp;quot;: &amp;quot;StartOfLine&amp;quot;,
    &amp;quot;Ctrl-e&amp;quot;: &amp;quot;EndOfLine&amp;quot;,
    &amp;quot;Ctrl-g&amp;quot;: &amp;quot;Escape&amp;quot;,
    &amp;quot;Ctrl-k&amp;quot;: &amp;quot;CutLine&amp;quot;,
    &amp;quot;Ctrl-r&amp;quot;: &amp;quot;FindPrevious&amp;quot;,
    &amp;quot;Ctrl-s&amp;quot;: &amp;quot;Find&amp;quot;,
    &amp;quot;Ctrl-v&amp;quot;: &amp;quot;CursorPageDown&amp;quot;,
    &amp;quot;Ctrl-y&amp;quot;: &amp;quot;Paste&amp;quot;,
    &amp;quot;Ctrl-z&amp;quot;: &amp;quot;Undo&amp;quot;,
    &amp;quot;CtrlP&amp;quot;: &amp;quot;command:palettero&amp;quot;,
    &amp;quot;CtrlSpace&amp;quot;: &amp;quot;command:palettero&amp;quot;,
    &amp;quot;CtrlUnderscore&amp;quot;: &amp;quot;Undo&amp;quot;,
    &amp;quot;F1&amp;quot;: &amp;quot;command:cheat&amp;quot;,
    &amp;quot;F12&amp;quot;: &amp;quot;command:makeup&amp;quot;,
    &amp;quot;F4&amp;quot;: &amp;quot;command:jumptag&amp;quot;,
    &amp;quot;F5&amp;quot;: &amp;quot;command:runit&amp;quot;,
    &amp;quot;F9&amp;quot;: &amp;quot;command:makeupbg&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I used to use &lt;a href=&#34;https://www.jedsoft.org/jed/&#34;&gt;jed&lt;/a&gt; for this, until something went wrong with it for a while. It seems to be operating correctly again to judge from my latest pull down from Homebrew, but I just went to this trouble with micro …&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The biggest problem I&rsquo;ve had with <a href="https://micro-editor.github.io/">micro</a> has been getting used to its very CUA-like sensibility. Sticking these in <code>~/.config/micro/bindings.json</code> looks like it is relieving the worst of it, leaving me with a just-fine zippy little editor that doesn&rsquo;t need Emacs infrastructure to operate.</p>
<pre><code>{
    &quot;\u001b\u003c&quot;: &quot;CursorStart&quot;,
    &quot;\u001b\u003e&quot;: &quot;CursorEnd&quot;,
    &quot;\u003cCtrl-x\u003e\u003c0\u003e&quot;: &quot;Unsplit&quot;,
    &quot;\u003cCtrl-x\u003e\u003c2\u003e&quot;: &quot;HSplit&quot;,
    &quot;\u003cCtrl-x\u003e\u003c3\u003e&quot;: &quot;VSplit&quot;,
    &quot;\u003cCtrl-x\u003e\u003cCtrl-c\u003e&quot;: &quot;Quit&quot;,
    &quot;\u003cCtrl-x\u003e\u003cCtrl-f\u003e&quot;: &quot;OpenFile&quot;,
    &quot;\u003cCtrl-x\u003e\u003cCtrl-s\u003e&quot;: &quot;Save&quot;,
    &quot;\u003cCtrl-x\u003e\u003ch\u003e&quot;: &quot;SelectAll&quot;,
    &quot;\u003cCtrl-x\u003e\u003co\u003e&quot;: &quot;command:fzf&quot;,
    &quot;Alt-/&quot;: &quot;lua:comment.comment&quot;,
    &quot;Alt-a&quot;: &quot;lua:snippets.Accept&quot;,
    &quot;Alt-b&quot;: &quot;WordLeft&quot;,
    &quot;Alt-d&quot;: &quot;lua:snippets.Cancel&quot;,
    &quot;Alt-f&quot;: &quot;WordRight&quot;,
    &quot;Alt-s&quot;: &quot;lua:snippets.Insert&quot;,
    &quot;Alt-v&quot;: &quot;CursorPageUp&quot;,
    &quot;Alt-w&quot;: &quot;Copy&quot;,
    &quot;Alt-x&quot;: &quot;CommandMode&quot;,
    &quot;Ctrl-a&quot;: &quot;StartOfLine&quot;,
    &quot;Ctrl-e&quot;: &quot;EndOfLine&quot;,
    &quot;Ctrl-g&quot;: &quot;Escape&quot;,
    &quot;Ctrl-k&quot;: &quot;CutLine&quot;,
    &quot;Ctrl-r&quot;: &quot;FindPrevious&quot;,
    &quot;Ctrl-s&quot;: &quot;Find&quot;,
    &quot;Ctrl-v&quot;: &quot;CursorPageDown&quot;,
    &quot;Ctrl-y&quot;: &quot;Paste&quot;,
    &quot;Ctrl-z&quot;: &quot;Undo&quot;,
    &quot;CtrlP&quot;: &quot;command:palettero&quot;,
    &quot;CtrlSpace&quot;: &quot;command:palettero&quot;,
    &quot;CtrlUnderscore&quot;: &quot;Undo&quot;,
    &quot;F1&quot;: &quot;command:cheat&quot;,
    &quot;F12&quot;: &quot;command:makeup&quot;,
    &quot;F4&quot;: &quot;command:jumptag&quot;,
    &quot;F5&quot;: &quot;command:runit&quot;,
    &quot;F9&quot;: &quot;command:makeupbg&quot;
}
</code></pre>
<p>I used to use <a href="https://www.jedsoft.org/jed/">jed</a> for this, until something went wrong with it for a while. It seems to be operating correctly again to judge from my latest pull down from Homebrew, but I just went to this trouble with micro …</p>
<p>Anyhow, I realized a few things got left out there, so <a href="https://gist.github.com/pdxmph/521c06829aef0157db02a9c42952f86a">here&rsquo;s a gist with a more complete set</a> including Emacs-style <code>C-_</code> undo and <code>Alt-&lt;</code> <code>Alt-&gt;</code> top/bottom of the buffer.</p>
]]></content:encoded>
    </item>
    <item>
      <title>lol</title>
      <link>https://mike.puddingtime.org/posts/2025-04-25-lol/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-25-lol/</guid>
      <description>&lt;p&gt;Just &lt;code&gt;nb install fzf.nb-plugin&lt;/code&gt; and &lt;code&gt;nb fzf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;alias nbf&lt;/code&gt;&amp;ldquo;nb fzf&amp;rdquo;= if you&amp;rsquo;re feeling frisky.&lt;/p&gt;
&lt;p&gt;Done.&lt;/p&gt;
&lt;p&gt;I mean, not really, because &lt;a href=&#34;https://github.com/pdxmph/cielagonote&#34;&gt;cielagonote&lt;/a&gt; does the whole &amp;ldquo;make it if it doesn&amp;rsquo;t exist&amp;rdquo; thing, and it&amp;rsquo;s doing full-text search. But if the thing you don&amp;rsquo;t like about nb is &amp;ldquo;list, get a number, enter a number&amp;rdquo; to operate on your file, this does the job.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env bash
###############################################################################
# fzf.nb-plugin
#
# FZF Plugin for nb
#
###############################################################################

# Add the new subcommand name with `_subcommands add &amp;lt;name&amp;gt;`.
_subcommands add &amp;quot;fzf&amp;quot;

# Define help and usage text with `_subcommands describe &amp;lt;subcommand&amp;gt; &amp;lt;usage&amp;gt;`.
_subcommands describe &amp;quot;fzf&amp;quot; &amp;lt;&amp;lt;HEREDOC
Usage:
  nb fzf
  Description:
    Search through current notebook using fzf and then edit sepected item.
HEREDOC

_fzf() {
  local note=$(_ls -t note --filename -a --no-footer --no-header --no-indicator --tree | fzf --ansi --header &amp;quot;$(_notebook current --name)&amp;quot; --preview &amp;quot;echo {} | sed &#39;&amp;quot;&#39;s/\x1b\[[0-9;]*m//g&#39;&amp;quot;&#39; | awk -F&#39;[][]&#39; &#39;&amp;quot;&#39;{print $2}&#39;&amp;quot;&#39; | xargs -n 1 nb show -p | ${NB_MARKDOWN_TOOL:-bat} -&amp;quot; | awk -F&#39;[][]&#39; &#39;{print $2}&#39;)

  if ! [[ -z &amp;quot;$note&amp;quot; ]]; then
    command nb edit &amp;quot;$note&amp;quot;
  fi
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <content:encoded><![CDATA[<p>Just <code>nb install fzf.nb-plugin</code> and <code>nb fzf</code>.</p>
<p><code>alias nbf</code>&ldquo;nb fzf&rdquo;= if you&rsquo;re feeling frisky.</p>
<p>Done.</p>
<p>I mean, not really, because <a href="https://github.com/pdxmph/cielagonote">cielagonote</a> does the whole &ldquo;make it if it doesn&rsquo;t exist&rdquo; thing, and it&rsquo;s doing full-text search. But if the thing you don&rsquo;t like about nb is &ldquo;list, get a number, enter a number&rdquo; to operate on your file, this does the job.</p>
<pre><code>#!/usr/bin/env bash
###############################################################################
# fzf.nb-plugin
#
# FZF Plugin for nb
#
###############################################################################

# Add the new subcommand name with `_subcommands add &lt;name&gt;`.
_subcommands add &quot;fzf&quot;

# Define help and usage text with `_subcommands describe &lt;subcommand&gt; &lt;usage&gt;`.
_subcommands describe &quot;fzf&quot; &lt;&lt;HEREDOC
Usage:
  nb fzf
  Description:
    Search through current notebook using fzf and then edit sepected item.
HEREDOC

_fzf() {
  local note=$(_ls -t note --filename -a --no-footer --no-header --no-indicator --tree | fzf --ansi --header &quot;$(_notebook current --name)&quot; --preview &quot;echo {} | sed '&quot;'s/\x1b\[[0-9;]*m//g'&quot;' | awk -F'[][]' '&quot;'{print $2}'&quot;' | xargs -n 1 nb show -p | ${NB_MARKDOWN_TOOL:-bat} -&quot; | awk -F'[][]' '{print $2}')

  if ! [[ -z &quot;$note&quot; ]]; then
    command nb edit &quot;$note&quot;
  fi
}
</code></pre>
]]></content:encoded>
    </item>
    <item>
      <title>nuhtizhunal veblocitrix</title>
      <link>https://mike.puddingtime.org/posts/2025-04-25-nuhtizhunal-veblocitrix/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-25-nuhtizhunal-veblocitrix/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/junegunn/fzf&#34;&gt;fzf&lt;/a&gt; is a command line fuzzy finding TUI thing that gives you really fast progressive narrowing on a directory full of stuff then invokes whatever on the target. This morning&amp;rsquo;s science experiment is wrapping it in a zsh function for my nb that pops up a fuzzy finder with incremental search, or offers to start a new note in nb. If you take the &lt;code&gt;New Note&lt;/code&gt; option, you get a prompt for the title and can start typing. The whole thing is wrapped around &lt;code&gt;nb&lt;/code&gt; so I get the benefits of its autosync infrastructure, just with a search interface that is way faster for finding things.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/junegunn/fzf">fzf</a> is a command line fuzzy finding TUI thing that gives you really fast progressive narrowing on a directory full of stuff then invokes whatever on the target. This morning&rsquo;s science experiment is wrapping it in a zsh function for my nb that pops up a fuzzy finder with incremental search, or offers to start a new note in nb. If you take the <code>New Note</code> option, you get a prompt for the title and can start typing. The whole thing is wrapped around <code>nb</code> so I get the benefits of its autosync infrastructure, just with a search interface that is way faster for finding things.</p>
<p>Getting this to work with emacsclient wasn&rsquo;t great, and in fact it does not work with emacsclient right now. I&rsquo;ve been playing around with <a href="https://micro-editor.github.io/">micro</a> and that was great for getting this far with the experiment. Not sure I&rsquo;ll keep it but one of the things I was trying to figure out when I stumbled across nb (again) was &ldquo;has anyone done a TUI Notational Velocity&rdquo;? I haven&rsquo;t found anything like that, exactly, but it is pretty cool to me that with fzf, fd, and micro, you can get most of the way there with a zsh function.</p>
<p>Anyhow, I need to catch up on some stuff today.</p>
<pre><code># ~/.zsh/functions/znotes.zsh

zn() {
  local notes_dir=~/notes
  cd &quot;$notes_dir&quot; || return 1

  local files
  files=$(fd --type f --extension org --extension md --exclude denote . &quot;$notes_dir&quot;) || return 1

  local file
  file=$( (echo &quot;[New Note]&quot;; echo &quot;$files&quot;) \
          | fzf --prompt=&quot;Edit or create note: &quot; \
                --preview='[[ {} == &quot;[New Note]&quot; ]] || bat --style=numbers --color=always --line-range=:100 {}') || return 1

  if [[ &quot;$file&quot; == &quot;[New Note]&quot; ]]; then
    echo -n &quot;New note title: &quot;
    read -r title
    [[ -z &quot;$title&quot; ]] &amp;&amp; echo &quot;Aborted: no title given.&quot; &amp;&amp; return 1

    nb new --title &quot;$title&quot;
    echo &quot;Note created. You can run \`nb list\` to see it.&quot;
  else
    nb edit &quot;$file&quot;
  fi
}
</code></pre>
]]></content:encoded>
    </item>
    <item>
      <title>log2file.el for quick logging into md or org (pencils down, back to work)</title>
      <link>https://mike.puddingtime.org/posts/2025-04-23-log2fileel-for-quick-logging-into-md-or-org-pencils-down-back-to-work/</link>
      <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-23-log2fileel-for-quick-logging-into-md-or-org-pencils-down-back-to-work/</guid>
      <description>&lt;p&gt;In the process of diddling around with a bunch of different kinds of logs and formats, I realized I had two things that did the same thing, more or less, for org files and Markdown files. The &lt;a href=&#34;https://github.com/pdxmph/org-topic-log&#34;&gt;org version&lt;/a&gt; bothered me because I went down the wrong track and ended up using &lt;code&gt;org-agenda-files&lt;/code&gt; with a given filetag to populate the list of potential targets and get out of some stuff I couldn&amp;rsquo;t get right. The &lt;a href=&#34;https://github.com/pdxmph/md-capture&#34;&gt;Markdown version&lt;/a&gt; was better, but didn&amp;rsquo;t have a non-fiddle-with-your-config-file way to get new files added.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In the process of diddling around with a bunch of different kinds of logs and formats, I realized I had two things that did the same thing, more or less, for org files and Markdown files. The <a href="https://github.com/pdxmph/org-topic-log">org version</a> bothered me because I went down the wrong track and ended up using <code>org-agenda-files</code> with a given filetag to populate the list of potential targets and get out of some stuff I couldn&rsquo;t get right. The <a href="https://github.com/pdxmph/md-capture">Markdown version</a> was better, but didn&rsquo;t have a non-fiddle-with-your-config-file way to get new files added.</p>
<p>So <a href="https://github.com/pdxmph/log2file.el">log2file</a> takes both of them and adds a few functions + Custom settings to add and remove files from your list of targets: No fiddling with your org agendas, no editing your config file if you decide to add a file as a target, and it speaks both Markdown and org, picking a log heading format based on the file extension, and enforcing the presence of either a first-line l1 heading or org <code>#+TITLE:</code> line based on the filename if it doesn&rsquo;t find one.</p>
<p>I don&rsquo;t think I&rsquo;ll do much more with it. The point of embarkation on all this, as I sort of <a href="https://lmno.lol/puddingtime/lmno-blog-captureel-and-the-whole-lightweight-text-thing">failed to come back around and make clear yesterday</a>, was that I have a simple set of requirements:</p>
<ul>
<li>Keep it in plain text</li>
<li>Favor a logging/journaling approach</li>
<li>Avoid anything that feels fragile or complex</li>
</ul>
<p>On that last point, almost everything these days feels fragile, where &ldquo;fragile&rdquo; is a function of:</p>
<ul>
<li>Depending on rigid formatting conventions (filename, metadata, inline syntax of any complexity)</li>
<li>Depending on a specific app to interact with the data</li>
</ul>
<p>… and from those requirements I didn&rsquo;t feel like much of anything these days works for me. My grandmother once got very, very angry with my father for splurging on a $10 Christmas tree when we went home for the holidays, because she was a dirt-farming Depression survivor and frugality had been etched into her bones. I&rsquo;ve just had seemingly simple shit break on me in a way that is stupidly and frustratingly disruptive when you suddenly realize the underlying complexity of the tools supporting the workflow is going to make it hard to just pick up with a text editor and no supporting automation.</p>
<p>So where I <em>started</em> with this was just a collection of <code>yasnippet</code> and <a href="https://espanso.org/">Espanso</a> snippets that aped the Journelly log format:</p>
<ul>
<li>Open a log file</li>
<li>Trigger the snippet</li>
<li>Enter the text</li>
<li>Save/exit</li>
</ul>
<p>But I was really inspired by <code>org-capture</code>, which wrings out a ton of the friction in routing text to a sensible endpoint. The problems with org-capture were:</p>
<ol>
<li>org-mode dependent</li>
<li>Complex, in that it was beyond my skill to populate a custom list of targets, and I hated the idea of manually keeping a target list in a capture template.</li>
<li>org always beguiles me into more and more complexity and &ldquo;just one more thing&rdquo;</li>
</ol>
<p>So this is a way to get some speed back into the interaction … no finding/opening/snippeting … but in a way that doesn&rsquo;t leave me dependent on a bunch of fragile stuff.</p>
]]></content:encoded>
    </item>
    <item>
      <title>lmno-blog-capture.el and the whole lightweight text thing</title>
      <link>https://mike.puddingtime.org/posts/2025-04-22-lmno-blog-captureel-and-the-whole-lightweight-text-thing/</link>
      <pubDate>Tue, 22 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-22-lmno-blog-captureel-and-the-whole-lightweight-text-thing/</guid>
      <description>&lt;p&gt;Yesterday I made a little thing to quickly capture &lt;a href=&#34;https://lmno.lol&#34;&gt;lmno.lol&lt;/a&gt; blog posts from a little window in Emacs. I&amp;rsquo;m kind of having fun package-izing these things, so today I bundled it up into &lt;a href=&#34;https://github.com/pdxmph/lmno-blog-capture&#34;&gt;pdxmph/lmno-blog-capture&lt;/a&gt;, with a customization group (with one option).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been on a small tear with these things lately, and whenever I go on a small tear I think &amp;ldquo;this is happening for a reason,&amp;rdquo; and the reason is usually &amp;ldquo;because there&amp;rsquo;s something you don&amp;rsquo;t want to go do,&amp;rdquo; and that is true here. But I &lt;em&gt;like&lt;/em&gt; times like this, because they exercise part of me that doesn&amp;rsquo;t get exercised much: I spend a lot of my day thinking &amp;ldquo;will this scale,&amp;rdquo; and &amp;ldquo;but do we really need to do this,&amp;rdquo; and &amp;ldquo;what is security engineering going to do when they find out this happened,&amp;rdquo; and &amp;ldquo;did I make Compliance angry.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Yesterday I made a little thing to quickly capture <a href="https://lmno.lol">lmno.lol</a> blog posts from a little window in Emacs. I&rsquo;m kind of having fun package-izing these things, so today I bundled it up into <a href="https://github.com/pdxmph/lmno-blog-capture">pdxmph/lmno-blog-capture</a>, with a customization group (with one option).</p>
<p>I&rsquo;ve been on a small tear with these things lately, and whenever I go on a small tear I think &ldquo;this is happening for a reason,&rdquo; and the reason is usually &ldquo;because there&rsquo;s something you don&rsquo;t want to go do,&rdquo; and that is true here. But I <em>like</em> times like this, because they exercise part of me that doesn&rsquo;t get exercised much: I spend a lot of my day thinking &ldquo;will this scale,&rdquo; and &ldquo;but do we really need to do this,&rdquo; and &ldquo;what is security engineering going to do when they find out this happened,&rdquo; and &ldquo;did I make Compliance angry.&rdquo;</p>
<p>And I&rsquo;m feeling sort of engaged with the problem of &ldquo;what&rsquo;s just enough structure for the few notes I keep without freaking out and tipping over into Some Whole Paradigm,&rdquo; because every time I tip over into Some Whole Paradigm I&rsquo;m, like, &ldquo;well now what?&rdquo; All my brain power went to Learning the Whole Paradigm and I don&rsquo;t have any left to do stuff I should be doing.</p>
<h2 id="citing-inspirations">Citing inspirations</h2>
<p>A few people and things have been inspiring for me on this week&rsquo;s jaunt into plaintext living:</p>
<ul>
<li>I really dug an old take from Jack Baty on <a href="https://archive.baty.net/2019/using-the-emacs-deft-package-for-topic-journals/">using Deft to manage little topical journals</a>. Just, &ldquo;make some files about topics, write logs in them.&rdquo;</li>
<li>I am really into lmno.lol maker Álvaro Ramírez&rsquo;s <a href="https://apps.apple.com/us/app/journelly/id6470714669">Journelly</a>. As an app it&rsquo;s great, and as a concept it&rsquo;s cool: Underneath the friendly iOS skin, it&rsquo;s just dropping entries into an org file that you can also work with from a desktop machine if you like.</li>
<li>lmno.lol itself is a variation on that theme: Just put a datestamped entry in a Markdown file that your entire blog lives in.</li>
</ul>
<p>These things are all very simple to do. Jack&rsquo;s approach just wants text files. They could even be <em>just text files</em> with no markup.</p>
<p>Journelly has to have <em>some</em> markup, and it is a whole app that relies on a ton of assumptions about how to move files around over a network, etc. but if your phone broke and all you had was, like, <em>nano</em>, you could keep on journaling.</p>
<p>lmno.lol? Your <em>whole blog</em> is in a single Markdown file. You have to know the date and the &ldquo;#&rdquo; key, and you&rsquo;re in business.</p>
<h2 id="how-it-all-went-to-hell">How it all went to hell</h2>
<p>Let&rsquo;s travel back in time to, like, 2004 or so:</p>
<p>Danny O&rsquo;Brien gives a talk describing &ldquo;life hacks,&rdquo; the spirit of which is probably best captured by <a href="https://craphound.com/lifehacks2.txt">Cory Doctorow&rsquo;s contemporaneous notes</a>. Everyone went bananas over the idea that you&rsquo;re really better off not complexifying the shit out of everything, then set about complexifying the shit out of <em>everything</em>.</p>
<p>I mean, we&rsquo;re dealing with a population that does the whole knowledge work thing, and a distinguishing characteristic of knowledge workers is that they spend a lot of time learning and living in systems. We have the whole idea of a <a href="https://www.dissentmagazine.org/online_articles/on-the-origins-of-the-professional-managerial-class-an-interview-with-barbara-ehrenreich/">professional managerial class</a>:</p>
<blockquote>
<p>&ldquo;… salaried mental workers who do not own the means of production and whose major function in the social division of labor may be described broadly as the reproduction of capitalist culture and capitalist class relations.&rdquo;</p>
</blockquote>
<p>It was once suggested to me that where &ldquo;professional&rdquo; once meant &ldquo;a job where someone could get sued for malpractice&rdquo; (doctors, lawyers, architects), it has come to mean &ldquo;someone who is reliably aligned with the values of the capitalists they work for and behaves in a manner that is comfortably predictable to capitalists.&rdquo;</p>
<p>Point is, tech industry people live within kind of complex systems: They have to manage complex models to do their actual productive work, and they have to navigate complex functional relationships to deliver things. I still get a little swimmy in the head when I think about one place I worked deciding to embrace Scaled Agile, and I get outright nauseated when I remember a dear friend excitedly talking about &ldquo;taking the whole business Agile. All of &rsquo;em! <em>Especially</em> the marketing team!&rdquo;</p>
<p>So they can&rsquo;t really be expected to keep things simple. Part of their value is in their ability to behave predictably when confronted with complexity, so they have to like it at least a <em>little</em>.</p>
<h2 id="so-im-stealing">So I&rsquo;m stealing</h2>
<p>I&rsquo;m not sure where I&rsquo;m going to end up, but I do know at this point:</p>
<ul>
<li>Plain text files are good.</li>
<li>I&rsquo;ve had success in the past with variations on <a href="https://nesslabs.com/interstitial-journaling">interstitial journaling</a>, which is what Jack&rsquo;s idea is most like.</li>
<li>I really took to the &ldquo;stick something in a file and keep moving&rdquo; opportunity Journelly afforded me.</li>
<li>I don&rsquo;t want to live in a single text file for everything, but I do want to live in a few text files for most of the things.</li>
<li>I don&rsquo;t mind investing some time in a little automation to make it faster to do this kind of stuff with text.</li>
</ul>
<h2 id="org-or-markdown">org or Markdown</h2>
<p>What I&rsquo;m really not sure about at this point is the question of doing it in org-mode files or Markdown.</p>
<p>org pros:</p>
<ul>
<li>It&rsquo;s a little easier to add a light layer of metadata to content.</li>
<li>That metadata layer is optional.</li>
<li>At its simplest, org is as simple as Markdown</li>
</ul>
<p>org cons:</p>
<ul>
<li>There&rsquo;s so much there in the way of opportunities to complexify the living shit out of it</li>
<li>Despite a few things like <a href="https://xenodium.com/plain-org-for-ios">Plain Org</a>, there are not a lot of ways to work with it without Emacs.</li>
</ul>
<p>Markdown pros:</p>
<ul>
<li>It&rsquo;s everywhere.</li>
<li>Weirdly, even though there are ways to make it more complex, they almost always suck because there are <em>so many variants</em> that nobody ventures much past the basic spec + a few niceties like checkbox lists when building tools for it, and those extensions are often <em>hideous</em> to look at. They really damage the readability. (org does this, too, but it has things like properties drawers to hide some of that)</li>
<li>Yes, the previous bullet is a &ldquo;plus,&rdquo; because Markdown is sort of antagonistic to much complexity and I think that&rsquo;s good: I&rsquo;m a knowledge-workin&rsquo; PMC dillhole, too.</li>
</ul>
<p>Markdown cons:</p>
<ul>
<li>Wedging metadata into it is sort of a challenge outside maybe adopting an inline hashtag convention or bolting YAML/TOML frontmatter on (which not all tools will deal with well.)</li>
<li>Eventually you&rsquo;ll end up thinking &ldquo;fuck it, might as well do this in Obsidian,&rdquo; and then all hell breaks loose: Welcome to &ldquo;org mode without Emacs, just in an Electron app, but with Markdown.&rdquo;</li>
</ul>
<p>Not sure what I&rsquo;m gonna do, but in a little frenzy of ChatGPT co-piloting, I did come up with a few ways to make life in a few plaintext silos easier:</p>
<ul>
<li><a href="https://github.com/pdxmph/org-topic-log">org-topic-log</a> just pops open an org-capture-like window that lets you select from any agenda files that have <code>#+FILETAGS: topic</code> in the frontmatter. You can pick any word you like for the filetag. Super simple to invoke it, drop in a log entry, and keep going.</li>
<li><a href="https://github.com/pdxmph/md-capture">md-capture</a> does the same thing, except Markdown doesn&rsquo;t have all the infrastructure org-mode does, so you can either tell it &ldquo;just use anything in this directory&rdquo; (messier and messier over time) or specify a file list (a hassle to manage if you make new topics a lot).</li>
</ul>
<p>I&rsquo;m just wavering on whether to do it with Markdown knowing, I will regret any attempts to make those notes more complex, or org because it might be nice to have a few of its conventions (knowing its portability will nosedive the more of them I embrace).</p>
<p>Also: This post written with <a href="https://github.com/pdxmph/lmno-blog-capture">lmno-blog-capture</a>. If you have an lmno.lol blog you can just put it in your load path. If you want to keep up with it, you can add it to Doom&rsquo;s <code>packages.el</code>:</p>
<pre><code>package! lmno-blog-capture :recipe (:host github :repo &quot;pdxmph/lmno-blog-capture&quot;))
</code></pre>
]]></content:encoded>
    </item>
    <item>
      <title>By-host configs in Doom. Custom starting window sizes. </title>
      <link>https://mike.puddingtime.org/posts/2025-04-21-by-host-configs-in-doom-custom-starting-window-sizes-/</link>
      <pubDate>Mon, 21 Apr 2025 11:10:53 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-21-by-host-configs-in-doom-custom-starting-window-sizes-/</guid>
      <description>Removed a little conditional logic from config.org</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve got a few Macs and a few Linux machines and they all respond differently to some basic font size stuff and starting window dimensions. For the laptops, I don&rsquo;t mind if they start Emacs maximized. For the desktops, their screen geometries differ enough that I end up fiddling around. On the Macs I&rsquo;ve got <a href="https://rectangleapp.com/pro">Rectangle Pro</a> to make a preset and keyboard shortcut, but even that&rsquo;s a little annoying.</p>
<p>I used to have a bunch of conditional logic in <code>config.org</code> to manage all this, but it was sort of a pain to pick through when adding a machine, so I wanted to isolate the individual machine configurations a little. I&rsquo;m guessing it could be useful for other stuff in the future, but for now it handles some appearance stuff.</p>
<p>For by-host configs, I added this to my <code>config.org</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="k">let</span> <span class="p">((</span><span class="nv">hostname</span> <span class="p">(</span><span class="nv">system-name</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let</span> <span class="p">((</span><span class="nv">hostname-file</span> <span class="p">(</span><span class="nv">expand-file-name</span> <span class="p">(</span><span class="nv">concat</span> <span class="nv">hostname</span> <span class="s">&#34;.el&#34;</span><span class="p">)</span> <span class="nv">doom-private-dir</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nv">file-exists-p</span> <span class="nv">hostname-file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">load-file</span> <span class="nv">hostname-file</span><span class="p">))))</span></span></span></code></pre></div>
<p>That just looks for a file in my Doom directory with the <code>hostname.el</code> naming convention.</p>
<p>A sample <code>hostname.el</code> file looks like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="k">setq</span> <span class="nv">doom-font</span> <span class="p">(</span><span class="nv">font-spec</span> <span class="ss">:family</span> <span class="s">&#34;Fira Code&#34;</span> <span class="ss">:size</span> <span class="mf">14.0</span> <span class="ss">:weight</span> <span class="ss">&#39;medium</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="k">setq</span> <span class="nv">mixed-pitch-set-height</span> <span class="mi">15</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">set-face-attribute</span> <span class="ss">&#39;default</span> <span class="no">nil</span> <span class="ss">:family</span> <span class="s">&#34;Fira Code&#34;</span> <span class="ss">:height</span> <span class="mi">140</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">set-face-attribute</span> <span class="ss">&#39;fixed-pitch</span> <span class="no">nil</span> <span class="ss">:family</span> <span class="s">&#34;Fira Code&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">set-face-attribute</span> <span class="ss">&#39;variable-pitch</span> <span class="no">nil</span> <span class="ss">:family</span> <span class="s">&#34;Helvetica Neue&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="k">setq</span> <span class="nv">initial-frame-alist</span>
</span></span><span class="line"><span class="cl">      <span class="o">&#39;</span><span class="p">((</span><span class="nv">width</span> <span class="o">.</span> <span class="mi">171</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">height</span> <span class="o">.</span> <span class="mi">66</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">left</span> <span class="o">.</span> <span class="mi">728</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">top</span> <span class="o">.</span> <span class="mi">166</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="k">setq</span> <span class="nv">default-frame-alist</span>
</span></span><span class="line"><span class="cl">      <span class="o">&#39;</span><span class="p">((</span><span class="nv">width</span> <span class="o">.</span> <span class="mi">171</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">height</span> <span class="o">.</span> <span class="mi">66</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">left</span> <span class="o">.</span> <span class="mi">728</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">top</span> <span class="o">.</span> <span class="mi">166</span><span class="p">)))</span></span></span></code></pre></div>
<p>The <code>initial-frame-alist</code> and <code>default-frame-alist</code> dimensions came from this function:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my/print-frame-setup-snippet</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Print a config snippet for setting the current frame size and position.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">w</span> <span class="p">(</span><span class="nv">frame-width</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">h</span> <span class="p">(</span><span class="nv">frame-height</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">pos</span> <span class="p">(</span><span class="nv">frame-position</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">l</span> <span class="p">(</span><span class="nf">car</span> <span class="nv">pos</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">top-pos</span> <span class="p">(</span><span class="nf">cdr</span> <span class="nv">pos</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">with-temp-buffer</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">insert</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;(setq initial-frame-alist\n      &#39;((width . %d)\n        (height . %d)\n        (left . %d)\n        (top . %d)))\n\n&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">w</span> <span class="nv">h</span> <span class="nv">l</span> <span class="nv">top-pos</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">insert</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;(setq default-frame-alist\n      &#39;((width . %d)\n        (height . %d)\n        (left . %d)\n        (top . %d)))&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">w</span> <span class="nv">h</span> <span class="nv">l</span> <span class="nv">top-pos</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">kill-new</span> <span class="p">(</span><span class="nv">buffer-string</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">message</span> <span class="s">&#34;!!! Frame setup snippet copied to clipboard! Paste it into your config.el.&#34;</span><span class="p">))))</span></span></span></code></pre></div>
<p>So, set the Emacs frame up the way you want, then run that function, and paste it into <code>hostname.el</code>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Hugo posting in Emacs</title>
      <link>https://mike.puddingtime.org/posts/2025-04-21-hugo-posting-in-emacs/</link>
      <pubDate>Mon, 21 Apr 2025 08:37:39 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-21-hugo-posting-in-emacs/</guid>
      <description>ox-hugo is nice and all</description>
      <content:encoded><![CDATA[<p>I dug a bunch of stuff out of archived configs to get the Hugo blog going again, including my old <a href="https://ox-hugo.scripter.co/">ox-hugo</a> setup.</p>
<p><code>ox-hugo</code> lets you keep a monolithic org file where each post is an org heading:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="nv">**</span> <span class="nv">SyncTrain</span> <span class="nv">for</span> <span class="nv">Syncthing</span> <span class="nv">on</span> <span class="nv">iOS</span> <span class="ss">:syncthing:ios:iphone:</span>
</span></span><span class="line"><span class="cl"><span class="ss">:PROPERTIES:</span>
</span></span><span class="line"><span class="cl"><span class="ss">:EXPORT_FILE_NAME:</span> <span class="nv">2025-04-20-synctrain-for-syncthing-on-ios</span>
</span></span><span class="line"><span class="cl"><span class="ss">:EXPORT_HUGO_DATE:</span> <span class="nv">&lt;2025-04-20&gt;</span>
</span></span><span class="line"><span class="cl"><span class="ss">:EXPORT_DATE:</span> <span class="nv">2025-04-20</span>
</span></span><span class="line"><span class="cl"><span class="ss">:EXPORT_HUGO_SECTION:</span> <span class="nv">blog</span>
</span></span><span class="line"><span class="cl"><span class="ss">:EXPORT_HUGO_CUSTOM_FRONT_MATTER+:</span> <span class="ss">:cover</span> <span class="o">&#39;</span><span class="p">((</span><span class="nv">image</span> <span class="o">.</span><span class="s">&#34;&#34;</span> <span class="p">)</span> <span class="p">(</span><span class="nv">caption</span> <span class="o">.</span> <span class="s">&#34;&#34;</span> <span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="ss">:EXPORT_HUGO_CUSTOM_FRONT_MATTER+:</span> <span class="ss">:images</span> <span class="o">&#39;</span><span class="p">(</span><span class="nv">/mph-logo.png</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="ss">:EXPORT_DESCRIPTION:</span>
</span></span><span class="line"><span class="cl"><span class="ss">:END:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">A</span> <span class="nv">few</span> <span class="nv">years</span> <span class="nv">ago</span> <span class="nv">I</span> <span class="nv">gave</span> <span class="nv">Mobius</span> <span class="nv">Sync</span> <span class="nv">a</span> <span class="nv">try</span> <span class="nv">as</span> <span class="nv">a</span> <span class="nv">Syncthing</span> <span class="nv">client</span> <span class="nv">on</span> <span class="nv">my</span> <span class="nv">iPhone</span> <span class="nb">and</span> <span class="nv">iPad.</span> <span class="nv">That</span> <span class="nv">went</span> <span class="nv">about</span> <span class="nv">as</span> <span class="nv">well</span> <span class="nv">as</span> <span class="nv">you</span><span class="ss">&#39;d</span> <span class="nv">expect</span> <span class="nv">for</span> <span class="nv">an</span> <span class="nv">iOS</span> <span class="nv">adaptation</span> <span class="nv">of</span> <span class="nv">something</span> <span class="nv">that</span> <span class="nv">wants</span> <span class="nv">to</span> <span class="nv">be</span> <span class="nv">an</span> <span class="nv">always-on</span> <span class="nv">filesystem-watching</span> <span class="nv">daemon.</span> <span class="nv">It</span> <span class="nv">wasn</span><span class="ss">&#39;t</span> <span class="nv">really</span> <span class="nv">worth</span> <span class="k">the</span> <span class="nv">stress</span> <span class="nv">of</span> <span class="nv">wondering</span> <span class="nv">what</span> <span class="nv">quantum</span> <span class="nv">state</span> <span class="nv">of</span> <span class="nv">sync</span> <span class="nv">everything</span> <span class="nv">is</span> <span class="nv">in,</span> <span class="nb">and</span> <span class="nv">I</span> <span class="nv">hated</span> <span class="nv">having</span> <span class="nv">to</span> <span class="nv">explicitly</span> <span class="nf">open</span> <span class="nv">it</span> <span class="nv">up</span> <span class="nv">to</span> <span class="nv">nudge</span> <span class="nv">it</span> <span class="nv">to</span> <span class="nv">sync.</span></span></span></code></pre></div>
<p>If a heading is marked as <code>TODO</code>, that translates to &ldquo;draft&rdquo; for Hugo. If you use org tags in the heading <code>:tag1:tag2:</code> those become post tags.</p>
<p>If you set up <code>org-capture</code> and a few hooks correctly, it takes a lot of friction away by exporting the Markdown files when you save the file.</p>
<p>Something has changed since I was last using it regularly, and some bugs crept into my setup. I was willing to live with a few of them, but last night I came across some goofy thing where Hugo&rsquo;s Markdown renderer (goldmark) and ox-hugo were interacting strangely, and the org-to-markdown conversion was indenting unordered lists enough that goldmark picked them up as indented code blocks. I did some poking around and saw that a lot of people have been vexed by that: goldmark uses the <a href="https://commonmark.org/">CommonMark</a> specification, which includes indented code blocks, and goldmark offers no toggle for it as a workaround.</p>
<p>How many seconds do we have of this precious life?</p>
<p>I do like working out of Emacs and not switching around to do stuff, so I found an old Ruby script I wrote to make generating a Hugo post with all the stuff particular to my setup and worked with a co-pilot to convert it to a lisp package.</p>
<p>When you invoke <code>hpost-new</code> it prompts for whether to follow the &ldquo;daily&rdquo; or regular post style, then asks for title, tags, and description, then plops the new file into the right place and opens it for editing.</p>
<p>This goes in <code>~/.config/doom/lisp</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="c1">;;; hpost.el --- Create new Hugo posts from Emacs  -*- lexical-binding: t; -*-</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">;; Adjust this to point at your Hugo or ox‑hugo content directory.</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">defcustom</span> <span class="nv">hpost-posts-dir</span> <span class="s">&#34;~/blog/content/posts/&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Directory where new Hugo posts are written.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:type</span> <span class="ss">&#39;directory</span> <span class="ss">:group</span> <span class="ss">&#39;hpost</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">hpost--slugify</span> <span class="p">(</span><span class="nv">title</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Convert TITLE to a URL‑friendly slug.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">s</span> <span class="p">(</span><span class="nv">downcase</span> <span class="nv">title</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">s</span> <span class="p">(</span><span class="nv">replace-regexp-in-string</span> <span class="s">&#34;[^a-z0-9]+&#34;</span> <span class="s">&#34;-&#34;</span> <span class="nv">s</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">s</span> <span class="p">(</span><span class="nv">replace-regexp-in-string</span> <span class="s">&#34;^-\|-$&#34;</span> <span class="s">&#34;&#34;</span> <span class="nv">s</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">truncate-string-to-width</span> <span class="nv">s</span> <span class="mi">60</span> <span class="no">nil</span> <span class="no">nil</span> <span class="s">&#34;&#34;</span><span class="p">)))</span> <span class="c1">; hard cap at 60 chars</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">hpost--today</span> <span class="p">()</span> <span class="p">(</span><span class="nv">format-time-string</span> <span class="s">&#34;%Y-%m-%d&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">hpost--now</span>   <span class="p">()</span> <span class="p">(</span><span class="nv">format-time-string</span> <span class="s">&#34;%Y-%m-%dT%H:%M:%S%z&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">;;;###autoload</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">hpost-new</span> <span class="p">(</span><span class="nv">title</span> <span class="nv">tags</span> <span class="nv">summary</span> <span class="k">&amp;optional</span> <span class="nv">daily</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Create a new Hugo post.
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">Interactively prompts for TITLE, TAGS (comma‑delimited), and SUMMARY.
</span></span></span><span class="line"><span class="cl"><span class="s">With prefix arg, treat it as a daily note (pre‑sets title and tags).&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span>
</span></span><span class="line"><span class="cl">   <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">daily</span> <span class="p">(</span><span class="nf">y-or-n-p</span> <span class="s">&#34;Daily note? &#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nv">title</span> <span class="p">(</span><span class="k">if</span> <span class="nv">daily</span>
</span></span><span class="line"><span class="cl">                     <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;Daily notes for %s&#34;</span> <span class="p">(</span><span class="nv">hpost--today</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">                   <span class="p">(</span><span class="nv">read-string</span> <span class="s">&#34;Title: &#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nv">tags</span>  <span class="p">(</span><span class="k">if</span> <span class="nv">daily</span> <span class="s">&#34;journal&#34;</span>
</span></span><span class="line"><span class="cl">                   <span class="p">(</span><span class="nv">read-string</span> <span class="s">&#34;Tags (comma): &#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nv">summary</span> <span class="p">(</span><span class="nv">read-string</span> <span class="s">&#34;Summary: &#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">     <span class="p">(</span><span class="nc">list</span> <span class="nv">title</span> <span class="nv">tags</span> <span class="nv">summary</span> <span class="nv">daily</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">slug</span>    <span class="p">(</span><span class="k">if</span> <span class="nv">daily</span> <span class="s">&#34;daily-notes&#34;</span> <span class="p">(</span><span class="nv">hpost--slugify</span> <span class="nv">title</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">fname</span>   <span class="p">(</span><span class="nv">concat</span> <span class="p">(</span><span class="nv">hpost--today</span><span class="p">)</span> <span class="s">&#34;-&#34;</span> <span class="nv">slug</span> <span class="s">&#34;.md&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">path</span>    <span class="p">(</span><span class="nv">expand-file-name</span> <span class="nv">fname</span> <span class="nv">hpost-posts-dir</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nv">file-exists-p</span> <span class="nv">path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">user-error</span> <span class="s">&#34;File %s already exists&#34;</span> <span class="nv">fname</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">with-temp-buffer</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">insert</span> <span class="p">(</span><span class="nf">format</span>
</span></span><span class="line"><span class="cl"><span class="s">&#34;---
</span></span></span><span class="line"><span class="cl"><span class="s">title: \&#34;%s\&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">date: %s
</span></span></span><span class="line"><span class="cl"><span class="s">draft: true
</span></span></span><span class="line"><span class="cl"><span class="s">tags:%s
</span></span></span><span class="line"><span class="cl"><span class="s">summary: \&#34;%s\&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">---
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">&#34;</span> <span class="nv">title</span> <span class="p">(</span><span class="nv">hpost--now</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">mapconcat</span> <span class="p">(</span><span class="nb">lambda</span> <span class="p">(</span><span class="no">t</span><span class="p">)</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;\n- %s&#34;</span> <span class="p">(</span><span class="nf">string-trim</span> <span class="no">t</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">                   <span class="p">(</span><span class="nv">split-string</span> <span class="nv">tags</span> <span class="s">&#34;,&#34;</span><span class="p">)</span> <span class="s">&#34;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nv">summary</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">write-region</span> <span class="p">(</span><span class="nv">point-min</span><span class="p">)</span> <span class="p">(</span><span class="nv">point-max</span><span class="p">)</span> <span class="nv">path</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">find-file</span> <span class="nv">path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">message</span> <span class="s">&#34;New post created: %s&#34;</span> <span class="nv">path</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nf">provide</span> <span class="ss">&#39;hpost</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1">;;; hpost.el ends here</span></span></span></code></pre></div>
<p>&hellip; and the config:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="c1">;; --- Hugo post helper ---------------------------------------</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">use-package!</span> <span class="nv">hpost</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:load-path</span> <span class="s">&#34;lisp/&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:defer</span> <span class="no">t</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:custom</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">hpost-posts-dir</span> <span class="s">&#34;~/blog/content/posts/&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:config</span>
</span></span><span class="line"><span class="cl">  <span class="c1">;; Optional keybinding:  &lt;leader&gt; n h</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">map!</span> <span class="ss">:leader</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="ss">:prefix</span> <span class="p">(</span><span class="s">&#34;n&#34;</span> <span class="o">.</span> <span class="s">&#34;notes&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="ss">:desc</span> <span class="s">&#34;New Hugo post&#34;</span> <span class="s">&#34;h&#34;</span> <span class="nf">#&#39;</span><span class="nv">hpost-new</span><span class="p">)))</span></span></span></code></pre></div>
<p>It goes well with a few helpers I made to fire up or shut down the Hugo preview server within Emacs:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-start-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Run Hugo server with live reloading.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">root</span> <span class="p">(</span><span class="nv">projectile-project-root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">default-directory</span> <span class="nv">root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">compile</span> <span class="s">&#34;hugo server -D --navigateToChanged&#34;</span> <span class="no">t</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-stop-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Stop Hugo server.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">kill-compilation</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="ss">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="ss">:prefix</span> <span class="p">(</span><span class="s">&#34;H&#34;</span> <span class="o">.</span> <span class="s">&#34;Hugo&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="ss">:desc</span> <span class="s">&#34;Start Hugo Server&#34;</span> <span class="s">&#34;S&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-start-hugo-server</span>
</span></span><span class="line"><span class="cl">       <span class="ss">:desc</span> <span class="s">&#34;Stop Hugo Server&#34;</span> <span class="s">&#34;s&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-stop-hugo-server</span><span class="p">))</span></span></span></code></pre></div>
<p>So, <code>SPC H S</code> to start the test server, and <code>SPC n h</code> to start a new post. When I save the buffer, the preview server jumps to the newly written page in the browser.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Okay. We made a snippet. ✂️</title>
      <link>https://mike.puddingtime.org/posts/2025-04-21-okay-we-made-a-snippet/</link>
      <pubDate>Mon, 21 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-21-okay-we-made-a-snippet/</guid>
      <description>&lt;p&gt;This may be my consolation prize for &lt;a href=&#34;https://ox-hugo.scripter.co/&#34;&gt;ox-hugo&lt;/a&gt; going south on me.&lt;/p&gt;
&lt;h1 id=&#34;blog-text-art-banner&#34;&gt;blog-text-art-banner&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt; _____  _____  _  _____  ______  _   _ ______ ______  _____  _   _  _____  _____  _____ ___  ___ _____  _
|_   _||_   _|( )/  ___| | ___ \| | | ||  _  \|  _  \|_   _|| \ | ||  __ \|_   _||_   _||  \/  ||  ___|| |
  | |    | |  |/ \ `--.  | |_/ /| | | || | | || | | |  | |  |  \| || |  \/  | |    | |  | .  . || |__  | |
  | |    | |      `--. \ |  __/ | | | || | | || | | |  | |  | . ` || | __   | |    | |  | |\/| ||  __| | |
 _| |_   | |     /\__/ / | |    | |_| || |/ / | |/ /  _| |_ | |\  || |_\ \  | |   _| |_ | |  | || |___ |_|
 \___/   \_/     \____/  \_|     \___/ |___/  |___/   \___/ \_| \_/ \____/  \_/   \___/ \_|  |_/\____/ (_) 🔥🤘🏻🔥
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;blog-about&#34;&gt;blog-about&lt;/h1&gt;
&lt;p&gt;Hello 👋 I&amp;rsquo;m Mike. Regularly blogging at &lt;a href=&#34;https://mike.puddingtime.org&#34;&gt;mike.puddingtime.org&lt;/a&gt;, tooting &lt;a href=&#34;https://social.lol/@mph&#34;&gt;@mph@social.lol&lt;/a&gt; and wandering around in Portland, OR.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This may be my consolation prize for <a href="https://ox-hugo.scripter.co/">ox-hugo</a> going south on me.</p>
<h1 id="blog-text-art-banner">blog-text-art-banner</h1>
<pre><code> _____  _____  _  _____  ______  _   _ ______ ______  _____  _   _  _____  _____  _____ ___  ___ _____  _
|_   _||_   _|( )/  ___| | ___ \| | | ||  _  \|  _  \|_   _|| \ | ||  __ \|_   _||_   _||  \/  ||  ___|| |
  | |    | |  |/ \ `--.  | |_/ /| | | || | | || | | |  | |  |  \| || |  \/  | |    | |  | .  . || |__  | |
  | |    | |      `--. \ |  __/ | | | || | | || | | |  | |  | . ` || | __   | |    | |  | |\/| ||  __| | |
 _| |_   | |     /\__/ / | |    | |_| || |/ / | |/ /  _| |_ | |\  || |_\ \  | |   _| |_ | |  | || |___ |_|
 \___/   \_/     \____/  \_|     \___/ |___/  |___/   \___/ \_| \_/ \____/  \_/   \___/ \_|  |_/\____/ (_) 🔥🤘🏻🔥
</code></pre>
<h1 id="blog-about">blog-about</h1>
<p>Hello 👋 I&rsquo;m Mike. Regularly blogging at <a href="https://mike.puddingtime.org">mike.puddingtime.org</a>, tooting <a href="https://social.lol/@mph">@mph@social.lol</a> and wandering around in Portland, OR.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Saw X in Portland</title>
      <link>https://mike.puddingtime.org/posts/2025-04-21-saw-x-in-portland/</link>
      <pubDate>Mon, 21 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-21-saw-x-in-portland/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://photos.smugmug.com/photos/i-dqVSw2P/0/M3J4knxn8vpw37R7HNNwW5s4X42TtKvkVXMHvp4xT/XL/i-dqVSw2P-XL.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;This was an opportunity to try out my Smugmug/upload/image snippet app &lt;a href=&#34;https://github.com/pdxmph/imgup&#34;&gt;imgup&lt;/a&gt; (which it turns out is an amazingly common name for things that make images go up to somewhere else.)&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://photos.smugmug.com/photos/i-dqVSw2P/0/M3J4knxn8vpw37R7HNNwW5s4X42TtKvkVXMHvp4xT/XL/i-dqVSw2P-XL.jpg" alt="img"></p>
<p>This was an opportunity to try out my Smugmug/upload/image snippet app <a href="https://github.com/pdxmph/imgup">imgup</a> (which it turns out is an amazingly common name for things that make images go up to somewhere else.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Solving the Denote/Gollum links quandary</title>
      <link>https://mike.puddingtime.org/posts/2025-04-20-solving-the-denote-gollum-links-quandary/</link>
      <pubDate>Sun, 20 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-20-solving-the-denote-gollum-links-quandary/</guid>
      <description>&lt;p&gt;My whole &amp;ldquo;thing I wish Denote would just do&amp;rdquo; issue has been around its custom linking format: If you use Denote&amp;rsquo;s kind of awesome org-mode dblocks, you get &lt;code&gt;denote:&lt;/code&gt; formatted links. Prot is very careful to say custom links are perfectly legal and supported by Emacs, but that leaves out the reality that there&amp;rsquo;s an ecosystem of non-Emacs org-mode tools (e.g. &lt;a href=&#34;https://plainorg.com/&#34;&gt;Plain Org&lt;/a&gt;) that don&amp;rsquo;t understand custom link formats.&lt;/p&gt;
&lt;p&gt;So I had this very cool thing going on with &lt;a href=&#34;https://github.com/gollum/gollum&#34;&gt;Gollum&lt;/a&gt; running on my Synology. Gollum is mostly the same engine GitHub uses for its own wikis, and it can understand a variety of plaintext formats (including Markdown and org). With Gollum you&amp;rsquo;ve got a web front-end with search, version control, and inline editing if you&amp;rsquo;re away from an Emacs-capable machine or just want to look a note up on a phone.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>My whole &ldquo;thing I wish Denote would just do&rdquo; issue has been around its custom linking format: If you use Denote&rsquo;s kind of awesome org-mode dblocks, you get <code>denote:</code> formatted links. Prot is very careful to say custom links are perfectly legal and supported by Emacs, but that leaves out the reality that there&rsquo;s an ecosystem of non-Emacs org-mode tools (e.g. <a href="https://plainorg.com/">Plain Org</a>) that don&rsquo;t understand custom link formats.</p>
<p>So I had this very cool thing going on with <a href="https://github.com/gollum/gollum">Gollum</a> running on my Synology. Gollum is mostly the same engine GitHub uses for its own wikis, and it can understand a variety of plaintext formats (including Markdown and org). With Gollum you&rsquo;ve got a web front-end with search, version control, and inline editing if you&rsquo;re away from an Emacs-capable machine or just want to look a note up on a phone.</p>
<p>And Denote has its very cool org-mode dblocks: You can use a regexp to pull files matching a certain pattern into a dynamically updating block to create things the Zettelkasten folks might call a MOC, Prot refers to as &ldquo;metanotes,&rdquo; etc. I have made a set of index files on high-level areas I tagged with &ldquo;topic,&rdquo; so a Denote dblock with this syntax:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+BEGIN:</span> <span class="nv">denote-links</span> <span class="nb">:regexp</span> <span class="s">&#34;_topic&#34;</span> <span class="nb">:not-regexp</span> <span class="no">nil</span> <span class="nb">:excluded-dirs-regexp</span> <span class="no">nil</span> <span class="nb">:sort-by-component</span> <span class="no">nil</span> <span class="nb">:reverse-sort</span> <span class="no">nil</span> <span class="nb">:id-only</span> <span class="no">nil</span> <span class="nb">:include-date</span> <span class="nv">nil</span></span></span></code></pre></div>
<p>&hellip; will dynamically create an index of links to all my &ldquo;topic&rdquo; notes, and within each of them I can make Denote dblocks that pull in notes with their tag.</p>
<p>In the context of Gollum, or even just an entry point into my notes collection, that means my Home page can provide a dynamic index of topic notes as I create them. <em>Except</em>, of course, the whole problem that a Denote dblock uses its custom <code>denote:</code> link scheme, and Gollum can&rsquo;t understand that.</p>
<p>You can manually use Denote&rsquo;s <code>denote-org-convert-links-to-file-type</code> command to convert those links to standard <code>file:</code> links, but I&rsquo;m forgetful and hate the thought of having to remember to do it. So I fixed it with a <code>.dir-locals.el</code> file that does it for me with a pre-save hook:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">((</span><span class="nv">org-mode</span> <span class="o">.</span> <span class="p">((</span><span class="nf">eval</span> <span class="o">.</span> <span class="p">(</span><span class="nv">add-hook</span> <span class="ss">&#39;before-save-hook</span>
</span></span><span class="line"><span class="cl">                                <span class="nf">#&#39;</span><span class="nv">denote-org-convert-links-to-file-type</span>
</span></span><span class="line"><span class="cl">                                <span class="no">nil</span> <span class="no">t</span><span class="p">)))))</span></span></span></code></pre></div>
<p>So I can update my topic pages, save them, the hook runs for me, and I can push into the Gollum repo. I get to keep all of Denote&rsquo;s convenience features around link-making, backlink lists, etc, and Gollum knows what to do with it all.</p>
]]></content:encoded>
    </item>
    <item>
      <title>SyncTrain for Syncthing on iOS</title>
      <link>https://mike.puddingtime.org/posts/2025-04-20-synctrain-for-syncthing-on-ios/</link>
      <pubDate>Sun, 20 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-20-synctrain-for-syncthing-on-ios/</guid>
      <description>&lt;p&gt;A few years ago I gave Mobius Sync a try as a Syncthing client on my iPhone and iPad. That went about as well as you&amp;rsquo;d expect for an iOS adaptation of something that wants to be an always-on filesystem-watching daemon. It wasn&amp;rsquo;t really worth the stress of wondering what quantum state of sync everything is in, and I hated having to explicitly open it up to nudge it to sync.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A few years ago I gave Mobius Sync a try as a Syncthing client on my iPhone and iPad. That went about as well as you&rsquo;d expect for an iOS adaptation of something that wants to be an always-on filesystem-watching daemon. It wasn&rsquo;t really worth the stress of wondering what quantum state of sync everything is in, and I hated having to explicitly open it up to nudge it to sync.</p>
<p>It&rsquo;s even more annoying now that I&rsquo;ve got an Android-based DAP, and the Syncthing client I&rsquo;ve got running on that to keep my music files in sync comes with options like &ldquo;don&rsquo;t do this over cellular connections,&rdquo; &ldquo;don&rsquo;t do this when you&rsquo;re not connected to power,&rdquo; and a few other things that let you just sort of manage for yourself and accept the potential tradeoffs.</p>
<p>Today I came across <a href="https://t-shaped.nl/posts/synctrain-a-rethought-ios-client-for-syncthing">SyncTrain</a>, which is going to have a lot of the same problems <em>anything</em> that <em>should</em> be running in the background all the time(ish) on iOS is going to have, but includes a nice workaround: You can make an Apple Shortcut to give it a nudge to sync for 10 seconds if it fell asleep on the job. That&rsquo;s enough to check in with other nodes and pull in changed stuff. Since everything is on Tailscale, it ought to work wherever I have connectivity.</p>
<p>I&rsquo;m going to try it out to manage my org-mode todo lists and inbox via <a href="https://xenodium.com/plain-org-for-ios">Plain Org</a>, which can read files off the device storage.</p>
<p>I&rsquo;ve tried a few other things:</p>
<p>SMB shares on my NAS via Files.app. That has worked somewhat well, but there are occasional permissions freakouts.</p>
<p>sftp shares via Blink Term via Files. Also permissions freakouts.</p>
<p>iCloud, which is sort of mysterious (and not available to my Linux machines)</p>
<p>Besides letting you nudge it, the UI for Synctrain is pretty nice. It&rsquo;s clean and native-looking.  If you thought Mobius was all there was, SyncTrain is worth a look.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2025-04-19</title>
      <link>https://mike.puddingtime.org/posts/2025-04-19-daily-notes/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-19-daily-notes/</guid>
      <description>&lt;p&gt;I don&amp;rsquo;t know why, but it occurred to me to dust off my old org-based blogging setup. So I am. Sorry if you&amp;rsquo;re still subscribed to this feed if all the testing junk flows through.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I don&rsquo;t know why, but it occurred to me to dust off my old org-based blogging setup. So I am. Sorry if you&rsquo;re still subscribed to this feed if all the testing junk flows through.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Hugo Bear, ox-hugo, etc.</title>
      <link>https://mike.puddingtime.org/posts/2025-04-19-hugo-bear-ox-hugo-etc-dot/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-19-hugo-bear-ox-hugo-etc-dot/</guid>
      <description>I&amp;rsquo;ve been feeling envious of the bear people.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been feeling a little envious of the <a href="https://bearblog.dev">bear blog people</a>, and I sort of missed my Hugo blog, <em>and</em> I missed the very nice blogging pipeline I had all set up between GitHub and Cloudflare, so I spent some time reassembling it all and tweaking a few things here and there. I know I&rsquo;ve left a few bits of old functionality out, but I think that&rsquo;s okay: All part of the campaign to just do whatever seems okay to do, or to decide I don&rsquo;t want to do it anymore and quit doing it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2025-04-18</title>
      <link>https://mike.puddingtime.org/posts/2025-04-18-daily-notes/</link>
      <pubDate>Fri, 18 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-18-daily-notes/</guid>
      <description>&lt;p&gt;Just dusting off this publishing pipeline.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Just dusting off this publishing pipeline.</p>
]]></content:encoded>
    </item>
    <item>
      <title>posting elsewhere</title>
      <link>https://mike.puddingtime.org/posts/2024-11-22-posting-elsewhere/</link>
      <pubDate>Fri, 22 Nov 2024 11:05:21 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-11-22-posting-elsewhere/</guid>
      <description>I&amp;rsquo;m living the &amp;lsquo;just start typing&amp;rsquo; life at Scribbles</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been posting a lot more at Scribbles lately. You can find that blog at <a href="https://mph.puddingtime.org">mph.puddingtime.org</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Know when to sleep</title>
      <link>https://mike.puddingtime.org/posts/2024-03-05-know-when-to-sleep/</link>
      <pubDate>Tue, 05 Mar 2024 22:59:28 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-03-05-know-when-to-sleep/</guid>
      <description>During times of change, stay in your cot.</description>
      <content:encoded><![CDATA[<p>A friend of mine is dealing with a difficult change at work.</p>
<p>Senior leadership has taken a position that it&rsquo;s not time to communicate, but big changes appear to be coming. Nobody knows what&rsquo;s going on.</p>
<p>&ldquo;How are you dealing with it?&rdquo; I asked.</p>
<p>&ldquo;Well, everybody&rsquo;s worried. We&rsquo;re planning for a bunch of scenarios so we know what to do and can get moving when we know what to do.&rdquo;</p>
<p>&ldquo;How&rsquo;s the team handling it?&rdquo;</p>
<p>&ldquo;Not well. They&rsquo;re worried and I can&rsquo;t tell them what&rsquo;s going to happen, so they keep spinning out on worst-case scenarios.&rdquo;</p>
<p>&ldquo;So instead of doing their jobs they&rsquo;re planning for how to deal with their jobs changing, even though they don&rsquo;t know how they&rsquo;re going to change, and they&rsquo;re making themselves sick anticipating the worst?&rdquo;</p>
<p>&ldquo;Well what else are they supposed to do?&rdquo;</p>
<p>&ldquo;Their current jobs.&rdquo;</p>
<p>&ldquo;What am I supposed to do?&rdquo;</p>
<p>So, when I was still a private in Korea I was the First Sergeant&rsquo;s driver. One day during a field problem we decided to pay an unannounced visit to one of our hilltop sites. We took the morning, drove up the mountain, and arrived just after lunch.</p>
<p>It was a pretty standard FM retransmission site: High on the hill, set up in an old concrete bunker. Two OE-254 mast antennas, someone sitting on radio watch, a few people playing cards over in the corner. The rest of the squad were in their cots when we got there. One of the card players got up and shrugged on his BDU jacket and told everyone Top was here. The cook offered us plates of leftovers. The site chief came out wiping the sleep from his eyes and gave Top a briefing.</p>
<p>We kept the visit brief and headed back down the hill.</p>
<p>&ldquo;What did you think, PFC Hall?&rdquo;</p>
<p>&ldquo;Pretty bad, First Sergeant.&rdquo;</p>
<p>&ldquo;Bad?&rdquo;</p>
<p>&ldquo;I guess they had a radio watch &hellip; but half of them were napping! The two who weren&rsquo;t were playing cards! Pretty bad site discipline.&rdquo;</p>
<p>&ldquo;What did you think they were supposed to be doing?&rdquo;</p>
<p>&ldquo;It&rsquo;s a field problem! Be ready!&rdquo;</p>
<p>&ldquo;Ready for what?&rdquo;</p>
<p>&ldquo;I don&rsquo;t know &hellip; range control to call in an incoming attack.&rdquo;</p>
<p>&ldquo;That&rsquo;s what radio watch is listening for.&rdquo;</p>
<p>&ldquo;Well they should still be ready.&rdquo;</p>
<p>&ldquo;They were. Good soldiers know when to sleep.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Intersitial logging</title>
      <link>https://mike.puddingtime.org/posts/2024-03-05-intersitial-logging/</link>
      <pubDate>Tue, 05 Mar 2024 21:39:24 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-03-05-intersitial-logging/</guid>
      <description>In which we clear the air of the scent of burning plastic and self-delusion.</description>
      <content:encoded><![CDATA[<p>When I suddenly get super into tools it&rsquo;s a warning sign it sometimes takes me a while to heed. It&rsquo;s a blinking red light on the psychic dashboard telling me &ldquo;there is something else, maybe just out of the corner of your sight, that probably needs more attention.&rdquo;</p>
<p>A recent tasks-n-notes tool spinout felt like the liminal moment between deep sleep and awakening to some disturbance. That sense before you&rsquo;re fully conscious that there is <em>something</em> going on, but your consciousness hasn&rsquo;t engaged with it yet. It&rsquo;s just a weird externality in whatever dream you&rsquo;re having. It was gnawing at me by the time all was said and done.</p>
<p>There are times when I feel okay with all the screwing around and futzing, but things have been <em>hectic</em> recently and I was spending my discretionary time fucking around with tools. I&rsquo;m not gonna go into the why of it, but once the week had wrapped I had some clarity.</p>
<p><em>However</em>, one thing I was <em>doing</em>, or at least outcome that was <em>happening</em> was that as I was slowly waking up to the fact that I was deferring a serious conversation with myself, I was reminded that I used to do really well when I journaled. I&rsquo;ve taken several approaches to that over the years:</p>
<ul>
<li>Essay-length writeups about what&rsquo;s going on in my head</li>
<li>Quick little notes during the day about whatever passed through my field of view</li>
<li>Letters to myself at the beginning and end of the day</li>
<li>A &ldquo;what&rsquo;s going well/what&rsquo;s not going well/what&rsquo;s the big task for today?&rdquo; morning exercise</li>
</ul>
<p>All are fine. All work better or worse depending on what&rsquo;s going on with me.</p>
<p>But the idea I came across was what everyone seems to be calling &ldquo;interstitial logging,&rdquo; which is really just &hellip; logging?</p>
<blockquote>
<p>(8:00a) Looking at the calendar. It&rsquo;s going to be busy.<br>
(9:00a) ITENG standup. Someone needs to look at the Meraki/Envoy thing<br>
(9:33a) Caught a ping about the Zoom renewal. Need to find the MSA from last time.</p>
</blockquote>
<p>Some people like to toss todos in. Other people seem to just have a little diary.</p>
<p>I picked it up partially because I remembered that diaries help me focus and clarify what matters, and partially because I was so busy trying to figure out where to put all the stuff that I had to do that I was afraid I&rsquo;d miss something if I didn&rsquo;t write down everything in the simplest form possible.</p>
<h2 id="brief-digression-about-how-id-like-to-behave-for-a-bit">Brief digression about how I&rsquo;d like to behave for a bit</h2>
<p>I&rsquo;m consciously <em>not</em> going into how or where I decided to keep my log. Just the process of figuring that out was slightly agonized and wasteful. It&rsquo;s enough to say it was sort of a grand tour of everything I&rsquo;ve played around with in the last &hellip; 10 or 13 years? To write down little time-stamped notes? The meta got pretty vertiginous by the time I was done.</p>
<p>I did end up making myself pick <em>something</em> though, and it is sufficient to this narrative to say &ldquo;it is just fine for writing down little time-stamped notes.&rdquo; More than fine, because you <em>could</em> do that with any number of things, some backed by extensive cloud resources, some operating in a container on a Synology, some running on a way over-provisioned desktop machine, some, like &hellip; 3x5 cards or a giveaway vendor swag notebook or a legal pad. I picked something in between &ldquo;an expensive subscription SaaS&rdquo; and &ldquo;the blank side of a piece of cardboard I tore off a soda can case.&rdquo;</p>
<p>I want this to be the last time for at least a while that I comment on the tools I am using for keeping myself in order. For a few reasons:</p>
<ol>
<li>After watching enough videos from people who desperately want to be tools influencers I am saturated and tired of the entire frivolous scene.  Nobody should take tools advice from people whose job it is to write about tools. I say this as a former tech journalist who wrote an ungodly number of articles about tools whose efficacy I could attest to because look at how prolific I was writing about tools.</li>
<li>As with a few other creative endeavors I share, I could begin to feel the distorting effects of getting attention for the stuff I was writing about and resenting the effect it was having on me.  Like, it was super cool to get a few links from an Emacs eminence, and it blew up website traffic, and I was reminded that I don&rsquo;t do well with that kind of feedback.</li>
<li>There are other things that are more important to me than documenting how I tortured an AI into writing some lisp for me.</li>
</ol>
<p>I write all this down as a sort of accountability exercise with the ever-shifting procession of faces coming in and out of focus that I think of as &ldquo;whoever&rsquo;s going to read this.&rdquo; I am not sure who that will be because I ripped all the analytics out of my site. For at least a while, I don&rsquo;t want to know.</p>
<p>So back to what I was saying:</p>
<p>I started keeping my &ldquo;interstitial log.&rdquo;</p>
<p>At first there was a little ocean boiling: How do I account for tasks?  Do I use this tool or that tool? Which markup format?</p>
<p>I made myself knock all that off and landed on &ldquo;just make a date heading, then make timestamped entries and write something when it occurs.&rdquo;</p>
<p>Even then, for a bit the entries were about writing entries. Throat clearing. Like a dog circling its bed 20 times before it finally lies down.</p>
<p>But things began to improve. The entries were what they were meant to be. I got rid of an overoptimization I allowed to creep in (elaborate todo stuff) in favor of making a little annotation either for a thing I wanted to come back to and rethink later, or manually transfer to my task inbox.</p>
<p>The equilibrium I&rsquo;ve come to is more or less &ldquo;keep an outline of the day, annotate for followup/recapture, allow the outline to take shape, make sure to sweep it all up to end the day, because you&rsquo;re starting a new log tomorrow and don&rsquo;t want to forget anything.&rdquo;</p>
<p>Looking at a stretch of logs, I feel a lot of affection for them. They&rsquo;re easy to scan. I can see all the stuff that happened. At the end of the day, because I have made it easy on myself, I can collect everything up that needs to be sorted and take a moment to do that with care, teeing up the next day.</p>
<p>I would like to stick with it for a while for the same reason I buy my underwear, socks, and t-shirts from three single sources, and have in the last few years bought multiples of other things that work for me but are subject to the vagaries of global supply chains and profit-squeezing sourcing fuckery: If it works, just go with that and remove another thing from the list of things you think about.</p>
<p>The tool isn&rsquo;t why you work.</p>
<p>The process isn&rsquo;t why you work.</p>
<p>The outcome is why you work.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-03-02</title>
      <link>https://mike.puddingtime.org/posts/2024-03-02-daily-notes/</link>
      <pubDate>Sat, 02 Mar 2024 09:50:26 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-03-02-daily-notes/</guid>
      <description>The perils of too much and too little friction. Dune 2. Running shoes day.</description>
      <content:encoded><![CDATA[<h2 id="cal-newport-on-note-taking">Cal Newport on note-taking</h2>
<p>Cal Newport&rsquo;s <em>Digital Minimalism</em> has left a lasting impression with me. A lot of his ideas around technology were incredibly useful and helped me come down from some kind of lockdown-inspired extremism into something a little more grounded, and a little less bingey. Whenever I&rsquo;m in the grips of meta/tool-sickness, once I figure out that&rsquo;s what&rsquo;s going on I&rsquo;ve probably forgotten something useful from that book.</p>
<p>He has a podcast, but I don&rsquo;t listen to it much. A <a href="https://overcast.fm/+b1V14O2YU">recent epidsode</a>, however, had some stuff about note-taking and I have been deep in the grips of fussing around with that so I used it for my dishwashing and coffee making soundtrack this morning.</p>
<p>His key take is &ldquo;get rid of friction,&rdquo; which &hellip; yes. Back in the heyday of 43 Folders, most of my impatience came less from the content itself and more the constant riffing on &ldquo;methodologies&rdquo; that sounded more and more abstract, overthought, and overwrought. I just stopped believing any of it. Because there are only a few occurrences of the word &ldquo;yarn&rdquo; in my 20-year-old blog archive, I was able to find an entry in the non-public archive:</p>
<blockquote>
<p>Date: November 14, 2005 at 10:05:06 PM PST</p>
</blockquote>
<blockquote>
<p>I&rsquo;ve never hit a gtd adherent.  I need to be up front about that.</p>
</blockquote>
<blockquote>
<p>I thought about picking fights with a few, I guess, but it&rsquo;d involve barging into the comments over at <a href="http://43folders.com">43 Folders</a> like Bruce Lee in &ldquo;<a href="http://www.kungfucinema.com/reviews/fistoffury.htm">Fist of Fury</a>&rdquo; and fighting with people who want little more than to be more efficient and get more work done.  They don&rsquo;t deserve to be antagonized for that.</p>
</blockquote>
<blockquote>
<p>Sometimes I read a comment from someone who insists that his routine involves some insanely arcane and convoluted use of yarn and a special shell script he whipped up that reads crap down from his <a href="http://www.backpackit.com/">Backpack</a> account and then squirts it into his Palm, makes a redundant backup on the server he maintains in Malaysia and produces printed 3x5 copies in triplicate, one of which he pins to his infant son&rsquo;s sleeve before leaving for the morning (&ldquo;If I died, I couldn&rsquo;t live with him thinking his father went out the door without an action list and a plan!&rdquo;).</p>
</blockquote>
<blockquote>
<p>Sometimes, I was saying, I read something like that and I want to find that person and give him a noogie or burn two of his four backup copies.  One, because I imagine that the &ldquo;system&rdquo; being described is a giant lie concocted by someone caught up in the thrill of inventing systems instead of actually, you know &hellip; using them to get stuff done.  Two, because if these people are making these systems work for them then they&rsquo;re surely VERY POWERFUL BEINGS we should hate and fear because we&rsquo;re all going to end up working for them.</p>
</blockquote>
<p>Newport&rsquo;s take in 2024 is a little more kind, but comes down to &ldquo;if you like building systems, build &rsquo;em, but, like, acknowledge that you&rsquo;re indulging a hobby.&rdquo;</p>
<p>He shared another idea I&rsquo;ve come to appreciate in slightly different form: While you want to remove friction from the note-taking process, it&rsquo;s not a great idea to hyper-atomize your notes and truly empty your brain of <em>ideas</em> in the hopes that The System will glue them all back together.</p>
<p>There is such a thing as too little friction. Whenever I&rsquo;m playing around with a todo thing now I seldom enable &ldquo;quick capture&rdquo; or &ldquo;get this into the system by forwarding an email into it&rdquo; unless my overall operating state is pretty mindful and deliberate, because I know what it means to capture something without considering it much. At best, congratulations, you&rsquo;ve just added a puppy to the box without a plan for feeding it or taking it to the vet for shots. At worst, it slips into the bowels of The System and becomes an ongoing source of guilt until you burn the system down and start a new one. The remedies for those possibilities just add more friction at point of capture (so great, you managed to launch capture with a single keystroke, but you still have a metadata chore), or require a disciplined maintenance approach.</p>
<p>That is todos, which are not notes, but the challenges seem similar. I&rsquo;d also have to fiddle around with org-roam and a few other systems a little more to weigh how much discovery they offer at point of capture. He was wise to keep his criticisms vague, because differing feature sets + extensibility makes generalizing fraught.</p>
<p>I will say that mastering org-capture was a mistake for me, personally, because it became too easy to create a proliferation of atomized, siloed entry points into the system. Friction is a sweet spot thing, and I still struggle to find that sweet spot.</p>
<h2 id="dune">Dune</h2>
<p>I rewatched <em>Dune</em> last night to feel prepped for the second part. Initial reviews for the new release have seemed positive, saying that it reaps the rewards of the world-building and groundwork done in the first installment.</p>
<p>I didn&rsquo;t like part 1 very much. It was fine, but the break-point didn&rsquo;t work for me and there was just enough deviation from the source material right around that part of the story that I got distracted by it.</p>
<p>That was a bummer, because I&rsquo;d built the coviplex partially in anticipation of <em>Dune</em>, but between streaming issues that made the picture quality poor and not-unseeable differences of opinion, it was a little bit of a letdown.</p>
<p><img src="/img/IMG_0284.JPG" alt="A projection movie screen in a remodeled garage"></p>
<p>Last night it worked much better for me. I was able to shut off the part of my brain that was busy reconciling source and adaptation, and the picture quality was way better thanks to a solid stream, so I caught more. I&rsquo;d still prefer some slightly different choices here and there, but this is an adaptation of a book I read yearly from age 13 to some time in my 30s. And, tomorrow this time I will be parked in the theater finishing the story. Not watching the (occasionally glitchy, low-res) credits roll and thinking &ldquo;nobody&rsquo;s even sure he&rsquo;s going to get to make part 2.&rdquo;</p>
<h2 id="running-shoes-day">Running shoes day</h2>
<p>Al wants to start running. I told myself I&rsquo;d pick it up again when I got my weight down. Well, it&rsquo;s down and I&rsquo;ve got a potential running partner. So we&rsquo;re going to find running shoes today. I do well with Brooks Addictions, but they have changed a few times over the years. I&rsquo;ve really liked my Hoka Speedgoats for fast walks and hikes on less technical terrain. Curious to see what the shoe people recommend. Anyhow, looking forward to trying to pick that back up again. Endurance running is the physical thing I seem to be built to do competently without a ton of focus, and it&rsquo;s time to shake off winter.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-02-29</title>
      <link>https://mike.puddingtime.org/posts/2024-02-29-daily-notes/</link>
      <pubDate>Thu, 29 Feb 2024 20:33:53 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-29-daily-notes/</guid>
      <description>Trying out commafeed for RSS. Dropping Wallabag. A handy tiddlywiki plugin. The Fujifilm X100VI. What&amp;rsquo;s traditional IT?</description>
      <content:encoded><![CDATA[<h2 id="commafeed">Commafeed</h2>
<p>I have been giving <a href="https://www.commafeed.com">Commafeed</a> a try as my self-hosted RSS service. It&rsquo;s got a very simple presentation, decent keyboard shortcuts, presents the Fever API to RSS clients like Reeder, and has filtering capabilities (though I am having some challenges understanding their ins and outs).</p>
<p>The main issue I have with it is its somewhat limited set of sharing options, but that actually helped me decide to decommission Wallabag (which is not one of them). I&rsquo;ve found that pretty slow and not as easy to deal with as Pocket across platforms. I wanted to like it, but it&rsquo;s hard to justify for a kind of tool I&rsquo;m glad to have but don&rsquo;t feel a deep attachment to. So I&rsquo;m switching back to Pocket, and Commafeed works just fine with that.</p>
<h2 id="stories-for-tiddlywiki">Stories for Tiddlywiki</h2>
<p>The Stories plugin for Tiddlywiki lets you create a second column and divert tiddlers to it so you can have things side-by-side. I don&rsquo;t use it much for my personal wiki, but for my work wiki it&rsquo;s a great way to have my interstitial journal sitting open and ready in one column, and my active tiddler open in another.</p>
<p><a href="https://giffmex.org/stroll/stroll.html#%24%3A%2Fplugins%2Fsq%2FStories">This appears to be the closest to a link I can find</a>.</p>
<h2 id="fujifilm-x100vi">Fujifilm X100VI</h2>
<p>I am not made of stone. I preordered one. I <a href="https://pix.puddingtime.org/San-Francisco-SepAug-2023">took my X100V to San Francisco</a> a few months ago for a work trip and renewed my affection for the series. As with Portland, I much prefer the X100s to a larger ILC for street carry. I did keep thinking, as we walked around Chinatown at night, &ldquo;man, I wish this thing had IBIS.&rdquo; I still liked the shots I got, but you&rsquo;re managing harder tradeoffs. With any luck I didn&rsquo;t preorder too late to get one before next September, but we&rsquo;ll see.</p>
<p>I&rsquo;ve long held that the X100 series could stop iterating once it had weather resistance (solved with the V) and IBIS (solved now with the VI). I suspect a faster lens would make the bulk unacceptable, so I will not hold my breath on that one. I&rsquo;d like the series to match up batteries with the X-T series, too, but that might be another bulk issue, and I have accrued a collection of the WP-126S batteries between the X100F and X100V, so I&rsquo;m set. I have a very thin Wasabi charger that&rsquo;s great for travel. During my SF trip I had all-day walking around juice on the battery in the body and a pair of spares at the bottom of my sling.</p>
<p>I wonder if the X-Pro series ended with the X-Pro3. I liked mine a lot but also felt like the &ldquo;anti-chimping&rdquo; display was a little gimmicky, and it didn&rsquo;t have IBIS. Returning to a normal rear panel of some kind and IBIS would be great, but I&rsquo;m good with the X-T5 and not so hung up on the rangefinder-esque design that I&rsquo;d run out and buy an X-Pro4. And if I did, I&rsquo;d slap my nice 23mm on it and have &hellip; an X100 but a little bigger and more conspicuous and a few stops faster. Nope. I think the X100VI has the makings of a desert island camera.</p>
<h2 id="work">Work</h2>
<p>Today was IT steering committee day. I was asked if I thought my crew does more or less than traditional IT. Interesting question. My current place sells SaaS, my last place had a lot of on-prem estate (and a hyper-overbuilt network given the size and nature of the business).</p>
<p>At my last place I presided over the last of a desultory teasing apart of corporate IT and something we called &ldquo;SRE&rdquo; for a period before settling on &ldquo;developer services.&rdquo; For reasons I will avoid enumerating, we had some struggles with that teasing apart that persisted over four years &ndash; I left engineering, did IT, went back to engineering, then went <em>back</em> to IT one more time. Each time I&rsquo;d chip at the problem from my new perch. It all came down to loosening some death grips in IT, reassuring corporate security that the engineers wouldn&rsquo;t wrap the car around a tree, and eventually just being a little bit of a prick with the one remaining IT person who felt it right and proper to require security engineering to petition for log dumps so they could audit their own services.</p>
<p>&ldquo;If you make him give them self-serve access to Splunk, he&rsquo;ll quit,&rdquo; warned the manager I had over that team.</p>
<p>&ldquo;Well, good. He needs to be this tall to ride. If he can&rsquo;t handle letting people see logs for their own services, this is probably for the best.&rdquo;</p>
<p>I wrote a memo (the only &ldquo;Mike uses his directorial <em>ex-cathedra</em> voice&rdquo; memo I&rsquo;ve ever written) explaining that everyone needed to be <em>this</em> tall to ride. He couldn&rsquo;t handle it and quit. Wasn&rsquo;t tall enough to ride.</p>
<p>Anyhow, I have a lot less complexity to deal with at the current place. There are still some weird &ldquo;why does this route through IT&rdquo; issues that pop up, but they&rsquo;re pretty easily resolved by visiting my security colleagues and asking &ldquo;did we do this for a reason&rdquo; (seldom) and then asking engineering &ldquo;would you like to remove me as an external dependency?&rdquo; (usually, but sometimes I wonder if they think I&rsquo;m trying to trick them).</p>
<p>What it amounts to is an interesting inversion of value. When I presented today about the year&rsquo;s big initiatives it was mostly about portfolio governance, access management, and providing administrative uplift to the vendor management process. We still have to deal with traditional IT admin stuff, but it&rsquo;s pretty contained. Not nearly as sprawling and perilous as it was at the last place.</p>
<p>Anyhow, &ldquo;traditional for where&rdquo; is the real answer. I&rsquo;m glad to be doing my job in a context and era where the parts that are simple and the parts that are complex have sort of shifted around.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-02-25</title>
      <link>https://mike.puddingtime.org/posts/2024-02-25-daily-notes/</link>
      <pubDate>Sun, 25 Feb 2024 12:18:06 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-25-daily-notes/</guid>
      <description>Daily logging in Tiddlywiki with Streams. Espanso regexp expansions.</description>
      <content:encoded><![CDATA[<h2 id="the-daily-log-in-tiddlywiki-with-streams">The daily log in Tiddlywiki with Streams</h2>
<p>I fiddled around with <a href="https://workflowy.com/">Workflowy</a> a while back, and it has been in the back of my head, since. There is something about the whole outliner thing that is compelling, but when I see examples from people who are heavy outliner users in the wild I get this sense there&rsquo;s a sweet spot between &ldquo;useful chunking of information&rdquo; and &ldquo;stilted and hard to consume/digest,&rdquo; and &hellip; we all have different cognitive styles, I guess is all I&rsquo;ll say.</p>
<p>As near as I&rsquo;ve been able to piece together some ideas out there in note-taking land, I&rsquo;d like my personal notes setup to involve:</p>
<ul>
<li>A daily log</li>
<li>A daily personal task list</li>
<li>The ability to digress from the log</li>
</ul>
<p>I&rsquo;d like my log to be somewhat structured, meaning timestamped entries of a consistent format.</p>
<p>I don&rsquo;t care if my personal task list for the day has much metadata, because we&rsquo;re closer to the &ldquo;shopping list&rdquo; end of the spectrum than the &ldquo;project management&rdquo; list. I guess it can have <em>no</em> metadata besides &ldquo;have I done it yet.&rdquo;</p>
<p>Digressing from the log doesn&rsquo;t mean much besides, &ldquo;is it easy to think of something, quickly make a new node/page/tiddler and start typing.&rdquo;</p>
<p>The apparent term of art for all this stuff is &ldquo;intersitial logging.&rdquo; That is fewer syllables than &ldquo;keep track of what you&rsquo;ve done during the day,&rdquo; but has the benefit of higher syllabic density.</p>
<p>An outliner is a pretty good tool for those things because it brings some structure, favors the terse, and frees you from worrying about managing the arrangement of the text in favor of managing the arrangement of the content.</p>
<h3 id="outlining-with-streams">Outlining with Streams</h3>
<p>Digging around for outliners for Tiddlywiki I came across <a href="https://saqimtiaz.github.io/streams/">Streams</a>, which sticks a little outliner widget in each Tiddler. Click the &ldquo;+&rdquo; button, and you&rsquo;re in a node in your outliner. Tab to indent, shift-tab to outdent, grab the nodes by their handles to reorder. Each node, in turn, is its own Tiddler.</p>
<p>I am not entirely sure how I feel about that last part, and if it were not for a filter you can apply to your sidebar to hide all the subtiddlers Streams produces in the open and recent lists, I am pretty sure I would hate it. But you can <a href="https://saqimtiaz.github.io/streams/#FAQs%2FHow%20can%20I%20show%20only%20the%20stream%20root%20tiddlers%20in%20the%20timeline%3F">drop some code</a> into the sidebar shaddow Tiddler to clean all that up and only see the root of a stream.</p>
<p>There&rsquo;s enough there to play around, anyhow.</p>
<p>I made a simple Espanso trigger to timestamp my log entries:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Make a timestamp</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">trigger</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;:log&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">replace</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#39;&#39;[{{mydate}}] &#39;&#39; &#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vars</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">mydate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">date</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">params</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">format</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;%r&#34;</span></span></span></code></pre></div>
<p>So, open a new node in the outline, type <code>:log</code>, start typing.</p>
<h3 id="finding-the-escape-hatch-with-streams-fusion">Finding the escape hatch with Streams Fusion</h3>
<p>Because I&rsquo;m a nervous soul who is always wondering how to back out of things like this, there&rsquo;s also the <a href="https://fastfreddy.gitlab.io/streams-fusion/">Streams Fusion</a> plugin, which gives you a little icon at the bottom of a stream to merge all the sub-nodes in a stream into a single, unified chunk of text.</p>
<p>That&rsquo;s cool, because in a daily log you can be creating a proliferation of digressions and sidebars, not all of which qualify as full-fledged chunks of thought or interesting directions. So, click that button at the end of the day and all the nodes in the outline are turned into normal markup (links intact, if you added any) that looks like an outline, but all the child tiddlers from the root are removed and nodes you linked in a digression become backlinks to the newly merged daily log.</p>
<p>Alternately, you can turn the outline nodes into simple paragraphs. This morning I came across something while I was reading, started outlining, said all I&rsquo;d had to say about that stream of thought, and went ahead and merged it all into a normal tiddler.</p>
<p>In evolving practice I don&rsquo;t know whether I&rsquo;ll fuse many daily pages or not. The part of me that doesn&rsquo;t like the underlying sprawl of nodes even if I&rsquo;ve hidden it from myself is still paying too much attention to what&rsquo;s going on underneath. It&rsquo;s a fine line between due diligence and unhealthy perfectionism.  The benefit of fusing logs will be improved searchability for log entries themselves, since search results will go back to a single day&rsquo;s log page instead of its child nodes. That seems to be kinder to future me.</p>
<h2 id="tasks-in-my-log-with-espanso-and-regexps">Tasks in my log with Espanso and regexps</h2>
<p>Once I decided to let the Streams experiment run, I waffled around about how to integrate tasks into my log. The &ldquo;interstitial logging&rdquo; people encourage a single, unfified stream of log entries and tasks created as they come up. Tiddlywiki&rsquo;s core conception of tasks is that they should be nodes (&ldquo;tiddlers,&rdquo; yes) with a <code>todo</code> tag. That&rsquo;s a little cumbersome in the Streams workflow.</p>
<p>So I did a quick experiment with the <a href="https://talk.tiddlywiki.org/t/sticky-todo-plugin-initial-release/684">Sticky Todo plugin</a> as a way to make a Streams node a task.</p>
<p>Sticky Todo uses markup like this to turn any text into a todo that appears in your sidebar:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;&lt;sticky &#34;Take out the recycling&#34;&gt;&gt;</span></span></code></pre></div>
<p>That&rsquo;s not too hard to remember, but it&rsquo;s sort of type-y, so I made an Espanso shortcut that leverages its ability to do regexps:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">regex</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;:todo\\((?P&lt;todo&gt;.*)\\)&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">replace</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&lt;&lt;sticky \&#34;{{todo}}\&#34;&gt;&gt;&#34;</span></span></span></code></pre></div>
<p>So I can start a node with <code>:todo(some task)</code> and Espanso replaces it with <code>&lt;&lt;sticky 'some task'&gt;&gt;</code></p>
<p>It&rsquo;s 7 keystrokes minus the task content instead of 13? <a href="https://xkcd.com/1205/">Plug it into the table</a> and bask in the efficiency!</p>
<p>Espanso is useful for stuff like this where there&rsquo;s no way I could figure out how to get Tiddlywiki to automate this in any reasonable timeframe.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Truce declared in Tiddlywiki struggle</title>
      <link>https://mike.puddingtime.org/posts/2024-02-24-truce-declared-in-tiddlywiki-struggle/</link>
      <pubDate>Sat, 24 Feb 2024 15:45:05 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-24-truce-declared-in-tiddlywiki-struggle/</guid>
      <description>Okay. Now to start putting things in it.</description>
      <content:encoded><![CDATA[<p>Well, that&rsquo;s a relief.</p>
<p>Al is off in Mexico, so I&rsquo;m being more verbose than usual over social media because I am trapped in this house with myself, a list of a few things I <em>ought</em> to be doing, and plenty of discretionary time.</p>
<p>Today I went on a small posting tear over last night&rsquo;s movie (<em>The Caine Mutiny</em>, 1954) and that led to a cascade of other thoughts, all dutifully dropped into a Mastodon thread that I immediately thought better of, but will allow to stand. The nice part about self-destructing toots is that nothing remains regrettable for long.</p>
<p>But I thought &ldquo;I wish I&rsquo;d just written that stuff down somewhere else,&rdquo; because there are things in there that are part of a broader thesis I&rsquo;ve been worrying at for a while, and I hate the tightrope walk of saying partially thought-through things in public.</p>
<p>So I thought about my Obsidian vault but realized how purpose-made to work it is. I thought about a <em>second</em> Obsidian vault and that would probably be perfect, but no fun. I picked Obsidian for work because it strikes the right balance of free-form text and enough task management stuff that I can do the thing I like to do there, which is make in-line tasks in my notes. It is also sort of dull.</p>
<p>Then I thought &ldquo;you sort of have a commonplace book in DayOne,&rdquo; but DayOne is a Mac and iOS thing, and I have exported it but not found a home for it.  (Yes, there&rsquo;s a web option now. I don&rsquo;t know how I feel about that, because I don&rsquo;t own that server.)</p>
<p>&hellip; and there&rsquo;s Tiddlywiki, which is super compelling, but wasn&rsquo;t super compelling for my work notes bakeoff. I needed to set up too much too quickly, and there are things it does not want to do, or that it can do but I do not want to figure out. But it seems fun and simple, and something about it is very compelling even if it wasn&rsquo;t quite right for how I&rsquo;d like to use a tool for work. Different headspaces, I guess, and I like the idea of supplementing the boundaries between headspaces through the subtle effects of tools.</p>
<p>So I blew up my half-started Tiddlywiki and started afresh with something I think will meet my needs:</p>
<ul>
<li>Daily pages are titled by ISO 8601 (2024-02-24)</li>
<li>Daily pages have a &ldquo;log&rdquo; heading</li>
<li>Daily pages have a &ldquo;made today&rdquo; section (<code>&lt;&lt;list-links filter:&quot;[sameday:created{!!created}!is[system]]&quot;&gt;&gt;</code>)</li>
</ul>
<p>Those are the out-of-the-box things.</p>
<p>I added two plugins:</p>
<ul>
<li><a href="https://kookma.github.io/TW-Shiraz/">Shiraz</a>. It has a node explorer that drops a table with backlinks, transclusions, and common tags at the bottom of a note.</li>
<li><a href="https://stobot.github.io/sticky/#">Stickies</a>. Select some text, hit the keystroke, and the text becomes an inline todo that shows up by filename under a tab in the sidebar. Perfect for &ldquo;this reminded me of something, I want to get back to it, here&rsquo;s a reminder and a link back&rdquo;</li>
</ul>
<p>Seems like a good foundation, addreesses a hangover I had from shifting away from Mac for so much day-to-day stuff.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-02-22</title>
      <link>https://mike.puddingtime.org/posts/2024-02-22-daily-notes/</link>
      <pubDate>Thu, 22 Feb 2024 18:26:57 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-22-daily-notes/</guid>
      <description>Brief attempt to get Tiddlywiki to parity with my Obsidian vault. The nut milk machine.</description>
      <content:encoded><![CDATA[<h2 id="return-to-tiddlywiki-briefly">Return to Tiddlywiki (briefly)</h2>
<p>I was very, deeply bothered by Tiddlywiki&rsquo;s failure to yield on a few points, so I took some time to work on them wondering how much of the Obsidian workflow I&rsquo;ve come up with could be repeated in the context of a single-file wiki. Mixed success, I suppose, that could be less mixed if I were less automation-oriented.</p>
<p>But basically:</p>
<h3 id="area-and-people-pages">Area and People pages</h3>
<p>I keep a standard page format for areas, people, and projects.  Areas are non-timebound, non-project areas of concern or relationships. The GRC org is an area, as are &ldquo;portfolio management,&rdquo; &ldquo;security engineering,&rdquo; and &ldquo;the people team.&rdquo; Projects, Areas and People use the same template because they need pretty much the same thing: A list of tasks, a list of related tasks from outside the page, and a simple log. I guess these are tickler files in some parlances.</p>
<p>In Obsidian, a standard page for these things has a &ldquo;tasks&rdquo; section, a &ldquo;related tasks&rdquo; section, and a &ldquo;log&rdquo; section; and it has a <code>primary_tag</code> property. &ldquo;Tasks&rdquo; are ad hoc, one-off things specific to each entity, while &ldquo;related tasks&rdquo; are any tasks anywhere else in the system bearing the area or person&rsquo;s <code>primary_tag.</code> The &ldquo;related tasks&rdquo; block just looks like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">tasks
</span></span><span class="line"><span class="cl">tags include grc</span></span></code></pre></div>
<p>So if I&rsquo;ve got a project somewhere else in the system, or drop a GRC-related task in some meeting notes, it gets sucked into that list.  By convention, my primary tags are terse abbreviations, always in lower case. I could drop that convention, but it&rsquo;s helpful for setting up pages in a standardized way that lets me just start using the page vs. modifying places where I want to pull in the primary tag. Turbo-laziness, basically.</p>
<p>The &ldquo;log&rdquo; section is nothing special. I do use the Quickadd plugin to make it easy to log something from anywhere by running a Quickadd <code>log anywhere</code> action from the command menu. So I invoke the keystroke, get a prompt for the file to append a log entry to, start typing &ldquo;Areas/&rdquo; or &ldquo;People/&rdquo; and pick the autocompletion, enter the log entry, and I&rsquo;m done. The snippet itself is <code>- {{DATE:HH:mm}} {{VALUE}}\n</code> and QuickAdd allows me to target the <code>## Log</code> heading to append the entry. I&rsquo;ve got a clone of it for my daily journal page, just to shave off selecting the page.</p>
<p>In Tiddlywiki, I cobbled together a few things to get this rough effect:</p>
<p>I use the <a href="https://kookma.github.io/TW-Todolist/">TodoList</a> plugin, which provides the ability to drop in a snippet that creates a little ad hoc log widget:</p>
<p><code>&lt;&lt;interstitial-ui caption:&quot;! Log&quot; width:&quot;&quot; base:&quot;$(currentTiddler)$_log&quot;&gt;&gt;</code></p>
<p>The <code>base</code> property gives the list a unique name, either to isolate the log entries to that page (with no base, all log items appear everywhere the snippet is used) or to allow reuse of the log elsewhere in the wiki.</p>
<p>The drawback of the log is that the widget stores everything in JSON, not as part of the page itself. Were one committed to using Tiddlywiki forever, that might not be so bad. I know myself better than that, and believe this pattern essentially recreates the drawbacks of any database-driven site. Maybe there&rsquo;s an export option, but it&rsquo;s also an impediment to simple search of the live wiki: You get back the associated lump of JSON, not the page that is presenting the lump of JSON.</p>
<p>The real answer is probably &ldquo;don&rsquo;t use that logging widget, figure out how to automate this some other way.&rdquo;</p>
<p>TodoList allows the use of a todo list widget as well, but I couldn&rsquo;t figure out how to surface its todos anywhere in the wiki. I am okay with violating Prot&rsquo;s advice about mixing ephemeral tasks with notes, but only if there is a way to sweep up todos in one place for review and safety. So instead I use TiddlyWiki&rsquo;s native task functionality, which involves a button that modifies the basic &ldquo;New Here&rdquo; functionality for a given Tiddler, but appends the primary tag of a given Area or Person page to a todo tiddler. When I click the task button, it makes a new tiddler with a <code>todo</code> tag and the current tiddler title as a second tag.</p>
<p>Then I have some template code to enumerate todos for a given Area or Person page:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">! Tasks
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;$list filter=&#34;[!has[draft.of]tag[todo]tag{!!title}!tag[done]sort[created]]&#34;&gt;
</span></span><span class="line"><span class="cl">  &lt;$checkbox tag=&#34;done&#34;&gt; &lt;$link to=&lt;&lt;currentTiddler&gt;&gt;/&gt;&lt;/$checkbox&gt;
</span></span><span class="line"><span class="cl">&lt;/$list&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">! Completed tasks
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;$list filter=&#34;[!has[draft.of]tag[todo]tag{!!title}tag[done]sort[created]]&#34;&gt;
</span></span><span class="line"><span class="cl">  &lt;$checkbox tag=&#34;done&#34; checked=&#34;yes&#34;/&gt;
</span></span><span class="line"><span class="cl">    &lt;$link to=&lt;&lt;currentTiddler&gt;&gt;/&gt;
</span></span><span class="line"><span class="cl">&lt;/$list&gt; </span></span></code></pre></div>
<p>I don&rsquo;t have enough Tiddly-fu to do in Tiddlywiki what I can do in Obsidian, which is drop in a task on any page from anywhere in a single keystroke.  Not the worst limitation, and the proximate workarounds aren&rsquo;t that bad.</p>
<p>What you end up with is that todos are just tiddlers with a <code>todo</code> tag. As opposed to the widget solution, they&rsquo;re more searchable, and you can add notes about a given task in the body. You can also make a big todo page that lists every single unclosed todo in the system for review. I like it as a concept, especially since you could associate a given task tiddler with a variety of pages by adding the right tags.</p>
<h3 id="projects">Projects</h3>
<p>In Obsidian, project pages are the same as area and people pages. In Tiddlywiki, the limitations of the native task management are such that I decided to get another plugin: <a href="https://thaddeusjiang.github.io/Projectify/">Projectify</a>.</p>
<p>It bolts a nicer GUI onto Tiddlywiki&rsquo;s native task management to provide some project structure around the tiddler-as-task pattern. It includes a global entry widget for an inbox you can invoke from anywhere in the system (maybe that code will help me understand how to get the logging I want).</p>
<p>It&rsquo;s a pretty nice plugin! I think I would be willing to use it full time, since it could even blow up but still leave me with data in files I could figure out how to migrate or continue to use. Unfortunately, development of the fork of the stalled original project seems to have stopped as well. I don&rsquo;t have enough of a sense of how the Tiddlyverse works to know how much that matters.</p>
<h3 id="bottom-line">Bottom line</h3>
<p>We&rsquo;re all spoiled for choice. With a few tweaks, I think I could make a go of Tiddlywiki. I just don&rsquo;t know how to get some of the automation/ease of data entry I can get with Obsidian. If I lifted my notes out of Obsidian I would lose a few things that currently connect notes via the tasks and dataview plugins, but I limit use of those things to nice-to-haves.</p>
<h2 id="other-obsidian-details">Other Obsidian details</h2>
<p>I&rsquo;ve got a smallish list of plugins holding my Obsidian stuff together, easing data entry, and making my templates smarter:</p>
<ul>
<li>Custom File Explorer Sorting: Just lets me put the file explorer sidebar in a better order (pushing utility folders to the bottom, raising my task list to the top)</li>
<li>Dataview: For pulling in related notes in my people, area, and project pages.</li>
<li>Front Matter Title: Lets me use Denote&rsquo;s &ldquo;metadata-in-filename&rdquo; convention but see the human-readable title of a note in tabs and the file explorer</li>
<li>QuickAdd: A way to add content to pages. I can pop open a dialog to select a page, type in some text, and it gets plopped at the bottom of a given heading.</li>
<li>Tasks: The standard Obsidian task management plugin</li>
<li>Templater: Lets you add JavaScript to your templates at initial render. It&rsquo;s how I enforce the Denote filenaming scheme.</li>
</ul>
<p>If pressed, just Tasks would be the must-have. QuickAdd would probably make the list. Templater and Front Matter Title mostly exist to enable the Denote file naming, which is on my &ldquo;nice to have&rdquo; list.</p>
<h2 id="the-milkmade">The Milkmade</h2>
<p>I got <a href="https://mychefwave.com/milkmade-milk-maker/">a nut milk maker</a>. It looks sort of like a Mr. Coffee, but instead of a coffee basket there is a nut/grain threshing chamber. You fill the reservoir, dump maybe a quarter cup of your preferred nut or grain into the threshing chamber, and press a button. 12 minutes later there&rsquo;s a 20 oz. carafe of nut milk.</p>
<p>It&rsquo;s a little grainier than what you get at the store, and a little less creamy. Letting it chill in the fridge (it comes out at 180F) and drinking a cup of it wasn&rsquo;t as good as store bought &ndash; maybe a little bitterness in comparison &ndash; but I did some reading and made another batch where I dropped in a pinch of salt, a splash of vanilla, and a teaspoon of monkfruit sweetener, and that was pretty good.</p>
<p>The CGM has taught me that cow milk in any quantity past &ldquo;a splash in my tea&rdquo; has a drastic effect on my blood sugar. It&rsquo;s the kind of spike I never would have noticed with finger stick testing &ndash; tends to be fast and well within the two-hour post-prandial window &ndash; but I couldn&rsquo;t unsee the spikes, and I don&rsquo;t <em>neeeeed</em> cow milk, but like it over my cereal or with protein powder. So if I&rsquo;m gonna be a nut milk lifer, I&rsquo;m glad I can make my own.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The notes bakeoff</title>
      <link>https://mike.puddingtime.org/posts/2024-02-21-the-notes-bakeoff/</link>
      <pubDate>Wed, 21 Feb 2024 12:28:55 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-21-the-notes-bakeoff/</guid>
      <description>The agonized ego is a ring of defense around nothing. And should not interfere with note tool selection.</description>
      <content:encoded><![CDATA[<p>I wrote a few days ago about impermanence and how it is, perhaps, desirable for our identities to be at least a bit ephemeral, the better to grow. There&rsquo;s gray in all that. We should always be clear on who we are, what matters to us, what our values are. But we should also be ready to let bits of our identities go.</p>
<p>I know that is easier said than done.</p>
<p>&ldquo;Bits of our identities&rdquo; are conversation starters, signifiers, hints, badges, clues to deeper things about us, personal reminders, and anchors.</p>
<p>&ldquo;Anchors.&rdquo;</p>
<p>&ldquo;That was a very anchoring conversation.&rdquo;</p>
<p>&ldquo;This is a real anchor around my neck.&rdquo;</p>
<p>Which is a weird way to start a post about note-taking apps, but here we are.</p>
<p>Like, Emacs is part of my &ldquo;Unix person&rdquo; origin story. I can&rsquo;t name another software tool I&rsquo;ve used as consistently for 33 years. I suppose the Unix paradigm itself edges Emacs out for personal longevity, but not by much.  And when I think about everything I was doing with that first Ultrix account in 1991, &ldquo;running Emacs&rdquo; is the only thing that remains from the list. No more Netrek, I don&rsquo;t use USENET in a way that would be recognizable to Past Me, and if the work I did on the Landsraad assembly hall for the DUNE MUD remains &ndash; getting cones of silence to work felt like a real triumph &ndash; I haven&rsquo;t been around to visit it for a few decades.</p>
<p>It is a bit of an anchor in the putatively good sense of the word &ldquo;anchor.&rdquo; Technological comfort food. One of the first things that goes on any new machine, and one of the first server-side things I test when I&rsquo;m trying out a new remote access tool. But also a bit of an anchor in the not-great sense of the word, in that I will pay the &ldquo;figure out how to express this in elisp&rdquo; tax for hours, well beyond practicality or reason.</p>
<p>Most recently, I was ignoring some excellent advice from Prot regarding people who want to use his excellent Denote for task tracking:</p>
<blockquote>
<p>“If you want my opinion though, be more forceful with the separation of concerns. Decouple your knowledge base from your ephemeral to-do list: Denote (and others) can be used for the former, while you let standard Org work splendidly for the latter—that is what I do, anyway. &hellip; “Do not mix your knowledge base with your to-do items.”</p>
</blockquote>
<p>&hellip; and the complexity was piling up and up, the tradeoffs were getting worse, and there was simply no joy in the experience because I had gotten myself into that bitter &ldquo;make this problem yield&rdquo; mindset that eventually leads to less understanding and more hacked-up, suboptimal stuff.</p>
<p>I just don&rsquo;t have time for it right now.</p>
<p>So it makes sense that my fallback position was &ldquo;maybe Logseq would be fine,&rdquo; because it&rsquo;s got the whole &ldquo;supports org-mode syntax&rdquo; thing going on &ndash; leave the door open for a return to Emacsland once I have more time &ndash; and perhaps because it is just odd enough to tickle another bit of my self-image. Mercifully, the second I tried to solve a problem of moderate complexity I realized how much time I&rsquo;d have to invest to do anything besides pick code samples up off the sidewalk and pop them in my mouth. So I backed away slowly.</p>
<p>And after that it makes sense that Tiddlywiki got a look because it has been around forever and there is a sort of cheerfully prosaic attitude among its users. But the plugins started creeping in and I was trying to get it to do stuff it doesn&rsquo;t really want to do without a lot of third party assistance, so the whole &ldquo;it&rsquo;s very simple&rdquo; thing was not allowed to find much expression.</p>
<p>So there I was, and I&rsquo;m sort of glad that I chased my tail over the past few weeks because it tired me out a little, but left me with an idea of what I wanted to do: Take notes in a connected manner, blend a little of PARA with space for a slipbox approach, and have inline todos, <em>and</em> I wanted it to sync across a few devices.</p>
<p>Obsidian does all that very well. There is always the risk of plugin creep, but in past Obsidian experiments that has been less about extending the core feature set and more about removing repetitive work. The simple mission of &ldquo;write notes, link between them, keep track of tasks&rdquo; doesn&rsquo;t take much, with mobile and sync managed competently. It runs on every platform I&rsquo;d care to run it on.</p>
<p>It&rsquo;s a little dull. But after a few days of &ldquo;just using it&rdquo; and adding little affordances here and there from past vaults as I&rsquo;ve remembered them, it has the benefit of just working in a non-dramatic, non-head-desking, simple way.  I haven&rsquo;t had to really think about it much. I haven&rsquo;t inadvertently broken it or misconfigured it in such a way that I&rsquo;m scrambling around a minute before a meeting trying to get back into my own notes.  It&rsquo;s of sufficient maturity that you can look up the answers to things and they are often in written form, which minimizes the whole &ldquo;if I see one more YouTube poster frame of a slack-jawed influencer taking 30 minutes to explain something I could have copied and pasted in ten seconds I&rsquo;m going to do a murder&rdquo; thing.</p>
<p>I was inclined to say &ldquo;and it says nothing about me, at all.&rdquo;</p>
<p>But it does say a few things: &ldquo;Doesn&rsquo;t want to think about this problem he created for himself in any more detail,&rdquo; &ldquo;will settle on Markdown even though it is inferior to org,&rdquo; &ldquo;can stand being associated with people who think a graph of their notes is interesting and useful if it means not having to think about this any longer,&rdquo; &ldquo;will pay for sync,&rdquo; &ldquo;considers seven plugins normal and reasonable, would not admit to nine,&rdquo; and &ndash; most likely and eventually &ndash; &ldquo;always seems to creep back to Emacs even though it seemed like he knew better last time he did this.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-02-19</title>
      <link>https://mike.puddingtime.org/posts/2024-02-19-daily-notes/</link>
      <pubDate>Mon, 19 Feb 2024 15:29:14 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-19-daily-notes/</guid>
      <description>Meta sickness</description>
      <content:encoded><![CDATA[<p>I&rsquo;ll try to speedrun a train of thought that came through last week:</p>
<p>For a few years, roughly coincidental with the arrival of Covid, then lockdown, then the sort of crappy year leading up to my layoff, I was struggling to do a lot of the creative things I had once done a lot.  In hindsight some of it was lockdown stress, some of it was work stress + depression over the work stress, and some of it was probably about an illness I didn&rsquo;t know I had yet.</p>
<p>It all added up to not making much new stuff, not feeling very creative, and maybe worst of all feeling very crabby and reactive toward the new or the novel. I didn&rsquo;t like the way the inside of my head felt. I felt sort of old and inflexible.</p>
<p>Once I settled into the reality of being laid off, addressed my health stuff, and chilled out enough to legitimately rest and relax a little I bounced back and that gave me a burst of creative energy. Once I got a new job and had that soaking up some of that energy I faded back a little, but recently I&rsquo;ve been feeling it again. I can tell because I&rsquo;ve been experimenting with tools, dusting off stuff I&rsquo;ve built in the past, and just generally futzing around with stuff.</p>
<p>There&rsquo;s a lens to it all, though, which is whether these things are doing anything for me: Are they providing utility and what exactly is that utility.</p>
<p>I&rsquo;ve also thought back to that unpleasant fallow period. A lot of things I had made or depended on fell apart during that period, because I didn&rsquo;t have the mental energy to keep them going. If something I&rsquo;d depended on for a while broke because I attempted a minor tweak, or because an upstream changed underneath me, I&rsquo;d just toss it aside. It was tiring to consider concentrating long enough to fix it.</p>
<p>I guess the broad theme was sustainability. I was lucky to find a good counselor who helped me gauge my own resources and remember to honor commitments to myself. So when I&rsquo;d have a brief  burst of nervous energy or motivation, she&rsquo;d help steer me back to things that were practical and sustainable as opposed to overthought, overengineered, and unmaintainable.</p>
<p>org-mode has been one bottomless sink of time and energy for me. I&rsquo;m not a particularly skilled elisp person. Not an elisp person at all if we&rsquo;re being honest. So nothing really comes easily to me when I&rsquo;m trying to squeeze some neat idea out of Emacs.  When I compare my rate of progress to the period when I was extending BBEdit or TextMate with Ruby plugins, it seems glacial.</p>
<p>And every now and then I just break shit. I am measured and careful enough with my changes that it&rsquo;s usually easily to isolate, but there are those days when I&rsquo;m just doing a bunch of things by hand because I blew up some piece of automation or some bespoke UI I built. On those days I wonder to myself, &ldquo;if you ever hit a trough, or don&rsquo;t have the kind of discretionary time you have now, or just lose a few more degrees of neural plasticity (as you must), what will this be like?&rdquo;</p>
<p>I think I know the answer, because I&rsquo;ve been walking the earth long enough to know that there will be some kind of extinction event, a bunch of shit will go out the window, and I&rsquo;ll end up with three or four new SaaS subscriptions I&rsquo;m scrambling to cancel in a year provided the vendor does me the courtesy of telegraphing that they&rsquo;re reaching for my wallet.</p>
<p>Philosophically and intellectually I&rsquo;m okay with that. A few moments in my life have offered me crash courses in the value of acceptance in the face of impermanence. I&rsquo;ve had the benefit of object lessons in the form of being around people I love and care about, but who are perhaps fatally anchored by an identity they might do well to discard, the better to begin growing again.</p>
<p>But also what I <em>want</em> to care about ebbs and flows. Some days, weeks, months, years I <em>want</em> to care about things like org-mode, elisp mastery, and interesting techniques for taking notes. Other times I do not at all, and feel a little crabby about the time spent on these things. Especially because it is not lost on me that my energy is both finite and unevenly distributed. If I&rsquo;m deeply involved in a bunch of tech stuff, I am probably not taking many pictures or writing about certain things. When I am crowding out certain endeavors closer to my creative core in favor of things I am perhaps a little obsessive about but that are further from my creative core I feel a little out of sorts.</p>
<p>&ldquo;You&rsquo;re getting the meta sickness,&rdquo; I say to myself, and I beat myself up a little.</p>
<p>It was great to spend a week in Vancouver the week before last, then a long weekend on the coast with nothing but an iPad. I couldn&rsquo;t mess around with much very easily, and when I did try to tentatively poke at something during a lull in the conversation with our fellow travelers I broke it and was left realizing that trying to fix it over coast vacation rental Wi-Fi on an iPad soft keyboard would be far more infuriating than knowing it was fucked up for a few days.</p>
<p>Those twin interruptions knocked me out of a tool fixation ramp-up and made me think a little about whether I was doing what my old Irish boss used to call &ldquo;polishing the pipes&rdquo; (we did eventually convince him that didn&rsquo;t work for US English speakers) and perhaps setting myself up for another round of meta sickness.</p>
<p>Now I&rsquo;ve got a week ahead of me where I have three plates spinning and people need me to quick dicking around and make a few things happen so they can go do their jobs. That will also help keep the futz monkey off my back for a bit.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-02-14</title>
      <link>https://mike.puddingtime.org/posts/2024-02-14-daily-notes/</link>
      <pubDate>Wed, 14 Feb 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-14-daily-notes/</guid>
      <description>The Org Borg.</description>
      <content:encoded><![CDATA[<h2 id="the-org-borg">The Org Borg</h2>
<p>I like the ideas I get from taking a tour of a tool like Logseq, even if I don&rsquo;t think the whole thing is going to work for me. It&rsquo;s a chance to fold ideas into what is practically my forever tool, which is org-mode/Emacs, or at least rethink things I thought were more bothersome to fix than they sometimes end up being.</p>
<p>The last few weeks I&rsquo;ve been intrigued by <a href="https://fortelabs.com/blog/para/">PARA</a> as a simple organizing principle, I&rsquo;ve wanted to continue to mesh prose and tasks in the way org-mode excels, and I&rsquo;ve wanted to de-gunk my Denote setup.</p>
<p>I gave Logseq a try, looked at Workflowy again, and briefly dusted off my last Obsidian setup. Logseq and Obsidian are pretty good at surfacing tasks from all over your notes collection. org-mode can manage that but it is very oriented around the org agenda as a way to see your tasks, and the agenda doesn&rsquo;t scale well with large collections of notes.</p>
<p>There are a few ways of coming at that problem, ranging from &ldquo;just be selective about which files go into the agenda&rdquo; to functions that pre-scan your corpus cheaply then assemble a list of agenda files only from things with active todos.</p>
<p>I am still a long way away from having a notes collection large enough to slow the agenda down, but it&rsquo;s growing.</p>
<p>So, in the midst of poking around and trying to decide whether or not to add one of several possible lumps of lisp to my config, I came across <a href="https://baty.blog/2022/keeping-my-org-agenda-updated/">Jack Baty&rsquo;s post on his own solution,</a> which is limiting your agenda files to just project files, based on Denote&rsquo;s naming convention.</p>
<p>My own Denote hierarchy has a bunch of little atomic notes, then a collection of <kbd>project</kbd> files, <kbd>area</kbd> files, and <kbd>people</kbd> files. It also has a <kbd>home</kbd> file that indexes the project and area files, and an <kbd>inbox</kbd> file. I&rsquo;ve been experimenting with a <kbd>foundations</kbd> type that I use to define core concepts. For instance, my team&rsquo;s work a specific tool migration might be a <kbd>project</kbd> file; while portfolio management generally is an <kbd>area</kbd> file. Defining what even is the portfolio, what it means for someone on the team to own a piece of the portfolio, and what expectations are for portfolio owners is a piece of <kbd>foundation</kbd> thinking.</p>
<p>I can see putting tasks in those special-purpose files, and will tend to avoid putting them in tinier atomic or fragmentary notes files. Feels like a reasonable compromise that discourages littering my notes with tasks, keeps org&rsquo;s agenda efficient, and provides a little bit of structure that I feel can go missing in a strictly anti-hierarchical note setup.</p>
<p>The code Jack shared defines <kbd>denote-to-agenda-regexp</kbd> to make a decision on whether or not some supporting functions should include a file in the agenda. He limits his to files with <kbd>_project</kbd> in the name (derived from having <kbd>project</kbd> somewhere in the filetags). I wanted to include <kbd>area</kbd> and <kbd>people</kbd>, too, so I expanded the regexp (inelegantly):</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defvar</span> <span class="nv">my-denote-to-agenda-regexp</span> <span class="s">&#34;_project\\|_area\\|_people\\|_inbox&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;Denote file names that are added to the agenda.
</span></span></span><span class="line"><span class="cl"><span class="s">    See </span><span class="ss">`my-add-denote-to-agenda&#39;</span><span class="s">.&#34;</span><span class="p">)</span></span></span></code></pre></div>
<p>I&rsquo;ve also added the project/area/person name as the <kbd>#+category:</kbd> property in my agenda-ready files, since that cleans up the far-left column on the agenda, which is the (very long in Denote) filename by default.</p>
<h2 id="forsaking-mobile">Forsaking mobile</h2>
<p>I guess the other development of all the cleanup and fussing was choosing to not care about the mobile use case for this stuff <em>at all</em>.</p>
<p>I think I have shared elsewhere that one of my formative work experiences included being handed the keys to a portfolio of websites with zero supporting staff and being expected to keep comment moderation going seven days a week. I developed a small fixation around mobile work that predated useful technology for mobile work by a good number of years. It made sense because it allowed me to be out and about and doing little moderation micro-tasks whenever.</p>
<p>Since then, I&rsquo;ve had this scar or kink or crease in my brain about making sure the mobile bases are covered, but the more I think about it the more I think it&rsquo;s a bad idea. It&rsquo;s bad enough that I let Slack or Gmail on my phone, let alone wanting all my work notes and tasks available wherever I am. I suppose in a truly, truly dire situation I could use <a href="https://blink.sh/">Blink</a> to sign in to the desktop machine and run an agenda or look up a note, but that&rsquo;s a ridiculous scenario and the better answer is probably &ldquo;yeah, sorry, away from my computer rn.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-02-13</title>
      <link>https://mike.puddingtime.org/posts/2024-02-13-daily-notes/</link>
      <pubDate>Tue, 13 Feb 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-13-daily-notes/</guid>
      <description>I gave Logseq a shot. Migration Day. Kill It With Fire.</description>
      <content:encoded><![CDATA[<h2 id="gave-logseq-a-shot">Gave Logseq a shot</h2>
<p>&hellip; I really did. I don&rsquo;t think it&rsquo;s gonna take.</p>
<p>There&rsquo;s a lot to like about it, and if your whole thing is &ldquo;I&rsquo;m gonna go try this new model of thinking about things,&rdquo; it&rsquo;s a fine representative of the smart/connected/non-hierarchical etc. notes market. It is very outline-centric, so org-mode and Workflowy people will feel more at home.</p>
<p>The approach I took to my trial was to just go with its preference for daily journal pages as the starting point. I did do an overlay on that using <a href="https://fortelabs.com/blog/para/">PARA</a>,  more or less.</p>
<ul>
<li>Daily pages included a section for meeting notes, a task inbox, and a section I called &ldquo;facts&rdquo; that was just meant to be &ldquo;random snippets of this and that flowing in throughout the day.&rdquo;</li>
<li>My project pages included project notes and project-specific tasks.</li>
<li>My area pages included notes and tasks that I knew were related to a given area when I created them.</li>
</ul>
<p>Logseq includes a built-in TODO page that gathers all your open tasks, which you really need if you&rsquo;re dumping todos into daily pages. On a desktop monitor it feels manageable. On a laptop panel, especially one with a 16:9 ratio, it feels overwhelming if you have many open tasks.</p>
<p>I came across a number of strategies for dealing with the problem of &ldquo;loose tasks flying around in your note volume&rdquo; including review of the TODO page, custom queries, and the use of <a href="https://github.com/ahonn/logseq-plugin-todo">a plugin</a> that offers a way to quickly scroll through available tasks and inject the ones you want to tackle today into your journal.</p>
<p><a href="https://github.com/QWxleA/Unfinished-business">Another plugin</a> provided a way to automatically roll daily journal tasks over with the creation of a new daily page, but it threw me a few curveballs after a day of trying to use it without having to think about it.</p>
<p>Two obvious comparisons to make are org-mode in Emacs and Obsidian.</p>
<p>If you like the thought of a very outline-oriented notes and tasks manager, but wish there was a more robust and purpose-built sync capability than org-mode offers, Logseq offers org-mode syntax and has a paid sync capability that seems to work pretty well. If you don&rsquo;t care about a mobile use case I don&rsquo;t know why you&rsquo;d pay for sync when there are things like Dropbox and Syncthing. But if getting at your stuff on your phone matters and you&rsquo;re sort of over trying to make Beorg or Plainorg work, Logseq might be interesting.</p>
<p>Obsidian is the real competitor, though, and as I read through forums and subreddits I saw some hair-splitting over which solution was &ldquo;better&rdquo; based on features that come out-of-the-box. Logseq does have better built-in task management stuff, but a single, very mature plugin in Obsidian closes that gap and then exceeds Logseq&rsquo;s out-of-the-box experience, and you&rsquo;re back to finding plugins to get parity.</p>
<p>I&rsquo;d be remiss to leave out org-roam (Emacs) and Denote (also Emacs). If your use case is just notes with no tasks, either of these will work pretty well, too. You&rsquo;re just left with the sync challenge, and neither is suitable for mobile (IMHO &hellip; livable, but not great). I said &ldquo;just notes with no tasks&rdquo; because org-mode&rsquo;s agenda, which is generally how you&rsquo;re going to aggregate todos across a bunch of connected notes, has known scale issues over time as you add more and more files as potential sources of tasks. If you don&rsquo;t mind adding more custom lisp and a package or two you can overcome that. You&rsquo;re still left with the mobile problem.</p>
<h3 id="what-about-one-big-page">What about one big page?</h3>
<p>I thought about that, too, after a little Ed <a href="https://indieweb.social/@mikegrindle/111856204328700800">trolling</a>. I&rsquo;ve done the whole &ldquo;one big org file&rdquo; thing in the past, but that was a simpler time.</p>
<p>I did model PARA into a single org file, tweaked a few org-capture templates, and made some conventions  to take advantage of the <kbd>:CATEGORY:</kbd> property and tags inheritance. That made the agenda a lot more digestible and useful.</p>
<p>The single-file approach also lets Beorg and Plainorg work pretty well.</p>
<p>That isn&rsquo;t exactly a &ldquo;connected notes&rdquo; thing anymore. It&rsquo;s more like Workflowy, and that&rsquo;s if you&rsquo;re doing it in org. I can&rsquo;t imagine doing it without org-mode&rsquo;s assistance. Too much going on.</p>
<h2 id="migration-day">Migration day</h2>
<p>I&rsquo;m sitting on a call with a migration specialist from Jamf, having promised the team that I&rsquo;d be available to yell or threaten if they requested it.  This is our third go at effecting a migration off of self-hosted infra and into their cloud. <del>Fingers crossed</del> Went fine. We&rsquo;ll be able to decom a load balancer along with several compute and db nodes.  We&rsquo;ve also observed that a few backoffice integrations work much better in their cloud instance, meaning better reporting about the state of our end user compute fleet.</p>
<p>We&rsquo;re sort of in a change season right now: In the coming half we&rsquo;ve got a new password manager, a VPN refresh and some bits and bobs to improve our SSO situation. Getting Jamf in the rear-view mirror means a significant amount of headspace opens up for the team and will vastly improve our chances of success on one major initiative I pulled forward by two quarters and have sitting on the dock, awaiting a more reliable endpoint management setup to take advantage of it. Better reporting also means we&rsquo;ll be able to make good on a major change we made to laptop fleet management that has improved our hardware budgeting situation a lot, but has needed better insight to really sing.</p>
<p>I took this job knowing there&rsquo;d be a lot of simplification work to get through, and it hasn&rsquo;t disappointed. There are days I want to pull my hair out &ndash; like the first and second times we had to scrub our Jamf migration &ndash; but there are also plenty of days when things come together and I clock out knowing we took a step forward.</p>
<p>Most days I also ask myself what&rsquo;s compelling about all this to me. IT&rsquo;s generally thankless work. But &ldquo;run services orgs&rdquo; is pretty much what I do, even when I&rsquo;ve led engineering teams who probably didn&rsquo;t want to think of themselves that way. I think the simplest answer is &ldquo;you can help a lot of people and make a lot of things better,&rdquo; including for the people who are also asking themselves why on earth they&rsquo;re in IT every couple of days.</p>
<p>I also happen to like unknotting Christmas tree lights.</p>
<h2 id="kill-it-with-fire">Kill It With Fire</h2>
<p>Through this change season, I&rsquo;ve been noticing and appreciating my Readwise notes from  <em><a href="https://nostarch.com/kill-it-fire">Kill It With Fire</a></em>, Marianne Bellotti&rsquo;s excellent book on dealing with legacy systems. I read it thinking it would be more &ldquo;technical,&rdquo; but it&rsquo;s as much about the leadership and cultural challenges of dealing with legacy systems. Right up there with Camille Fourier&rsquo;s <em><a href="https://www.oreilly.com/library/view/the-managers-path/9781491973882/">The Manager&rsquo;s Path</a></em>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-02-05</title>
      <link>https://mike.puddingtime.org/posts/2024-02-05-daily-notes/</link>
      <pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-05-daily-notes/</guid>
      <description>Poking at Logseq. Dusting off the camera. Wallabag bookmarking script.</description>
      <content:encoded><![CDATA[<h2 id="logseq">Logseq</h2>
<p>Poking around with note-taking options, I finally came back around to Logseq, which I&rsquo;ll reduce to &ldquo;org-mode and Workflowy gang up on Obsidian.&rdquo;</p>
<p>I was primed to not like it, but the org-mode syntax option and some relatively strong opinions about how things should be were compelling enough that I played around with it, then tried to implement a <a href="https://fortelabs.com/blog/para/">PARA</a>-like structure, then watched a few videos to try to internalize how it wants you to behave.</p>
<p>The page link syntax is interesting. You can do either a traditional wikilinks double-brackets, or you can use <kbd>#hashtag</kbd> notation to link to a page, which &ndash; thanks to the inbound links section of each page &ndash; serves as a tag index.</p>
<p>Logseq solves the blank page problem by &hellip; well, it sort of doesn&rsquo;t. It&rsquo;s opinionated enough about its &ldquo;everything is an outline, every line is a node&rdquo; thing, as well as its &ldquo;start from a journal page each day&rdquo; thing, that you can tell it wants you to do something besides &ldquo;make a page and start typing,&rdquo; but you can&rsquo;t be sure what.</p>
<p>I ended up deciding to just go with it. Sitting in the living room, staring at the blank daily journal page, I just made a node in the outline for the first thing that came to mind and dumped out my big projects and OKRs for the coming quarter. Then I dumped a packing list for a trip this week. Then some miscellaneous tasks to get done before I fly out.</p>
<p>Entering tasks, then thinking ahead to how I&rsquo;d find them once I moved on to a new journal page the next day, led me to the <a href="https://github.com/QWxleA/Unfinished-business">Unfinished Business</a> plugin, which will roll yesterday&rsquo;s todos into today&rsquo;s journal page. I think there are other ways to gather todos but my initial read of journal page todos vs. project or area todos is that they should be more ephemeral and bound to the day.</p>
<p>But I guess my summary, having messed around with this for all of 18 hours, and after a morning of using it for work, is that Logseq is very, very into the non-hierarchical, &ldquo;networked notes&rdquo; approach. It wants structure to be a matter of emergence.</p>
<p>Its main competitor for my attention is Denote, which is more of a collection of Legos with opinions that are less about your workflow and more about the metadata. I like the way Logseq provides a built-in backlink block automatically, though I could implement that with a capture template for Denote.  I like Logseq&rsquo;s more wiki-ish page creation conventions. I like that there&rsquo;s a mobile app devoted to Logseq&rsquo;s point of view, as opposed to the general-purpose mobile org clients.</p>
<p>It&rsquo;s important, for org-mode people, to not go into this thinking it&rsquo;s &ldquo;org-mode with a native toolkit GUI.&rdquo; You can use org-mode syntax in a list. There are some familiar org-mode conventions (e.g. src blocks). If you like everything being an outline, as in org-mode, you&rsquo;ll be in familiar territory. But there&rsquo;s a layer of plumbing that finds its way into the markup that org-mode is not going to make sense of if you ever depart Logseq. It&rsquo;s instructive to set up a few pages where you&rsquo;re transcluding nodes, etc. and then open those pages in Emacs to see what it does with them. In some cases, it can&rsquo;t do anything because Logseq has its own markup overlay.</p>
<h2 id="dusting-off-the-camera">Dusting off the camera</h2>
<p>I&rsquo;ll be in Vancouver, BC this week for a work event, then staying over for a few days to do some tourism. Given the time of year and likely subject matters it&rsquo;s an X-T5 kind of week. I&rsquo;m just taking the 23mm/f1.4 WR. I considered the X100V, but I&rsquo;d like the extra speed and the image stabilization.</p>
<p>I have not been very excited about photography lately, but the prospect of a new place and interesting scenery got me a little more excited. Looking forward to being out on the streets at night.</p>
<h2 id="wallabag-bookmarking-script">Wallabag bookmarking script</h2>
<p>I submitted a PR for my <a href="https://github.com/newsboat/newsboat/tree/master/contrib/wallabag">Newsboat Wallabag bookmarking script</a>. As with the Newsboat one, you can just run it from the command line, too, if you&rsquo;re interested in some pre-written plumbing for Wallabag bookmarking. Just takes a URL as ARGV[0] and lets the Wallabag service pull all the metadata.</p>
]]></content:encoded>
    </item>
    <item>
      <title>State of the self-host</title>
      <link>https://mike.puddingtime.org/posts/2024-02-04-state-of-the-self-host/</link>
      <pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-04-state-of-the-self-host/</guid>
      <description>What has stuck and what has not from recent self-hosting experiments.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve tried a bunch of self-hosted things recently. In the spirit of &ldquo;yeah, but how is it <em>really</em> working,&rdquo; a quick rundown:</p>
<h2 id="linkding">Linkding</h2>
<p><a href="https://github.com/sissbruecker/linkding">Linkding</a> is a bookmarking tool. It has a UI similar to pinboard.in, can import <kbd>bookmarks.html</kbd> files, and has a decent API. It&rsquo;s working very well. I&rsquo;m particularly fond of the <a href="https://github.com/fivefold/linkding-injector">Linkding injector addon for Firefox</a>, which injects Linkding search results into the sidebar of most popular search engines.</p>
<p>This one seems to be a keeper.</p>
<p>I briefly considered <a href="https://github.com/shaarli/Shaarli">shaarli</a> as an alternative. I didn&rsquo;t like the UI as much, but it has a bigger list of third-party extensions than Linkding.</p>
<h2 id="wallabag">Wallabag</h2>
<p><a href="https://wallabag.org/">Wallabag</a> is a self-hosted Pocket alternative. It also has a useful API, an iOS app, and a Firefox extension. I wasn&rsquo;t too sure about this one going in, but once I got the Docker stuff and some reverse proxy weirdness sorted it worked quite well. It has a few more smarts than Pocket, and it provides Atom feeds of simplified articles you can use to create ebook digests via Calibre or just consume with your everyday RSS reader, given the formatting is cleaned up.</p>
<p>It also lets you share <a href="https://reader.puddingtime.net/share/65bff5347b9932.42547178">a public-facing version of a saved article</a>, and its clipper extension seems to be able to see around a few paywalls if you&rsquo;re <a href="https://reader.puddingtime.net/view/176">saving from a subscription site</a>.</p>
<p>I think this one is a keeper given I can automate the ebook exports: That essentially recreates the Pocket/Kobo integration.</p>
<h2 id="calibre-web">calibre-web</h2>
<p><a href="https://github.com/janeczku/calibre-web">calibre-web</a> is a HTML5 front-end for Calibre libraries that allows you to edit metadata, organize your ebook collection into shelves and, most importantly to me, act as an online sync source for Kobo e-readers, allowing you to browse your collection and download to your Kobo, then keep your reading location in sync.</p>
<p>Some people live in calibre-web full-time, uploading ebooks and managing their metadata. I prefer to pair it with Calibre itself due to an ongoing content conversion project.</p>
<p>It&rsquo;s definitely a keeper. I recovered a ton of books from another device and converted them to Kobo-friendly epubs. Better yet, when downloaded to a Kobo, calibre-web serves up kepubs, which are optimized for Kobos.</p>
<h2 id="calibre">Calibre</h2>
<p><a href="https://calibre-ebook.com/">Calibre</a> is an ebook conversion/management tool, ordinarily used on the desktop. I found <a href="https://mariushosting.com/how-to-install-calibre-on-your-synology-nas/">a Docker recipe</a> that lets me run it on my Synology and access it via a web-based VNC tool. With a little fiddling, I added mountpoints that let me install downloaded extensions and import books from a <kbd>bookdrop</kbd> directory as I pull them down from their assorted vendor sites.</p>
<p>It works alongside calibre-web, allowing me to install books from assorted formats and export them to epub, where they&rsquo;re almost instantly available from the calibre-web web interface or Kobo integration.</p>
<p>Even if sync didn&rsquo;t work, you can access a content server that uses the <a href="https://en.wikipedia.org/wiki/Open_Publication_Distribution_System">OPDS protocol</a> for browsing. So with a reverse proxy and authenticated user, you can get at your library from anywhere and side-load books to your reader.</p>
<p>I&rsquo;m going to keep the Dockerized version.</p>
<h2 id="vikunja">Vikunja</h2>
<p><a href="https://vikunja.io/">Vikunja</a> is a todo app that includes a traditional list view and a card view. It serves up CalDAV, so it could theoretically work with any CalDAV client, but its doesn&rsquo;t work well with iOS Reminders. The responsive Web UI isn&rsquo;t bad if you want to install it to your iPhone desktop.</p>
<p>I installed it and tried it for a day, but I am not sure about it. I&rsquo;m a little uneasy about self-hosting my todos, and was hoping for some kind of native client.</p>
<h2 id="joplin">Joplin</h2>
<p><a href="https://joplinapp.org/">Joplin</a> is an Evernote-esque app with a ton of cross-platform support that I couldn&rsquo;t quite bring myself to trust in a self-hosted context.  It&rsquo;s a good tool and all, but I&rsquo;d prefer to just have my notes in a plaintext, version-controlled setup.</p>
<h2 id="mariushosting">MariusHosting</h2>
<p><a href="https://mariushosting.com/">MariusHosting</a> isn&rsquo;t an app, it&rsquo;s a site run by Marius Lixandru with a ton of recipes for Dockerizing common self-hosted apps on a Synology. It&rsquo;s my first stop when I want to try something out. I was resistant to a lot of his earlier stuff because he had an idiosyncratic way of getting containers set up, but he has since begun to use <a href="https://mariushosting.com/synology-portainer-vs-container-manager/">Portainer</a> for his recipes, which has simplified them a lot. If you find a Docker recipe that uses <kbd>docker run</kbd>, you can convert that to Docker Compose with <a href="https://www.composerize.com/">composerize</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-02-01</title>
      <link>https://mike.puddingtime.org/posts/2024-02-01-daily-notes/</link>
      <pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-01-daily-notes/</guid>
      <description>Contributed my Linkding plugin to Newsboat. The collaborative introvert.</description>
      <content:encoded><![CDATA[<h2 id="linkding-newsboat">Linkding, Newsboat</h2>
<p>I shared my Linkding bookmarking plugin to the Newsboat project. It&rsquo;s in <a href="https://github.com/newsboat/newsboat/tree/master/contrib">the contrib directory</a>. It works fine as a standalone tool, too, if you just want to push a bookmark up from the command line. I submitted a PR for the Wallabag version, too.</p>
<h2 id="collaborative-introvert">Collaborative introvert</h2>
<p>Today had some unpleasant aspects to it. I had to do one of those things where you both don&rsquo;t want to get a lot of practice at it, but feel grateful you&rsquo;ve had the practice.</p>
<p>I also felt grateful to have partners to work with on the whole thing who were both willing to share ideas and tools, but also let me plot my own course. It felt like the right balance of &ldquo;not up here completely without a safety net&rdquo; and &ldquo;able to follow my instincts.&rdquo; When things went a little off-road, I felt able to improvise and adjust without looking over my shoulder.</p>
<p>I think I am an okay collaborator, but I know there are times that my internal models take over and it&rsquo;s hard for me to shake myself out of whatever I had in my head as The Right Thing. My introversion sometimes makes it hard to read the room when I&rsquo;m going too far that way. When I realize I have, I usually pull back unless I&rsquo;ve gotten into a headspace where I feel unyielding on the matter. That&rsquo;s rare. I wish I had a little better sense of how I come off. Even the times I&rsquo;ve thought I must sound like I&rsquo;m close to exploding, people say &ldquo;no, had no idea. Really? You just seemed your normal self.&rdquo;</p>
<p>I mentioned that to Al this morning, because as I was getting ready to do the unpleasant but needful, she said &ldquo;you seem pretty calm.&rdquo; My wrist vibrated and I looked down and it was my blood glucose monitor telling me my blood sugar was spiking. I&rsquo;ve learned that correlates with stress a lot of the time. I held up my watch and read her the number.</p>
<p>&ldquo;There&rsquo;s a lot going on in there,&rdquo; she said.</p>
<p>There is.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-30</title>
      <link>https://mike.puddingtime.org/posts/2024-01-30-daily-notes/</link>
      <pubDate>Tue, 30 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-30-daily-notes/</guid>
      <description>The AI I am supposed to babysit insists that I just ate a sundae.</description>
      <content:encoded><![CDATA[<h2 id="sure-i-d-be-happy-to-help-train-your-model">Sure, I&rsquo;d be happy to help train your model</h2>
<p>My continuous glucose monitor works with an app. The app is mostly cool: Good historical data, great for developing day-to-day awareness, and it&rsquo;s hooked into other stuff so I can make connections between sleep, exercise, and blood sugar.</p>
<p>It also has a meal diary. When I first started using the app, you could choose between a photo entry or a detailed entry for each meal. If you chose a photo entry, it&rsquo;d just let you take a picture of your meal and timestamp it. If you felt like going back and filling in what you ate, it would provide a link to a database on kinds of food and their potential metabolic impacts. If you chose a detailed entry, the picture became optional and you could fill in more detail on the spot.</p>
<p>I preferred photo entries. I know what&rsquo;s in a given meal so it was fine to look at a week of historical data and check in on photos of the meals that seemed to be connected to spikes or dips.</p>
<p>Recently the app succumbed to the AI fad, so the photo log UI changed: Now the app tries to guess what you&rsquo;re eating by analyzing the photo. I don&rsquo;t think, in over a month of meals, it has had a better than 10 percent success rate. Some of its guesses are simply wild. It isn&rsquo;t learning from me specifically, because I have a very consistent breakfast choice and no amount of correcting the same basic picture taken almost daily has swayed the app.</p>
<p>There&rsquo;s no way to turn the AI assistant off, though. They wedged it into the workflow and your choices are &ldquo;correct it&rdquo; or &ldquo;ignore it.&rdquo;</p>
<p>I tried to correct it for about a week then snapped out of it: There is no way the damn thing made it out of beta without everyone realizing it is infuriatingly bad at what it does. I&rsquo;m sure they intentionally released this half-baked thing counting on people to train it by correcting it for the sake of accurate records.</p>
<p>So I just accept whatever it proposes. You think that bowl of lentil soup is a chocolate sundae? Sure. Yes, now that you mention, I thought I was eating a tasty omelette, but I can see now that it was a ham.</p>
<p>I&rsquo;m happy to send them an invoice if they&rsquo;d prefer different behavior on my part.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A Wallabag bookmarking script for Newsboat</title>
      <link>https://mike.puddingtime.org/posts/2024-01-29-a-wallabag-bookmarking-script-for-newsboat/</link>
      <pubDate>Mon, 29 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-29-a-wallabag-bookmarking-script-for-newsboat/</guid>
      <description>Ruby and httparty worked where a simple bash script wouldn&amp;rsquo;t. Letting Newsboat have two bookmarking commands.</description>
      <content:encoded><![CDATA[<p>I don&rsquo;t have any idea what was going wrong where, but I found a &ldquo;post to Wallabag&rdquo; (<a href="/posts/2024-01-28-daily-notes/">previously</a>) sh script that worked great from the command line, but wouldn&rsquo;t run within Newsboat. So I took the script apart, converted it to Ruby/httparty, and it runs fine in this form.</p>
<p>Now I have two scripts for bookmarking in Newsboat, but it only has one reserved key for bookmarking a post. It does have macros, though, so you can use one to set the bookmarking command to a given script and bind it to something memorable. My mutt convention is to lead macros with a period, so I kept that here by unbinding Newsboat&rsquo;s default macro prefix (,) and setting &ldquo;.&rdquo;.</p>
<p>So, <kbd>.l</kbd> to save to Linkding, <kbd>.w</kbd> to save to Wallabag:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># macros</span>
</span></span><span class="line"><span class="cl">bind-key . macro-prefix
</span></span><span class="line"><span class="cl">unbind-key ,
</span></span><span class="line"><span class="cl">macro w <span class="nb">set</span> bookmark-cmd <span class="s2">&#34;op run --env-file=\&#34;</span><span class="nv">$HOME</span><span class="s2">/.env\&#34; -- ~/bin/wallabag.rb&#34;</span><span class="p">;</span> bookmark
</span></span><span class="line"><span class="cl">macro l <span class="nb">set</span> bookmark-cmd <span class="s2">&#34;op run --env-file=\&#34;</span><span class="nv">$HOME</span><span class="s2">/.env\&#34; -- ~/bin/linkding.rb&#34;</span><span class="p">;</span> bookmark</span></span></code></pre></div>
<p>And here&rsquo;s the Wallabag bookmarking script:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;httparty&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;json&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">entry_url</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">wallabag_url</span><span class="o">=</span><span class="s2">&#34;https://reader.example.net&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">client_id</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;WALLABAG_CLIENT&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="n">client_secret</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;WALLABAG_SECRET&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="n">username</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;WALLABAG_USER&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="n">password</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;WALLABAG_PASSWORD&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">token_params</span> <span class="o">=</span> <span class="p">{</span><span class="ss">grant_type</span><span class="p">:</span> <span class="s2">&#34;password&#34;</span><span class="p">,</span> <span class="ss">client_id</span><span class="p">:</span> <span class="n">client_id</span><span class="p">,</span> <span class="ss">client_secret</span><span class="p">:</span> <span class="n">client_secret</span><span class="p">,</span> <span class="ss">username</span><span class="p">:</span> <span class="n">username</span><span class="p">,</span> <span class="ss">password</span><span class="p">:</span> <span class="n">password</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">token_req</span> <span class="o">=</span> <span class="no">HTTParty</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&#34;</span><span class="si">#{</span><span class="n">wallabag_url</span><span class="si">}</span><span class="s2">/oauth/v2/token&#34;</span><span class="p">,</span> <span class="ss">body</span><span class="p">:</span> <span class="n">token_params</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">access_token</span> <span class="o">=</span> <span class="n">token_req</span><span class="o">[</span><span class="s2">&#34;access_token&#34;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;Content-Type&#39;</span> <span class="o">=&gt;</span> <span class="s2">&#34;application/json&#34;</span><span class="p">,</span> <span class="s1">&#39;Authorization&#39;</span> <span class="o">=&gt;</span> <span class="s2">&#34;Bearer </span><span class="si">#{</span><span class="n">access_token</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="ss">url</span><span class="p">:</span> <span class="n">entry_url</span><span class="p">,</span> <span class="ss">starred</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="ss">archive</span><span class="p">:</span> <span class="mi">0</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">resp</span> <span class="o">=</span> <span class="no">HTTParty</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&#34;</span><span class="si">#{</span><span class="n">wallabag_url</span><span class="si">}</span><span class="s2">/api/entries.json&#34;</span><span class="p">,</span> <span class="ss">body</span><span class="p">:</span> <span class="n">params</span><span class="o">.</span><span class="n">to_json</span><span class="p">,</span> <span class="ss">headers</span><span class="p">:</span> <span class="n">headers</span><span class="p">)</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-28</title>
      <link>https://mike.puddingtime.org/posts/2024-01-28-daily-notes/</link>
      <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-28-daily-notes/</guid>
      <description>Wallabag is a self-hosted Pocket alternative. Recreating the Pocket/Kobo integration with it.</description>
      <content:encoded><![CDATA[<h2 id="wallabag-is-a-self-hosted-read-it-later-alternative">Wallabag is a self-hosted read-it-later alternative</h2>
<p>I am a fairly satisfied Pocket customer, but it&rsquo;s always fun to mess around with potential alternatives. <a href="https://github.com/wallabag/wallabag">Wallabag</a> is one such alternative. It is, er, very much like Pocket, but you host it yourself. It might be I have found a self-hosting frontier, though. I have <a href="https://github.com/sissbruecker/linkding">Linkding</a>, which is very pinboard-like and more to my taste for bookmark management generally, but I need to experiment with a few of its integrations to see if maybe it can do everything I want.</p>
<p>Installation on my Synology was pretty easy. I <a href="https://mariushosting.com/how-to-install-wallabag-on-your-synology-nas/">followed a Docker recipe</a>, plumbed it into my reverse proxy, and it&rsquo;s &hellip; fine? Very Pocket-like. There&rsquo;s an iOS app. There are Firefox apps. It provides custom Atom feeds for your new, unread, archived, and starred items. It also provides <a href="https://reader.puddingtime.net/share/65b71018c68134.90575120">public URLs to items you&rsquo;ve saved</a> to share with others, which is considerate.  You can write rules to label your content based on domain, URL, title, reading time, and more.</p>
<p>I like the custom Atom feeds, because you can just subscribe to them in an RSS reader and you have access to a cleanly formatted full-text version in your reader, so you don&rsquo;t have to use Wallabag to read your stuff.</p>
<h2 id="wallabag-and-calibre">Wallabag and Calibre</h2>
<p>You can also subscribe to those feeds in Calibre, which will make a daily digest epub suitable for reading on an e-reader. With my Calibre-Web/Kobo integration, I can recreate the Kobo/Pocket integration by making Wallabag &ldquo;books&rdquo; that appear in Calibre-Web and sync to my Kobo.</p>
<p>Is it important to not use Pocket anymore? I don&rsquo;t think so? I don&rsquo;t mind replacing pinboard.in because I&rsquo;m not super sure about its future. Pocket seems fine and I don&rsquo;t ever treat RIL services as an important long-term storage thing. I tend to get to my list pretty quickly or use a skill I developed of just deleting stuff when I realize I don&rsquo;t really want to read it anymore.</p>
<p>The Kobo integration is what makes it seem most compelling, but it could be I can manage that with Linkding&rsquo;s RSS feeds, as well. I need to make a news download for Calibre and test.</p>
<p>In the meantime, Wallabag also has an API, so I will see about repurposing my Linkding Newsboat plugin to use my Wallabag instance with Newsboat.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Keeping secrets with 1Password&#39;s CLI tool</title>
      <link>https://mike.puddingtime.org/posts/2024-01-28-keeping-secrets-with-1password-s-cli-tool/</link>
      <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-28-keeping-secrets-with-1password-s-cli-tool/</guid>
      <description>A couple of ways to securely reference your secrets in scripts and apps using 1Password&amp;rsquo;s CLI tool (and a detour into gpg-based approaches.)</description>
      <content:encoded><![CDATA[<p>I wrote the initial version of my <a href="/posts/2024-01-26-daily-notes/">linkding plugin for Newsboat</a> using <a href="https://github.com/bkeepers/dotenv">dotenv</a> to provide my Linkding API key. You just have a <kbd>.env</kbd> file in your home directory with a simple &ldquo;<kbd>KEY=VALUE</kbd>&rdquo; setup. Works fine for not hardcoding your secrets into scripts and reducing the chance you&rsquo;ll end up adding a credential to version control, but the secrets are sitting around unencrypted.</p>
<p>Now that I have it working at about the same level of reliability as the other plugins in the Newsboat repo I&rsquo;ll pull out the dependency on <kbd>dotenv</kbd> and just tell the would-be consumer &ldquo;get this credential into an environment variable, hardcode it, or do something else that feels safe to you.&rdquo;</p>
<p>For myself, I&rsquo;m weighing a couple of options because I&rsquo;d like to do a little better than having a bunch of credentials sitting around in the plain.</p>
<p>Over the years I&rsquo;ve handled this with mutt by combining gpg with mutt&rsquo;s <kbd>source</kbd> config command:</p>
<ol>
<li>
<p>Make a very minimal rc file in mutt&rsquo;s config syntax that sets your user and password:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">       set imap_user=you@example.com
</span></span><span class="line"><span class="cl">       set imap_pass=yourimappassword1234</span></span></code></pre></div>
</li>
<li>
<p>Encrypt that file with gpg:</p>
<p><kbd>gpg -r <a href="mailto:yourkey@example.com">yourkey@example.com</a> &ndash;encrypt passwordfile</kbd></p>
</li>
<li>
<p>Use mutt&rsquo;s <kbd>source</kbd> directive in your <kbd>muttrc</kbd> to decrypt the file on the fly and read in those two directives:</p>
<p><kbd>source &ldquo;gpg -d ~/.mutt/passwords.gpg |&quot;</kbd></p>
</li>
</ol>
<p>If you have gpg set up correctly, you&rsquo;ll get a key authentication prompt when you run mutt. The credentials are never stored in the plain on disk, and you&rsquo;ll get a gpg password prompt every now and then if you have other stuff going on, such as multiple accounts that each need to periodically source that config when you change between them. mutt&rsquo;s <kbd>source</kbd> is just &ldquo;do whatever is in this file,&rdquo; same as <kbd>zsh</kbd>&rsquo;s, so I eventually landed on a way to do the same thing in a shell environment:</p>
<p><kbd>$(gpg &ndash;decrypt ./setenv.sh.gpg)</kbd></p>
<p>That just decrypts <kbd>setenv.sh.gpg</kbd> and runs the commands inside, which can be just setting a bunch of environment variables in the current shell environment. The data is never decrypted to disk.</p>
<p>That seems like a good general solution that covers a lot of drive-by security scenarios.</p>
<p>In the process of working that out, I wondered about 1Password&rsquo;s CLI tool. The few times I saw it mentioned the demos were for secrets management, not retrieval, but I took another look at the docs and it does have some interesting provisions for getting your secrets out of 1Password from the CLI.</p>
<p>Basically, when you use the <kbd>op</kbd> command&rsquo;s <kbd>run</kbd> argument you can tell it to source in some environment variables from a <kbd>.env</kbd> file that uses <kbd>op</kbd>&rsquo;s internal URI scheme to pull credentials out of your vault. An example resource reference looks like this:</p>
<p><kbd>op://Personal/Linkding/password</kbd></p>
<p>If you put that in an <kbd>env</kbd> file with a variable assignment, the <kbd>op</kbd> command can source it and pass it along to a shell command. So:</p>
<p><kbd>op run &ndash;env-file=&quot;$HOME/.env&rdquo;  &ndash; ~/bin/linkding.rb</kbd></p>
<p>&hellip; reads from a file that looks something like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">LINKDING_USER</span><span class="o">=</span><span class="s2">&#34;op://Personal/Linkding/username&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">LINKDING_TOKEN</span><span class="o">=</span><span class="s2">&#34;op://Personal/Linkding/credential&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">FRESHRSS_USER</span><span class="o">=</span><span class="s2">&#34;op://Personal/FreshRSS/username&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">FRESHRSS_PASS</span><span class="o">=</span><span class="s2">&#34;op://Personal/FreshRSS/credential&#34;</span></span></span></code></pre></div>
<p>&hellip; and supplies the <kbd>linkding</kbd> script with a value for this line:</p>
<p><kbd>token = ENV[&lsquo;LINKDING_TOKEN&rsquo;]</kbd></p>
<p>If you&rsquo;re already auth&rsquo;d into 1Password and you&rsquo;ve enabled integration between the CLI tool and the desktop app, then you don&rsquo;t have to do anything. If you need to re-auth your 1Password instance, you&rsquo;ll get a biometric prompt. If you&rsquo;re ssh&rsquo;d into a remote host where you wouldn&rsquo;t get the biometric prompt, you can bypass that by setting <kbd>OP_BIOMETRIC_UNLOCK_ENABLED=false</kbd> but you&rsquo;ll need to explicitly auth the 1Password CLI tool from the command line. It doesn&rsquo;t seem to just fail over to a CLI auth.</p>
<p>So, handled the 1Password way, your <kbd>.env</kbd> file could remain unencrypted, but you&rsquo;d probably be best off aliasing any scripts or commands you run where you want the <kbd>op</kbd> tool to interpolate your <kbd>.env</kbd> file.</p>
<p>It&rsquo;s a little more cumbersome but maybe there&rsquo;s benefit over the long haul from knowing that you just have to keep credentials in 1Password and can reference them elsewhere instead of maintaining an encrypted <kbd>.env</kbd> file. It&rsquo;s also nice to have a biometric prompt or system auth vs. using gpg keys, which require you to have another password on hand (at least until 1Password quits punting on a gpg agent to pair with the ssh one).</p>
<p>For now I&rsquo;ve only got enough stuff connected this way to use 1Password with FreshRSS and my Linkding plugin. Newsboat allows you to set your RSS service&rsquo;s password with output from a shell command, so I&rsquo;ve got that set to:</p>
<p><kbd>freshrss-passwordeval &ldquo;op read op://Personal/FreshRSS/credential&rdquo;</kbd></p>
<p>If I&rsquo;m auth&rsquo;d into 1Password, great: It just runs and sets the credential for NewsBoat. If I&rsquo;m not, great as well: It just runs and tosses up a biometric prompt before proceeding.</p>
<p>I&rsquo;m also using the env file pattern for Newsboat, for my bookmarking command:</p>
<p><kbd>bookmark-cmd &ldquo;op run &ndash;env-file=&quot;$HOME/.env&quot;  &ndash; ~/bin/linkding.rb&rdquo;</kbd></p>
<p>That&rsquo;s because I don&rsquo;t want to write my Linkding plugin to require any particular infrastructure. It just wants an environment variable, which is supplied by wrapping the script in the <kbd>op run</kbd> command with an <kbd>&ndash;env-file</kbd> switch. If someone wants to take the script and use another way to get the variable into their environment, or just decide to take their chances and hard-code it because they&rsquo;re comfortable with that risk, they can. If I ever stop using 1Password I can similarly just figure out a new secrets backend and may be able to avoid rewriting a bunch of utility scripts if I keep using this approach. If I want to use one of my scripts on a host where I don&rsquo;t have 1Password, well, there are other ways.</p>
<p><span class="underline"><span class="underline">Update:</span></span> I wondered about that mutt setup I have and ended up seeing what would happen if I replaced the whole &ldquo;load mutt, source a gpg-encrypted file&rdquo; thing with simple 1Password resource references. It works pretty well. If you&rsquo;re signed into 1Password, it just works. If you&rsquo;re not, you get a biometric prompt:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">imap_user</span><span class="o">=</span><span class="sb">`</span>op <span class="nb">read</span> op://Personal/MuttFastmail/imap_user<span class="sb">`</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">smtp_pass</span><span class="o">=</span><span class="sb">`</span>op <span class="nb">read</span> op://Personal/MuttFastmail/smtp_pass<span class="sb">`</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">imap_pass</span><span class="o">=</span><span class="sb">`</span>op <span class="nb">read</span> op://Personal/MuttFastmail/imap_pass<span class="sb">`</span></span></span></code></pre></div>
<p>Same caveats as with everything: If I ever end up wanting to use my mutt config on a machine I can&rsquo;t put 1Password on, I&rsquo;d need to go back to my old gpg file pattern.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-26</title>
      <link>https://mike.puddingtime.org/posts/2024-01-26-daily-notes/</link>
      <pubDate>Fri, 26 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-26-daily-notes/</guid>
      <description>Sorta the mutt of RSS readers. Scripting the Linkding API.</description>
      <content:encoded><![CDATA[<h2 id="sorta-the-mutt-of-rss-readers">Sorta the mutt of RSS readers</h2>
<p><a href="https://newsboat.org/">Newsboat</a> is pretty cool! It&rsquo;s a plaintext RSS reader that has strong affinities for mutt in look and configuration.</p>
<p>Like mutt, it might not crowd out everything else in the toolbox but it can help you burn through the subscription list and triage even if you have more comfortable ways of reading the content you process.</p>
<p>It also has built-in filtering. If you&rsquo;re using an RSS provider that already does that, e.g. FreshRSS or Feedly, that might not be super valuable, but it&rsquo;s easy to make a killfile either way:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ignore-mode display
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/ducks/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/advice/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/nfl/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/beavers/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/blazers/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/highschoolsports/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/entertainment/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/realestate-news/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/food/\&#34;&#34;
</span></span><span class="line"><span class="cl">ignore-article &#34;*&#34; &#34;link =~ \&#34;/hawks/\&#34;&#34;</span></span></code></pre></div>
<h2 id="scripting-the-linkding-api-to-make-a-bookmark-function-for-newsboat">Scripting the Linkding API to make a bookmark function for Newsboat</h2>
<p>If you like reading longform plaintext maybe Newsboat is all you need. I tend to treat RSS as a two-step process: See an interesting thing, send it to some sort of RIL or bookmarking service. Newsboat has a bookmarking function you can customize with your own scripts. It just passes the article URL, title, description, and website description to your script, which has to talk to whatever API. There are a bunch of <a href="https://github.com/newsboat/newsboat/tree/master/contrib">examples in the Newsboat contrib directory</a> for things like Pocket, Pinboard, and Evernote. No Linkding, but <a href="https://github.com/sissbruecker/linkding/blob/master/docs/API.md">the Linkding API</a> is simple enough.</p>
<p>Could be simpler but I bounced off of <kbd>net:http</kbd> in my formative years:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;httparty&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;json&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">linkding_uri</span> <span class="o">=</span> <span class="s2">&#34;https://links.puddingtime.net/api/bookmarks/&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Get your Linkding API key from Settings &gt; Integrations</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">token</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;LINKDING&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">link_url</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="n">link_title</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="n">description</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="n">website_title</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="ss">url</span><span class="p">:</span> <span class="no">URI</span><span class="p">(</span><span class="n">link_url</span><span class="p">),</span> <span class="ss">title</span><span class="p">:</span> <span class="n">link_title</span><span class="p">,</span> <span class="ss">website_title</span><span class="p">:</span> <span class="n">website_title</span><span class="p">,</span> <span class="ss">unread</span><span class="p">:</span> <span class="kp">true</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;Content-Type&#39;</span> <span class="o">=&gt;</span> <span class="s2">&#34;application/json&#34;</span><span class="p">,</span> <span class="s1">&#39;Authorization&#39;</span> <span class="o">=&gt;</span> <span class="s2">&#34;Token </span><span class="si">#{</span><span class="n">token</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">resp</span> <span class="o">=</span> <span class="no">HTTParty</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">linkding_uri</span><span class="p">,</span> <span class="ss">body</span><span class="p">:</span> <span class="n">params</span><span class="o">.</span><span class="n">to_json</span><span class="p">,</span> <span class="ss">headers</span><span class="p">:</span> <span class="n">headers</span><span class="p">)</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-25</title>
      <link>https://mike.puddingtime.org/posts/2024-01-25-daily-notes/</link>
      <pubDate>Thu, 25 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-25-daily-notes/</guid>
      <description>Applied empathy. GNOME Chrome profile launchers revisited. Fence day. The pruning saw.</description>
      <content:encoded><![CDATA[<h2 id="applied-empathy">Applied empathy</h2>
<p>I got an odd compliment last week: I learned that a few of my colleagues and I are considered &ldquo;unnaturally collaborative.&rdquo;</p>
<p>I won&rsquo;t go into a lot of detail about the surrounding context, but it came down to, &ldquo;we identified a potential source of conflict, one of us called a meeting, the other two showed up, we took turns talking, we arrived at rough consensus, and we trusted the convener to type up the notes (which they shared in advance) and send them upstairs.&rdquo;</p>
<ol>
<li>I think there&rsquo;s a philosophical notion that anything that exists in time in space is in nature, and is therefore natural. Including, my philosophy instructor said with a wry grin for probably the 113th time in his career, purple unicorns, which must exist because time and space are infinite and therefore must contain virtually anything we could conceive. Including three directors who bias toward positive collaboration.</li>
<li>If there are any moral defects to be found here, they are in the imaginations of people who think three collaborative directors are the equivalent of purple unicorns.</li>
</ol>
<p>Anyhow, I am honestly on the fence about whether it was a compliment or not. I once had a performance review downgraded because, my boss&rsquo;s boss explained, my &ldquo;how&rdquo; dimension was so good that it was actually a liability, and he demanded it be lowered from a &ldquo;5&rdquo; to a &ldquo;4&rdquo; to reflect the dangers it posed to me and others.</p>
<p>But I do have a second story from this week that has caused me to feel a little less smug about it all.</p>
<p>There is a process at work that everybody hates. It involves multiple layers of functional and administrative staff, a bad mix of people who are conditioned to be process-oriented close readers and people who are understandably determined to cut any corners they can. There are also three warring tools ecosystems.</p>
<p>I hate it because it involves things I have been involved with and fixed in my past, but I am too new and don&rsquo;t have enough standing or juice to get out and push, so while nobody is challenging my right to weigh in or make adjustments within my remit, I&rsquo;m in the territory of &ldquo;the little attitude thrusters you use in Lunar Lander&rdquo; vs. &ldquo;the warp nacelles of the Enterprise.&rdquo;</p>
<p>So I&rsquo;ve been making little adjustments here and there, identifying the places my own patch of process goes wrong most often, and making little adjustments. Including a few based on things I&rsquo;ve observed but haven&rsquo;t introspected, that I <em>thought</em> were helpful to the people who own that leg of the process.</p>
<p>Until today, when one of them did something slightly different from another one of them that seemed to be an utter refutation of all my proactive consideration for their needs.</p>
<p>So I broke down and asked what I was missing and they took a paragraph to expose me to a whole set of things that go wrong for them that aren&rsquo;t <em>exacerbated</em> by what I was doing, but that what I was doing wasn&rsquo;t <em>helping</em>; and how in other ways I was possibly slowing down another thing. Because I was being curious and helpful, but possibly not curious enough and maybe too helpful, at least in the wrong proportions at the wrong stages.</p>
<p>I&rsquo;m giving myself a 4/5.</p>
<p>My heart was in the right place, but that&rsquo;s table stakes.</p>
<h2 id="chrome-profile-launchers-revisited">Chrome profile launchers revisited</h2>
<p>A couple of weeks ago I wrote a post sharing how to <a href="/posts/2024-01-14-daily-notes/#making-chrome-profiles-available-from-gnome-launcher-and-junction">create GNOME launcher items for individual Chrome profiles</a>. It&rsquo;s a kind of cool thing to do if you want to just get straight to a given profile, and it works well with browser pickers like Junction or Browsers.</p>
<p>At some point, I noticed that one Chrome profile was ignoring my 1Password extension&rsquo;s preference to stay in sync with the 1Password desktop app, so I kept having to log in to 1Password over and over: Every time you close your last Chrome window (as with any Linux desktop app and unlike on a Mac), an unsynced 1Password extension decides (wisely, sanely) that your auth&rsquo;d session is over.</p>
<p>Years of Mac use have made it essentially impossible for me to leave a window open if I&rsquo;m not using it. Why would I? It&rsquo;s just visual clutter, and the app itself is sitting there on warm standby. So I kept geting logged out of 1Password and had to keep re-authing and it was unpleasant.</p>
<p>1Password has some <a href="https://support.1password.com/connect-1password-browser-app/">guidance on how to get the extension to sync with the desktop again</a>, and while I don&rsquo;t want to sound churlish it amounts to &ldquo;turn it off then turn it on again.&rdquo; As an IT person, I respect that, but it didn&rsquo;t do me any good. Removing and reinstalling didn&rsquo;t help either, and I didn&rsquo;t have a lot of confidence in that because the 1Password extension leaves some data behind when you remove it: Instead of needing your complete credentials (address, password, and the secret key), you just need the password when you reinstall.</p>
<p>So my last-ditch &ldquo;avoid filing a ticket at all costs&rdquo; play was to create a fresh Chrome profile and reinstall the plugin there, reasoning that the new profile&rsquo;s sandbox wouldn&rsquo;t have any legacy data in the form of cached stuff, or maybe a config file that changed between plugin versions and creates edge cases despite &ldquo;mostly working.&rdquo;</p>
<p>I turned off sync for the new profile, set up 1Password, then turned sync on. It worked as expected, even when all my other stuff got pulled in.</p>
<p>I flipped back over to the original Chrome instance giving me the problems and it was still stuck.</p>
<p>So, do I want to log back in to 1Password upwards of three dozen times a day, retrain myself to never close the last Chrome window, or just call it a day on getting fancy with profile launchers? Maybe another option is to point the launcher at the directory for the new, working profile, but as I sat here at 6 in the morning screwing around with Chrome profiles I re-remembered that over-optimization is a thing:</p>
<p>I wanted to save a few keystrokes here and there so I over-optimized a collection of things that I&rsquo;ve observed in the past are individually complex and inconsistent, only a few of which are built with even one of the other components in mind. Something is eventually going to get weird in all that. And I don&rsquo;t even like Chrome. I use it for work because we&rsquo;re a Google shop and I don&rsquo;t care if the data Google is harvesting reveals that I spend an ungodly amount of time in an invoicing system, a contract management system, and JIRA. There is no use case for using Chrome with a personal Google account. Firefox is fine for that.</p>
<p>So, lesson learned. Chrome is just &ldquo;the work browser,&rdquo; and I don&rsquo;t have any other profiles. Done and done.</p>
<h2 id="storm-stuff">Storm stuff</h2>
<p>We got off pretty light with the recent ice storm unpleasantness: Overnight without power, then a few downed branches and the death knell for a fence we&rsquo;d hoped would hold out until spring, or at least fall onto our side of the yard. But it didn&rsquo;t. It fell into the neighbor&rsquo;s yard so we hauled away the part that couldn&rsquo;t be propped back up and went looking for contractors.</p>
<p>I don&rsquo;t know if there&rsquo;s a secret to Angie&rsquo;s List, but I&rsquo;ve never cracked it. I put in a request, try to specify that email is going to be the best way to reach me, get hammered with phone calls (many of which are just hangups), and never feel like I end up with much choice.</p>
<p>This time around I got steered onto Yelp by a search engine, which then steered me into its contractor finder. Wow. Vastly different experience: A half-dozen emails before the morning was over, incredibly high responsiveness, and offers to come out and do estimates within the next day or two. I thought the project would be sitting until February or March, but it looks like today is New Fence Day.</p>
<p>To deal with the branches I ended up getting a Ryobi pruning saw to go with all my other 18v Ryobi stuff. I eyed larger chainsaws, but that just wasn&rsquo;t the job at hand, storage is at a premium, and there&rsquo;s not a foreseeable need given what&rsquo;s on the property.</p>
<p>The pruning saw is great. I don&rsquo;t see using it a ton, but it shares a battery with several other things, it&rsquo;s very quiet, light, and compact, and it strikes a nice balance between &ldquo;still obviously a dangerous tool&rdquo; and &ldquo;accessible.&rdquo; Meaning, it&rsquo;s easy to use and handle, but you&rsquo;re still very clear after looking at it that it could fuck you up.</p>
<p>As I slapped the battery in and put on my eye protection, I remembered to pause and tell myself the micro-fiction I tell myself whenever I&rsquo;m around power tools:</p>
<blockquote>
<p>He approached the saw with the confidence of a middle-aged man who once took a shop class in junior high.</p>
</blockquote>
<p>That&rsquo;s not a completely accurate statement of the situation.</p>
<p>I did once take a shop class in junior high, but my bone-deep caution around tools was learned on the floor of an RV factory where there was no grumpy shop teacher yelling if you even looked distracted. Ask me to share my &ldquo;the guy with the sheet of fiberglass, a table saw, no push stick, and no guard&rdquo; story. But even that experience was a long time ago. Better to just pretend like I know a bit more than my fictional character, and way less than I actually do.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-23</title>
      <link>https://mike.puddingtime.org/posts/2024-01-23-daily-notes/</link>
      <pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-23-daily-notes/</guid>
      <description>My GNOME Weather location odyssey. Chop wood, carry water.</description>
      <content:encoded><![CDATA[<h2 id="my-gnome-location-odyssey">My GNOME location odyssey</h2>
<p>Ed complaining about GNOME weather&rsquo;s terrible UI for city names (no mention of state or any other regional indicator, so you&rsquo;re out of luck if you live in one of two Portlands or Grand Rapidses, for instance) reminded me of my own GNOME weather issue, which is that the GNOME Weather app accepts that I am in Portland, Oregon, but the GNOME shell weather widget does not. Until today it believed I am in Everett, WA, which is 180 miles north of me.</p>
<p>This is one of those classic desktop Linux issues that is miserably complicated by the usual questions of distro, underlying service, etc. etc. and there is a phenomenally broad set of remedies depending on how you phrase your search query.</p>
<p>So, for anyone stumbling across this some day: This is for GNOME 45 running on Fedora Workstation 39. I don&rsquo;t know what to tell you if you&rsquo;re having this problem with any other distro or desktop environment, my &ldquo;solution&rdquo; is only partial, and my &ldquo;fix&rdquo; is probably just fine but will make completists furious.</p>
<p>After a lot of poking around and blind alleys, I came across a reddit post titled &ldquo;<a href="https://www.reddit.com/r/Fedora/comments/125eu48/fedora_37_insists_that_i_live_in_a_place_called/">Fedora 37 insists that I live in a place called Hutchinson and I can&rsquo;t change it.</a>&rdquo;</p>
<p>The two-comment thread reveals that Fedora is using the <a href="https://www.mankier.com/5/geoclue#">Geoclue</a> system service, which offers a host of ways to guess your location but seems to mostly rely on Mozilla Location Services (MLS), a service that has been defunct for three years next month. MLS built its database by harvesting location data from Android Firefox and Mozilla Stumbler, which consumed phone location data and nearby Wi-Fi hotspots.</p>
<p>So, two things, I guess:</p>
<p>First, I remember the first time I came across location-via-nearby-hotspots, and I am not going to lie: I thought, &ldquo;oh, sure, clever.&rdquo;</p>
<p>And I also remember the first time I got a weird outcome from one of those databases, because I couldn&rsquo;t unstick a device from my old address across town and it dawned on me that hotspots are one of those things that do, indeed, move around at about the same rate as the general population (with some qualifications about the influence of the demographics of hotspot owners, which have surely shifted over the decades). I thought, &ldquo;too clever by half, I guess.&rdquo;</p>
<p>And that brings us to today: It was too clever by half to begin with, and now the underlying service isn&rsquo;t even getting updated, so the database is so much limburger in the heat ducts.</p>
<h3 id="the-google-geolocation-api-fix">The Google geolocation API fix</h3>
<p>But it&rsquo;s cool! You can &ldquo;solve&rdquo; the problem by getting an API key for Google&rsquo;s geolocation services and using that as a fallback for Geoclue&rsquo;s WiFi location source. It takes about two minutes, you uncomment a URL and add your API key to the end, restart the service (with Fedora it&rsquo;s <kbd>sudo systemctl restart geoclue.service</kbd>), and &hellip; your system location might be as correct as possible given the rickety underpinnings of WiFi-based geolocation (but honestly, if one of the world&rsquo;s richest surveillance companies trusts it, it must be viable) but the GNOME shell weather widget will still be screwy.</p>
<h3 id="the-hard-coded-locaton-fix">The hard-coded locaton fix</h3>
<p>So I complained to Ed that the weather widget was reporting that my location had shifted from Everett, WA to Accra, Ghana, and how I wish I could just hard-code my system location and leave it at that. I so seldom actually care and so often end up just telling my laptop where I am anyhow that it&rsquo;d just be easier.</p>
<p>With Fedora, and Geoclue 2.7, you can do that. You just have to create <kbd>/etc/geolocation</kbd> and make it look like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">39.971210     # latitude
</span></span><span class="line"><span class="cl">-78.957570    # longitude
</span></span><span class="line"><span class="cl">708           # elevation (m)
</span></span><span class="line"><span class="cl">1             # accuracy (m)</span></span></code></pre></div>
<p>(I used <a href="https://www.latlong.net/convert-address-to-lat-long.html">LatLong.net&rsquo;s address converter</a> to get my coordinates, and because I was feeling extra precise I used <a href="https://portlandmaps.com">PortlandMaps</a> to get my altitude. No, those are not my coordinates.)</p>
<p>But still with the Ghana thing in the widget! But when you click the widget, it opens the Portland location in GNOME Weather.</p>
<h3 id="the-fuckit-fix">The &ldquo;fuckit&rdquo; fix</h3>
<p>So I turned off location services in my settings, and suddenly the weather widget said Portland, OR and the GNOME Weather app said Portland, OR.</p>
<p><em>However</em>, GNOME Maps doesn&rsquo;t go to my current location when I open it with location services turned off. If I toggle them back on to use it, it goes &ldquo;home.&rdquo;</p>
<h3 id="in-conclusion">In conclusion</h3>
<p>&ldquo;This is terrible&rdquo;?</p>
<p>I mean, I have no idea how much meaningful stuff gets done by these services and how much is &ldquo;it saves you typing your zip code into the weather widget.&rdquo; And I guess if location <em>really</em> matters you&rsquo;re doing something else to get it onto the machine.</p>
<p>But the whole &ldquo;we just default to using this defunct service that was always a compromise on its best day, and if you don&rsquo;t like it you can just use Google&rdquo; thing &ndash; ugh.</p>
<h3 id="footnote">Footnote</h3>
<p>I messed with this on two separate machines, both of which were completely consistent with each other. I picked this entry back up on a third machine &ndash; also Fedora 39, also GNOME 45, and I have changed nothing on it &ndash; and wondered if it also thought I am in Everett, so I opened the weather widget.</p>
<p>Nope.</p>
<p>It thinks I&rsquo;m in Portland.</p>
<h2 id="chop-wood-carry-water">Chop wood, carry water</h2>
<p>Al went to her temple this afternoon to meet with the people who all work together to keep the temple running. They face a very prosaic set of organizing tasks. She told me a few of them and said &ldquo;sounds dumb, doesn&rsquo;t it?&rdquo;</p>
<p>No. It sounded very satisfying.</p>
<p>&ldquo;It&rsquo;s interesting to me,&rdquo; I said, &ldquo;that we know what people do when there is not an economic gun to their heads, and it&rsquo;s pretty similar. They go to their temple or synagogue or church or club or gaming group and do sort of prosaic things that serve their little communities they&rsquo;ve figured out for themselves. Sometimes, yeah, they&rsquo;re dickheads to each other, but the thing it&rsquo;s all about is that they have these associations they tend to, and what they&rsquo;re doing can be pretty simple, but it&rsquo;s satisfying and they&rsquo;re deciding some simple things &hellip;&rdquo;</p>
<p>&ldquo;But there&rsquo;s trust,&rdquo; she said.</p>
<p>&ldquo;But when there&rsquo;s an economic gun to your head, you don&rsquo;t get to choose those associations. And you&rsquo;re probably acting unnaturally in some way. The obvious path isn&rsquo;t the one that&rsquo;s most economically advantageous to your employer. Or there&rsquo;s some reason you have to be stupid about things. Because the institution demands it. And you do it because there&rsquo;s an economic gun to your head.&rdquo;</p>
<p>So we shared our discontents about work for the day. I recounted in minor detail two particularly squandered hours, and she talked about having to do something the wrong way because, she was told, the right way was &ldquo;a four course meal,&rdquo; whereas the organization is content to &ldquo;serve a hamburger&rdquo; to the mentally ill, the indigent, and the addicted.</p>
<p>We talked about what we wish we could do, then talked about what we probably ought to do. Then we talked about how to be as we do it.</p>
<p>I said, &ldquo;I&rsquo;m just saying to myself what I say to you when I feel boxed in and the real answer is about waiting &hellip;&rdquo;</p>
<p>&ldquo;Chop wood, carry water,&rdquo; she said.</p>
<figure><img src="/img/10bulls_05.jpg"
    alt="Woodcut: Taming the Bull from the Ten Bulls"><figcaption>
      <h4>Taming the bull</h4>
    </figcaption>
</figure>

]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-22</title>
      <link>https://mike.puddingtime.org/posts/2024-01-22-daily-notes/</link>
      <pubDate>Mon, 22 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-22-daily-notes/</guid>
      <description>FreshRSS seems close enough to feedly. Kitty on the Synology. E-readers vs. tablets.</description>
      <content:encoded><![CDATA[<h2 id="freshrss-on-the-synology">FreshRSS on the Synology</h2>
<p>I can make do with just about any RSS service provided it:</p>
<ul>
<li>Has a clean web UI</li>
<li>Allows third-party clients (e.g. Reeder, Unread)</li>
<li>Has some sort of provisioning for filtering.</li>
</ul>
<p>There are plenty that do the first two. That last requirement is a little harder, and it&rsquo;s why I&rsquo;ve largely stuck with Feedly despite a small break, when their management team demonstrated some bad ideas they eventually walked back.</p>
<p>But I&rsquo;ve been on this self-hosting kick, and I learned about <a href="https://freshrss.org/index.html">FreshRSS</a> while I was poking around with PikaPods, so after a quick OPML export of my Feedly list and a little experimentation I&rsquo;ve moved FreshRSS into the Synology:</p>
<ul>
<li>Clean web UI with keyboard shortcuts</li>
<li>Extensions framework</li>
<li>Sharing configuration</li>
<li>Works with <a href="https://reederapp.com/">Reeder</a></li>
</ul>
<p>The filtering works a couple of ways:</p>
<p>You can set up a &ldquo;mark as read&rdquo; filter with a simple syntax that includes operators like <kbd>inurl</kbd>, <kbd>intitle</kbd>, and <kbd>keyword</kbd>. That will handle new articles as they come in. That&rsquo;s the best option if you&rsquo;re using a client.</p>
<p>You can also use those operators in the web UI&rsquo;s search field then save them and apply them to current articles just to clean up the view. That&rsquo;s okay for cleaning up your current view before your filters start working on new stuff, or if you want to be able to create a one-click way to narrow a feed.</p>
<p>And your saved queries can also be referenced with the <kbd>search:QUERYNAME</kbd> operator, so if you model one out and like it you can make it more proactive.</p>
<p>You can guess what I don&rsquo;t care to read about from <em>The Oregonian</em> based on my initial list:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">inurl:/advice/
</span></span><span class="line"><span class="cl">inurl:/ducks/
</span></span><span class="line"><span class="cl">inurl:/betting/
</span></span><span class="line"><span class="cl">inurl:/nfl/
</span></span><span class="line"><span class="cl">inurl:/beavers/</span></span></code></pre></div>
<p>Give it time and it will grow. I&rsquo;ve only been using FreshRSS for a couple of days, so I haven&rsquo;t had time to be
exposed to everything, like the many, many, many articles that landed in the <kbd>/casino/</kbd> section between starting this draft over breakfast and coming back to wind things down after dinner, making wish The O would do like other newspapers do and segment its RSS feeds at least into the major sections.</p>
<p>As it is, they don&rsquo;t do that, <em>and</em> have a wildly flat and very granular IA, so you can&rsquo;t just filter out <kbd>inurl:/sports/</kbd> in one go, but at least they have reliable category URLs. At some point I will have to do the work of filtering out deal posts from all the tech sites, who are not at all incentivized to make it easier to avoid their affiliate link farming. Feedly has some sort of &ldquo;AI&rdquo; that creates meta-categories to filter on, so I could just tell it &ldquo;no deal posts&rdquo; and clean up a few edge cases.</p>
<p>I did look at a few others. <a href="https://tt-rss.org/">TinyTinyRSS</a> was a prime candidate, and even has a native Synology package. Performance wasn&rsquo;t great, though. A few others had no filtering.</p>
<h2 id="kitty-and-the-synology">Kitty and the Synology</h2>
<p>Also on the topic of the Synology, if anyone has gotten kitty&rsquo;s advanced features working with one I would love a guide or insight into how. The environment is just a tad too locked down and non-standard, and a recent skim down a GitHub issue suggested that there&rsquo;s not a lot of hope on that front. You can get as far as the Syno understanding that there&rsquo;s such a <kbd>$TERM</kbd> as <kbd>xterm-kitty</kbd>, but the stuff like <kbd>kitten ssh</kbd> has been a lost cause. Or rather, I <del>am</del> was running out of patience with it because there&rsquo;s a lot of magic on the happy path and then it gets pretty manual if you have to go off-road, and this is a Linux-based appliance we are trying to get this thing wedged onto, not some plain old box.</p>
<p>I changed that to <em>was</em> because I found <a href="https://github.com/kovidgoyal/kitty/issues/713">this thread</a> and it helped me figure out the small step I needed to take to get kitty working with my root account on the Syno.</p>
<p>And what a thread. It ends with the maintainer saying:</p>
<blockquote>
<p>In any case, as I have explained before, if you want to perpetually
stagnate the terminal ecosystem by insisting every terminal be xterm
(the biggest boat anchor on the entire ecosystem), please just use
xterm. kitty is not for you.</p>
</blockquote>
<p>I kinda get where he&rsquo;s coming from by the time the whole thing is over: Open source project owners are all over the map in terms of their approach to community interactions and management. Just yesterday I saw one who pleaded with a user who&rsquo;d decided to just go use another app to share some sort of exit feedback. People in <em>this</em> thread were doing the whole &ldquo;if this isn&rsquo;t addressed I will try something else&rdquo; thing that I imagine gets pretty grating if you&rsquo;re just some person making a thing and giving it away and are over whatever things in the ecosystem you are over. Like, there are a lot of projects devoted to strict compliance with What Has Come Before, and I don&rsquo;t think the *nix world has any shortage of adherence to What Has Come Before.</p>
<p>Anyhow, I usually don&rsquo;t do anything particularly complex over on the Syno, but I was having issues with tab completion, backspace, and command history going screwy whenever I was operating as root so it seemed worth fixing to just keep using kitty and not remember to use another terminal app for this particular hobby.</p>
<h2 id="e-readers-vs-dot-tablets">E-readers vs. Tablets</h2>
<p><a href="https://sixcolors.com/post/2024/01/two-e-readers-that-made-me-reconsider-why-i-use-e-readers/">Jason Snell on eink e-readers vs. tablets</a>.</p>
<p>I&rsquo;ve been through the &ldquo;maybe I want to just consolidate down into an iPad mini&rdquo; thing with my assorted e-ink devices, and I always come back to &ldquo;the reading experience is worse on a tablet.&rdquo; I&rsquo;ve been back and forth on which ecosystem, too, and will stick with Kobo, less as a features thing and more as a &ldquo;it&rsquo;s hard to be rid of Amazon but I can at least be less into Amazon&rdquo; thing.</p>
<p>The not-Nook/Kobo/Amazon space is interesting. I don&rsquo;t know if I am up to being that much of a resister to Big Ebook. I have a little Onyx Boox Palma and super wanted to like it, but it&rsquo;s just an e-ink Android tablet about the size of a &ldquo;Max&rdquo;-sized iPhone, and the e-ink/Android app experience with Kobo wasn&rsquo;t very good. There are other reading apps for it, but I don&rsquo;t know how location sync works in that ecosystem. Now that I have calibre-web set up I could get my books into anything, but I&rsquo;m being way too much of a perfectionist on questions like &ldquo;but what if I leave my e-reader behind and just want to use my phone for the train ride downtown&rdquo; or whatever.</p>
<p>On the flipside, there are some very good e-reader apps for Android that can talk to calibre-web in <a href="https://en.wikipedia.org/wiki/Open_Publication_Distribution_System">OPDS mode</a>. You don&rsquo;t get the location sync stuff &ndash; it&rsquo;s just a way to browse and retrieve your books &ndash; but if you can upload an epub to calibre-web it can come back down to a bunch of these apps, some of which do have for-pay location sync backends as an app feature.</p>
<p>Kinda academic right now: I have a nice and relatively new Kobo, I have a slightly more worn out but functional old Kobo, and I have them talking to my calibre-web install plus access to the Kobo store, Overdrive, and my Pocket articles. I don&rsquo;t need to go out and buy another e-reader just to be a little more indy.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-21</title>
      <link>https://mike.puddingtime.org/posts/2024-01-21-daily-notes/</link>
      <pubDate>Sun, 21 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-21-daily-notes/</guid>
      <description>A possible self-hosted pinboard replacement. Synology reverse proxies.</description>
      <content:encoded><![CDATA[<h2 id="linkding-a-possible-pinboard-replacement">LinkDing &ndash; a possible pinboard replacement</h2>
<p>We took Ben out to dinner for his birthday last night, came back to our room in Eugene, and I gave <a href="https://github.com/sissbruecker/linkding">Linkding</a>
a try on a PikaPod. It&rsquo;s very similar to <a href="https://pinboard.in">pinboard</a> in terms of the basic look, and it can import a pinboard export of the basic Netscape <kbd>bookmarks.html</kbd> file.</p>
<p>There are a few community tools that make it a reasonably complete pinboard replacement:</p>
<ul>
<li>A bookmarking extension for Firefox/Chrome. Works fine (though pinboard&rsquo;s tag suggesting is nice and linkding doesn&rsquo;t seem to have it)</li>
<li>The <a href="https://addons.mozilla.org/en-US/firefox/addon/linkding-injector/">linkding injector</a>, which you can connect to your instance to inject a sidebar of related bookmarks into your search results (Google, DuckDuckGo, kagi, and Bing)</li>
<li>The <a href="https://apps.apple.com/us/app/linkthing/id1666031776">LinkThing app for iOS,</a> which provides a decent mobile client (though they&rsquo;re still working on a share sheet for it and you have to use a Shortcut for now).</li>
</ul>
<p>For the way I use pinboard, that&rsquo;s all pretty good.</p>
<h2 id="getting-synology-reverse-proxying-and-ssl-working">Getting Synology reverse proxying and SSL working</h2>
<p>Once I had Linkding working on the PikaPod I ran into a few problems with my DNS and SSL, and it just reminded me that I&rsquo;ve been deferring a cleaner setup on my Synology.</p>
<p>I mentioned Marius Hosting&rsquo;s tutorials a few days ago, and he&rsquo;s got some stuff on how to set up <a href="https://mariushosting.com/synology-how-to-enable-https-on-dsm-7/">SSL on a Synology with LetsEncrypt</a>, and <a href="https://mariushosting.com/synology-how-to-use-reverse-proxy-on-dsm-7/">reverse proxies</a>. It&rsquo;s all concise and illustrated and &ldquo;just works.&rdquo; Combined with his increasingly efficient docs on <a href="https://www.portainer.io/">how to get portainer up and running</a> then use it to install an assortment of containers (<a href="https://mariushosting.com/how-to-install-linkding-on-your-synology-nas/">including the one for Linkding</a>), you can get a lot of eggs stuffed into that basket.</p>
<h2 id="pikapod-still-has-a-place">PikaPod still has a place</h2>
<p>It suits me to truly be self-hosting all this stuff, just as a matter of &ldquo;I wanted to learn how&rdquo; and &ldquo;if I&rsquo;ve got the thing, I should use it.&rdquo; PikaPod&rsquo;s cool, though, because it&rsquo;s one-click, cheap, and gives you a chance to kick the tires on these things before you do much work.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-19</title>
      <link>https://mike.puddingtime.org/posts/2024-01-19-daily-notes/</link>
      <pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-19-daily-notes/</guid>
      <description>Self-hosted Calibre-Web.</description>
      <content:encoded><![CDATA[<h2 id="self-hosted-calibre-web">Self-Hosted Calibre-Web</h2>
<p>I was up early this morning, bothered by that thing I knew I would be where failing to locally containerize Calibre-Web was bugging me, so in lieu of making it an 18-hour workday I got to fussing around with the assorted components I needed to orchestrate:</p>
<ul>
<li>Getting a Calibre-Web instance up and running in Docker</li>
<li>The DNS pieces</li>
<li>The router pieces</li>
<li>The local filesync pieces</li>
<li>The Kobo configuration piece</li>
</ul>
<p>It wasn&rsquo;t that bad in the end. Maybe an hour from start to finish. The apparently <a href="https://mariushosting.com/how-to-install-calibre-web-on-your-synology-nas/">most-read Synology/Docker howto person</a> has made a factory out of an idiosyncratic &ldquo;just make a one-time Synology user task to run Docker&rdquo; approach vs. a &ldquo;fill in these fields&rdquo; approach, but it helps bypass the &ldquo;Docker in the context of Synology&rdquo; issues you can run into, as well as the &ldquo;UI keeps changing issues.&rdquo;</p>
<p>The instructions worked fine, minus one false start because I want my desktop Calibre instance to just plop its stuff into a Syncthing folder the Synology can pick up, so there was a little work in making two sandboxes see each other on the filesystem.  I&rsquo;ve read it&rsquo;s bad news to do a straight network fs mount with Calibre/Calibre-Web, so letting SyncThing just do everything in each local idiom seems to make a little more sense. We&rsquo;ll see.</p>
<p>Getting books out of the Kobo and Kindle can be a hassle. They both sometimes &ldquo;have&rdquo; books that they don&rsquo;t have in any sense of a &ldquo;file&rdquo; abstraction sitting in a &ldquo;folder&rdquo; abstraction on local storage, so you&rsquo;re stuck not actually just emptying the device out for conversion, but going to your official web inventory and grabbing them from there one at a time. I appreciate (in a dismal, sour way) how they&rsquo;ve made it possible to &ldquo;backup your property&rdquo; without taking the hour or two of developer time it would take to implement &ldquo;show all, select all, download all.&rdquo; You have to want it. I get it. Their interests are not my interests.</p>
<p>So the final test was finding a book in a non-Kobo format that I had not yet downloaded to disk, downloading it, feeding it to my desktop Calibre instance, then doing a sync on the Kobo to pull it in. All the pieces worked: Calibre-Web served it up to the Kobo as a <kbd>.kepub</kbd> file.</p>
<p>This is all better than doing this on the PikaPod. While there&rsquo;s a turnkey charm to what they&rsquo;re doing, there was some pain on the remote filesystem side trying to negotiate an sftp mountpoint. I&rsquo;ve got a ton of books I&rsquo;m going to have to manually download from here and there and get into Calibre, so having the option to do that at my desk, on the couch, or wherever and knowing my Tailscale/SyncThing infra will keep the library in sync is more to my liking.</p>
<p>Even better, even if I get sick of the whole Calibre-Web part and any maintenance it requires, plain old Calibre is working well to sideload everything to whatever e-reader I want to use.</p>
<p>Anyhow. Here we are 20 minutes from the actual start of the day, which is going to be a full one. I&rsquo;m hoping things clear up enough to get to go see Ben, who turns 20 this week. This time 20 years ago I spent a week going out to the old &lsquo;87 Volvo, deicing it, digging out any new ice or snow accumulation, and making sure it would start to ensure safe travel to the site of the blessed event. It looks like that out there this week, but the wind is worse, the power outages are ongoing, and the tree in the neighbor&rsquo;s yard is shedding branches with loud cracks and crashes every few hours. So maybe it&rsquo;s going to be &ldquo;Happy Birthday&rdquo; sung over a Facetime call.</p>
<p>Okay. Saving and pushing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-18</title>
      <link>https://mike.puddingtime.org/posts/2024-01-18-daily-notes/</link>
      <pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-18-daily-notes/</guid>
      <description>I snarl because I care. In which PikaPods and Calibre-Web teach Mike there&amp;rsquo;s a 308 redirect.</description>
      <content:encoded><![CDATA[<h2 id="i-snarl-because-i-care">I snarl because I care</h2>
<iframe src="https://social.lol/@mph/111777506556037969/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>Every time I post a critique like this I feel like I&rsquo;m looking over my shoulder a little. It&rsquo;s an election year, everyone&rsquo;s on edge, and there is just this vibe about it all that is <em>intense</em>.</p>
<p>I&rsquo;m not going to try to paper over or sugarcoat my political leanings: Pretty &ldquo;left,&rdquo; in the basic political parlance. Not a Republican. Not a &ldquo;centrist.&rdquo; Not a &ldquo;moderate.&rdquo; Not a &ldquo;right-winger,&rdquo; &ldquo;fascist,&rdquo; or whatever.</p>
<p>Behaviorally, I vote Democratic, but I do not believe that it&rsquo;s my obligation to &ldquo;create unity&rdquo; during primaries, and I don&rsquo;t think the Democratic party represents my views or even really my interests in any &ldquo;forward progress&rdquo; sense of the word.</p>
<p>Ideologically, I don&rsquo;t like picking any label because I have been thinking about those labels for decades on decades and have seldom seen them actually help anyone be more clear on what anyone else believes. If I had to pick one, I&rsquo;d stick to &ldquo;socialist.&rdquo; But I was once on the national committee of a socialist organization I do not care to name and understood very clearly the vast daylight between me and any number of other &ldquo;socialist&rdquo; organizations. We even joked among ourselves that we got a small hoot out of people believing we were probably just sort of into European-style healthcare and better emissions control.</p>
<p>And I don&rsquo;t like the labels because I believe that you are what you do, not what you say you are. I really appreciate the phrase &ldquo;my political commitments&rdquo; as opposed to &ldquo;my political beliefs,&rdquo; because the idea of &ldquo;commitments&rdquo; naturally invites the question &ldquo;if they&rsquo;re commitments, what are you doing about them?&rdquo; That&rsquo;s a reminder for me, personally, when I think about opening my mouth on this stuff.</p>
<p>But even &ldquo;left&rdquo; and &ldquo;right&rdquo; have issues, as do &ldquo;conservative&rdquo; and &ldquo;liberal.&rdquo; We use those terms and there&rsquo;s some rough agreement, but I&rsquo;d much rather understand what someone is trying to <em>do</em> than understand some taxonomy of labels when these words are doing all kinds of work and mean so many things.</p>
<p>But when I snark about the cascading system failures going on around me, it&rsquo;s not because I think we&rsquo;d be better off with Republicans in charge. It&rsquo;s because I think the people who are in charge are failing us, and a. <em>they&rsquo;re in charge</em>, b. I don&rsquo;t <em>care</em> if they&rsquo;re the home team because they still need to be held accountable at the next opportunity (primaries, which is why believing primaries are for beating the base into alignment is a position you&rsquo;d expect the people who want to keep power to take), and c. no, they&rsquo;re not left enough for me. We should be building government housing and socializing healthcare.</p>
<p>My disgust with that pull quote up at the top is pretty simple: On what planet is &ldquo;enlightened&rdquo; a useful policy platform? Who <em>cares</em> what leaders <em>say</em>? What are they <em>doing</em>? Is there anything more Peak Portland Liberal than &ldquo;well, we know better so it&rsquo;s odd that things aren&rsquo;t working out.&rdquo;</p>
<h2 id="pikapods-and-calibre-web-again-dot">PikaPods and Calibre-Web again.</h2>
<p>I did all the setup on my PikaPod and Calibre-Web to get it talking to my Kobo and &hellip; something was very wrong. Sync wasn&rsquo;t working, none of the books in my collection were showing up as download candidates, etc. I remounted my Kobo and rolled back the config change that pointed it at the Calibre-Web API in favor of the Kobo store API and went to bed mildly disappointed but deciding there are worse things in the world than sideloading my entire library of ebooks onto a device I update once every five or eight years.</p>
<p>This morning it turned out it was bothering me more than I had let on to myself. One discrepancy I noticed was that most docs expect the service to be listening on <kbd>:8083</kbd>, but the URL it was generating in the UI was going to hit <kbd>:80</kbd>. When I did a straight <kbd>curl</kbd> I got &hellip; nothing. So I <kbd>curl -v</kbd>&rsquo;d the PikaPod with <kbd>:8083</kbd> and got &hellip; nothing again. So back to <kbd>:80</kbd> with <kbd>-v</kbd> and &hellip; oh &hellip; Calibre-Web&rsquo;s handy little &ldquo;paste this line into your Kobo config&rdquo; field was providing an unsecured URL and curl was stopping on a 308 redirect to the secured URL.  I guess <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308">308 is implemented inconsistently</a>, because it should have simply redirected to the secured URL with the request intact. I&rsquo;ve never even seen a 308, but my education in redirects stopped decades ago with an SEO cleanup.</p>
<p>Anyhow, <kbd>curl -v</kbd> to the secured URL with no port qualifier told me curl and the API were talking, so I remounted the Kobo, changed the config to point to the PikaPod&rsquo;s API endpoint and now there&rsquo;s ping. Plus a ton of duplicate books, because Calibre-Web is configured to serve up a <kbd>.kepub</kbd> (a Kobo-specific epub variant more amenable to location sync) as well as any <kbd>.epub</kbd> it can find, and I didn&rsquo;t take the time to narrow that down.</p>
<p>At least I can start the work day knowing the most mysterious part is working.</p>
<h2 id="say-what-again">Say what again?</h2>
<p><a href="https://pikapods.com">PikaPods</a> is a web service that lets you host common/popular webapps. It&rsquo;s pretty neat: You pick one, click the little deploy button, and it fires up a container with its own URL and the option to point a CNAME at it, plus instructions on enabling sftp connections if you need them. <a href="https://github.com/janeczku/calibre-web">Calibre-Web</a> is one of the services PikaPod will host for you. It&rsquo;s an online ebook library that works with <a href="https://calibre-ebook.com/">Calibre</a>, a popular means of converting ebook formats. Among its other capabilities, Calibre-Web can serve up your library to a Kobo device and manage location sync between all the clients. A nominally loaded PikaPod running Calibre-Web is supposed to cost only a couple of bucks a month, and the billing is all metered.</p>
<p>I gave PikaPod a try because the instructions for getting a Calibre-Web container to run on my Synology were all so impenetrable that I decided there had to be a better way. Ironically, by the time I had the PikaPod running I understood what I was getting wrong with the self-hosted containers. So there&rsquo;s a chance my inner autodidact will have no rest until I have my half-assembled container working correctly.</p>
<p>But PikaPod is cool.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-17</title>
      <link>https://mike.puddingtime.org/posts/2024-01-17-daily-notes/</link>
      <pubDate>Wed, 17 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-17-daily-notes/</guid>
      <description>Calibre-Web, Pikapod, paying for books. Small regrets. Patched patch.</description>
      <content:encoded><![CDATA[<h2 id="calibre-web">Calibre-Web</h2>
<p>I have a Synology with Docker on it, plus a bunch of community packages for assorted things and it&rsquo;s &hellip; fine. But people have been talking about this <a href="https://pikapods.com">Pikapods</a> thing so I gave it a spin with <a href="https://github.com/janeczku/calibre-web">Calibre-Web</a> as my test case. Right now I&rsquo;m at the &ldquo;got ping&rdquo; stage with it: It is up, configured, and sees my library, and I just figured out how to make it put a missing cover on a book.  I have not yet turned to getting my Kobo to talk to it, but omg I cannot wait to get my Kobo talking to it, because I think e-ink readers are both the best and worst technology I ever adopted, and I have a tool now that will allow me to make right the parts of that adoption that bother me the worst.</p>
<p>Stake whatever territory you want on the copyright front. I am an inconsistent hypocrite. In this particular use case, I am a hypocrite who happens to pay:</p>
<p>I supported my family for years with my writing. The person you read on these pages probably doesn&rsquo;t seem like it.  I am no longer a craftsman or a stylist. I am just this guy who still finds an outlet and a release in writing, but who does not really edit himself, and who understands that time-shifted 20 years give or take I might be the proprietor of the world&rsquo;s least listened to podcast or most unwatched YouTube channel. Writing is just the way I tell eight or nine people a day what I&rsquo;m into right now, and I deeply believe text you can skim is more <em>considerate</em> than forcing you to scrub  through a bunch of recorded rambling and ill-conceived attempts to force you into a parasocial connection.</p>
<p>But I pay. I pay for newspapers, I pay for newsletters, and I buy every single book I read (that I&rsquo;m not getting from the library). When my team found an open NFS mount full of O&rsquo;Reilly books on an old Solaris box in the back of a DC,  it was an easy decision to say &ldquo;failing disk, mount it <kbd>ro</kbd> and serve notice that it is leaving us&rdquo; because I was never so entrepreneurial or talented that I could afford the vanity of just giving my shit away: I had to sell it to someone if I didn&rsquo;t want to go back to soldiering or doing secretary work to eat. You go fight Big Content, and I get it, but I will also pay.</p>
<p>So this isn&rsquo;t me cackling and chortling because &ldquo;fuck paying for books and now I don&rsquo;t have to.&rdquo; Looking over what&rsquo;s in my new Pikapod, I&rsquo;m pretty sure I&rsquo;ve even paid twice for a big chunk of what&rsquo;s in there.</p>
<p>I&rsquo;m cackling and chortling because I&rsquo;m free of doing business with an entity I wish I hadn&rsquo;t. I don&rsquo;t care about the law, I care about what&rsquo;s right, and I bought every one of those books, so my duty to &ldquo;right&rdquo; is discharged.</p>
<h2 id="work">Work</h2>
<p>I bit off more than I can chew today. If anyone writes my biography, this is gonna be a weird exception to a largely prosaic and staid track record of &ldquo;safety first, move with deliberation.&rdquo;</p>
<p>But I bit off more than I can chew because I picked a dumb industry to work in, and I occasionally feel the need to thwart expectations and try out the whole &ldquo;break glass&rdquo; thing before retreating to my home position.</p>
<p>Just putting it on the record so you know who you&rsquo;re recommending when you see me asking for help with references: Occasionally I&rsquo;ll surprise you. It is not my intent to also terrify you.</p>
<h2 id="braus">braus</h2>
<p>I realized after pulling it down to my second machine that I didn&rsquo;t actually push my QoL changes to <a href="https://github.com/pdxmph/braus">my braus fork</a>. Fixed that.</p>
<p>Okay. Done. Time to get the Pikapod talking to my Kobo.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-16</title>
      <link>https://mike.puddingtime.org/posts/2024-01-16-daily-notes/</link>
      <pubDate>Tue, 16 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-16-daily-notes/</guid>
      <description>Mutual of Omaha&amp;rsquo;s MIME Kingdom. Another browser picker.</description>
      <content:encoded><![CDATA[<h2 id="mutual-of-omaha-s-mime-kingdom">Mutual of Omaha&rsquo;s MIME Kingdom</h2>
<p>I was feeling very accomplished with my whole &ldquo;<a href="https://mike.puddingtime.org/posts/2024-01-14-daily-notes/#junction-xdg-open-mutt-and-html-mail">make HTML stuff open in mutt good</a>&rdquo; thing until suddenly it didn&rsquo;t work with Chrome when I tried it on another machine. Oh, right &hellip; Chrome&rsquo;s on a Flatpak on this one, so when it says &ldquo;<kbd>/tmp/some-lengthy-attachment-name-as-a-hash.html</kbd> doesn&rsquo;t exist, what are you on about,&rdquo; it actually means &ldquo;I can&rsquo;t see this because I am in a Flatpak sandbox.&rdquo;</p>
<p><a href="https://flathub.org/apps/com.github.tchx84.Flatseal">Flatseal</a> lets you do something about that. I added <kbd>/tmp</kbd> to the things Chrome can touch and that got it unstuck.</p>
<p>Why is Chrome even on a Flatpak on this one? I don&rsquo;t know. I set these machines up about three months apart from each other. Sunspots, I guess. I just went ahead and uninstalled it, installed Fedora&rsquo;s packaged version, and pointed my custom profile <kbd>.desktop</kbd> files at the <kbd>google-chrome</kbd> binary. Upside: The UI fonts look better now.</p>
<h2 id="braus">Braus</h2>
<p>Also in the &ldquo;open links in a browser of your choice&rdquo; sweepstakes is the unmaintained <a href="https://github.com/properlypurple/braus">braus</a>, which has the benefit of working more reliably than either <a href="https://browsers.software">browsers</a> or <a href="https://github.com/sonnyp/Junction">Junction</a> in some circumstances. Go figure.</p>
<p>Issues: Tiny, unreadable font. No icon (a small thing, but there it is).</p>
<p>I <a href="https://github.com/pdxmph/braus">forked it</a>, made the fonts 1em/1rem, and linked to a browseresque icon already on the platter for the <kbd>.desktop</kbd> file.</p>
<p>I should go file bug reports on the other two: I use them, they&rsquo;re actively maintained, and them&rsquo;s the rules.</p>
<h2 id="back-in-ox-hugo">Back in ox-hugo</h2>
<p>I&rsquo;ve been using ox-hugo the past several days. It&rsquo;s comfortable.</p>
]]></content:encoded>
    </item>
    <item>
      <title>soldier always</title>
      <link>https://mike.puddingtime.org/posts/2024-01-16-soldier-always/</link>
      <pubDate>Tue, 16 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-16-soldier-always/</guid>
      <description>Pay it forward.</description>
      <content:encoded><![CDATA[<p>When I was a young private I made a very stupid financial mistake that finally caught up to me while I was on a long leave between duty assignments. I arrived at Ft. Bragg, excited to be at my new station, and learned within a week that I&rsquo;d left a bill unpaid long enough that the creditor finally did what they can do to soldiers more easily than they can do to most anyone else,  and had the Army garnish my wages.</p>
<p>I have no idea what it&rsquo;s like now, but at the time that meant that they just took all your paycheck minus maybe $20 to cover stuff you don&rsquo;t get for &ldquo;free&rdquo; or couldn&rsquo;t beg from the supply sergeant, so I was looking at six or eight weeks of being flat broke: I&rsquo;d spent all my money living it up on leave.</p>
<p>The whole thing was pretty humiliating: Brand new to my unit, wanting to make a good impression, and suddenly my entire chain of command had me down as a deadbeat.</p>
<p>My team chief told me what was going on and said it was a bad look for me, and he asked if I was going to be okay. The one bright spot was that I&rsquo;d set up a bunch of allotments, and the Army wouldn&rsquo;t disrupt those, so other bills were getting paid, and some money I was sending home wouldn&rsquo;t be touched. So I was going to be fine, I was just embarrassed, and $20 was going to be okay to cover toothpaste, starch, and boot polish. My team chief was careful to point out that boot polish and starch were my new priorities, because I needed to not look like the bum I appeared to be.</p>
<p>He ended the conversation with &ldquo;you&rsquo;re one of those new 31Us &hellip; so you know a lot about computers?&rdquo;</p>
<p>Yes, I knew a lot about computers. So much so that back in advanced training, when we got to the instructional block on the UNIX-based combat control system the instructor had gotten sick of me answering all his questions about UNIX in too much detail and just put me in the front of the class to explain it to everyone else.</p>
<p>&ldquo;Can you come over to my house for dinner? I need help with mine.&rdquo;</p>
<p>So I came over and helped him with a computer he&rsquo;d just gotten and couldn&rsquo;t get to work. Then he offered to drive me back to the barracks.</p>
<p>On the way back he said, &ldquo;I need to stop by the store,&rdquo; so I said okay. He put a bunch of stuff in his cart &ndash; shoe polish, starch, three cartons of my brand of smokes, coffee, junk food. When he let me off at the barracks he handed me the bags.</p>
<p>&ldquo;Save your money for beer until this is over.&rdquo;</p>
<p>I said thanks, embarrassed. He said &ldquo;mission first, people always.&rdquo;</p>
<p>On this particular day I am trying to pay that forward. It is not being made easy by everyone but the human in the middle of it all, but I&rsquo;m going to try.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-14</title>
      <link>https://mike.puddingtime.org/posts/2024-01-14-daily-notes/</link>
      <pubDate>Sun, 14 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-14-daily-notes/</guid>
      <description>Junction, xdg-open, mutt, and html attachments. Launching Chrome directly into a profile.</description>
      <content:encoded><![CDATA[<h2 id="pdxtst">#pdxtst</h2>
<p>Wow, yesterday was nerve-wracking. Listening to the wind howl wasn&rsquo;t great before we lost power, and it was awful after we did around 2:30 in the afternoon. Plus there are all the things that start making noise once the power is out, like the UPS and smoke detectors. And because of the extreme cold, one of the motorcycle disc locks started going off every ten minutes or so until I went out and got it loose and brought it inside to thaw.</p>
<p>Due to whatever local peculiarities in the grid, we could look out any window and see lights on around us after the sun went down, and when the Portland General map was willing to load we could see the outage reports disappearing all around us until we were part of a little island clustered around the neighborhood park.</p>
<p>Power outages aren&rsquo;t rare in this neighborhood. I think before this one we&rsquo;ve never gone more than eight hours or so. This time the lights stayed out until 5:30. It got down to 44 in the house overnight, and would have been worse if not for the gas fireplace holding the line until we went to bed.</p>
<p>Anyhow &hellip; no, it wasn&rsquo;t great, but it was also not life in the RV across the street, or a tent a block away. We could still sleep in a bed, keep the phones charged, or take one of several friends up on an offer to come over if we needed to.</p>
<h2 id="junction-xdg-open-mutt-and-html-mail">Junction, xdg-open, mutt and HTML mail</h2>
<p>The whole &ldquo;I want to use a plaintext mail client on a GUI desktop thing&rdquo; has been messy for a super long time. Excavating my mutt mailcap, I can see a bunch of swings at it going back 15 years. I thiiiink I might have finally figured out a setup that&rsquo;s still got a few rough edges but seems stable.</p>
<p>I&rsquo;ve got <a href="https://github.com/sonnyp/Junction">Junction</a> installed from a flatpak, and I&rsquo;ve got it set as the default browser (in GNOME that&rsquo;s <code>Settings -&gt; Default Apps -&gt; Web</code>), and as the default for the HTML file type (<code>xdg-mime default re.sonny.Junction.desktop text/html</code>).</p>
<p>In my <code>~/.mutt/mailcap</code> I&rsquo;ve got:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">text/html; xdg-open %s &amp;&gt; /dev/null &amp;; nametemplate=%s.html
</span></span><span class="line"><span class="cl">application/*; xdg-open %s &amp;&gt; /dev/null &amp;;
</span></span><span class="line"><span class="cl">image/*; xdg-open %s &amp;&gt; /dev/null &amp;;</span></span></code></pre></div>
<p>mutt defaults to the plaintext version of a message when I open it, but I can tap <code>v</code> and select the <code>text/html</code> part to bring up Junction.</p>
<p>I tried living with <a href="https://w3m.sourceforge.net/">w3m</a> as my default text-mode browser for reading HTML mail inline, but once I started counting the number of times I went ahead and bailed to a GUI browser I realized it&rsquo;s not a great experience. So I just let it display the plaintext version first, which is usually more readable than whatever w3m is going to render.</p>
<p>I also tried using Firefox as my default GUI browser for HTML mail, but I use Firefox for personal stuff and Chrome for work stuff, so it&rsquo;s helpful to open an HTML mail in the browser that&rsquo;ll have the right cookies.</p>
<p>So the net of it is:</p>
<ul>
<li>Junction can grab links from apps and pop up a selector, so a link from work Slack can open in Chrome and a link from a personal email can open in Firefox.</li>
<li>Junction can send HTML mail to a chosen browser.</li>
</ul>
<h2 id="making-chrome-profiles-available-from-gnome-launcher-and-junction">Making Chrome profiles available from GNOME launcher and Junction</h2>
<p>When launched from Junction or the GNOME launcher Google Chrome will launch with a profile selector, which is fine: I have two profiles, but usually only use the work-related one. So as a matter of curiosity I wanted to see if I could get Junction to offer profiles instead of a generic Chrome icon. You just need to make <code>.desktop</code> files for each profile and tell Chrome the directory to launch from.</p>
<p>Running from Flatpak as I do, I don&rsquo;t think Chrome&rsquo;s quite &ldquo;normal&rdquo; so I made data directories for each of my profiles and then made a pair of <code>.desktop</code> files. They look like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[Desktop Entry]
</span></span><span class="line"><span class="cl">Version=1.0
</span></span><span class="line"><span class="cl">Name=Personal Chrome
</span></span><span class="line"><span class="cl"># Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
</span></span><span class="line"><span class="cl"># From Ubuntu&#39;s language-pack-kde-XX-base packages, version 9.04-20090413.
</span></span><span class="line"><span class="cl">GenericName=Web Browser
</span></span><span class="line"><span class="cl"># Gnome and KDE 3 uses Comment.
</span></span><span class="line"><span class="cl">Comment=Access the Internet
</span></span><span class="line"><span class="cl">Exec= flatpak run com.google.Chrome %U --user-data-dir=/home/mph/.config/google-chrome/pdxmph
</span></span><span class="line"><span class="cl">StartupNotify=true
</span></span><span class="line"><span class="cl">Terminal=false
</span></span><span class="line"><span class="cl">Icon=/home/mph/.local/share/icons/google-chrome.png
</span></span><span class="line"><span class="cl">Type=Application
</span></span><span class="line"><span class="cl">Categories=Network;WebBrowser;
</span></span><span class="line"><span class="cl">MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/ftp;x-scheme-handler/http;x-scheme-handler/https;
</span></span><span class="line"><span class="cl">Actions=new-window;new-private-window;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Desktop Action new-window]
</span></span><span class="line"><span class="cl">Name=New Window
</span></span><span class="line"><span class="cl">Exec= flatpak run com.google.Chrome %U --user-data-dir=/home/mph/.config/google-chrome/pdxmph
</span></span><span class="line"><span class="cl">[Desktop Action new-private-window]
</span></span><span class="line"><span class="cl">Name=New Incognito Window
</span></span><span class="line"><span class="cl">Exec= flatpak run com.google.Chrome %U --user-data-dir=/home/mph/.config/google-chrome/pdxmph</span></span></code></pre></div>
<p>The &ldquo;Exec&rdquo; lines are the pertinent ones.</p>
<p>Once set up, and after running  <code>update-desktop-database ~/.local/share/applications</code>, Junction will pick them up as a pair of distinct browsers.</p>
<p>It&rsquo;s a little hacky, and I think if you are running Chrome from outside Flatpak your approach will vary &ndash; there may be proper data directories in your <code>.config</code> hierarchy somewhere.</p>
<h2 id="vampire-survivors">Vampire Survivors</h2>
<p>Still playing. When you get to the late levels (approaching 100) or late into the round (approaching 30 minutes) and your weapons and powerups are maxed, it is almost psychedelic: Just thousands of creatures all running into this whirling, swirling vortex of destruction. The sound of all the weapons and powerups and exploding bad guys reminds me of being in the slots section of a busy casino.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-1-13</title>
      <link>https://mike.puddingtime.org/posts/2024-01-13-daily-notes/</link>
      <pubDate>Sat, 13 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-13-daily-notes/</guid>
      <description>offlineimap. neomutt.</description>
      <content:encoded><![CDATA[<h2 id="offlineimap">offlineimap</h2>
<p>I put it back. mutt&rsquo;s faster from a local Maildir even with all the caching turned on when it uses IMAP.</p>
<p>Here&rsquo;s a systemd unit for it that can go in <code>~/.config/systemd/user/offlineimap.service</code> :</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[Unit]
</span></span><span class="line"><span class="cl">Description=Offlineimap Service for account %i
</span></span><span class="line"><span class="cl">Documentation=man:offlineimap(1)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Service]
</span></span><span class="line"><span class="cl">ExecStart=/usr/bin/offlineimap -a %i -u basic
</span></span><span class="line"><span class="cl">Restart=on-failure
</span></span><span class="line"><span class="cl">RestartSec=60
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Install]
</span></span><span class="line"><span class="cl">WantedBy=default.target</span></span></code></pre></div>
<p><code>systemctl --user enable offlineimapx.service</code> and that&rsquo;s all.</p>
<h2 id="neomutt">neomutt</h2>
<p>I read that you can pretty much just remove mutt and install neomutt and stuff will &ldquo;just work,&rdquo; but that has not been my experience. There are a few errors due to the way I&rsquo;ve set up some multi-character macros, but that&rsquo;s a documented thing with a workaround.</p>
<p>The main weirdness I can&rsquo;t figure out is that</p>
]]></content:encoded>
    </item>
    <item>
      <title>For I have no screen and I must scream</title>
      <link>https://mike.puddingtime.org/posts/2024-01-13-for-i-have-no-screen/</link>
      <pubDate>Sat, 13 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-13-for-i-have-no-screen/</guid>
      <description>An accidentally long remembrance of my time among the Linux reactionaries.</description>
      <content:encoded><![CDATA[<p>I went back and forth on this title because the first thing I thought this morning after I thought &ldquo;I wonder how much snow there is out there&rdquo; was &ldquo;to use Xorg is to be entombed in the flesh of a living corpse,&rdquo; and that could have been a fine heading, too. But then a thing broke in my stack as I sat down to write and I spent a few more early moments of the day working through the Discourse of a package maintainer I depend on but who is so pedantic, prickly, and bitchy to his users that by the time I was figuring out how to apply his predictably obtuse and passive aggressive advice I couldn&rsquo;t help but imagine getting into a slap fight with him about that potential heading.</p>
<p>So here we are. This will not attract that kind of attention.</p>
<p>But it is. To be entombed in the flesh of a living corpse, that is.</p>
<p>Anyhow, why would I say that? And what does it have to do with screens?</p>
<p>Okay.</p>
<p>So, over years of Mac use I came to depend on this little haxie called <a href="https://choosy.app/">Choosy</a>, which does one thing: When you click a link that is in an app that is not a browser, it pops up a menu of all your installed browsers and lets you pick the one to open the link in. It has gotten a lot smarter over the years: You can add browser profiles to the list, you can set up very basic rules (&ldquo;always use the first browser on this list that is open in this order,&rdquo; for instance) and more advanced rules (&ldquo;use this browser for this domain.&rdquo;)</p>
<p>It&rsquo;s great for stuff like &ldquo;clicked a link in my work Slack and I want that to open in Chrome to my work profile&rdquo; vs. &ldquo;clicked a link in a personal Slack for complaining about Metafilter&rdquo; that I want to open in Firefox.</p>
<p>There are a few things like that Linux-land: <a href="https://browsers.software/">Browsers</a> is one, and <a href="https://github.com/sonnyp/Junction">Junction</a> is another. They aren&rsquo;t as complete as Choosy, but they meet the basic use case, which is &ldquo;work links open in this, personal links open in that.&rdquo; Both run inconsistently across my several machines, despite them all having pretty closely sycned configs and all running on the same distro and desktop.</p>
<p>Sometimes Junction just won&rsquo;t open a link. Sometimes Browsers appears below every other window and just sits there, unseeable and unclickable until I move all the other windows out of the way to get at it, because it does something to hide from the task switcher and I have to just hope that it appears at a random spot on the desktop that is not underneath something else.</p>
<p>So last night it finally got to that point where I couldn&rsquo;t deal with it any longer. After a bunch of troubleshooting, installing from source, etc. etc. I thought &ldquo;I wonder if this is an Xorg thing.&rdquo;</p>
<p>I&rsquo;ve been using Xorg on my machines because screen sharing in Zoom is weird in Wayland.</p>
<p>I <em>thought</em> it was unable to share individual windows on a call because by default when you share screen in Zoom on Wayland your choices include &ldquo;the whole screen&rdquo; and &ldquo;a region of the screen you have to draw with the most ungodly and clumsy UI.&rdquo; There is no tidy &ldquo;just share this one window&rdquo; option, which is a feature you depend on if you need to share the screen but don&rsquo;t want everyone to see all your notifications or other windows, and hence why I was using Xorg for work instead of Wayland, which has done nothing else at all to bother me.</p>
<p><em>Unless!</em></p>
<p>Unless you go into Zoom&rsquo;s screen sharing preferences, pick the advanced options, and tell it that under Wayland it is to use Pipewire. Then the sharing options change and you get &ldquo;use system desktop capture&rdquo; and &ldquo;use system window capture&rdquo; when sharing. That pops up a little transient window that lets you pick the right window.</p>
<p>So once I learned that, I just set my default desktop session back to Wayland and checked to see if that would also solve my Browsers/Junction problem. Yup. Both started working fine.</p>
<p>Which more or less gets us to the heading, which was written to not attract the attention of a certain kind of person.</p>
<p>But it is!</p>
<p>To be trapped in the flesh of a living corpse, that is.</p>
<p>The whole time I was trying to debug this thing, I kept thinking &ldquo;I know all these people are salty about it, but what the fuck did Wayland ever do to me?&rdquo; and the only answer I could come up with was &ldquo;not let Zoom do screen sharing the right way.&rdquo; But because empathy is something that separates us from the lower orders, I was able to <em>generalize</em> from that insight and realize that my papercut is surely just one of hundreds, and even though it may be the one papercut I could attribute to Wayland, there were surely people with two or three or eight papercuts.</p>
<p>But in addition to <em>empathy</em> I also have <em>experience.</em></p>
<p>In The Linux People, that is. Because before I was a director of IT, a director of business operations, a director of engineering, or a director of tech pubs, I was a writer with the very distinct niche of &ldquo;knows how to use Linux, arrived there by way of an old school *nix, but is more from what we might call <a href="https://web.archive.org/web/20180218045352/http://www.cryptonomicon.com/beginning.html">the Neal Stephenson wing</a> of the Linux party and is more enamored with <a href="https://web.archive.org/web/20000529125023/http://www.wenet.net/~scoville/PCarticle.html">UNIX as literature</a> than UNIX as the bestest.&rdquo;</p>
<p>So over years of writing books and bits of books and articles and reviews about Linux, moderating Linux forums, getting berated by a squad of eight IBM marketing executives for giving too much credit to Oracle for legitimizing Linux as an enterprise platform, and getting cornered by esr in the back hall of a Linux expo so he could twist my arm to write an editorial demanding Linus host the Linux kernel project on Sourceforge (I didn&rsquo;t do it, and that&rsquo;s why you all owe me for the creation of git in some small way), I was working from a certain anthropological remove.</p>
<p>One of the earliest things my observations taught me was that Linux as an idea had a weird messaging problem: Was it about the underlying technology &ndash; its <em><a href="https://en.wikipedia.org/wiki/POSIX">POSIX adjacency</a></em> I guess you could say &ndash; or was it about the means of production/distribution &ndash; its <em>openness</em>?</p>
<p>Because Linux was &ldquo;new,&rdquo; arriving after a pretty solid decade of Microsoft hegemony, it attracted the language of novelty, challenge to the status quo, and perhaps revolution.</p>
<p>I certainly came across a lot of actual &ldquo;computing progressives&rdquo; in the Linux world. But after a few years of managing the forums and the letters to the editor and the comment sections, I came to realize that the most vocal and opinionated segments of users were the smallish crew of actual old-school for-real UNIX old-timers and a much larger segment of people who were still mad about <a href="https://en.wikipedia.org/wiki/OS/2">OS/2 Warp</a>, complete with a <em>Dolchstoßlegende</em> about Microsoft and the loss of what should have been the Thousand Year Reign of &hellip; fucking IBM?</p>
<p>That latter crew?</p>
<p>They were barely manageable as community members before 9/11 &ndash; weird uncles, Robert Bork stans, and Whitewater investigation enthusiasts who had made a hobby of fine-tuning X11 font rendering and custom compiling printer drivers &ndash; who then descended into a very peculiar paranoia <em>post</em>-9/11 that included bizarre connections between Bill Gates and &ldquo;Islamofascism&rdquo; and dashing off the occasional anonymous death threat to me at three in the morning when one of my Linux sites did a run-of-network ad for Microsoft Office.</p>
<p>Over time I learned that anyone whose profile placed them in Texas or North Carolina but who insisted on Commonwealth &ldquo;s&rdquo; instead of American &ldquo;z&rdquo; probably had the reactionary Linux goon gene. Day-to-day conversation also revealed them to have day jobs as insurance adjusters and general contractors who nevertheless referred to the HP All-In-One on a sagging particle board desk in the living room as &ldquo;one of my boxes,&rdquo; and their favorite anecdotes involved refusing to help people with computers unless they agreed to install SuSE.</p>
<p>They suffered from deep confusion over whether a proliferation of desktop standards was good because <em>vague handwaving about genetic diversity and possibly allusions to God Emperor Leto II</em> or terrible because <em>angry, tearful remembrances of our failure to will OS/2 into dominance in the face of Microsoft&rsquo;s Sauron-like corruption of all that is clean and pure about computing</em>. And a deep hatred of change. They had that, too.</p>
<p>Some of that was social and/or temperamental. Some of it was a curdled kind of aspiration: They liked fucking around with computers, admired &ldquo;technical&rdquo; people, and responded very well to opinionated screeds about the right/most secure way to do a computer thing (dude &ndash; just leave the NFS mount open, I promise nobody wants to steal your LaTeX notes on printer drivers and you&rsquo;re going to make yourself sick if you keep this up) but couldn&rsquo;t invest so much time in their BOfH cosplay that change was easy for them.</p>
<p>Anyhow, I am sure many of those people are facing federal charges for their participation in January 6 and I wonder if the Gentoo build they started before piling into their PT Cruisers to storm the capitol finished by the time they made bail.</p>
<p>Which is all to say, it was easy to get things all twisted about what Linux is to everyone in its orbit. Yes, there are starry eyed revolutionaries, neophiles, Stallmanites, and aethetes, but there are also angry reactionaries, luddites, traditionalists, and Microsoft conspiracy theorists (who can step you all the way from OS/2 Warp to the Gates Foundation&rsquo;s work to stop malaria) who aren&rsquo;t going to like anything different.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-01-11</title>
      <link>https://mike.puddingtime.org/posts/2024-01-11-daily-notes/</link>
      <pubDate>Thu, 11 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-11-daily-notes/</guid>
      <description>Secrets of the ancients.</description>
      <content:encoded><![CDATA[<h2 id="secrets-of-the-ancients">Secrets of the Ancients</h2>
<p>I felt a little nostalgic for my old <a href="https://github.com/kaushalmodi/ox-hugo">ox-hugo setup</a> today. What was so great about it?</p>
<ul>
<li>One big org file.</li>
<li>Your stuff ends up in a regular Markdown file for portability.</li>
<li>Pretty nicely wired up in Doom&rsquo;s menu structure: <code>SPC X b d</code> and a daily post is underway.</li>
</ul>
<p>I took a look in <code>config.org</code> and it looked like all the config was still there, so I started a daily post. type type type type type &hellip; saaaaave? What was supposed to happen next? Whatever it was, it didn&rsquo;t happen. I tried the whole &ldquo;close your eyes and start typing&rdquo; thing to see if muscle memory would take over, but no &hellip; I hadn&rsquo;t used this setup since last June and it was gone from my fingers.</p>
<p>More fiddling and fussing &ndash; it turned out there was no muscle memory to forget because I&rsquo;d had it set up to autopublish on save. One of the cool things about <code>ox-hugo</code> is that if you leave a post heading in <code>TODO</code> state, it&rsquo;s a draft, so saving and auto-publishing is safe, even if you forget and wander off and push another commit somewhere.</p>
<p>But saving availed me nothing &hellip; huh &hellip; more poking.</p>
<p>Oh, right &hellip; I took <code>ox-hugo</code> out of my <code>packages.el</code> when I stopped using it to keep things light.</p>
<p>Now it&rsquo;s working again.</p>
<p>And wow did I just elide a ton of stuff I had so step back through to get it to where it &ldquo;just worked&rdquo; again. My <code>config.org</code> was full of helpful notes like:</p>
<blockquote>
<p>Of particular interest: <code>org-hugo-auto-set-lastmod</code>, which is set <code>'t</code> in a lot of examples. This one is pesky because when set <code>'t</code> it will bump the date on posts that don&rsquo;t have a <code>date:</code> property set (in favor of org-hugos <code>EXPORT_HUGO_DATE</code>). You don&rsquo;t get bit until you have <code>org-hugo-auto-export-on-save</code> set, at which point fat-fingering a save in the wrong post will change its mod date and hence its published date, teleporting it into the future.</p>
</blockquote>
<p>&hellip; but the whole setup was still littered with stuff I couldn&rsquo;t understand. Like &hellip;</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"> <span class="nv">COMMENT</span> <span class="nv">Local</span> <span class="nv">Variables</span> <span class="ss">:ARCHIVE:</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span> <span class="nv">Local</span> <span class="nv">Variables:</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span> <span class="nv">eval:</span> <span class="p">(</span><span class="nv">org-hugo-auto-export-mode</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span> <span class="nv">End:</span></span></span></code></pre></div>
<p>Why the COMMENT thing? Why the ARCHIVE thing? Why &ldquo;End:&rdquo;  I don&rsquo;t remember how I learned that stuff or why it is what it is. I am pretty sure there were 10th century Saxon peasants who understood more about how ancient Roman highways were engineered than I was able to understand about my own setup.</p>
<p>I don&rsquo;t think, the day before I was let go from, er, &ldquo;Puppet by Perforce&rdquo; that I imagined I&rsquo;d spend as much time as I did doinking around with org-mode blogging, but wow did I. It was fun. I can tell it was fun because I was leaving myself paragraph-long notes on minor configuration issues.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-01-09 (mutt noodling edition)</title>
      <link>https://mike.puddingtime.org/posts/2024-01-09-daily-notes/</link>
      <pubDate>Tue, 09 Jan 2024 10:41:05 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-09-daily-notes/</guid>
      <description>Multi-account, GPG-secure mutt configs. Mutt message scoring with Ruby, and score color-coding.</description>
      <content:encoded><![CDATA[<h2 id="multi-account-gpg-secured-mutt-config">Multi-account, GPG-secured mutt config</h2>
<p>I keep having to reinvent this every few years, and I always stitch it together from assorted sources, mostly because Google sort of shifts around now and then. So:</p>
<ul>
<li>Given a Gmail account with IMAP access turned on</li>
<li>Given a Fastmail account using IMAP</li>
<li>Given mutt, with your configuration in <code>~/.mutt</code> and with <code>muttrc</code> and <code>macros</code> files.</li>
<li>Given a working gpg config you can use to encrypt/decrypt</li>
</ul>
<p>There are all sorts of ways to handle mutt config for assorted providers. The examples here are working right now, in early 2024. They probably have bits of cruft and lint because my config has been a work in progress since some time in the late 20th century.</p>
<h3 id="overview">Overview</h3>
<p>You&rsquo;re making profiles to do this: One for each of your accounts that will hold account specific config information. If you currently have a monolith config in mutt, you can lift a lot of stuff out of it and move it into a profile, then source the profile in your main <code>muttrc</code>.</p>
<p>You&rsquo;re also going to make and encrypt a credential file for each account. Some people do this all in one file and use account hooks to make sure <code>imap_user</code>, <code>imap_password</code> and <code>smtp_password</code> are set correcctly depending on the account you&rsquo;re operating in. I chose to make a file for each account.</p>
<p>You&rsquo;re going to make macros that source the profiles when you want to switch between them.</p>
<h3 id="0-pre-config-with-gmail-and-fastmail">0. Pre-config with Gmail and Fastmail</h3>
<p>I&rsquo;m not going to go into a ton of detail here:</p>
<ul>
<li>Gmail needs to have less secure app access turned on. Find it in your account settings. If you&rsquo;re doing this for a work account, it may be your admin hasn&rsquo;t enabled this. Have fun fighting city hall, in that case.</li>
<li>If you have a GSuite admin, they need to have enabled all IMAP clients, not just OAuth ones.</li>
<li>If you have 2FA turned on with Google, you will need to enable an application password.</li>
</ul>
<p>For Fastmail:</p>
<ul>
<li>You need to have an app password set up for mutt. <code>Settings -&gt; Privacy and Security -&gt; Integrations -&gt; App passwords</code></li>
</ul>
<h3 id="1-the-profile-files">1. The profile files</h3>
<p>Make profile files for each of your accounts. I name them <code>workplace.profile</code>, <code>fastmail.profile</code>, etc. It doesn&rsquo;t matter there&rsquo;s no required convention. It&rsquo;s a good idea to use the first one as the template for the second one.</p>
<p>This is an example of my Fastmail profile. Note line 6:</p>
<p><code>source &quot;gpg -d ~/.mutt/passwords.gpg |&quot;</code></p>
<p>That&rsquo;s where your credentials will come from. I&rsquo;ll show that file next.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># -*- muttrc -*-</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Mutt sender profile : personal/default</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">unset</span> folder
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">smtp_authenticators</span> <span class="o">=</span> <span class="s1">&#39;gssapi:login&#39;</span> <span class="c1"># fastmail needs this</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">imap_authenticators</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">source</span> <span class="s2">&#34;gpg -d ~/.mutt/passwords.gpg |&#34;</span> 
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">spoolfile</span> <span class="o">=</span> <span class="s2">&#34;imaps://imap.fastmail.com&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">folder</span> <span class="o">=</span> <span class="s2">&#34;imaps://imap.fastmail.com/INBOX&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">postponed</span><span class="o">=</span><span class="s2">&#34;+Drafts&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">hostname</span><span class="o">=</span><span class="s2">&#34;yourdomain.com&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">signature</span><span class="o">=</span> <span class="s2">&#34;~/.mutt/personal.sig&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">from</span><span class="o">=</span> <span class="s2">&#34;Bob Jones &lt;bob@yourdomain.com&gt;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">realname</span> <span class="o">=</span> <span class="s2">&#34;Bob Jones&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">smtp_url</span> <span class="o">=</span> <span class="s2">&#34;smtps://bobjones@fastmail.com@smtp.fastmail.com:465&#34;</span> <span class="c1"># use your fastmail username, not your email address</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">imap_user</span> <span class="o">=</span> <span class="s2">&#34;bobjones@fastmail.com&#34;</span> <span class="c1"># use your fastmail username here, too</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># set the status to show which profile I&#39;m using</span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> <span class="nv">status_format</span><span class="o">=</span> <span class="s2">&#34;-%r-Fastmail: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%&gt;-(%P)---\n&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">unmy_hdr *
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">my_hdr From: Bob Jones &lt;bob@yourdomain.com&gt;
</span></span><span class="line"><span class="cl">my_hdr Organization: yourdomain.com
</span></span><span class="line"><span class="cl">my_hdr Sender: Bob Jones &lt;bob@yourdomain.com&gt;
</span></span><span class="line"><span class="cl">my_hdr Return-Path: &lt;bob@yourdomain.com&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># clear the existing mailboxes list</span>
</span></span><span class="line"><span class="cl">unmailboxes *
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># load up mailboxes appropriate to this profile</span>
</span></span><span class="line"><span class="cl">mailboxes + <span class="s2">&#34;=Spam&#34;</span>
</span></span><span class="line"><span class="cl">mailboxes + <span class="s2">&#34;=disposable&#34;</span>
</span></span><span class="line"><span class="cl">mailboxes + <span class="s2">&#34;=Newsletters&#34;</span>
</span></span><span class="line"><span class="cl">mailboxes + <span class="s2">&#34;=Sent&#34;</span>
</span></span><span class="line"><span class="cl">mailboxes + <span class="s2">&#34;=Archive&#34;</span></span></span></code></pre></div>
<h3 id="2-make-credentials-files">2. Make credentials files</h3>
<p>For each account, you need to make a file for your credentials.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">set imap_user=bob@bobjones.com
</span></span><span class="line"><span class="cl">set imap_pass=&#34;klatu barada nikto&#34;
</span></span><span class="line"><span class="cl">set smtp_pass=&#34;klatu barada nikto&#34;</span></span></code></pre></div>
<p>Name it whatever. <code>passwords-accountname</code> works.</p>
<p>Once you&rsquo;ve created the file, encrypt it with gpg:</p>
<p><code>gpg -r your-gpg-key@yourdomain.com -e passwords-fastmail</code></p>
<p>Test it:</p>
<p><code>gpg -d passwords-fastmail.gpg</code></p>
<p>Then shred the plaintext original:</p>
<p><code>shred -u passwords-fastmail</code></p>
<p>Make sure that your profile (from the previous step) is sourcing the gpg file in line 6 of my example, e.g.</p>
<p><code>source &quot;gpg -d ~/.mutt/passwords-fastmail.gpg |&quot;</code></p>
<h3 id="3-do-a-quick-mid-config-check">3. Do a quick mid-config check</h3>
<p>Might as well test it now.  You can do that by sourcing one of your profiles in your <code>muttrc</code>:</p>
<p><code>source ~/.mutt/fastmail.profile</code></p>
<p>When you run mutt the first time in this login session, you should get a gpg prompt for your credentials so mutt can decrypt your password file and use it to log in.</p>
<p>If it&rsquo;s working, now&rsquo;s the time to make your second profile and credentials files using the above steps since it&rsquo;ll be good to know what they&rsquo;re all called for the next step, which is making macros.</p>
<h3 id="4-make-macros">4. Make macros</h3>
<p>I keep my macros in their own file under <code>~/.mutt</code> just to keep things modular. You can put these in your main <code>muttrc</code>. Whatever you prefer. If you have a separate file, make sure to source it in <code>muttrc</code>:</p>
<p><code>source ~/.mutt/macros</code></p>
<p>Now add something like this for each account:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">macro index .cf &#39;&lt;sync-mailbox&gt;&lt;enter-command&gt;source ~/.mutt/fastmail.profile&lt;enter&gt;&lt;change-folder&gt;!&lt;enter&gt;&#39;
</span></span><span class="line"><span class="cl">macro index .cg &#39;&lt;sync-mailbox&gt;&lt;enter-command&gt;source ~/.mutt/google.profile&lt;enter&gt;&lt;change-folder&gt;!&lt;enter&gt;&#39;</span></span></code></pre></div>
<p>That just does one last sync, then sources your profile, then changes folders to the inbox of that profile.</p>
<p>Restart mutt. From the index, if all is working correctly, the macro <code>.cf</code> will source your <code>fastmail.profile</code> and the macro <code>.cg</code> will source your <code>google.profile</code> file (both of which also source/decrypt their respective credential files).</p>
<h3 id="5-in-conclusion">5. In conclusion</h3>
<p>Once it&rsquo;s all wired up and running, you should be able to switch back and forth between accounts with just a few seconds of latency as the inbox syncs on exit and the new inbox syncs on login.</p>
<h2 id="the-pleasures-of-mutt">The pleasures of mutt</h2>
<p>I went on a mutt revival kick early last year. It remains a land of contrasts. I never end up sticking to it 100 percent of the time but instead prefer to use it as a quick triage tool: It&rsquo;s easy to make macros and keybindings that speed up inbox processing. Sometimes it&rsquo;s easier to just bail out to the web mail interface, but during the day it&rsquo;s helpful to just burn through the inbox never taking my hands off the keyboard.</p>
<h2 id="mutt-scoring-and-color-treatments">mutt scoring and color treatments</h2>
<p>One last thing, I guess, since I&rsquo;m documenting stuff.  One of the reasons I like mutt for triage so much is my ability to add a little visual treatment to messages based on their scores. That makes it easy to see what in my inbox has more priority.</p>
<p>I&rsquo;ve got this little script in my <code>~/.mutt</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;mail&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;tempfile&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Wants a +/- integer, e.g. +20</span>
</span></span><span class="line"><span class="cl"><span class="n">score</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">.</span><span class="n">first</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">score_file</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="si">#{</span><span class="no">Dir</span><span class="o">.</span><span class="n">home</span><span class="si">}</span><span class="s2">/.mutt/scored&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span> <span class="o">=</span> <span class="no">Tempfile</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;msg&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="vg">$stdin</span><span class="o">.</span><span class="n">read</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">mail</span> <span class="o">=</span> <span class="no">Mail</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">from</span> <span class="o">=</span> <span class="n">mail</span><span class="o">.</span><span class="n">from</span><span class="o">.</span><span class="n">first</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">score_file</span><span class="p">,</span> <span class="s2">&#34;a&#34;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span> <span class="s2">&#34;score ~f</span><span class="si">#{</span><span class="n">from</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">score</span><span class="si">}</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">close</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">unlink</span></span></span></code></pre></div>
<p>And I&rsquo;ve got these macros in my <code>~/.mutt/macros</code> file:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Score messages</span>
</span></span><span class="line"><span class="cl">macro index,browser .sp <span class="s2">&#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb +5\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34;</span> <span class="c1"># score sender +5</span>
</span></span><span class="line"><span class="cl">macro index,browser .sP <span class="s2">&#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb +20\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34;</span> <span class="c1"># score sender +20</span>
</span></span><span class="line"><span class="cl">macro index,browser .sm <span class="s2">&#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb -5\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34;</span> <span class="c1"># score sender -5</span>
</span></span><span class="line"><span class="cl">macro index,browser .sM <span class="s2">&#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb -20\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34;</span> <span class="c1"># score sender -20</span></span></span></code></pre></div>
<p>And I&rsquo;ve got a few lines in my <code>~/.mutt/colors</code> file:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">color index cyan default <span class="s2">&#34;~n 0-2 !~p&#34;</span>
</span></span><span class="line"><span class="cl">color index magenta default <span class="s2">&#34;~n &lt;5&#34;</span>
</span></span><span class="line"><span class="cl">color index brightyellow default <span class="s2">&#34;~n &gt;15&#34;</span>
</span></span><span class="line"><span class="cl">color index brightred default <span class="s2">&#34;~n &gt;19&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1">#</span></span></span></code></pre></div>
<p>The macros pipe a given message into the script, the script extracts the sender, and the script writes a line into my <code>~/.mutt/scored</code> file. Then the <code>~/.mutt/colors</code> file (which you need to source in <code>muttrc</code>) assigns colors to certain scores. I have a few other rules in <code>~/.mutt/scores</code>, as well:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Date-based scoring penalties -- older things fall down</span>
</span></span><span class="line"><span class="cl">score ~d&gt;3d -1
</span></span><span class="line"><span class="cl">score ~d&gt;7d -3
</span></span><span class="line"><span class="cl">score ~d&gt;14d -10
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;~O&#34;</span> +10 <span class="c1"># old = +10 so I don&#39;t miss it</span>
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;~F&#34;</span> +20 <span class="c1"># flagged = +20 so it stays in the interesting view for a while, even if old</span>
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;!~p ~d&gt;7d&#34;</span> -10 <span class="c1"># not for me directly, getting old, let it fade away</span>
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;!~l&#34;</span> +2 <span class="c1"># to a known list, give it a bump</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-01-04</title>
      <link>https://mike.puddingtime.org/posts/2024-01-04-daily-notes/</link>
      <pubDate>Thu, 04 Jan 2024 08:05:34 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-04-daily-notes/</guid>
      <description>More Zellij. Stardew Valley.</description>
      <content:encoded><![CDATA[<h2 id="continuing-down-the-cli-rabbithole">Continuing down the CLI rabbithole</h2>
<p>I spent some more time playing around with Zellij this morning. I&rsquo;ve gone from &ldquo;cautiously interested&rdquo; to &ldquo;wow, this is pretty nice.&rdquo;  The nano-style help text in the bottom of the window, the simple navigation between panes/tabs, and the mouse-clickable tabs are all great if you are torn between different kinds of muscle memory.</p>
<p>I made a three-pane layout that keeps Emacs handy in a tall pane, plus two smaller stacked panes for my agenda and today&rsquo;s todo list. I run the two lists with <code>watch</code> in their respective panes so they&rsquo;re updating as things change, and I gave the Zellij session a specific name so I can easily rejoin from my laptop.</p>
<p>Having my task list and daily agenda in such a simple, bare-bones, always-there format works a lot better for me than <em>going to web pages</em> or <em>opening apps</em>. I know that stuff is in a named tab in my single terminal window. Because it&rsquo;s all plain text, it&rsquo;s much easier to take a glance and learn what I need because there&rsquo;s not much extra going on.</p>
<p>As much as I like having the on-screen help I can see turning off the help menu at some point once I&rsquo;ve got a little better muscle memory. Training wheels. Zellij has a lot of visual cues, and they can all be disabled once you&rsquo;re ready.</p>
<p>I haven&rsquo;t done a ton to configure it at this point. I did find <a href="https://github.com/zellij-org/zellij/tree/main/zellij-utils/assets/themes">the theme directory in the repo</a>, which includes a few old stand-bys. For configuration stuff <code>pane_frames false</code> turns off the frame treatment around each pane, which makes for less visual clutter.</p>
<h2 id="stardew-valley-and-vampire-survivors">Stardew Valley and Vampire Survivors</h2>
<p>I think I prefer this to the usurious raccoons of <em>Animal Crossing</em>. I&rsquo;ve just about gotten tired of my inevitably bad, painted-into-corners-of-my-own-devising first character, so over the weekend it&rsquo;ll be time to start a serious run.</p>
<p>Still playing <em>Vampire Survivors</em> but it dampened my own enthusiasm a little when I realized you can get the Garlic powerup and baically spend the first ten ranks of any level just standing there watching the bad guys self-immolate in your garlicky aura. I got one character to last for 29 minutes and 95 levels never straying more than a screen&rsquo;s width or two away from the starting point.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-01-03</title>
      <link>https://mike.puddingtime.org/posts/2024-01-03-daily-notes/</link>
      <pubDate>Wed, 03 Jan 2024 16:04:07 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-03-daily-notes/</guid>
      <description>More a/v messing around. Zellij: A tmux alternative.</description>
      <content:encoded><![CDATA[<h2 id="more-av-messing-around">More a/v messing around</h2>
<p>I got a boom for my USB shotgun mic (a Rode VideoMic GO). It mounts on the back of my desk and swings in and out of place between calls. It sits about eight inches away from my face, but just off camera (yay relatively tight 23mm crop) and the sound quality is sooo much better than when I had it mounted in my X-T2&rsquo;s hot shoe. Much more presence and bass, much less reverb.  Okay. Time to start a podcast. I can feel it.</p>
<h2 id="tmux-alternative">tmux alternative</h2>
<p><a href="https://zellij.dev/">Zellij</a> is a terminal multiplexer <em>ala</em> screen or tmux, but it&rsquo;s got a nicer onboarding ramp than either thanks to a decent menu that exposes most of what you need and out-of-the-box UX touches.</p>
<p><img src="https://photos.smugmug.com/photos/i-vcsZGfh/0/5ae23ff4/XL/i-vcsZGfh-XL.jpg" alt="Screenshot of Zellij, a terminal multiplexer showing multiple panes and a helpful menu"></p>
<h2 id="through-the-holidays">Through the holidays</h2>
<p>We had a pretty good holiday season this year. Ben was home from his first term at UofO, and we had a quiet couple of weeks with few obligations. Work was pretty quiet, too: We had a major system change slated for the interim week, then the vendor backed out, so there was a little bit of &ldquo;shrug, I guess there&rsquo;s this paperwork to catch up on,&rdquo; which is a fine way to spend that week.</p>
<p>It&rsquo;s good to be almost on the other side: We have a balance day off this Friday, so this will be a three-day week, then back to normal next week.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-01-01</title>
      <link>https://mike.puddingtime.org/posts/2024-01-01-daily-notes/</link>
      <pubDate>Mon, 01 Jan 2024 13:18:52 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-01-daily-notes/</guid>
      <description>Auto-disowning in zsh. A little CLI ditty for scheduling work blocks in Google Calendar.</description>
      <content:encoded><![CDATA[<h2 id="auto-disowning-in-zsh">Auto-disowning in zsh</h2>
<p><code>setopt AUTO_CONTINUE</code> sends <code>CONT</code> to a process as you background it instead of having to manually <code>disown</code>.</p>
<h2 id="scheduling-work-blocks-in-google-calendar-from-the-cli">Scheduling work blocks in Google Calendar from the CLI</h2>
<p>When I&rsquo;m starting the day I like to schedule work blocks for anything I need to get to from my task list. I don&rsquo;t like pointing and clicking, so I made <a href="https://gist.github.com/pdxmph/93fcc5122063e7b364cd0a992e25753a">a quick tool to schedule blocks</a>:</p>
<p><code>$ sked &quot;Do some thing&quot; -t 15:00</code></p>
<p>That&rsquo;ll just drop a 30 minute &ldquo;Do some thing&rdquo; block at 3 p.m.</p>
<p>It assumes a 30-minute duration and today as the date, but you can alter those with <code>-d/--duration</code> and <code>-D/--date</code>.</p>
<p>Needs a working <a href="https://github.com/insanum/gcalcli">gcalcli</a>.</p>
<p>Pairs nicely with the Remember the Milk CLI app: I can run any of several aliases I&rsquo;ve set up to see what&rsquo;s due, what&rsquo;s missing a date, etc. and just start typing items and times in the spaces I have open to get some things done.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-31</title>
      <link>https://mike.puddingtime.org/posts/2023-12-31-daily-notes/</link>
      <pubDate>Sun, 31 Dec 2023 10:11:06 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-31-daily-notes/</guid>
      <description>Suffix aliases in zsh. More Remember the Milk from the CLI.</description>
      <content:encoded><![CDATA[<h2 id="suffix-aliases-in-zsh">Suffix aliases in zsh</h2>
<p>Today I learned about suffix aliases in zsh. They look like:</p>
<p><code>alias -s md=$EDITOR</code></p>
<p>Typing <code>foo.md</code> will open that file in your <code>$EDITOR</code>, creating it if it&rsquo;s not there already.</p>
<p>Given kitty and its ability to display images, I added a few to make it easier to preview them in the terminal:</p>
<p><code>alias -s jpg='kitten icat'</code></p>
<p>With the aliases in place, autocomplete recognizes them as candidates, similar to if you had <code>+x</code> set on them.</p>
<p><img src="https://photos.smugmug.com/photos/i-FTNcpS2/0/XL/i-FTNcpS2-XL.png" alt="Screenshot of a text terminal displaying an image"></p>
<h2 id="more-rtm-from-the-command-line">More rtm from the command line</h2>
<p>I made a small alias to get stuff into my RTM inbox and drop a <code>#triage</code> tag onto the item.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">ib<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    rtm add <span class="s2">&#34;</span><span class="nv">$1</span><span class="s2"> #triage&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span></span></span></code></pre></div>
<p>The danger of anything like that is that you train yourself to drop things in your inbox but then have to pick through and triage them. The <a href="https://github.com/dwaring87/rtm-cli">rtm CLI</a> also takes aliases to help keep things nice and terse:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;triage&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Show tasks from inbox marked triage.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;ls&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="s2">&#34;list:Inbox AND tag:triage&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p>&hellip; which gives me <code>rtm triage</code> as opposed to <code>rtm list:Inbox AND tag:triage</code>.</p>
<p>I&rsquo;ve got another one to help me catch items with no dates:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl">   <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;loose&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Show unscheduled tasks in the Iterable list.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;ls&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="s2">&#34;list:Iterable AND status:incomplete AND due:never&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span></span></span></code></pre></div>
<p>&hellip; <code>rtm loose</code> to see everything in my Iterable box that doesn&rsquo;t have a date.</p>
<h3 id="-but-mike">&hellip; but Mike</h3>
<p>&hellip; why not org-mode?</p>
<p>Mobile, basically. If I wanted to set up Dropbox on all my stuff I could probably have a decent mobile org experience. I don&rsquo;t want to set up Dropbox, and my experiments with syncthing and its iOS client haven&rsquo;t really given me comfort that the system would be very reliable.</p>
<h2 id="-anyhow">&hellip; anyhow</h2>
<p>It&rsquo;s New Year&rsquo;s Eve and I need to get to the liquor store. See you next year.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-29</title>
      <link>https://mike.puddingtime.org/posts/2023-12-29-daily-notes/</link>
      <pubDate>Fri, 29 Dec 2023 15:08:36 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-29-daily-notes/</guid>
      <description>kitty and denote. Terminal maximalism? A few fun CLI app directories. Autojump for better CLI fs navigation. More Vampire Survivors.</description>
      <content:encoded><![CDATA[<h2 id="vampire-survivors-again">Vampire Survivors, again</h2>
<p>I used to play this tower defense game on the Mac called <em>Hordes of Orcs.</em>  Orcs would enter a maze, you&rsquo;d build towers of all kinds to murder them. After playing for a while, I came to pick out a certain aural signature. As you built more and more elaborate orc-murdering capabilities, you could begin to hear a rhythm emerge &ndash; the sound of a tower spraying hot death, the sounds the orcs made. It was not a rhythm game, but it invoked a similar feeling.  I came to think of a session of HoO as &ldquo;firing up the murder factory.&rdquo;</p>
<p>Well, Vampire Survivors sort of does that, too. I didn&rsquo;t really notice until I turned the music off, but as a level progresses and gets more intense and your character is surrounded by a number of orbiting weapons (boomerang axes, a lethal garlic aura, puddles of holy water dropping from the sky, two orbiting birds that rain death, etc.) you can hear the rhythm of all those things interacting.</p>
<p>It also occurred to me that Vampire Survivors reminds me a lot of <em><a href="https://en.wikipedia.org/wiki/Robotron%3A_2084">Robotron: 2084</a></em>.</p>
<p>Anyhow, it&rsquo;s an awful lot of fun for such a simple game.</p>
<h2 id="kitty-and-denote">kitty and denote</h2>
<p>Okay.</p>
<ol>
<li>Emacs as a systemd service? <a href="/posts/2023-12-25-daily-notes/">Check</a>.</li>
<li>Launching useful stuff in kitty? <a href="/posts/2023-12-27-daily-notes/">Check</a>.</li>
<li>Making a quick Denote note in kitty &hellip; ?</li>
</ol>
<p>Sure.</p>
<p>Make an org capture template like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">with-eval-after-load</span> <span class="ss">&#39;org-capture</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">&#39;org-capture-templates</span>
</span></span><span class="line"><span class="cl">               <span class="o">&#39;</span><span class="p">(</span><span class="s">&#34;n&#34;</span> <span class="s">&#34;New note (with Denote)&#34;</span> <span class="nv">plain</span>
</span></span><span class="line"><span class="cl">                 <span class="p">(</span><span class="nv">file</span> <span class="nv">denote-last-path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                 <span class="nf">#&#39;</span><span class="nv">denote-org-capture</span>
</span></span><span class="line"><span class="cl">                 <span class="ss">:no-save</span> <span class="no">t</span>
</span></span><span class="line"><span class="cl">                 <span class="ss">:immediate-finish</span> <span class="no">nil</span>
</span></span><span class="line"><span class="cl">                 <span class="ss">:kill-buffer</span> <span class="no">t</span>
</span></span><span class="line"><span class="cl">                 <span class="ss">:jump-to-captured</span> <span class="no">t</span><span class="p">)))</span></span></span></code></pre></div>
<p>&hellip; then add this to <code>kitty.conf</code>:</p>
<p><code>map kitty_mod+d launch emacsclient -t &quot;org-protocol:///capture?template=n&quot;</code></p>
<p>That launches an emacsclient instance in a new kitty window teed up to enter the title and tags for a denote note.</p>
<p>There&rsquo;s another way to do this, using kitty&rsquo;s startup sessions capabilities.</p>
<p>You can make a session file with something like this in your config directory:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">launch emacsclient -t &#34;org-protocol:///capture?template=n&#34;
</span></span><span class="line"><span class="cl">focus_os_window`</span></span></code></pre></div>
<p>&hellip; name it something like <code>denote.conf</code></p>
<p>&hellip; and launch it with <code>kitty --session denote.conf</code>.</p>
<p>Which isn&rsquo;t really what you want to do. You really want to use that for a custom keybinding out in your window manager.</p>
<h2 id="terminal-maximalism">terminal maximalism?</h2>
<p>Seeing my agenda for the day in a terminal &hellip; getting my upcoming todos in a terminal &hellip; denote notes in a terminal &hellip;</p>
<p>Is this all some sort of terminal maximalism thing?</p>
<p>Maybe, I guess?</p>
<p>I don&rsquo;t know about the rest of the world, but I go through moods with this stuff. Some days I feel supremely unfussed about the assorted UIs imposed on us by web app designers. Some days I feel very resistant to messing around with a browser or mouse. It&rsquo;s nice to sit down to a text editor in a terminal, start writing, and be able to quickly orient on where I&rsquo;m at in the day with a glance at my agenda or the day&rsquo;s todos. There are some days I don&rsquo;t feel put upon doing that in a browser window.</p>
<p>Looking at <a href="https://github.com/xwmx/nb">nb</a> is what got me thinking about doing more in a text shell, but I couldn&rsquo;t figure out a good way to solve for the mobile use case and I didn&rsquo;t want to live in it as my task manager. Sometimes it is handy to be able to manage or just review todos with a GUI. Its notes tool is fine, but I spent a lot of time setting up Denote and really appreciate it, plus I have a way to review my Denote notes via the web and create them on the go with Drafts.</p>
<p>And when I think about my little 11&quot; MacBook Air, that&rsquo;s a machine that would benefit from not having a lot of GUI clutter and not having a lot of open apps. It&rsquo;s a great candidate for spending more time in a terminal.</p>
<p>So &hellip; less terminal maximalism and more terminal optionality. For days when pointy-clicky feels really burdensome.</p>
<p>Anyhow, I did find a few good collections of CLI app links:</p>
<ul>
<li><a href="https://github.com/agarrharr/awesome-cli-apps">awesome-cli-apps</a></li>
<li><a href="https://github.com/alebcay/awesome-shell">awesome-shell</a></li>
</ul>
<p>I think my favorite discovery from both of them at this point is probably <a href="https://github.com/alebcay/awesome-shell#readme">autojump</a>, which watches where you visit and lets you go there from anywhere else, rather than having to descend and ascend a directory hierarchy. If you want to give it a try, the documentation is missing one key thing, at least if you pull it down from Fedora: You need to source a file it sticks in <code>/usr/share/autojump</code> in your shell&rsquo;s <code>.rc</code> file. The core package in Fedora supplies that file for bash, and you have to install the <code>autojump-zsh</code> package to get it for zsh.</p>
<h2 id="the-working-world">the working world</h2>
<p>Today I feel very annoyed with what I have come to think of as &ldquo;Businessing,&rdquo; which is to say &ldquo;all the things people do in the course of working in a business, but especially the ones that involve things nobody will say and rules nobody will articulate.&rdquo;</p>
<p>I don&rsquo;t think I have much more to say about it than that, so consider this me quietly whispering discontent into a hole in the side of a stump in the middle of an empty field under a new moon at midnight.</p>
<p>Okay. I have a little more to say.</p>
<p>Years and years ago I read Paul Fussel&rsquo;s <em><a href="https://www.goodreads.com/book/show/60044.Class">Class</a></em>. I was at something of a personal low point: Recently out of the army, a very different person on the other side of the experience, and feeling exiled in a small southern university town. <em>Class</em> gave me a lens for observing other people that my feelings of unbelonging and insecurity hadn&rsquo;t ever allowed through. It&rsquo;s a light, biting book that would pair nicely with Barbara Ehreneich&rsquo;s <em><a href="https://www.goodreads.com/book/show/24457.Fear_of_Falling">Fear of Falling</a></em>.</p>
<p>Once I saw the thing <em>Class</em> calls out when it&rsquo;s at its most empathetic &ndash; the constant and pervasive atmosphere of insecurity middle class people occupy and perpetuate &ndash; it made some things about work a little easier.  But just a little.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-28</title>
      <link>https://mike.puddingtime.org/posts/2023-12-28-daily-notes/</link>
      <pubDate>Thu, 28 Dec 2023 11:30:38 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-28-daily-notes/</guid>
      <description>A CLI for Remember the Milk. Vampire Survivors. A little on Substack.</description>
      <content:encoded><![CDATA[<h2 id="a-cli-for-rtm">A CLI for rtm</h2>
<p>Just as good as Todoist for my purposes, and with a little more personal affection toward it, is definitely <a href="https://www.rememberthemilk.com/app/">Remember the Milk</a>. It also <a href="https://github.com/dwaring87/rtm-cli">has a CLI</a> that allows for task manipulation, etc. It also uses RTM&rsquo;s advanced search syntax, so you don&rsquo;t have to have a preexisting filter, as you would in Todoist, to query upcoming todos with due dates only:</p>
<p><code>rtm lsd -d 4 NOT due:never</code></p>
<p>(<em>List due items no more than 4 days out, exclude things without due dates</em>)</p>
<p>Its output also includes index numbers, so once I invoke my near-term todos, I can act on them from the command line, e.g.</p>
<p><code>rtm due 07 tomorrow</code></p>
<p>&hellip; which changes the due date of item 7 from the list to tomorrow.</p>
<p>I think this may have put to bed my interest in exploring <a href="https://xwmx.github.io/nb/">nb</a>. I spent some time poking at it, but the question, as always, comes down to &ldquo;how does this thing handle mobile use cases?&rdquo; For todos, I need a little more than the sort of <a href="https://gist.github.com/pdxmph/1d17833f910dbfd86068d94cfac585f9">web publishing lashup I made for my Denote notes</a>.</p>
<h2 id="vampire-survivors">Vampire Survivors</h2>
<p>I am not sure what compelled me besides maybe the sale price, but I gave Vampire Survivors a go and I&rsquo;m hooked. It&rsquo;s a rogue-like bullet hell thing where you&rsquo;re running around being chased by hordes of undead, slowly acquiring weapons and powerups that eventually turn you into a killing machine.</p>
<p>It was disorienting at first, because you don&rsquo;t do anything besides move around. All your weapons fire or deploy themselves, and your only real input into the process is the direction you face the character. Live long enough and you&rsquo;re eventually emitting magical energies or deploying roaming weapons of mass destruction, killing the oncoming demonic hordes by the score. Sometimes there&rsquo;s a turkey you can eat to get life back.</p>
<p>It&rsquo;s an intense game, but it&rsquo;s not really fast. I think that&rsquo;s what I like about it. Your character doesn&rsquo;t move at a very high speed. You just sort of walk around, trying not to be touched by the monsters. If you&rsquo;re lucky you happen across one of the aura weapons that just passively kill anything that gets close. When you die, you can spend your gold on incremental improvements to your character that allow you move a little faster, regenerate health, widen the radius of your weapons, do more damage, etc.</p>
<p>It&rsquo;s very simple to play and very easy to put down and pick back up.</p>
<h2 id="substack">Substack</h2>
<p>I wish people that I appreciate and who are not Nazis, or interested in helping Nazis, and who are also on Substack, would get off of it. The company did itself a favor paying the advances it did at its founding, because I know of a few writers who have been very transparent about how much space that gave them to branch out on their own, establish or rebuild writing careers, and find an audience.</p>
<p>I always wondered how long it would take for attention to turn to it, and what it would take. Honestly, I think it is a refutation of the Woke Apocalypse Doomsaying Community that it took this long and such an odious provocation to finally generate that kind of awareness. There has always been complaining, because left libs were never going to be okay with a platform that provided a home for the likes of Bari Weiss, Matt Taibi, and assorted other &ldquo;heterodox&rdquo; types, but it took honest-to-God Nazis &ndash; and the fact that Substack has decided their money spends just fine &ndash; to draw prolonged attention.</p>
<p>A while back, fresh out of years and years doing online content, I gave a thought to providing something Substack-like: I had the technical know-how for a lot of it, had done some time putting together newsletters and turnkey premium content, and had a good idea of what would work for content types. I didn&rsquo;t have any idea how to scale it all, or how to draw the line between &ldquo;good enough&rdquo; and &ldquo;feature rich&rdquo; in a way that would make much money. I&rsquo;m just noting that because the quandary facing people who signed up and are now making a living from their work on Substack is real. There are parts and pieces laying around that they could pick up and use to cobble together a similar suite of blog, newsletter, and podcast tools; but the discovery part &ndash; the marketing problem, especially given the current realignment going on with social media &ndash; is going to be fraught even if one does have the wherewithal to rummage around in the parts bin of publishing platforms, payment processing, etc.</p>
<p>This is a tougher situation than, I dunno, a well-off tech worker who just can&rsquo;t kick their X habit. It is hard to make a go of it as a writer. It would be hard to pull up stakes and move on.</p>
<p>I wouldn&rsquo;t mind being a little more current and capable than I am today, because there would be some social utility and satisfaction in helping people get out of this situation.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-27</title>
      <link>https://mike.puddingtime.org/posts/2023-12-27-daily-notes/</link>
      <pubDate>Wed, 27 Dec 2023 17:13:08 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-27-daily-notes/</guid>
      <description>Todos and agenda with kitty. Better Zoom audio. Roy Clark, guitar god.</description>
      <content:encoded><![CDATA[<h2 id="todos-and-agenda-with-kitty">Todos and agenda with kitty</h2>
<p>I&rsquo;ve been using Todoist to stick stuff that I have to keep track of in a list: It&rsquo;s got a decent web interface, you can do a card view, and it has clients for pretty much everything. It could be any of several online todo apps. I don&rsquo;t care. I don&rsquo;t love it, I am not passionate about it, it&rsquo;s just there and it makes lists which means my preference for hand-written meeting notes doesn&rsquo;t have to get in the way of keeping track of tasks.</p>
<p>I was happy to learn about <a href="https://github.com/alanvardy/tod">this Rust-based CLI tool for Todoist called &ldquo;tod&rdquo;</a>, which makes it easy to pull lists of todos, process todos, etc. all from the command line. I don&rsquo;t mean to use it to process things, but I was looking for a way to print a list of today&rsquo;s todos, and it can do that.</p>
<p>I was also happy to learn about <a href="https://github.com/insanum/gcalcli">gcalcli</a>, which can pull your Google Calendar down from the command line, as well.</p>
<p>I made a couple of launch actions in kitty:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">map kitty_mod+a launch --hold ruby ~/bin/agenda.rb
</span></span><span class="line"><span class="cl">map kitty_mod+o launch --hold tod task list -f today</span></span></code></pre></div>
<p>The ruby script in the first line is a wrapper around gcalcli because its agenda command takes a couple of ISO-8601 dates, and I got tired of trying to escape <code>date</code> and all its arguments in a config file.</p>
<p>So, <code>mod+a</code> to list today&rsquo;s agenda in a kitty window, and <code>mod+o</code> to list my todos for the day.</p>
<p><img src="https://photos.smugmug.com/photos/i-72SnqMW/0/XL/i-72SnqMW-XL.png" alt="A kitty terminal showing a text todo list and calendar agenda."></p>
<h2 id="better-zoom-audio">Better Zoom audio</h2>
<p>I have wanted to get rid of my Jabra headset because I look like a telemarketer in it. I had a few offers of loaned gear, neither of which I&rsquo;d gotten around to collecting before I went digging around in the photography parts bin thinking I had, at some point in the past few years, bought a mic and maybe it&rsquo;d do the trick. Sure enough, I found a RØDE VideoMic sitting at the bottom of the box. I bought it for a holiday project and never thought of it as a way to improve teleconferencing until Luke said &ldquo;USB shotgun mic&rdquo; as a possible solution.</p>
<p>I mounted it in the hot shoe of the Fujifilm X-T2 I use for Zoom video and plugged into my Linux desktop. It showed up as a source for Zoom, and that was about all there was to it. I did a few tests to make sure the positioning would work, then a few A/B tests with my Jabra headset to see how much of a change there&rsquo;d be. There&rsquo;s definitely a little less presence, but it&rsquo;s not that much worse, I&rsquo;m free of the headset, and the sound is much better than the mics that come on laptops. It seems to have an app for configuring some soft options if you plug it into a Mac or iPhone.</p>
<p>I&rsquo;m using a pair of powered bookshelf speakers as &ldquo;studio monitors&rdquo; right now. They&rsquo;re a little undefined and boomy with <em>other</em> peoples&rsquo; dinky laptop mics, so I&rsquo;m not sure what to do there. A little preliminary fiddling with <a href="https://github.com/wwmm/easyeffects">Easy Effects</a> suggests I can probably squeeze something out in software.</p>
<p>But even in this sorta primitive state, I really like where I&rsquo;m at: I can just sit down at my desk, start the call, and not have a thing stuck on my head, Bluetooth to worry about, etc. etc. The CamLink 4K/Fujifilm combo has been very consistent, and the 23mm/f2 &ldquo;Fujicron&rdquo; has been a great lens for this application. It crops tight enough to seem more intimate than the average super-wide web cam, but not so tight that I&rsquo;m a giant looming head or unable to shift between &ldquo;attentive and upright&rdquo; and &ldquo;listening but not hanging on every word.&rdquo;</p>
<p>I need to improve my lighting situation a little. I have a Lume Cube Panel Mini but need to get a reliable power source and mount for it so I can quit using the overhead light in my office when the light coming in through the window gets too low: It makes the lens hunt unless I stop it down (and up goes the ISO) and the light coming off the monitor gives everything a super cold cast.</p>
<h2 id="roy-clark-guitar-god">Roy Clark, Guitar God</h2>
<p>My family watched <em>Hee Haw</em> growing up, and Roy Clark was always just the one who smiled a lot to me. I think I liked Buck Owens better for reasons lost to me. We also watched <em>The Odd Couple</em>, so here&rsquo;s a crossing of the streams.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/-xssnp7R51A?si=-dYliXADqDnrX_i8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-26</title>
      <link>https://mike.puddingtime.org/posts/2023-12-26-daily-notes/</link>
      <pubDate>Tue, 26 Dec 2023 21:17:33 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-26-daily-notes/</guid>
      <description>Detroit: Become Human. Linux config cloning with Mackup. Machine-specific configs with kitty. Making kitty your default GNOME terminal (sort of).</description>
      <content:encoded><![CDATA[<h2 id="detroit-become-human">Detroit: Become Human</h2>
<p>&hellip; was on sale on Steam. Ben recommended it, so <a href="https://www.quanticdream.com/en/detroit-become-human">that&rsquo;s</a> the new game for the Steamdeck this week. So far &hellip; you know &hellip; there&rsquo;s a little <em>Blade Runner</em>, there&rsquo;s a little <em>Minority Report</em>, there&rsquo;s a little <em>AI</em>. It moves at a pace that works for me, with a few things that require some timing, but mostly just making decisions and dealing with the outcomes.</p>
<h2 id="config-cloning-with-mackup-again">Config cloning with Mackup (again)</h2>
<p>A while back <a href="/posts/2023-03-20-daily-notes-for-2023-03-20/#mackup">I learned about Mackup</a>, which uses whatever you&rsquo;ve got in the way of a syncing filesystem to sync config files between systems. It has a library of hundreds of apps from Mac and Linux that it understands out of the box: You can either let it sync everything it can find, give it an allow list, or give it a disallow list. By default it expects to use Dropbox, but I took a little time to set it up in syncthing this evening.</p>
<p>At the moment I&rsquo;m using it for zsh, kitty, git, ssh, and the GitHub CLI tool, which led me to figure out &hellip;</p>
<h2 id="machine-specific-configs-with-kitty">Machine-specific configs with kitty</h2>
<p>As I play with <a href="https://sw.kovidgoyal.net/kitty/">kitty</a> more I&rsquo;ve been bumping into the display differences between all my different machines. That makes finding a consistent font size a little annoying. I learned that kitty can take environment variables in its config, so for machine-specific stuff I can do something like:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">include ${HOSTNAME}.conf</span></span></code></pre></div>
<p>&hellip; then in <code>foo.conf</code> put machine-specific settings:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">font_size 18</span></span></code></pre></div>
<h2 id="making-kitty-your-default-gnome-terminal-sort-of">Making kitty your default GNOME terminal (sort of)</h2>
<p><a href="https://github.com/hrdkmishra/changetoKitty/blob/main/changetoKitty.sh">This shell script</a> just concedes to my muscle memory: When I invoke the GNOME launcher and type &ldquo;terminal&rdquo; before I can stop myself, this just makes sure kitty is the thing launching.</p>
<h2 id="my-linux-life">My Linux life</h2>
<p>I think it has been over a week since I last switched over to the Mac Studio. It&rsquo;s just sitting there. I copied my photo library over to a drive attached to the Linux desktop, but haven&rsquo;t taken the time to start playing with darktable in earnest.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-25</title>
      <link>https://mike.puddingtime.org/posts/2023-12-25-daily-notes/</link>
      <pubDate>Mon, 25 Dec 2023 13:06:19 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-25-daily-notes/</guid>
      <description>Kitty (and GNOME generally) with the Monaspace fonts. My first game of Cards Against Humanity. Emacs as a systemd service.</description>
      <content:encoded><![CDATA[<h2 id="kitty-and-gnome-generally-with-the-monaspace-fonts">Kitty (and GNOME generally) with the Monaspace fonts.</h2>
<p>You can tell it was a long weekend because I was experimenting with alternative terminal emulators, starting with <a href="https://sw.kovidgoyal.net/kitty/">kitty</a> because &hellip; I saw someone mention it? I don&rsquo;t remember why, but here we are.</p>
<p>In the process of configuring it I came across something I&rsquo;d just pushed to the background, which was that none of the terminal apps I was using were picking up on the <a href="https://monaspace.githubnext.com/">Monaspace fonts</a> as legit candidates. So I decided to run it down and learned that the font system doesn&rsquo;t see those fonts as actually monospaced.</p>
<p>Here&rsquo;s an incantation you can stick in <code>~/.config/fontconfig/conf.d/20-monaspace.conf</code>, then run <code>fc-cache -f</code>.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="cp">&lt;?xml version=&#34;1.0&#34;?&gt;</span>
</span></span><span class="line"><span class="cl"><span class="cp">&lt;!DOCTYPE fontconfig SYSTEM &#34;fonts.dtd&#34;&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;fontconfig&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;match</span> <span class="na">target=</span><span class="s">&#34;scan&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;test</span> <span class="na">name=</span><span class="s">&#34;family&#34;</span> <span class="na">compare=</span><span class="s">&#34;contains&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&lt;string&gt;</span>Monaspace<span class="nt">&lt;/string&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;/test&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;edit</span> <span class="na">name=</span><span class="s">&#34;spacing&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&lt;const&gt;</span>dual<span class="nt">&lt;/const&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;/edit&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;/match&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;/fontconfig&gt;</span></span></span></code></pre></div>
<p>Seemed to fix it.</p>
<p>Anyhow, what do I like about kitty?</p>
<ul>
<li>Quick access to launching URLs from a keyboard shortcut.</li>
<li>The whole &ldquo;kitten&rdquo; extension system, which includes some good ones for theme selection, file transfers, and <a href="https://sw.kovidgoyal.net/kitty/kittens/hyperlinked_grep/">hyperlinked grep</a></li>
<li>Its pared-down, simple vibe sitting on top of all the customization.</li>
</ul>
<h2 id="my-first-game-of-cards-against-humanity">My first game of Cards Against Humanity</h2>
<p>&hellip; was this weekend, with a room full of people I don&rsquo;t know very well. How to approach this?</p>
<p>I guess I&rsquo;ll say this:</p>
<p>I&rsquo;ve got a particular sense of humor and I am okay with it, but it is not for everyone. Given what looked like a big box full of thousands of Cards Against Himanity cards, it is entirely reasonable to me that there would be something in there that would exceed my own capacity to shock or to be shocked. There were a few &ldquo;ick&rdquo; moments, and a few &ldquo;lol&rdquo; moments, but many, many more &ldquo;I&rsquo;d have to think this is funny for this to be funny&rdquo; moments, but not because I found those things <em>offensive</em> so much as just &hellip; not funny?</p>
<p>The whole exercise was a little lost on me because there is a difference between &ldquo;I am wound super tight and this is a transgressive thrill that allows me to occupy a space I do not ordinarily permit myself or permit for others&rdquo; and &ldquo;I find all sorts of shit funny and understand not everyone else does, so I am not going to communicate some of those things in some contexts.&rdquo;</p>
<p>So I didn&rsquo;t find the whole thing liberating or freeing or transgressive. It reminded me a lot of what David Graeber had to say about &ldquo;play&rdquo; vs. &ldquo;games&rdquo;:</p>
<blockquote>
<p>&ldquo;Freedom has to be in tension with something, or it’s just randomness. This suggests that the absolute pure form of play, one that really is absolutely untrammeled by rules of any sort (other than those it itself generates and can set aside at any instance) itself can exist only in our imagination, as an aspect of those divine powers that generate the cosmos. Here’s a quote from Indian philosopher of science Shiv Visvanathan:</p>
</blockquote>
<blockquote>
<p>&ldquo;&rsquo;<em>A game is a bounded, specific way of problem solving. Play is more cosmic and open-ended. Gods play, but man unfortunately is a gaming individual. A game has a predictable resolution, play may not. Play allows for emergence, novelty, surprise.</em>'</p>
</blockquote>
<blockquote>
<p>&ldquo;All true. But there is also something potentially terrifying about play for just this reason. Because this open-ended creativity is also what allows it to be randomly destructive. Cats play with mice. Pulling the wings off flies is also a form of play. Playful gods are rarely ones any sane person would desire to encounter. Let me put forth a suggestion, then. What ultimately lies behind the appeal of bureaucracy is fear of play.&rdquo;</p>
</blockquote>
<p>Cards Against Humanity is definitely a game. And it is not, as Dungeons and Dragons can be, a kind of game that allows you to poke at the edges of play very much.</p>
<h2 id="launching-emacs-from-systemd">Launching Emacs from systemd</h2>
<p>It happened a few versions ago, when I was busy running it on a Mac, but Emacs ships with a systemd unit, so you can fire it up like a service and use it with emacsclient. That simplifies a few things. <a href="https://emacsredux.com/blog/2020/07/16/running-emacs-with-systemd/">Bozhidar Batsov on how it all works.</a> I came across this while I was busy trying to make my Hugo posting script work across Linux and macOS machines, and cursing the whole daemonized Emacs situation. His whole blog is a treasure trove.</p>
<p>I&rsquo;m wondering, given the way I use Emacs these days, why I insist on running the GUI version. I should try not for a few days and see what comes up.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-23</title>
      <link>https://mike.puddingtime.org/posts/2023-12-23-daily-notes/</link>
      <pubDate>Sat, 23 Dec 2023 10:57:59 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-23-daily-notes/</guid>
      <description>Customizing trackpad stuff outside desktop environments. I&amp;rsquo;m over realism. Cozymas.</description>
      <content:encoded><![CDATA[<h2 id="enable-tap-to-click-in-i3-wm">Enable tap to click in i3 WM</h2>
<p>I fiddled around with i3 WM last night because why not, and because if you&rsquo;re going to crow about how far along Linux is you owe it to yourself to go, if not completely off-road, at least onto the side and back roads of the Linux desktop experience.</p>
<p>It was sort of interesting. Some stuff about it feels a little over-committed to the tiling window manager bit, and maybe some of it is the sort of stuff you just eventually figure out how to deal with, but on some level, even after an hour of learning it by trying to solve configuration problems with it, I was in a small groove.</p>
<p>But wow is it a throwback experience.  You just sorta get hucked into this environment that doesn&rsquo;t care to tell you much and doesn&rsquo;t do the things you may have come to expect from other environments and you start figuring it out.</p>
<p>Beyond the basic questions, like &ldquo;how do I launch a browser&rdquo; or &ldquo;how do I change my wallpaper,&rdquo; there are the things that desktop environments like GNOME, KDE, Cinnamon, or XFCE have taken as part of their remit, such as exposing friendly interfaces to UI and font scaling for HiDPI displays, setting up natural scrolling or tap-to-click on trackpads, and wiring up your keyboard&rsquo;s media keys.</p>
<p>i3 is <em>so</em> passionately disinterested in that stuff that I&rsquo;m going to confess to feeling a certain guilty feeling even thinking about wallpaper or a graphical web browser.</p>
<p>Anyhow, in the process of playing around and trying to figure out how to get natural scrolling and tap-to-click, I found a bunch of &ldquo;just run <code>xinput and do archaeology</code>&rdquo; advice before coming across how to do it with <code>xorg.conf.d</code>, <a href="https://cravencode.com/post/essentials/enable-tap-to-click-in-i3wm/">in case you&rsquo;re curious</a>.</p>
<h2 id="the-realistic-response">The realistic response</h2>
<p>A thing I want to work on:</p>
<p>Understanding when my reaction to something is coming from a place of determining what the &ldquo;realistic&rdquo; response is vs. a response informed by a sense of what&rsquo;s right.</p>
<p>The <a href="https://www.theverge.com/23998294/beeper-imessage-apple-app-security">Beeper vs. Apple saga</a>, of all things, is a vein to mine here.</p>
<p>On the one hand, nothing I&rsquo;ve read from the Beeper side has caused me to take the&rsquo;m very seriously. Like, what they&rsquo;re up to sounds like a sloppy hack I wouldn&rsquo;t bother with if I&rsquo;d taken my own time to devise it. Maybe an interesting problem to solve, but I&rsquo;d expect it to work for a z release or two before some breaking change. I wouldn&rsquo;t sell it to <em>myself</em> for free, I guess is what I&rsquo;m saying, let alone $2/month from strangers. And I say that as a relatively happy <a href="https://bluebubbles.app/">BlueBubbles</a> user who will stop using BlueBubbles the day I decide to stop using iPhones (which may never happen, but it is not in my mental model of things I want to &ldquo;just work&rdquo; to continue to exist in some phantom state of legitimacy on Apple&rsquo;s platform).</p>
<p>Along those same lines, forget about &ldquo;some API changes without any particular intention to kill this thing end up killing it,&rdquo; who in their right mind would expect Apple to <em>not</em> deliberately break this particular hack the second they were made aware of it?</p>
<p>So &hellip; there&rsquo;s the <em>realistic</em> response: &ldquo;I find this to be of dubious utility, I&rsquo;d never hang my hat on it, and it is doomed because Apple will crush it with as little thought given to the matter as I give to drawing my next breath.&rdquo;</p>
<p>But there&rsquo;s the part of me that is just sort of over &ldquo;realism&rdquo; because I&rsquo;ve been at this a while and do not see in Apple anything I have not seen in every other situation like this that has occurred over the past several decades, same as when AOL did its crackdown on 3rd party AIM clients decades ago, or when Reddit made its own API unaffordable to indy developers in the past year.</p>
<p>The &ldquo;realistic&rdquo; response is to say &ldquo;their platform, their rules,&rdquo; because that&rsquo;s the <a href="https://en.wikipedia.org/wiki/Capitalist_Realism">capitalist realist</a> response. But when I&rsquo;ve encountered the capitalist realist answer elsewhere I have found it profoundly unsatisfying: I never expected better of conservative types, but it has been pretty disappointing to see, over the past several decades, how comfortable liberal/progressive types have become with the privatization of everything and their quiet acceptance of market dynamics as a way to settle issues of human freedom and equity.</p>
<p>So, the thing I want to work on, I guess, is being a little less &ldquo;realistic&rdquo; in my reflexive responses. It&rsquo;s simply not my job to care about Apple&rsquo;s corporate prerogatives, and it&rsquo;s not my job to do ideological contortions to rationalize their walled garden, or anyone else&rsquo;s for that matter.</p>
<h2 id="cozymas">Cozymas</h2>
<p>Al and I call this time of year &ldquo;Cozymas.&rdquo; From the outside, it will look like Christmas: There&rsquo;s a tree, there are presents. We try to keep the present count down, and we prefer to think of it as a time of year when we take joy being in a warm house and rediscovering small things that feel good.</p>
<p>We landed on this because one of Ben&rsquo;s early Christmases didn&rsquo;t go so well: It was overstimulating and plainly too much for him, and it was hard to see that given how much work we&rsquo;d put in to making it all just so.  So we adopted a deliberately low-key take after that. Low-key enough that he complains about our disinterest in doing things up too much.</p>
<p>I&rsquo;m glad we&rsquo;re like that, though, because &mdash; and it took me years to isolate the feeling &mdash; I&rsquo;m just not a fan of the holiday. I&rsquo;ll probably never talk in as public a forum as this blog about all the reasons why, but I have them. Even in our insistence that this time of year involve little rushing or stress or concern about perfection, I feel uneasy and out of sync with the world around me. My contribution to post-holiday, back-to-work small talk is usually, &ldquo;it was quiet, which is how we like it.&rdquo;</p>
<p>I don&rsquo;t begrudge anyone their enjoyment of the season however they choose to observe it, but sometimes there are things that we don&rsquo;t so much get over as much as we learn to live with them, and this time of year is one of those things for me.</p>
<p>I feel lucky to have my home and family, and space to be however I&rsquo;m going to be about this time of year. I hope you have that space, too.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-20</title>
      <link>https://mike.puddingtime.org/posts/2023-12-20-daily-notes/</link>
      <pubDate>Wed, 20 Dec 2023 09:11:35 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-20-daily-notes/</guid>
      <description>Green tea. Deciding is work.</description>
      <content:encoded><![CDATA[<h2 id="green-tea">Green tea</h2>
<p>Years and years ago I went through a series of prescriptions for ADHD. Each med either did nothing much for me, spiked my blood pressure, or did something to my sleep that required a second med to offset it. No thanks. I learned over time that I did about as well as the best medications by minding my sleep, keeping a lot of carbs out of my diet, and doing a lot of walking and running. I also self-medicated, mostly with coffee.</p>
<p>I was never much of a tea person because I never really had good tea until I was out for breakfast one morning and the restaurant&rsquo;s description of its loose-leaf Irish Breakfast sounded so compelling that I gave it a try and ended up converting, while remaining convinced that the best self-medication was still strong coffee.</p>
<p>Coffee might offer the strongest kick, but it&rsquo;s also a very spiky caffeine delivery mechanism. Tea has a smoother ramp and falloff, so getting a few cups in me up through late morning does a good job of helping me stay focused without feeling amped or dealing with a hard mid-day crash.</p>
<p>I do go a week now and then where coffee seems more compelling, but with the <a href="/posts/2023-12-09-daily-notes/">CGM</a> and more real-time feedback I noticed that coffee also seemed to be contributing to spikes in my glucose levels. A little research suggested I was on to something there, and also put me on the path of considering green tea, since a few studies indicate it can lower your <a href="https://www.cdc.gov/diabetes/managing/managing-blood-sugar/a1c.html">A1C</a> and fasting glucose levels.</p>
<p>So I started ordering samplers of green teas, including Gyokuro, which is different from many other varieties of green tea in that it is grown under shade. That stimulates higher amounts of theanine and caffeine, and gives it a different, more savory flavor. It is also very expensive compared to other varieties.</p>
<p>But in addition to costing a lot and tasting good, it&rsquo;s a nicer, steadier, more stable ramp than coffee. And since adopting it as my preferred morning drink a few weeks ago I&rsquo;ve been seeing a change in my blood glucose stability: It looks less spiky, when there are spikes they are shorter, and my overall number of &ldquo;stable hours&rdquo; each day have gone from six or eight to 16 or 18, and sometimes entire days with no spikes. Some of that is just a natural outcome of having a GCM and getting fast feedback: I&rsquo;ve made a few other adjustments that are probably having an effect, too. But there&rsquo;s an added layer of calm to everything that seems to have come from cutting coffee out, so I&rsquo;ve moved coffee into the category of things I try to pair with some extra exercise to help blunt the spikes.</p>
<p>Gyokuro, tho &hellip; spendy! Open to recommendations for other green teas. I think I made a mistake starting with the super good stuff.</p>
<h2 id="deciding-is-work">Deciding is work</h2>
<p>I don&rsquo;t know where I heard this advice, and wish I had heard it earlier in my management career, but I found myself offering it to someone else again this week, so I&rsquo;ll repeat it here:</p>
<p><em>New managers should write down decisions they make, even the small ones.</em></p>
<p>Management in general is poorly understood, often badly done, and suffers from the necessary involvement of humans. In the tech industry, it is further set back by the fundamentally screwy ideas of the people with power in tech, whether that&rsquo;s formal (reporting structures and institutional authority), or informal (the things that get you social capital and standing in a tech environment).</p>
<p>By &ldquo;screwy&rdquo; I mean utterly misguided conceptions about why we have managers, what they are there for, and why you should or shouldn&rsquo;t want to be one. There is no real agreement on what value a manager provides. People toss around phrases like &ldquo;working manager&rdquo; to suggest that you have to make a special effort to note that a particular manager works at all. People will calmly tell you that a manager who is not as narrowly specialized as they are is not qualified to manage them.</p>
<p>When people tell me they <em>want</em> to manage, I feel the most divergent feelings &ndash; a running in opposite directions simultaneously, and a deep curiosity about why. Because sometimes the motivations aren&rsquo;t great: They&rsquo;re not about making a better work environment, or helping people unlock their own potential, or improving x,y and z outcomes, or any number of concrete and pro-social objectives. Sometimes, though, they&rsquo;re just about getting to be the boss and issue orders, and not even to do things that will make the business better, but just to have the final say in some issue of personal comfort or preference. And that&rsquo;s a level of venality that flies, because nobody&rsquo;s super clear about what it is a manager is for, anyhow, so why not personal enrichment and veto powers?</p>
<p>Assuming a management role in that environment is hard. It is a constant process, if you have a scrap of self reflection in you, of reminding yourself what you&rsquo;re there for. In the early going it is a constant process of realigning your inner voice to a new conception of what makes you valuable.</p>
<p>Your <em>decisions</em> are what make you valuable. And you probably make a lot of them. They&rsquo;re a meaningful unit of value. It takes labor to produce them. In the absence of decisions &ndash; guiding, directing, weighing, delegating, prioritizing &ndash; teams will not achieve their potential. And that doesn&rsquo;t just mean their <em>productive</em> potential. They also won&rsquo;t live up to their potential to be places where you can do your best, most satisfying work.</p>
<p>So, on the days when you are feeling a little small, or beleaguered, or uncertain of what it is you&rsquo;d say you do, it helps to look at a list of decisions you made &ndash; they&rsquo;re a record of the things you unstuck, clarified, or got back on track; catastrophes averted, outcomes improved, opportunities made good on. They&rsquo;re why you&rsquo;re there.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-19</title>
      <link>https://mike.puddingtime.org/posts/2023-12-19-daily-notes/</link>
      <pubDate>Tue, 19 Dec 2023 21:07:32 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-19-daily-notes/</guid>
      <description>Better Wayland taskbar icons in GNOME. Assigning MIME types to xdg-open.</description>
      <content:encoded><![CDATA[<h2 id="better-wayland-taskbar-icons-in-gnome">Better Wayland taskbar icons in GNOME</h2>
<p>I don&rsquo;t want a ton of taskbar icons, but there are a few I wouldn&rsquo;t mind, like for 1Password, my clipboard manager, and a TailScale monitor. GNOME has <a href="https://blogs.gnome.org/aday/2017/08/31/status-icons-and-gnome/">an unfavorable opinion about that</a>, so it&rsquo;s on extension developers to restore the lost functionality. <a href="https://gitlab.com/AndrewZaech/aztaskbar">App Icons Taskbar</a> is the best one I&rsquo;ve found so far under Wayland. A few observations about it:</p>
<p>Out of the box, the icons are huge and on the left of the taskbar. You can fix that in the preferences. I turned off the panel height setting  and set the icon height to 15 and it looks pretty normal. It does show running apps as well as iconified ones, and there&rsquo;s an &ldquo;unpin&rdquo; option in the context menu for each if you don&rsquo;t like that, but it doesn&rsquo;t work predictably.</p>
<h2 id="assigning-mime-types-to-xdg-open">Assigning MIME types to xdg-open</h2>
<p>macOS has the <code>open</code> command, and Linux has <code>xdg-open</code>. They do pretty much the same thing, which is open files from the command line. My Hugo posting script, for instance, runs <code>open</code> at the end to plop the Markdown it just generated into an editor.</p>
<p>With a Mac and <code>open</code> it&rsquo;s pretty easy to manage file associations: You just right-click the icon of a file you want to associate with an app and pick the app you want to open that file type.</p>
<p>With Linux, it&rsquo;s a little more fraught. GNOME offers a Default Apps setting, but it only offers a few options: web, mail, calendar, music, video, and photos. What about Markdown, YAML, ruby, etc.? For that, you want the <code>xdg-mime</code> command:</p>
<p><code>xdg-mime default sublime_text.desktop text/markdown</code></p>
<p>The <code>sublime_text.desktop</code> part (or whatever you want to use) may take a little finding. I used <code>locate</code> to figure out what the file was called on my system.</p>
<p>Once you&rsquo;ve run it, you can find it configured in <code>~/.config/mimeapps.list</code>.</p>
<p>Once assigned, <code>xdg-open foo.md</code> will open the file in the correct app.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-18</title>
      <link>https://mike.puddingtime.org/posts/2023-12-18-daily-notes/</link>
      <pubDate>Mon, 18 Dec 2023 07:22:26 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-18-daily-notes/</guid>
      <description>Inhibitor Phase. The macOS kill ring. The Mac Studio. StarCraft on Linux via Steam.</description>
      <content:encoded><![CDATA[<h2 id="inhibitor-phase">Inhibitor Phase</h2>
<p>I finished <em>Inhibitor Phase</em> last night. It worked for me. The <em>Revelation Space</em> universe is terrifying and strange, and the book preserves that mood, but also allows in some warmth and hope. I wouldn&rsquo;t want to live in that future, but the characters are compelling and human.</p>
<h2 id="the-macos-kill-ring">The macOS kill ring</h2>
<p>macOS has a kill ring! Who knew!? Well, evidently <a href="https://brettterpstra.com/2023/12/18/macos-keybinding-tricks-the-kill-ring/">Brett Terpstra knew</a>. Interesting rundown on how it works and some keybindings to make it work even better. I don&rsquo;t know if you&rsquo;ll end up ditching your existing clipboard manager, but for some workflows you might end up not needing it as much.</p>
<blockquote>
<p>&ldquo;Note: The kill ring is shared between documents in the same app, but generally not between apps.&rdquo;</p>
</blockquote>
<p>Well, that&rsquo;s a little less exciting, but still.</p>
<h2 id="the-mac-studio">The Mac Studio</h2>
<p>I moved it underneath the desk today, and out of sight. It&rsquo;s still connected to the KVM, it is still where my photos live, it&rsquo;s what my photo backup automation runs through, and it&rsquo;s how I can run BlueBubbles on all my Linux stuff. So it is still a part of my computing life.</p>
<p>But it&rsquo;s sort of a moment in my computing history to move it out of sight. Last week I think I spent less than an hour using it, and that was mostly because I was trying to make sure I had pulled everything down from Adobe Cloud and onto the external drive I keep all my photos on, in order to prepare for moving them over to a bigger drive I will have connected to the Linux desktop where I am spending pretty much all my time now.</p>
<p>I don&rsquo;t think that means I&rsquo;m done with it, exactly, but I could be getting close. It&rsquo;s a nice machine &ndash; the nicest Mac I have ever owned &ndash; but that sense of Apple all-pervasiveness that started tugging at the back of my thoughts several months ago has not abated. It feels a little weird to me, because if you&rsquo;d put a few ideas in front of me and asked me to expound a year ago, I&rsquo;d say &ldquo;sure, I like Apple stuff because it&rsquo;s one less thing to think about.&rdquo;   I don&rsquo;t feel that way anymore.</p>
<p>I think I said this previously, on the microblog I got rid of, but in some ways the &ldquo;everything just works together&rdquo; thing was beginning to become its own thing to have to think about &hellip; a gestalt or collective or monolith that must somehow be preserved.</p>
<p>So, the Studio can cool its heels under my desk, out of sight, spending most of its cycles on running backups every morning at 3 and providing a relay for BlueBubbles. I am not sure what the conditions will be to decide it doesn&rsquo;t have a place any longer. I&rsquo;ll need to understand how post-Lightroom life would work, I suppose, or if it even can.  I&rsquo;m sure if I sat down with a pad and pen I could list a few other things I need to figure out to be post-Apple. But it is a compelling idea.</p>
<h2 id="starcraft-on-linux-via-steam">StarCraft on Linux via Steam</h2>
<p>A lot of people do it with WINE, etc. <a href="https://www.reddit.com/r/starcraft/comments/11ggx4x/comment/k8fcqj2/?utm_source=share&amp;utm_medium=web2x&amp;context=3">Turns out</a> you can just add Battle.net to Steam as a non-Steam game, run the installer under the Proton compatibility tool, and then just install StarCraft (or any other Blizzard Windows game, apparently) and it works fine. I did it with StarCraft Remastered. Runs great.</p>
<p>From reddit:</p>
<blockquote>
<ol>
<li>Go to battle.net and download &ldquo;Battle.net-Setup.exe&rdquo;</li>
<li>Open Steam and click the Games menu and select Add a non-Steam game to my library</li>
<li>Click the Browse button and select your &ldquo;Battle.net-Setup.exe&rdquo; file</li>
<li>That will add &ldquo;Battle.net&rdquo; as a game. Open it and click the Manage icon (the gear symbol on the right) and select the Properties command.</li>
<li>On the Properties window, click the Compatibility tab and check the &ldquo;Force the use of a specific Steam Play compatibility tool&rdquo;. A pulldown menu will appear showing &ldquo;Proton Experiment&rdquo;. You can leave that alone and close the window.</li>
<li>Click Play back on the Battle.net game entry in steam and it should launch fine.</li>
</ol>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-16</title>
      <link>https://mike.puddingtime.org/posts/2023-12-16-daily-notes/</link>
      <pubDate>Sat, 16 Dec 2023 14:42:04 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-16-daily-notes/</guid>
      <description>A soft KVM switcher for Dell monitors and Linux. Photo housekeeping.</description>
      <content:encoded><![CDATA[<h2 id="a-little-bit-of-c-for-a-dell-kvm-switcher-in-linux">A little bit of C for a Dell KVM switcher in Linux</h2>
<p>My Dell monitor has a built-in KVM, which is great. The included Mac software allows you to bind a hotkey to flip between machines. There&rsquo;s no such thing for Linux, but I found <a href="https://www.dell.com/community/en/conversations/monitors/u2723qe-kvm-using-a-keyboard-shortcut-to-switch-in-linux/647fa06af4ccf8a8de56ccc8">this post on the Dell support forums</a> that explains how to use <code>ddcutil</code> to trigger a switch.</p>
<p>The posted C to make it a little executable was victimized by Dell&rsquo;s HTML sanitization, so here it is with the needed includes:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="c1">// switch_screen.c
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;stdlib.h&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;sys/types.h&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nf">setuid</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">system</span><span class="p">(</span><span class="s">&#34;ddcutil setvcp 60 0x11&#34;</span><span class="p">);</span> <span class="c1">// Change this for each computer
</span></span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p>I compiled it and made a custom keyboard shortcut for it in GNOME (<code>Settings -&gt; Keyboard -&gt; Keyboard Shortcuts -&gt; View and Customize Keyboard Shortcuts -&gt; Custom Shortcuts</code>).</p>
<p>It works really well. More reliably, in fact, than the Dell-provided functionality does on the Mac, where the machine periodically forgets it is actually connected to the monitor.</p>
<p>There&rsquo;s some latency when you switch, too: maybe 4 seconds to switch from Linux to Mac, and upwards of 8 seconds going in the other direction. Still better than reaching around the back of the monitor to use the hardware button to open the menu and pick a machine.</p>
<h2 id="photo-housekeeping">Photo housekeeping</h2>
<p>With a decent machine under the desk I&rsquo;m going to take another run at learning Darktable, so I spent some time today making sure everything is backed up correctly. I&rsquo;ve had my photos from before 2018 backing up to Backblaze for a while, but was semi-trusting a combo of local network drives and Adobe sync to handle everything since. Today I set up backups from the Thunderbolt photo drive to the Synology, and then I&rsquo;ll set up backup jobs from the Synology to Backblaze.</p>
<p>Al and I were having a chat about my occasional impermanence jags and she wanted to know, maybe a little nervously, what the implications of that were for my pictures.</p>
<p>After dealing with double-checking the health of a bunch of automated backups today, and prepping to make detaching from the Adobe ecosystem a little easier, I&rsquo;m revisiting an idea I had a long while back of making yearly physical books. I&rsquo;ve got terabytes of photos, but when I go through and do the exercise of picking &ldquo;five star&rdquo; images from each year since ~2000, it &hellip; it doesn&rsquo;t come down to terabytes. I&rsquo;d like to do that exercise again, or at least review my choices, make a few redundant online archives, and make a few physical books: One for us, one for Ben.</p>
<p>Whenever I think about what I&rsquo;m trying to do here, I realize that I archive and keep much, much more than I want because I haven&rsquo;t taken the step of specifically preserving what seems worth preserving. So I lug around terabytes of data, zealously preserving all of it and fretting about losing any of it. Making a few physical editions and stowing a few backups of digital proofs of what matters would do a lot to make it all feel less burdensome.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-13</title>
      <link>https://mike.puddingtime.org/posts/2023-12-13-daily-notes/</link>
      <pubDate>Wed, 13 Dec 2023 14:06:30 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-13-daily-notes/</guid>
      <description>It&amp;rsquo;s the year of Linux on my desktop. Simple GNOME window tiling. Racism word play is unhelpful and confusing. New-to-me Alastair Reynolds novel. How&amp;rsquo;s the job going?</description>
      <content:encoded><![CDATA[<h2 id="year-of-linux-on-my-desktop">Year of Linux on my Desktop</h2>
<p>Now that I am running Xorg instead of Wayland on this desktop machine, I am into it. For a while I wasn&rsquo;t willing to spend much of the workday on Linux because I never knew when I&rsquo;d need to share my screen on Zoom, and I spend too much time on calls to want to flip back and forth. I can spend all day with Linux now, because Zoom works fine.</p>
<p>Weirdly, in fact, this machine is working <em>better</em> than my Mac in that regard. My Jabra Engage 75 &ldquo;just works&rdquo; in a way it didn&rsquo;t with my Mac, and the AirPods I adopted because my expensive Jabra headset stopped working with my Mac had stopped working smoothly with Zoom on Mac, too. I had to do this thing where I opened the audio preferences and did a sound test before every call, or the audio out only worked about half the time.</p>
<p>Slack, Emacs, Chrome, Firefox, my terminal app &hellip; now that I&rsquo;ve moved all the SF fonts over from the Mac it is not easy to tell which machine I am on from just looking because I hide docks and toolbars on both, have similar wallpaper, and all the apps look and act pretty much alike.</p>
<h2 id="tactile-for-simple-gnome-window-tiling">Tactile for simple GNOME window tiling</h2>
<p>I miss <a href="https://rectangleapp.com/">Rectangles</a> on the Mac a lot. I am not sure there&rsquo;s anything quite like it in Linux, but the <a href="https://extensions.gnome.org/extension/4548/tactile/">Tactile</a> extension gets me close enough to my main use case, which is getting editors and browsers into a &ldquo;takes up 90% of the vertical and 40% of the horizontal, but centered&rdquo; state.</p>
<p>It lets you set up four layout maps, so it&rsquo;s possible to do combos. Terminal windows, for instance, don&rsquo;t need that kind of room, so I mapped layout 2 in such a way that I can hit Super-T to invoke the tile map, then tap <code>2</code> to activate the second map, then the specific key to place the terminal in the right tile for that map.</p>
<p>We&rsquo;ll see how it goes. For now it&rsquo;s a way to quickly get unruly windows into the right state when they appear.</p>
<h2 id="race-wordplay-is-a-bad-idea">Race wordplay is a bad idea</h2>
<p>Today someone on my team asked me how to interpret a comment made to them:</p>
<p>&ldquo;I&rsquo;m as racist as any white American, but I&rsquo;m not racist.&rdquo;</p>
<p>Which &hellip; please no.</p>
<p>The person this was said to is not a native English speaker and isn&rsquo;t white, and what probably seemed like a sort of self-deprecating but amusingly paradoxical thing to the person saying that didn&rsquo;t land that way with the person hearing it: It was confusing and seemed a little nonsensical.</p>
<p>Since the person identifying as a non-racist racist is a fellow Gen-Xer, it wasn&rsquo;t hard to untangle the whole thing and <em>make</em> it make sense: People of a certain age remember when &ldquo;racist&rdquo; was more synonymous with &ldquo;bigot,&rdquo; &ldquo;klan adjacent,&rdquo; etc. It meant &ldquo;possessed of prejudiced thinking and racial hostility.&rdquo;  Well, it doesn&rsquo;t anymore, and whatever we think of that, it is a more &hellip; I dunno &hellip; <em>theoretical</em> word, redolent of institutions, systems, power relationships, and unconscious bias. From the perspective of someone who has been around for a while, it&rsquo;s just a different word now.</p>
<p>Personally, when I encounter people who are bigots or prejudiced, I just think of them as &ldquo;bigots&rdquo;  and that&rsquo;s the word I&rsquo;d use if put on the stand. I&rsquo;m on board, with reservations, with the newer usage and try to save it for when I&rsquo;m describing a racist policy, a racist law, a racist belief, or racist behavior.</p>
<p>I don&rsquo;t do the whole &ldquo;I&rsquo;m racist&rdquo; thing because the memo on this particular usage has <em>not</em> distributed evenly, and that person on my team reminded me that people don&rsquo;t uniformly agree on or understand &ldquo;racist&rdquo; as a people label, or how to handle it when someone deploys it on themselves or another person.</p>
<p>&ldquo;Is this some kind of weird white people thing?&rdquo; they asked, legitimately unsure of whether they were being fucked with or if perhaps this person was telling them something deeply unsettling about themselves.</p>
<p>&ldquo;No,&rdquo; I said, &ldquo;it&rsquo;s someone who remembers a different time and they&rsquo;re trying to navigate this split usage and tell you something about themselves, but honestly they shouldn&rsquo;t have done it that way and you&rsquo;re right to find it confusing. They just wanted you to know that they understand they were raised in a racist society and have some racist ideas, but don&rsquo;t consider themselves personally possessed of racial hostility or what we&rsquo;d maybe better call bigotry.&rdquo;</p>
<p>&ldquo;Well, it embarrassed me because I had no idea what it meant and I was afraid to ask because it sounded like they were telling me they were, like, <em>racist</em>.&rdquo;</p>
<p>When it comes to something as charged, uncomfortable, and frankly fucked up and backwards as race in this country, maybe save the wordplay and speak plainly.</p>
<h2 id="inhibitor-phase">Inhibitor Phase</h2>
<p>I&rsquo;ve always been fond of most of Alastair Reynolds&rsquo; Revelation Space stuff. The first one in the series left an impression, but <em>Chasm City</em> is my favorite. I&rsquo;d seen a few mentions of <em>Inhibitor Phase</em> here and there, but the descriptions didn&rsquo;t work for me. Last night it popped up again so I decided to read a few actual reviews, and now I&rsquo;m several chapters in and really liking it. It helped to know there was some continuity with previous Revelation Space characters.</p>
<p>Reynolds has gotten smoother and better over time. I was a working editor when I first read <em>Revelation Space</em>, so it was my job to see all the mechanics, and I couldn&rsquo;t unsee some of his. Once I understood that the book evolved out of his earliest fiction writing and had started life as a short fiction contest entry I felt a little more forgiving and quit comparing him to Iain M. Banks.</p>
<p>Anyhow, I&rsquo;ve been casting about for some fiction after digesting that giant book about the MCU, and I&rsquo;m glad to have this.</p>
<h2 id="hows-the-job-going">How&rsquo;s the job going?</h2>
<p>Okay.</p>
<p>It&rsquo;s good, on the days I feel frustrated about pre-IPO tech company life, to remember that I gave myself a lot of time and space to choose, and this is what I chose. Again. With ten years of previous experience to guide the decision. It&rsquo;s not a hard place to be useful, and the frustrations are easy to keep in context. It remains hard, some days, to be back toward the bottom of the hill building trust with new people.</p>
<p>But today was also an interesting day for feedback:</p>
<ul>
<li>&ldquo;Susan was right. You <em>do</em> look like Christian Bale&rsquo;s older brother. And your voice is mesmerizing.&rdquo;</li>
<li>&ldquo;I have forgotten there was ever a time you weren&rsquo;t here.&rdquo;</li>
<li>&ldquo;I&rsquo;m glad you hired Mike. It&rsquo;s great to have another adult.&rdquo;</li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/YTHtEpKBZh4?si=1gCbu6mUBQFBBbjv" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-12</title>
      <link>https://mike.puddingtime.org/posts/2023-12-12-daily-notes/</link>
      <pubDate>Tue, 12 Dec 2023 12:55:14 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-12-daily-notes/</guid>
      <description>Okay, fine, Fedora. Getting AirPlay 2 with shairport-sync. Fixing Flatpak Zoom fonts. LocalSend for x-platform AirDropesque sharing.</description>
      <content:encoded><![CDATA[<h2 id="okay-fine-fedora">Okay, fine, Fedora</h2>
<p>Nothing like a four-hour-long strategy summit to tend to a quick bakeoff between Pop!_OS and Fedora. As Ed noted last night after reading <a href="/posts/2023-12-11-daily-notes/">yesterday&rsquo;s post</a>, you can always tell Fedora to load GNOME as an Xorg session instead of a Wayland one. What did that get me?</p>
<ul>
<li>Working taskbar widgets</li>
<li>Decent performance from my Elgato CamLink 4K</li>
<li>Decent screensharing in Zoom</li>
<li>Mostly normalish typography? Less wild variation anyhow.</li>
<li>Fedora&rsquo;s software store app is faster and less glitchy than the one Pop!_OS offers.</li>
<li>Fedora&rsquo;s software is a little more up to date.</li>
</ul>
<p>Is it snappier? I dunno.</p>
<p>Mainly what I know is that I won&rsquo;t be fragmenting my muscle memory across three OSes.</p>
<p>What I also know is that Xorg is living on borrowed time in Fedora-land.</p>
<h2 id="airplay-2-with-shairport-sync">AirPlay 2 with shairport-sync</h2>
<p>I mentioned <a href="https://github.com/mikebrady/shairport-sync">shairport-sync</a> as a way to stream to a Linux machine. From the command line, you just run it and tell it which backend to direct sound to. It advertises your machine with Avahi, you stream to the machine, sound comes out.</p>
<p>As a systemd service it is fussier because there are permissions issues getting at Alsa and or Pipewire. I could see the endpoint in the AirPlay list, but nothing was coming out and there were a bunch of errors when I checked status.  I tried a few obviously bad ideas then Googled in earnest.</p>
<p>Putting this in  <code>~/.config/systemd/user/shairport-sync.service</code> then enabling and starting it with <code>systemctl --user</code> did the thing:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[Unit]
</span></span><span class="line"><span class="cl">Description=Shairport Sync - AirPlay Audio Receiver
</span></span><span class="line"><span class="cl">After=pipewire-pulse.service
</span></span><span class="line"><span class="cl">Wants=network-online.target
</span></span><span class="line"><span class="cl">After=network.target network-online.target
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Service]
</span></span><span class="line"><span class="cl">Type=simple
</span></span><span class="line"><span class="cl">StandardOutput=journal
</span></span><span class="line"><span class="cl">ExecStart=/usr/bin/shairport-sync -o alsa
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Install]
</span></span><span class="line"><span class="cl">WantedBy=default.target</span></span></code></pre></div>
<p>So the Linux box is hooked up to the office bookshelf speakers, I can play music on it directly, or I can stream to it from the Mac or my phone without manually stopping and starting shairport-sync from the command line.</p>
<h2 id="fixing-flatpak-zoom-fonts">Fixing Flatpak Zoom fonts</h2>
<p>Zoom from a Flatpak looks particularly bonkers under GNOME: The fonts are tiny to the point of unreadability. Evidently they used QT to build it, etc. etc. There are a bunch of incantations all over the place that involve jacking with config files. There is also simply doing an override of the QT scale factor:</p>
<p><code>sudo flatpak override --env=QT_SCALE_FACTOR=1.5 us.zoom.Zoom</code></p>
<p>Adjust to taste.</p>
<h2 id="localsend-is-pretty-much-cross-platform-airdrop">LocalSend is pretty much cross-platform AirDrop</h2>
<p>If your machines are on the same network, <a href="https://localsend.org/#/">LocalSend</a> works across Mac, iOS/iPadOS, and Linux to provide an AirDrop-style text, file, and image transfer service. Looks like it also supports Windows and Android.</p>
<p>I have it set to minimize to taskbar on the Mac and Linux machines. Just sits there and does its thing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-11</title>
      <link>https://mike.puddingtime.org/posts/2023-12-11-daily-notes/</link>
      <pubDate>Mon, 11 Dec 2023 11:24:37 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-11-daily-notes/</guid>
      <description>Pop!_OS redux. Bad company in Emacs. You are not my spin doctor. A fun documentary about the Star Wars Holiday Special. Hugo previews in Emacs.</description>
      <content:encoded><![CDATA[<h2 id="pop_os-redux">Pop!_OS redux</h2>
<p>I set up a Linux PC over the weekend, and I&rsquo;m going to give Pop!_OS a try on it. I want to be able to use this machine for work sometimes, and there are a few desktop-y things that work better under Pop! than they do Fedora, maybe owing to Pop! remaining on xorg. Screen sharing in Zoom, for instance, works like you&rsquo;d expect on xorg and does not under Wayland. Apps with taskbar icons also work without the need for an extension.</p>
<p>You can tell Pop! is a little behind Fedora 39, but I&rsquo;m not sure it&rsquo;s that big a deal. I found <a href="https://launchpad.net/~ubuntuhandbook1/+archive/ubuntu/emacs">a PPA for Emacs 29.1</a>, but don&rsquo;t worry about much else: The stuff that moves with any speed is coming from a Flatpak. My <code>~/bin</code>, <code>~/.fonts</code>, and <code>~/.config/doom</code> are all handled via SyncThing.</p>
<p>What else?</p>
<ul>
<li>I noticed that my Elgato CamLink 4k + FujiFilm X-T2 work with a little less lag. I think there still is some, but it&rsquo;s pretty smooth.</li>
<li><a href="https://github.com/mikebrady/shairport-sync">shairplay-sync</a> has some permissions issues as a service, but works fine when I start it in daemon mode, so I&rsquo;ve moved my bookshelf speakers over to this machine: It acts like an AirPlay 2 endpoint for all my other stuff, and I can use Cider to get at my Apple Music stuff when I&rsquo;m working on this machine.</li>
<li>There&rsquo;s less font weirdness than under Fedora, meaning most apps show most fonts at a normal size out of the box and don&rsquo;t require passing environmental variables along or messing with config files.</li>
<li>My Jabra Engage 75 works fine with this thing, so no more messing around with AirPods: I just plugged it into an open port and I&rsquo;m back to reliable audio.</li>
<li>The rbenv and ruby-build that ship with Jammy don&rsquo;t have any of Ruby 3.x available. I just installed that on my own and added ruby-build as a plugin. Problem solved.</li>
</ul>
<p>Otherwise &hellip; I got through a day with it and it worked great: No weird glitches, crashes, or whatever. Multiple Zoom calls. Oh, and I&rsquo;m down to my last possum sticker, but the wireless scanning stuff works great, too: I managed to get a hi-res scan of my last sticker so I can make more.</p>
<h2 id="bad-company">Bad company</h2>
<p>I like <code>company-mode</code> in Emacs when I&rsquo;m coding, I hate it when I&rsquo;m writing prose. It slows everything down to suggest words I do not need suggested. This incantation fixed it:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="k">setq</span> <span class="nv">company-global-modes</span> <span class="o">&#39;</span><span class="p">(</span><span class="nf">not</span> <span class="nv">text-mode</span> <span class="nv">markdown-mode</span> <span class="nv">org-mode</span><span class="p">))</span></span></span></code></pre></div>
<h2 id="dont-spin-me">Don&rsquo;t spin me</h2>
<p>I enjoyed the most recent episode of <a href="https://www.patreon.com/badfaithpodcast/posts">Bad Faith</a>, &ldquo;Vibecession?&rdquo;, partly for the analysis and partly because one of the guests got to the thing that has been bothering me the most about the discourse around the economy:</p>
<blockquote>
<p>&ldquo;&hellip; as to why people are so heated in the first place I think you have a few things going on. One you do have people who are just kind of concerned about Biden&rsquo;s electoral prospects they&rsquo;re worried about Trump and they&rsquo;re worried about [&hellip;] a negative narrative.</p>
</blockquote>
<blockquote>
<p>&ldquo;You&rsquo;ve always got people out there who although they [&hellip;] appear to be kind of making objective arguments about this or that topic they&rsquo;re really mostly worried about trying to kind of steer the discourse in one way or another to to be more favorable to Democrats or less favorable to Democrats or whatever so there&rsquo;s that aspect [&hellip;] of the election worrying &hellip;&rdquo;</p>
</blockquote>
<p>I posted about it a few days ago:</p>
<iframe src="https://social.lol/@mph/111547466665352579/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>&hellip; and then:</p>
<iframe src="https://social.lol/@mph/111547498854213817/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>&hellip; and then I favorably boosted this:</p>
<iframe src="https://mastodon.social/@tess/111545872352995486/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://mastodon.social/embed.js" async="async"></script>
<p>&hellip; because if there&rsquo;s one word I have worn some grooves into over the past four years, it is &ldquo;precarity.&rdquo;</p>
<p>I don&rsquo;t know. We can either speak truthfully or we cannot, and I am not responding well to progressives or leftists or whatever who do not want to speak truthfully because they believe that are actually unpaid press secretaries for the Biden administration.</p>
<p>I&rsquo;m not telling anyone what to do with their spare time, I&rsquo;m just saying that if you&rsquo;re talking to me, leave me out of the four-dimensional chess game. I show up every election and vote exactly as you&rsquo;d expect. It is <em>okay</em> if, in December of the year before an election, I say &ldquo;I wish we had a better alternative than Biden.&rdquo; And it is super okay if I say, &ldquo;you know what, I wish we had a better alternative than this entire way of being we&rsquo;ve landed on.&rdquo;</p>
<h2 id="a-disturbance-in-the-force">A Disturbance in The Force</h2>
<p><em><a href="https://www.disturbanceintheforce.com/">A Disturbance in the Force</a></em> is a documentary about the 1978 <em>Star Wars Holiday Special</em>.</p>
<p>Al and I went to see it at the Hollywood Theater several years ago. I managed to win a cool Boba Fett poster (the cartoon version, from the special). It truly is wretched, but the documentary does a nice job of explaining that actually <em>everything</em> in 1978 was at least a little wretched, including the entire variety show genre.</p>
<p>And it does a nice job of explaining why the silly thing even mattered to anyone.</p>
<p>I had just turned nine when <em>Star Wars</em> came out. My family went to the theater to see a 6 p.m. showing on opening weekend in 1977, and ended up waiting around for a special 10 p.m. showing the theater added. It stayed in that theater for the better part of a year, and it became a way to just get me out of the house: Mom would give me ticket money, I&rsquo;d walk across the field and hop a ditch to get into the loading dock area of the mall, then walk around to the theater. When we visited relatives that year, &ldquo;what would Mike like to do&rdquo; was always &ldquo;go see <em>Star Wars</em>.&rdquo;</p>
<p>I was completely saturated in anything <em>Star Wars</em> I could get my hands on. Magazines, copies of <em>People</em> featuring any of the cast, the novelization, the comic books, <em>aaaaanything.</em> So the Holiday Special was a huge deal because it was gonna be more actual <em>Star Wars</em> and not just stuff <em>about</em> <em>Star Wars</em>.</p>
<p>And, as someone points out in the documentary, <em>Star Wars</em> was a very wild property at that point. Like, there were hints of deep lore and all, but the only &ldquo;canon&rdquo; you had to work with was the movie itself and wild theorizing. Some heretics thought Darth Vader was actually a robot. There were rumors that there would be a whole movie about Wookies. It was just this crazy thing that had landed in our pop culture lives and nothing was ever going to be the same again. So we were ripe for whatever George Lucas wanted to churn off the assembly line, including, apparently, a superannuated Wookie grandfather perving out to VR porn with Dianne Carroll.</p>
<p>Anyhow, the documentary is a fun 90-minute diversion. Not super heavy, but cool to hear from people who actually worked on it, and fun to see a lot of period clips, like the bonkers Donnie and Marie episode with Kris Kristofferson Han Solo and Paul Lynde Imperial officer.</p>
<h2 id="hugo-previews-in-emacs">Hugo Previews in Emacs</h2>
<p>I made this function to spin up the Hugo preview server while still working in Emacs:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-start-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Run Hugo server with live reloading.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">root</span> <span class="p">(</span><span class="nv">projectile-project-root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">default-directory</span> <span class="nv">root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">compile</span> <span class="s">&#34;hugo server -D --navigateToChanged&#34;</span> <span class="no">t</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-stop-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Stop Hugo server.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">kill-compilation</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="ss">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="ss">:prefix</span> <span class="p">(</span><span class="s">&#34;H&#34;</span> <span class="o">.</span> <span class="s">&#34;Hugo&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="ss">:desc</span> <span class="s">&#34;Start Hugo Server&#34;</span> <span class="s">&#34;S&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-start-hugo-server</span>
</span></span><span class="line"><span class="cl">       <span class="ss">:desc</span> <span class="s">&#34;Stop Hugo Server&#34;</span> <span class="s">&#34;s&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-stop-hugo-server</span><span class="p">))</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-10</title>
      <link>https://mike.puddingtime.org/posts/2023-12-10-daily-notes/</link>
      <pubDate>Sun, 10 Dec 2023 20:35:56 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-10-daily-notes/</guid>
      <description>MCU: The reign of Marvel Studios. Doing nothing.</description>
      <content:encoded><![CDATA[<h2 id="mcu-the-reign-of-marvel-studios">MCU: The Reign of Marvel Studios</h2>
<p>I&rsquo;m one of those people who has felt the glow of the Marvel Cinematic Universe (MCU) dim a little, but even if I&rsquo;m not as into the product as I used to be I am pretty fascinated by Marvel Studios as a matter of operational excellence. <a href="https://www.goodreads.com/en/book/show/77264987"><em>MCU</em> is a history of Marvel Studios</a> that starts back in the pre-MCU &rsquo;90s and ends some time earlier this year.</p>
<p>It&rsquo;s an interesting book!</p>
<p>I didn&rsquo;t understand how toy-driven Marvel was in the early going, nor how far into the MCU era that toy-making imperative drove thinking, nor how much the sexism of the toy industry delayed the introduction of women characters.  Similarly, the weird split between the movie and tv properties that never made any sense to me is laid bare as run-of-the-mill corporate foolishness.  It ends up answering a lot of questions about why it is that an outfit so excellent at execution did so many weirdly non-excellent things.</p>
<p>The book ends on a hopeful note, suggesting that the overexposure, the sheer glut of product, and the downward creep in quality are all the result of overextending leader Kevin Feige, but that Marvel may be taking a step back and slowing things down enough to restore a little brand equity.</p>
<h2 id="doing-nothing">Doing nothing</h2>
<p>It was a good weekend to do pretty much nothing. Rainy, chilly, dark. It made more sense to just button up and hide out. So I read, played a few games, and fiddled with a Linux PC in my office. It was all pretty aimless, and that felt pretty good.</p>
<p>There&rsquo;s a part of me that is beginning to feel a little restless. Work has taken a lot of energy, but the very busy annual planning cycle is over and I made it a point to go pretty easy on my team this quarter: We need to move our endpoint management system out of self-hosted infra and into the vendor&rsquo;s cloud, and I didn&rsquo;t want much else cluttering up December and January.</p>
<p>So, things are slowing down and I&rsquo;m getting some mental bandwidth back. I miss writing regularly, even if I wasn&rsquo;t writing much. I don&rsquo;t think about photography much these days. I feel due for a project or pastime.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-09</title>
      <link>https://mike.puddingtime.org/posts/2023-12-09-daily-notes/</link>
      <pubDate>Sat, 09 Dec 2023 11:04:21 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-09-daily-notes/</guid>
      <description>The continuous glucose monitor.</description>
      <content:encoded><![CDATA[<h2 id="the-continuous-glucose-monitor">The continuous glucose monitor</h2>
<p>I got a diabetes diagnosis earlier this year. It wasn&rsquo;t great to hear, but it was good to know: It helped me understand some things that were going on, and it prompted some lifestyle changes that helped me feel a lot better right away.</p>
<p>I asked my doctor if I needed to do regular blood sugar monitoring, and he was happy to prescribe a finger-stick meter.</p>
<p>There was a small disconnect on my care team: The nurse who showed me how to use it recommended readings four times a day. I did that for a few months between checkups, doing readings first thing in the morning, then two hours after each meal. It was interesting, but it didn&rsquo;t feel useful. My numbers were pretty steady, with the occasional surprise if it turned out I&rsquo;d eaten something with a lot of added sugar somewhere in the recipe. The meter could sync with an app (and hence Apple Health), so it was encouraging to at least see my averages creeping down after the initial big drop thanks to medication.</p>
<p>When I showed my numbers to my doctor and came back with a much lower A1C result, he said I could back off the four-times-a-day readings. That was welcome news, because it was a hard habit to keep up. Having ADHD, it made me anxious whenever anything threatened the routine, because it&rsquo;s easy for me to lose a habit. He recommended instead doing morning readings a few times a week, which I&rsquo;ve heard from other people. That was an even harder habit to maintain.</p>
<p>Thanks to a new job and new healthcare provider, I had a little bit of hangtime between physicians. I realized I wasn&rsquo;t sticking to my measurements as closely as I should. Continuous glucose monitors (CGMs), which involve sticking a little smaller-than-an-AirTag tile on your arm and send measurements to your phone every five minutes seemed promising, but not easily prescribed.</p>
<p>I ended up dithering back and forth, and picked up my measurements with a little more diligence, and that told me that the lack of more constant feedback might be a problem: My average blood glucose levels seemed to have plateaued higher than I wanted.</p>
<p>So I went ahead and enrolled in Levels, which will sell you a CGM prescription in exchange for your data.</p>
<p>CMG sensors last for 10 days. It takes about two minutes to install one: Pop off the cover of a spring-loaded applicator, press it against the back of your arm, press a button, smooth down the adhesive, apply a second cover, and pair it with your phone. Then it just sits there taking readings.</p>
<p>The only habits I have to maintain with my CGM are:</p>
<ul>
<li>Recording exercise. The app can read from Apple Health, so my Garmin Instinct and Apple Watch both work with it.</li>
<li>Recording sleep. I use the Sleep Cycle app to record sleep, which talks to Apple Health, which talks to the Levels app.</li>
<li>Recording meals. The Levels app lets you just take a picture of your meal, which it timestamps.</li>
</ul>
<p>It&rsquo;s pretty low maintenance given the data I get back. There&rsquo;s no real &ldquo;data entry&rdquo; unless I decide to go back and record what was in my meal to get little tips about their relative healthfulness for a diabetic.</p>
<p>Generally, though, I&rsquo;ve been content to just observe and adjust thanks to the constant feedback. Given the continuous monitoring, I can see the impact of things I eat in ways I couldn&rsquo;t when I was just doing finger sticks two hours after meals: Things that trigger spikes that come and go well inside that window.</p>
<p>In the 40 days or so I&rsquo;ve had it, I&rsquo;ve made a few adjustments that have both lowered my average blood glucose levels and seem to keep me more stable generally: Spikes last less time, there&rsquo;s less variation during the day, and my waking blood glucose levels are dropping.</p>
<p>The experience has also impressed on me the amazing variability of human bodies. I was following a lot of generic advice that <em>seemed</em> okay because I couldn&rsquo;t see what was happening between measurements. With closer measurement, I could see that some advice works very well for my body, and some just does not.</p>
<p>Drawbacks?</p>
<p>Well, it&rsquo;s expensive. My insurance company doesn&rsquo;t cover it, so I&rsquo;m out of pocket on it. I can afford it and it&rsquo;s worth it to me, but it is not affordable for a lot of people.</p>
<p>Sometimes communications between phone and sensor drop out, but that&rsquo;s not a huge deal. The data is buffered, and if I notice that it&rsquo;s happening I just toggle Bluetooth on and off and it re-pairs and catches the app up.</p>
<p>Sometimes the sticky mounting material doesn&rsquo;t stay stuck and I have to get a large Band-Aid to put over it for showering or making sure it doesn&rsquo;t snag on my sleeve.</p>
<p>In return, though, I get a huge amount of useful information that allows me to make better choices and better judge my tradeoffs because my blood glucose is generally lower and more stable. That makes the whole experience better because some things I&rsquo;ve learned to forego make it easier to have things I wouldn&rsquo;t have given a less stable, higher average.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-08</title>
      <link>https://mike.puddingtime.org/posts/2023-12-08-daily-notes/</link>
      <pubDate>Fri, 08 Dec 2023 21:55:23 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-08-daily-notes/</guid>
      <description>Tomb Raider. Steam Deck OLED.</description>
      <content:encoded><![CDATA[<h2 id="tomb-raider">Tomb Raider</h2>
<p>I finished <em>Tomb Raider</em> (the 2013 version) this afternoon. I&rsquo;ve got a number of games on the Steam Deck, but this is the first one I&rsquo;ve gone all the way through. It was a lot of fun. Similar to <em>Jedi: Fallen Order</em> (<a href="/posts/2023-03-20-daily-notes-for-2023-03-20/#finished-jedi-fallen-order">previously</a>), but with fewer of the contrived arcade sequences that bother me in other games in this genre.</p>
<p>I had the original Tomb Raider on a PlayStation and loved it, but didn&rsquo;t really try to keep up with the series, so this was the first time I&rsquo;ve played anything with Lara Croft in it in a long time. This edition is bloodier and more brutal than the original, but it was a pretty good ride: Simple controls and an easy ramp to proficiency.</p>
<h2 id="the-steam-deck">The Steam Deck</h2>
<p>I broke down and bought an OLED Steam Deck. I&rsquo;ve always been curious, the reviews were great, and winter is here (weirdly, this week).</p>
<p>What to say about it?</p>
<p>The OLED display is pretty nice. It&rsquo;s surprisingly comfortable to play for stretches on the sofa. The controls feel pretty good. The dock is a little finicky but not that bad.</p>
<p>In terms of fitting into my other stuff:</p>
<p>I tried using the streaming app on my AppleTV, but the Steam Deck dock provides a much better picture and I&rsquo;ve got a switch in the t.v. room so downloads are way faster.</p>
<p>I tried using my Nintendo Switch Pro Controller with it &ndash; which it officially supports &ndash; but the Bluetooth connection was super flakey. I can&rsquo;t tell if something else was grabbing it or what, but I swapped in an <a href="https://www.8bitdo.com/ultimate-bluetooth-controller/">8BitDo Ultimate</a> with a 2.4G dongle and that has worked very well.</p>
<p>There are a few areas for improvement:</p>
<p>Not every game works perfectly with it owing to how many are written for PCs and assume keyboards and mice vs. a controller. There&rsquo;s a soft keyboard but that can be pretty intrusive. I&rsquo;ve got my v1 Nuphy Air 60 sitting around that I could probably use, but so far I&rsquo;ve been happy to just stick to the extensive list of games in the <a href="https://www.steamdeck.com/en/verified">Steam Deck Verified</a> directory.</p>
<p>Sometimes &hellip; <em>things</em> &hellip; happen. Like, it doesn&rsquo;t recover gracefully from putting it to sleep and trying to pick a game back up: maybe the sound gets choppy or it stops responding to controls.  It&rsquo;s pretty good about saving my spot in everything I&rsquo;ve played so far, so it&rsquo;s no big deal to exit and restart, but it&rsquo;s a little annoying when it happens.</p>
<p>Sometimes the controller buttons are mapped well but the on-screen prompts suggest a keyboard and you can&rsquo;t be sure in the moment which button is the right one to mash. Lara Croft may have plunged to her death, had her throat torn out by wolves, or gotten gored by vintage airplane parts a few times as I tried to figure out what the hell I was supposed to be pressing.</p>
<p>By way of comparison to a Nintendo Switch? Chunkier, bigger, performs better. The size difference is lost on me because I ended up buying a grip for my Switch a while back to make it easier to hold, and that pretty much adds all the size back.</p>
<p>But the few glitches now and then aside, I like it a lot: Great library of games, easy to pick up and carry around, comfortable to play in portable mode, looks good on my t.v. I&rsquo;m enjoying it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>We will always have Voodoo Donut</title>
      <link>https://mike.puddingtime.org/posts/2023-07-19-we-will-always-have-voodoo/</link>
      <pubDate>Wed, 19 Jul 2023 06:47:43 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-19-we-will-always-have-voodoo/</guid>
      <description>Two articles on the local drug and homelessness response. Are we tired of outsourcing our fundamental human obligations yet?</description>
      <content:encoded><![CDATA[<p>Two articles this morning:</p>
<p>&ldquo;<a href="https://www.wweek.com/news/2023/07/19/kotek-and-blumenauer-tell-local-officials-fix-rampant-drug-use-on-portland-streets-now/">Kotek and Blumenauer Tell Local Officials: Fix Rampant Drug Use on Portland Streets, Now</a>&rdquo;:</p>
<blockquote>
<p>&ldquo;The frustration comes at a time when the Joint Office of Homeless Services budget for 2024 is $279 million—not counting $50.3 million in unanticipated receipts that the regional government Metro will soon pass along—and the city has untapped Medicaid funding available to help pay for Portland Street Response to address mental health crises.&rdquo;</p>
</blockquote>
<blockquote>
<p>&ldquo;Blumenauer says he left the May meeting about Portland’s streets with a clear understanding. &lsquo;The consensus of all these experts we brought together is that money is not the problem,&rsquo; he says. &lsquo;The question is how we mobilize and utilize the resources we&rsquo;ve got.&rsquo;&rdquo;</p>
</blockquote>
<p>The whole article is an interesting read: It hangs the narrative on a closed sobering center and the woeful effort to create a new one. The thing that runs just under the surface, as with almost all these stories, is the system that doles out social services in this county: Government&rsquo;s role is essentially a giant procurement operation, services are provided by non-profits, and the starvation wages those non-profits can afford means nobody wants the work. I know senior non-profit managers who have lost employees to fast food jobs. Few of the non-profits can make the contracts work.</p>
<p>Assessed as a complete system, it&rsquo;s a disaster. It reflects the neoliberal mania for privatization, but its design inherently mandates redundant layers of administration and management as dollars pass through the county procurement layer and its army of contract managers, consultants, and the management staff needed to oversee all that; then trickle into the non-profits, who have their own grant writers, development directors, executive directors, administrative staff, management, and actual direct services people.</p>
<p>The ecosystem of non-profits exists in a kind of market: They&rsquo;re all competing for government dollars, so they exist in a state of year-to-year precarity, all eyeing how much of their addressable market they can capture in their narrow lanes, struggling to balance their capacity to actually help people in need with feeding the administrative machines they depend on to go out and bring the money in.</p>
<p>The disconnect between wages for county employees &mdash; the people running the procurement processes &mdash; and the people in the non-profits is grotesque. A line manager running a couple of teams in the county&rsquo;s Joint Office for Homeless Services &mdash; a total span of maybe seven or eight people who primarily manage invoicing &mdash; makes a little more than  a senior director in a mental health non-profit who has a span of seven directors managing whole clinics, and upwards of 50 or 60 people in their organization. It goes downhill from there, with the front-line workers in this system &mdash; the people actually delivering services &mdash; making fast food wages in unbelievably bad working conditions. It&rsquo;s a rarity when <a href="https://www.wweek.com/news/2023/04/05/joint-office-of-homeless-services-contracting-woes-create-instability-for-survivors-of-domestic-violence/">someone in the non-profit world speaks up about this</a>, because they&rsquo;re utterly dependent on being in the good graces of the county to get the contracts. And it&rsquo;s well understood among people doing social work that your best bet is to do your time in the non-profits, build your network, and wait for it to come through with a county job, because that&rsquo;s where you can get a living wage and decent benefits. The non-profits you&rsquo;re at in the mean time can&rsquo;t guarantee that the program covering your wage will survive from year-to-year.</p>
<p>It&rsquo;s important to understand this whole system, because it helps explain the rise of things like Urban Alchemy, which has contracted with the city to run managed homeless encampments:</p>
<p>&ldquo;<a href="https://www.thenation.com/article/society/homelessness-urban-alchemy/">How Urban Alchemy Turns Homelessness Into Gold</a>&rdquo;:</p>
<blockquote>
<p>&ldquo;Like many other cities, San Francisco deals with visible homelessness by &lsquo;sweeping&rsquo;—in other words, dismantling tent encampments and forcing unhoused residents to move to another area. There’s a shortage of shelter beds across the region, and it is illegal in West Coast states to sweep anyone for whom no bed is available. The Coalition on Homelessness sued San Francisco over this, and a judge temporarily banned sweeps. Still, unhoused people say they are routinely coerced into moving by city officials, police, and Urban Alchemy ambassadors, and they tell us that sweeps remain the main technique that the city uses to manage its unsheltered population. In 2018, after Leilani Farha, the United Nations special rapporteur on adequate housing, visited San Francisco, she determined that this approach constituted &lsquo;cruel and inhuman treatment&rsquo; that violated multiple human rights.</p>
</blockquote>
<blockquote>
<p>&ldquo;It’s no wonder, then, that civic leaders in San Francisco and elsewhere are looking for new ways to confront—or at least to appear like they’re confronting—the homelessness crisis. UA skeptics like Kaitlyn Dey, a Portland-based homelessness researcher, argue that politicians use nonprofits to keep their promises to reduce interactions between police and homeless people without substantially changing the system. And to the average liberal city dweller, having a nonprofit administer the sweeps makes that work appear more humane than when armed cops do it. Working with groups like UA also reduces transparency—internal UA e-mails, for instance, are not subject to FOIA requests—insulating local officials should problems arise.&rdquo;</p>
</blockquote>
<p>UA is on the scene in Portland because attempts to deliver managed camping using local providers with a less para-police bent failed: Nobody would take the work. Urban Alchemy&rsquo;s formula, depending on former convicts, lets them get costs down enough to thrive in an environment where dollars are peanut-buttered through the county procurement bureaucracy before getting into the hands of non-profits, who have to use some of those dollars to maintain their own management and fund-raising staff to remain viable.</p>
<p>My one criticism of the <em>Nation</em> article is its focus on failures to defund the police as the problem:</p>
<p>There is a huge amount of money in the system in our county, approved by voters. The county procurement bureaucracy left over $40 million of it on the table this year, because for all its scale and influence, the Joint Office for Homeless Services utterly failed to scale to accommodate the influx of funds, even as it insures the providers it works with keep wages for their workers low. Local journalists have let us all down on their coverage of that organization.</p>
<p>Maybe that&rsquo;s the worst part of all of this: We&rsquo;ve torn the safety net to ribbons, our capacity to help people is radically diminished, and all we&rsquo;re left with is this absurd, wasteful, abusive system. If you&rsquo;re a good liberal or progressive type who wants to see vulnerable people helped, you&rsquo;re trapped between that system and people who don&rsquo;t even want that to exist. Of course you&rsquo;re gonna pick a side. But you&rsquo;ve been forced into a terrible, false choice that guarantees nobody is going to speak up to hold the architects of this mess accountable: They&rsquo;re all we have, which, now that I think of it, summarizes the state of American politics at all levels pretty neatly.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-18</title>
      <link>https://mike.puddingtime.org/posts/2023-07-18-daily-notes/</link>
      <pubDate>Tue, 18 Jul 2023 22:10:57 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-18-daily-notes/</guid>
      <description>Apple Notes and a legal pad.</description>
      <content:encoded><![CDATA[<p>Me a few days ago:</p>
<iframe src="https://social.lol/@mph/110722269434824199/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>&hellip; and as a followup:</p>
<iframe src="https://social.lol/@mph/110722296107197747/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>Writing is a tool I use to think, and I don&rsquo;t share a lot of it. I used to get frustrated because I&rsquo;d write a few thousand words to make a point or express an idea and then &ldquo;abandon&rdquo; it in favor of just talking through things, but that was the attitude of a paid writer who thought of his writing as a product, not a process.</p>
<p>One day, though, when I was on a tech writing team, I became super frustrated with something I was documenting because some of the design decisions around it were sort of bad. So I took the time to write almost 4,000 words about how to un-bad it, didn&rsquo;t really feel ready to share that with anybody, and set it aside. But I understood the thing I was writing about much better, and my docs around it really improved, <em>and</em> when I got to a place where I felt like sharing the ideas I came up with more widely, I was able to write a much more concise and digestible 1,000 words or so that didn&rsquo;t include phrases like &ldquo;this fucked-up Legend of Zelda configuration scheme.&rdquo;</p>
<p>Since that experience, I got a lot better at just writing and not expecting to share, understanding that what I am doing is processing. Sometimes it helps to use an RFC template, false-start a blog post, or start an unaddressed email, because those contexts serve as cues or mood-setters. But I&rsquo;m usually content to use whatever to do it because the output doesn&rsquo;t need to last forever. It&rsquo;s fine if it gets lost to the sands of time. It&rsquo;s just a process, and wanting to &ldquo;save&rdquo; or &ldquo;preserve&rdquo; it makes little more sense than a baseball player trying to save a swing at the ball.</p>
<p>I think having a bunch of time to just fiddle with stuff put me in a mood to over-optimize, so it makes sense that I was getting obsessive and hyper-focused on note taking and writing tools, and getting super architectural about the whole thing.  But having had a solid six weeks of being back in the work swing and having to actually use the notes I keep, I&rsquo;ve been realizing how ephemeral they are. I&rsquo;m glad I have them, but they don&rsquo;t need to be <em>architected</em>. I&rsquo;m careful to tag them up front with people and topics just to make search more useful and focused, but I don&rsquo;t interlink much, haven&rsquo;t really used the automated index pages I&rsquo;ve cooked up, and don&rsquo;t really care much about the heading structure or tidiness. Most of them will not be useful for much in maybe a quarter or so.</p>
<p>So I just made a folder in Apple Notes and started typing notes in there. It has tagging, it has smart folders, it has rudimentary formatting (title, heading, subheading, lists, todos) and you can make smart folders that pay attention to things like tags, location, unfinished todos, etc. I can do stuff I&rsquo;ve been doing in Obsidian &mdash; inline todos I have a smart folder to surface for consolidation, smart folders for particular tags &mdash;  but with no plugins that could age out, no need to really &ldquo;automate&rdquo; anything, no paying extra for sync, and no real room for mission creep. I know Notes will be around for the next OS release because Apple added some features to the beta, so it&rsquo;s as future proof as this kind of content needs to be.</p>
<p>I sort of like it. There is not a lot to think about. Even less, in some ways, than flat, plain text, because Notes is just sitting there on every Apple device I own, and in a pinch is available via a web browser.</p>
<p>I also went through Things and asked myself what was up there. I&rsquo;ve been using it more over the past several months, and there are already dead things, abandoned things, cryptic things. So I got out a legal pad, captured all the living things, and wrote all my active projects down at the bottom of the page. Then I started crossing things off as I did them.</p>
<p>When I looked at all the projects this afternoon &mdash; eight of them are &ldquo;active&rdquo; right now &mdash; I knew what each needed next. If I feel like I&rsquo;m getting to a state of overflow, I think I&rsquo;ll just make a list in Reminders for a project that needs more from me. But I live in a pretty well supported environment &mdash; there are plenty of trackers, there&rsquo;s program management, there&rsquo;s a steady cadence of meetings &mdash; I think I can manage.</p>
<p>I did find myself looking through my calendar and sort of Tetrising tasks on my list into my available space, jotting down the target block of time and a time estimate. I am sure apps allow you to do all that, and I know there are apps that also semi-automate the process of doing the Tetrising for you. I don&rsquo;t know if I need something to do that for me.</p>
<p>I keep coming back to my old HR business partner, Don, who told me &mdash; when I was freaking out about an interim leadership role I didn&rsquo;t think I belonged in &mdash; &ldquo;you know what&rsquo;s important, and you don&rsquo;t do what&rsquo;s not important, and that&rsquo;s why we think you&rsquo;ll be good at this.&rdquo;</p>
<p>I know what needs to be done, know the state of the things I&rsquo;m pushing forward, and I know when that stuff needs to be done. When things get super choppy I&rsquo;ll break down and do a big dump so I can negotiate priorities with more precision, but, sort of like throw-away writing, that&rsquo;s a process. I don&rsquo;t want to leave it to a tool or suck all the friction out, any more than I want ChatGPT to do my throwaway process writing for me.</p>
<p>Someone did comment to me that they didn&rsquo;t like the sound of copying things over from day to day.  I get the resistance. It&rsquo;s not necessary effort. The CO I knew who lived out of her legal pad explained to me that the copying was important to her, because it helped her think about what was important, think ahead about tomorrow, and ball up the list from today and toss it in the recycling bin before turning off the lights and going home.</p>
<p>You know, a legal pad is an imperfect system. If you move around a lot, you have to remember to bring it with you. It doesn&rsquo;t sync to the cloud. It requires you to copy things, scratch things out, etc. On the other hand, it is worse at hoarding obligations than an electronic tool, it makes you think a little harder about what you commit to it, and it is nicer to draw a line through a finished thing than click it out of existence (in my opinion). I like having it sit there on my desk, just to the right of my mouse pad. I can look at it whenever I&rsquo;m not sure what to do with a minute, and there&rsquo;s always something.  I experimented with pinning my Things &ldquo;today&rdquo; list on my screen to do the same thing, but that didn&rsquo;t take.</p>
<p>Anyhow, I really don&rsquo;t want anyone else to use legal pads to keep track of what they have to do today, and expect at some point I will be very curious about some other thing and will want to try it out.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-17</title>
      <link>https://mike.puddingtime.org/posts/2023-07-17-daily-notes/</link>
      <pubDate>Mon, 17 Jul 2023 18:54:06 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-17-daily-notes/</guid>
      <description>A few notes on conflict. The INT650.</description>
      <content:encoded><![CDATA[<h2 id="notes-on-conflict">Notes on conflict</h2>
<blockquote>
<p>When my master and I were walking in the rain, he would say, &ldquo;Do not walk so fast, the rain is everywhere.&rdquo;<br>
&mdash;Shunryu Suzuki</p>
</blockquote>
<p>For a very long time &mdash; too much of my life &mdash; I thought conflict was a sign that there was a problem. I didn&rsquo;t like disagreeing with people about much of anything. I&rsquo;m using &ldquo;conflict&rdquo; in a broad sense: Over resources, points of view, vision, beliefs, tastes.</p>
<p>Over time I shifted on the matter a little, but when I look back on it I realize I wasn&rsquo;t really evolving my attitude toward conflict, I was just evolving my response to its existence, while still believing that being in a state of conflict is a problem. I just got better at keeping my blood pressure low and gritting through it. I think I was looking at conflict as a thing that you have to acknowledge exists, but that you need to get through as quickly as possible, because it&rsquo;s a bad place to be.</p>
<p>That attitude created some problems:</p>
<ul>
<li>When you&rsquo;re bad at being in conflict, you&rsquo;re at a disadvantage with people who are good at it and mean you harm; and you&rsquo;re annoying people who are good at it and mean you no harm.</li>
<li>When you look at conflict as a thing to grit through and end quickly it&rsquo;s hard to maintain your integrity. (See above: The people who don&rsquo;t want what&rsquo;s best for you (or the business, or the world, or etc.) understand this, and the ones who are really good at it and a little indifferent toward what&rsquo;s best for you are counting on you to do all the work to get out of conflict.)</li>
<li>When you&rsquo;d rather do anything than admit that you&rsquo;re in a state of conflict, you will eventually do something about your problem that is less skillful for having waited than if you&rsquo;d admitted it to yourself (and whoever you&rsquo;re in conflict with) sooner. Or, as one of my past managers put it to me, &ldquo;don&rsquo;t be that guy who hockey-sticks.&rdquo; (I nodded then kind of hockey-sticked.)</li>
<li>When you&rsquo;re bad at being in conflict, and you&rsquo;re willing to be set aside your integrity or do other things to get out of it quickly, you&rsquo;ll eventually get tired of &ldquo;losing&rdquo; and figure out ways to &ldquo;win&rdquo; that cause others to see you as, at best, baffling and frustrating, and at worst Machiavellian and treacherous.</li>
</ul>
<p>That, anyhow, is a rough categorization of my many hundreds of mishandlings of conflict. Maybe the most interesting thing to me about all those mishandlings is that over time I managed to convince myself that failing to be in conflict well was a sign of <em>virtue.</em> Moral sophistication. &ldquo;Taking the high road.&rdquo; &ldquo;Not worth the stress.&rdquo; &ldquo;Learning how to play the game.&rdquo; &ldquo;Protecting the team.&rdquo;</p>
<p>Over the past few years, I&rsquo;ve changed on the matter: On balance, I definitely don&rsquo;t think its existence is a sign there&rsquo;s a problem. It&rsquo;s just a sign that there&rsquo;s a conflict.</p>
<p>I still feel a little cautious about conflict when I don&rsquo;t know the person I&rsquo;m in conflict with very well. Caution is useful, because people who are bad at being in conflict but mean well &mdash; people who are &ldquo;good eggs&rdquo; &mdash; can still sort of mess things up, because if I have to bet on whether someone hates &ldquo;losing&rdquo; or just grinning and bearing it more, my money is on them hating losing more. When things get to a place where it feels existential to them, even good eggs can act sort of rotten. So you have to take time and attend to the interaction so they can be in conflict and feel safe about it.</p>
<p>I still think I have a responsibility to introduce the existence of conflict with kindness, or receive the news that I&rsquo;ve entered into a state of conflict in a manner that invites a full airing. &ldquo;Relaxed and possibly delighted curiosity,&rdquo; I suppose I&rsquo;d call it, rather than a furrowing of the brow and assurances that I want to restore harmony at once. Because I don&rsquo;t want to restore harmony at once. I want to understand why we want different things, then figure out how we can both behave with integrity while we sort that out.</p>
<h2 id="the-int650">The INT650</h2>
<img src="https://its.puddingtime.org/uploads/2023/f4d4087a00284d89b3cedd2720a3b117.jpg" width="600" height="337" alt="">
<p>I finally quit waffling on what to do with the Royal Enfield Himalayan. I took it up to <a href="https://www.sabatinomoto.com">Sabatino Moto</a> in St. Johns and traded it in for another Royal Enfield: An INT650 (&ldquo;Interceptor&rdquo; everywhere else in the world, but not in North America where Honda owns the rights to the name.)</p>
<p>It&rsquo;s a pretty night and day difference. The Himalayan is a mountain goat, and the INT650 is &hellip; something a little prettier and a little less rough. I was never going to ride the Himalayan the way it was meant to be ridden &mdash; fire roads, gravel, dirt &mdash; and I didn&rsquo;t have the patience for the very &ldquo;work in progress&rdquo; attitude Royal Enfield took toward it.  One thing you learn from all the Himalayan videos on YouTube is that the people who love them best don&rsquo;t mind fiddling, tweaking, and wrenching. After reading hundreds of owners talk about their experiences, I have come to realize I lost the factory QA lottery on mine, and that engendered a lack of confidence in it that I never recovered from.</p>
<p>Also turns out, I think, that I had a bad dealer:</p>
<p>The first RE dealer in the Portland area doesn&rsquo;t really want to sell them, and it really does not want to do anything other than the most basic service. I think I&rsquo;ve documented that elsewhere, so I won&rsquo;t go into it more here, but I&rsquo;ll just offer the observation that RE&rsquo;s strategy of linking up with Harley dealers to build out its US distribution network did its customers no favors.</p>
<p>The folks at Sabatino, on the other hand, seem to have a genuine appreciation for the bikes, that extends all the way to acknowledging that RE has some QA challenges. Sabatino addresses that by doing their own QA when they uncrate a new bike. And they&rsquo;re willing to talk about the ups and downs of each model. My head was briefly turned by another model, and I got a reasoned, balanced, discussion of why maybe that one wouldn&rsquo;t work for me.</p>
<p>They also offer test rides. I can name one dealership that <em>grudgingly</em> made me sign a waiver and write a check for the full amount  to test ride a Grom for five laps around their parking lot, and they only did that because it was a two-year-old model and they&rsquo;d sold the newer one they promised me out from under me.  Sabatino made me do the waiver, share my insurance information, and hand over my license, but then they tossed me the keys and told me they&rsquo;d see me when they saw me.</p>
<p>Anyhow, the test ride sold me. I&rsquo;ve been through several configurations of motorcycle and scooter since getting my motorcycle endorsement &mdash; maxiscoots, normal scoots, mini-moto, cruiser, trail bike, dual-sport &mdash; and none of them have been the thing I first imagined myself riding when I finally decided to learn how to ride. Well, learn how to ride as an adult, anyhow. The twin 650 runs and sounds nice, the bike handles more comfortably than the Himalayan despite there being 40 pounds more of it, and the super-simple analog speedo and tach are just sort of pleasant. I ran it around St. Johns for a while, was struck by how immediately comfortable it was (and how confident I felt on it), and that was that.</p>
<p>Yesterday I took it on a ride out Foster Road toward Damascus. There&rsquo;s a side road I head out onto that eventually rejoins on the other side of Damascus, close to a back road that joins the highway down to Estacada. So I headed out past Estacada, to see how it did on a small back highway. There was a little bit of buffeting &mdash; no fairings &mdash; but it ran and handled well. I felt more confident on the little back roads coming back than I did heading out as I got to know the bike better. I did decide to detract from its vintage purity a little by ordering a Dart flyscreen when I got back: People say it helps clean up the turbulence at highway speeds, and keeps the bugs off the pretty silver cans.</p>
<p>Anyhow, glad I&rsquo;ve got it in the driveway with so much of the riding season left, and I can wholeheartedly recommend Sabatino Moto if you&rsquo;re looking to buy one for yourself.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Mission: Incomprehensible</title>
      <link>https://mike.puddingtime.org/posts/2023-07-15-mission--incomprehensible/</link>
      <pubDate>Sat, 15 Jul 2023 16:05:05 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-15-mission--incomprehensible/</guid>
      <description>A few thoughts on spy film villainy and the double-backflip of ideological sanitization this one does, notable in part because sitting around thinking this stuff up was more entertaining than the actual experience of watching something this insufferable.</description>
      <content:encoded><![CDATA[<p>So, the defining characteristic of spy film villainy (vs. their early Cold War literary precursors/source material) is that the villains are non-state actors threatening a global balance of power that we might not like &mdash; that is terrifying and anxiety-inducing &mdash; but that we definitely do not want upset. That was just market forces: You&rsquo;ve got to sell them globally, so the bad guys need to be de-aligned.</p>
<p>The <em>Mission Impossible</em> series doesn&rsquo;t break from this tradition: It is also worried about non-state or rogue state actors in the classical non-ideological vein. The newest one also has a non-state actor for a villain, so &ldquo;check,&rdquo; but its villainy is framed as its capacity to use misinformation. That makes it sort of reflective of post-2016 American anxieties. That&rsquo;s interesting, in a way, because the classic &rsquo;60s-era spy films went explicitly and pointedly non-ideological, and sometimes even paired heroes with Soviet partners to drive the point home. They didn&rsquo;t even register as anti-communist allegories.</p>
<p>The new MI movie has a definitionally non-ideological villain, but its post-2016 anxieties about misinformation seem at least political if not ideological, and there&rsquo;s an explicit tie to Russia that lost me a little, but feels like maybe it&rsquo;s meant to sketch an association rather than point an explicit finger &mdash; at least not one you couldn&rsquo;t unpoint with a little selective localization when you go to the global market.</p>
<p>Anyhow, it was a very long movie that got pretty tedious and felt weirdly self-satisfied. There was so much &ldquo;finally, back to the movies! Tom Cruise is our last movie star!&rdquo; rhapsodizing about <em>Top Gun: Maverick</em> it was impossible to watch this one and not feel like Tom Cruise&rsquo;s publicist should&rsquo;ve just hid his clippings, because there&rsquo;s something insufferable about this movie. I just wanted it to end.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-14</title>
      <link>https://mike.puddingtime.org/posts/2023-07-14-daily-notes/</link>
      <pubDate>Fri, 14 Jul 2023 11:55:24 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-14-daily-notes/</guid>
      <description>I forgot that micro.blog is pretty nice. Firing the marketing team. The Playdate came. M1 love.</description>
      <content:encoded><![CDATA[<h2 id="what-im-thinking">What I&rsquo;m thinking</h2>
<p><a href="/posts/2023-07-13-daily-notes/">Yesterday I quoted Joan Didion</a>:</p>
<blockquote>
<p>&ldquo;I write entirely to find out what I’m thinking &hellip;&rdquo;</p>
</blockquote>
<p>&hellip; and this morning I found myself replying to a comment on micro.blog. I am not even sure how I ended up on there, but I did, and saw an interesting comment, replied, and had a brief exchange, and it was pleasant, because micro.blog has that kind of vibe. A few days ago Luke <a href="https://hachyderm.io/@lkanies/110684780282341000">warily noted the existence of &ldquo;the HOA&rdquo;</a> on Mastodon, and I completely got what he was talking about.</p>
<p>Mastodon was never going to remain immune to a very Twitter-like kind of discourse creeping in, and as Twitter continues its descent that will only get worse.  Some of Masto&rsquo;s design choices will make some of the worst Twitter excesses and abuses harder to replicate, maybe, but there&rsquo;s nothing the lack of quote toots is going to do to blunt the fundamental nature of Twitter discourse, which is reductive and loud. That&rsquo;s what happens when you give primates 500 characters to get an idea across and limit them to their thumbs to express it. Sorry. I didn&rsquo;t write the rules.</p>
<p>micro.blog has managed to avoid that, partially through software design and partially through community governance. What&rsquo;s really amazing to me is that I remember  sometimes things would  get sort of bad for someone and they&rsquo;d get a little spikey or prickly, and others support them through their spikeyness or prickliness. It feels like there&rsquo;s a community there.</p>
<p>All to say, I used to pass micro.blog posts through to Mastodon and got to kind of double-dip on communities. Maybe I want to try that again.</p>
<h2 id="a-small-thing">A small thing</h2>
<p>Poking around my micro.blog profile I saw that I had a bunch of things linked in the little socials bar my theme provides, including LinkedIn and GitHub. I got rid of those links and that felt pretty good. I also stopped paying for a LinkedIn account, and that felt <em>great</em>. Then I went through the pages I have set up on micro.blog and got rid of job information.</p>
<p>It is sort of strange to be in this mental space where I really like my job and also feel pretty good about disentangling it from everything. I think that over the past several years I spent so much time fretting about what I was going to do next, and wanting to make sure I had all the self-marketing infra built out, that it just seemed normal to let things blur.</p>
<p>Now that I&rsquo;ve been through the last year, I think:</p>
<ol>
<li>The intersection of what makes me great at work and what people on Mastodon want to read about is probably a very small set. I have nothing interesting to tell you about what I do for a living that you could copy from a code snippet or run in a container to try for yourself.</li>
<li>It wasn&rsquo;t a good idea to pay for LinkedIn all those years, but I am keeping my free account because that&rsquo;s where people who have a lead will think to look for you, and where you can keep up with people you met at work and care about but have not formed an outside social bond with. The job search stuff, though? The special messaging? Just not necessary.</li>
<li>I think I will hold the line against blending the socials and the work again. Meaning, no linking to my LinkedIn profile, no linking to my GitHub profile, maybe the occasional post about things that are work-related, but just setting aside the idea that my web presence is a content marketing exercise for the product that is me. As a strict question of ROI, it wasn&rsquo;t there. If the matter comes up again, anything that might have helped will still be there to help if I want it. I don&rsquo;t need to make more inventory. As a question of mental health, it wasn&rsquo;t good for me.</li>
</ol>
<p>On the last few bits, it&rsquo;s just another gift I got from Puppet. I went in there figurative hat in hand, and I&rsquo;m glad whatever I did during interviews worked; but confidence, humility, and a sense of self-worth all exist in a curious sort of balance that is different for me today than it was ten years ago. Taking something that brings me joy &mdash; fiddling with web stuff &mdash; and putting the anxious weight of helping me find work or feel more prepared to lose work wasn&rsquo;t a good formula for me. Because when a thing you love takes on a work aspect, when do you get to stop thinking about work?</p>
<p>Like, if I were a professional web developer or designer or writer, then my web presence would, unfortunately, need a certain kind of attention, I guess. At least to my standards. But I&rsquo;m not. I&rsquo;m just this leader/director/works in tech/&ldquo;seems like he came from somewhere else and could possibly end up there again kind of guy.&rdquo; I think if you just started reading backwards you could learn some useful things, and if anything you found made you decide I was not hirable, that&rsquo;d be <em>awesome.</em> And there&rsquo;s perhaps a small chance I won&rsquo;t bother to cultivate into a larger one that at least the way I seem to approach my transient obsessions, oblique references to political annoyances, and amateur web engineering tasks is good marketing for my particular <em>je ne sais quoi</em> in a way that bleating about my passion for the business/IT partnership, good process, and container technology is really not.</p>
<p>Anyhow, this is a good time. <a href="https://www.graceguts.com/quotations/zen-story-tigers-and-a-strawberry">I will enjoy it.</a></p>
<h2 id="the-playdate-came">The Playdate came</h2>
<p>I&rsquo;m not sure what to say about it beyond that besides &ldquo;yay, it is here!&rdquo;</p>
<p>It&rsquo;s a little smaller than I imagined, it feels a little better crafted than I imagined &mdash; I really like it as an object &mdash; and it is <em>perfect</em> for the use case my Nintendo DS used to occupy, as a thing on my desk I would use to reset between meetings or when I had a little time to kill but not enough to start something new.</p>
<p>The one downside: My first season 1 game drop arrived around three in the morning and it started flashing on my bedside table, waking up Al who sleepily tried to press buttons to just make it stop before giving up. Her struggles woke me up enough to think to stick it in the bedside table drawer.</p>
<p>Otherwise, happy to have it. Maybe I&rsquo;ll write more as more games come in and I form more of a thought.</p>
<h2 id="pausing-to-appreciate">Pausing to appreciate</h2>
<p>The matter of remaining Intel MacBook Pros in the fleet came up at work. We&rsquo;ve been steadily dredging them out as they age out, but a few remain. As I talked to the leader who was asking me to do something about a pocket of them in his group, it wasn&rsquo;t hard to empathize at all. I had a 16&quot; &ldquo;one down from the very best&rdquo; Intel on my desk, and when I put the M1 mini in it made a startling difference. I sold the mini and got a Studio, and I think the best thing I can say about it is that new Studio models haven&rsquo;t caused me to bat an eye. It&rsquo;s just smooth and steady. Performance improvements are just an abstraction to me.  I don&rsquo;t think about it being a computer because it just does what I want without making me wait.</p>
<p>A few years into the Apple Silicon Age, I still feel a little amazed. The Studio is the best computer I&rsquo;ve ever owned, and my 14&quot; Pro is my favorite laptop ever. It&rsquo;s very strange to me that when I think &ldquo;what would I like next&rdquo; the two things that come to mind right away are:</p>
<ul>
<li>An iPhone mini with all the lenses</li>
<li>An iPad Pro with a landscape camera</li>
</ul>
<p>The former isn&rsquo;t going to happen, and I think that means the right iPhone for me is a Pro Max, because I&rsquo;m doing the Pro for the camera and it&rsquo;s already too large, so might as well just go for it. The latter &hellip; eh. I made a go of full-timing on an iPad, at least as my mobile computer, and it didn&rsquo;t take. I named my 11&quot; Pro &ldquo;Evolutionary Niche&rdquo; because it&rsquo;s good to take camping or traveling, but I&rsquo;d just rather use a regular laptop most of the time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-13</title>
      <link>https://mike.puddingtime.org/posts/2023-07-13-daily-notes/</link>
      <pubDate>Thu, 13 Jul 2023 07:20:30 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-13-daily-notes/</guid>
      <description>The nonprofit and outrage clown industrial complexes. reddit and lemmy. Our atavistic fear of tankies. The taxonomical and emotional valence of the daily post.</description>
      <content:encoded><![CDATA[<h2 id="assorted-critiques">Assorted critiques</h2>
<p>Al sent me <a href="http://socialistworker.org/2018/10/11/beyond-the-nonprofit-industrial-complex">this critique of &rsquo;the nonprofit industrial complex&rsquo;</a> yesterday and it&rsquo;s another one of those things (though a few years old) that reminds me of the ways The Consensus is falling apart. Asked a few years ago, I&rsquo;d have believed a phrase like &ldquo;nonprofit industrial complex&rdquo; was wholly owned by my local subreddit&rsquo;s reactionary goon squad. I&rsquo;m sure the phrase will still incite some liberals.</p>
<p>But it means something that my wife, a 20-year social work veteran with an MSW &mdash; as dedicated to public service as anyone I know &mdash; is sharing that article with me, because she&rsquo;s probably <em>more</em> angry about the state of nonprofits than the reactionary goons in my local subreddit, just &hellip; from the opposite direction. I don&rsquo;t know if I&rsquo;ve ever felt, in my politically aware life, like so many people across what passes for the political spectrum in this country are convinced that whatever is going on here is simply not working.</p>
<p>I first <a href="/posts/2022-02-07-the-outrage-clown/">noticed it for myself</a> early last year:</p>
<blockquote>
<p>&ldquo;Like, there’s an actual market for attacking liberals from the left that can be serviced and people can make a living at it, and that says something interesting about where political sentiment might be right now &hellip; something interesting about what people are hungry for.&rdquo;</p>
</blockquote>
<p>More downpage.</p>
<h2 id="reddit-lemmy">reddit, lemmy</h2>
<p>With no Apollo, I just don&rsquo;t go to reddit much anymore, and I&rsquo;m not signed in when I do. I just go to one or two subs in my browser history. I think I&rsquo;m fine with that &mdash; the one sub I was a regular on isn&rsquo;t really the healthiest place, and a few others are just disposable. But it has started to strike me that a lot of Google searches end up on reddit, and I get a small amount of traffic to here <em>from</em> reddit from posts that have turned up there over the years.</p>
<p>I&rsquo;m also struck by how annoying the ads are in their size, irrelevance, and repetition. They make the experience confusing.</p>
<p>Lemmy is still pretty quiet. I subscribe to a portland-related local, a bunch of meme communities, and a few technical ones. There&rsquo;s not a lot of conversation.  Hexbear is very active, but it&rsquo;s not federated (getting there), and it could just as easily be on any discussion platform. I understand lemmygrad is widely blocked, which is sort of hilarious to me because coming up on the left decades ago we understood that the presence of a few tankies in any left space was mostly just cause for amused eye-rolling. But we&rsquo;re all heads in jars now, so they seem to be taking on a significance in online spaces they could never assume in meatspace. 2016 will never end.</p>
<h2 id="this-generations-watergate">This generation&rsquo;s Watergate</h2>
<p>I say &ldquo;2016 will never end&rdquo; as someone who remembers watching Richard Nixon resign in 1974. At the time I registered that event as an unwelcome disruption of normal t.v. because I was six years old, and somehow this bizarre intrusion on normal programming had taken over all three stations available to me.</p>
<p>We were, by the way, a Cronkite family, so I imagine this is what I was watching:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/EG0-K0wLP3Q" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>But we all know that the matter didn&rsquo;t end there. We were still feeling its effects 25 years later, while Clinton was in office. We&rsquo;re still feeling its effects.  It is not hard to imagine that everything around 2016-2020 will remain a defining political trauma for years to come, and some of that trauma is just a fractal iteration of what came 40 years earlier.</p>
<p>So I don&rsquo;t think it&rsquo;s important to be very online and very &ldquo;current.&rdquo;</p>
<p>One thing I adopted post-2016 was a radical pare-down of news inputs. I have two paid subscriptions, so I don&rsquo;t waste time trying to get around paywalls: One national, one local. I prefer to get one each of their daily newsletters at the end of the day. I follow one local alt-weekly, as well. I&rsquo;ve gone from &ldquo;guiltily ill-informed relative to all the other middle class people&rdquo; to &ldquo;defiantly disinterested in playing this ridiculous game.&rdquo; My mental health is better, my sense of broad patterns has improved, and my patience for others has increased.</p>
<p>It&rsquo;s sort of interesting to look back maybe two or three years, because I can see a period where the decrease in daily news intake shifted a little left to an increase in current-events-related books. I think that made sense to me because, you know, books take a while to write and produce and distribute. But really that&rsquo;s not true &mdash; on the timeframes that matter, they really don&rsquo;t take that long. The fast-paced ephemerality of the social/blog-to-book pipeline is only picking up speed.</p>
<p>So I had a period of relative calm after I slowed down my news intake and refused to read the op/ed pages,  then began to feel more and more agitated again as Libby began to deposit long-form current events stuff on my Kobo.  It lured me into a  period of newsletter and blog subscriptions (&ldquo;not news, therefore ok&rdquo;), and I&rsquo;m glad something <a href="/posts/2022-02-07-the-outrage-clown/">bothered me enough to set all that stuff aside</a>, too.</p>
<p>Yesterday <a href="https://social.lol/@mph/110701757592302896">I referred to Metafilter</a> as &ldquo;Web 2.0’s Doom Spiraling Hermit Kingdom,&rdquo; and I think it is a great example of what happens to people who are very current and very online when they lock themselves in a space together. The recent thread on the bizarre Wagner Putsch &mdash; sorry, I don&rsquo;t want to find the link &mdash; just seemed unhealthy, obsessive, and likely to age like milk for all the authority people were claiming to hold forth.</p>
<p>Am I saying I&rsquo;m above it all? No. I just prefer to be outside it.</p>
<h2 id="metadata">Metadata</h2>
<p>I went to look up a recent post and it caused me to realize that almost all my posts are &ldquo;daily posts.&rdquo;</p>
<p>A very long time ago daily posts were my way of blogging at work without being seen to be blogging at work: I opened a BBEdit document at the beginning of the day, started filling it with links and things, then waited until early evening to run a Perl script that squirted it into MovableType. There. Plausible deniability.</p>
<p>I started doing them again on this blog as an adaptation when I shifted away from micro.blog. Coo all you want about version-controlled static site generators &mdash; and I do &mdash; they&rsquo;re more cumbersome than something that works well with, e.g. MarsEdit. So rather than a bunch of microposts, I preferred to gather them all in one place and save last pass and publishing for the end of the day.</p>
<p>But I came across that fragment of a Joan Didion quote:</p>
<blockquote>
<p>&ldquo;I write entirely to find out what I&rsquo;m thinking &hellip;&rdquo;</p>
</blockquote>
<p>&hellip; and I think &ldquo;Daily Post&rdquo; is also helpful to me as a writing aid.</p>
<p>One of my preoccupations I&rsquo;ve had over 20 years of blogging is how to handle representing &ldquo;what I am&rdquo; or &ldquo;what I do.&rdquo;</p>
<p>Like a lot of preoccupations, a key ingredient was irritation: Early web celebrities would write about something they did, or thought was interesting, and it&rsquo;d start a conversation about that thing, and then the comments would be full of people talking about &ldquo;what I do.&rdquo;</p>
<p>Like, let&rsquo;s take &ldquo;GTD methodologies.&rdquo;</p>
<p>You read 20 or 30 multi-paragraph comments about &ldquo;my GTD methodology&rdquo; and for some of them you&rsquo;re just, like, &ldquo;no, I know for a fact that you do not do that because if you truly managed your life that way you would not be able to keep a roof over your head or food in your children&rsquo;s mouths. This is entirely too complex, too elaborate, and too utterly incompatible with the information, organization, or communications needs of any other human being on the planet to actually be a real &lsquo;methodology&rsquo; that wouldn&rsquo;t eventually get you fired or simply render you unemployable to begin with.&rdquo;</p>
<p>But a more charitable impulse would kick in, and rather than thinking &ldquo;this person is lying,&rdquo; I&rsquo;d decide &ldquo;this person is sharing an aspirational state they probably haven&rsquo;t been doing for long, or realizing quite this fully.&rdquo; The more I worked in operational roles over the years, the better I got at spotting the first draft of a process doc, and those are always about as impractical and weird as any comment in 43Folders on how to live entirely out of 3x5 cards you keep in a DIY duct tape pouch and annotate with 12 shades of washi tape you arrange sempahore-style.</p>
<p>Plus, shit; I do it, too.</p>
<p>I&rsquo;m constantly fussing with things, trying stuff out, getting restless, trying something else, going back to the last thing, hacking together some god-awful script to mostly &mdash;  76-percent-complete, anyhow &mdash; back me out of a bad data decision. I&rsquo;ve made an effort to isolate things I think of as &ldquo;core systems and tools&rdquo; from my worst impulses &mdash; I am way less interested in fucking with how I process photos or track todos than I am with how I keep scratch notes for work &mdash; but as someone who was splitting his time between a Sinclair ZX-81 and a VIC20 because each had its charms, who played first chair parts on a bass trombone to stretch my articulation, who made a portable Commodore 64 out of upholstery vinyl and a 5&quot; black-and-white TV to let me write term papers on my third-shift workstudy job at the power house, and who owns no fewer than eleven slings, bags, or pouches in the 3-to-10 liter range, I know from screwing around with shit for the hell of it.</p>
<p>Calling things &ldquo;Daily Posts&rdquo; has provided a little relief from self-consciousness over that.</p>
<p>When I put something under &ldquo;Daily Posts,&rdquo; it feels less like I&rsquo;m issuing some proclamation about <em>What I Do</em> and more sharing a little about <em>What I&rsquo;m Doing</em>, because that is constantly changing, and putting those constantly changing things under single posts that jump out on the index pages feels entirely too weighty for what they&rsquo;re meant to tell you.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-11</title>
      <link>https://mike.puddingtime.org/posts/2023-07-11-daily-notes/</link>
      <pubDate>Tue, 11 Jul 2023 06:01:33 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-11-daily-notes/</guid>
      <description>Garmin GPS stuff, trying Wikiloc, calming down about notes, settling in at work.</description>
      <content:encoded><![CDATA[<h2 id="garmin-and-gps-stuff">Garmin and GPS stuff</h2>
<p>We took a weekend trip down to the Alsea Falls area, west of Corvallis. We camped in the federal campground there, and spent Saturday hiking up Marys Peak.</p>
<p>This is the second season we&rsquo;ve had our Garmin <a href="https://www.garmin.com/en-US/p/592606">inReach Mini</a>, a small GPS device that offers basic tracking plus emergency satellite communications (SOS and texting) and live weather. We got it after a small scare on our trip to the Redwoods last spring.</p>
<p>I&rsquo;m a hardware GPS holdout. I&rsquo;ve used a number of iPhone apps including Gaia GPS and AllTrails, but my issues with using an iPhone in the backcountry amount to the unpredictability of the devices: I&rsquo;d like better guarantees about the stability of the data I keep on them, I don&rsquo;t trust their power management over the course of a day on the trail, and I live in a biome that makes fussing with a touch screen in the field a nightmare six months out of the year.</p>
<p>Before we got the Mini we already had a <a href="https://www.garmin.com/en-US/p/669284">Garmin GPSMAP 64sx</a>. Even when I&rsquo;ve been experimenting with iPhone apps on the trail I&rsquo;ve preferred to download my routes to the 64sx, even if I&rsquo;m leaving it off and buried in my pack. It&rsquo;s a good insurance policy that paid off a few years ago when we were hiking through burned out areas in Central Oregon and lost the trail thanks to massive deadfalls: the extra topo layers I had loaded into it made it easy to look up the trail on the spot and figure out where to rejoin it.</p>
<p>I&rsquo;d like to shed the 64sx and I&rsquo;ve eyed the inReach-enabled handhelds Garmin&rsquo;s got on the market. They offer rechargeable or AA batteries, do all the handheld GPS stuff, and include the same emergency comms options. The Mini is so small, though, that it&rsquo;s not a huge burden to have two hardware devices. The Mini has a &lsquo;biner I clip to whatever pack strap is handy up near my shoulders and mostly stays out of the way. I just make sure to plug it into the car to recharge it whenever we set out on a trip. So I don&rsquo;t think a whole new device is necessary and I&rsquo;ll just live with the extra hardware.</p>
<p>This weekend convinced me I could probably loosen up a little on using an iPhone on hikes, though. Marys Peak isn&rsquo;t that remote, and there&rsquo;s even 5G cell coverage at the top, so the stakes were lower and made it easier to experiment.</p>
<p>People dis the company for limiting the connectivity of its devices to preserve a focus on hardware, but Garmin&rsquo;s Explore app does a decent job of turning your smartphone into an expensive dongle that offers better ergonomics if you&rsquo;re mostly sticking to easier dayhiking situations. Once paired, the Bluetooth sync between phone and GPS device is solid and fast, and Explore includes topo maps and the ability to add tracks and waypoints to your Garmin account. So you can download a GPX file before heading out, import it into Explore, and it will both sync to your Garmin account and &mdash; once paired up &mdash; your dedicated GPS devices. Any tracks you record on your hardware sync to Explore, where it&rsquo;s much easier to use the phone UI to rename, relabel, and organize once you&rsquo;re off the trail. It also offers a map on a larger, big screen you can consult in a pinch. It&rsquo;d still suck in the rain, but it&rsquo;s there for quick use.</p>
<p>This weekend I addressed a few of my hangups about how little I trust iPhones to behave when my back is turned by making a pair of shortcuts that alternately power down all the radios and put the phone in low power mode or bring the radios back up, and saved them to my homescreen. When we got to a point on the trail where we weren&rsquo;t sure what it would mean to take one route or the other, Explore&rsquo;s topo map made it easy to do a quick consult and make a decision. Having a bigger, brighter, faster screen to explore with was better than the slower, smaller, harder to read 64sx. Then the phone got put away and off we went.  For the kind of hiking we usually do, that seems like a workable use case. So I expect the 64sx will be spending more time at the bottom of a pack.</p>
<p>I did spend some time imagining an iPhone Ultra during the more boring part of the trail, though.</p>
<h2 id="wikiloc">Wikiloc</h2>
<p>Another iPhone GPS challenge involves downloading GPX files. Some apps make it pretty hard to do from mobile even if they do offer the option via a desktop interface, and you&rsquo;re sort of swimming upstream when you do anything on iOS that involves a data file.  I found Wikiloc, which has a reasonable $9.99/year subscription and a 14-day trial, so I&rsquo;m going to give it a try on our trips over the next few weeks. The subscription includes a simple interface to save GPX files to your phone&rsquo;s storage, send them to your Apple Watch, or share them to Garmin devices. I learned I can just use the share sheet to send them to the Explore app, where they sync to my Garmin account.  That&rsquo;s a big improvement over AllTrails&rsquo; mobile app.</p>
<p>Wikiloc is crowdsourced, so you&rsquo;re better off using it when you have time to vet the trails at home, or the connectivity to do so in camp. The ones I&rsquo;ve looked up so far seem fine based on past experience, you just have to choose between several for a few locations, and people don&rsquo;t always clean up the ten minutes they spent walking around the trailhead, visiting the toilet, and walking back and forth from car to picnic table from their GPX files.</p>
<p>We have a few guidebooks to Oregon trails we use to get ideas for hikes, then compare and contrast with the online tracks. It can make for some amusing triangulation: The books are a little dated and fusty, preferring trail names that don&rsquo;t always line up with the names the forest or park services use on the signage. The crowdsourced online trail resources sometimes feel like they were annotated by someone who thinks &ldquo;walk a mile or two and turn left where someone left a Snickers wrapper in the weeds&rdquo; counts as expert guidance.</p>
<p>Anyhow, we&rsquo;re headed to the Diamond Lake area in a few weeks and there are some trails to try it out on. I don&rsquo;t know if we&rsquo;ll make another run at Mt. Bailey this year, though.</p>
<h2 id="anchoring-on-the-denote-way">Anchoring on The Denote Way</h2>
<p>I&rsquo;m a month into &ldquo;Obsidian but with Denote file naming and frontmatter conventions&rdquo; and it&rsquo;s surprisingly calming.</p>
<p>I&rsquo;ve settled on 12 plugins, several of which are discretionary or just around to be used for the API they provide to another plugin, and I&rsquo;ve discarded the things in my setup that were sort of nice but unreliable for syncing. It&rsquo;s smooth, syncing is reliable, and 30+ days into a new job I&rsquo;m finding search works well.</p>
<p>I felt a little itchiness about the setup a few days ago, and the thing that kept me from doing anything about it was the sense that settling on the Denote formatting conventions for file names and frontmatter means the option&rsquo;s there to move between Obsidian and Emacs whenever, so why bother now? They&rsquo;re just Markdown notes. I will probably not revisit north of 75 percent of them ever for anything more than digging out a fact here or there. I can type them into anything. If I ever get to a point where org-mode&rsquo;s better syntax is called for, I&rsquo;ll just slip over to Emacs and carry on. Both formats work in Denote.</p>
<p>Def <a href="https://bear.app">curious about Bear 2</a> tho. It keeps the content in some sort of db though, right?</p>
<h2 id="belonging">Belonging</h2>
<p>I had a chat with a senior executive in my foodchain today. I found myself saying, &ldquo;there&rsquo;s some stuff that&rsquo;s a little messed up I have to deal with, but I belong here and I&rsquo;m the kind of person you need handling this stuff.&rdquo;</p>
<p>Little moments like that have been happening here and there, when I feel a little frustrated that something is just sorta dumb and dysfunctional or broken, then I pause for a moment and think &ldquo;Good. I&rsquo;m the right person to fix this. It&rsquo;s why I&rsquo;m here.&rdquo;</p>
<p>I love my Puppet friends dearly, wouldn&rsquo;t trade the experience for the world, and had the good fortune to go out with a great person to report to who did a lot to help me get back a sense of what I could do, but on balance the last few years of that place did me no favors, and I let a lot of self doubt seep in. It feels good to begin recovering a little more sense of what I&rsquo;m supposed to be about. I&rsquo;m so glad I got to take a break before I jumped back in.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-10</title>
      <link>https://mike.puddingtime.org/posts/2023-07-10-daily-notes/</link>
      <pubDate>Mon, 10 Jul 2023 11:55:10 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-10-daily-notes/</guid>
      <description>Something lost along the way.</description>
      <content:encoded><![CDATA[<h2 id="whos-doing-politics">Who&rsquo;s doing politics?</h2>
<p>Politics feel more cultural than political these days. And in the wealthier corners of the world, the culture around educated people involves a sort of pained, fretful play in which we problematize virtually everything. It&rsquo;s not the best hobby, but it&rsquo;s widespread enough that good liberals have decided &ldquo;virtue signaling&rdquo; suffered from right-wing capture but was perhaps <a href="https://www.vox.com/science-and-health/2019/11/27/20983814/moral-grandstanding-psychology">in need of a suitable conceptual approximation</a> because &ldquo;<a href="https://www.theguardian.com/commentisfree/2023/jul/07/my-white-friends-trivialise-racism-by-labelling-everything-racist-how-do-i-tell-them-to-stop">forced allyship</a>&rdquo; is a manifestation of it, whatever you want to call it.</p>
<p>I&rsquo;ve pointed to it in the past, but the <a href="https://en.wikipedia.org/wiki/Chomsky%E2%80%93Foucault_debate">Chomsky-Foucault debate</a> really does strike me as a bellwether, Chomsky earnestly arguing there&rsquo;s a point A, and a point B, and that the law or state may or may not be relevant to how you affix those points in your ethical charts, but they exist; Foucault averring a veritable Xeno&rsquo;s paradox of morality that has since driven the progressive left into a kind of recursive, somehow-other-directed narcissism that undermines and sometimes destroys the things it most seeks to champion and ally itself with.</p>
<p>I&rsquo;ve come at this idea through a bunch of different lenses in the past several weeks &mdash; Supreme Court rulings, the billionaire submarine, a friend&rsquo;s tweet about an obtuse NYT column, Twitter, Lemmy, reddit, Bluesky &mdash; some of them written down, some diverted into tangents far away from this, some dying as drafts.</p>
<p>I think <a href="https://www.nytimes.com/2023/06/29/opinion/college-admissions-affirmative-action.html">this essay</a> brought it closer to a boil:</p>
<blockquote>
<p>&ldquo;Expect more antiracist action plans, more vaporous decolonization, more mandated training, more huckster consultants, more vacuous reports, more administrators whose jobs no one can explain, more sleazy land acknowledgments (&lsquo;Sorry I stole your house!&rsquo;), more performative white self-flagellation, more tokenization of minority faculty members.&rdquo;</p>
</blockquote>
<p>Go ahead and place a bet with yourself on the likely cultural/political alignment of the author before clicking through.</p>
<p>We were in the streets, furious, three years ago. I&rsquo;m not entirely sure what happened, exactly, but something went wrong or got lost, and the fingerprints of our conflation of politics and culture are all over it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-03</title>
      <link>https://mike.puddingtime.org/posts/2023-07-03-daily-notes/</link>
      <pubDate>Mon, 03 Jul 2023 08:54:41 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-03-daily-notes/</guid>
      <description>John Gruber might be Satan. magit-wip-mode. I can never tell when NYT is being obtuse or unintentionally helpful. New Himalayan loom &amp;ndash; fingers crossed.</description>
      <content:encoded><![CDATA[<h2 id="john-gruber-might-be-satan">John Gruber might be Satan.</h2>
<p><a href="https://johnmacfarlane.net/beyond-markdown.html">Reader, I lol&rsquo;d</a>.</p>
<h2 id="magit-wip-mode">magit-wip-mode</h2>
<p><a href="https://magit.vc/manual/magit/Wip-Modes.html">magit WIP modes</a>:</p>
<blockquote>
<p>&ldquo;Git keeps committed changes around long enough for users to recover changes they have accidentally deleted. It does so by not garbage collecting any committed but no longer referenced objects for a certain period of time, by default 30 days.</p>
</blockquote>
<blockquote>
<p>&ldquo;But Git does not keep track of uncommitted changes in the working tree and not even the index (the staging area). Because Magit makes it so convenient to modify uncommitted changes, it also makes it easy to shoot yourself in the foot in the process.</p>
</blockquote>
<blockquote>
<p>&ldquo;For that reason Magit provides a global mode that saves tracked files to work-in-progress references after or before certain actions. (At present untracked files are never saved and for technical reasons nothing is saved before the first commit has been created).&rdquo;</p>
</blockquote>
<p>I wander back and forth machines a lot and this seems like useful insurance, so I turned it on.</p>
<h2 id="accurate-but-not-good">accurate but not good</h2>
<p>Luke prompted a half-response this morning:</p>
<iframe src="https://hachyderm.io/@lkanies/110648795495111994/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe>
<p>I replied in a spirit appropriate to me, which is to say &ldquo;disappointed idealist who should learn to either quit being disappointed, or give up on being an idealist, or get a new sense of humor.&rdquo;</p>
<p>Because <a href="https://www.nytimes.com/2023/07/02/style/rethinking-july-4th-celebrations.html">that article</a> feels like a bookending, illustrative underscore of <a href="https://www.nytimes.com/2023/06/29/opinion/college-admissions-affirmative-action.html">this column</a>, which I went into sort of nodding along in a &ldquo;checks out&rdquo; sort of way, then sitting up straight when it got to:</p>
<blockquote>
<p>&ldquo;Expect more antiracist action plans, more vaporous decolonization, more mandated training, more huckster consultants, more vacuous reports, more administrators whose jobs no one can explain, more sleazy land acknowledgments (“Sorry I stole your house!”), more performative white self-flagellation, more tokenization of minority faculty members.</p>
</blockquote>
<blockquote>
<p>&ldquo;And amid this great tornado of race chatter, if you take a moment to plug your ears and look around, you will probably begin to notice fewer and fewer brown and Black kids reading on the quad and, down the line, fewer and fewer brown and Black doctors in the maternity wards. It will turn out that all those initiatives will have next to nothing to do with actually combating structural racism. We may well find ourselves teaching Toni Morrison to rooms that get whiter and richer by the year.&rdquo;</p>
</blockquote>
<p>The biggest change I noticed at my job from 2019 to 2022 was that HR managed to edge everyone out of anti-racist work, and suddenly anything that seemed like it could be meaningful and engage senior managers was ruled &ldquo;performative.&rdquo; Mentorship programs? Performative. Sponsorship programs? Performative. I came to realize that &ldquo;we don&rsquo;t want to be performative&rdquo; was just a thought-terminating cliché meant to shut down the conversation.</p>
<p>What were you supposed to do? Basically, fill low-stakes associate positions, maaaaaybe send a manager out to specific recruiting events, but otherwise just hand the entire hiring process over to recruitment and forget about it. If you looked at any demographic information that suggested perhaps the lenses you were supposed to use &mdash; ratios that ignored role or level &mdash; were problematic, you were asked how you got the information you were using because they thought they&rsquo;d locked it all up. And I watched a good leader driven out by someone who weaponized the whole topic.</p>
<p>When I helped interview HR business partners, it suggested to me that what I was seeing wasn&rsquo;t just local. One of them got uncomfortable when I asked about their experience with ERGs, and preferred to discuss how happy people were with a local soccer team ERG they&rsquo;d sponsored. I honestly didn&rsquo;t know what to do with that, but just marked &ldquo;strong no,&rdquo; explained why, and was relieved the hiring team went another direction. For all I know they thought that &mdash; as an older, white, male interviewer &mdash; I <em>wanted</em> to hear about a soccer ERG instead of an identity-based one, but I didn&rsquo;t feel like playing eight-dimension chess. <em>Including</em> soccer fans seemed like an odd DEI triumph.</p>
<p>So if I&rsquo;m coming off a little mordant about an NYT piece that manages to both report <em>and</em> perform a certain weird forgetfulness in the summer of 2023, it&rsquo;s because I&rsquo;m struggling to understand what we <em>got</em> besides a new consultant class, a new slice of territory for HR departments, and vague commitments to &ldquo;work on ourselves.&rdquo; I can&rsquo;t get mad about the reporting itself, because it seems <em>accurate.</em> It&rsquo;s where we all are. What do we want to do about that?</p>
<h2 id="new-loom-on-the-himalayan">New loom on the Himalayan</h2>
<p>I stuck <a href="https://accessories.hitchcocksmotorcycles.com/accessory-shop/Charging/46817">the new loom</a> on the RE Himalayan today. It was a 20-minute process, from taking off the side plate to figuring out where everything was, to disconnecting and reconnecting all the connectors.</p>
<p>The net effect is that it puts the gear detector behind the ignition instead of straight to the battery, which I hope will stop the parasitic drain I&rsquo;ve been dealing with. It&rsquo;s a weird thing to have to do, but I read a few rumors online that some dealers have been putting them on at sale. It&rsquo;s just a bad design decision with a $25 fix.</p>
<p>Al and I took a ride for groceries this evening. When we got home I took a reading off the battery then set a reminder to myself to check back in 24 hours to see whether the drain seems reasonable. Since I put an <a href="https://antigravitybatteries.com/products/starter-batteries/restart-oem/atz10-rs/">Antigravity battery</a> in there the stakes are a little lower if it drains too much while I observe.</p>
<p>Not related to the loom, the bike is running really well now.  It sounds good, feels smooth, and I&rsquo;ve appreciated how manageable it is. I had it out twice today and just enjoyed driving it through a few curvy parts of southeast Portland in the sun. We&rsquo;re thinking about taking a camping trip down in Clackamas County and going out separately so we can bring the Himalayan along and enjoy some forest service roads and rides along the river.</p>
<p>Still considering trading it in or selling it, but it&rsquo;s growing on me again. I just wish RE was just better at QA overall. I&rsquo;ve got $125 worth of dongles hanging off the thing to get it to just do what it should have done out of the factory, I&rsquo;ve spent four hours sitting around the dealership while the mechanics grudgingly fixed stuff like pinched vacuum hoses and weirdly tuned electrics, and I spent a bunch of my own time hand-tightening connections and digging overpacked grease out of connectors.</p>
<p>With all that time and effort invested, it&rsquo;s behaving. I don&rsquo;t know if I&rsquo;d recommend these bikes to a newbie. I have some patience and don&rsquo;t mind having to do a little work &mdash; it&rsquo;s sort of educational and interesting. Someone new to the hobby shouldn&rsquo;t have to think about that stuff when they&rsquo;re trying to just learn the basics and wondering if stalls or glitches are their fault.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-02</title>
      <link>https://mike.puddingtime.org/posts/2023-07-02-daily-notes/</link>
      <pubDate>Sun, 02 Jul 2023 10:38:55 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-02-daily-notes/</guid>
      <description>First Thorns match. A little more on Lemmy. Secret Invasion. Tagging Hugo posts in Emacs. Looking for monitor recommendations. Ben in France.</description>
      <content:encoded><![CDATA[<h2 id="first-thorns-match">First Thorns match</h2>
<p>Al and I went to our first Portland Thorns match last night. I think this is maybe the third soccer match I&rsquo;ve ever been to. The two previous were Timbers games for company parties and one of them got rained on pretty hard.</p>
<p>Since this was my first &ldquo;go sit in the regular seating, pay attention for 90 minutes&rdquo; match I wasn&rsquo;t sure what to expect. It was pretty fun. Our hosts are on their first season passes and newly energized about the sport, so their enthusiasm rubbed off. I think the other thing I kept coming back to was that watching requires patience similar to watching high-level jiu jitsu grapplers, but the other fans do a lot to contribute to your sense of the ebb, flow, rising and falling tension.</p>
<h2 id="more-lemmy">More Lemmy</h2>
<p>I have three accounts on assorted Lemmy instances, with a fourth pending. I learned about <a href="http://wefwef.app">wefwef</a> yesterday, which is a PWA that provides a nice client you can save to your phone homescreen same as Elk for Mastodon. I also have the beta of <a href="https://github.com/gkasdorf/memmy">memmy</a> on my phone.</p>
<p>There&rsquo;s not a ton of interaction on many of the communities I&rsquo;ve subscribed to so far. There&rsquo;s <a href="https://lemmy.ml/c/portland">a portland one</a> where people are swearing to be nicer, less hostile, and less censorious than /r/portland, which is a super low bar; and also less reactionary and goonish than /r/PortlandOR, which &mdash; again &mdash; low bar.</p>
<p>You can subscribe to communities in Mastodon by adding their address sans the <code>!</code> lemmy convention. I added a few but there&rsquo;s the usual &ldquo;now your instance needs to start pulling their stuff in&rdquo; lag.</p>
<h2 id="secret-invasion">Secret Invasion</h2>
<p>I&rsquo;m two episodes into the Skrull/Nick Fury espionage series <em>Secret Invasion</em>. Not sure. It feels like in terms of size, scale, and texture it&rsquo;s maybe a step down from <em>The Falcon and The Winter Soldier</em>, which felt pretty slick; and maybe a step up from <em>She-Hulk Attorney at Law</em>, which felt like it was made on a shoestring budget. None of those three have the charm of <em>Hawkeye</em>.</p>
<p>The dialog&rsquo;s sort of flat, there are &ldquo;big scenes&rdquo; that feel small. Samuel L. Jackson is doing something different and I&rsquo;m not sure it always works. There&rsquo;s a reason to not involve the Avengers that &hellip; it&rsquo;s going to always be a problem when there are any issues going on of a sub-Thanos scale where you&rsquo;re not just sending a group of second-string probationary Avengers to fix it.</p>
<p>But, you know, let&rsquo;s see where it goes.</p>
<h2 id="emacs-function-for-tagging-posts-in-hugo">Emacs function for tagging posts in Hugo</h2>
<p>I seem to be sticking to just blogging in Markdown, <a href="https://gist.github.com/pdxmph/9271cbb22d90f7e73a4b88664e0eaadd">using the Ruby script I wrote</a>. I didn&rsquo;t realize how much I missed reference links, or Markdown link notation in general. Tags are a little different story. I like the way <code>ox-hugo</code> uses org-mode&rsquo;s heading tags (<code>:foo:bar:baz:</code>) instead of Markdown/YAML&rsquo;s key tags (<code>tags: [&quot;foo&quot;,&quot;bar&quot;,&quot;baz&quot;]</code>).</p>
<p>So I made <code>mph/replace-tags-in-frontmatter</code> and stuck it in my growing Hugo submenu. You just invoke it and enter a comma-delimited set of tags and it replaces that frontmatter key. My script asks for tags up front, which is fine for single-topic posts where I know the tags up front. Doesn&rsquo;t work as well for daily posts, where it takes a day to know what&rsquo;s going in.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/replace-tags-in-frontmatter</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Replace the &#39;tags&#39; line in YAML frontmatter with user input.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let*</span> <span class="p">((</span><span class="nv">frontmatter-start-regexp</span> <span class="s">&#34;^---\n&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">frontmatter-end-regexp</span> <span class="s">&#34;\n---\n&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">tags-regexp</span> <span class="s">&#34;^\\s-*tags:\\s-*\\[.*\\]&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">input</span> <span class="p">(</span><span class="nf">read-string</span> <span class="s">&#34;Enter new tags (comma-separated): &#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">new-tags</span> <span class="p">(</span><span class="nf">mapcar</span> <span class="p">(</span><span class="nb">lambda</span> <span class="p">(</span><span class="nv">tag</span><span class="p">)</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;\&#34;%s\&#34;&#34;</span> <span class="p">(</span><span class="nv">string-trim</span> <span class="nv">tag</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">                           <span class="p">(</span><span class="nv">split-string</span> <span class="nv">input</span> <span class="s">&#34;,&#34;</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">save-excursion</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">goto-char</span> <span class="p">(</span><span class="nf">point-min</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">re-search-forward</span> <span class="nv">frontmatter-end-regexp</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">backward-char</span> <span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">re-search-backward</span> <span class="nv">frontmatter-start-regexp</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">forward-char</span> <span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">re-search-forward</span> <span class="nv">tags-regexp</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">replace-match</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;tags: [%s]&#34;</span> <span class="p">(</span><span class="nf">mapconcat</span> <span class="nf">#&#39;identity</span> <span class="nv">new-tags</span> <span class="s">&#34;,&#34;</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">message</span> <span class="s">&#34;Tags replaced successfully.&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix</span> <span class="p">(</span><span class="s">&#34;H&#34;</span> <span class="o">.</span> <span class="s">&#34;Hugo&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;Set tags for Hugo post&#34;</span> <span class="s">&#34;t&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/replace-tags-in-frontmatter</span><span class="p">))</span></span></span></code></pre></div>
<h2 id="ben-in-france">Ben in France</h2>
<p>Ben watched the Apple store in Strasbourg get smashed and looted, avoided a tear-gassing, and was briefly separated from his bike. He finally made it to the train after missing the first one out of town. Now he&rsquo;s on to the Netherlands.</p>
<p>When I was almost his exact age I went to Europe and then the then-Soviet Union as part of a student group. Our professor gave us a lot of advice on how to avoid local trouble, and since it was winter things were pretty much on rails anyhow: Cologne was mild, Copenhagen was wintry but okay, Stockholm was extremely cold, then Leningrad and Moscow were where I learned that -40 is the same on both the Fahrenheit and Celsius scales. Hungary: Cold and snowbound. Zurich: Not so bad but we were staying near a park known for aggressive cop sweeps. So there were opportunities for a little bit of mischief, but the overall vibe was &ldquo;travel in groups, don&rsquo;t go off alone.&rdquo; So we mostly didn&rsquo;t except for one guy who made himself sort of the group pariah.</p>
<p>When I think about my year in Korea, I&rsquo;m surprised nothing happened. I was there during a summer with some violent anti-US protests thanks to high-profile brawls between soldiers and Korean civilians. We were locked down on post for several weekends straight because the risk of violent altercation was high. I was a little bit of a loner over there, so it wasn&rsquo;t unusual for me to be out in the ville on my own, and a few times when I had to drive command staff up to Seoul for overnighters I just wandered around on my own after they cut me loose for the day. My <a href="https://en.wikipedia.org/wiki/Korean_Augmentation_To_the_United_States_Army">KATUSA</a> friend said my lonerish-ness made him nervous. I was in a weird frame of mind at that point &mdash; fresh out of jump school and hence invulnerable, more physically capable than I&rsquo;d ever been &mdash;  but he had a list of places I wasn&rsquo;t supposed to ever go and said the stakes would be higher than a beating or a black eye,  so I didn&rsquo;t go to those places. I got followed a few times other places, did the whole &ldquo;demonstrate situational awareness&rdquo; thing, and nothing ever happened.</p>
<p>Ben&rsquo;s over there with two other kids just roaming around, with the itinerary seeming to change as whims take them. It continues to make me incredibly happy for him. It took me a while to gain the confidence he has, his street savvy is a lot higher than mine was at his age, and his confidence comes from knowing how to get away from whatever it is, not steer into it.</p>
<h2 id="typography">typography</h2>
<p>I saw a blog go by with a really nice serifed body type. I spent 30 minutes messing around with Google Fonts trying to dial in something similar and ended up not liking anything I saw, so I picked something completely different to freshen up headings and nav but otherwise left everything alone.  I&rsquo;m not sure how much of not liking things was not liking them and how much was not being sure of my own typographical taste. Part of me thought &ldquo;oh! well! Go learn!&rdquo; and the rest of me outvoted that part.</p>
<p>Anyhow, day two of a four-day weekend. Nothing on the agenda for the next two days besides visiting a friend for a walk through Oaks Bottom tomorrow, and having some friends over for dinner for the Fourth. The park across the street is going to go completely bananas with the usual impromptu fireworks show, and there&rsquo;s a  better-than-even chance of the show more or less ending with a drunken brawl, so we tend to stick close to the house every year to make sure nothing catches on fire. This will be the 14th year we&rsquo;ve enjoyed this particular experience. This year I&rsquo;m anticipating it with less dread than normal, and maybe even a little amusement.</p>
<p>Somehow our little park became the place a lot of people go to set off their illegal fireworks. People start showing up in the early afternoon to set up chairs and blankets at the edge of the treeline. Within an hour of sundown everything is parked in and there are two rows of picnic chairs around the perimeter of the park, which is a block square minus maybe 50 or 75 yards of treeline on our end of it.</p>
<p>On the one hand, wow it can be annoying, especially when people block your driveway, set fireworks off next to your car, or set things on fire. And nobody packs out their trash, so the park is strewn with trash and expended fireworks the next morning. But it&rsquo;s also just &hellip; this thing that happens. People get a lot of joy from it. It&rsquo;s not official or sanctioned. It&rsquo;s seems to be a spontaneous thing and it happens every year. When we had a rescue dog who was terrorized by the whole thing it was the absolute worst. Now that we don&rsquo;t, I feel bad for all the other dogs and people in the neighborhood who are suffering, but it doesn&rsquo;t feel <em>personal</em>, and the cops and fire department have zero interest in doing anything to curtail something they come around and watch every year. So there&rsquo;s not much to do but watch it unfold and people watch.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-07-01</title>
      <link>https://mike.puddingtime.org/posts/2023-07-01-daily-notes/</link>
      <pubDate>Sat, 01 Jul 2023 08:24:29 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-07-01-daily-notes/</guid>
      <description>Swapping Zoom for Golden Ratio (Emacs window resizing). Life after reddit. First poke at Lemmy. Himalayan Day. Thorns game.</description>
      <content:encoded><![CDATA[<h2 id="zoom-swapped-in-for-golden-ratio">Zoom swapped in for Golden Ratio</h2>
<p>I mentioned a few weeks ago that I was trying out Golden Ratio, an Emacs package that dynamically resizes windows inside the frame as you switch between them. I saw a few warnings here and there that it had a few bugs, but for the past few weeks it seemed fine. I finally came across one a few days ago that I couldn&rsquo;t quite isolate &mdash; it broke the way <code>org-insert-structure-template</code> worked &mdash; and finally took the time to narrow it down this morning.</p>
<p>Golden Ratio isn&rsquo;t being maintained anymore, so I decided &ldquo;not enough time in the day,&rdquo; marked that part of my config <code>:tangle no</code> and installed <a href="https://github.com/cyrus-and/zoom">Zoom,</a>, which does much the same thing.</p>
<p>Minimum config:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">custom-set-variables</span>
</span></span><span class="line"><span class="cl"> <span class="o">&#39;</span><span class="p">(</span><span class="nv">zoom-mode</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="o">&#39;</span><span class="p">(</span><span class="nv">zoom-size</span> <span class="o">&#39;</span><span class="p">(</span><span class="mf">0.618</span> <span class="o">.</span> <span class="mf">0.618</span><span class="p">)))</span></span></span></code></pre></div>
<h2 id="post-reddit">Post-reddit</h2>
<p>Golden Ratio made me think about reddit for a bit. I learned about that package from one of the Emacs subreddits. I don&rsquo;t recall a ton of discussion about it, so it must have been one of the quiet link aggregator subs, like /r/planetemacs. That was the other half of my reddit experience: Grazing steady feeds of interesting stuff. I&rsquo;ve learned a lot about assorted interests &mdash; motorcycling, longboarding, Emacs, ruby &mdash; from watching a subreddit scroll by and just grabbing links.</p>
<p>That part of my experience is largely unaffected by the third-party app shutdown. I don&rsquo;t follow or participate in discussions much, so I can do that from a browser or reddit&rsquo;s own, terrible app.</p>
<p>But while I&rsquo;m not, like, <em>boycotting</em> mad, I&rsquo;m irritated. I don&rsquo;t know how spez managed to press so many buttons at once with me &mdash; ordinarily tech dude stuff rolls off my back, and C-level tech dude stuff barely registers as language or thought, but the combination of smarm, Ralph-Wiggum-esqe &ldquo;I&rsquo;m a <em>business man</em> <code>&lt;eats paste&gt;</code>&rdquo; posturing, deceit, and bizarre turn into trying to make the whole thing some sort of identity politics issue just &hellip; wow.</p>
<p>Like, look: Even at my most business-like &mdash; my most &ldquo;jacked director&rdquo; &mdash; I&rsquo;m pretty much just one of those vintage-looking prints you see at mall restaurants of little kids dressed in adult clothing sitting at a desk on an old-timey phone or whatever.  If I have a philosophy of business communication or governing principle for &ldquo;how I show up,&rdquo; it is probably &ldquo;best to keep your mouth shut and be thought a fool &hellip;&rdquo; etc.</p>
<p>But when I read the clown-like attempts at businessing going on over the Apollo debacle &mdash; the appalling, <em>weak</em> blithered  promises that everyone was gonna be cool here &mdash; I was sort of appalled and a little embarrassed for them. It was like when you ask one of your managers &ldquo;so did you give them that feedback about promotion?&rdquo; and they swear to God they laid down the law but their report took it like a champ, then you actually read the check-in and it&rsquo;s, like, &ldquo;Joe Grudd was stellar this year. Recommending for immediate promotion. Top notch ace contributor. Indispensable.&rdquo;</p>
<p>And <em>then</em>, after dithering around and failing to just sit up straight and deliver the damn message, they let themselves get clowned. <em>Nobody</em> covered themselves in glory in whatever negotiations were going on, but table stakes for people who&rsquo;re busy ruining the customer experience on a beloved website because They Are Serious Business People Who Get How This Works is pretty much &ldquo;don&rsquo;t look worse than the one-man cottage industrialists who&rsquo;re hoping you&rsquo;ll get them to go peacefully if you just buy them out <em>ha ha only serious</em>.&rdquo;</p>
<p>But somehow they couldn&rsquo;t even do that.</p>
<p>Anyhow.</p>
<p>It just sort of shades the whole experience now. Perfectly nice, sometimes emotionally violent shitposters just getting on with their days, the occasional incel breaking cover and going down in a hail of gunfire under the helicopter spotlights of the moderation team, no longer ad free, forcing you to remember that when someone says &ldquo;have some gold, kind stranger&rdquo; that gold was sold to them by the Ed Rooney of web publishing. There&rsquo;s just this lingering fart smell wafting through it all. Where do you go from here?</p>
<h2 id="lemmy">Lemmy</h2>
<p>Well, I decided to look around at Lemmy.</p>
<p>I get it, more or less, and am assuming that all the weirdness I&rsquo;m seeing is down to the same thing that happened with Mastodon last fall: Lots of little instances struggling to keep up with the newbies, plus different configurations, plus the codebase itself. Most of the instances I skipped through were either slow or glitchy. The most solid Lemmy instance I&rsquo;ve seen &mdash; sometimes slow but usable &mdash; is the unfederated hexbear.net, and I don&rsquo;t think it counts.</p>
<p>So I signed up for a couple of more normal ones and will revisit as things calm down.</p>
<h2 id="himalayan-day">Himalayan Day</h2>
<p>Today is &ldquo;work on the Himalayan day.&rdquo; My new Antigravity self-jumping battery is here, the mounting base and passenger back pad for our Givi topcase are here (which will make it easier for Al to ride pillion), and I did some reading about how to test for that parasitic drain. So I&rsquo;m going to give it all a few hours out in the driveway with a wrench and a multimeter. It&rsquo;s sunny and beautiful, so I&rsquo;m looking forward to the ride after I&rsquo;m done.</p>
<p>I&rsquo;m kind of wondering if this small round of &ldquo;get ready for sale, but also make it a little nicer&rdquo; investment will change my mind about selling it.</p>
<p>My strong impression of Himalayans in general is that the user base is split between people who just drive them off the lot and love them, never really having much trouble that doesn&rsquo;t get addressed during early service; and people like me, who get a badly QA&rsquo;d one and more than their share of glitchy components.</p>
<p>I like riding the thing. It&rsquo;s a manageable size for city riding, and it does really well anywhere you&rsquo;d want to go in the Portland metro area. Holds its own on 205/84, fine for runs up to St. Johns or Sauvie Island, great down to Estacada. With the panniers and topcase it&rsquo;s fine for groceries. There&rsquo;s just enough power to two-up in town on date nights. I don&rsquo;t think I&rsquo;d ever take for a run down I5, but I could see running downstate on the back highways.</p>
<p>I&rsquo;ve done so much to it at this point that there&rsquo;s some sweat equity I don&rsquo;t want to part with. If I could nail down the parasitic drain I&rsquo;d have a bike that I feel more than a little attached to, because I&rsquo;ve put a lot of time into getting it dialed in. Knowing there&rsquo;s a dealership up in St. Johns that spends most of its time selling RE&rsquo;s, vs. the sort of crappy &ldquo;RE&rsquo;s are a weird loss-leader for broke Harley wannabes&rdquo; dealership out on the west side I had to get early service from, makes me a little more hopeful, too. It was frustrating having to go do my own research about assorted RE glitches then convince the service team to try fixes. I get the impression the St. Johns people are a little more into REs and would be a little more proactive.</p>
<p>We&rsquo;ll see. If I get it into a place where it just feels good and I don&rsquo;t have that &ldquo;poorly shimmed table leg&rdquo; feeling every time I turn the key, maybe we continue another season.</p>
<p>Anyhow, that&rsquo;s the plan for today, so I&rsquo;m gonna save and ship this.</p>
<h2 id="thorns-game">Thorns game</h2>
<p>Oh &hellip; going to a Thorns game tonight. Our first. Kathleen and Amy had extra tickets, so off we go.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-06-30</title>
      <link>https://mike.puddingtime.org/posts/2023-06-30-daily-notes/</link>
      <pubDate>Fri, 30 Jun 2023 10:37:54 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-30-daily-notes/</guid>
      <description>Google Reader. Aliens at the Hollywood. Pickelball noise. Apollo.</description>
      <content:encoded><![CDATA[<h2 id="google-reader">Google Reader</h2>
<p><a href="https://www.theverge.com/23778253/google-reader-death-2013-rss-social">This Verge piece</a> on the life and death of Google Reader is interesting. I was a fan, but not at all for the social reasons. I just thought it was a good way to read news, right up until mobile clients got to a place that I just used it as a sync backend for native readers. Because I never read it as a social app that dimension of the article is food for thought.</p>
<p>Then we get to:</p>
<blockquote>
<p>&ldquo;It’s been a decade since Reader went offline, and a number of the folks who helped build it still ask themselves questions about it. What if they’d focused on growth or revenue and really tried to get to Google scale? What if they’d pushed harder to support more media types, so it had more quickly become the reader / photo viewer / YouTube portal / podcast app they’d imagined? What if they’d convinced Mayer and the other executives that Reader wasn’t a threat to Google’s social plans, but actually could be Google’s social plans? What if it hadn’t been called Reader and hadn’t been pitched as a power-user RSS feed aggregator?&rdquo;</p>
</blockquote>
<p>&hellip; and then &hellip;</p>
<blockquote>
<p>&ldquo;It was never just an RSS reader. &lsquo;If they had invested in it,&rsquo; says Bilotta, &lsquo;if they had taken all those millions of dollars they used to build Google Plus and threw them into Reader, I think things would be quite different right now.&rsquo;</p>
</blockquote>
<blockquote>
<p>&ldquo;Then she thinks about that for a second. &lsquo;Maybe we still would have fallen into optimizing for the algorithm,&rsquo; she allows. Then she thinks again. &lsquo;But I don’t think so.&rsquo;&rdquo;</p>
</blockquote>
<p>Well, hard disagree.</p>
<p>There is something very strange to me about the disconnect between tech&rsquo;s behavior and the way that behavior is received and perceived by the version of the tech press that runs sites like <em>The Verge</em>. Like, the whole &ldquo;Google arbitrarily kills things &ndash; why, God?&rdquo; theme they harp on, while also crying about how, like, smartphone design has stagnated so let&rsquo;s please rush more easily broken folding gimmicks to market because &ldquo;black metal slabs are boring.&rdquo;</p>
<p>I don&rsquo;t even know what I&rsquo;m trying to say here, except that there is something both sweet and naive but also blinkered and infuriating about a tech press that can&rsquo;t see itself as a wholly compromised and willing participant in the tech industry. It&rsquo;s &ldquo;skeptical&rdquo; about new features, strange product names, maaaaaybe subscription juicers (though it&rsquo;ll still review them and provide an affiliate link), and sometimes whole companies if the CEO offends its political/social sensibilities.  But if you asked it, collectively, &ldquo;what would you say the ideology of this industry is,&rdquo; the best answer you&rsquo;d get would be something like &ldquo;pretty liberal except Elon Musk, but to be fair there are way more rainbow versions of logos these days.&rdquo;</p>
<p>I mean, sorry and that&rsquo;s very snotty of me, but also <em>man</em>, I would love it if I knew who the Molly White or David Gerard of the whole goddamn industry, not just its very most ridiculous and worst excesses, was.</p>
<h2 id="aliens">Aliens</h2>
<p>Al and I have tickets to a showing of <em>Aliens</em> at the Hollywood, which owns a 35mm print. I&rsquo;m so excited. It&rsquo;s probably one of my 10 desert island movies and I don&rsquo;t know how many dozen times I&rsquo;ve seen it. I drove from my small town in Indiana to South Bend every weekend during its original run.</p>
<p>Stuff I love:</p>
<ul>
<li>The economy of the early scenes, establishing all the characters.</li>
<li>Lance Henriksen&rsquo;s ability to make Bishop strange and offputting but empathetic.</li>
<li>Paul Reiser&rsquo;s &ldquo;yuppie from central casting&rdquo; turn. Right out of the pages of <em>Fear of Falling</em>.</li>
<li>Bill Paxton&rsquo;s Hudson.</li>
<li>The tech. I have wondered for decades when it would become jarring and anachronistic, but it&rsquo;s still true-but-not-real.</li>
</ul>
<p>On the tech: I was trained to repair army signal gear. <em>Aliens</em> tech was a little retro even in 1986, providing some visual continuity with its &lsquo;79 predecessor,  but it&rsquo;s timeless in the way it conveys the grunt-proof aesthetic of military gear. Yeah, it misses in a few places, less because of the anachronisms and more because they wanted to wedge in a dramatic device. Overall, though, the materials and &ldquo;durability over ergonomics&rdquo; aesthetic are all just right. I can still remember the way it felt to rack a SINCGARS, or sit there in the cold un-bending a connector pin on a KY-57 with a Leatherman, or heft a power amplifier. <em>Aliens</em> feels very close to all that.</p>
<p>And I love Lt. Gorman&rsquo;s arc. There are lots of ways it could have been handled, and he could have easily been turned into a human punchline as Cameron whittled away the squad, but he gets to go out with dignity conferred on him by Vasquez, even as she calls him an asshole.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/aHjRQJZsUGg?start=85" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p><a href="https://www.rogerebert.com/reviews/aliens-1986">Roger Ebert</a>:</p>
<blockquote>
<p>&ldquo;I have never seen a movie that maintains such a pitch of intensity for so long; it&rsquo;s like being on some kind of hair-raising carnival ride that never stops.</p>
</blockquote>
<blockquote>
<p>&ldquo;I don&rsquo;t know how else to describe this: The movie made me feel bad. It filled me with feelings of unease and disquiet and anxiety. I walked outside and I didn&rsquo;t want to talk to anyone. I was drained. I&rsquo;m not sure <em>Aliens</em> is what we mean by entertainment. Yet I have to be accurate about this movie: It is a superb example of filmmaking craft.&rdquo;</p>
</blockquote>
<p>Can&rsquo;t wait.</p>
<h2 id="pickelball-noise">Pickelball noise</h2>
<p><a href="https://www.kgw.com/article/news/local/pickleball-courts-relocating-sellwood-park-portland/">The pickelball people of Sellwood</a>. I count a pickelball person among my dear friends, but I also think Portland&rsquo;s collective sense of how to behave in public spaces is god awful. See also <a href="https://www.wweek.com/news/city/2022/09/06/fight-over-field-at-hosford-middle-school-escalates-as-principal-says-dog-owners-harass-school-staff/">Hosford Middle School</a>.</p>
<h2 id="bye-apollo">Bye, Apollo</h2>
<p>Apollo went dark this afternoon. That sort of sucked. I was honestly hoping for some 11th-hour something.</p>
<p>I honestly don&rsquo;t know whether I&rsquo;ll keep reading reddit or not. The subs I like are more about conversations than they are rivers of memes, and they work best when you sort on New. In that context threaded commenting is pretty terrible, and Apollo made it easy to see when there was new stuff, and highlighted it for you. I think reddit charges for some kind of &ldquo;there&rsquo;s a new comment&rdquo; functionality, but I&rsquo;m not interested in paying right now, that&rsquo;s for sure.</p>
<p>But I guess I&rsquo;m also feeling &hellip; <em>dudgeon free</em>.</p>
<p>I&rsquo;ve had three career phases where I was in and around &ldquo;making money on the web,&rdquo; each with a slightly different angle. Each time it wasn&rsquo;t super easy when it wasn&rsquo;t buoyed by hype, or it was so crassly and soullessly commercial &mdash; corrupt, even &mdash; that it was horrible. It has left me feeling unsurprised and a little jaded when the likes of Twitter and reddit start thrashing around in their tarpits. I don&rsquo;t feel happy about the very real upset people experience when these spaces they had implode or remake themselves in unrecognizable ways, but they&rsquo;re spaces built in a medium that is ephemeral in an unprecedented way. Things are always coming and going.</p>
<p>On that tip, <a href="https://news.ycombinator.com/item?id=36544654">this Hacker News &ldquo;Ask&rdquo; post</a> sort of strange and naive to me. That place is one of the ideological hearts of the tech industry. And it&rsquo;s presumably a place where, like, the bias against succumbing to share-croppery would likely be high. But things get weird and distasteful in a few corners and there&rsquo;s this poor soul wondering if something has been lost.</p>
<div style="position: relative; width: 100%; padding-bottom: 56.25%;">
<iframe
style="position:absolute; width:100%; height:100%;"
src="https://getyarn.io/yarn-clip/4295aac2-5237-489c-a95d-e5a2a554808c/embed?autoplay=false&responsive=true"
frameborder="0"
></iframe>
</div>
<p>Go make something, dude.</p>
<p>We seriously do. not. need. some mass web experience.</p>
<blockquote>
<p>&ldquo;One thing it would be nice to take away from this current moment is a sense that there are ways to have the thing we were promised – more connection with more people, more sharing of ourselves, more awareness of our world – that don’t involve treating us like an attentional vein of coal someone else can strip-mine. Where we create small, warm spaces where we simply can be, loved around our hearth, esteemed in our village, welcomed in new places over the hill, tiny threads of lantern light lacing all our homes together.&rdquo;</p>
</blockquote>
<p>&mdash; <a href="/posts/2022-11-08-pausing-to-consider/">Me</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-06-29</title>
      <link>https://mike.puddingtime.org/posts/2023-06-29-daily-notes/</link>
      <pubDate>Thu, 29 Jun 2023 08:59:25 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-29-daily-notes/</guid>
      <description>RE Himalayan stuff. The hideousness of motorcycle marketing. Obsidian daily page automation with Shortcuts. Camera bags. Automation for slowness.</description>
      <content:encoded><![CDATA[<h2 id="more-himalayan">More Himalayan</h2>
<p>Evidently RE Himalayans have a widespread problem with parasitic drains owing to a few things, including weird wiring of the gear sensor. The net effect is batteries that get chewed through in a week of sitting. People do a bunch of things to address it, from finding third-party components to replace the factory stuff from RE, to rewiring the gear sensor, to even putting mechanical bypasses on the negative pole of their batteries. A battery tender is enough to help, too, though I sort of hate having one sitting out in the driveway.</p>
<p>There&rsquo;s also a cheap dongle you can order from Hitchcocks to do the rewiring for you. I ordered one hoping it&rsquo;ll address my Himalayan&rsquo;s particular issues. If I&rsquo;m to sell it, I&rsquo;d like to say &ldquo;no need for a constant tender!&rdquo;</p>
<p>I also ordered an Antigravity battery. Those things are cool: They keep some reserve power back. When they sense drain on the battery taking it below its ability to start the bike, the battery shuts down. Press a button and it recharges the main cells enough for a couple of starts.</p>
<p>There&rsquo;s a newer RE dealer up in St. John now, and I want to go up and talk to them. The service I got at the dealership I bought the bike from was pretty bad and sort of grudging. They had a real &ldquo;if you wanted it to all work perfectly, why didn&rsquo;t you spend more&rdquo; attitude, which helped me realize that what they <em>want</em> to do is sell you a Harley, but it&rsquo;s useful to them to have some RE&rsquo;s sitting on the floor for when people come in and can&rsquo;t countenance sixteen grand. There&rsquo;s the RE for less than $7000 out the door, and the way motorcycle fever works is that you&rsquo;ve rolled into that dealership ready buy <em>something</em> no matter what. (Well, not me &ndash; I got it all out of my system with my first 170cc scooter, and am probably on a local dealership blacklist for filling out quote forms then never returning calls.)</p>
<h2 id="the-h-is-for-hideous-or-horny-take-your-pick-on-what-the-d-is-for">The &ldquo;H&rdquo; is for &ldquo;Hideous.&rdquo; Or &ldquo;Horny.&rdquo; Take your pick on what the &ldquo;D&rdquo; is for.</h2>
<p>Trying to look up the price for a Harley Street Bob I ended up on <a href="https://www.harley-davidson.com/us/en/motorcycles/street-bob.html">the product page</a>. Jesus Christ.</p>
<p>Raising a kid I was sensitized to the aspirational nature of children&rsquo;s television/marketing. Like, was <em>iCarly</em> about teenage kids? Yes. But Nickelodeon didn&rsquo;t think fifteen-year-olds were watching. It knew eleven-year-olds were watching. The ads told you what the real viewer demographic was.</p>
<p>Harley is doing this in reverse: The male model is &ldquo;good-looking guy, a little salt and pepper in the beard.&rdquo; The female model is younger. Plausibly-deniably younger. Not enough to be lurid. Not enough, in a marriage where decisions about things like motorcycles are made jointly, to trigger too much anxiety, and possibly even aspirational for the spouse who&rsquo;s okay with a t-shirt that reads &ldquo;If you can read this, my old lady fell off.&rdquo;</p>
<p>It&rsquo;s not marketing for 30-year-olds who aspire to be 45-year-olds. It&rsquo;s marketing for 60-year-old men who aspire to much younger women. Wow it&rsquo;s a fine line between &ldquo;plausible deniability&rdquo; and &ldquo;feels icky.&rdquo; The local Harley dealership where I got the Himalayan picks up the slack with a &ldquo;Summer Solstice Bike Night&rdquo; that includes a bikini bike wash. I guess that&rsquo;s for the <em>very rare</em> instances where merely riding around atop your new Hog didn&rsquo;t magnetically lasso an old lady onto the pillion. And if all they&rsquo;re doing is rolling up to the bikini car wash a few times between June and August, <a href="https://www.washingtonpost.com/news/tripping/wp/2017/10/16/baby-boomers-who-made-motorcycles-cool-are-also-at-higher-risk-of-fatalities-aaa-says/">it&rsquo;s probably keeping the mortality rate down</a>.</p>
<h2 id="obsidian-actions-and-shortcuts">Obsidian Actions and Shortcuts</h2>
<p>You can do a lot with the Obsidian URL scheme and Apple&rsquo;s Shortcuts, but it&rsquo;s a little less fiddly with <a href="https://obsidian.actions.work">Actions for Obsidian</a>, which offers a bunch of Shortcuts actions that handle things like appending text to notes, making new notes, etc. I dusted off an old Shortcut I had that used the URL scheme and refactored it to work with Actions for Obsidian and it is much cleaner.</p>
<p>The workflow:</p>
<ul>
<li>Pops up a dialog with all my appointments for the day</li>
<li>I check the appointments I want an entry for in my daily page</li>
<li>If there&rsquo;s no daily page, the workflow creates it</li>
<li>Appends my appointments for the day to the Notes section of my daily page</li>
</ul>
<p>I currently just have a simple template for those meetings:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># Meeting Name 
</span></span></span><span class="line"><span class="cl">(attendees)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## What&#39;s the most important thing about this meeting?
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## How do you want to show up? </span></span></code></pre></div>
<p>It&rsquo;s at slight cross purposes with my static &ldquo;Today&rdquo; page, which I developed thinking I wasn&rsquo;t going to do daily pages. During my layoff, daily pages and journal entries were sort of the same thing, and I was doing all my journaling in encrypted org-journal files. I decided to keep my journal in org-journal, where I have a safe space for writing whatever I want. Daily pages are a little more &ldquo;look ahead and log things I don&rsquo;t care about other people reading (much).&rdquo; So, I think I&rsquo;ll move some of my Today page templating into my daily pages so they become a record of activity: Notes and tasks created on that day and that loose &ldquo;looking ahead&rdquo; calendar forecast I automated.</p>
<h2 id="camera-bags">Camera bags</h2>
<p><a href="https://www.kickstarter.com/projects/moment/the-everything-bags-cameras-tech-and-travel?ref=e5s4bv">Looks like Moment is coming for Peak Design.</a> The product names are pointedly similar. I was briefly confused by the promo mail.</p>
<h2 id="because-you-can">Because you can</h2>
<p>I had an item for today&rsquo;s post I decided wasn&rsquo;t quite ready. Using org-mode to blog, I would have done a quick <code>org-refile</code> to move the heading into a drafts section where I can work on it later. But I&rsquo;m writing in Markdown so that was off the table. I just made a file called <code>drafts.md</code> and committed it, then added the heading to it for later with good ol&rsquo; fashioned kill/yank.</p>
<p>But I did briefly think &ldquo;oh, see &hellip; good reason to go back to org-mode for blogging.&rdquo;</p>
<p>Except it&rsquo;s not. It&rsquo;s a terrible reason.  I just counted how many keystrokes it took me to collapse a heading, kill it, switch buffers, and yank it. It was &hellip; not a lot? 10? How about an org-refile operation? Yes. Fewer for sure. About half as many. The not-org-refile approach incurs some cognitive load, I suppose. When I was blogging in an org-file monolith my refile target was the only choice for that file. The Markdown version requires me to remember that I bookmarked my drafts.md file.</p>
<p>Probably seems like a weird thing to care about, but when I think about how ADHD shows up for me, it often takes the form of trying to do everything quickly to get on to the next thing. But I&rsquo;ve also got the hyperfocus thing going on, which finds a lot of expression in automation challenges I get lost in, trying to shave a few more seconds or keystrokes off a process.  When everything is wired up to drive down friction, I don&rsquo;t give myself time to think. I&rsquo;m just moving. I end up living in either a closed off, hyperfocused space where I&rsquo;m grinding out incremental improvements, or I&rsquo;m flying along the treetops.</p>
<p>It&rsquo;s about the thing I&rsquo;m doing with the Obsidian/Things division of labor. I wrote about this a few days ago when I mentioned the way I&rsquo;m <a href="/posts/2023-06-25-daily-notes/#mingling-notes-and-todos">blending todos into my note text</a>, but only long enough to leave a reminder to myself to go back and turn something into a real action in my system of record for todos. I think it&rsquo;s bad for me to have everything in the same system, because the less friction there is to record and remember, the more stuff just gets shoved into what eventually becomes an old shoebox full of receipts with purple crayon scribbles and grease stains.</p>
<p>Today, for instance, I had five meetings. Three of them produced things that I needed to remember to do later. I dropped todos into the text as I was taking notes. At the end of the day, I went to my <code>Today</code> page and looked at the Todo section, dynamically created from todos in any notes dated today.  A few were &ldquo;just do it now&rdquo; sorts of things that I knocked out before they could even hit Things. A few, it was helpful to jump back to the note to see things like &ldquo;why did he tell me to ping Felix?&rdquo; A few, it was helpful to write a more thoughtful plan in Things (and drop the Obsidian URL in to link back to the more complete notes).</p>
<p>There is some friction in that workflow. It does require a &ldquo;clear the decks&rdquo; item on my daily calendar at the end of the day so I can make sure to go back and consolidate. I feel a lot more composed and certain of the quality of the things I&rsquo;m actually putting into my todo system, though, when I have those liminal tasks to go back to, reconsider, and rewrite after revisiting their context.</p>
<p>This is not, I guess I should add, something unique to Obsidian. You could do this in any of the org-mode using tools, or any plaintext system where there&rsquo;s an easy way to create TODOs and find them later. Obsidian&rsquo;s dataviews and Tasks plugin makes it easy. org-mode similarly can do it with agenda views, Denote dynamic blocks, etc. The value is in slowing down, stopping the high-speed accumulation of <em>stuff</em> that&rsquo;s stripped of context and crammed into a digital shoebox, and providing pointers back to useful context for when the time comes to turn a quickly jotted todo into a meaningful action.</p>
<p>You don&rsquo;t even, I suppose, have to spread it out over multiple apps. But I do find that the act of putting Obsidian and Things side-by side and having to transpose prose to lists is a useful exercise. It&rsquo;s a bit of deliberation and rethinking that&rsquo;s clarifying.</p>
<h2 id="comments">Comments</h2>
<p>&hellip; I&rsquo;d love to add &rsquo;em, and I was looking at some recipes for doing it using Mastodon, but half the examples led to 404s, one of them swore to god it was working then said it wasn&rsquo;t and then said it was, and was also leading to 404s. Not enough time in the day. The ones that did work had a very awkward, high-friction energy to them.</p>
<p>Given that I push posts out over one channel, and that almost all my inbound traffic is coming in from Mastodon people, I&rsquo;d be happy for just the part where you can visit an announcement post. But that part seems to be harder than it needs to be given the federation stuff.</p>
<p>Not enough time in the day to worry about this stuff. Definitely do not want to pay anyone. Definitely not interested in sticking Disqus in there. Think I&rsquo;ll table it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-06-28</title>
      <link>https://mike.puddingtime.org/posts/2023-06-28-daily-notes/</link>
      <pubDate>Wed, 28 Jun 2023 07:55:41 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-28-daily-notes/</guid>
      <description>Ugh, Apple News. Ugly, functional shoes. Selling the Himalayan. Band of Brothers.</description>
      <content:encoded><![CDATA[<h2 id="apple-news">Apple News</h2>
<p>Apple News does this thing where you can block a news source, but any time that news source turns up on the Today page the space the story would have taken up is replaced by a notification that you blocked the source. It was annoying when I was just blocking CNN and other TV news outlets, but it got more annoying when I started blocking subscription-based channels I don&rsquo;t want to subscribe to. My mind goes to what sorts of compromises and deals are made to keep, e.g. the <em>Washington Post</em> on the platform, with its mix of freebie loss leaders and subscription content.</p>
<p>Evidently:</p>
<blockquote>
<p>&ldquo;Blocking is not supported in Top Stories or other groups curated by the Apple News editors, who vet each story in those groups for quality and accuracy.&rdquo;</p>
</blockquote>
<p>I think where my acceptance of Apple&rsquo;s whole &ldquo;let go and let us&rdquo; is concerned, I&rsquo;ve found my demarcation line.</p>
<p>RSS is the way.</p>
<p>On a wider note: It feels like so many things that are bad are because we&rsquo;re struggling to stay on top of all the things in the digital era. We&rsquo;re delegating aggregation, curation, etc. to platforms that are worse decision makers than us because their bad decisions cost less and are more convenient than our good decisions. The tradeoff we make is that we get the ease in exchange for a quantum of financialized badness we&rsquo;re meant to either ignore or endure.</p>
<p>Two decades ago, my impulses were super democratic, but I wanted to share my technical expertise with people that had less of it so they could participate in the Web as full citizens. It&rsquo;s weird to me that I felt a little impatient with people about how slowly they were adapting to it all in, like, <em>2003</em>. The Web wasn&rsquo;t even old enough for middle school at that point.</p>
<p>When the big platforms started to roll in, I&rsquo;d mellowed a lot and my thought was &ldquo;this seems to be how people are going to participate.&rdquo; It was super weird to me that friends were ceding basic connectivity to Facebook, and using work addresses for personal mail when forced to send an email, but I&rsquo;d also lived through a cycle of hosting other peoples&rsquo; stuff, helping people who decided to self-host unfuck their little Red Hat servers, etc. and I didn&rsquo;t like the responsibility. So whatevs.</p>
<p>Now? I don&rsquo;t know what to say. I&rsquo;m tired of the big platforms, I don&rsquo;t care for the tradeoffs you have to endure for zero-interest-funded services, and I&rsquo;m pretty happy with the little base of operations I have set up. I sympathize with people who don&rsquo;t have the cycles to commit to things like figuring out RSS readers or mail hosting, or making an identity in the Fediverse, or building a blog, and who have to live with more acute tradeoffs. But I also don&rsquo;t care to have much more emotion about it than I would about a friend whose mac-n-cheese recipe doesn&rsquo;t involve a little extra effort in the form of a tasty mustard roux. Like, enjoy your mac-n-cheese, friend!</p>
<p>I think the thing that might have finally beaten it all out of me was the Muskification of Twitter and the Mastodon migration wave I came in on. People kept trying to turn the whole thing into this epic, moral, world-historical twilight struggle. That&rsquo;s perfectly in line with the very neoliberal, very postmodern, very consumption-centric view of the world that would have us believe that no, actually, posting <em>is</em> praxis.</p>
<p>End on a positive note? Sure. My friend and former coworker Gene has <a href="https://podcastindex.social/@volunteertechnologist">a cool podcast about volunteering technical skill</a>. <em>That&rsquo;s</em> praxis. He reminds me that now that I&rsquo;ve got some basics covered again, it&rsquo;s time to go out and do something to help somewhere. Posting isn&rsquo;t that.</p>
<h2 id="ugly-but-they-work">Ugly but they work</h2>
<p>A few years back when I was in the market for new hiking boots I ended up with Hoka Anacapas. They were still a relative novelty, and they stood out for their &ldquo;neon pontoon boat&rdquo; aesthetic. People were concerned about preserving trail feel with such a built-up, cushiony boot, but they worked pretty well for me and I&rsquo;m glad I have them.</p>
<p>What wasn&rsquo;t working so well were the lighter day shoes I was wearing as Al and I ramped up how much walking we did during the week. They were wearing out fast, blowing out in three or four months, and my back was noticing, so I gave Hoka Speedgoats a try. They&rsquo;re classified as &ldquo;trail runners,&rdquo; but I found they worked really well for getting around on long walks in the city. They weren&rsquo;t at all to my taste in terms of appearance, but I also didn&rsquo;t like the whole whole &ldquo;brown suede and mesh&rdquo; aesthetic, either.  I think, in terms of Hoka&rsquo;s lineup, that they&rsquo;re considered a more neutral build, so they look more &ldquo;normal&rdquo; compared to the more built up ones.</p>
<p>I got used to how they looked pretty quickly because my back and hips did a lot better with them, and because I could get six months of heavy use out of them instead of three or four. And even when they wore down to the point they weren&rsquo;t great for long urban hikes they had a second life as longboard shoes. My one complaint was that the toe box was a little narrow and took a few weeks to stretch out.</p>
<p>When my last pair came due for a reup, I looked around at Hoka&rsquo;s site and noticed the colors I&rsquo;d gotten used to were gone and the ones that
were available were somehow even more bright and un-me. So I went to the local outdoor store and shopped around and got some Merrell&rsquo;s, reasoning that the Vibram sole would provide some of the stiffness and shock absorption I was probably getting from the Speedgoats.</p>
<p>It&rsquo;s not lost on me that a minor back thing I would have walked off in a day turned into a multi-week ordeal at exactly the same time I started wearing those around. So &hellip; off they go. I just got my new pair of Speedgoats in the mail today: I went with a wide size, so they feel great right away, the color is definitely not my favorite but it&rsquo;s not that much worse now that I see them on my feet. Since I know how much life I&rsquo;ll get out of a pair, I just got normal ones instead of the Goretex version: These&rsquo;ll be dead about the time the rainy season comes back.</p>
<p>Getting a good shoe is a joy. One of the bad things about getting older and caring more about these things is how you come to see the bigger product cycle. I have no idea how long Hoka Speedgoats will work well for me. It&rsquo;s a matter of faith that they&rsquo;ll do something to revise the line that&rsquo;ll make them not work. They all do it, to the point that when I found an outdoor hat that worked for me I just bought three more and put them on a shelf in the closet. I&rsquo;m grateful every time I see the newer, less breathable, worse version on the rack at REI. If I play my cards right, I may never buy that particular kind of hat again.</p>
<h2 id="time-to-sell-the-himalayan">Time to sell the Himalayan</h2>
<p>I&rsquo;ve written about my Royal Enfield Himalayan. Just noting here that it is time to be rid of it. If you know anybody interested in a bike:</p>
<ul>
<li>Low mileage</li>
<li>Cargo racks and metal panniers</li>
<li>Improved rear view mirrors</li>
<li>After market adjustable brake and clutch levers</li>
<li>Booster plug</li>
</ul>
<p>It runs pretty smoothly, and the booster plug does a lot to help with rough idling it arrived with from the factory. It mostly comes down to taste. I&rsquo;ve got another trail bike &mdash; my Yamaha TW200 &mdash; and I&rsquo;m looking for something better for two-up date nights.</p>
<p>$3,500 firm.</p>
<h2 id="band-of-brothers">Band of Brothers</h2>
<p>When I was recently recounting Great Prestige TV, I left out <em>Band of Brothers</em>. I don&rsquo;t know what put it back on my radar, but I rewatched it over several days last week. There are a few things about I&rsquo;ve got a problem with, and a few more things I suspect I would have a problem with if I dug in more, but it&rsquo;s pretty effective television.</p>
<p>If you went to jump school then ended up at Ft. Liberty (formerly Ft. Bragg), the show can&rsquo;t help but have an effect: The streets are named for the battles and places. You were surrounded by the lore. You&rsquo;re watching a show about the people you were told you had to measure up to. It&rsquo;s not SpecOps or high speed stuff &mdash; it&rsquo;s just rigorously trained, determined people dropped into battle, expected to take hideous losses.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/bwHRZipfxQ0?start=42" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>Watching the show, feeling a sort of resonance during the jump sequence as they run through the pre-jump ritual, thinking about what they did &hellip; it put me back in touch with the feeling I had the first time I saw it, which was a sense of kinship, but also an awareness that I had no frame of reference for what they did or endured. I went to jump school because basic training was a disappointment and signal school was boring. People told me it would be hard, and a training sergeant who bought me a lemonade one night when I was on fireguard duty told me he thought it would help me make sense of the decision I&rsquo;d made to enlist at all.</p>
<p>&ldquo;You think you&rsquo;re outsmarting someone, but you&rsquo;re here for a reason.&rdquo;</p>
<p>I was proud to earn my wings, but I still didn&rsquo;t think jump school was as transformative as I&rsquo;d hoped. It took years and a lot of distance to realize that the pride was still there.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-06-27</title>
      <link>https://mike.puddingtime.org/posts/2023-06-27-daily-notes/</link>
      <pubDate>Tue, 27 Jun 2023 07:16:03 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-27-daily-notes/</guid>
      <description>Making Denote more legible in Obsidian. Ethical Uber reviews. The strangeness of being new somewhere.</description>
      <content:encoded><![CDATA[<h2 id="denote-conventions-and-obsidian-legibility">Denote conventions and Obsidian legibility</h2>
<p>I added the <a href="https://github.com/FlorianWoelki/obsidian-icon-folder">Icon Folder</a> plugin to Obsidian and it works really well with Denote-formatted notes thanks to the ability to use filename-based rules for icon assignments.</p>
<p>Denote&rsquo;s <code>_tag1_tag2_tag3</code> file naming convention makes it easy to make rules based on tags for assigning an icon and optional color to notes. That makes a list of notes a lot more scannable, and has an interesting additional effect of telling a little story about your day: 1:1s get an icon, regular meetings get an icon, RFCs get an icon, conceptual notes, etc. etc. so just scanning down the list of notes in the file explorer reflects a kind of rhythm. That makes it easier to keep a sort of noisy naming convention in place &mdash; things are just more scannable, and that reduces the temptation to do things that make the file names more human-readable at the expense of long-term portability.</p>
<p>I was feeling a little wobbly about keeping strict Denote compliance, but I&rsquo;ve got a <a href="https://github.com/SilentVoid13/Templater">Templater</a> template set up to rename files based on their YAML frontmatter, and I&rsquo;ve got that wired up to a <a href="https://github.com/platers/obsidian-linter">Linter</a> on-save action, so when I change the tags or name of an Obsidian note and save it, the Templater action updates the tags in the filename:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="o">&lt;%*</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">file</span> <span class="o">=</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">find_tfile</span><span class="p">(</span><span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">title</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span><span class="nx">update</span><span class="p">}</span> <span class="o">=</span> <span class="nx">app</span><span class="p">.</span><span class="nx">plugins</span><span class="p">.</span><span class="nx">plugins</span><span class="p">[</span><span class="s2">&#34;metaedit&#34;</span><span class="p">].</span><span class="nx">api</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kd">let</span> <span class="nx">identifier</span> <span class="o">=</span> <span class="s2">&#34;&#34;&#34; + tp.file.creation_date(&#34;</span><span class="nx">YYYYMMDDTHHmmss</span><span class="s2">&#34;) + &#34;&#34;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kd">let</span> <span class="nx">date</span> <span class="o">=</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">creation_date</span><span class="p">(</span><span class="s2">&#34;YYYY-MM-DDTHH:mm:ssZ&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kd">let</span> <span class="nx">title</span> <span class="o">=</span> <span class="s2">&#34;&#34;&#34; + tp.frontmatter[&#34;</span><span class="nx">title</span><span class="s2">&#34;] + &#34;&#34;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">await</span> <span class="nx">update</span><span class="p">(</span><span class="s2">&#34;date&#34;</span><span class="p">,</span> <span class="nx">date</span><span class="p">,</span> <span class="nx">file</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">await</span> <span class="nx">update</span><span class="p">(</span><span class="s2">&#34;identifier&#34;</span><span class="p">,</span> <span class="nx">identifier</span><span class="p">,</span> <span class="nx">file</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">await</span> <span class="nx">update</span><span class="p">(</span><span class="s2">&#34;title&#34;</span><span class="p">,</span> <span class="nx">title</span><span class="p">,</span> <span class="nx">file</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="o">-%&gt;</span></span></span></code></pre></div>
<p>The net effect is that my filenames stay Denote-compliant and reflect current note metadata in the frontmatter as I update them, and that supports the consistency of the icon assignment rules.</p>
<p>I&rsquo;m trying to keep an eye on my plugin and configuration budget for this stuff.  To maintain this level of automation I&rsquo;ve got:</p>
<ol>
<li>Quickadd (kicks off the templated note creation process)</li>
<li>Templater (lets me put logic in the note creation)</li>
<li>MetaEdit (around solely for its API: supports frontmatter hygiene)</li>
<li>Linter (cleans up notes &ndash; especially their frontmatter)</li>
<li>Icon Folder (assigns icons to notes based on rules around their filenames)</li>
</ol>
<p>When I think about what would happen to the workflow if I pulled any one of them out, three are essential; the bracketing ends of the workflow (note creation and icon labeling) are nice-to-haves that don&rsquo;t impact the future-proof-ness of the collection.</p>
<p>The one remaining thing about Obsidian that concerns me generally is the plugin ecosystem. I&rsquo;ve learned to click through to plugin repos, read the README for &ldquo;can&rsquo;t maintain this anymore&rdquo; messages, check the last commit date, and check the amount/age of issues. I&rsquo;ve seen a few where developers specifically mention Obsidian API changes affecting their ability to maintain their work.</p>
<p>I guess I feel about that the same way I feel about my web publishing toolchain: It was painful to go from WordPress to Jekyll. It was trivial to go from Jekyll to Hugo. It was painful to move my last Obsidian setup to org-mode, and from plain old org mode to Denote. It was trivial, given a simple Python script, to move from org-based Denote to Markdown-based Denote. And it has been trivial to configure Obsidian to maintain that corpus.  Tools are ephemeral, conventions are &hellip; not forever, but more durable. The simpler, the more robust and the more portable. Sure there&rsquo;s a lot of squabbling about how expressive Markdown should be, but the YAML-in-Markdown convention turns up in a bunch of tools. Key names change &mdash; Hugo developers don&rsquo;t coordinate on frontmatter keys that serve the same function &mdash; but you&rsquo;ve got a fighting chance to automate through change when you start from YAML (or TOML).</p>
<p>A lot of thought for note taking. I think it is a work-related habit I don&rsquo;t mind having. I&rsquo;ve noticed a shift in how I think about work that involves shrugging off a little of a sort of open-endedness that was very, very normal when I first joined Puppet, then became increasingly &hellip; quaint? &hellip; as the business changed around me.</p>
<p>The acquisition was a little disappointing because I&rsquo;d found myself getting better at weighing what needed reinvention vs. what simply needed to be decided and done. The job hunt and some good interview processes sharpened that further. Sort of the way muscle memory seems to consolidate after you take a break from something after intense learning. If Puppet was ten years of repeatedly beating my head against a boss round, then getting tossed out and having to make a case for myself to strangers was the surprising ease with which that boss goes down if you just set the controller down, get some sleep, and come at it the next morning.</p>
<h2 id="five-stars-or-bust">&ldquo;Five Stars or Bust&rdquo;</h2>
<p>Getting rid of Amazon Prime and hence disengaging from Amazon in general was surprisingly easy once I took the time to think it through. Dropping delivery services has been a harder habit to break. We&rsquo;ve made a lot of progress but sometimes we lapse. <a href="https://oversharing.substack.com/p/five-stars-or-bust">This post on Uber ratings</a> reminds me that it&rsquo;s about more than saving money. It&rsquo;s about disengaging from a sector of the economy that thrives on precarity, and whose management wants to take its not-employees-but-actually-employees back to 19th century labor practices so I can have treats delivered.</p>
<h2 id="strangeness-of-being-new-somewhere">Strangeness of being new somewhere</h2>
<p>When asked if I&rsquo;m a &ldquo;half empty or half full&rdquo; person, I get confused. That particular saw has never made a ton of sense to me for reasons I&rsquo;m not going to get into, but sometimes do in a way that probably causes people to wonder if there are any other parts of the social contract I&rsquo;m unable to understand.</p>
<p>I was nearly tossed out of the army for refusing to sound off to gruesome baby-killing cadences &mdash; cadences banned by name at Ft. Liberty (Ft. Bragg at the time) my last week in the service. But I&rsquo;ve got a taste for hyperbolic and violent metaphor that people have told me <em>becomes</em> charming <em>over time</em>.</p>
<p>I go into most interactions with as curious, trusting, and open-ended a mindset as I can manage; but when I&rsquo;m sending out a minion I&rsquo;ll brief them on misaligned incentives and wooden nickels.</p>
<p>Like everyone, I&rsquo;m a bundle of contradictions, inner monologue/outer affect mismatches, and blindspots.</p>
<p>With a few exceptions that I no longer allow to keep me up at night, I think most people get used to all that, same way I get used to all their weirdnesses.</p>
<p>But it is sort of strange to start fresh somewhere, knowing I&rsquo;m a way&rsquo;s away from &ldquo;oh, that&rsquo;s just Mike.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-06-26</title>
      <link>https://mike.puddingtime.org/posts/2023-06-26-daily-notes/</link>
      <pubDate>Mon, 26 Jun 2023 10:34:50 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-26-daily-notes/</guid>
      <description>We are all beta testers now. Obsidian sync and its discontents. Living in the remote future. Travel. The NYT gums reddit. Yeah, I guess the NYT is irritating me badly today.</description>
      <content:encoded><![CDATA[<h2 id="were-all-beta-testers-now">We&rsquo;re all beta testers now</h2>
<p>I kind of like the plaintive quality of this <a href="https://arstechnica.com/google/2023/06/rip-to-my-pixel-fold-dead-after-four-days/">Pixel Fold post mortem from Ars Technica</a>
&ldquo;I didn&rsquo;t even do anything, and now it&rsquo;s broken!&rdquo; followed up by a very focused and Ars-ian dive into why it is broken. Sounds horrible. I don&rsquo;t care which brands are involved and do not care about your choice of phone operating system. (OTOH, <a href="https://www.nytimes.com/2023/06/26/technology/personaltech/google-pixel-fold-review.html">the NYT likes it</a>.)</p>
<p>There&rsquo;s lots of bad hardware that isn&rsquo;t very well designed in the world, so take this as appropriately pre-qualified, but whenever a software company does a hardware thing and it&rsquo;s bad, my head goes to &ldquo;of course, because they&rsquo;re used to iterating on software abstractions.&rdquo; So why not just make a physical thing and see what happens so you can get it right with the next rev? Sure, sometimes <a href="https://www.digitaltrends.com/mobile/amazon-halo-killed-dont-trust-tech-subscriptions/">you just kill a product line dead</a> within five months of pushing the latest version of it out into the world, but that&rsquo;s how they&rsquo;re used to learning, I guess, so &hellip; the tree of commerce has to occasionally be watered with plastic and batteries.</p>
<p>Also, darting back to the NYT&rsquo;s coverage:</p>
<blockquote>
<p>&ldquo;Still, the progress with foldable technology is good news. A few years ago, handsets from companies like Apple and Samsung seemed to have peaked. Their flagship phones were already incredibly zippy, their screens were big and bright, and their cameras took stunning photos. The smartphone industry, as a whole, became a pile of nearly indistinguishable black rectangles.</p>
</blockquote>
<blockquote>
<p>&ldquo;What was left to do?&rdquo;</p>
</blockquote>
<p>I hate that people get paid to write things like that.</p>
<p>Also:</p>
<blockquote>
<p>&ldquo;<a href="https://daringfireball.net/linked/2023/06/26/pixel-fold-review">I have not an iota of envy from my perch on the iPhone side of the fence.</a>&rdquo;</p>
</blockquote>
<p><em>Quelle surprise.</em></p>
<h2 id="obsidian-sync-and-its-discontents">Obsidian sync and its discontents</h2>
<p>There&rsquo;s definitely a teething period when you first set up an Obsidian vault. I am trying to keep a minimum loadout of plugins and custom config, but it&rsquo;s still just sort of odd and mysterious what syncs and what doesn&rsquo;t. I&rsquo;m not sure if I&rsquo;d be better off trying Syncthing for a period, or just getting to a relatively stable configuration using Obsidian sync so that all I have to worry about is grabbing new notes and their edits.</p>
<p>I&rsquo;d welcome anyone&rsquo;s insight into how to smooth out plugin and plugin settings syncing, because that&rsquo;s where it&rsquo;s the most annoying and least predictable. In the past, when it has gotten wedged badly enough, I&rsquo;ve solved it by making sure I&rsquo;ve got a &ldquo;reference install&rdquo; on one of the &ldquo;real computers,&rdquo; then I remove and reinstall the app from the iOS devices (where the app settings are more reliably nuked at uninstall).</p>
<h2 id="living-in-the-future">Living in the future</h2>
<p>I feel very lucky to have landed at a company that cares about balance and has even worked the idea into its values.</p>
<p>During lockdown and the all-remote-all-the-time period afterward Al and I settled into a routine of morning walks. In their ideal form we take the ~1.5 mile walk out to Carnelian Coffee on Foster Road. On mornings where we&rsquo;re running late, feeling pressed, or just don&rsquo;t want to go there we take a walk down the Springwater Trail and out to the Foster Floodplain Natural Area. It&rsquo;s a great way to start the day. Most of the time we just talk about <em>stuff</em>, some times one of us has a work thing we&rsquo;re leaning into and want to process. By the time we get home, I feel like I am leaning into the day, not dragging into it.</p>
<p>I&rsquo;m not rigid about the routine. I&rsquo;ve got folks in the UK in my group, so I build some time in to touch base with them during the window of mutual availability in the West Coast morning, but I try to protect it. So far, no eyebrows raised that my work calendar is blocked to protect those walks.</p>
<p>This morning we got off to a late start, so there was a chance we&rsquo;d be rolling in a few minutes behind the start of one of the two standups I drop in on at the beginning of the week. The chain of stuff I did to deal with that &hellip; wow there&rsquo;s a lot we can take for granted:</p>
<ul>
<li>Grab the phone. I haven&rsquo;t used Zoom on it at this company before, so sign in.</li>
<li>SSO service &hellip;</li>
<li>Password manager &hellip;</li>
<li>Biometric auth &hellip;</li>
<li>OTP</li>
<li>Airpods with transparency &hellip;</li>
<li>A 5G connection and pretty good audio &hellip;</li>
</ul>
<p>The WfH counter-revolution is in full swing right now, so most of what I read about remote work is either the WSJ stroking its chin or angry screeds about how in-person work is just, like <em>bad managers being incompetent at our expense, man</em>.</p>
<p>I just know I&rsquo;m grateful for it, I&rsquo;m glad it&rsquo;s a thing my company supports, and it&rsquo;s something I want for my teams as much as I want it for myself. And I know that when I think about all the tech coming together to allow it to work, it&rsquo;s pretty amazing. I was a fully remote worker for the first 12 years of my really for real professional career, from 2000 to 2012, and it was all telephones, conference dial-ins, and AOL Instant Messenger to hold it all together.</p>
<p>I do not, however, agree that all the concerns about the office/remote mix come down to bad managers being control freaks. Sorry. I&rsquo;ve got more time as a remote worker than most I&rsquo;m in any regular contact with, and I remember how acutely it felt like finally starting to go to an office in 2012 gave me superpowers I&rsquo;d never imagined. Not as a manager or supervisor, but as a human who needed to work with other humans to get things done. I also remember what it felt like when people who didn&rsquo;t have a fifth of my experience working full-time remote were suddenly going remote all around me. Communications frayed, the counter-productive parts of an overdeveloped 1:1 culture deepened, and the overall sense of organizational latency went up.</p>
<p>There are definitely things you can do to offset all that. But I noticed that a lot of people were convinced that just because they were working remote and their company was still operating, they must be good at working remote. I was once on a working group formed around evolving into a hybrid-remote footing for the long haul, and it wasn&rsquo;t lost on me that our first meeting involved someone from marketing talking about how they wanted to turn our non-existent remote-hybrid playbook into marketing collateral right away, &ldquo;to show people how to do it&rdquo; when we&rsquo;d just barely formed a group to discuss all the ways in which we actually had no idea.</p>
<p>I guess what I&rsquo;m saying is that we&rsquo;re very well positioned technologically to make the transition, but that it&rsquo;s not really a technological thing, and that most of us have not actually made the transition.  I have known very effective remote cultures who had nothing more sophisticated than a conference line and AOL Instant Messenger. I&rsquo;ve known companies with all the best collaboration tools at their disposal that remain operational basket cases.</p>
<p>I don&rsquo;t know how we reconcile the predilection of people with a lot of power and authority to simply seek what makes them most comfortable &mdash; let&rsquo;s call them the &ldquo;back to the office, proles&rdquo; faction &mdash; with the &ldquo;efficient completion of my laundry at any time of day is an OKR&rdquo; faction. They&rsquo;re the two extremes in what passes for a discourse on the matter, and it comes at the expense of the &ldquo;I just want to get something done this week&rdquo; faction. That is, most of us.</p>
<h2 id="travel">Travel</h2>
<p>I am pretty sure Al and I are going to Peru this fall. We&rsquo;ve got some passport stuff to deal with, but signs are positive. I promised her a trip <em>somewhere</em> if I got my job stuff sorted out ahead of The Pucker Demarcation Line, and I did, so we&rsquo;re going provided paperwork and the tourist season in Cusco align.</p>
<p>I&rsquo;m super excited. Al&rsquo;s super excited. It&rsquo;s been forever since we traveled.</p>
<p>Some of our excitement is probably owing to Ben&rsquo;s own trip to Germany and Switzerland right now. He&rsquo;s taking 10 days to bike across Germany with two of his friends. It sort of feels like a capstone for his first year away from home.</p>
<p>The trip took me by surprise. It came up a few months ago, expressed in a way that seems perfectly clear and normal to a 19-year-old, and terrifyingly vague to the parent of a 19-year-old. But I just did what I have learned to do over the past year, which is say nothing for a brief blackout period, get my thoughts in order, then begin to ask strategic questions in descending priority order.  It seems about right that the last trip-related thing we did was teach him how to load 35mm film into a point-n-shoot camera.  &ldquo;Perfect&rdquo; would have been getting a roll of film through it and developing the pictures <em>before</em> he left, so I had to settle on spending the last of my self-imposed advice budget:</p>
<p>&ldquo;Okay. So &hellip; remember to advance the film before each shot. If it seems stuck and you&rsquo;ve taken about 24 photos, don&rsquo;t try to force it.&rdquo;</p>
<p>&ldquo;Okay.&rdquo;</p>
<p>&ldquo;Can I offer one piece of advice?&rdquo;</p>
<p>&ldquo;Sure.&rdquo;</p>
<p>&ldquo;If you see something that&rsquo;s just &hellip; like &hellip; you&rsquo;re totally moved and want to remember it forever?&rdquo;</p>
<p>&ldquo;Uh huh?&rdquo;</p>
<p>&ldquo;Just use your phone.&rdquo;</p>
<p>&ldquo;<em>*snort</em>* Got it.&rdquo;</p>
<p>Professional fighters say there&rsquo;s such a thing as being overprepared, so I think we cut it just about right.</p>
<p>Zooming out a little, I think this is my happiest moment as a parent so far.  He took us by surprise wanting to move down to Eugene at all, and it&rsquo;s been a year of predictable &ldquo;figure it out&rdquo; stuff, complicated by my layoff just as he was getting ready to move out. It was hard to be patient when I was doing weekly math on our controlled burn, and possibly even nervewracking during the eerily quiet job-seeking months of January and February.</p>
<p>At the same time, whenever we needed to have a conversation about accountability, he was always there for it. At some point I realized &ldquo;oh, maybe I&rsquo;m the one holding on to the baton out of a desire to not spook him about my work stuff.&rdquo; So with a little prefacing that I didn&rsquo;t want him to feel burdened, I explained why how we spend money mattered in a way that may not have been apparent before.</p>
<p>So this trip &hellip; He told us he was doing it, I asked a few strategic questions, and he made it clear he hadn&rsquo;t taken our support for granted and meant to plan and pay for it himself. I committed to a certain amount of fallback support, which he accepted in principle. A few times I&rsquo;d sense that he felt a little restless about the questions, so I stopped asking, and that seemed to create the space to let him come with his own questions. In my parental experience, &ldquo;I hadn&rsquo;t thought of it that way,&rdquo; or &ldquo;oh, okay&rdquo; are the silver medals of interactions. Being asked for your advice or experience is the gold.</p>
<p>It feels good to feel so clear about what I make of it all.</p>
<p>It is super weird to have my kid wandering around Europe with a couple of other kids. One of them has been studying there this year, so there&rsquo;s a little bit of street smarts in the group, but still &hellip; weird. I can tell from the texts and videos he sends that he&rsquo;s happy, so I think he is doing the right thing and living his life the way he should be. That&rsquo;s what you raise them to do.</p>
<h2 id="growing-up">&ldquo;Growing up&rdquo;</h2>
<p><a href="https://www.nytimes.com/2023/06/23/technology/reddit-moderators-users-api-protest.html">The NYT&rsquo;s attempt to summarize the whole reddit thing</a> manages to cover the basic facts, embarrass the reporter, and frame the whole kerfuffle in such a way that &hellip; oh screw it.</p>
<p>We often make the mistake of trying to frame things like the NYT&rsquo;s myopically CEO-friendly coverage as a &ldquo;balance&rdquo; issue. That&rsquo;s like saying a fish has an unbalanced perspective about air because you&rsquo;re struggling to explain water to it. It&rsquo;s not about &ldquo;balance&rdquo; or &ldquo;perspective,&rdquo; it&rsquo;s about values. People with <em>values</em> of a certain kind &mdash; the kind you can find at a place like the NYT &mdash; naturally see this entire thing as a question of a business &ldquo;maturing.&rdquo;</p>
<p>In this case, I&rsquo;m kind of in favor of NYT&rsquo;s bland, pro-business reporting, because we <em>should</em> be despairing over the ways in which the web was just sort of handed over to these platforms. It should irritate us. The manifest irreconcilability of needs found in this conflict &mdash; between those of people building and nurturing online communities and those collecting the rent &mdash; is clear. I&rsquo;m kind of an accelerationist in this regard, similar to how I was about Twitter before I decided to quit caring about it. I don&rsquo;t have any program or platform to go with my accelerationism. I just know that reddit, Facebook, Twitter, and the rest are run by people who don&rsquo;t care about what I care about when it comes to technology, connection, people, etc. So the sooner they play out this &ldquo;end of free money, gotta grow up and squeeeeeze&rdquo; string, the better.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-06-25</title>
      <link>https://mike.puddingtime.org/posts/2023-06-25-daily-notes/</link>
      <pubDate>Sun, 25 Jun 2023 16:44:12 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-25-daily-notes/</guid>
      <description>How to mix todos and prose. An Obsidian Today page. Woeful MetaTalk. Getting ready to say goodbye to Apollo. Markdown blogging. BBEdit and LSP. Goodbye reMarkable.</description>
      <content:encoded><![CDATA[<h2 id="mingling-notes-and-todos">Mingling notes and todos</h2>
<p>Prot on the ways in which Denote (or any &ldquo;lots of little notes&rdquo; system) will eventually murder org-mode agenda generation times:</p>
<blockquote>
<p>&ldquo;If you want my opinion though, be more forceful with the separation of concerns. Decouple your knowledge base from your ephemeral to-do list: Denote (and others) can be used for the former, while you let standard Org work splendidly for the latter—that is what I do, anyway.
&hellip;
&ldquo;Do not mix your knowledge base with your to-do items.&rdquo;</p>
</blockquote>
<p>I appreciate that. I am on the record liking the ability to sprinkle todos into prose, or the way todos can be skeletal prose. But one thing I&rsquo;ve come to appreciate about <em>me</em> is that when I live in the same place for everything, I start feeling sort of tool-sick. I think that part of me that has a hard time resisting the urge to optimize reacts to Total environments by trying to totalize further.</p>
<p>With my Obsidian-by-way-of-Denote-conventions setup, I&rsquo;ve been thinking about that a little.</p>
<p>I once went through an Obsidian jag where I wanted it to handle all my todos, and it didn&rsquo;t take long to get to a state of config/plugin bankruptcy. I decided that it was a good idea to have todos be a thing handled by a dedicated tool, and notes to be handled by a good note taker.</p>
<p>During my most recent org kick, I let things intermingle more, and I really held on to org-mode as a backend for Denote because I had that total use case in the back of my head.</p>
<p>I do think there&rsquo;s some value in having todos as semantically distinct nuggets inside atomic notes. For instance, when I&rsquo;m on a call and taking notes, I don&rsquo;t want to context-switch to my todo app to make a todo, and that&rsquo;s not a good idea anyhow: You lose the context, or just make work for yourself going back to find the original note to get the context back.</p>
<p>One nice example of blending todos and some other text object comes from <a href="https://github.com/IvanMalison/org-projectile">org-projectile</a>, which lets you create TODOs in a code base that go into a central notes file with a link to the text hunk you can follow.</p>
<p>I borrowed that idea for Obsidian by using the Tasks plugin:</p>
<ul>
<li>Set Tasks to add creation dates to any todos you create</li>
<li>Use normal todos for most inline notes: Just drop one in when an action presents itself during a conversation, or comes up while writing.</li>
<li>Make a metanote page that lists notes created today, and also lists todos created today:</li>
</ul>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">tasks 
</span></span><span class="line"><span class="cl">not done 
</span></span><span class="line"><span class="cl">created today</span></span></code></pre></div>
<p>That makes a simple page that links back to the todo for when it&rsquo;s the right time of day to go through the day&rsquo;s notes and turn possible actions into actual tasks.</p>
<p>The Tasks plugin allows for a bunch of different kinds of tasks, so I&rsquo;ve repurposed the <code>- [*]</code> type as <code>oppty</code>. Starting out in a new job, a lot of stuff goes by that I think of as &ldquo;maybe nice for the backlog&rdquo; or &ldquo;should do some discovery on that,&rdquo; but I don&rsquo;t want to overwhelm myself by dropping it into my Inbox where it&rsquo;ll both sit for a while and have no context. So I made another metapage for opportunities:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">tasks
</span></span><span class="line"><span class="cl">status.name includes star
</span></span><span class="line"><span class="cl">not done </span></span></code></pre></div>
<p>They just sit there, available for periodic review, linked to their originating note so I can get the context back when I need it. If I decide it&rsquo;s not a thing after all, delete it or check it off. If I decide it&rsquo;s a thing, turn it into a project and check it off.  It&rsquo;s a little different from the org-projectile approach, to the extent it leaves a todo item in the source file instead of just logging it in an outside file and linking back to the right hunk. I think that&rsquo;s fine.</p>
<h2 id="obsidian-today-page">Obsidian Today Page</h2>
<p>I stumbled my way into a Today page figuring all that out. It&rsquo;s just a collection of Dataview and Task code blocks:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># Tasks from Today
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">```tasks 
</span></span><span class="line"><span class="cl">not done 
</span></span><span class="line"><span class="cl">created today
</span></span><span class="line"><span class="cl">\```
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># Notes from today
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">```dataview
</span></span><span class="line"><span class="cl">LIST FROM -&#34;templates&#34; WHERE file.path != this.file.path AND file.cday = date(today) 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">SORT file.mtime desc
</span></span><span class="line"><span class="cl">WHERE file.name != this.file.name
</span></span><span class="line"><span class="cl">\```
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># Notes from yesterday
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">```dataview
</span></span><span class="line"><span class="cl">table without id
</span></span><span class="line"><span class="cl">link(file.link, default(file.aliases[0], file.name)) AS &#34;File&#34;,
</span></span><span class="line"><span class="cl">file.ctime AS &#34;Date&#34;
</span></span><span class="line"><span class="cl">FROM -&#34;metanotes&#34; AND -&#34;templates&#34;
</span></span><span class="line"><span class="cl">WHERE file.path != this.file.path AND file.cday = date(yesterday) AND  !contains(file.path, &#34;templates&#34;)
</span></span><span class="line"><span class="cl">SORT file.mtime desc
</span></span><span class="line"><span class="cl">\```
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># Notes from previous three days
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">```dataview
</span></span><span class="line"><span class="cl">table without id
</span></span><span class="line"><span class="cl">link(file.link, default(file.aliases[0], file.name)) AS &#34;File&#34;,
</span></span><span class="line"><span class="cl">file.ctime AS &#34;Date&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">FROM -&#34;metanotes&#34; AND -&#34;templates&#34;
</span></span><span class="line"><span class="cl">where file.ctime &gt; (date(today) - dur(3 days)) AND file.ctime &lt; (date(today) - dur(1 days))
</span></span><span class="line"><span class="cl">sort file.ctime desc
</span></span><span class="line"><span class="cl">\```</span></span></code></pre></div>
<p>Basically, just &ldquo;Any tasks from notes made today, then &lsquo;all the notes from today,&rsquo; &lsquo;all the notes from yesterday,&rsquo; and &lsquo;all the notes from the prior 3 days,&rsquo;&rdquo; with a few filters to keep out metanotes and templates. It took a little fussing to get things to display in a way that shows my YAML metadata titles instead of the file names (which are Denote-formatted and a little cluttery), but that was an optional bit of prettying I undertook because I was curious.</p>
<h2 id="much-that-is-wrong-with-the-discourse-">Much that is wrong with &ldquo;the discourse&rdquo; &hellip;</h2>
<p>&hellip; can be found in <a href="https://metatalk.metafilter.com/26320/MetaFilter-has-a-real-problem-with-voicing-class-genocidal-attitudes">this MetaTalk thread wherein a user calls people out over their reaction to the submarine thing</a>.</p>
<p>Someone who knew one of the dead showed up:</p>
<blockquote>
<p>&ldquo;I&rsquo;ve met Shahzada several times &ndash; he was a significant backer of my work in carbon-free energy. He also personally paid for 5 million doses of Covid vaccine to be distributed in Pakistan during the pandemic, and set up a charity for helping people in Pakistan deal with the mental health consequences of the pandemic. He was a good person.</p>
</blockquote>
<blockquote>
<p>&ldquo;Reading some of the comments about him in the original thread was a gut punch. I was picturing (before we found out about the probable implosion) this person I know, this good guy, slowly suffocating underwater alongside his son, while Metafilter was making crass jokes about him.&rdquo;</p>
</blockquote>
<p>With each passing year it feels to me like an increasingly valuable piece of work to get better practiced at just not saying anything about an increasingly wide array of situations and topics. In a social media/web forum context, I can&rsquo;t think of anything I&rsquo;d say that would have a lot of leverage for good, and I can think of a lot of ways, like that right up there, that it can provide leverage for a lot of small but painful ills.</p>
<p>It&rsquo;s not that simple, right? It&rsquo;s a <em>good</em> thing that a lot of us have come to accept that people with power, privilege, access, resources, credibility, standing, platforms should <em>use them</em> to address injustice.  It&rsquo;s a <em>good</em> thing that we&rsquo;ve become more aware of the ways in which the urge to be more measured, or to make our words sweeter or easier to take, can cause us to mistake passivity or injustice for humility or modesty; or make it easier to tell other people suffering injustice to come back when they can &ldquo;put the message in a better envelope.&rdquo;</p>
<p>I think the thing that makes it hard to swallow is the way in which privileged, successful, wealthy people have steadily gentrified categories of oppression to rationalize their unwillingness to govern themselves, or to feel able act on the very human desire to participate in the conversation going on around them.</p>
<p>We each have to do our own math. There aren&rsquo;t any rules.</p>
<h2 id="twilight-apollo">Twilight Apollo</h2>
<p>I&rsquo;m very sorry <a href="https://apolloapp.io">Apollo</a> isn&rsquo;t long for this world. It&rsquo;s the best way to do Reddit under any circumstances, and really shines if you care about the distinct conversations under a post. It has helped me come to know individuals in a few communities over the years. I can&rsquo;t imagine reddit without it. So I&rsquo;m browsing the few subs I subscribe to these days with a sense of impending loss. Not too many more days and it will shut down; reddit will be much harder to keep up with, and a much worse experience in general.</p>
<h2 id="markdown-blogging">Markdown blogging</h2>
<p>A while back I wrote <a href="https://gist.github.com/pdxmph/9271cbb22d90f7e73a4b88664e0eaadd">a Ruby script to make it easier to do Hugo blogging</a>. It doesn&rsquo;t do a ton, but it does make it simple to enter title, tags, and category from the command line to make a Markdown file in the right place. It includes a switch for making daily posts with my house style.</p>
<p>I&rsquo;ve been blogging via <code>ox-hugo</code> since mid-April, so the script hasn&rsquo;t seen much use. Today I took another look at it, cleaned up one glitch in the way it does frontmatter, fixed up its daily post naming convention, and used it to make this post.</p>
<p>Gotta say, it just feels less fragile and less &hellip; think-y. There are some nice things about blogging with org-mode, for sure. I really like the document editing features. There are some things about blogging in a monolithic file that get sort of weird now and then. Sometimes it adds steps that feel needless. There are some things that are just clumsy or sort of a pain to remember. Every now and then you accidentally move a space in a previous entry and then you&rsquo;re left wondering why a post from two months ago suddenly regenerated its own Markdown.</p>
<p>Markdown, on the other hand, is good enough for blogging. I don&rsquo;t get any advantage from org-mode&rsquo;s syntax for most of what I&rsquo;m doing here, and Emacs&rsquo; markdown-mode does the same basic trick I like most from org-mode, which is tab-folding headings as I work through a post.</p>
<p>Like I said, when I decide I have another book in me I&rsquo;ll probably write it in org-mode. Until then, I&rsquo;m just going with the VHS of lightweight markup languages.</p>
<h2 id="bbedit-and-lsp">BBEdit and LSP</h2>
<p>I almost went full heretic and tried to see how I&rsquo;d feel about Markdown blogging with BBEdit. I was sort of excited about BBEdit&rsquo;s recent-ish support for <a href="https://en.wikipedia.org/wiki/Language_Server_Protocol">LSP</a>, and wanted to try out <a href="https://github.com/artempyanykh/marksman">Marksman</a>. Well, the two use cases I care most about for LSP &mdash; Ruby and Markdown &mdash; don&rsquo;t work. I managed to get the servers for YAML, JSON, CSS, HTML, and Python all working. Nothing doing for Marksman or <a href="https://solargraph.org">Solargraph</a>, the Ruby LSP server. They both work great under Doom Emacs, which also has great integration with Rubocop to make up for Solargraph&rsquo;s missing beautifying capabilities.</p>
<p>So, fine.</p>
<p>I&rsquo;ve got Emacs in a great place right now. I trimmed a lot of needless stuff from my configuration, it behaves just how I like, and it integrates well with Obsidian if I feel like doing more long-form writing and don&rsquo;t want to use Obsidian to do it. This miiiight be the first time I&rsquo;ve ever gone so completely Emacsimalist, then climbed back down from my worst excesses, but kept on using it for everyday stuff, too.</p>
<p>I even did a quick nostalgia tour of Sublime Text, VSCode, and Nova. Something about each of them irritated me.</p>
<h2 id="goodbye-remarkable">Goodbye, reMarkable</h2>
<p>As threatened, my reMarkable has a new home. Wow did I want to like that thing. I tried. In the end, I think it just came down to not being a handwritten notes kind of person at all. Or rather, if I am hand writing a note, it is just a small thing I am jotting down, or a way to fidget and stay a little engaged. I know what people say about recall and believe that is probably true, but that&rsquo;s just one dimension &mdash; there are also search, storage, portability, and just basic convenience.</p>
<p>If I had great handwriting I might have benefitted from the reMarkable, with its searchable handwritten text. But I don&rsquo;t have great handwriting. So it suffered from the same problem ebook editions of reference works suffer from: Paper notebooks have a certain spatial quality to them, and you can flip through them in lieu of being able to grep through them. My handwriting isn&rsquo;t good enough to be greppable by a machine, and the electronic &ldquo;notebook&rdquo; can&rsquo;t be thumbed through.</p>
<p>I guess, when I think back, that I imagined its more paper-like feel, its slimness, and its single-purpose nature were what would give it an edge over any number of iPad notebook apps. No. Turns out that I am just happier when I&rsquo;m typing notes.</p>
<p>As if to drive the lesson home, I shipped the reMarkable off yesterday and found myself downtown today at my favorite paper store. I briefly eyed a few nice notebooks and pens, thought to myself &ldquo;well, it was probably the <em>digital</em> stuff you didn&rsquo;t warm up to &hellip;&rdquo; then had a second thought and felt a little relieved that the paper coming out of the cognitive slot read in very plain, block lettering, &ldquo;YOU DON&rsquo;T ACTUALLY LIKE TRYING TO LIVE OUT OF A NOTEBOOK.&rdquo;</p>
<p>So I bought some shoes.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-22</title>
      <link>https://mike.puddingtime.org/posts/2023-06-22-daily-notes/</link>
      <pubDate>Thu, 22 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-22-daily-notes/</guid>
      <description>Alright, sweethearts, you heard the man and you know the drill: Assholes and elbows!</description>
      <content:encoded><![CDATA[<h2 id="remarkable-sync-seems-faster">reMarkable sync seems faster</h2>
<p>It shows up as a thing in the latest release notes and it seemed to be true when I looked for it this morning: Sync on the reMarkable between desktop app and device is a lot faster. Not sure it&rsquo;s &ldquo;instantaneous,&rdquo; but it&rsquo;s in the range of &ldquo;wrote a note on the device downstairs, it was on my desktop by the time I got upstairs,&rdquo; which is a vast improvement. No idea if it will be consistent.</p>
<p>I sort of wonder about reMarkable, generally:</p>
<p>They just dropped 25 percent off the cost of their expensive keyboard accessory, and they&rsquo;re trying to herd users into annual plans. There are a lot of similar devices on the market, including stuff from Amazon and Kobo that combine note-taking with ebook reading. If I&rsquo;m doing the tradeoffs, the things that might count as &ldquo;nice&rdquo; on a reMarkable have to compete against the combined utility of a device that lets me read all my stuff from their respective stores, <em>and</em> take notes.</p>
<p>Personally, if I could make the thing go away and pocket $200 for it without dealing with assorted Craigslist randos who&rsquo;d try to trade me for a kayak with a hole in it and a moldy bag of weed I&rsquo;d take that deal. It has never really found a place in my workflow that has lasted. I won&rsquo;t say I <em>regret</em> it, but it just doesn&rsquo;t work for me.</p>
<h2 id="obsidian-again">Obsidian, again</h2>
<p>I knew that once I had a new job things would begin to change for me. Stuff I previously felt like messing around with would seem less fun to mess around with, and my assessment of a given tool would take a harder edge.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/IUkKkWAREFg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>This week was my first week at work where I was in &ldquo;full engagement&rdquo; mode for the balance of the week: Back-to-back days, ad hoc meetings, just needing to get stuff done quickly. I wanted to do stuff like &ldquo;take this free 15 minutes to go downstairs, drink a glass of water, and look at the four todos I just added to my list before starting the next call.&rdquo;</p>
<p>It was all very clarifying. For instance, these general things about writing notes all occurred to me:</p>
<ul>
<li>Mobile matters, both for writing and reading.</li>
<li>If I have a spare few minutes to hack in a feature, I&rsquo;d rather do it in JavaScript than elisp.</li>
<li>I prefer sync infrastructure be somebody else&rsquo;s problem.</li>
<li>It turns out that if life were a Richard Scarry book, for eight hours of the day I would be, like, a bear with spectacles and a neck tie who does business stuff. Markdown is sufficient for &ldquo;businessman notes.&rdquo;</li>
<li>Future-proofing matters to me.</li>
</ul>
<p>These things about Emacs occurred to me:</p>
<ul>
<li>I like sitting down and writing longer-form stuff with it.</li>
<li>I am grateful for it as my daily driver text editor for programming.</li>
<li>Given Doom and very modest customizations, Emacs &ldquo;just works&rdquo; for me.</li>
<li>I am better off as a &ldquo;slow Emacs&rdquo; person, not a &ldquo;fast Emacs&rdquo; person.</li>
</ul>
<p>On that last, it means that I do better with Emacs when I am doing things that I tend to configure once and never mess with again. Like, it&rsquo;s enough to have Rubocop and LSP working for my Ruby coding. Done. It&rsquo;s enough to know how to preview a Markdown file, and I don&rsquo;t care about any other stuff I could do with Markdown mode. Done. Electric modes for the things where I care? Great. Done and done. That&rsquo;s all &ldquo;slow Emacs.&rdquo; Figure it out once, take your time doing so, then never think about it again.</p>
<p><em>Fast</em> Emacs stuff tends to be whole workflows, and I am constantly tweaking those. I can&rsquo;t stop. I hate wasted motion, I hate having to remember three words separated by hyphens when I can remember two letters led by a spacebar. If I can turn on a preview server <em>and</em> open a tab to it in Safari in a single command, I&rsquo;ll figure out how to make that work. If I get an idea in my head about how to optimize something, or come to believe that something is taking more time than it absolutely should, I can&rsquo;t quit worrying at it. Fast Emacs. Constant, rapid iteration on little things meant to shave seconds or keystrokes or conserve brain storage.</p>
<p>When I am using Slow Emacs stuff, I am in a very focused, calm place. Emacs feels steady underfoot, stuff &ldquo;just works,&rdquo; I quit noticing the tool.</p>
<p>When I am using Fast Emacs stuff, it doesn&rsquo;t feel as steady. More stuff goes wrong. I end up dropping a paren and blowing everything up when I restart. Weird little things go wrong because I missed an edge case. It&rsquo;s over-automation, and I know something about that because I did two IT tours and one engineering services tour dealing with over-automated teams. I&rsquo;m not, like, Rock-Ribbed Business Guy on the job, but the waste of constantly getting bit in the ass by things someone made to make work easier and more efficient that become sources of mysterious failures and lost days of refactoring and debugging sort of grinds me. When I&rsquo;m doing Fast Emacs stuff, I&rsquo;m doing that to myself.</p>
<p>So that&rsquo;s Emacs. These things about Obsidian occurred to me:</p>
<ul>
<li>When I took away some things I liked about Denote and implemented them in Obsidian, it took very little time and four community plugins (one of which is just there to provide an API for another one).</li>
<li>Setting up capture templates for my common use cases involved 30 minutes of reading and poking and then maybe five minutes per use case.</li>
<li>When your plugin loadout is light, Obsidian feels very sturdy. With a decent theme, it feels pleasant.</li>
<li>Trying to do Fast Obsidian &mdash; heavily automated workflows &mdash; feels so self-evidently wrong that I don&rsquo;t even bother. I see people doing it, it seems janky.</li>
<li>Slow Obsidian &ndash; simple little keyboard shortcuts, macros, etc. is dead simple to do quickly. Those kinds of quality of life plugins are usually pretty good.</li>
<li>I cannot imagine writing long-form stuff in Obsidian. I&rsquo;m glad you wrote your book in it, but there is something about it &mdash; probably the busyness of the UI &mdash; that prevents me from considering it.</li>
</ul>
<p>And these things about my free time occurred to me:</p>
<ul>
<li>Tool-specific subreddits are Satanic. Obsidian and Emacs both invite an endless wander among the plugins and packages interspersed by the occasional dipshit trying to pick a fight by complaining about their inability to learn something new, triggering both the hardened Tool Warriors and the soft-hearted, enabling evangelists. You&rsquo;d think by now I&rsquo;d be resigned to the whole &ldquo;baby newbie with a broken wing&rdquo; cycle, but any kind of brand or consumer identification is grotesquely fascinating to me, and the ability of someone wandering in off the street crying about how hard elisp is to suck all the air out of the room never ceases to amaze.</li>
<li>I like my new job, but I knew going in that parts of it were going to be a challenge, and that&rsquo;s proving out. So during the day I want to do the easiest possible thing to do things that are helpful but are not the core value I provide (like taking notes, storing information for later, and connecting <em>this</em> thing over here to <em>that</em> task over there). I don&rsquo;t want to mess with those things. They need to just work. And at the end of the day, I want to be done with things that would remind me of work, which I am enjoying but want to keep in its place so I can keep enjoying it.</li>
</ul>
<p>So after a week of living the Obsidian-but-configured-to-make-files-like-Denote life, I got into my <code>config.org</code> file, disabled large swaths of the configuration that have to do with Fast Emacs, and reconfigured Denote to produce <code>markdown-yaml</code> files in my Obsidian vault, so if Obsidian ends up bothering me, my fallback position is already in place.</p>
<ul>
<li>Plain text</li>
<li>A little more future-proofed than Obsidian&rsquo;s loose default behavior thanks to Denote conventions</li>
<li>Solid mobile experience with reliable sync</li>
<li>Markdown&rsquo;s spare markup</li>
<li>Fewer moving pieces</li>
</ul>
<p>As long as a certain software company from Minneapolis doesn&rsquo;t come and buy this place, too, I&rsquo;ll reclaim my free time to screw around with something else.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Denote-formatted Obsidian redux</title>
      <link>https://mike.puddingtime.org/posts/2023-06-19-denote-formatted-obsidian-redux/</link>
      <pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-19-denote-formatted-obsidian-redux/</guid>
      <description>&lt;p&gt;I guess I just needed to go to the woods for the weekend to come back with a better idea of how to make Templater do what I wanted, which was &lt;a href=&#34;https://mike.puddingtime.org/posts/2023-06-16-templating-denote-style-naming-in-obsidian/&#34;&gt;make Obsidian  notes using Denote&amp;rsquo;s naming convention&lt;/a&gt; with a single command. On Friday I got things as far as &amp;ldquo;make a Denote-formatted note,&amp;rdquo; but I couldn&amp;rsquo;t completely automate the file renaming. This afternoon I finally figured that out.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the user function I made, same as the last post:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I guess I just needed to go to the woods for the weekend to come back with a better idea of how to make Templater do what I wanted, which was <a href="/posts/2023-06-16-templating-denote-style-naming-in-obsidian/">make Obsidian  notes using Denote&rsquo;s naming convention</a> with a single command. On Friday I got things as far as &ldquo;make a Denote-formatted note,&rdquo; but I couldn&rsquo;t completely automate the file renaming. This afternoon I finally figured that out.</p>
<p>Here&rsquo;s the user function I made, same as the last post:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="c1">// slugify.js -- placed in a directory where Templater knows to look for user functions.
</span></span></span><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">slugify</span><span class="p">(</span><span class="nx">title</span><span class="p">,</span><span class="nx">identifier</span><span class="p">,</span><span class="nx">tags</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">title</span> <span class="o">=</span> <span class="nx">title</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/^\s+|\s+$/g</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">);</span> <span class="c1">// trim leading/trailing white space
</span></span></span><span class="line"><span class="cl">  <span class="nx">title</span> <span class="o">=</span> <span class="nx">title</span><span class="p">.</span><span class="nx">toLowerCase</span><span class="p">();</span> <span class="c1">// convert string to lowercase
</span></span></span><span class="line"><span class="cl">  <span class="nx">title</span> <span class="o">=</span> <span class="nx">title</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/[^a-z0-9 -]/g</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="c1">// remove any non-alphanumeric characters
</span></span></span><span class="line"><span class="cl">           <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\s+/g</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">)</span> <span class="c1">// replace spaces with hyphens
</span></span></span><span class="line"><span class="cl">           <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/-+/g</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">);</span> <span class="c1">// remove consecutive hyphens
</span></span></span><span class="line"><span class="cl">  <span class="nx">tags</span> <span class="o">=</span> <span class="nx">tags</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/ /g</span><span class="p">,</span><span class="s2">&#34;_&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="nx">tags</span> <span class="o">=</span> <span class="nx">tags</span><span class="p">.</span><span class="nx">toLowerCase</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">  <span class="nx">slug</span> <span class="o">=</span> <span class="nx">identifier</span> <span class="o">+</span> <span class="s2">&#34;--&#34;</span> <span class="o">+</span> <span class="nx">title</span> <span class="o">+</span> <span class="s2">&#34;__&#34;</span> <span class="o">+</span> <span class="nx">tags</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">slug</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">slugify</span></span></span></code></pre></div>
<p>All it does is make a Denote-compatible filename out of stuff passed from the target file.</p>
<p>&hellip; and this is the actual Templater template:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="o">&lt;%*</span> <span class="kd">let</span> <span class="nx">title</span> <span class="o">=</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">title</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="kd">let</span> <span class="nx">identifier</span> <span class="o">=</span>  <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">creation_date</span><span class="p">(</span><span class="s2">&#34;YYYYMMDDTHHmmss&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="kd">let</span> <span class="nx">tags</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">system</span><span class="p">.</span><span class="nx">prompt</span><span class="p">(</span><span class="s2">&#34;Enter tags, space delimited&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="kd">let</span> <span class="nx">slug</span> <span class="o">=</span>  <span class="nx">tp</span><span class="p">.</span><span class="nx">user</span><span class="p">.</span><span class="nx">slugify</span><span class="p">(</span><span class="nx">title</span><span class="p">,</span><span class="nx">identifier</span><span class="p">,</span><span class="nx">tags</span><span class="p">);</span><span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl"><span class="o">---</span>
</span></span><span class="line"><span class="cl"><span class="nx">title</span><span class="o">:</span> <span class="o">&lt;%</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">title</span> <span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nx">date</span><span class="o">:</span> <span class="o">&lt;%</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">creation_date</span><span class="p">(</span><span class="s2">&#34;YYYY-MM-DDTHH:mm:ssZ&#34;</span><span class="p">)</span> <span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nx">tags</span><span class="o">:</span> <span class="o">&lt;%</span> <span class="nx">tags</span> <span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nx">identifier</span><span class="o">:</span> <span class="s2">&#34;&lt;% identifier %&gt;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">---</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;%*</span> <span class="kr">await</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">rename</span><span class="p">(</span><span class="nx">slug</span><span class="p">);</span> <span class="o">-%&gt;</span></span></span></code></pre></div>
<p>It:</p>
<ul>
<li>sets the value of title based on the filename of the note. That&rsquo;s gathered when I add a new note using QuickAdd, which requests a note title.</li>
<li>Makes a Denote-style identifier.</li>
<li>Captures the tags from user input.</li>
<li>passes title, identifier, and tags to that slugify.js function to make a legal Denote filename</li>
<li>adds those values to the template placeholders in the frontmatter</li>
<li>renames the file to match the output of the slugify function</li>
</ul>
<p>I have it wired up to the <code>CMD-CTRL n</code> shortcut via the QuickAdd plugin. So when I make a new note in Obsidian using that shortcut, I&rsquo;m prompted for a directory, prompted for a note title, Templater puts the file down on the disk, I&rsquo;m prompted for tags, then the note file is renamed.  I could move the function into the template, but it&rsquo;s useful to have it separated out so I can run  it on pages outside the context of making a new note; such as when I&rsquo;ve changed tags or title on a note. I&rsquo;ve bound it as a standalone command to <code>opt-cmd-r</code> for quick Denote-compatible renaming.</p>
<p>Utility? Well.</p>
<p>Links are still the challenge here. Obsidian is oblivious to Denote&rsquo;s <code>denote:</code> link format, which is how Denote relates backlinks and inter-note linking. And you can use obsidian.el to search for notes and follow Obsidian links from within Emacs.</p>
<p>So &hellip; the main utility here was &ldquo;science project.&rdquo;</p>
<p>And there&rsquo;s some utility in setting things up to use Denote&rsquo;s filename convention: It does a lot to make note content easier to migrate over time.</p>
<p>And I guess there was some utility in pushing the whole thing far enough to accept that Denote is simply not a good fit if you want your notes to be editable, interlinked, and available via mobile: None of the mobile org apps understand Denote&rsquo;s link format, either.</p>
<p>I&rsquo;m not sure which way I&rsquo;ll go now that I&rsquo;ve bottomed things out:</p>
<p>It was pretty cool to be sitting in a cafe on the Oregon coast this weekend, toggle Tailscale on my phone, and have read access to all my Denote notes <a href="/posts/2023-06-11-daily-notes/">via the web tool I built</a>. And with SyncThing I can use my <a href="/posts/2023-06-12-daily-notes/#denote-drafts-action">Drafts Denote action</a> for capture.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Templating Denote-style naming in Obsidian</title>
      <link>https://mike.puddingtime.org/posts/2023-06-16-templating-denote-style-naming-in-obsidian/</link>
      <pubDate>Fri, 16 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-16-templating-denote-style-naming-in-obsidian/</guid>
      <description>Still on the how-to-make-Denote-more-mobile kick from another direction.</description>
      <content:encoded><![CDATA[<p>I really do like the Denote file naming convention as a sort of future-proofed forever format, and I&rsquo;ve been fussing at this idea that Obsidian could make a good mobile Denote file browser. There are some things around how internal links work I haven&rsquo;t dug into yet, but it&rsquo;s something to play with.</p>
<p>This morning over tea I applied myself to learning how <a href="https://github.com/SilentVoid13/Templater">Templater</a> works. It&rsquo;s an Obsidian plugin that lets you run JavaScript on notes, with access to stuff like the data in the YAML frontmatter and the ability to build your own functions and make them globally reusable. With Templater, you can do the automation needed to produce Denote-style filenames with a very Denote-style &ldquo;name the directory, name the file, name the tags, start editing&rdquo; workflow. It sounds sort of Rube-Goldbergy, but if JavaScript is to Obsidian as elisp is to Emacs, it&rsquo;s just &ldquo;extensible tools require code.&rdquo;</p>
<p>So this is a Templater template to make a new note with YAML frontmatter and user-input tags. You can see that it&rsquo;s just template + a few strftime variations + a prompt:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="o">---</span>
</span></span><span class="line"><span class="cl"><span class="nx">title</span><span class="o">:</span> <span class="o">&lt;%</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">title</span> <span class="o">%&gt;</span> <span class="c1">// title comes from user input using the QuickAdd plugin
</span></span></span><span class="line"><span class="cl"><span class="nx">date</span><span class="o">:</span> <span class="o">&lt;%</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">creation_date</span><span class="p">(</span><span class="s2">&#34;YYYY-MM-DDTHH:mm:ssZ&#34;</span><span class="p">)</span> <span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nx">tags</span><span class="o">:</span> <span class="o">&lt;%*</span> <span class="kd">let</span> <span class="nx">tags</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">system</span><span class="p">.</span><span class="nx">prompt</span><span class="p">(</span><span class="s2">&#34;Enter tags, space delimited&#34;</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">)</span><span class="o">%&gt;&lt;%</span> <span class="nx">tags</span> <span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nx">identifier</span><span class="o">:</span> <span class="s2">&#34;&lt;% tp.file.creation_date(&#34;</span><span class="nx">YYYYMMDDTHHmmss</span><span class="s2">&#34;) %&gt;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">---</span></span></span></code></pre></div>
<p>(There&rsquo;s a small bootstrapping problem of how a new note can have a title to drop into the frontmatter &mdash; that&rsquo;s solved with a plugin that prompts for the title before creating the note.)</p>
<p>So &hellip; invoke that template and you get a note that has the characteristics of a Denote note with <code>markdown-yaml</code> content. Its actual filename, however, will be following Obsidian conventions: <code>Whatever the name is.md</code> on the filesystem.</p>
<p>That&rsquo;s not okay, because Denote&rsquo;s also a file-naming convention, and one I prefer because it includes tags in the filename along with date and title. If you just keep your filenames proper, <em>most</em> of what you care about for long-term portability is just sitting right there in the filename, easily extractable for export/migration/etc.</p>
<p>Templater is able to run scripts that suck in the data in the frontmatter, and it&rsquo;s able to manipulate filenames and locations. So, this is a user function that takes title, ident, and tags params and spits out a Denote-compatible filename:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">slugify</span><span class="p">(</span><span class="nx">title</span><span class="p">,</span><span class="nx">ident</span><span class="p">,</span><span class="nx">tags</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">title</span> <span class="o">=</span> <span class="nx">title</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/^\s+|\s+$/g</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">);</span> <span class="c1">// trim leading/trailing white space
</span></span></span><span class="line"><span class="cl">  <span class="nx">title</span> <span class="o">=</span> <span class="nx">title</span><span class="p">.</span><span class="nx">toLowerCase</span><span class="p">();</span> <span class="c1">// convert string to lowercase
</span></span></span><span class="line"><span class="cl">  <span class="nx">title</span> <span class="o">=</span> <span class="nx">title</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/[^a-z0-9 -]/g</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="c1">// remove any non-alphanumeric characters
</span></span></span><span class="line"><span class="cl">           <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\s+/g</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">)</span> <span class="c1">// replace spaces with hyphens
</span></span></span><span class="line"><span class="cl">           <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/-+/g</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">);</span> <span class="c1">// remove consecutive hyphens
</span></span></span><span class="line"><span class="cl">  <span class="nx">tags</span> <span class="o">=</span> <span class="nx">tags</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/ /g</span><span class="p">,</span><span class="s2">&#34;_&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">ident</span> <span class="o">+</span> <span class="s2">&#34;--&#34;</span> <span class="o">+</span> <span class="nx">title</span> <span class="o">+</span> <span class="s2">&#34;__&#34;</span> <span class="o">+</span> <span class="nx">tags</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">slugify</span></span></span></code></pre></div>
<p>Once you know what the filename should be, you have to actually change it on the filesystem. This is a second Templater &ldquo;template&rdquo; of JavaScript you can run on a note once it has been created:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="o">&lt;%*</span>
</span></span><span class="line"><span class="cl">	<span class="nx">identifier</span> <span class="o">=</span>  <span class="nx">tp</span><span class="p">.</span><span class="nx">frontmatter</span><span class="p">[</span><span class="s2">&#34;identifier&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nx">title</span> <span class="o">=</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">frontmatter</span><span class="p">[</span><span class="s2">&#34;title&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nx">tags</span> <span class="o">=</span> <span class="nx">tp</span><span class="p">.</span><span class="nx">frontmatter</span><span class="p">[</span><span class="s2">&#34;tags&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">	<span class="nx">slugged</span> <span class="o">=</span>  <span class="nx">tp</span><span class="p">.</span><span class="nx">user</span><span class="p">.</span><span class="nx">slugify</span><span class="p">(</span><span class="nx">title</span><span class="p">,</span> <span class="nx">identifier</span><span class="p">,</span> <span class="nx">tags</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="nx">tp</span><span class="p">.</span><span class="nx">file</span><span class="p">.</span><span class="nx">rename</span><span class="p">(</span><span class="nx">slugged</span><span class="p">);</span> <span class="o">-%&gt;</span></span></span></code></pre></div>
<p>(Looking at the <code>slugify</code> function and that Templater code, I think you can just pass the <code>tp</code> object into the function to move some busy-ness into the function and away from your file template. I dunno. I&rsquo;m just trying to get ping right now.)</p>
<p>So at that point, you have a Markdown note sitting in your Obsidian vault with a filename that conforms to Denote&rsquo;s naming convention. If you visit your vault directory in Emacs using dired, the files are all fontified for Denote-browsing goodness.</p>
<p>And that&rsquo;s where I ran out of tea and needed to go do some paying work.</p>
<p>I don&rsquo;t yet know how to get that last function to run at the point of note creation. There&rsquo;s surely some way to get Templater code to hold off on firing the next step in a script until you can get all the data in place, but I don&rsquo;t know what it is. So I have the renaming template bound to a hotkey and just tap <code>Ctrl-Cmd-r</code> to trigger the rename once the note is ready. It&rsquo;s good to have it exposed as its own command, because part of the Denote workflow involves keeping good file naming hygiene when you change note metadata, I&rsquo;d just like to automate that part at time of creation, too.</p>
<p>The last ingredient I&rsquo;m using for all this is the Obsidian <a href="https://github.com/snezhig/obsidian-front-matter-title">front-matter title</a> plugin. It just consults the YAML frontmatter for the <code>title:</code> property and uses that to display note names instead of the filesystem name. That makes directories of files a little more legible, makes tab names less noisy, etc. It does for you in Obsidian some of what <a href="https://github.com/namilus/denote-menu">Denote Menu</a> and similar do in Emacs, pulling Denote&rsquo;s useful but visually cluttered naming convention more firmly in the &ldquo;human-readable&rdquo; direction. It&rsquo;s optional to this exercise, but preferred, especially when on mobile, where there&rsquo;s less real estate to burn on long filenames.</p>
<p>If you visit the file in Denote, you can mess with the frontmatter and use Denote&rsquo;s <code>denote-rename-file-using-front-matter</code> command to update the file name. If you mess around with it in Obsidian, you can run that Templater template to do the same.</p>
<p>If you run <a href="https://github.com/licht1stein/obsidian.el">obsidian.el</a> on top of all of this, it becomes possible to navigate your notes in Emacs, insert links from Emacs, etc. etc. You can&rsquo;t just tap a link from the keyboard &mdash; you have to use obsidian.el&rsquo;s navigation commands &mdash; but that&rsquo;s not terrible.</p>
<p>So to solve the mobile thing, you&rsquo;ve got this approach &mdash; customizing Obsidian with a few plugins and some light code to make your vault look like a Denote corpus &mdash; and you&rsquo;ve got <a href="/posts/2023-06-11-daily-notes/">the thing I did to provide a searchable web interface</a>.</p>
<p>The Obsidian route gives you a more complete mobile experience. You can make notes on the go, you have more flexibility for searching your notes, etc.</p>
<p>The web approach is more compact: Do some Emacs configuration, use some commodity infra with Tailscale and a Synology, then just use Denote in its native form, which is org- and desktop-centric.</p>
<p>Given my usage patterns, either seems fine?</p>
<p>Switching to Markdown for Denote satisfies a part of my brain that doesn&rsquo;t like trying to script org-mode migrations and that also understands &ldquo;org-mode vs. Markdown&rdquo; is another one of those &ldquo;Beta vs. VHS&rdquo; situations I need to just accept. Commensurately, it irritates the part of my brain that completely got it when my tech writing team told me they wanted to migrate from Markdown to <a href="https://en.wikipedia.org/wiki/Darwin_Information_Typing_Architecture">DITA</a>, maybe a little before we were really there on the maturity curve.</p>
<p>Anyhow, it&rsquo;s a hobby.</p>
<h2 id="espanso">espanso</h2>
<p>I don&rsquo;t know what on Earth happened to TextExpander but wow it isn&rsquo;t good.</p>
<p>Looking around for a text expansion tool of some kind I came across <a href="https://espanso.org">espanso</a>. It&rsquo;s a snippet tool. It behaves about like yasnippet or TextMate snippets: Start typing a trigger phrase and it expands it for you.</p>
<p>Most of these things are wrapped in a GUI. espanso is configurable with a YAML file. It also has some cool stuff for handling regexps that allow you to use variables to your snippets. For instance:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">regex</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;:tml\\((?P&lt;tag&gt;.*)\\)&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">replace</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[Items tagged `{{tag}}` in Things](things:///search?query=%23{{tag}})&#34;</span></span></span></code></pre></div>
<p>If you type <code>:tml(foo)</code> it&rsquo;ll expand to a Markdown link using <code>foo</code>.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">[<span class="nt">Items tagged `foo` in Things</span>](<span class="na">things:///search?query=%23foo</span>)</span></span></code></pre></div>
<p>(I&rsquo;m not sure, btw, how to do that in yasnippet and need to figure that out.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-15</title>
      <link>https://mike.puddingtime.org/posts/2023-06-15-daily-notes/</link>
      <pubDate>Thu, 15 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-15-daily-notes/</guid>
      <description>Excruciating Multiplicity of Approaches to Cat-Skinning. I slay me. Denote-org-to-Denote-Markdown. Golden Ratio window management.</description>
      <content:encoded><![CDATA[<h2 id="golden-ratio">Golden ratio</h2>
<p>This is kind of cool. The <a href="https://github.com/roman/golden-ratio.el">golden-ratio</a> package dynamically resizes Emacs windows within frames as they become the active window. It works <em>okay</em> on a desktop machine, and I really like it on my laptop. Opening up a window for LSP output, for instance, kept the code buffer at a better size while still being able to track the LSP to the side.</p>
<p>It doesn&rsquo;t work out of the box with Doom Emacs &mdash; it needs an incantation:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">use-package!</span> <span class="nv">golden-ratio</span>
</span></span><span class="line"><span class="cl">  <span class="nb">:after-call</span> <span class="nv">pre-command-hook</span>
</span></span><span class="line"><span class="cl">  <span class="nb">:config</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">golden-ratio-mode</span> <span class="mi">+1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="c1">;; Using this hook for resizing windows is less precise than</span>
</span></span><span class="line"><span class="cl">  <span class="c1">;; `doom-switch-window-hook&#39;.</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">remove-hook</span> <span class="ss">&#39;window-configuration-change-hook</span> <span class="nf">#&#39;</span><span class="nv">golden-ratio</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">add-hook</span> <span class="ss">&#39;doom-switch-window-hook</span> <span class="nf">#&#39;</span><span class="nv">golden-ratio</span><span class="p">))</span></span></span></code></pre></div>
<p>Demo/tutorial video:</p>
<div style="text-align:center;">
  <iframe width="560" height="315" src="https://www.youtube.com/embed/k5Nwwo4QTmI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen>
  </iframe>
</div>
<p>I understand that Golden Ratio is no longer maintained. Some people say <a href="https://github.com/cyrus-and/zoom">Zoom</a> is as good, so maybe I&rsquo;ll try it if I hit any of those bugs people talk about.</p>
<h2 id="when-you-feel-the-heat-coming-around-the-corner-dot-dot-dot">&ldquo;When you feel the heat coming around the corner &hellip;&rdquo;</h2>
<p>I think I lost an hour to figuring out how to take a batch of existing Denote notes in org format and move them into Markdown, so I got very, very patient
with ChatGPT and together we came up with this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">re</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">argparse</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pypandoc</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">shutil</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">org_dir</span> <span class="o">=</span> <span class="s1">&#39;/Users/mph/org/notes&#39;</span>  <span class="c1"># Replace with your directory path</span>
</span></span><span class="line"><span class="cl"><span class="n">md_dir</span> <span class="o">=</span> <span class="s1">&#39;/Users/mph/org/notes-md&#39;</span>  <span class="c1"># Replace with the desired directory path for markdown files</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">convert_org_to_md</span><span class="p">(</span><span class="n">org_file</span><span class="p">,</span> <span class="n">org_path</span><span class="p">,</span> <span class="n">md_dir</span><span class="p">,</span> <span class="n">with_hashtags</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Recreate the directory structure in the markdown directory</span>
</span></span><span class="line"><span class="cl">    <span class="n">org_relative_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">org_path</span><span class="p">,</span> <span class="n">org_dir</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">md_relative_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">org_relative_path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">md_output_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">md_dir</span><span class="p">,</span> <span class="n">md_relative_dir</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">md_output_dir</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">md_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">org_file</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;.md&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="n">md_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">md_output_dir</span><span class="p">,</span> <span class="n">md_file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Copy org file to markdown directory</span>
</span></span><span class="line"><span class="cl">    <span class="n">shutil</span><span class="o">.</span><span class="n">copy2</span><span class="p">(</span><span class="n">org_path</span><span class="p">,</span> <span class="n">md_path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">md_path</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">org_content</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Extract frontmatter variables from org file</span>
</span></span><span class="line"><span class="cl">    <span class="n">title_match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;#\+title:\s+(.+)&#39;</span><span class="p">,</span> <span class="n">org_content</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">identifier_match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;#\+identifier:\s+(.+)&#39;</span><span class="p">,</span> <span class="n">org_content</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">tags_match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;#\+filetags:\s+(.+)&#39;</span><span class="p">,</span> <span class="n">org_content</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">frontmatter</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">title_match</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">frontmatter</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">title_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">identifier_match</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">frontmatter</span><span class="p">[</span><span class="s1">&#39;identifier&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">identifier_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">tags_match</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">tags_string</span> <span class="o">=</span> <span class="n">tags_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">tags_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">tag</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">tags_string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">)</span> <span class="k">if</span> <span class="n">tag</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
</span></span><span class="line"><span class="cl">        <span class="n">frontmatter</span><span class="p">[</span><span class="s1">&#39;tags&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags_list</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Update date stamp format</span>
</span></span><span class="line"><span class="cl">    <span class="n">org_content</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;\[(\d</span><span class="si">{4}</span><span class="s1">-\d</span><span class="si">{2}</span><span class="s1">-\d</span><span class="si">{2}</span><span class="s1">) (\w</span><span class="si">{3}</span><span class="s1"> \d</span><span class="si">{2}</span><span class="s1">:\d</span><span class="si">{2}</span><span class="s1">)\]&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\1T\2:00-07:00&#39;</span><span class="p">,</span> <span class="n">org_content</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Convert org to markdown using Pandoc</span>
</span></span><span class="line"><span class="cl">    <span class="n">md_content</span> <span class="o">=</span> <span class="n">pypandoc</span><span class="o">.</span><span class="n">convert_text</span><span class="p">(</span><span class="n">org_content</span><span class="p">,</span> <span class="s1">&#39;gfm&#39;</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s1">&#39;org&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Generate new frontmatter content</span>
</span></span><span class="line"><span class="cl">    <span class="n">updated_frontmatter</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="n">frontmatter</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;title&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;date&#39;</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">T%H:%M:%S-07:00&#39;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;identifier&#39;</span><span class="p">:</span> <span class="n">frontmatter</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;identifier&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;tags&#39;</span><span class="p">:</span> <span class="n">frontmatter</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;tags&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Generate the new frontmatter string</span>
</span></span><span class="line"><span class="cl">    <span class="n">frontmatter_string</span> <span class="o">=</span> <span class="s1">&#39;---</span><span class="se">\n</span><span class="s1">&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">updated_frontmatter</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">        <span class="n">frontmatter_string</span> <span class="o">+=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s1">: </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="n">frontmatter_string</span> <span class="o">+=</span> <span class="s1">&#39;---</span><span class="se">\n</span><span class="s1">&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Add updated frontmatter to the markdown content</span>
</span></span><span class="line"><span class="cl">    <span class="n">md_content</span> <span class="o">=</span> <span class="n">frontmatter_string</span> <span class="o">+</span> <span class="n">md_content</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Insert tags as hashtags on the last line if enabled</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">with_hashtags</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">tags_line</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="sa">f</span><span class="s1">&#39;#</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s1">&#39;</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">frontmatter</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;tags&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()])</span>
</span></span><span class="line"><span class="cl">        <span class="n">md_content</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="n">tags_line</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Save the markdown file</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">md_path</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">md_content</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">convert_directory</span><span class="p">(</span><span class="n">org_dir</span><span class="p">,</span> <span class="n">md_dir</span><span class="p">,</span> <span class="n">with_hashtags</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">org_files</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">root</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">org_dir</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;.org&#39;</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">                <span class="n">org_files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">file</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">org_path</span> <span class="ow">in</span> <span class="n">org_files</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">org_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">org_path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">convert_org_to_md</span><span class="p">(</span><span class="n">org_file</span><span class="p">,</span> <span class="n">org_path</span><span class="p">,</span> <span class="n">md_dir</span><span class="p">,</span> <span class="n">with_hashtags</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Parse command-line arguments</span>
</span></span><span class="line"><span class="cl"><span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s1">&#39;Convert org files to markdown.&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">&#39;--with-hashtags&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store_true&#39;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Insert tags as hashtags on the last line&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Convert org files to markdown</span>
</span></span><span class="line"><span class="cl"><span class="n">convert_directory</span><span class="p">(</span><span class="n">org_dir</span><span class="p">,</span> <span class="n">md_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">with_hashtags</span><span class="p">)</span></span></span></code></pre></div>
<p>I thiiiink that&rsquo;s according to the Denote spec for Markdown, and I <em>think</em> that makes it good enough for Hugo, too, excepting links in the
<code>[[denote:12345678]]</code> format.</p>
<p>So, what is it good for? Mostly just getting from an org-mode-based Denote corpus to a Markdown-based one. At least, it seems to &ldquo;just work&rdquo; to do that.</p>
<p>If you&rsquo;re not heavily cross-linked and don&rsquo;t mind cleaning up <code>denote:</code>-style links I suppose you could drop the whole thing into Obsidian. In fact, I did. Works well minus, again, <code>denote:</code> links. I was also personally curious about whether the whole mess would work well with <a href="https://github.com/artempyanykh/marksman">Marksman</a> &mdash; an LSP server for Markdown that has some interesting &ldquo;make a wiki out of simple Markdown&rdquo; features &mdash; but I&rsquo;m missing something about Marksman. It doesn&rsquo;t work well with the stock LSP under Doom, and while it doesn&rsquo;t crash using Eglot, I&rsquo;m still not sure of its utility.</p>
<p>I also tossed in a command line switch that adds the tags as hashtags at the bottom of the file, which is where I tend to put them, and also what I thought I needed to do until I realized that Obsidian actually understands the <code>tags: [&quot;foo&quot;,&quot;bar&quot;,&quot;baz&quot;]</code> notation in YAML frontmatter if you do a <code>tag:#foo</code> search in its search tool. So &mdash; if you&rsquo;re a frontmatter person, just run it plain. If you&rsquo;re not then <code>--with-hashtags</code> is your friend.</p>
<h2 id="obsidian-dot-el">Obsidian.el</h2>
<p>Another option, I guess, is <a href="https://github.com/licht1stein/obsidian.el">obsidian.el</a>, which is meant to provide a way to get around an Obsidian vault within Emacs. You point it at your vault directory, designate an inbox folder, and it provides ways to search by tag, etc.</p>
<p>I dunno. At this point it&rsquo;s all just messing around and seeing how all this stuff hangs together (or doesn&rsquo;t.) Fun.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-13</title>
      <link>https://mike.puddingtime.org/posts/2023-06-13-daily-notes/</link>
      <pubDate>Tue, 13 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-13-daily-notes/</guid>
      <description>Figuring out connection points between Denote and non-Emacs apps like Things with custom links and elbow grease. Automating org dblock rendering. Making org-export output more amenable to SimpleCSS. Text expansion with espanso.</description>
      <content:encoded><![CDATA[<h2 id="making-links-to-pages-in-my-denote-web-export">Making links to pages in my Denote web export</h2>
<p>I&rsquo;m back and forth on whether to stick to org-gtd or to start using Things again. I wanted to re-tag some actions on the fly this morning and it took some extra typing I didn&rsquo;t want to do.  So far, my org-gtd and Denote usage haven&rsquo;t intersected, and there is no way I can think of that any of the existing mobile tools could do anything for me at all if they did.  So as I think about my Emacs/Denote/org estate, and how to decompose it and remix different pieces, there&rsquo;s a pretty clean perforated line between written notes and tasks, provided I can find a way to bridge the two.</p>
<p>One thing I used to do when I was a regular Bear user was create a Things project for all the people I had regular 1:1s with. I set up section headings for each person in the project under which I dropped actions I owed or had delegated. At the top of that project, I had a list of links to my 1:1 notes with each person to make it easier to get to past notes during a meeting without looking them up in Bear &ndash; just save the URL to their 1:1 file,  click the link, Bear opens to where I need it. This felt like a clean way to let two tools do what they&rsquo;re best at: Things does have some basic Markdown editing, but I don&rsquo;t generally want to embed writing/thinking in actions.</p>
<p>Unlike Bear, Emacs has the disadvantage of not being everywhere I would use Things, but since I&rsquo;m exporting my Denote stuff to the web, my notes do have a permanent URL, and it&rsquo;s derived from the filename of a given note, so it&rsquo;s easy to convert the file path to the URL.</p>
<p>This function copies that URL to the clipboard when I&rsquo;m in a note. No error- or sanity-checking: The results will be nonsense if I invoke it outside my Denote hierarchy, but I bound it to my Denote menu in Doom Emacs so it&rsquo;ll only come up when it&rsquo;s contextually appropriate:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/convert-to-skyhook-url</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Converts the current buffer&#39;s path to a URL for the Skyhook notes.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let*</span> <span class="p">((</span><span class="nv">buffer-path</span> <span class="p">(</span><span class="nf">buffer-file-name</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">notes-directory</span> <span class="s">&#34;/Users/mph/org/notes/&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">relative-path</span> <span class="p">(</span><span class="nv">file-relative-name</span> <span class="nv">buffer-path</span> <span class="nv">notes-directory</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">html-path</span> <span class="p">(</span><span class="nf">concat</span> <span class="p">(</span><span class="nv">file-name-sans-extension</span> <span class="nv">relative-path</span><span class="p">)</span> <span class="s">&#34;.html&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">url-prefix</span> <span class="s">&#34;http://skyhook:8888/&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">url</span> <span class="p">(</span><span class="nf">concat</span> <span class="nv">url-prefix</span> <span class="nv">html-path</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">kill-new</span> <span class="nv">url</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">message</span> <span class="s">&#34;Skyhook URL: %s&#34;</span> <span class="nv">url</span><span class="p">)))</span></span></span></code></pre></div>
<p>Then it&rsquo;s just dropping it into a Things project page and wrapping it in Markdown link markup.</p>
<p>There&rsquo;s a converse linking relationship between todos and notes, and I made something to address that, too:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="c1">;; updated to de-hard-code the # symbol -- any symbol is sanitized for use in a URL now</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">after!</span> <span class="nv">org</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">org-link-set-parameters</span> <span class="s">&#34;things&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">:follow</span> <span class="p">(</span><span class="nb">lambda</span> <span class="p">(</span><span class="nv">label</span><span class="p">)</span> <span class="p">(</span><span class="nv">browse-url</span> <span class="p">(</span><span class="nf">concat</span> <span class="s">&#34;things:///search?query=&#34;</span> <span class="p">(</span><span class="nv">url-hexify-string</span> <span class="nv">label</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">    <span class="nb">:export</span> <span class="p">(</span><span class="nb">lambda</span> <span class="p">(</span><span class="nv">path</span> <span class="nv">desc</span> <span class="nv">backend</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">              <span class="p">(</span><span class="nb">cond</span>
</span></span><span class="line"><span class="cl">               <span class="p">((</span><span class="nf">eq</span> <span class="ss">&#39;html</span> <span class="nv">backend</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;&lt;a href=\&#34;things:///search?query=%s\&#34;&gt;Things: %s&lt;/a&gt;&#34;</span>
</span></span><span class="line"><span class="cl">                        <span class="p">(</span><span class="nv">url-hexify-string</span> <span class="nv">path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                        <span class="p">(</span><span class="nv">org-html-encode-plain-text</span> <span class="nv">path</span><span class="p">)))))))</span></span></span></code></pre></div>
<p>It&rsquo;s a custom org external link for Things. Enter a link of this format:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl">[[<span class="na">things:#foo</span>]]</span></span></code></pre></div>
<p>&hellip; and it will link to a Things search for <code>#foo</code>.</p>
<p>The <code>:export</code> section insures that when I publish the site, the <code>things://</code> URL scheme survives. When org-mode comes across protocols it doesn&rsquo;t recognize it mangles them. This ensures that <code>things:</code> URLs show up in the rendered HTML.</p>
<p>So if I&rsquo;m sitting down to a 1:1 with &ldquo;Joe Grudd,&rdquo; I&rsquo;ve got a link to the web version of his metanote from Things on a computer or phone. If I&rsquo;m looking at Joe Grudd&rsquo;s metanote in Emacs or on the web, I&rsquo;ve got a link that shows a search for anything tagged <code>#joeg</code> in Things.</p>
<h2 id="automating-dblock-driven-metanote-updates">Automating dblock-driven metanote updates</h2>
<p>I have metanotes set up in my Denote hierarchy for frequent people and topic tags. The metanotes are semi-automated at this point using <a href="https://protesilaos.com/emacs/denote#h:8b542c50-dcc9-4bca-8037-a36599b22779">Denote&rsquo;s dynamic blocks</a>.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="c">#+BEGIN: </span><span class="cs">denote-links</span><span class="c"> :regexp &#34;_rfc&#34;
</span></span></span><span class="line"><span class="cl"><span class="c">#+END:</span></span></span></code></pre></div>
<p>Just <code>C-c C-c</code> in that block and it expands to something like:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="c">#+BEGIN: </span><span class="cs">denote-links</span><span class="c"> :regexp &#34;_rfc&#34;
</span></span></span><span class="line"><span class="cl">- [[<span class="na">denote:20230613T083549</span>][<span class="nt">RFC - Crosstraining</span>]]
</span></span><span class="line"><span class="cl">- [[<span class="na">denote:20230613T083700</span>][<span class="nt">RFC - IT Portfolio</span>]]
</span></span><span class="line"><span class="cl">- [[<span class="na">denote:20230613T083726</span>][<span class="nt">RFC - Status and progress</span>]]
</span></span><span class="line"><span class="cl"><span class="c">#+END:</span></span></span></code></pre></div>
<p>All those Denote links are translated by org-publish during conversion to HTML, so a link to a metanote on the web server gets me to the HTML version of all the linked notes.</p>
<p>If I&rsquo;m on a laptop, getting to the metanotes is pretty easy: They&rsquo;re all in a metanote at the top of my Denote hierarchy, so that&rsquo;s easy enough to get to in &ldquo;full computer&rdquo; contexts.</p>
<p>The biggest hole in this workflow is that that dynamic blocks have to be updated. I semi-automated it yesterday with a save hook in my Denote directory that updates any dblocks in a file before it saves, but you have to be in a metanote for that to happen.</p>
<p>Not sure if there&rsquo;s a more efficient way to do it, but this automates the update process:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/update-meta-dblocks</span> <span class="p">(</span><span class="nv">directory</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Update dynamic blocks, save, and publish HTML for files with &#39;_meta&#39; in the name in the given DIRECTORY.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span> <span class="s">&#34;DSelect directory: &#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">files</span> <span class="p">(</span><span class="nf">directory-files</span> <span class="nv">directory</span> <span class="no">nil</span> <span class="s">&#34;\\.org$&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">dolist</span> <span class="p">(</span><span class="nv">file</span> <span class="nv">files</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nv">string-match-p</span> <span class="s">&#34;_meta&#34;</span> <span class="nv">file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">org-file</span> <span class="p">(</span><span class="nf">concat</span> <span class="nv">directory</span> <span class="s">&#34;/&#34;</span> <span class="nv">file</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nb">with-current-buffer</span> <span class="p">(</span><span class="nv">find-file-noselect</span> <span class="nv">org-file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="c1">;; Suspend hooks temporarily</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nf">run-hooks</span> <span class="ss">&#39;no-hooks</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">org-update-all-dblocks</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">save-buffer</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">))))))</span></span></span></code></pre></div>
<p>(The <code>run-hooks 'no-hooks</code> business is there to keep my post-save publishing hooks from running with each touch, which I <em>think</em> will make this safe to use as a pre-processing hook.) I think I&rsquo;m going to just use it as I remember it for a few days until I can see how much time it chews up. Maybe it&rsquo;s better run as a scheduled batch thing now and then.</p>
<h2 id="cleaning-up-org-publishing-exports">Cleaning up org publishing exports</h2>
<p>I also took the time to clean up HTML publishing last night. Emacs documentation ftw: I used the <a href="https://orgmode.org/manual/Publishing-options.html">publishing options page</a> to run down settings/variables and what they do. In particular:</p>
<h3 id="org-html-divs">org-html-divs</h3>
<p>I use SimpleCSS to save a few steps. <code>org-html-divs</code> lets you set the preamble, content, and postamble element types and id&rsquo;s,  so:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">org-html-divs</span>
</span></span><span class="line"><span class="cl">    <span class="o">&#39;</span><span class="p">((</span><span class="nv">preamble</span> <span class="s">&#34;header&#34;</span> <span class="s">&#34;preamble&#34;</span><span class="p">)</span> <span class="c1">;; set the preamble div to a &lt;header&gt; element with an id of &#34;preamble&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">content</span> <span class="s">&#34;main&#34;</span> <span class="s">&#34;content&#34;</span><span class="p">)</span> <span class="c1">;; etc.</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">postamble</span> <span class="s">&#34;footer&#34;</span> <span class="s">&#34;postamble&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">org-export-with-author</span> <span class="no">nil</span><span class="p">)</span></span></span></code></pre></div>
<p>I kept the id&rsquo;s so I could have a reference for debugging and keep sight of org&rsquo;s nomenclature.</p>
<h3 id="org-html-preamble">org-html-preamble</h3>
<p>To get a SimpleCSS nav into place, markup has to go into the export&rsquo;s preamble:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">org-html-preamble</span> <span class="s">&#34;&lt;nav&gt;&lt;ul&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">                           &lt;li&gt;&lt;a href=\&#34;/\&#34; class=\&#34;home\&#34;&gt;Home&lt;/a&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">                           &lt;li&gt;&lt;a href=\&#34;/sitemap.html\&#34;&gt;All Notes&lt;/a&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">                           &lt;/ul&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">                         &lt;/nav&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">                         &#34;</span><span class="p">)</span></span></span></code></pre></div>
<h3 id="org-html-head">org-html-head</h3>
<p>To pull in SimpleCSS, FuseJS, and a local style sheet:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span>
</span></span><span class="line"><span class="cl">      <span class="nv">org-html-head</span> <span class="s">&#34;&lt;link rel=\&#34;stylesheet\&#34; href=\&#34;https://cdn.simplecss.org/simple.min.css\&#34; /&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">                     &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;/local.css\&#34; /&gt;
</span></span></span><span class="line"><span class="cl"><span class="s">                     &lt;script src=\&#34;https://cdn.jsdelivr.net/npm/fuse.js@6.6.2\&#34;&gt;&lt;/script&gt;&#34;</span><span class="p">)</span></span></span></code></pre></div>
<h2 id="espanso">espanso</h2>
<p>I don&rsquo;t know what on Earth happened to TextExpander but wow it isn&rsquo;t good.</p>
<p>Looking around for a text expansion tool of some kind I came across <a href="https://espanso.org">espanso</a>. It&rsquo;s a snippet tool. It behaves about like yasnippet or TextMate snippets: Start typing a trigger phrase and it expands it for you.</p>
<p>Most of these things are wrapped in a GUI. espanso is configurable with a YAML file. It also has some cool stuff for handling regexps that allow you to use variables to your snippets. For instance:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">regex</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;:tml\\((?P&lt;tag&gt;.*)\\)&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">replace</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[Items tagged `{{tag}}` in Things](things:///search?query=%23{{tag}})&#34;</span></span></span></code></pre></div>
<p>If you type <code>:tml(foo)</code> it&rsquo;ll expand to a Markdown link using <code>foo</code>.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">[<span class="nt">Items tagged `foo` in Things</span>](<span class="na">things:///search?query=%23foo</span>)</span></span></code></pre></div>
<p>(I&rsquo;m not sure, btw, how to do that in yasnippet and need to figure that out.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-12</title>
      <link>https://mike.puddingtime.org/posts/2023-06-12-daily-notes/</link>
      <pubDate>Mon, 12 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-12-daily-notes/</guid>
      <description>A Drafts action to make Denote notes on the go. Fright Night 2011. Leica Q3, Fujifilm X100/X-Pro. Old man coos at clouds.</description>
      <content:encoded><![CDATA[<h2 id="denote-drafts-action">Denote Drafts action</h2>
<p>The other half of the &ldquo;get more mobile with Denote and Emacs&rdquo; conundrum &mdash; outside the stuff where you can read notes &mdash; is the capture part: Being able to get things into the system when you&rsquo;re out and about and maybe don&rsquo;t have a laptop along.</p>
<p>The glue for everything I&rsquo;m doing to address the mobile stuff is <a href="https://syncthing.net">Syncthing</a>, with all the nodes connected via <a href="https://tailscale.com">TailScale</a>. On my iOS devices, I use <a href="https://www.mobiussync.com">Mobius Sync</a> as my Syncthing client. Since I&rsquo;ve got Syncthing running on a Synology, that provides me with a central node to compensate for mobile or seldom-used desktop devices coming in and out on the TailScale network as they sleep and wake up.</p>
<p>To make my Denote setup more mobile, I&rsquo;ve got SyncThing updating my published notes folder more frequently than the default, and I&rsquo;ve got a save hook for my Denote directory that both publishes my Denote notes as HTML and runs the note indexer script that FusionJS depends on to make search fast. Since org publishing is incremental, there&rsquo;s not a big hit when I save a Denote file: It recreates the notes index and runs the Python script, which takes about a twentieth of a second to complete at this point because all it cares about is the filename and the tags (which are built into the filename.)</p>
<p>Over time, as my notes scale, that script might take longer, and that&rsquo;s fine: It is also running on the Synology where performance isn&rsquo;t as big of a deal. Running the indexer on the client nodes just means when SyncThing kicks in it is shipping an updated index along with the new files to the Synology.</p>
<p>Anyhow, that&rsquo;s the background infra stuff.</p>
<p>To handle the other part, capture, I turned to Drafts. It needed a little bit of Javascript to create a few variables for the output template, and it can write out to on-device storage, so it was trivial to <a href="https://directory.getdrafts.com/a/2Kb">create a Drafts action</a> that takes this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Some note about agriculture
</span></span><span class="line"><span class="cl">fruits vegetables
</span></span><span class="line"><span class="cl">I am going to write today about fruits and vegetables and how important they are to our way of life.</span></span></code></pre></div>
<p>&hellip; and turns it into a file called <code>20230612T121326--some-note-about-agriculture__fruits_vegetables.org</code> with the content</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="cs">#+title</span><span class="c">:      Some note about agriculture</span>
</span></span><span class="line"><span class="cl"><span class="cs">#+date</span><span class="c">:       [2023-06-12 Mon 12:13]</span>
</span></span><span class="line"><span class="cl"><span class="cs">#+filetags</span><span class="c">:   :fruits:vegetables:</span>
</span></span><span class="line"><span class="cl"><span class="cs">#+identifier</span><span class="c">: 20230612T121326</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">I am going to write today about fruits and vegetables and how important they are to our way of life.</span></span></code></pre></div>
<p>&hellip; and then deposits it into the on-device storage path for Mobius Sync and ingestion into the Syncthing network.</p>
<p>The use case for something like this is pretty small: I&rsquo;d like to be able to make Denote notes on a phone or iPad when I&rsquo;m not near a laptop or desktop machine, and it was easier to automate that up front even if Denote&rsquo;s naming and formatting convention is pretty simple. Following the &ldquo;convention over configuration&rdquo; mindset of Denote, the top level of my notes hierarchy is empty, so it becomes the de facto inbox for when I&rsquo;m back in front of a &ldquo;real computer&rdquo; for triaging incoming notes captured while mobile &ndash; moving them into the right folders, updating metadata, etc.</p>
<p>The action writes to a Drafts &ldquo;bookmark,&rdquo; so you can use whatever storage back end you like: If you keep your Denote notes in Dropbox, Box, Google Drive or whatever, the action will prompt you the first time you use it (on Mac or iOS/iPadOS) and you can choose the right thing for you.  I suppose for Git people something like Working Copy will probably also work.</p>
<p>Anyhow, seems to be a fine v1.</p>
<p>And I guess, going wide for a few seconds, another comment on what I like about Denote generally: It&rsquo;s a good convention!  As I was working on the search stuff over lunch, I realized that the Python script that creates the <code>index.json</code> file that Fuse.js has to consume was using file creation times to record the date of a given note in the index. That&rsquo;d be fine if those notes were never regenerated, but they are. But whatever! The Denote naming convention embeds the date in the filename. So I just parse that to create the date entry for each file in the index.</p>
<p>If all my plaintext notes were saved with that naming convention for all eternity, it wouldn&rsquo;t be the worst thing. If the space goat comes and eats Emacs, the convention-over-configuration approach means that if you understand regular expressions and any commodity scripting language, you can pipe your stuff through pandoc and be on your way in a new tool. It&rsquo;s not much more complex a lift than, say, switching from Jekyll to Hugo. If you&rsquo;re willing to use a tool you have to use lisp to configure, this isn&rsquo;t a big thing.</p>
<p>The one &ldquo;looking over my shoulder&rdquo; question I have is around markup and future-proofing. There&rsquo;s a case to be made for using Denote with its Markdown-and-YAML format and not its org-mode format. That would provide close to perfect portability into something like Obsidian without needing to run anything through pandoc first. There&rsquo;s an argument to be made that parsing that format is easier, too, because YAML is a thing and &ldquo;org mode file variables&rdquo; are kind of not.</p>
<p>Eh. Whatevs.</p>
<p>I might need to write a script. Please don&rsquo;t throw me in the briar patch.</p>
<h2 id="a-bit-more-on-the-leica-q3-and-the-fujifilm-roadmap">A bit more on the Leica Q3 and the Fujifilm roadmap</h2>
<p>I loaned my Leica Q2 out, which prompted some comments from the lendee, which made me think about the Q3 in clearer terms. It sounds like actual general availability will be quite delayed, and I&rsquo;m in no hurry to buy new gear anyhow, but I think I&rsquo;m more curious about what&rsquo;s next for Fujifilm&rsquo;s X100 lineup and the eventual X100 &ndash; VI? 6? Whatever it is.</p>
<p>I&rsquo;d love to see IBIS and I&rsquo;d love for it to have the X-T5&rsquo;s sensor. It feels like a faster lens is probably too much to hope for: The size difference between Fujifilm&rsquo;s two faster 23mm lenses &mdash; the original XF23/1.4 and the WR remake &mdash; and the lenses you find in the X100 series and the XF23/2 WR is pretty drastic. I think an f1.8 or 1.4 would bulk the X100 up considerably.</p>
<p>I&rsquo;m also curious about whether there&rsquo;s any life left in the X-Pro series. I thought the &ldquo;no chimping&rdquo; design of the X-Pro 3 was a gimmick, and I am not sure what the real audience even is for an optical viewfinder. I read someone recently who put the X-Pro OVF in the context of early mirrorless technology, pointing out that it helped people get around the performance problems with early EVFs. Personally, I feel an aesthetic connection with it but prefer to just shoot with the EVF. The one exception to that is when I&rsquo;m out with my little Funleader fixed-focus pancake: I use the EVF now and then to spot-check exposure, but it&rsquo;s fun shooting super lo-fi with a toy lens and an OVF.</p>
<figure><img src="/img/statuary.jpg"
    alt="A pseudo-classical yard statue in the shadow of a gray house. Strong shadows."><figcaption>
      <h4>Shot with a Funleader 18/f8 fixed-focus lens</h4>
    </figcaption>
</figure>

<p>It feels to me like the X100 line could be coming close to rounding out a phase: Get IBIS squeezed in there, break the f2 barrier on the lens, and what else do you do besides iterate on the sensor as it makes sense to do so, selling it as a travel/street compact all-rounder? They added WR last go-round. There&rsquo;s not much left to do if it is to stay a fixed-lens kinda-rangefinder. If they killed the OVF to make room for IBIS, and bulked it up a little for a faster lense, I think I&rsquo;d take that deal. It&rsquo;d just be an APS-C Leica Q-series at that point.</p>
<h2 id="fright-night--2011">Fright Night (2011)</h2>
<p>We watched the 2011 <em>Fright Night</em> remake last night after a weekend conversation about vampire movies. I wouldn&rsquo;t call it a paragon of the form, but by the time we were able to settle down for a movie it was a little late and we wanted something fizzy. I &hellip; didn&rsquo;t remember Colin Farrell having so much fun the first time I saw it, which must have been in the theater or not long after its run. But he does have fun. And it left us wanting to go back to the &lsquo;85 original, because the remake raised a few questions we couldn&rsquo;t answer. It was nice of them to let Chris Sarandon turn up long enough to get eaten.</p>
<p>That conversation also has me wanting to do a few more pairs/trios. Like, Murnau&rsquo;s <em>Nosferatu</em> along with <em>Shadow of the Vampire</em>, but also <em>Cabinet of Dr. Caligari</em> to get a good dose of German Expressionism.</p>
<h2 id="old-man-coos-at-cloud">Old man coos at cloud</h2>
<p>Possibly lost in the Denote shuffle because I&rsquo;m using them and they seem to just work:</p>
<p>Syncthing, NextDNS, and TailScale are really doing it for me.</p>
<p>There&rsquo;s the occasional glitch with Syncthing, but nothing too bad and probably because I have some things writing to the sync folders a little too often. But it works really well for how I&rsquo;m using it:</p>
<ul>
<li>Syncing org files</li>
<li>Syncing the HTML output of org publishing to the Synology</li>
<li>Syncing back end for Mackup (configuration syncing)</li>
<li>Syncing back end for my Doom Emacs configuration</li>
<li>Syncing <code>~/bin</code></li>
</ul>
<p>I haven&rsquo;t been using it quite long enough to rule on whether it&rsquo;s as good as Dropbox, but it&rsquo;s not nearly as <em>needy</em> as Dropbox, and it works great over &hellip;</p>
<p>TailScale. I came <em>this</em> close to setting up a VPN on my Synology when I remembered that I meant to look into TailScale. I went in expecting I&rsquo;d bounce off something about it, and didn&rsquo;t expect to be able to connect iOS/iPadOS devices to it, but it&rsquo;s almost magical in its just-works-ness. I&rsquo;ve got a few things on Heroku I could probably pull back to the Synology at this point.</p>
<p>Another bonus is that I can use my NextDNS account with it, which spares me conflicting profiles on my Apple devices and hence removes the need to keep separate ad blockers going on anything: I&rsquo;m subscribed to a few filters on NextDNS and it is more than adequate.</p>
<p>I need to take one last pass at making sure I don&rsquo;t have something syncing its config on Dropbox, and get all my Dropbox stuff out, but I think that&rsquo;s one more account I can kill thanks to Syncthing and TailScale.</p>
<p>I&rsquo;m remembering back to when my world was NFS mounts and DynDNS, and this is all so much better.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-11</title>
      <link>https://mike.puddingtime.org/posts/2023-06-11-daily-notes/</link>
      <pubDate>Sun, 11 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-11-daily-notes/</guid>
      <description>First week at my new job. How I made a searchable web interface for my Denote notes with FuseJS, a Synology, and TailScale.</description>
      <content:encoded><![CDATA[<h2 id="first-week-at-iterable">First week at Iterable</h2>
<p>Well, after a lot of hinting and oblique mentions, it&rsquo;s okay to finally say I started a new job this week, as director of IT at Iterable, thus ending about seven months of rest and a relatively easy job search.</p>
<p>Here&rsquo;s the LinkedIn version:</p>
<blockquote>
<p>I remember being 1200 feet over a Ft. Benning drop zone: My parachute risers had twisted up, my helmet had fallen off, and I was airsick. I thought to myself, &ldquo;well, you brought this on yourself.&rdquo;</p>
<p>Years and years later, I read Pema Chödrön, who said, &ldquo;to be fully alive, fully human, and completely awake is to be continually thrown out of the nest.&rdquo;</p>
<p>I finished my first day at Iterable today. I&rsquo;m very happy to be starting this new role with a warm, welcoming team that includes a few familiar faces.</p>
<p>Reflecting on my time off after Puppet:</p>
<p>It is easier said than done to go still, rest, and find some quiet. I think I lost two months to assorted writing and photography projects and other busy-making stuff until someone close to me finally said, &ldquo;I thought you were supposed to be resting. This doesn&rsquo;t seem like resting.&rdquo;</p>
<p>I did finally manage to go still and rest. When I decided to start looking for work again, I knew I had to sift through 10 amazing years at Puppet and figure out when I was happiest and helping the most people. Having the time to discern meant I was able to set a few things aside I would have sworn I most wanted to do as I realized I was probably just trying to replace something I&rsquo;d lost. I felt more focused with each recruiter screen or interview, and my list of job alerts got shorter as I shifted from &ldquo;what can I do&rdquo; to &ldquo;what do I want to do.&rdquo;</p>
<p>It&rsquo;s easy to euphemize: During my time out I got a lot of really unfortunate advice about covering up gaps, and trying to talk around things, so I&rsquo;ll just say that yes, it sucked to get laid off — to get thrown out of the nest.</p>
<p>It wasn&rsquo;t a world-ending shock, I was treated with respect and generosity, and it was a genuine gift to know that I could spend a few months helping my team transition once I knew I wasn&rsquo;t going to continue. But it was still tough. So I&rsquo;m also grateful to friends I got to spend time with over the past several months. There were a few times I felt at sea and unsure of myself, and all the coffees, lunches, and texts helped so much. I had a lot more friends on this jump than I did over that drop zone, and I&rsquo;m very grateful for all of them.</p>
</blockquote>
<p>There is a ton more to say about the past seven months, and it feels like the right thing to do is to think more deeply about big themes. But there are some little things to say:</p>
<p>First, I caught a lot of great breaks going into my time off, and saw my layoff coming far enough out that I could prepare. I spent a lot of my early career under the shadow of layoffs, with a completely different mindset. I think the person who smiled and told his layer-offer that he hoped they had an okay time with all their other layoffs last August would be completely alien to the person who wouldn&rsquo;t take a weekend off for nine straight months in 2001.</p>
<p>There are lots of ways you can &ldquo;figure out what&rsquo;s next&rdquo; that don&rsquo;t have to involve getting laid off or quitting your job, but &ldquo;figuring out what&rsquo;s next&rdquo; takes work. It&rsquo;s probably <em>easiest</em> if you know and start acting on it while you have a job, but if you&rsquo;re in a place where you have a ton of things to sort out and you&rsquo;re just enervated from keeping the lights on wherever you are, it&rsquo;s still kind of hard. I&rsquo;m glad I had the resources, and hence the time, to take a break and be methodical. There was risk and some anxiety, but it got the best result.</p>
<p>Second, depending on how you want to manage the reckoning, this is my first new job in almost 11 years. I did so much growing during that time. There are some moments I wish I could go back to and get a do-over on, but that&rsquo;s part of the whole &ldquo;growth&rdquo; thing &hellip; not getting things quite right the first time you encounter them.</p>
<p>Third, I&rsquo;m glad I structured the job search the way I did. During the intense &ldquo;cold call&rdquo; period of February through April I had a loose routine of taking three days a week to just go through job listings and two days a week of applying for the listings I had saved the other three days of the week. Breaking it up like that gave me space to think about each listing.</p>
<p>I learned a practice years ago of pausing and asking if an opportunity or request elicits a &ldquo;whole body yes,&rdquo; &mdash; positive reactions from head, heart, and gut. I found that spending some time looking through job posts and quickly capturing the ones where my first response was &ldquo;sure, I could do that,&rdquo; then coming back to them a few days later to look a second time elicited a slightly different response. Sometimes it was &ldquo;wow, why am I delaying the application here?&rdquo; and other times it was &ldquo;I don&rsquo;t know why I thought that was a good idea.&rdquo; The third test was the actual application &mdash; filling out whatever forms and writing a cover letter, and that was when I could tell whether my heart was really in it. If I couldn&rsquo;t write a compelling cover letter &mdash; didn&rsquo;t feel sincere or engaged &mdash; it was a signal from head and heart.</p>
<p>I started out looking at several kinds of jobs &mdash; IT, engineering, operations &mdash; and then a few categories within each. I had some good early signal from the operational roles (chief of staff and similar), extremely positive signal on IT, and really uneven signal on engineering. I was also looking at organizational size/maturity.  Part of me went in thinking &ldquo;man, I wish I could do a &lsquo;Puppet in 2012, but everything I know now.&rsquo;&rdquo;</p>
<table>
  <thead>
      <tr>
          <th>Role</th>
          <th>Org maturity</th>
          <th>Feels</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Chief of staff</td>
          <td>low</td>
          <td>Exciting, frustrating.</td>
      </tr>
      <tr>
          <td>Chief of staff</td>
          <td>medium</td>
          <td>Sure, I could do that. I&rsquo;d have some growth opportunities, you&rsquo;d get some shit done better.</td>
      </tr>
      <tr>
          <td>Chief of staff</td>
          <td>high</td>
          <td>&ldquo;I would need to be this tall to ride and I&rsquo;m not there yet.&rdquo;</td>
      </tr>
      <tr>
          <td>Eng</td>
          <td>low</td>
          <td>Under certain, odd conditions; but your conception of &ldquo;my lane&rdquo; is too narrow.</td>
      </tr>
      <tr>
          <td>Eng</td>
          <td>medium/high</td>
          <td>North of &ldquo;zone of mediocrity&rdquo; or &ldquo;competence,&rdquo; nearing &ldquo;zone of excellence,&rdquo; but not &ldquo;zone of genius.&rdquo;</td>
      </tr>
      <tr>
          <td>IT</td>
          <td>low</td>
          <td>&ldquo;Well, you certainly have interesting notions; someone will enjoy disabusing you of them&rdquo;</td>
      </tr>
      <tr>
          <td>IT</td>
          <td>medium</td>
          <td>&ldquo;Yup. Put me in there. I have some lessons to apply.&rdquo;</td>
      </tr>
      <tr>
          <td>IT</td>
          <td>high</td>
          <td>&ldquo;Will you issue me a clipboard and legal pad or do I have to count all these beans on my fingers?&rdquo;</td>
      </tr>
  </tbody>
</table>
<p>Going in my enthusiasm and interest was highest around chief of staff roles. Over my time at Puppet I&rsquo;d been in and out of &ldquo;operational leader&rdquo; roles, and had to very disappointing experiences in that area. I wanted another bite at the apple. I got several interviews for that sort of thing, made it pretty far into a few processes, and came away with a few observations:</p>
<ul>
<li>The places where I would do the most good, that seemed the most exciting, and that were the most greenfield, were the worst conversations, and they happened early enough that my energy and patience for yet another baby CTO with a reflexive hatred for process were too low to even attempt to make a sale. <em>Or</em> they didn&rsquo;t actually want a chief of staff &mdash; they wanted an EA/office manager.</li>
<li>The places where I could be helpful and effective &mdash; the medium maturity organizations with enough introspection to know they needed help &mdash; were harder to find, and the few conversations I had there always left me uneasy. Like I was swapping the process resistance and insecurity of baby C-levels for the conditioned wariness of leadership teams that understand a chief of staff is a potential threat to the balance of power and their individual access and influence.</li>
<li>There was a third tier &ndash; medium or high maturity orgs who wanted someone very senior with much more hard-core business operations experience. Just isn&rsquo;t me, and I didn&rsquo;t bother.</li>
</ul>
<p>But I also had to come to grips with why I was looking at those roles to begin with, and it began to dawn on me that the things that made me a likely candidate to do that kind of thing at Puppet over the years involved a different mix of factors from what these places needed. I kept imagining doing these roles from the perspective of the person who&rsquo;d been at Puppet for ten years, had a solid network, had a basis for trust with people throughout the business, and an inventory of patterns we could pick up and dust off that had the ring of familiarity for the old-timers, but could be pivoted or spruced up a little for the skeptical newcomers.</p>
<p>I kept saving those roles when I got job alerts for them, though, kept applying, and kept tracking why I dropped out or decided not to finish the cover letters for everything, and finally formed a thought over my morning tea and listing review one morning:</p>
<p>&ldquo;You loved that place, loved being there, and loved even the people who drove you a little crazy. You wanted to make it better and knew how to get things unstuck. You understood what it needed on some emotional level. It&rsquo;s gone.&rdquo;</p>
<p>I quietly re-branded my LinkedIn page, turned off those job alerts, and narrowed my list to IT and engineering.</p>
<p>Engineering things weren&rsquo;t sparking much joy at any point in the process. One opportunity came along that seemed interesting, but in a very &ldquo;you&rsquo;ve got a very painful-sounding definition &lsquo;interesting&rsquo;&rdquo; sort of way. When you send your wife this gif to explain why you think you&rsquo;d be a good fit for a job:</p>
<figure><img src="/img/sith-speciality.gif"
    alt="Senator Palpatine, Sith Lords are our speciality ...">
</figure>

<p>&hellip; you should ask a second time if that&rsquo;s how you want to spend your days.</p>
<p>It kept coming back to <a href="https://themanagershandbook.com/coaching-and-feedback/zone-of-genius">which zone I&rsquo;m in</a> when I&rsquo;m leading in engineering, and I never really felt like I was in my &ldquo;Zone of Genius.&rdquo; I&rsquo;ve been around those people and know enough to understand the difference between us.</p>
<p>Ultimately the things that kept feeling the most right to me were the IT roles. I had a few processes go pretty far, so I had the chance to do a lot of personal writing and preparation, and I realized that the challenge I was having was less about thinking up a response, but organizing all the thoughts I had on any given part of the conversation. Over the course 30+ years in professional workplaces I held a lot of jobs in a lot of different kinds of businesses. I was never quite sure what skills would transfer in each role I held, but I knew that during my time in IT it felt I could tap the most of my experiences, and that my particular temperament worked the best.</p>
<p>By the time the Iterable opportunity presented itself, I felt primed and very clear.</p>
<p>I guess the last thing I want to say right now is that it was a pretty great couple of weeks of interviewing. I had no problem writing the customary followup note. The opportunity is at that intersection of &ldquo;oh, there&rsquo;s a lot to do&rdquo; and &ldquo;I know what I need to do.&rdquo; I want to be there.</p>
<h2 id="our-world-of-note-taking-compromises">Our world of note-taking compromises</h2>
<p>So part of Week One was having my new boss up from California for a kickoff and planning. We got a WeWork space. I didn&rsquo;t do anything to get a toolchain onto my new work laptop so I didn&rsquo;t have Emacs or any of my personal config stuff on it. It was a good opportunity to think about the compromises that have loomed the largest when it comes to living in the Emacs ecosystem but having the occasional mobile use case:</p>
<ul>
<li>Decent clients to read org-mode files.</li>
<li>Reliable sync.</li>
<li>Capture on the go.</li>
</ul>
<p>After a few days in a WeWork, seeing what would have been useful and how I was working by just putting stuff in native tools then moving them over, I realized I&rsquo;d be happiest working with these assumptions:</p>
<ul>
<li>Stick with Emacs/org-mode/Denote. They feel the best for just doing work on a laptop or desktop, and that&rsquo;s where I do most of my work.</li>
<li>Give up on any of the mobile options for managing org-mode. They&rsquo;re dancing bears. It&rsquo;s great that they can dance, and it feels uncharitable to complain that they don&rsquo;t dance well, but they&rsquo;re hindered by a lack of native sync. The best they can do is capture simple things and relate simple things. Put more weight on them and they&rsquo;ll frustrate me.</li>
<li>Make static notes available in a way that&rsquo;s easily readable by native tools and put extra effort into making sure that when the static notes are pushed out, they&rsquo;re truly pushed out.</li>
</ul>
<p>On that last point, the biggest pain point I&rsquo;ve come across using Denote/Emacs has been getting at stuff for reference when I&rsquo;m not near a real computer. One way tools like Obsidian and Things run rings around Emacs is in their native, bespoke, purpose-built sync capabilities. Capture is no big deal.</p>
<p>Yesterday I spent some time sussing out how org-publish works and:</p>
<ul>
<li>Got my notes set up to publish using <a href="https://simplecss.org">SimpleCSS</a>.</li>
<li>Connected the output directory to my Synology via SyncThing.</li>
<li>Set up the Synology&rsquo;s web server (it&rsquo;s just nginx).</li>
<li>I can connect to the saved notes via Tailscale, which is running on all my devices (and using NextDNS, which is sweet, since I was able to take out a whole layer of browser-based ad-blockers).</li>
<li>Set up an after-save-hook to kick off a publish whenever I save a file in the notes directory.</li>
<li>Set up a pre-save hook to update any Denote org-babel d-blocks, because I make meta note pages with those.</li>
</ul>
<p>I put SyncThing on an aggressive update schedule to make sure the HTML versions of notes will get pushed out after saves.</p>
<p>Today I started figuring out how to add search to my exported notes. <a href="https://fusejs.io">FuseJs</a> seems to be working fine for that. I  made a script that can walk the exported HTML notes and get them into a JSON index, and I added some HTML/JS to an <code>index.org</code> file in my notes directory. Here&rsquo;s a quick demo of a few searches on mobile:</p>
<p><video controls width="40%"><source src="/img/denote-fuse-search.mp4" type="video/mp4">
Your browser does not support the video tag.</video></p>
<p>For now the notes indexing script is just running from the Synology&rsquo;s Task Scheduler.</p>
<p>So, net:</p>
<ul>
<li>When I write or edit a note in Denote, save-hooks publish all my notes as HTML.</li>
<li>SyncThing makes sure the HTML is pushed over to my Synology.</li>
<li>The Synology periodically indexes the HTML for search.</li>
<li>nginx running on the Synology serves the notes.</li>
<li>Everything is happening over Tailscale.</li>
</ul>
<p>There&rsquo;s a very fair question, which is &ldquo;why on Earth do all this when Obsidian, Logseq, or a few other mobile-capable PKMs are sitting right there?&rdquo;</p>
<p>I guess the answer is, &ldquo;I don&rsquo;t like them as much.&rdquo;</p>
<p>I mean, they&rsquo;re fine and all &mdash; I would use Obsidian if there were no Emacs &mdash; but if I line up what they excel at with what Emacs/org-mode/Denote excel at, and ask myself &ldquo;how do I most often use these tools,&rdquo; the mobile access use case is relatively rare and mainly amounts to a question of access and very simple capture. I just want to know that if I save a piece of information on a laptop or desktop, it&rsquo;ll be there for review on a tablet or phone not long after.</p>
<p>For a few hours of work configuring some off-the-shelf tools and a little bit of fine-tuning of the underlying sync engine, all my notes are securely available to me with super-fast search, and I can author them in a decent environment to begin with, not some Electron-based Markdown editor</p>
<p>I&rsquo;m happy to share what I came up with but avoided my customary &ldquo;here&rsquo;s a few snippets.&rdquo; The stuff I have going right now feels alpha. It&rsquo;s working, but it&rsquo;s in that realm of &ldquo;I just got ping.&rdquo; The HTML output needs some polishing, I&rsquo;m not sure the search stuff is configured as well as it could, and it remains to be seen how it all works as I just get on with my day. I did as much as I could over a few sessions on the weekend so I could just get back to work tomorrow without any lingering &ldquo;just one more thing&rdquo; desire to fiddle.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-04</title>
      <link>https://mike.puddingtime.org/posts/2023-06-04-daily-notes/</link>
      <pubDate>Sun, 04 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-04-daily-notes/</guid>
      <description>Denote and encrypted notes plus the whole mobile angle.  Hugo preview server and ox-hugo. What happened to V.</description>
      <content:encoded><![CDATA[<h2 id="denote-and-encrypted-notes">Denote and encrypted notes</h2>
<p>I want to have access to my Denote notes via SyncThing on a machine I don&rsquo;t completely control (but is not, to be clear, operating in a hostile environment) and I want them to be encrypted, same as my <code>org-journal</code> files. I should probably just ask Prot, but as near as I can tell the <em>clean</em> way to encrypt notes in Denote is to add an &ldquo;org.gpg&rdquo; type to <code>denote-file-types</code>, like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">&#39;denote-file-types</span>
</span></span><span class="line"><span class="cl">             <span class="o">&#39;</span><span class="p">(</span><span class="nv">org-gpg</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:extension</span> <span class="s">&#34;.org.gpg&#34;</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:date-function</span> <span class="nv">denote-date-org-timestamp</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:front-matter</span> <span class="nv">denote-org-front-matter</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:title-key-regexp</span> <span class="s">&#34;^#\\+title\\s-*:&#34;</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:title-value-function</span> <span class="nf">identity</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:title-value-reverse-function</span> <span class="nv">denote-trim-whitespace</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:keywords-key-regexp</span> <span class="s">&#34;^#\\+filetags\\s-*:&#34;</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:keywords-value-function</span> <span class="nv">denote-format-keywords-for-org-front-matter</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:keywords-value-reverse-function</span> <span class="nv">denote-extract-keywords-from-front-matter</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:link</span> <span class="nv">denote-org-link-format</span>
</span></span><span class="line"><span class="cl">               <span class="nb">:link-in-context-regexp</span> <span class="nv">denote-org-link-in-context-regexp</span><span class="p">))</span></span></span></code></pre></div>
<p>It looks like a lot to do a little, but it&rsquo;s just a clone of the <code>org</code> type that&rsquo;s already in that list, with the extension changed. I suppose one could just alter the <code>org</code> type, but then you don&rsquo;t have an unencrypted type if you want it.</p>
<p>With that in place, you can do:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">denote-file-type</span> <span class="ss">&#39;org-gpg</span><span class="p">)</span></span></span></code></pre></div>
<p>&hellip; and anything you create with the <code>denote</code> command uses that type, with the correct extension. Given the right general config:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">require</span> <span class="ss">&#39;epa-file</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">epa-file-enable</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">org-crypt-key</span> <span class="s">&#34;foo@bar.baz&#34;</span><span class="p">)</span></span></span></code></pre></div>
<p>&hellip; it all &ldquo;just works,&rdquo; with decryption handled transparently provided the gpg agent is set up correctly, and I preserve the option to have unencrypted notes for whatever reason I might want them at some point.</p>
<p>To get my existing notes into an encrypted state, I used this script:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="cp">#!/bin/zsh
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">encrypt_file<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="nb">local</span> <span class="nv">file_path</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nb">local</span> <span class="nv">recipient</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$2</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nb">local</span> <span class="nv">encrypted_file_path</span><span class="o">=</span><span class="s2">&#34;</span><span class="si">${</span><span class="nv">file_path</span><span class="si">}</span><span class="s2">.gpg&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  gpg --encrypt --recipient <span class="s2">&#34;</span><span class="nv">$recipient</span><span class="s2">&#34;</span> --output <span class="s2">&#34;</span><span class="nv">$encrypted_file_path</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$file_path</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;File encrypted: </span><span class="nv">$encrypted_file_path</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">encrypt_files_in_directory<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="nb">local</span> <span class="nv">directory</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nb">local</span> <span class="nv">recipient</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$2</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">for</span> file_path in <span class="s2">&#34;</span><span class="nv">$directory</span><span class="s2">&#34;</span>/*.org<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    encrypt_file <span class="s2">&#34;</span><span class="nv">$file_path</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$recipient</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">done</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Usage: ./encrypt_files.sh directory recipient_email</span>
</span></span><span class="line"><span class="cl"><span class="nv">directory</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">recipient_email</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$2</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> -n <span class="s2">&#34;</span><span class="nv">$directory</span><span class="s2">&#34;</span> <span class="o">&amp;&amp;</span> -n <span class="s2">&#34;</span><span class="nv">$recipient_email</span><span class="s2">&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">  encrypt_files_in_directory <span class="s2">&#34;</span><span class="nv">$directory</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$recipient_email</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;Usage: ./encrypt_files.sh directory recipient_email&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span></span></span></code></pre></div>
<h2 id="the-mobile-problem">The mobile problem</h2>
<p>The tradeoff with that approach is that your mobile use case gets harder. I can still do something like mosh my way in to the Mac Studio with Tailscale, I guess.</p>
<p>I have the nagging feeling that Emacs-centric note taking wouldn&rsquo;t work great for me if I were dealing with a commute or other scenarios where mobile access is more important. Yes, there are beorg, <a href="https://plainorg.com">Plainorg</a>, and a few other options, but the syncing layer is the complicator. Some people seem to live fine just using git and maybe <a href="https://github.com/ryuslash/git-auto-commit-mode">git-auto-commit</a>, or just generally being more disciplined about their file use. I have generally felt better served by bespoke solutions, like you get with Obsidian, Things, and others. They&rsquo;re still subject to the occasional screwup, but I don&rsquo;t feel like I see them as often as I do with things that simply watch a file system and try to react appropriately.</p>
<p>I have been doing a little personal journaling about my preoccupations with mobile stuff. After tracing things back over the years, I recently realized that a lot of my fixation on getting stuff to work on a phone came from a pretty terrible time during the 2001 downturn.</p>
<p>All my teammates had been laid off and I was holding down a small network of Linux/open source sites that had previously involved a much larger team. If I didn&rsquo;t want things to get out of control I had to keep an eye on them over the weekend. That mentality caused a lot of lines to blur and it took years to unblur them. I was an early iPad enthusiast because I&rsquo;d internalized the idea that I should be able to do all kinds of work from anywhere at any time. Before that, I was really into the netbook thing because I could put an eeePC into a hip bag.</p>
<p>By the time I got to Puppet in 2012, working from home wasn&rsquo;t a novelty or an aspirational goal: I&rsquo;d been doing it for 13 or 14 years and was really glad to have an office to go to. Covid lockdown sparked a pretty bad reaction after the initial &ldquo;let&rsquo;s build a fire and sing songs while we wait for the drop ship&rdquo; phase because lines started blurring again.</p>
<div style="position: relative; width: 100%; padding-bottom: 56.25%;margin-bottom:20px;">
<iframe style="position:absolute; width:100%; height:100%;" src="https://getyarn.io/yarn-clip/1700a3aa-2d58-4411-a8cf-02cea98e8561/embed?autoplay=false&responsive=true"
frameborder="0">
</iframe>
</div>
<p>At the same time, just last week I had a pair of things to do in the afternoon and I&rsquo;d written some thoughts down about one of the events that I wanted to review while I was out of the house. Well &hellip; apparently SyncThing hadn&rsquo;t picked up on the changes before the machine I wrote them on went to sleep, so none of the other machines in the mesh &mdash; including a Synology I put SyncThing on for just these occasions &mdash; knew the notes existed.</p>
<p>At some point, &ldquo;oh, no problem, I&rsquo;ll just Tailscale in to the home network and WoL the Mac Studio so I can wake up SyncThing and then sync my changes down&rdquo; loses all its charm.</p>
<p>Ugh. Need to stop before I talk myself into doing something rash and disruptive.</p>
<h2 id="hugo-previews-while-working-in-ox-hugo">Hugo previews while working in ox-hugo</h2>
<p>I&rsquo;m not sure if there&rsquo;s a better way to do this, but this is working for me:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/start-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Run Hugo server with live reloading and open the server URL in a browser.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let*</span> <span class="p">((</span><span class="nv">root</span> <span class="p">(</span><span class="nv">projectile-project-root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">default-directory</span> <span class="nv">root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">compile</span> <span class="s">&#34;hugo server -D --navigateToChanged&#34;</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">run-at-time</span> <span class="s">&#34;3 sec&#34;</span> <span class="no">nil</span> <span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">                              <span class="p">(</span><span class="nv">browse-url</span> <span class="s">&#34;http://localhost:1313&#34;</span><span class="p">)))))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/stop-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Stop Hugo server.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">kill-compilation</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix</span> <span class="p">(</span><span class="s">&#34;H&#34;</span> <span class="o">.</span> <span class="s">&#34;Hugo&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;Start Hugo Server&#34;</span> <span class="s">&#34;S&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/start-hugo-server</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;Stop Hugo Server&#34;</span> <span class="s">&#34;s&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/stop-hugo-server</span><span class="p">))</span></span></span></code></pre></div>
<p>I get a little <em>Compiling</em> treatment in the modeline while the preview server is running. My browser reloads any time I save my work.</p>
<h2 id="what-happened-to-v">What happened to V</h2>
<p>I always sort of wondered <a href="https://www.vanityfair.com/hollywood/2023/05/the-v-files-legacy">what happened to V</a> between the miniseries and the regular series. I had a vague sense it had gotten worse, but I was also a teenager and didn&rsquo;t have a lot of critical faculties beyond &ldquo;this seems sort of sucky and boring now.&rdquo; Well, now I know: They got rid of the person who created it, made it cheaper, and tossed out what someone thought were the dumb parts, which were actually the good parts.</p>
<p>Interesting factoid:</p>
<blockquote>
<p>V was watched in more than 33 million homes, which amounted to 40 percent of all TV viewership. (The most popular series in America today, Yellowstone, averages 13.1 million viewers per episode.)</p>
</blockquote>
<p>I recently tried to dig up what&rsquo;s considered &ldquo;good numbers&rdquo; in the streaming era and didn&rsquo;t get many satisfying answers. Seeing that a modern phenomenon like <em>Yellowstone</em> pulls about 40 percent of V&rsquo;s numbers is helpful. <em>V</em> was hyped all to hell at the time, so its &ldquo;television special event&rdquo; status probably skews things a little. (The <em>M*A*S*H</em> finale did 105.97 million total viewers, and that record may be impossible to break as streaming-driven atomization deepens.)</p>
<h2 id="the-phony-solidarity-of-the-american-pundit-class">&ldquo;The Phony Solidarity of the American Pundit Class&rdquo;</h2>
<p>I got to <a href="https://www.thenation.com/article/society/jordan-neely-pundits/">this post in The Nation</a> after it sat on the read later pile for a while.</p>
<p>It&rsquo;s very strange to see the post-2016 realignments continuing apace. This particular link targets the slice of the center-left-to-center-right commentariat that has learned to talk about &ldquo;working people.&rdquo;  That tic &mdash; the &ldquo;won&rsquo;t somebody think of the working people&rdquo; tic &mdash; feels symptomatic of a kind of <a href="/posts/2022-06-20-elite-capturehttpsmicroblogbooks-by/">elite capture</a> all its own.</p>
<p>I wrote a few years ago:</p>
<blockquote>
<p>&ldquo;I have a lot of time for some heterodox thinkers. I wish &lsquo;heterodox&rsquo; was narrow-able to something less broad than &lsquo;a coalition of middle class trolls, rebadged culture warriors, people who hate how much they get ratioed, and well-meaning independent thinkers.&rsquo;&rdquo;</p>
</blockquote>
<p>I think I may need to retract that. I was going through the podcast searching for an episode and saw a few descriptions here and there that tell me &ldquo;heterodox&rdquo; has stopped being a word one lands on after casting about for a better one, and has become a sort of branding exercise.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-03</title>
      <link>https://mike.puddingtime.org/posts/2023-06-03-daily-notes/</link>
      <pubDate>Sat, 03 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-03-daily-notes/</guid>
      <description>Poking at Mimestream. Picking at Emacs.</description>
      <content:encoded><![CDATA[<h2 id="poking-at-mimestream">Poking at Mimestream</h2>
<p>I started beta testing Mimestream last year because &ldquo;mail client.&rdquo; It flipped to v1 recently and is having one of those Mac Commentariat moments.</p>
<p>My initial take was &ldquo;oh, another <a href="https://mailplaneapp.com">Mailplane</a>,&rdquo; but that&rsquo;s not right. It&rsquo;s not a browser app. It&rsquo;s a real app, and it does some helpful things if you&rsquo;re a Gmail user, like making filters more accessible. Because it is using the Gmail API and not IMAP it also feels super quick and responsive.</p>
<p>I still don&rsquo;t completely understand the effusive enthusiasm for it: No plaintext options, no local URL scheme or scripting interface, and for whatever reason the URLs you can get out of it point back to the Gmail web app instead of Mimestream. (I think that&rsquo;s set to change.)</p>
<p>On plaintext: I prefer to start with the plaintext version of any message, and I prefer to send in plaintext. If I feel the need to flip into rich/HTML mail mode I will, and I don&rsquo;t mind having to hit a key to get the HTML version of a mail if it means getting to start with the more calming plaintext alternative.</p>
<p>On the local URL scheme: I don&rsquo;t like living out of my inbox, and I don&rsquo;t like making tasks out of mails that don&rsquo;t include a link back to the message. When I turn an email into an action, I want a link back to the message, I don&rsquo;t want to copy the entire mail into my todo system.</p>
<p>On the scripting interface: It looks like there&rsquo;s a single Shortcuts action available right now, which is promising in its own way.     Where there&rsquo;s one there could some day be more. Most days I&rsquo;d rather have an AppleScript dictionary, but I get that Shortcuts are sort of the populist middle way between AppleScript and Automator.</p>
<p>In any event, until the app has more ways to talk to the rest of my apps, I&rsquo;m a gentle no. I have the sense that the team behind it has correctly identified that email clients have a lot of baggage that needs to be left behind, but it&rsquo;s a little too spare for my tastes. I don&rsquo;t think &ldquo;step up from the native Gmail interface&rdquo; is what I am after.</p>
<p>Since <a href="/posts/2023-04-25-daily-notes/#mail-restlessness-alights-on-mailmate">discovering MailMate</a> and <a href="/posts/2023-05-02-finding-an-org-contact-record-s-emails-in-mailmate/">figuring out how to work it into plaintext workflows</a>, I&rsquo;ve been enjoying its whole &ldquo;GUI mutt for the 21st century&rdquo; vibe.</p>
<h2 id="quit-picking-at-it">&ldquo;Quit picking at it&rdquo;</h2>
<p>This morning I was working on the bit about Mimestream and did a quick save of my <code>blog.org</code> file. I&rsquo;m used to seeing the name of the Markdown version of the post flash by in the minibuffer as org-hugo exports the org markup to the posts directory. Huh. So I made a quick change to dirty the buffer and saved again. Still nothing.</p>
<p>Huh &hellip; huh. Oh &hellip; I did refactor my <code>config.org</code> file! Maybe &hellip; no. That wasn&rsquo;t it.</p>
<p>Well &hellip; maybe &hellip; no, restarting didn&rsquo;t help.</p>
<p>Around and around for, I dunno, 5-7 minutes before breaking down and Googling and realizing that at some point I&rsquo;d tidied away this business at the bottom of my blog file:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="gh">*</span><span class="ni"> COMMENT</span><span class="gs"> Local Variables :ARCHIVE:</span>
</span></span><span class="line"><span class="cl"><span class="c"># Local Variables:</span>
</span></span><span class="line"><span class="cl"><span class="c"># eval: (org-hugo-auto-export-mode -1)</span>
</span></span><span class="line"><span class="cl"><span class="c"># End:</span></span></span></code></pre></div>
<p>Just &hellip; the thing that puts the buffer in auto-export mode and I&rsquo;d fiddled with it and it broke.</p>
<p>And a few days ago I decided to play around with spell-checking engines. Why? I don&rsquo;t know. Somebody said one was better. It also tripled the amount of time it took to open files. Why? I don&rsquo;t know. I didn&rsquo;t even bother searching to figure out if that was <em>true</em>, because I just intuited what was going on by where the minibuffer was hanging when I opened a file, undid the change, and with the minor exception of losing some custom words got on with my newly re-accelerated file opening life.</p>
<p>I think this might be the most built up I&rsquo;ve ever had Emacs, but I&rsquo;m also doing much less with it that isn&rsquo;t just writing, coding, or managing todos. Brief experiments with mail, RSS, and Mastodon all went by the wayside pretty quickly, so maybe it makes sense that I&rsquo;m fiddling with the core functionality more.</p>
<p>I think I&rsquo;m also ready to just start working again. Like, the knife is plenty sharp. I&rsquo;ve settled into some core day-to-day tools that have been just great for doing the things I do to provide structure for myself during this period. I felt a little like a dog endlessly circling before lying down on the question of how to best take notes before taking a cue from something I figured out as I was working on my plaintext CRM, which was &ldquo;work out the convention, then scaffold it into the capture process such that you don&rsquo;t ever think about the convention again, but know it will be there for you.&rdquo; Note-taking being a current site of influencer struggle, it took parallel work in a different kind of workflow to get me to hear through the noise and pick out the analogies between worfklows.</p>
<p>But having gone through that process &mdash; having circled seemingly endlessly &mdash; when I sit with how I feel about all the fiddling and goofing around, I realize the last time I felt like this I was a tech journalist getting paid a decent amount of money to goof off with Linux. It&rsquo;s probably why I&rsquo;m so impatient with tech influencers and tech bloggers today:</p>
<p>You read a review for a camera or tool and the use cases feel like they&rsquo;re all &ldquo;how does this work for someone whose job it is to review things,&rdquo; vs. &ldquo;how does this work for someone who has to do other things.&rdquo; The obsessive quest to prove that iPads could be &ldquo;serious computers,&rdquo; for instance &mdash; with the benchmark for &ldquo;seriousness&rdquo; being &ldquo;I can automate the process of making screenshots that document how to automate making screenshots so I can blog about the iPad&rsquo;s fundamental seriousness&rdquo; &mdash; felt like a &ldquo;content person&rsquo;s&rdquo; obsession. That&rsquo;s not to say that tech journalists, bloggers, and influencers don&rsquo;t have work to do &hellip; it&rsquo;s just that they necessarily have a conception of &ldquo;usefulness&rdquo; that is derived from what they have to do all day, which is not what most people who have to use computers to get work done have to do all day.  <em>Most people</em> do not need to know how to make screenshots at scale. The fact that your niche blog about Mac automation is heavily dependent on scaled automation of screenshot production <em>and</em> is very successful does not make scaled screenshot production any more imperative for the rest of us.</p>
<p>But even still I sort of get it.</p>
<p>For a certain kind of person (me among them), there is something mesmerizing about the kind of hyper-competence good automation or tech mastery suggests. It&rsquo;s like watching a magic trick, or a longboard dancer, or a woodworking show. One of my favorite sysadmins was incredibly fun to watch at work: all the tmux panes on full-screened terminals on dual monitors, hand never straying to the mouse, sitting cross-legged on his tall chair in front of his elevated desk. It was like watching a levitating octopus in a hoodie running a nuclear power plant.</p>
<figure class="rt-img"><img src="/img/delta-cafe-table.jpg"
    alt="A wooden table in a cafe in partial shadows. Blue wall. Decorative red enamel plate." width="320"><figcaption>
      <h4>Delta Cafe</h4>
    </figcaption>
</figure>

<p>The past several months, bereft of much to do but the dull and repetitive administrivia demanded by recruitment automation, punctuated by hurry-up-and-wait interview processes, it was sort of fun to sit and watch tech magic tricks and obsess on the relative efficiency of assorted modes of interaction with computers.</p>
<p>But now, knowing that this period is finally winding down, I&rsquo;m trying to think about what it&rsquo;s like when I&rsquo;m just trying to use a computer to get things done when I&rsquo;m <em>not</em> being very pointed about just goofing off and resting.  Like, &ldquo;oh, it&rsquo;s time to join a meeting, and I just restarted Emacs but it&rsquo;s bombing because when I added the config change that worked perfectly fine live, I dropped a paren,&rdquo; or &ldquo;oh, I forget to make sure that all the config for that package I decided not to use is untangled.&rdquo; With enough picking, your carefully curated, meticulously optimized trusted system stops being trustworthy. It just becomes this thing that breaks when you really need it to just work, but thanks to all the picking and fiddling it isn&rsquo;t just working, so you end up punting and using Apple Notes. Or if you&rsquo;re me and are still living out patterns established when you were a for-real journalist in the time before there were laptops, you grab a reporter&rsquo;s notebook out of the box of them you keep on hand and start scribbling.</p>
<p>It&rsquo;s a little interesting to me that as I began to feel that mounting sense of unease about all the picking and fiddling and &ldquo;what did I just change that is making this previously reliable thing break&rdquo; and began to pare things down, archive experimental chunks of my config, and just generally sit on my hands until the urge to monkey around passed, I started grabbing my camera on the way out the door again, <a href="/posts/2023-05-14-daily-notes/#picture-taking-dot-i-m-not-doing-it-much-dot">after a long period of not doing that much</a>.</p>
<p>Huh. Maybe there&rsquo;s somewhere non-self-defeating my creative energy can go.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Leuven is more pleasant than I thought it would be.</title>
      <link>https://mike.puddingtime.org/posts/2023-05-29-leuven/</link>
      <pubDate>Mon, 29 May 2023 20:40:59 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-29-leuven/</guid>
      <description>I don&amp;rsquo;t want to be soothed any longer.</description>
      <content:encoded><![CDATA[<p>There are these corners of the computing world that sort of jump out at me now and then because they&rsquo;ve been around forever, seem immune to whatever is the current sensibility and feel very much to be products of their own &hellip; <em>thing</em>, whatever that is.</p>
<p>Like, all the Emacs themes that have been around for as long as Emacs has had themes &ndash; since Emacs 20? They have sort of odd names, and you get this sense that a lot of them predate the sort of web-driven popularization of color science. Like, someone thought it&rsquo;d be cool to make a theme where everything is just a shade of blue, and call it &ldquo;Dreams of Blue,&rdquo; or &ldquo;poindexter-blue&rdquo; or what have you. There&rsquo;s also some primitivism or nostalgia. The ones that are meant to remind you of amber monochrome monitors. Or WordPerfect 5.</p>
<p>They predate stuff that to my mind is sort of modern and seems scientific &ndash; Solarized and Dracula jump to mind, and catppuccin is big lately. Or the things that have come out of the UX departments at big tech companies, like all the variants on Material. You know where Material is coming from, because Google probably issued a press release about it to draw attention away from its latest EU privacy violation settlement.</p>
<p>Anyhow, there are a bunch of them and I&rsquo;ve been seeing them around forever, and sometimes they do things that strike me as perhaps <em>quaint</em>. Like, they use a shade I&rsquo;ve come to think of as &ldquo;commit pink&rdquo; or &ldquo;commit green,&rdquo; dowdy shades that predate modern sensibilities &hellip; that perhaps don&rsquo;t have the whiff of <em>scientific soundness</em>. Tones and choices that do a little more to introduce a sense of structure than is currently popular.</p>
<p>At the same time, there&rsquo;s this unmistakable aura of <em>authority</em> just because they&rsquo;ve been around forever. Or at least I feel like I&rsquo;ve been scrolling past them forever. And core to Unix culture is that crushing deference to the patriarchs. The same thing you feel when you learn about man pages for the first time and it begins to occur to you that it took a lot of people a very, very long time to write that much documentation. The fact that so much of it is written in a sort of assumptive, referential style just adds to the sense you&rsquo;re reading the day journals of an obscure contemplative order.</p>
<p>Which brings me to Leuven, which I read about because someone on reddit asked for a good starting point for themeing org-mode, but which I feel like I have been seeing around forever.</p>
<p>Ordinarily, not my thing:</p>
<ul>
<li>It&rsquo;s a light theme. I thought I was all in on dark ones.</li>
<li>It&rsquo;s sort of contrasty. I thought I wanted low contrast ones.</li>
<li>Not exactly a <em>contemporary</em> palette. I&rsquo;m not sure how to describe the modern emphasis on things that are both vibrant and low contrast &ndash; or maybe I just did by typing that. Leuven doesn&rsquo;t do that.</li>
<li>It draws lines and boxes around things, in a way that feels sort of like when someone writes a console app that has an ASCII GUI. It uses background colors for headings and spelling errors.</li>
</ul>
<p>But all of that adds up to something that makes some kind of sense to me.</p>
<p>Like, a lot of modern themes go to words like &ldquo;soothing,&rdquo; posing that <em>contra</em> things like &ldquo;strain,&rdquo; or &ldquo;fatigue.&rdquo;</p>
<figure><img src="/img/leuven.jpg"
    alt="A screen shot of Leuven, a bright, contrasty Emacs theme."><figcaption>
      <h4>Leuven.</h4>
    </figcaption>
</figure>

<p>Okay, fair. I definitely agree that there are color schemes out there that cause strain and fatigue thanks to bad color choices, bad typography, etc.</p>
<p>But you know, another thing that causes fatigue and strain is trying to discern structure in a document using a palette designed to eliminate contrast. Turns out a few stark lines here and there do an admirable job of guiding the eye, aiding quantification, providing boundaries, creating a sense of anchors and space.</p>
<p>Now, to be fair, one problem the lo-contrast themers face is probably that they aren&rsquo;t in complete control of white space and typography, which can do a lot to put that sense of structure back in place. Or they&rsquo;re just neglecting to do it because someone picked some tones that are appropriately uwu, done some color science, and called it a day thinking their work is done.</p>
<p>After trying Leuven for a day, I found myself feeling a little more situationally aware and much less washed out. When its whole &ldquo;black text on white background&rdquo; thing got a little much, I used the brightness buttons to dial it down and was happy that its essential contrastiness still worked. Worked even better, in fact, because less detail got lost with the dimness.</p>
<p>It kind of reminds me of when I screwed something up with the lighting in my office. I had a bunch of Hues and tried out some sort of automation but they got quietly stuck in a very amber-toned place on the spectrum. So for weeks my office was &ldquo;well lit,&rdquo; but with a permanent orange-ish sundown tint. I couldn&rsquo;t figure out why it just felt soporific to go in there, or why it felt like <em>effort</em> to carry on a conversation.</p>
<p>Then one day Ben tried out some disco light app without bothering to make sure he was only targeting the lights in his room. After a few perplexed seconds of figuring out what had happened (it wasn&rsquo;t that hard &ndash; we shared a wall and the lights started going bananas just after he started blasting a Sophie album) I got into the Home app and reset all the lights to the tone I&rsquo;d set as &ldquo;normal&rdquo; years ago, and immediately felt the difference.</p>
<p>So, Leuven. Seems to have been around forever. I thought it was going to be a bit much, but actually find it to be &hellip; bracing. Energizing.</p>
<p><a href="https://github.com/fniessen/emacs-leuven-theme">Screenshots and instrux</a>.</p>
<p>In a similar vein, Prot&rsquo;s <a href="https://github.com/protesilaos/modus-themes">modus-vivendi and modus-operandi</a> themes.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-29</title>
      <link>https://mike.puddingtime.org/posts/2023-05-29-daily-notes/</link>
      <pubDate>Mon, 29 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-29-daily-notes/</guid>
      <description>More writing about a camera I both covet and find unfathomable. All in on Denote. Keycast for influencing and debugging. Succession ended with integrity.</description>
      <content:encoded><![CDATA[<h2 id="leica-q3">Leica Q3</h2>
<p><a href="https://baty.net/journal/2023-05-27">Via Jack Baty</a>, here&rsquo;s <a href="https://om.co/2023/05/26/whats-wrong-with-leica-q3/">Om Malik on &ldquo;What&rsquo;s Wrong with Leica Q3,&rdquo;</a> which, okay: &ldquo;introducing the flippy-tilty screen takes away from Leica’s uniqueness. The company has been able to charge more for offering less.&rdquo; Citing their monochrome cameras as an example of that is &hellip; a take.</p>
<p>Tilting screens add to the versatility of the device. That&rsquo;s all. They make certain situations easier to manage, especially with the kinds of things you want to shoot macro, and they give you more flexibility in street shooting situations where you don&rsquo;t want to have a camera up to your face.</p>
<p>A camera like a Q3, I&rsquo;d argue, <em>should</em> be making some concessions on design austerity, because the machines themselves exist for the times you can&rsquo;t take everything with you that you wish you could, so you&rsquo;re compromising and taking just one thing.</p>
<p>Now, he goes on to <a href="https://www.theverge.com/2023/5/25/23736639/leica-q3-camera-28mm-fixed-lens-compact-8k-availability-price-specs">point to the Verge review</a>, where it sounds like the implementation is lacking:</p>
<blockquote>
<p>&ldquo;&hellip; the worst part of the screen, aside from it looking like it’s just been grafted on and makes the camera appear and feel bulkier, is that there’s no groove or grip on its left side to dig your nail into or grab with your finger. It has grooves on its top and bottom, meaning you have to make a much bigger reach to move it.&rdquo;</p>
</blockquote>
<p>That doesn&rsquo;t sound great. I do like the way the Fuji X100V and X-T5 are built. It&rsquo;s a simpler, easier motion, sort of planting your thumb and kind of twisting each hand to get the screen undogged and moving. I don&rsquo;t like anything I need to pry open.</p>
<p>Om&rsquo;s concern that the Q3 &ldquo;design disaster&rdquo; is going to infect other Leica product lines didn&rsquo;t ring great with me because I don&rsquo;t like the button layout on the Q2 as well as I like it on an X100, or X-T. The Q3 looks more like a Fujifilm camera in that regard this time around (well, now the Leica people are <em>really</em> gonna hate it). Yeah, you have an extra target to distinguish when the camera is up to your face, but you figure it out.</p>
<p>I&rsquo;ll also admit that when it comes to a Q-series camera &ndash; $6k just to get in the door, then close to another $1k to get it fully provisioned &ndash; it&rsquo;s a little harder to smile and say &ldquo;well, they&rsquo;ll get it right in the next rev.&rdquo; I did that with three generations of Fujfilm X100s, but they hold their value about as well as a Leica (I checked a few generations and used street prices for <a href="/posts/2023-05-25-daily-notes/#leica-q3-arrives">my last post on the Q3</a>) so that&rsquo;s less of a sting.</p>
<p>Anyhow, I welcome the addition even if it sounds like it&rsquo;s imperfect.</p>
<p>Every time I&rsquo;ve tried to compare the Q-series to the X100-series, I walk away with a sense that the X100s are inferior on every spec (except the hybrid viewfinder), but manage to stay in the ring because they&rsquo;re scrappier and looser cameras.</p>
<p>The thing that blunts my joy about the Q-series is pretty similar to what makes me unhappy about very early Apple products and tools: There&rsquo;s a bias toward the austere that sometimes stifles. It was an easy matter for me, for instance, to perambulate between OS X and Linux for a period, because Apple was doing the &ldquo;slow layering&rdquo; thing and the customization ecosystem hadn&rsquo;t caught up yet. Once people figured out how to leverage the BSD userland and third party people began to figure out the new APIs, we were off and running.</p>
<p>Even a not-perfectly-realized tilt screen, and a reconfiguration of the control scheme to introduce more flexibility and easier one-thumb use while shooting, feels less to me like Violation of Holiest Ascetic Precepts and more like an opening up and loosening appropriate to a camera that manages to be both shockingly expensive <em>and</em> be the thing you shrug and grab when you can&rsquo;t take everything you&rsquo;d like, or make up your mind about what you need.</p>
<h2 id="succession-ended-with-integrity">Succession ended with integrity</h2>
<p>Spoiler culture is out of control, but &hellip; spoiler.</p>
<p><a href="/posts/2023-05-26-succession-finale-hot-take/">I wrote that Succession was a tragicomedy</a> and therefore needed to end a particular way to keep its integrity. It ended about the way I felt it should have, and even smeared a little spit on the rims of select audience brandy snifters with its elevation of the closest thing to a lens character had to a kind of hollow power that nonetheless commands deference from people newly laid low.</p>
<p>Tom Wambsgans disgusted you all along? You felt a warm glow when Shiv perforated him with as a grasping climber? Reminded you of that one VP you worked for who never fooled you but somehow fooled everybody else? Well, he&rsquo;s here to put a sticker on your forehead, and he doesn&rsquo;t need you to mean it when you hold his hand.</p>
<p>Who will win? The cockroach won. But it isn&rsquo;t even winning.</p>
<p>A reviewer referred to Roman&rsquo;s final little smile as &ldquo;twisted.&rdquo;  I think he was the only one of the three who knew enough to feel liberated. The other three siblings were clowns masquerading as serious people. Roman was the clown who knew better than any of it. He drives Kendall to rip of his own mask, then quietly declares them all shit. His comedic aspect is reunion with himself. His tragic aspect is the relationship he lost one of the few times he tried to play things straight.</p>
<p>With a good ending, it joins <em>The Wire</em>, <em>Breaking Bad</em>, <em>Mad Men</em>, <em>Justified</em>, <em>Halt and Catch Fire</em>, <em>Six Feet Under</em>, and <em>The Sopranos</em> in the &ldquo;stuck the landing&rdquo; club.</p>
<h2 id="denote-just-makes-sense-to-my-brain">Denote just makes sense to my brain</h2>
<p>Well, after a few days of fiddling and trying this and that, I think I&rsquo;m all in on Denote:</p>
<ul>
<li>No external dependencies</li>
<li>Convention-based naming</li>
<li>Portable</li>
<li>Simple</li>
</ul>
<p>&hellip; and an ecosystem is forming around it that respects its conventions but smooths out its UI. So if you want to just manage Denote via <code>dired</code>, you&rsquo;re welcome to do that. The fontification of Denote directories is enough to make the titles and tags clear when you&rsquo;re looking at a simple directory listing.</p>
<p>But there are also packages like <a href="https://github.com/namilus/denote-menu#">denote-menu</a> and <a href="https://github.com/mclear-tools/consult-notes">consult-notes</a> that provide light wrappers and convenience functions if you&rsquo;d like a cleaner view, where, for instance, the title, keywords, and date are all displayed in their own columns; and there are features that help quickly filter down your view based on keyword, etc.</p>
<p>I sort of want to compare it to what I admire about Markdown: Fine on its own, able to support more, probably you could go a little nuts trying to do more with it. I appreciate that it participates in the broader org ecosystem, and equally admire that you&rsquo;re welcome to use Markdown/YAML if that suits you.</p>
<p>This is occurring to me because I spent a bunch of time fiddling around with a few Denote wrappers over the weekend and ended up in that weird &ldquo;why did I do this&rdquo; state of mind where all the single-minded optimizing and tweaking felt sort of like a high-carb meal. Then I just opened up my notes directory in dired and realized Denote is great at its most basic.</p>
<p>If you use zsh, this will give you a colorized <code>ls</code> for a Denote directory, btw:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">dls<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    ls -1 <span class="p">|</span> <span class="nv">GREP_COLORS</span><span class="o">=</span><span class="s1">&#39;mt=1;32&#39;</span> egrep --color<span class="o">=</span>always <span class="s1">&#39;[0-9]{8}T[0-9]{6}&#39;</span> <span class="p">|</span> <span class="nv">GREP_COLORS</span><span class="o">=</span><span class="s1">&#39;mt=1;34&#39;</span> egrep --color<span class="o">=</span>always <span class="s1">&#39;__.*$&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span></span></span></code></pre></div>
<h2 id="keycast">keycast</h2>
<p>While I was watching Prot&rsquo;s Denote demo video I noticed his keystrokes and commands were echoed to the modeline, which seemed pretty cool, and was also helpful to me trying to figure out what on Earth he was doing.  Then it occurred to me this afternoon that one thing I&rsquo;ve been struggling with as I try to <a href="/posts/2023-05-24-daily-notes/#batteries-included-situations-and-their-discontents">untangle what&rsquo;s going on in Doom</a> with some of the stuff I&rsquo;ve wanted to fix, has been <em>what&rsquo;s going on in Doom</em> when I use certain commands.</p>
<p>Like &hellip; previewing a file under point, which you invoke with <code>CTRL SPC</code>.</p>
<p>The sort of low-rent debug method I&rsquo;ve observed is that people just ripgrep their <code>~/.emacs/</code> for any mention of <code>C-SPC</code> to see what&rsquo;s bound to that.</p>
<p>Well, joke was on me:</p>
<p>Maybe it was <code>ivy-call-and-recenter</code>, maybe <code>company-complete-common</code>, prolly not <code>org-agenda-show-and-scroll-up</code>. PROBABLY <code>+vertico/embark-preview</code>, but who can say in these troubled times?</p>
<p>So I went looking for whatever it is Prot was using, and found something called <a href="https://github.com/tarsius/keycast">keycast</a>.</p>
<p>Its obvious utility is for screencasting, but it also has <code>keycast-log-mode</code>, which sends all your commands to a buffer, and which helped me establish it was, indeed, <code>+vertico/embark-preview</code>.</p>
<p>To get it to work in Doom Emacs you need to add something to your config:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">use-package</span> <span class="nv">keycast</span>
</span></span><span class="line"><span class="cl">  <span class="nb">:config</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">define-minor-mode</span> <span class="nv">keycast-mode</span>
</span></span><span class="line"><span class="cl">    <span class="s">&#34;Show current command and its key binding in the mode line (fix for use with doom-mode-line).&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">:global</span> <span class="no">t</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">if</span> <span class="nv">keycast-mode</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">add-hook</span> <span class="ss">&#39;pre-command-hook</span> <span class="ss">&#39;keycast--update</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nv">remove-hook</span> <span class="ss">&#39;pre-command-hook</span> <span class="ss">&#39;keycast--update</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">&#39;global-mode-string</span> <span class="o">&#39;</span><span class="p">(</span><span class="s">&#34;&#34;</span> <span class="nv">keycast-mode-line</span><span class="p">)))</span></span></span></code></pre></div>
<p>There are a bunch of issues mentioning problems with Doom and Spacemacs all over the place, but this is what worked for me, here in late May, 2023.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Succession Finale Hot Take</title>
      <link>https://mike.puddingtime.org/posts/2023-05-26-succession-finale-hot-take/</link>
      <pubDate>Fri, 26 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-26-succession-finale-hot-take/</guid>
      <description>Least hot of all takes, but the Recap People are wrong and someone needs to say it.</description>
      <content:encoded><![CDATA[<p>The feeds are rife with &ldquo;what will happen?&rdquo; posts from entertainment reporters, and they are all wrong because they are all premised on the idea that something has to &ldquo;happen&rdquo; that offers &ldquo;resolution.&rdquo;</p>
<p>As a functioning tragicomedy, <em>Succession</em> is supposed to do two things:</p>
<ul>
<li>Destroy its heroes, preferably by their own hands.</li>
<li>Restore the circle/community/relationships to whatever the status quo was at the beginning.</li>
</ul>
<p>&ldquo;Destroy&rdquo; can mean a lot of things &ndash; they&rsquo;re all going to go out billionaires no matter what, and I doubt anyone dies or gets blinded &ndash; so let&rsquo;s expand the definition to include things like &ldquo;remain ignorant of and alienated from your own fundamental nature.&rdquo;</p>
<p>&ldquo;Restoration,&rdquo; in a tragicomic context, doesn&rsquo;t have to be a good thing. Formally, all that&rsquo;s required is that the broken circle be repaired.</p>
<p>Premium TV offers two paths out in any finale situation:</p>
<h2 id="model-1-resolution--comedy">Model 1: Resolution (Comedy)</h2>
<p>Comedies are about restoring circles, communities, relationships, families, the self etc.</p>
<p>Examples of comedic resolutions include <em>Breaking Bad</em>, <em>Justified</em>, <em>Mad Men</em>, <em>Lost</em>, and <em>Game of Thrones</em>. This is a wildly uneven collection because half of them were focused on resolving characters and half of them were focused on resolving stories. The first three are <em>good</em> resolutions, the last two are <em>bad</em> resolutions. That&rsquo;s because the first three are comedies at their core, and the latter two didn&rsquo;t really know what they were (well, <em>Lost</em> understood itself to be a shaggy dog story).</p>
<p><em>Breaking Bad</em> wasn&rsquo;t purely tragic: It restored Walt to himself, and it did what it could to restore the core relationship of the series. It might count as a tragicomedy.</p>
<p><em>Justified</em> allows Raylan to defy the song and actually leave Harlan alive.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/IPhR4c3jwl8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p><em>Mad Men</em> restores Don Draper to his essential self &ndash; it doesn&rsquo;t matter that it&rsquo;s to our collective detriment.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/GxtZpFl3pPM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<h2 id="model-2-life--tragedy">Model 2: Life (Tragedy)</h2>
<p>Tragedies are about the undoing of the protagonist, hero, community, etc.</p>
<p>Examples of tragic resolutions include <em>The Sopranos</em>, <em>The Wire</em>, and <em>Six Feet Under</em>.  This is a less uneven collection, and you&rsquo;re sort of left to stretch definitions. Tony is the tragic figure of <em>The Sopranos</em>, for sure. The entire city of Baltimore &ndash; 21st century America &ndash; is the tragic figure in <em>The Wire</em>.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/3Xpxl_tSYiQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>We&rsquo;re all the tragic figures in <em>Six Feet Under</em>.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/qD6Y7d4hIW4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>&ldquo;Oh, but <em>Six Feet Under</em> made dying seem sort of normal, so if you&rsquo;re happy-crying it&rsquo;s comedy?&rdquo;</p>
<p>There&rsquo;s a tendentious, very Buddhist reading one could entertain, but no &hellip; overruled.</p>
<p>The only way out for <em>Succession</em> if it is to meet its dramatic obligations is to thwart the children <em>and</em> restore them to the status quo established when we first met them: Alienated, broken humans defined by the swirling voids and directionless appetites at the center of their beings, poisoned and twisted by their father; a kennel of defective greyhounds, and aristocracy&rsquo;s best argument against itself.</p>
<p>Any victories will be Pyrrhic. Any resolutions will be a sop for The Professional Recap people.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-25</title>
      <link>https://mike.puddingtime.org/posts/2023-05-25-daily-notes/</link>
      <pubDate>Thu, 25 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-25-daily-notes/</guid>
      <description>The Leica Q3 and some absurd back-of-napkin X100v comparisons, Denote silos.</description>
      <content:encoded><![CDATA[<h2 id="leica-q3-arrives">Leica Q3 arrives</h2>
<p><a href="https://www.dpreview.com/reviews/leica-q3-initial-review">DPReview&rsquo;s initial review of the Leica Q3</a> says:</p>
<ul>
<li>Tilt screen</li>
<li>Actual ports (USB-C, micro-HDMI)</li>
<li>Bigger sensor</li>
<li>Some rearranged buttons</li>
<li>Option for wireless charging</li>
<li>Hybrid AF</li>
<li>$5995</li>
</ul>
<p>They stuck with the previous 28mm lens and are standing by digital crop if you want to get to tighter focal lengths. I&rsquo;d still prefer a native 35mm, but you&rsquo;d lose a little &ldquo;take anywhere&rdquo; versatility.</p>
<p>Anyhow:</p>
<p>The tilt screen is very welcome, and will make the lens&rsquo;s macro mode more useful/practical.</p>
<p>The rearranged buttons caught my eye, because the Q2&rsquo;s arrangement felt pretty unergonomic, and it was easy to accidentally press them with your face when shooting in portrait orientation. DPReview says it helps:</p>
<blockquote>
<p>In addition to the new tilting touch panel, the buttons for &lsquo;Menu&rsquo; and &lsquo;Play&rsquo; and a custom function button have been moved, now appearing on the right to join the four-way controller. Having used both cameras, within a few hours of shooting the new one I found the layout to be a marked improvement that let me reach all the buttons with just my right thumb while the left hand stayed on the lens ready for the next shot. It&rsquo;s a much faster and less cumbersome arrangement that let me get in and out of menus quicker.</p>
</blockquote>
<p>Having a USB-C port is welcome. The wireless charging part sounds like a nice-to-have that makes it a little nicer to just keep near the door.</p>
<p>All in all, sounds like a nice step forward for the Q series, and with the tilt screen it sort of does become the $5995 Fujifilm X100V you always wished would happen, with its 35mm digital crop still outresolving the X100V by a few megapixels.</p>
<p>Speaking of the X100V, <a href="/posts/2020-12-03-on-the-leica/">I did compare it with the Q2</a> a few years ago:</p>
<blockquote>
<p>I don’t think the Q2 is four times the camera an X100V is, and I can’t think of anyone I’d be in the position of recommending a camera to for whom I’d recommend it as the better choice: Dollar for dollar, the X100V is a much better camera for almost everybody interested in a premium compact camera. At the same time, now that I own the Q2 and have not returned it or sold it in a fit of guilt, I wouldn’t easily part with it: I love shooting with it, love what I get out of it, and expect to keep it for a long time. The only reason it is not my only camera comes down to its fixed, very wide lens, which makes portraits and some outdoor photography a relative challenge.</p>
</blockquote>
<p>One thing that changed a lot for me since writing that up was the arrival of IBIS in the Fujifilm ILC lineup. It wasn&rsquo;t something I weighted as heavily then, but definitely started weighting more heavily as I learned how much it expanded my horizons. With the changes showing up in the Q3, I&rsquo;ll just say that the gap between the X100 series and the Q series has narrowed. There&rsquo;s still 4,200 actual dollars of daylight between the two to account for, but the Q3 is a more flexible camera than its predecessor.</p>
<p>So:</p>
<ul>
<li>A bit shy of 2x the resolution, uncropped sensor</li>
<li>Faster, more versatile lens</li>
<li>Image stabilization</li>
</ul>
<p>I&rsquo;m not sure how to go about doing a parts list that would account for the differences and leave me with some objective calculation of the brand tax you&rsquo;re paying, but it&rsquo;s easy to imagine an X100 Pro series because we have that in the form of an X-Pro3 with the 23mm/f2 Fujicron, and MSRP on that rig is around $2,300. So, following this reasoning, we&rsquo;ve got about $3,300 to account for. You&rsquo;re still a stop shy on the lens and don&rsquo;t have a macro mode, you&rsquo;re still trading away depth of field and resolution thanks to the sensor difference, you still don&rsquo;t have image stabilization.</p>
<p>Okay &hellip; so maybe we stick the newer Fujiflm XF23mm/f1.4WR on our theoretical X100 Pro. That&rsquo;s $500 over the 23/f2. We&rsquo;re down to $2,800 difference. We&rsquo;re still contending with the sensor difference and IBIS. Tough to call.</p>
<p>On IBIS, the Fujifilm X-T4  was an incremental change over the X-T3, and it came in at $200 more MSRP, with IBIS being one of the larger differentiators. The X-T5 introduced a much larger (but still APS-C) sensor, but kept the MSRP. So &hellip; we&rsquo;re down to $2,600 difference, and still have to account for the sensor, which sort of throws the math on the lens, too. I&rsquo;m not sure how to square that. Call it $500.</p>
<p>So, we&rsquo;ve found about $1,300 in component differences (IBIS, lens, sensor)? Leaving us with around $3000 to account for.</p>
<p>I am assuming the red dot involves pigments mixed from the blood of unicorns.</p>
<p>I kid.</p>
<h2 id="silos-and-denote">Silos and Denote</h2>
<p>Last night I was finishing up some note cleanup in Denote and realized that a lot of the stuff I&rsquo;d atomized from my job search was sort of interesting and useful, but not in a day-to-day way. And that I wanted to have some way to segregate, eventually, &ldquo;work&rdquo; from &ldquo;personal.&rdquo;</p>
<p>Denote has a siloing feature that lets you keep separate directories of Denote notes that can&rsquo;t see each other. If you operate in one of those directories, all your Denote activities (creating a new note, etc.) treat that directory as home. Outside the context of any particular directory, your default Denote directory is home. There are a few other features related to suggested keywords in those silos, but for now it&rsquo;s enough to be able to make broad distinctions.</p>
<p>There&rsquo;s also a useful function for <a href="https://protesilaos.com/emacs/denote#h:0f72e6ea-97f0-42e1-8fd4-0684af0422e0">pre-selecting a silo then running a Denote command targeted at it</a>, so you can be out and about elsewhere in the filesystem and dispatch information to different silos as needed.</p>
<p>For now I&rsquo;m siloing by default/personal and &ldquo;career,&rdquo; which is what I am calling all the interview notes, work-oriented biographical stuff and generic management writing I&rsquo;ve had to do. I&rsquo;ll probably put my job search log, interview notes, and other stuff that&rsquo;s currently all in a monolith into that directory as well, for long-term storage. And eventually there will be a &ldquo;work&rdquo; silo for day-to-day work stuff.</p>
<p>I vacillated about the segregation of big-picture career-related writing from day-to-day work writing, but realized most of that career stuff is a prompt. Interesting to read through, and good grist for first-30-day planning and thinking, but not pertinent to the day-to-day. If I end up feeling like some part of it is, I&rsquo;ll just pull it into a metanote as a link.</p>
<p>I guess the other Denote thing of, er, note, was that Prot&rsquo;s whole &ldquo;this is also a good way to just learn Emacs&rdquo; direction with Denote got a workout tonight. I watched his demo video, where he marked a selection of files by regexp in dired, then made the unmarked ones disappear from view in the directory. It took three or four scrub-throughs to catch which commands he was using to make that happen, because he was just doing it the way you do when something is deep in your muscle memory.  But eventually I caught it all &ndash; <code>%m</code> to mark by regexp, <code>t</code> to invert the selection, then <code>k</code> to &ldquo;kill&rdquo; the lines (but not <em>kill</em> kill them, just hide them). It sounds like a lot, but most of my Doom menus are two or three keystrokes deep. Once I had it, it was a lot easier to narrow and triage my collection and get everything dispatched into a silo.</p>
<h3 id="update-on-that-dot-dot-dot">Update on that &hellip;</h3>
<p>One thing I didn&rsquo;t like so much about that &ldquo;just use the native commands&rdquo; approach was that in Doom, you&rsquo;ve got to switch in and out of evil mode to use all of dired&rsquo;s keystrokes. I ended up grabbing <a href="https://melpa.org/#/dired-narrow">dired-narrow</a>, which dynamically narrows a dired buffer, and then recorded a quick macro to restore the buffer view (using the native dired command, which would need a shift out of evil mode):</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/dired-unnarrow</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">evil-emacs-state</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nf">execute-kbd-macro</span> <span class="p">(</span><span class="nv">kbd</span> <span class="s">&#34;g C-z&#34;</span><span class="p">)))</span></span></span></code></pre></div>
<p>Then I added <code>dired-narrow</code> and my new macro to my Denote menu structure:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:nv</span> <span class="s">&#34;n d&#34;</span> <span class="no">nil</span> <span class="c1">;; Doom has deft here, so we have to nil it out first</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix-map</span> <span class="p">(</span><span class="s">&#34;n&#34;</span> <span class="o">.</span> <span class="s">&#34;notes&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix</span> <span class="p">(</span><span class="s">&#34;d&#34;</span> <span class="o">.</span> <span class="s">&#34;Denote&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;ripgrep&#34;</span> <span class="s">&#34;/&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-rg-search</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Backlinks&#34;</span> <span class="s">&#34;b&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-link-backlinks</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Move subtree&#34;</span> <span class="s">&#34;c&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-org-copy-subtree</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;add keywords&#34;</span> <span class="s">&#34;k&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-keywords-add</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;remove keywords&#34;</span> <span class="s">&#34;K&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-keywords-remove</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Move subtree&#34;</span> <span class="s">&#34;m&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-org-move-subtree</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;New note&#34;</span> <span class="s">&#34;d&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Rename with frontmatter&#34;</span> <span class="s">&#34;r&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-rename-file-using-front-matter</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Pick silo, then command&#34;</span> <span class="s">&#34;s&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-pick-silo-then-command</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Narrow dired view&#34;</span> <span class="s">&#34;n&#34;</span> <span class="nf">#&#39;</span><span class="nv">dired-narrow</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Unnarrow dired view&#34;</span> <span class="s">&#34;u&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/dired-unnarrow</span>
</span></span><span class="line"><span class="cl">         <span class="p">)))</span></span></span></code></pre></div>
<p><em>Technically</em> I guess those narrow/unnarrow commands belong in some other hierarchy, but I will tend to use them when I&rsquo;m doing stuff with Denote, and they can live in more than one context if I wish.</p>
<p>I have the sense there are other things I could be using, like Embark, but I am still struggling with the whole Vertico ecosystem, so one thing at a time.</p>
<h3 id="update-to-the-update">Update to the update</h3>
<p>With Vertico/Embark on Doom, I don&rsquo;t need dired narrow to get what I was after:</p>
<ul>
<li><code>SPC .</code> to start finding files</li>
<li>Once things are narrowed, <code>C-c ;</code> moves all the candidates into their own buffer</li>
<li>Do stuff</li>
<li><code>q</code> to quit the transient buffer</li>
</ul>
<p><video width="100%" controls><source src="/img/embark_collect.mp4" type="video/mp4">
Your browser does not support the video tag.</video></p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-24</title>
      <link>https://mike.puddingtime.org/posts/2023-05-24-daily-notes/</link>
      <pubDate>Wed, 24 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-24-daily-notes/</guid>
      <description>Cleaning up results in literate config files. Portland and the JOHS. Some Doom discontent.</description>
      <content:encoded><![CDATA[<h2 id="cleaning-up-my-literate-config-file">Cleaning up my literate config file</h2>
<p>I like keeping my Doom Emacs config file in config.org. I didn&rsquo;t like the <code>#RESULTS</code> drawers cluttering up the file, especially for longer functions with copious output.</p>
<p>The way to selectively disable that for a given src block is to append <code>:results output silent</code> to the block opener, e.g.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+begin_src</span> <span class="nv">emacs-lisp</span> <span class="nb">:results</span> <span class="nv">output</span> <span class="nv">silent</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">vertico-reverse-mode</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">vertico-count</span> <span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">vertico-resize</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+end_src</span></span></span></code></pre></div>
<p>The way to do it for an entire file is to put <code>#+property: header-args :results silent</code> at the top.</p>
<p>You can still evaluate a given src block by tapping return on either the first or <code>#+end_src</code> lines, but the output goes to the minibuffer instead of a <code>#RESULTS</code> drawer. If you need to really read through the output, there&rsquo;s always the <code>*Messages*</code> buffer, or tacking <code>:results output replace</code> onto the src block opener to get your <code>#RESULTS</code> drawer back.</p>
<h2 id="johs-and-the-city">JOHS and the city</h2>
<p>The city and the county are <a href="https://www.wweek.com/news/city/2023/05/23/city-council-will-vote-to-extend-joint-office-agreement-with-multnomah-county-to-allow-for-further-negotiations-again/">again considering extending the JOHS for just a year</a>. I still don&rsquo;t understand the division of labor there. It&rsquo;s the worst of both worlds: The city drops a pallet of money on the county&rsquo;s dock, but remains on the hook for the tactical response. The county takes the money, claims the high ground of long-term, strategic perspective, then has an effective veto over elements of the city&rsquo;s tactical response even as it fails to allocate half its budget, and actual providers on the ground <a href="https://www.wweek.com/news/2023/04/05/joint-office-of-homeless-services-contracting-woes-create-instability-for-survivors-of-domestic-violence/">struggle to retain help with a living wage, or even get decent contracts through the JOHS</a>.</p>
<p>If the JOHS were a <em>joint</em> office, performing some actual coordinative role, maybe it&rsquo;d be different. But it&rsquo;s a county office: Its reporting structure roles up to the chair, it uses county administrative structures and processes, and it is beholden to county leadership. It&rsquo;s also profoundly dysfunctional, leaving millions and millions of dollars on the table, and failing in its most basic data-gathering, reporting, and contracting commitments.</p>
<p>But we&rsquo;re in one of those situations where the dysfunction seems to be politically expedient. The city and county are at fundamental odds on homelessness policy, and the people in this policy area at the county level view themselves as a sort of superego governing the city&rsquo;s id. Once one partner in a relationship predicates their participation on the notion that they&rsquo;re mostly there to keep their partner from doing something they don&rsquo;t like, the relationship is sunk. Burn it down and start over with a new charter.</p>
<h2 id="batteries-included-situations-and-their-discontents">Batteries-included situations and their discontents</h2>
<p>I think I&rsquo;ve hit the first thing using Doom Emacs that is not sitting well with me. Well, let&rsquo;s scope out a little: I think I&rsquo;ve hit the first time something <em>that is inevitable</em> with &ldquo;batteries-included&rdquo; situations has annoyed me as I&rsquo;ve used Doom in particular.</p>
<p>Emacs has a bunch of &ldquo;completion frameworks,&rdquo; which control what happens when you go to issue a command, open a file, look up a definition or whatever. The last time I used Emacs a lot <a href="https://github.com/emacs-helm/helm">Helm</a> was sort of the big deal, but since then plenty of others have come along. If you look in the part of Doom&rsquo;s config that offers pre-packaged completion frameworks, you get several choices:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="nb">:completion</span>
</span></span><span class="line"><span class="cl"><span class="nv">company</span>           <span class="c1">; the ultimate code completion backend</span>
</span></span><span class="line"><span class="cl"><span class="c1">;; helm              ; the *other* search engine for love and life</span>
</span></span><span class="line"><span class="cl"><span class="c1">;; ido               ; the other *other* search engine...</span>
</span></span><span class="line"><span class="cl"><span class="c1">;; ivy               ; a search engine for love and life</span>
</span></span><span class="line"><span class="cl"><span class="nv">vertico</span>           <span class="c1">; the search engine of the future</span></span></span></code></pre></div>
<p>Which, so far so good. As near as I can parse the conversation, newer completion frameworks like <a href="https://github.com/minad/vertico/blob/main/README.org">Vertico</a> are built around the idea that it&rsquo;s better to build off of core Emacs functionality and think in a more modular manner. So then you look up what happens when you enable Vertico, that involves a series of complementary packages:</p>
<ul>
<li>consult</li>
<li>consult-flycheck</li>
<li>embark</li>
<li>embark-consult</li>
<li>marginalia</li>
<li>orderless</li>
<li>vertico</li>
<li>vertico-posframe (maybe)</li>
<li>wgrep</li>
</ul>
<p>Because I do not want to make this about the problem I&rsquo;m dealing with at this particular moment, I just want to say <em>holy cow what a stew of possible starting points for solving a problem</em>.</p>
<p>I&rsquo;ve spent this morning trying to track down a UI annoyance and the mere act of changing word order in my searches has implicated four of the packages on that list.  Because the Emacs community is a relatively small one &mdash; at least by the time you get done subdividing it into &ldquo;Emacs users who also use Doom and who are using Vertico within Doom&rdquo; &mdash; you exhaust possible resolutions quickly, and begin to realize you&rsquo;ve seen the same configuration go by several different times as people in this relatively small subset share it around.</p>
<p>Anyhow, I&rsquo;m not here to bag on Doom or complain about copypasta configs. I&rsquo;m just noting that at a certain point in the world of batteries-included frameworks you are sorting through a metric ton of batteries, all tucked away behind a very smooth housing requiring a variety of Torx and jeweler&rsquo;s screwdrivers to get open. One of those paradoxes, I guess, where your lower-skilled people (me) get a ton of leverage from all the layers of abstraction and affordance, but then wander into situations where it would take a very highly skilled person (not me) to sort out where the magic is going wrong (or just not going the way you wished, since &ldquo;wrong&rdquo; is sort of fraught, here.)</p>
<p>And I fall on the maximizer end of <a href="https://www.psychologistworld.com/cognitive/maximizers-satisficers-decision-making">the satisficer/maximizer spectrum</a>, so it&rsquo;s hard to say of some UI glitch &ldquo;well, that&rsquo;s an annoyance I&rsquo;ll be living with,&rdquo; even if there are ample workarounds or even simple &ldquo;then quit moving your arm that way&rdquo; solutions.</p>
<p>Okay. I think I&rsquo;ve gotten that off my chest. Time to go to the Doom Discourse, <a href="https://discourse.doomemacs.org/t/trying-to-get-a-handle-on-fixing-file-preview-during-find-file/3896">mention the issue</a>, and see what I get.</p>
<h2 id="monodraw">Monodraw</h2>
<p>Even if you don&rsquo;t follow that link, I had an excuse to use <a href="https://monodraw.helftone.com">Monodraw</a> to illustrate my problem. Monodraw makes it super easy to make ASCII diagrams then copies them in a pre block to your clipboard.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">┌──────────────────────────┐  ┌──────────────────────────┐
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│     Original window      │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │      Preview window      │
</span></span><span class="line"><span class="cl">├──────────────────────────┤  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│      Preview window      │  │                          │
</span></span><span class="line"><span class="cl">│                          │  ├──────────────────────────┤
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">├──────────────────────────┤  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │      Vertico window      │
</span></span><span class="line"><span class="cl">│      Vertico window      │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">│                          │  │                          │
</span></span><span class="line"><span class="cl">└──────────────────────────┘  └──────────────────────────┘</span></span></code></pre></div>
<p>There is a world somewhere that I could use Monodraw in a business context and not have it be a complete distraction, but for anything other than &ldquo;a box with words in it,&rdquo; e.g. a more complex organizational diagram or flow chart, it is utterly distracting, either by people who want there to be boxes with colors or people who want to know how on Earth you made such a complex diagram with pipes and dashes.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-23</title>
      <link>https://mike.puddingtime.org/posts/2023-05-23-daily-notes/</link>
      <pubDate>Tue, 23 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-23-daily-notes/</guid>
      <description>Doom&amp;rsquo;s UI-building affordances. A little more on Denote. Fences are weird.</description>
      <content:encoded><![CDATA[<h2 id="the-ui-construction-set">The UI construction set</h2>
<p>Years and years ago, before it was what it is today, which is horrible, Electronic Arts did some interesting marketing things that would lead you to believe that it was less a software company than some sort of rural artist colony that happened to make software but otherwise spent its time in rustic pursuits. They had a &ldquo;Construction Set&rdquo; product line that let you make your own stuff: music, racing games, pinball games, and adventure games.</p>
<p>I had the <a href="https://en.wikipedia.org/wiki/Adventure_Construction_Set">Adventure Game</a> and Racing Destruction Construction Sets and they were really fun. The Adventure Game set gave you all you needed to make a world with regions, rooms, things, and creatures. Things could do magical stuff, and creatures had a very simple set of behavioral rules.</p>
<p>That was my first experience with a software tool that let me make things inside a computer.</p>
<p>Jump forward a few years, and Borland came out with <a href="https://en.wikipedia.org/wiki/Sprint_(word_processor)">Sprint</a>, an extensible word processor with a modifiable UI that let you pick from several basic keybinding profiles (WordStar and Emacs, at least) and then add your own customizations if you wanted.</p>
<p>I was reminded of Sprint this morning as I sat down to extend Doom&rsquo;s menus for use with Denote, <a href="/posts/2023-05-22-more-plaintext-primitivism-with-denote/">which I wrote about yesterday</a>. It&rsquo;s just very clean and easy to do:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:nv</span> <span class="s">&#34;n d&#34;</span> <span class="no">nil</span> <span class="c1">;; Doom has deft here, so we have to nil it out first</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix-map</span> <span class="p">(</span><span class="s">&#34;n&#34;</span> <span class="o">.</span> <span class="s">&#34;notes&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix</span> <span class="p">(</span><span class="s">&#34;d&#34;</span> <span class="o">.</span> <span class="s">&#34;Denote&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;ripgrep&#34;</span> <span class="s">&#34;/&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-rg-search</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Backlinks&#34;</span> <span class="s">&#34;b&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-link-backlinks</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Move subtree&#34;</span> <span class="s">&#34;c&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-org-copy-subtree</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;add keywords&#34;</span> <span class="s">&#34;k&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-keywords-add</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;remove keywords&#34;</span> <span class="s">&#34;K&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-keywords-remove</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Move subtree&#34;</span> <span class="s">&#34;m&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-org-move-subtree</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;New note&#34;</span> <span class="s">&#34;n&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote</span>
</span></span><span class="line"><span class="cl">         <span class="nb">:desc</span> <span class="s">&#34;Rename with frontmatter&#34;</span> <span class="s">&#34;r&#34;</span> <span class="nf">#&#39;</span><span class="nv">denote-rename-file-using-front-matter</span><span class="p">)))</span></span></span></code></pre></div>
<p>It took me a few minutes to find my way back to how to deal with a keybinding collision in Doom&rsquo;s mappings &ndash; it has Deft bound to <code>d</code> under the <code>notes</code> (org) section. I don&rsquo;t use Deft and didn&rsquo;t want to skirt around the binding with <code>D</code> for <code>denote</code> so I had to nil <code>d</code> out before I could use it.</p>
<p>Otherwise &ndash; five minutes of work to build out a submenu for Denote with a mix of things I&rsquo;ll use all the time (making new notes, doing a ripgrep search of my Denote directory, showing backlinks) plus a few things that are useful in the short term, such as renaming a file on the disk after changing its metadata (since Denote uses file naming as metadata) or removing provisional keywords I used to move a bunch of notes in and operate on them in steps.</p>
<p>It&rsquo;s simple, mnemonic, but also offers visual prompts to help with learning. After a while you&rsquo;re not even going to look at the menu because the simple three-key sequences sink in after enough repetition.</p>
<p>It has made learning how to do new things much, much easier than it used to be. I&rsquo;ve just taken to opening a scratch buffer, copying over an existing menu config and clearing it out, then I start trying to do things with a new tool, figuring out over the course of a few hours what things I&rsquo;d like to be able to get to with a few keystrokes instead of remembering the function name or native keybindings. As I figure one of those things out, I add it to the menu, evaluate, and keep going. That is so much better than all the chord memorization I used to do.</p>
<h2 id="a-little-more-on-denote">A little more on Denote</h2>
<p>I also spent some time this morning figuring out how to do things &ldquo;the Denote Way,&rdquo; which means leveraging existing tools in Emacs instead of learning a bunch of functions that significantly duplicate functionality you already have.</p>
<p>&ldquo;Part of the reason Denote does not reinvent existing functionality is to encourage you to learn more about Emacs,&rdquo; says Denote&rsquo;s creator, Prot. Like, just bookmark your Denote directory and use the built-in find-file command in (<code>SPC .</code> to narrow by tags in <code>dired</code> in Doom), because tags are embedded in filenames, and lead with <code>_</code>. If you need fulltext search, ripgrep is there for you, and you&rsquo;ve probably already used it somewhere else.</p>
<p>I appreciate the approach. I think it will lead to learning how to do more by using fewer things across different use cases, instead of learning shallow functionality across a plethora of hyper-specialized tools.</p>
<p>I also learned that Denote leverages org dynamic blocks, so you can create dynamic backlinks blocks with live links:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="c">#+BEGIN: </span><span class="cs">denote-links</span><span class="c"> :regexp &#34;_management&#34;
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c">#+END:</span></span></span></code></pre></div>
<p><code>C-c C-c</code> in the block and it dynamically updates all the items tagged with <code>management</code>. All that stuff is just atomized interview prep notes from my job search, which I broke down and stuck in org-roam and spent a little time converting to Denote&rsquo;s format to try things out.</p>
<p><video width="100%" controls><source src="/img/denote_org_dblock.mp4" type="video/mp4">
Your browser does not support the video tag.</video></p>
<h2 id="fully-equipped">Fully equipped</h2>
<p>I took my Townie down to Foster Rd. for lunch today, then stopped off at one of the local bike shops in the Mt. Scott neighborhood. At some point early in my ownership I stuck hybrid pedals on it. Years ago Shimano came out with <a href="https://bike.shimano.com/en-US/technologies/component/details/shimano-clickr.html">the Click&rsquo;r pedal</a>, which offered some of the stability and torque advantages of a clipless pedal with a little more ease of use. The hybrid pedals were supposed to make it easier to just hop on and ride with street shoes on if you didn&rsquo;t want to change, or to snap in with cleats if you wanted to do a longer ride (or ride in the rain).</p>
<p>In practice, I don&rsquo;t think it was a great idea. I very seldom wanted to wear the cleats, and don&rsquo;t use the Townie for more than a few miles at a time. The right side of the pedals never seemed to be facing up. And they were small under normal street shoes.</p>
<p>So I just got some decent pedals with good traction today, and also added a cup holder, which seemed to tickle the counter guy.</p>
<p>&ldquo;It&rsquo;s complete now,&rdquo; he said.</p>
<p>I&rsquo;ve got a six mile ride for lunch on Thursday &hellip; that&rsquo;s a little farther than I usually consider, but new pedals and a cup holder seem to demand a celebratory cruise.</p>
<h2 id="fences">Fences</h2>
<p>I need to do some reading on fences. The one around our property is in bad shape. The way our house is built and situated, the east and west sides don&rsquo;t need one for privacy at all. The north side sort of demands it during the summer months &ndash; our neighbors on that side are as avid about their back yard time as we are.</p>
<p>But also, fences are sort of weird to me. Whoever built our house took the initiative to put one in. Our neighbors to the east sort of built off of it to fence in the south side of their lot. Our neighbors to the west don&rsquo;t care because their garage is our west property line.  My thought is just &ldquo;there is a total of one east window in this house, and it is a high window that doesn&rsquo;t line up with the neighbors&rsquo; west window, and there are no west windows at all, so why even have fences on those sides?&rdquo;</p>
<p>I&rsquo;m wondering if there&rsquo;s a way to handle the north side &hellip; the longest part of our lot that shares a boundary with a neighbor &hellip; without a <em>fence</em> fence. Or if the answer is something relatively high back there, but not as high (and hence more durable?) on the other two sides.</p>
<p>But mostly I just don&rsquo;t understand anything about fences at all.</p>
<p>When I look at them, sometimes they seem to be for privacy &ndash; they&rsquo;re high and block people on the street seeing in &ndash; and other times they seem to be <em>kind of</em> for security? Like, you&rsquo;d have to make an effort to vault a waist-high one made out of chain link,  or they wall off access to the back yard, or they (more rarely) seal in the driveway (though good lord do I get annoyed with all the old chain link driveway gates that just sort of loll around blocking the sidewalk).  Sometimes they just seem to be there to demark the property line, which would suggest something less elaborate would do, and serve mainly as lawn mower guidance.</p>
<p>They weren&rsquo;t a common feature in the small town where I lived in Indiana. They weren&rsquo;t common in the Virginia neighborhood I lived in, or else they were low, chain link things.  They were unheard of out in the Pennsylvania coal and dairy country I lived in except for one place that was half house, half mechanic&rsquo;s garage there in the hamlet.  I remember low, chain link fences around every yard in Houston, TX as a child. The only childhood home I can remember having tall fences was when my family lived in a townhouse in suburban Pittsburgh, and everyone had a tiny patch of back patio. They&rsquo;re very common in this neighborhood, more tall than not for newer construction, more likely to be low chain link things for all the smaller postwar houses.</p>
<p>Anyhow, I need to learn more about them. There&rsquo;s the part of me trying to engage with the whole topic by observation &ndash; a mode I get into that Al tolerates, but barely &ndash;  and the part of me that has a vague inkling that fences around yards might be one of those things that are <em>common</em> but also <em>not thought through in detail</em>, which means there are lots of opportunities to step on norms people didn&rsquo;t even know they had.</p>
]]></content:encoded>
    </item>
    <item>
      <title>More plaintext primitivism with Denote</title>
      <link>https://mike.puddingtime.org/posts/2023-05-22-more-plaintext-primitivism-with-denote/</link>
      <pubDate>Mon, 22 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-22-more-plaintext-primitivism-with-denote/</guid>
      <description>Denote wants you to stick with the native tools you already have for a stripped-down PKM system.</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/protesilaos/denote">Denote</a> is a note-taking package for Emacs I find sort of interesting because its creator is trying very hard to make something that is structured and can provide some of the affordances we&rsquo;re all coming to expect from <a href="https://www.reddit.com/r/PKMS/comments/nfef59/list_of_personal_knowledge_management_systems/">PKMs</a> without requiring a bunch of extra overhead: At the content level he wants you to use existing file types and markup languages (org, Markdown), and at the management/search level he wants you to use existing Emacs tools, like <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html">dired</a> in combination with a file naming scheme that incorporates title, date, and tags into the filename.</p>
<p>It doesn&rsquo;t toss you into the plaintext-n-filesystem primitivist deep end on your own. It comes with a dired mode that fontifies based on its own filenaming convention, so what seems like it could be super ungainly is actually pretty easy to scan in practice:</p>
<figure><img src="/img/denote_dired.jpg"
    alt="Screenshot of files colorized by their datestamp, title, and tags in Emacs dired"><figcaption>
      <h4>dired in denote-dired-mode</h4>
    </figcaption>
</figure>

<p>&hellip; and it has a collection of functions that let you add/remove keywords, rename files using its naming convention, etc.  There are even a few next-level sorts of things, such as the ability to create content &ldquo;silos,&rdquo; so you can set up a note directory for personal stuff, work stuff, etc. without clashing label namespaces and other things that come up when you have to manage a few discrete areas with the same tool.</p>
<p>As &ldquo;what would my exit plan be&rdquo; tools go, this one is pretty good, given It&rsquo;s All Just Text with no particularly difficult conventions.</p>
<p>It was trivial to move a bunch of notes into a directory, use Denote&rsquo;s built-in tools to convert them to the proper naming convention, and start using it. It took under a minute to convert a function I cribbed from org-roam&rsquo;s forums to use ripgrep to provide fulltext search:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/denote-rg-search</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Search denote directory using consult-ripgrep. With live-preview.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">consult-ripgrep-command</span> <span class="s">&#34;rg --null --smart-case --type org --line-buffered --color=always --max-columns=500 --no-heading --line-number . -e ARG OPTS&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">consult-ripgrep</span> <span class="nv">denote-directory</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix-map</span> <span class="p">(</span><span class="s">&#34;n&#34;</span> <span class="o">.</span> <span class="s">&#34;notes&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix</span> <span class="p">(</span><span class="s">&#34;D&#34;</span> <span class="o">.</span> <span class="s">&#34;Denote&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;ripgrep&#34;</span> <span class="s">&#34;/&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-rg-search</span><span class="p">)))</span></span></span></code></pre></div>
<p>The obvious comparisons in the Emacs ecosystem are <a href="https://github.com/jrblevin/deft">Deft</a> and <a href="https://www.orgroam.com">org-roam</a>. I haven&rsquo;t given Deft much time. I&rsquo;ve used org-roam more. I like Denote&rsquo;s lack of a dependency on a database. I don&rsquo;t know how Denote will compare in terms of scale if it&rsquo;s all filesystem-and-native-tools.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-21</title>
      <link>https://mike.puddingtime.org/posts/2023-05-21-daily-notes/</link>
      <pubDate>Sun, 21 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-21-daily-notes/</guid>
      <description>The joy of longboard dancers. The objectively superior operating system, diagrammed. Go upstream of AI content farm horror stories.</description>
      <content:encoded><![CDATA[<h2 id="this-morning-s-weird-impulse">This morning&rsquo;s weird impulse</h2>
<p>I woke up curious about what Linux desktops are like these days. I haven&rsquo;t felt that sort of curiosity in a while.</p>
<p>I&rsquo;ve got that Mac Studio sitting upstairs that today is mostly just a Zoom machine &ndash; I live out of my MacBook. So it&rsquo;d be a reasonable experiment to stick Parallels on it and give the VM a ton of resources.</p>
<p>Why? Just curious. When I think about my golden age of Linux use, I don&rsquo;t feel a ton of nostalgia for the Peak Desktop era toward the end of that time: I had made the mistake of monetizing my hobby by working in Linux media, and had come to feel such a withering irritation with the people I had to interact with every day that I spent a chunk of my time <a href="https://web.archive.org/web/20050204190949/http://www.linuxplanet.com/linuxplanet/opinions/3749/1/">going out of my way to irritate them</a>. <em>Most</em> of the people who irritated me the worst spent much of their time screwing around with GNOME or KDE or whatever, writing impassioned treatises about humanity will never colonize space if we all settle on one desktop standard.</p>
<p>So <em>my</em> peak period was after I&rsquo;d found <a href="https://github.com/bbidulock/blackboxwm">Blackbox</a>.</p>
<p>I suspect any attempt to use Linux as a desktop machine today would probably result in mounting fury over attempts to have as minimal a UI experience as possible without having to put up with the bizarre and self-defeating primitivism of most other minimalists, who want to live in a world with <em>no</em> affordances, or the brittle and baroque dependency chains of the maximalist distributions.</p>
<p>Oh, I think I do know what got me thinking about it this morning: <a href="https://nyxt.atlas.engineer">Nyxt looks mildly bananas</a> and there&rsquo;s no official Mac build.</p>
<p>I think my increased Emacs use has stimulated a part of my personality that got a lot of exercise when I was running Linux as my desktop machine. Like, the big desktop projects and mainline personal productivity stuff were all just sort of tedious recapitulations of existing software. Underneath, though, there was a lot of ferment. Weirdness. Curious little passion projects from some person at MIT or somewhere who read <a href="https://historyofinformation.com/detail.php?entryid=869">Vannevar Bush</a> and combined their middling C++ skills and their love of psychedelics with a willful misreading of a key paragraph.</p>
<p>Running Emacs, you get some cultural leakage. It&rsquo;s an older, stranger computing culture than most, and it still startles me when I realize how vibrant it is. I <a href="https://social.lol/@mph/110407471558247074">mentioned to someone this morning</a> that, if anything, its online community only seems more robust than it did a decade ago. It&rsquo;s so much easier to get help than it used to be because there&rsquo;s a proliferation of online content, and there&rsquo;s a sense of engagement with the rest of the world that used to go missing.</p>
<p>That&rsquo;s not to say that mainline Mac culture isn&rsquo;t somewhat permeable to novel things. For instance, you get some <a href="/posts/2023-05-05-daily-notes/#superkey">interesting little UI enhancers like Superkey</a> that suggest Mac&rsquo;s UX team doesn&rsquo;t have <em>all</em> the answers, often delivered at a level of high polish. It&rsquo;s just to say that macOS is not where fun, mutant things spawn or proliferate.</p>
<figure><img src="/img/weirdness_diagram.png"
    alt="A very scientific spider chart of assorted factors compared among the different operating systems"><figcaption>
      <h4>Very sophisticated data that supports my assertions.</h4>
    </figcaption>
</figure>

<p>I can see that diagram being very alienating. The &ldquo;practicality&rdquo; part in particular is probably going to bug some people. In my mind, &ldquo;practicality&rdquo; means &ldquo;sit down to do work that people who first used home computers in the 1980s think of as &rsquo;normal computer things&rsquo; without having to do a bunch of weird stuff, recompile your kernel, or perform the task perfectly adequately but with your thumbs.&rdquo;</p>
<p>I am really just trying to hold out the possibility that &ldquo;Populist Linux&rdquo; <em>may</em> be the objectively superior operating system for people who both like doing stupid stuff on their computers <em>and</em> getting things done.</p>
<h2 id="longboard-dancing">Longboard dancing</h2>
<p>Of the assorted longboarding tribes, longboard dancers are the ones that feel the most beyond me. I have an inkling of what it would take to be good at downhill, or long-distance pumping, but I watch people like Lotfi Lamaali and it makes my head spin.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/h7L-i5CO1Ow" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>(Inspired by a <a href="https://www.metafilter.com/199363/Id-never-really-thought-about-longboards-but-now-I-want-one">MeFi thread</a>)</p>
<p>re: the downhill tribe, there&rsquo;s the pure joy of Longboard Girls Crew:</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/LLvW64MuvO4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>&hellip; the utter lunacy of Cooper Darquea:</p>
<div style="text-align:center;margin: 0 1em;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/Os_iEzrq4i4?start=2219" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>&hellip; and there&rsquo;s Lillian Barou, doing what I&rsquo;d be doing if I could back up my consciousness to my orbital&rsquo;s local <a href="http://www.vavatch.co.uk/books/banks/cultnote.htm">Mind</a>, or at least count on painless 3d printing of a new femur:</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/CZDHRKmGt44?start=2171" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<h2 id="it-s-a-human-problem">It&rsquo;s a human problem</h2>
<p><a href="https://uk.finance.yahoo.com/news/attention-hollywood-aging-isn-t-154037484.html">This confused and reactionary post about digital de-aging</a> is a good on-ramp to generative AI discourse. Its assertions include:</p>
<ul>
<li>Digital de-aging doesn&rsquo;t work.</li>
<li>Except when it does.</li>
<li>You can tell it doesn&rsquo;t work because you have to use it selectively for it to work.</li>
</ul>
<p>And quoted in full:</p>
<p>&ldquo;De-aging effects in Hollywood still need to be fine-tuned, and Hollywood should only use them once we can perfect the technique.&rdquo;</p>
<p>Nothing in the human world works this way. Nothing. It didn&rsquo;t work that way when we were making bricks out of mud, or machines out of iron. It will not work this way when we can iterate at digital speeds.</p>
<p>It might <em>feel</em> like the correctly humanitarian impulse to go straight to the thing <em>abetting</em> all the implications we&rsquo;re worried about: displacement of workers, job loss, debasement of quality, the feedback loops that will accelerate all of the above. It might <em>feel</em> like the temperate response is &ldquo;the technology isn&rsquo;t ready so don&rsquo;t worry about it,&rdquo; or &ldquo;this isn&rsquo;t living up to the hype, so quit panicking.&rdquo;</p>
<p>I disagree. We should be thinking upstream.</p>
<p>The temperate and humanitarian response is to ask how well we&rsquo;re equipped to deal with these things that <em>are going to happen</em>. The thought that neoliberal governments are going to sit and have a think about what to do <em>about the technology</em> is just &hellip; absurd. They should be thinking about the effects of the technology, how our economy is organized, and whether they exist to do anything but facilitate the transfer of wealth to a smaller and smaller class of extractors and rentiers.</p>
<p>Actually, <em>we</em> should be asking that last question. The answer right now is that they self-evidently do not.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Profit motive</title>
      <link>https://mike.puddingtime.org/posts/2023-05-19-profit-motive/</link>
      <pubDate>Fri, 19 May 2023 19:15:59 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-19-profit-motive/</guid>
      <description>Apple News quickly takes you from &amp;ldquo;all this affiliate stuff is annoying&amp;rdquo; to &amp;ldquo;our whole economic order is broken.&amp;rdquo;</description>
      <content:encoded><![CDATA[<p>After setting it aside for a very long while I ended up reopening Apple News when someone posted an Apple News link.</p>
<p>Apple News URLs &mdash; or at least the constantly changing effort to get to the actual URL of a story posted there &mdash; are one of the reasons I quit using Apple News. The other was a general lack of control of the experience: You can choose topics and sites to follow, but you&rsquo;re never sure what content surfaces and why. If you block a site, it blows holes in your feed that Apple somewhat sulkily insists on informing you are there.  And this time, having read Apple News daily for about a week, another reason is how much content in the somewhat curated Apple News experience is just affiliate linking.</p>
<p>I went to college for journalism and I worked in online media for close to 15 years. I am sympathetic to media outlets and understand a lot of the challenges they face. I trudged through a year of layoffs during the dot com bust, and then went through a bunch of austerity measures in 2008-2009. I experienced the clammy feeling of working for a tech journalism network that got snapped up by a &ldquo;performance marketing&rdquo; company to do lead generation masquerading as journalism.</p>
<p>I do not think affiliate linking is an ethical answer to the sustainability challenges online journalism faces.</p>
<p>You can hear the rationalizing in headlines that solemnly inform you that some gadget or another is &ldquo;the lowest price we&rsquo;ve ever seen,&rdquo; as if you&rsquo;re being done a special service. I did an informal count on a few sites Apple News pushes and saw upwards of 20-30 percent of the content pushing affiliate links.</p>
<p>You can see sites that painstakingly track the release cadence of companies like Apple and would quickly advise you to hold off on a purchase in any un-subsidized content try to push fire sales on old tech.  They know it&rsquo;s hitting the market at that price precisely because companies are clearing inventory to make room for the soon-to-arrive thing these same sites would advise you to wait for if you can. That isn&rsquo;t ethical, even if you squint and try to act as if the pitch is targeting savvy trailing-edge buyers.</p>
<p>And you can see a kind of coverage for Kickstarter/IndieGoGo stuff that doesn&rsquo;t bother to mention that the product they&rsquo;re &ldquo;reporting&rdquo; on doesn&rsquo;t actually exist yet. Click through to read a &ldquo;review&rdquo; and you realize they got to handle a prototype, if that, but there&rsquo;s the referrer link to sites that are sometimes interesting storefronts, but are also sometimes just casinos if your crowdfunded entrepreneur flakes.</p>
<p>The thing is, these same sites are completely right to say, &ldquo;well what, then?&rdquo; Everyone is running ad blockers, and understanding how to install a paywall-subverting bookmarklet is pretty much a basic adult life skill at this point. I don&rsquo;t know what the answer is, and don&rsquo;t think pointing to boutique sites like Daring Fireball is any kind of answer.</p>
<p>When I sit and think it through, what I come up with is that it stops being a content, delivery, tech, or logistics problem and reveals itself to be a basic problem of economic organization: A lot of the sites I wish would knock off the affiliate link junk are run by people who used to be working journalists who felt they had to strike out on their own to do good work, or who simply got downsized. To do what they love <em>and</em> make a living, something has to give. It&rsquo;d be nice if we were economically organized to let them do that without having to resort to the hustleification of everything. It&rsquo;s only the market &ldquo;working&rdquo; if your conception of a working market is something that helps Apple and Dell efficiently clear obsolete backstock, or helps Amazon clear more handling fees for drop-shipped, ripoff junk.</p>
<p>Anyhow, I&rsquo;m deleting Apple News again. Personal blogs and non-commercial social feeds work fine, and take way less energy than reading past all the commercial content, losing time to &ldquo;reviews&rdquo; and &ldquo;reporting&rdquo; about nonexistent products, or wondering if the &ldquo;top 5&rdquo; things are actually their assessment of the top 5, or if the actual top 5 are something else, but not available on a site with an affiliate program.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-19</title>
      <link>https://mike.puddingtime.org/posts/2023-05-19-daily-notes/</link>
      <pubDate>Fri, 19 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-19-daily-notes/</guid>
      <description>Helping org-edna out when you&amp;rsquo;re using BeOrg and the limits of hyper-automated plaintext primitivism.</description>
      <content:encoded><![CDATA[<h2 id="using-beorg-with-org-gtd-org-edna">Using BeOrg with org-gtd/org-edna</h2>
<p>So, org-gtd makes heavy use of org-edna:</p>
<p>When you&rsquo;re working down a project&rsquo;s todos, each time one flips to <code>DONE</code> it triggers org-edna to move the next task into a <code>NEXT</code> state. So far so good and awesome if you&rsquo;re just using Emacs.</p>
<p>If you&rsquo;re out and about with your iPhone (or Orgzly, or whatever) and do not have a full Emacs environment, any state changes to a todo item won&rsquo;t have org-edna there to monitor and make the needed state changes for the next item.</p>
<p>Today, for instance, I am going to be out and about running a few errands that include picking some things up that I need to complete a few projects. I have a custom view set up in BeOrg to show me my <code>@errands</code> items in <code>NEXT</code> state. When I stop by the motorcycle shop to pick up a battery for my Grom, I&rsquo;ll want to tick that errand off as <code>DONE</code>. Because org-edna isn&rsquo;t there, the next item in the &ldquo;Get the Grom ready for summer&rdquo; project won&rsquo;t flip into a <code>NEXT</code> state, and org-gtd&rsquo;s handy &ldquo;next actions&rdquo; agenda list will lose track of the project (unless I explicitly check for stuck projects &ndash; projects with no item in a <code>NEXT</code> state.)</p>
<p><a href="https://appsonthemove.freshdesk.com/support/discussions/topics/14000019608?page=1">David Masterson on the BeOrg user forum</a> was grappling with the same problem and suggested a pretty good idea: Adding a transitional TODO state to BeOrg that you&rsquo;d then manually flip to <code>DONE</code> once sitting in front of Emacs on a real computer. That&rsquo;d then trigger org-edna and your list automation would be back on track. He proposed <code>PRE-DONE</code>, I just went with <code>BEDONE</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/org-change-bedone-to-done</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Change all &#39;BEDONE&#39; states to &#39;DONE&#39; in current buffer.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">save-excursion</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">goto-char</span> <span class="p">(</span><span class="nf">point-min</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">while</span> <span class="p">(</span><span class="nf">re-search-forward</span> <span class="nv">org-heading-regexp</span> <span class="no">nil</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nv">string=</span> <span class="p">(</span><span class="nv">org-get-todo-state</span><span class="p">)</span> <span class="s">&#34;BEDONE&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">org-todo</span> <span class="s">&#34;DONE&#34;</span><span class="p">)))))</span></span></span></code></pre></div>
<p>Then you&rsquo;d just want to automate <em>that</em>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">add-hook</span> <span class="ss">&#39;org-mode-hook</span> <span class="ss">&#39;mph/org-change-bedone-to-done</span><span class="p">)</span></span></span></code></pre></div>
<p>The two additional bits of setup: Adding &ldquo;BEDONE&rdquo; to BeOrg&rsquo;s list of todo states, and making sure it is also in the TODO state list in  your Emacs config, or in the file you&rsquo;re going to operate on. If you just try to use &ldquo;BEDONE&rdquo; instead of &ldquo;DONE&rdquo; without blessing it as an actual TODO state, the function will treat it like arbitrary text and ignore it.</p>
<p>My Grom example is pretty simplistic: I&rsquo;m not going to forget I am trying to get the Grom ready for summer, and will eventually go looking for the rest of the project if I accidentally move it into a stuck, next-actionless state.  But the whole point of org-gtd &ndash; GTD generally &ndash; is that you want to remove as much &ldquo;holding stuff in your head&rdquo; as possible.</p>
<h2 id="the-limits-of-hyper-automated-plaintext-primtivism">The limits of hyper-automated plaintext primtivism</h2>
<p>For the record, yes, this is pushing things. All sorts of things. The limits of hyper-automated plaintext primitivism. The willful naivete of GTD as a method. My own laziness, because the other option is to just write this stuff down and stick it in my pocket on the way out the door, or to not use BeOrg interactively if I&rsquo;m going to have a bunch of desktop-only automation.</p>
<p>The only real defense I have right now is, &ldquo;it&rsquo;s fun.&rdquo;</p>
<p>The only way to keep having this kind of fun will eventually be to either become a primitivist hyper-automation plaintext fetishism influencer with no need to do things like &ldquo;direct corporate IT operations&rdquo; or &ldquo;lead product engineering groups;&rdquo; or to crowd out other things in my life that matter much, much more than relieving myself of the drudgery of manually changing TODO states in a plaintext file.</p>
<p>A friend asked, &ldquo;are you ready to go back?&rdquo;</p>
<p>Yeah &hellip; seven months in, three of which were very deliberate rest, the rest of which have involved a state of relaxed calm but the stochastic cadence of screenings, interviews, and panels &hellip; I am ready: Rested, as clear on my purpose in the workplace as I have been in a long time, and as clear on what I am getting for my time as I have ever been. Uncle Tupelo for the rest.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/wQ9TxwlRoEU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-18</title>
      <link>https://mike.puddingtime.org/posts/2023-05-18-daily-notes/</link>
      <pubDate>Thu, 18 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-18-daily-notes/</guid>
      <description>Changing how Vertico opens projects in Doom: A shaggy dog story. The security system.  They Live!</description>
      <content:encoded><![CDATA[<h2 id="doom-emacs-opening-a-project-in-dired-instead-of-having-to-pick-a-file">Doom Emacs: Opening a project in dired instead of having to pick a file</h2>
<p>So, I thought that &ldquo;<a href="https://en.wikipedia.org/wiki/Feghoot">feghoot</a>&rdquo; and &ldquo;shaggy dog story&rdquo; were interchangeable. They are not. This section of today&rsquo;s daily post, while possibly qualifying as a shaggy dog story,  will not end with a pun. If you&rsquo;d like I am happy to do a Zoom call or meet for coffee or lunch and share one or two of the three feghoots I cherish. If there is anything more fun than telling one of them and seeing how long I can prolong your agony, I don&rsquo;t know what it is.</p>
<p>Actually, I do: It&rsquo;s being stuck in a room with a bunch of directors all sitting around awkwardly awaiting the CEO&rsquo;s arrival having exhausted all their small talk, and telling three feghoots in a row. The first one elicits uneasy and nervous grins, but what the hell: It&rsquo;s Mike and he does things like this and also we&rsquo;re out of small talk.</p>
<p>Rounding into the second one, the smiles are more forced. Is he going to prolong the telling? Is this one perhaps more efficient? Has anyone checked Slack to see where Yvonne is?</p>
<p>The third one, and you&rsquo;re out of &ldquo;nervous grin&rdquo; territory, and into the family of facial expressions that pair well with &ldquo;rictus.&rdquo; Except for the one or two people who are completely here for the performance. <em>Your</em> people.</p>
<p>And it&rsquo;s completely a race against time. The CEO could turn up at any time. Three feghoots in a row is a punishing exercise, so getting them all in without betraying the form with efficiency and then quietly packing up your wagon and riding out of town/slipping back into the mien of your accustomed station &hellip; it&rsquo;s a craft.  You know you&rsquo;re good at it when you start any conversation over the next six months with &ldquo;so &hellip; &quot; and people wince.</p>
<p>Anyhow:</p>
<p>By default, Doom&rsquo;s projectile project switcher command (<code>SPC p p</code>) uses <code>projectile-switch-project</code> to take you to another project. That means you hit <code>SPC p p</code> and it presents a list of known projects, you select one, and then it asks for a file. If you don&rsquo;t want to open a file, you just want to be in a project directory, and if you&rsquo;re using Helm, you can use <code>CTRL d</code> to open a given project directory in dired at the point in the workflow where you have a list of projects.</p>
<p>This is fine, and I think I actually may have seen a testy Stack Overflow exchange about the matter, because one would-be answerer could not understand for the life of them why you&rsquo;d <em>not</em> want to get to a specific file in a project right away &hellip; do you not know why you&rsquo;re going there?</p>
<p>I do, but I&rsquo;ve got my reasons. One is very straightforward: I want to go to the project so I can do magit stuff with it, and it is weird to me to have to open a file. Another is just a personal tic: When I switch to a project, opening its directory is sort of like pulling a project&rsquo;s folder out of the filing cabinet and opening it on my desk. It&rsquo;s a small mental reset. &ldquo;I was there doing that, I am now here doing this.&rdquo;</p>
<p>Anyhow, I&rsquo;m using <a href="https://github.com/minad/vertico">Vertico</a> instead of Helm. Vertico does not, as near as I can tell, have a way to open a directory in dired from the Projectile picker.</p>
<p>So &hellip;</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-vertico-project-dired</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let*</span> <span class="p">((</span><span class="nv">collection</span> <span class="p">(</span><span class="nv">projectile-relevant-known-projects</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">project</span> <span class="p">(</span><span class="nf">completing-read</span> <span class="s">&#34;Open project in dired: &#34;</span> <span class="nv">collection</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">dired</span> <span class="p">(</span><span class="nf">expand-file-name</span> <span class="nv">project</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:desc</span> <span class="s">&#34;Open project in dired&#34;</span> <span class="s">&#34;p p&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-vertico-project-dired</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:desc</span> <span class="s">&#34;Select project and file&#34;</span> <span class="s">&#34;p P&#34;</span> <span class="nf">#&#39;</span><span class="nv">projectile-switch-project</span><span class="p">)</span></span></span></code></pre></div>
<p>That just remaps <code>SPC p p</code> to a function that opens a given projectile project in dired, and then moves the original command to <code>SPC p P</code> if I ever want to go that way.</p>
<p>But that made me think about what problem I was really trying to solve initially, which was just opening my blog project in magit right away while in another project. So:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-magit-start-in-hugo</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">magit-status</span> <span class="s">&#34;~/src/hugo&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:desc</span> <span class="s">&#34;Start Magit in ~/src/hugo&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;g h&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-magit-start-in-hugo</span><span class="p">)</span></span></span></code></pre></div>
<p><code>SPC p p</code> is so wired into my muscle memory after just a few months of Doom use that I can imagine I won&rsquo;t use the shortcut that routes through the Hugo submenus that much. But it&rsquo;s there.</p>
<p>Anyhow, once I went through all that I asked myself why I had my <code>blog.org</code> file over in my <code>~/org/</code> hierarchy to begin with. I remember <em>why</em> I did it that way, but realized I didn&rsquo;t <em>need</em> to do it like that. So I moved it over into my Hugo repo/project where it can just travel around with the project it belongs in, anyhow.</p>
<p>But I can open any project straight into its directory using Vertico now!</p>
<h2 id="my-tiger-rock">My tiger rock</h2>
<p>Nine or ten years ago our house got broken into. Al came home to do the front door jimmied open, all of our small electronics crammed into suitcases, and our bikes moved out of the garage and into the living room. She closed the door, turned around, and walked across the street, where she sat on the curb and called me. Given that everything was sitting there in the living room, it stood to reason someone was, perhaps, still upstairs.</p>
<p>So I left work early, picked Ben up from his art camp, and came home. I poked my head in the house, saw the situation, and yelled up the stairs that it&rsquo;d be best, were anyone to still be up there, to get out, and that if they wanted to do that I&rsquo;d be across the street and not in their way. I don&rsquo;t know if that strategy made a ton of sense, but I wasn&rsquo;t going to commit to going in the house and cornering someone, and I wanted to offer them an out that might avert eventual violence.</p>
<p>So we all sat on the curb across the street from the house, unsure of how to proceed. Nobody had come out for over an hour, so it seemed unlikely they were still upstairs. Eventually, when I checked my mail, I realized that UPS had dropped a package off about an hour before Al got home. UPS always bangs on the door when they drop something off, so we reasoned that the UPS person had dropped off a package, pounded on the door, and frightened off the thieves. I poked my head back in, saw that the back sliding door was slightly ajar, and realized they&rsquo;d gone out the back.</p>
<p>The police eventually turned up, took the crowbar into custody in case there were prints, and told us it was sort of a nothingburger situation because nothing had been stolen. We had to pay to repair the door. It was sort of gross, once we took stock, to see how they&rsquo;d gone through drawers, dumped out boxes, tossed underwear around, etc.</p>
<p>So, we got an alarm system.  It&rsquo;s a common kind, not super expensive, easy to set up, has an app, and it will call a dispatcher if you don&rsquo;t disable a triggered alarm within a minute.</p>
<p>It has worked fine for the last decade, but a few months ago we were told it needed to have its cellular module upgraded, and we settled into a routine of the alarm system telling us it would soon be useless if we didn&rsquo;t open the manila envelope the vendor sent us and do brain surgery and us ignoring it and the increasingly insistent emails.</p>
<p>Maybe it&rsquo;s complacency, but we&rsquo;ve lived through the several years since that incident and we have formed an impression: We&rsquo;ve called 911 a few times over neighborhood shootings, a brutal assault in the park across the street from our house, a brush fire on the Springwater, an attempt to get help for a Spanish-speaking guy who&rsquo;d been mugged on the trail, and Al&rsquo;s shattered elbow joint from a longboarding accident. One of the faster responses we ever got was to the longboarding accident, which involved a three-jurisdiction squabble over who should come get her. The fire response wasn&rsquo;t bad. The violent crimes took over an hour, and on one of them no reports were collected even though we had a license number and description.</p>
<p>&ldquo;Should we even bother calling next time?&rdquo;</p>
<p>&ldquo;Yeah, tell your state representatives to give the police more money. We&rsquo;re not going to investigate it.&rdquo;</p>
<p><em>Literally.</em></p>
<p>This is, theoretically, the same agency that the alarm system dispatchers would contact were someone to break in.</p>
<p>So as I sat at the kitchen table with a tiny screw driver, carefully removing the old cell module and screwing in the new one, I rationalized the use of my time by remembering that the one time we have had a break-in, a loud noise is probably what frightened off the burglar, and that the alarm system does make a super loud noise. And also that if we had an alarm, and someone broke in, we&rsquo;d at least know it because we&rsquo;d get a ping from the app or an SMS and there&rsquo;d be less chance of anyone walking in on someone.</p>
<p>But the police part? There&rsquo;s always the Simpsons.</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/xSVqLHghLpw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<h2 id="they-live">They Live</h2>
<p>&hellip; is <a href="https://hollywoodtheatre.org/events/they-live/">showing at the Hollywood</a> this week and next.</p>
<figure><img src="/img/they_live.gif"
    alt="GIF of Roddy Rowdy Piper in They Live - I&#39;m all outta bubblegum" width="500">
</figure>

<p>Its time was then. Its time is now.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Full content in the RSS feed (and how to add a second Hugo feed)</title>
      <link>https://mike.puddingtime.org/posts/2023-05-18-full-content-in-the-rss-feed/</link>
      <pubDate>Thu, 18 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-18-full-content-in-the-rss-feed/</guid>
      <description>There&amp;rsquo;s finally a full-content RSS feed here.</description>
      <content:encoded><![CDATA[<p>It took me a while to figure it out after a failed first attempt, but I finally made a <a href="https://mike.puddingtime.org/index.xml">full-content RSS feed.</a> It&rsquo;s going under the same name as it was before as a partial feed, so it ought to just start providing the full content of posts now.</p>
<p>Previously I was using a modified feed that was meant to work well for social syndication (e.g. cross-posting to Mastodon and Twitter). It included just the post summary plus + tags as a way to aid with discovery (especially in Mastodon). That didn&rsquo;t sit super well with me &ndash; I&rsquo;m a &ldquo;full content&rdquo; kind of person &ndash; but figuring out how to get Hugo to do two feeds took some doing.</p>
<p>While I was in there, I also shortened the length of the feeds to 20 posts. I think there are a few more things to do to make it all work just so, but I&rsquo;m content to just have a full content feed back in place for now.  Also, if you liked the old feed format (I guess some people like summaries and clicking through?) it&rsquo;s still around, but I renamed it to <a href="https://mike.puddingtime.org/social.xml">/social.xml</a>, since its primary purpose is driving an <a href="https://ifttt.com">IFTTT</a> cross-posting recipe.</p>
<h2 id="setting-it-up">Setting it up</h2>
<p>If you&rsquo;re curious about how the two feeds are configured:</p>
<p>First, you need two template files in your site&rsquo;s <code>layouts/_default</code> directory:</p>
<ul>
<li><code>rss.xml</code></li>
<li><code>list.socialrss.xml</code></li>
</ul>
<p>The first one is a <a href="https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml">standard Hugo RSS template</a> with a slight modification to the <code>description</code> property to use the full content of a post vs. the summary.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>{{ .Content | html }}<span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span></span></span></code></pre></div>
<p>The second template uses the post summary, and adds a partial:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">description</span><span class="p">&gt;</span>{{ .Summary | html }} <span class="p">&lt;</span><span class="nt">br</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">   {{ partial &#34;rss_tags.html&#34; . }}
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">description</span><span class="p">&gt;</span></span></span></code></pre></div>
<p>The partial is how I get post tags for use in syndication to the social feed. Mastodon clients tend to auto-link hashtags, and hashtags are key to discovery in Mastodon:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">{{- $tags := .Language.Params.Taxonomies.tag | default &#34;tags&#34; }}
</span></span><span class="line"><span class="cl">{{- range ($.GetTerms $tags) }} #{{ .LinkTitle }}  {{- end }}</span></span></code></pre></div>
<p><code>config.yml</code> looks like this in my setup:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">outputs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">home</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">HTML</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">RSS</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">SocialRSS</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">JSON</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">outputFormats</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">RSS</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">mediatype</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;application/rss+xml&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">baseName</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;index&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">isPlainText</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">notAlternative</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">SocialRSS</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">mediatype</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;application/rss+xml&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">baseName</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;social&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">isPlainText</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">mediaTypes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="s2">&#34;application/rss&#34;</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">suffixes</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;xml&#34;</span><span class="p">]</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-17</title>
      <link>https://mike.puddingtime.org/posts/2023-05-17-daily-notes/</link>
      <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-17-daily-notes/</guid>
      <description>MailMate and org-mode bundle, more org-gtd, the dysfunctional orbit of Windows and Linux UX, my weird Electra Townie.</description>
      <content:encoded><![CDATA[<h2 id="org-mode-and-mailmate">org-mode and MailMate</h2>
<p>There&rsquo;s an <a href="https://github.com/mailmate/org-mode.mmbundle">org-mode bundle</a> for <a href="https://freron.com">MailMate</a> that works pretty well: You invoke it, it drops an org-mode todo in a given file using the subject for the heading and a link to the MailMate message.</p>
<p>I added a bunch of messages with similar subjects and found it sort of hard to know which was which without opening them, so I made a small patch to the bundle that adds the name of the sender to the org heading. While I was in there, I made it a little easier to find the hardcoded file target and added it to the README instructions.</p>
<p><a href="https://github.com/pdxmph/org-mode.mmbundle.git">Here&rsquo;s the fork</a>, with all credit to <a href="https://xam.dk">Max Andersen</a>, who wrote the original.</p>
<p>(<a href="/posts/2023-04-25-daily-notes/#mail-restlessness-alights-on-mailmate">MailMate previously</a>. I ended up buying a license. I could do much of what I do with it with plain old macOS Mail.app, but MailMate is much easier to tune and ends up feeling more personalized.)</p>
<h2 id="more-org-gtd">more org-gtd</h2>
<p>I mentioned being <a href="/posts/2023-05-16-daily-notes/#liminal-state">not so happy about my liminal state.</a> It was good to get org-gtd up and running because I was able to quit fussing with <em>how</em> to get everything out of my brain and just concentrate on getting it out of my brain. Therapeutic, even. It didn&rsquo;t take long to start looking at a little of the other core GTD stuff, adding contexts and &ldquo;Area of Focus&rdquo; to all the stuff I got in there. org-gtd has some good agenda views that incorporate areas and contexts.</p>
<p>So, you know, it took a day or two to tour the options and figure things out for the next while and it&rsquo;s just &hellip; good to be using the tool, not thinking about the tool. Which reminds me &hellip;</p>
<h2 id="the-dysfunctional-embrace-of-linux-and-windows">The dysfunctional embrace of Linux and Windows</h2>
<p><a href="https://mas.to/@spacewizard/110379691363071031">My friend Ed reminded me a little</a> about tool fixation with this pretty interesting video about the ways Windows&rsquo; bad UX infects Linux desktops:</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/GkxAp2Gh7-E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<h2 id="my-weird-electra-townie">My weird Electra Townie</h2>
<p>I have an e-bike and love it for anything further than a couple of miles. Earlyish in lockdown I realized I had more time to get around the neighborhood during the day and went out looking for an acoustic bike. I was hoping for something sort of easygoing &ndash; upright ride, plush, didn&rsquo;t need to be fast. In retrospect, what I was really looking for was some kind of Dutch bike.</p>
<p>Supply chain hell and demand made that tough, but my local Bike Gallery had a sort of weird, niche bike on the floor: An Electra Townie, but more tricked out than they usually are, and on super steep discount. It has front and rear racks, a dynamo hub, disc brakes, and it&rsquo;s a 27-speed. It&rsquo;s also sort of tall for a Townie. I just went to <a href="https://electra.trekbikes.com/us/en_US/bikes/electra-bikes/townie/c/EB300/">the Electra site</a> to make sure I haven&rsquo;t completely misunderstood what&rsquo;s &ldquo;normal&rdquo; for a Townie. This thing is not normal, and I got it for less than their current cheapest model. I&rsquo;m assuming it was an experiment in making a &ldquo;pro&rdquo; Townie of some kind that failed, so maybe they just dumped existing stock and got back to the simpler baseline.</p>
<p>I love it.</p>
<p>I test-rode a Townie a very long time ago &hellip; about the time all the bike manufacturers were in some sort of &ldquo;nobody bikes anymore&rdquo; crisis and were coming out with things like the Trek Lime with automatic shifters and relaxed geometries that wouldn&rsquo;t &ldquo;intimidate&rdquo; people. Because I wanted something that could do a nine-mile commute, the Townies and Limes didn&rsquo;t work for me: The forward-pedaling geometry made it hard to stand up on a hill, and they were geared in a way that made them feel like renting a U-Haul with a throttle governor.</p>
<p>This bike still has the forward-pedaling geometry and the relaxed, swept back handle bars. To get it to fit correctly I did have to move the seat forward more than I have on other bikes, so it seems like a bike that would stop being a good fit for anyone under 5'9&quot; or so, but could accommodate someone around 6'2&quot; or 3. In fact, Ben rode it comfortably and he was easily 6'1&quot; or 6'2&quot; at the time. Combined with the big seat and the inability to really lean forward and bear down, it&rsquo;s content to live in the middle gears and just sort of roll along.</p>
<p>The built-in lights are probably best used to look for potholes at night, and you should have supplements for visibility. The front rack isn&rsquo;t huge, but comfortably carries a box of Trader Joe wine. The rear rack is a little weird: It doesn&rsquo;t seem to be compatible with any of the assorted fitment standards, including the Townie basket we got for Al&rsquo;s Trek e-bike. But it works fine with an Ortlieb or Banjo Brothers panniers, and there&rsquo;s always the milk crate treatment.</p>
<p>Oddities and almost-but-not-quite features aside, the thing I love about it is how upright and comfortable the ride is, and how smoothly it rolls on its largish wheels. I have taken it all the way downtown via both the Springwater and Clinton St. (8 and 6.5 miles, respectively) and it has been comfortable. You just can&rsquo;t try to put too much through the drive train or crank up any hills. You don&rsquo;t really corner with it: Turns are more like a kind of gliding swoop motion.</p>
<p>So it <em>feels</em> to me more or less like what I imagined the Dutch bike I wanted would feel like. Probably less efficient and more wasted power, but upright and easygoing. When I go around the neighborhood, up to Foster, over to Woodstock, or down the Springwater, it feels more like a sightseeing tour than a commute.</p>
<p>Anyhow, I&rsquo;ve had it out for the first time in a little while over the past week and was reminded how much I enjoy it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-16</title>
      <link>https://mike.puddingtime.org/posts/2023-05-16-daily-notes/</link>
      <pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-16-daily-notes/</guid>
      <description>org-gtd, liminal state, The Fugitive and class politics, homeless sweeps vibe shift.</description>
      <content:encoded><![CDATA[<h2 id="org-gtd-3">org-gtd 3</h2>
<p>So, I gave Things a look, <a href="/posts/2023-05-12-daily-notes/#my-things-link-to-org-stuff">as threatened</a>, and it just didn&rsquo;t work for me. I wanted it to, but I really, really like the intermingling of text and action I get in org-mode. It felt stilted and weird to have actions out on a special action island, and I love the integration between org-mode, magit, and projects you get &ldquo;batteries included&rdquo; in Doom: <code>SPC X p t</code> and you add a todo linked to the current point in the project document you&rsquo;re in, <code>SPC p t</code> and you get a list of all the todos in your current project.</p>
<p>So the next thing to do was try to figure out what wasn&rsquo;t working for me with a relatively unstructured set of todos in org. The sense of tradeoffs between a purpose-built GUI and a text interface often hangs on what you can &ldquo;just do&rdquo; with a GUI and a limited vocabulary of keyboard commands, and what you have to just type out by hand in a text interface. The thing that had me looking at Things to begin with was the sense that I had some projects/tasks of moderate complexity that were hard to structure in a way that I could completely document the work without making my org-mode agendas cluttered and noisy.</p>
<p><a href="https://fosstodon.org/@nickanderson/110356805230294205#.">Nick Anderson suggested org-edna</a> as a way to add sequencing and dependencies, but it felt like more than I wanted to get into. Using it &ldquo;naked&rdquo; is more typing. Wrapping it in automation makes some sense, but the time investment felt foreboding. And the more I thought about it, the more I realized that I don&rsquo;t want to orchestrate a bunch of things, I just want to have a narrow window into my list.</p>
<p>So I went down the rabbit hole of understanding how people do GTD in org-mode.</p>
<p>I am on the record as a GTD skeptic, less because of the worldview itself and more because of the culture that surrounds it. But I appreciate a few things about it:</p>
<ol>
<li>Having a trusted system.</li>
<li>Knowing where your inbox is.</li>
<li>Always knowing what&rsquo;s <em>next</em>, not feeling like you have to always know <em>everything</em>.</li>
</ol>
<p>Items 1 and 2 are easy enough to solve for. I have a mobile inbox with beorg, and I have a desktop inbox with my org-mode config and an <code>inbox.org</code> file. Close enough.</p>
<p>Item 3 was what I wanted some help with: I was hoping to find an agenda recipe that would limit me to seeing projects and <em>only</em> their next actions.  Because of the way people accrete functionality in org-mode, it got discouraging fast. It&rsquo;s the classic conundrum: You want to get all your stuff organized, but first you must architect a solution involving org-mode and gobs of lisp and three other modules, then cobble a UI around it if you want to work efficiently.</p>
<p>But, I also came across <a href="https://github.com/Trevoke/org-gtd.el">org-gtd</a>, which just hit version 3, and is a batteries included solution to doing GTD with org-mode, including a nice, constrained view of your next actions along with some &ldquo;use it if you want, I&rsquo;m not your mom&rdquo; extra stuff from the GTD paradigm.</p>
<p>Some stuff I like about it:</p>
<ol>
<li>Efficient capture</li>
<li>The ability to turn preexisting items in your org universe into org-gtd items</li>
<li>Tame agenda views of next actions</li>
<li>Peaceful coexistence with the rest of your org-mode setup</li>
</ol>
<p>I did have a few challenges getting it working that seemed to come down to some weirdness in my <code>custom.el</code> file and a bad interaction with encrypted <code>org-journal</code> files. Once I bisected and cleared out the customizations and let them rebuild, it worked smoothly. It leverages org-edna without making you <em>deal</em> with org-edna.</p>
<p>It does the basics well enough that I&rsquo;m interested in exploring some of the deeper GTD cuts with it.</p>
<h2 id="liminal-state">Liminal state</h2>
<p>But the other thing going on right now is that I am in another liminal state. It ought to resolve pretty quickly, but it&rsquo;s the difference between &ldquo;might have two quiet weeks ahead&rdquo; or &ldquo;might have five quiet weeks ahead,&rdquo; and also &ldquo;have you all seen what the hell is going on out there right now? omg the thought of sitting on ice for five weeks and hoping harsh macroeconomic realities don&rsquo;t knock me to the bottom of the hill again &hellip;&rdquo;</p>
<p>To the extent I am well resourced, have a plan, and have built in a lot of room to tolerate disruption, I&rsquo;m fine.  But I&rsquo;m also incredibly well rested, ready to get moving into the next phase, and am having a wee struggle just being in the moment when I am not sure how much moment I have to be in, if that makes any sense.</p>
<p>I just went through and averaged the number of years I&rsquo;ve spent at every job since I was 22. 5.33 years. When I include just the &ldquo;no, now I&rsquo;m really engaged in something called a profession&rdquo; run of the past 20 years, it&rsquo;s closer to eight years. The great thing about averaging eight years between changing jobs is that you only had to change jobs every eight years. The terrible thing about it is that you forget what it&rsquo;s like to be in that liminal state between jobs.</p>
<h2 id="the-fugitive-and-class-politics">The Fugitive and class politics</h2>
<p>I rewatched <em>The Fugitive</em> last night after listening to its <a href="https://www.patreon.com/unclearpod">Unclear and Present Danger</a> installment. They had some interesting insights into its class and racial politics, its &rsquo;90s liberal fascination with competence porn, and its sheer story-telling efficiency.</p>
<p>They noticed something about it that I remembered noticing when I rewatched <em>Rocky</em>, which was the gradual disappearance of working class life from movies.</p>
<p>Richard Kimball has to briefly set aside his middle class identity, and we get a little glimpse of his life masquerading as a janitor. Harrison Ford has a way of acting like someone pretending to be someone harmless that is sort of endearing and also took on some extra weight in <em>The Fugitive</em>. <em>We</em> know he&rsquo;s a high-level vascular surgeon, so when he&rsquo;s dressed in a janitor uniform and a doctor sort of bosses him around and he gets that &ldquo;Harrison Ford playing someone who is acting deferential even though they&rsquo;re really this high-level, super-competent person,&rdquo; it sort of lands.</p>
<p>Now, the hosts of Unclear and Present Danger want to call this out as &ldquo;liberal class consciousness,&rdquo; and I&rsquo;m not sure quite what I make of <em>that</em>. As a time capsule? Sure, I&rsquo;d argue liberals in the &rsquo;90s were more class conscious, because the Democratic Party was still struggling with its working class identity. But I also think &ldquo;its working class identity&rdquo; lost that struggle. Happy to discuss, but:</p>
<ul>
<li><em><a href="https://www.hachettebookgroup.com/titles/barbara-ehrenreich/fear-of-falling/9781455543748/">Fear of Falling</a></em>, Barbara Ehrenreich, 1989</li>
<li><em><a href="https://en.wikipedia.org/wiki/Listen,_Liberal">Listen, Liberal!</a></em>, Thomas Frank, 2016</li>
<li><em><a href="https://global.oup.com/academic/product/the-rise-and-fall-of-the-neoliberal-order-9780197519646?cc=us&amp;lang=en&amp;">The Rise and Fall of the Neoliberal Order</a></em>, Gary Gerstle, 2022</li>
<li>&ldquo;<a href="https://jacobin.com/2022/07/neoliberal-order-new-deal-recession-sanders-trump-new-left">The Neoliberal Order Is Crumbling. It’s Up to Us What Comes Next</a>,&rdquo; Interview with Gary Gerstle, Jacobin, 2022.</li>
<li>&ldquo;<a href="https://www.youtube.com/watch?v=XnvpdCPeIJU">When Will Neoliberalism Collapse? w/Gary Gerstle</a>,&rdquo; Jen Pan, Jacobin on YouTube, 2022</li>
</ul>
<p>&ldquo;Vote blue no matter who&rdquo; isn&rsquo;t the slogan of a working class party.</p>
<h2 id="sweeps-vibe-shift">Sweeps vibe shift</h2>
<p>We live next to a park, so I suspect we have a heightened awareness of whatever is going on with the city and its woeful response to homelessness. Combined with Al actually working in that subject area and frequently offering in our conversations, &ldquo;oh yeah, the new county chair has this initiative, so the Joint Office is in panic mode trying to make it happen,&rdquo; we&rsquo;ve got higher-than-average awareness of the surrounding policy.</p>
<p>In the 14 years we&rsquo;ve lived in Lents, homeless camping has gone from something that happened at the periphery of the neighborhood here and there to <a href="/posts/2016-04-17-please-be-considerate-of-my-neighbors/">very large encampments on the Springwater</a> that provoked fact-finding missions from state politicians, to just coming to accept that the block we live on will always be host to at least a busted up RV, trailer, or van; or maybe three; or maybe six or seven.</p>
<p>Something we&rsquo;ve gotten used to is that nothing ever really happens. Now and then PBOT comes through and slaps green stickers on cars. It doesn&rsquo;t seem targeted, to the extent they&rsquo;ll put them on vehicles that have been there for literal months, and they&rsquo;ll do it to a car that parked on the street this morning. I don&rsquo;t know much about city policy, so my guess, having once had an old Volvo I didn&rsquo;t drive much get stickered, is that it&rsquo;s more of a question than an assertion.</p>
<p>The most police activity we ever saw was when an RV caught on fire, killing the occupant.  The police came around the next day and watched while people broke into the dead man&rsquo;s car carted his things away, then hotwired the car and drove it off.</p>
<p>&ldquo;Well he&rsquo;s dead, so technically nobody owns it,&rdquo; said one, with his thumbs hooked in his tactical vest.</p>
<p>&ldquo;Well, one of his friends went to tell his daughter, so I think she&rsquo;d disagree.&rdquo;</p>
<p>&ldquo;Huh.&rdquo;</p>
<p>Just, &ldquo;huh,&rdquo; then turning back to watch the vultures.</p>
<p>But something seems to have changed.</p>
<p>When the city <a href="/posts/2023-05-04-daily-notes/#in-the-neighborhood">swept the squatters and RV encampment down the trail</a> not too long ago, it displaced a few RV owners who found their way onto our block and sort of kicked off the spring homeless camping season. We did our usual thing: Took over some food and water, said &ldquo;hi,&rdquo; and tried to learn what we could about them and their lives. We observe a &ldquo;good neighbors&rdquo; mentality about the whole thing, meaning it would take more than has ever happened to get us to call anyone in. A lot of our neighbors are less charitable about the whole thing. We got invited to one neighborhood meeting to discuss a more active period a few summers ago, and never got invited again after we said we weren&rsquo;t interested in low-grade harassment tactics.</p>
<p>Anyhow, this crew arrived, we made an attempt to make contact, we observed that these folks were less interested in contact, and we settled in for another period of having people encamped on the street. It has always, during times of heightened activity, meant fights at three in the morning, picking trash out of the yard, finding food wrappers and cans next to the outdoor outlets, getting the occasional report from one of the campers that someone else prowled our car or windows, and sometimes three or four old gas generators running 24/7 until we walk over and ask for a break from the noise.</p>
<p>The change this time is that PBOT showed up, did its sticker run, and someone posted the area for encampments. Park rangers showed up and explained that it wasn&rsquo;t okay to put bags of trash along the street in the park and warned that the unleashed Pit Bull needed to be restrained. A cleanup crew showed up and put everything unattended in a rented truck and drove off. Police have been doing slow-drives down the block eyeballing the folks who stuck around after the initial hazing. A trailer that got towed into place and left got a sticker this morning after a mere 48 hours. The average up to now was closer to months.</p>
<p>It&rsquo;s a change. I&rsquo;ve never seen any part of our corner of Lents get this kind of concentrated attention. I wonder what has changed.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-14</title>
      <link>https://mike.puddingtime.org/posts/2023-05-14-daily-notes/</link>
      <pubDate>Sun, 14 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-14-daily-notes/</guid>
      <description>org-mode evolution, fixing mu4e/Doom&amp;rsquo;s busted leader key, Guardians Vol. 3, not taking pictures lately</description>
      <content:encoded><![CDATA[<h2 id="guardians-of-the-galaxy-vol-dot-3">Guardians of the Galaxy, Vol. 3</h2>
<p>This weekend Al and I went down to Eugene to see Ben and have a small getaway, with a trip to the movies, too. We saw <em>Guardians of the Galaxy Vol. 3</em> and walked out of it feeling like we&rsquo;d seen a good conclusion to the trilogy. I always appreciate a good trailer fakeout, and the one they did for this one was sort of a double head-fake, making you think you&rsquo;d seen the high-stakes thing, then pulling that rug out from under in the first five minutes, then making the stakes high again.</p>
<p>It was a darker, more violent movie than the previous <em>Guardians</em> installments, maybe to raise the stakes high enough to make it all feel like a good sendoff. Parts of it are heart-rending. There&rsquo;s a little <em>Wizard of Oz</em> stuff going on at the end I choose to give a pass, because James Gunn appears to be decamping from the MCU to go do DC stuff and I get the need to provide a little closure I&rsquo;m not sure anyone was asking for.</p>
<p>I was a pretty big Howard the Duck fan as a grade schooler, so I&rsquo;ve always appreciated the way Cosmic Marvel balances the, er, cosmic stakes with a little silliness. <em>Guardians Vol. 3</em> keeps the silliness, pulls the stakes in a little, and manages more darkness than usual. It was an interesting balacing act that seemed to work.</p>
<p>We couldn&rsquo;t go to a normal showing so we had to do a 3D show, and that didn&rsquo;t do much for my opinion of 3D. Always seems like the screen is a little more dim and some detail is lost for not a ton of benefit.  I&rsquo;ll be happy to see it at home when it starts streaming.</p>
<p>Also, Portland movie-going audiences are, on balance, better than the Eugene one we dealt with. Lots more people in their phones, more chatter in the audience. The glare of the phones is worse than the chatter, which was at least sort of participatory and topical vs., like, random couple behind you is processing their relationship for 140 minutes (my <em>Magnolia</em> experience years ago). OTOH, it was Saturday night of the second week of the run. We tend to do the movies that matter to us at quiet matinees and don&rsquo;t go to many weekend evening shows anymore, so maybe the crowds we&rsquo;re used to are not going because it&rsquo;s a social event.</p>
<h2 id="dug-out-my-old-org-mode-config">Dug out my old org-mode config</h2>
<p>Maybe seven or eight years ago I was working in a group that had an intense progeress reporting culture. I was entrenched in org-mode and had things set up such that I could make a status report out of my <code>work.org</code> file with a quick export. It was not a bad way to live: If I was just keeping track of the things my team was doing, my status report was pre-written on Friday morning.</p>
<p>I went digging around in the config I had set up from that period and it&rsquo;s interesting how much weight I was putting on tags for my organization. I&rsquo;ve got a ton of custom agenda views set up for people, teams, and contexts. Now that I look at it again, I guess I was still trying to do gtd in some form or another, because I can also see custom agenda views for <code>NEXT</code> items.</p>
<p>The emphasis on tags was also about the benefit of emergent organization. My custom agenda commands were really simple affairs, organized around a top-level &ldquo;people, teams, contexts&rdquo; scheme. So if I was walking into a 1:1 with, say, &ldquo;Isaac,&rdquo; I could invoke the agenda dispatcher and tap <code>p i</code> (&ldquo;people&rdquo; &ldquo;isaac&rdquo;) to get all our topics. In the context of my weekly status reports, which were director-level things, you could scan down all the work in flight in my group and see the people tags if you wanted to know who was on what.</p>
<p>Anyhow, by making simple configs, like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="s">&#34;g&#34;</span> <span class="o">.</span>  <span class="s">&#34;Groups&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="s">&#34;gd&#34;</span> <span class="s">&#34;Docs&#34;</span> <span class="nv">tags-todo</span> <span class="s">&#34;docs&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="s">&#34;gD&#34;</span> <span class="s">&#34;DIO&#34;</span> <span class="nv">tags-todo</span> <span class="s">&#34;DIO&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="s">&#34;gs&#34;</span> <span class="s">&#34;Staff&#34;</span> <span class="nv">tags-todo</span> <span class="s">&#34;staff&#34;</span><span class="p">)</span></span></span></code></pre></div>
<p>&hellip; I could easily add new tags to the agenda dispatch as they came into prominence, or retire old ones.</p>
<p>This time around, I&rsquo;ve got a lot more up-front organization. I guess I didn&rsquo;t really know about categories back then, because I see no evidence I ever used them. Now, every file has a category, and most of the top-level headings in any of my files have a <code>:CATEGORY:</code> property. It makes the agenda view cleaner (category names, not file names) and  it&rsquo;s easy to quick-filter by category (tap <code>s c</code> to &ldquo;filter on category at point&rdquo;).</p>
<p>Part of what makes that work is also a growing hierarchy of org-capture templates. I was wondering why I didn&rsquo;t do more with that back then until I found a bunch of config around <code>org-remember</code>. That was still the &ldquo;get this thing out of your head&rdquo; option when I first started using org-mode. I can see some generic <code>org-capture</code> stuff I pasted in, but it&rsquo;s rudimentary and I am pretty sure I never really used it. Now, I have a variety of org-capture templates that target specific headings in my org-mode files. I tend to work in transient capture buffers, not within files.</p>
<p>With a more robust org-capture hierarchy, categorization of headings, more active use of the agenda, and increasing use of org-roam, I don&rsquo;t spend much less time in my org-mode files this time around.</p>
<p>Once a week, given my current employment circumstances, I have to go through and read some log entries I capture. When I work on a daily post, I have a capture template to instantiate the entry, but I quickly move it to an indirect buffer. I&rsquo;m writing this subheading in an indirect buffer that started from a &ldquo;blog idea&rdquo; capture template with an <code>IDEA</code> type, to make sure I can see all my blogging ideas in the agenda. When an idea doesn&rsquo;t pan out to my liking but I invested time in it, I atomize it into org-roam with <code>org-roam-extract-subtree</code> and tag it. I need to rewrite some of my PRM functions to operate from the agenda, but I&rsquo;d otherwise never actually touch my <code>contacts.org</code> file, either.</p>
<p>I guess what I&rsquo;m getting at is that the trend feels more and more like atomization and abstraction toward the construction of a plaintext database, and less like &ldquo;working on individual text files.&rdquo;</p>
<p>Which I&rsquo;m really happy about. You can do a ton to make org-mode files look nice and do some auto-formatting, but it&rsquo;s easy to get hung up on everything lining up nicely instead of remembering it&rsquo;s all just data that tends to be readable in its own context, even if it isn&rsquo;t perfectly tidy in a wider context.</p>
<p>It&rsquo;s the smarts I was talking about <a href="/posts/2023-05-12-daily-notes/#my-things-link-to-org-stuff">when I wrote about linking stuff in Things</a> that org-mode running in Emacs gives you that doesn&rsquo;t exist in the org syntax highlighters you get in other editors, and that apps like Ulysses get close to but can&rsquo;t quite manage.</p>
<h2 id="fixing-doom-s-busted-leader-key-in-mu4e">Fixing Doom&rsquo;s busted leader key in mu4e</h2>
<p>I am not using mu4e (much), and one of the reasons it was easy to set aside was some brokenness in the way its keybindings interact with Doom Emacs: The space key stopped being the normal Doom leader key and started being the scroll key. I tried to remap it using what I understood of Doom keymapping, but nothing doing. About three weeks ago I posted a question in the Doom Emacs subreddit and on the Doom Discourse, but the best I got was &ldquo;yeah, upstream&rsquo;s broken.&rdquo;</p>
<p>Yesterday <a href="https://old.reddit.com/r/DoomEmacs/comments/12t98y6/using_mu4e_in_doom_how_can_i_get_the_spacebar/jk132gw/">someone on the subreddit finally replied</a> with a recipe:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">after!</span> <span class="nv">mu4e</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">evil-define-key*</span> <span class="o">&#39;</span><span class="p">(</span><span class="nv">emacs</span><span class="p">)</span> <span class="nv">mu4e-main-mode-map</span> <span class="p">(</span><span class="nv">kbd</span> <span class="s">&#34;SPC&#34;</span><span class="p">)</span> <span class="ss">&#39;doom/leader</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">evil-define-key*</span> <span class="o">&#39;</span><span class="p">(</span><span class="nv">emacs</span><span class="p">)</span> <span class="nv">mu4e-headers-mode-map</span> <span class="p">(</span><span class="nv">kbd</span> <span class="s">&#34;SPC&#34;</span><span class="p">)</span> <span class="ss">&#39;doom/leader</span><span class="p">))</span></span></span></code></pre></div>
<p>That syntax is &hellip; <em>impossible</em> &hellip; to me. But it works.</p>
<h2 id="picture-taking-dot-i-m-not-doing-it-much-dot">Picture taking. I&rsquo;m not doing it much.</h2>
<p>After months of constant photography, I just stopped taking pictures. I know my Fujifilm has a few dozen pictures sitting on the card, and I haven&rsquo;t even taken pictures on the phone except to do things like grab a picture of a receipt or remember which floor of a parking garage I&rsquo;m on.</p>
<p>I remember the morning Al and I were going to head out the door for a coffee walk and I grabbed the camera, then thought about the photos I hadn&rsquo;t even processed still sitting on the card, and just put it down. I also remember taking it with me to Astoria and just not wanting to shoot anything: I left it in the hotel and maybe took a phone picture or two that I promptly forgot.</p>
<p>I go through periodic no-pictures phases. This one has lasted a while. Looking in Lightroom, this is the last picture I took that really mattered much to me, from February:</p>
<figure><img src="/img/blizzard.jpg"
    alt="Monochrome. Two people cross a street at night during a snowstorm."><figcaption>
      <h4>Late February snow storm</h4>
    </figcaption>
</figure>

<p>And in that picture is probably what passes for &ldquo;the issue.&rdquo;  That was an interesting evening I was excited to get out into and shoot. The camera ended up being caked in snow and ice and it was a miserable experience to be out walking around in it.</p>
<p>Since then and up until the past week or so, it has mostly been &ldquo;normal Portland late winter and early spring,&rdquo; so, flat and kinda gray. We haven&rsquo;t traveled at all.</p>
<p>But the other part of it is that I&rsquo;ve been happy to let things be that way. The last time I went on a long hiatus from regular shooting I felt sort of weird and guilty about it. Like I was not being Mr. Picture Guy, and that meant something was wrong with me because I&rsquo;m supposed to be Mr. Picture Guy.</p>
<p>This time around I thought about it after a few weeks of feeling weird about it and remembered something a writing professor once suggested to me about the times I wasn&rsquo;t being Mr. Writing Guy, which is that it&rsquo;s fine to go through periods where that sense of drive and need isn&rsquo;t there, and that it&rsquo;s even good to let a sense of pressure and drive build up a little before giving it voice.</p>
<p>This weekend I saw some things in Eugene that left me wishing I had a camera besides my phone handy. I paused and watched those scenes and thought about what I was missing &hellip; what I could be capturing &hellip; and felt a twinge of regret that I hadn&rsquo;t grabbed a camera on the way out the door.</p>
<p>Nice to have that feeling.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-12</title>
      <link>https://mike.puddingtime.org/posts/2023-05-12-daily-notes/</link>
      <pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-12-daily-notes/</guid>
      <description>Automation vs. Augmentation, ChatGPT and ideology, day one of the Things/org experiment.</description>
      <content:encoded><![CDATA[<h2 id="automation-vs-dot-augementation">Automation vs. Augementation</h2>
<p><a href="http://www.zephoria.org/thoughts/archives/2023/04/21/deskilling-on-the-job.html">This is a thoughtful piece by danah boyd</a> that gets to some things I&rsquo;ve been thinking about re: AI.</p>
<blockquote>
<p>Whether you are in Camp Augmentation or Camp Automation, it’s really important to look holistically about how skills and jobs fit into society. Even if you dream of automating away all of the jobs, consider what happens on the other side. How do you ensure a future with highly skilled people? This is a lesson that too many war-torn countries have learned the hard way. I’m not worried about the coming dawn of the Terminator, but I am worried that we will use AI to wage war on our own labor forces in pursuit of efficiency. As with all wars, it’s the unintended consequences that will matter most. Who is thinking about the ripple effects of those choices?</p>
</blockquote>
<p>There is a lot of commentary <a href="https://www.reddit.com/r/MetaFilterMeta/comments/13chd82/how_many_people_are_feeling_or_fearing_the_impact/">in this r/metafiltermeta thread about AI</a>, which was framed from a place of anxiety:</p>
<blockquote>
<p>I&rsquo;m reading about AI&rsquo;s impact on coding, graphic design, video, motion graphics, architecture and law. I hear proponents say that they think AI will change jobs, and that smart workers will learn how to use it as an assistant, but when I review Silicon Valley&rsquo;s contributions to labor in the U.S., mostly I see entire fields gutted, and folks moved over to poorly paying gig economy work.</p>
</blockquote>
<p>The more thoughtful responses pointed, I think correctly, to the eventual Gartner Hype Cycle state of equilibrium you get to once you get unrealistic expectations out of the way, trudge through the salty marshes of &ldquo;told you it was all bullshit,&rdquo; and get to &ldquo;how is this thing going to be used day-to-day?&rdquo;</p>
<p>The people at the Peak of Inflated Expectations do what they always do: Try to solve their problems in a manner ill suited to the tool in front of them, or in a manner that is not reflective of the limitations of the model. The chorus waiting for them down at the bottom of the Trough of Disillusionment has no single motivation: Some of it is wise realism, forward thinking, and experience; some of it is whistling past the graveyard or just missing that &ldquo;productivity gains,&rdquo; like many things in technology and business, are not a series of home runs and grand slams, but rather singles and the occasional double. Reframed more bleakly, grinding down labor&rsquo;s ability to resist induced precarity is a game of inches.</p>
<p>Which is the long way around to saying that if the people who are pointing to offshoring and content-farming mania of the naughts and tens are correct in saying they&rsquo;re the closest analogies we have, and if danah boyd is right that &ldquo;we tend to optimize towards more intense work schedules whenever we introduce new technologies while downgrading the status of the highly skilled person,&rdquo; then it&rsquo;s going to mean fewer people working in AI-effected systems that are biased toward always looking for one more headcount they can get away with removing. It&rsquo;ll look different from the &ldquo;prompt engineering&rdquo; everyone imagines today. It&rsquo;ll be software companies figuring out how to integrate existing &ldquo;dumb&rdquo; systems with generative AI systems acting as synthesizers, with a few humans acting as QA on top of that process, working from a weakened position.</p>
<h2 id="chatgpt-is-an-ideology-machine">&ldquo;ChatGPT Is an Ideology Machine&rdquo;</h2>
<p><a href="https://jacobin.com/2023/04/chatgpt-ai-language-models-ideology-media-production/">Jacobin last month</a>:</p>
<blockquote>
<p>A wide variety of Marxists have also seen ideology as a form of kitsch. First articulated by the Marxist art critic Clement Greenberg in 1937, the notion of kitsch is “pre-digested form.” Among all the things we might say or think, some pathways are better traveled than others. The form of those paths is given; we don’t need to forge them in the first place. The constant release of sequels now has this quality of kitsch — we know exactly where we are when we start watching a Marvel movie. For Greenberg, the avant-garde was the formal adventurer, creating new meaning by making new paths. Hegemony and kitsch are combined in the output of GPT systems’ semantic packages, which might miss aspects of “the world” but faithfully capture ideology.</p>
</blockquote>
<h2 id="my-things-link-to-org-stuff">My Things link to org stuff</h2>
<p>Today I started using the org-protocol stuff <a href="/posts/2023-05-11-daily-notes/#connecting-things-todos-to-org-headings">I talked about yesterday</a> with a set of regular todos I added to Things. For my daily writing and journaling todos, I captured links to the headings from the org documents and pasted them into the notes field of the Things todo before marking them done. Clicking on those links brings up a new Emacs frame that jumps straight to the heading in the correct file.</p>
<p>That pretty much recreates the workflow I had with Bear and Things for other kinds of task/notes combinations, and it shows me how to use org-protocol and org-capture to do similar kinds of workflows where Emacs participates in the rest of my tools ecosystem.</p>
<p>So, promising trial experience. I&rsquo;m a little becalmed on heavy-duty task/work tracking right now, so I&rsquo;m satisfied to just note that the idea works and that I&rsquo;ll keep using it to find out where the edge cases are: Something always comes up.</p>
<p>The idea that keeps popping up in my head is that a lot of my past &ldquo;emacsimalism&rdquo; &ndash; a recurring phase I&rsquo;ve experienced over several decades &ndash; was due to the fact that Emacs was pretty much a technology island. The Mac builds weren&rsquo;t always very good, and the ways in which it could speak to the system around it were sort of flaky. But things like org-protocol and a little bit of utility glue with osascript do a lot to make it easier to find your way into and out of Emacs. You don&rsquo;t <em>have</em> to make it your everything because it can work well <em>alongside</em> other things that might suit your individual style better. The idea I&rsquo;m sort of nibbling around right now is that I don&rsquo;t like org-mode for <em>organization of work and tasks</em> so much as I like it for <em>organization of text and ideas</em>. It&rsquo;s less &ldquo;a smarter Things, OmniFocus, or Reminders,&rdquo; and more &ldquo;what I wish Ulysses had been.&rdquo;</p>
<p>Maybe that&rsquo;s why assorted org syntax implementations in more modern text editors (e.g. BBEdit, Sublime, Atom, VSCode) are always disappointing: They&rsquo;re usually just syntax highlighting and no smarts. Might as well just be doing Markdown at that point, because the <em>smarts</em> of org-mode pretty much live in Emacs and lisp. Without that, you&rsquo;re just quibbling over whether a backslash or an asterisk is better <code>emph</code> notation.</p>
<p>Anyhow, we&rsquo;ll leave it at that until there&rsquo;s something new to say. I think I&rsquo;ve visited this topic plenty.</p>
<h2 id="twitter">Twitter</h2>
<p>I disabled my Twitter account late last month, so I think I have a bit under two weeks for it to fully deactivate. I think I will thread the needle between making an <em>announcement</em> and merely noting that I have embarked on the process of closing my account by making it the last heading of today&rsquo;s post, unmentioned in the summary.</p>
<p>There&rsquo;s a needle to thread because my strong preference would be for people to give up on Twitter. So if you&rsquo;re someone with whom I might have some influence, I&rsquo;m happy for you to read this and do the primate thing &ndash; &ldquo;Hm, Mike is a thoughtful, ethical person whose ideas I tend to take under advisement, and he sees Twitter as, on balance, negative and harmful, so I will take that idea under advisement, as well.&rdquo;</p>
<p>That&rsquo;s all.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-11</title>
      <link>https://mike.puddingtime.org/posts/2023-05-11-daily-notes/</link>
      <pubDate>Thu, 11 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-11-daily-notes/</guid>
      <description>BBEdit turns 30, Emacs update, Things, OmniFocus, etc.</description>
      <content:encoded><![CDATA[<h2 id="bbedit-turns-30">BBEdit turns 30</h2>
<p>Just after <a href="https://mike.puddingtime.org/posts/2023-05-10-daily-notes/">I was remembering it yesterday</a>, there&rsquo;s a <a href="https://news.ycombinator.com/item?id=35904320">nice appreciation of BBEdit going on over at HackerNews.</a> One comment captured my opinion pretty well:</p>
<blockquote>
<p>I read about BBEdit on HN a few months ago and realized it has one use-case where it excels: text transformation and regex search/replace across files. When it comes to this, no other editor I know can hold water: neither Sublime, nor VS Code, nor Vim. And forget about Emacs, as regexes need to be awkwardly double or triple backslashed.</p>
<p>Text transformations can be done via regex, predefined functions, or any scripting language, where the scripts will be listed in the menu.
Regex search/replace has a history of used patterns, so you can reuse them.</p>
<p>All in all, it is a very lightweight editor with excellent text transformation features that no other editor can offer.</p>
</blockquote>
<p>It is definitely my go-to for that kind of thing. I used to feel sort of guilty that I wasn&rsquo;t trying to get heavy-duty text transforms done from the shell, then I wised up: BBEdit makes it fast, reversible, repeatable, and visually discoverable. And it will plow through large files like nothing else. I keep a license around just for scenarios like &ldquo;need to do something to 2,000 Markdown files&rdquo; or what have you.</p>
<p>Also, my interactions with BareBones for support have been so amazingly helpful and cordial.</p>
<p>Thirty years old and still an evolving, high quality product that I reach for when &ldquo;I just need to get this task done.&rdquo;</p>
<h2 id="emacs-update">Emacs update</h2>
<p>The last few days I&rsquo;ve started getting reminders of a fundamental truth of Emacs life, which is that you will eventually push it a little too far with the new stuff and it starts getting punchy and stops feeling trustworthy.</p>
<p>I got a little excited about some tweaks, and I&rsquo;m glad I was applying them one at a time and seeing what happened, because when one of them hard-locked Emacs it was simple to just go back into my <code>config.org</code> file,  <code>:tangle no</code> the offending config, and comment out the problematic package in <code>packages.el</code>.</p>
<p>This is a part of Emacs life, though, that Doom Emacs has made better: It makes configuration simple. I love being able to organize config blocks under headings I can manage with org-mode structure editing, and I appreciate the simplicity of package management. There are a few more steps to get some things done, but they&rsquo;re simpler steps than how I used to manage Emacs.</p>
<p>When I hard-locked it yesterday it was a small bummer but it was also easy to undo the change and get back up and running. I&rsquo;ve felt the difference in how I feel when I sit down to use Emacs over the past while: It has gone from &ldquo;well, I wonder what sort of fatal self-own I&rsquo;m going to suffer from today&rdquo; to &ldquo;this is a stable tool I like using and don&rsquo;t worry about much.&rdquo;</p>
<p>It&rsquo;s such an open ecosystem, and extending it involves so much complexity, that the bits like &ldquo;oh, added that package and it crashed trying to open a file&rdquo; are just going to be part of it. But you deal with that by following a &ldquo;no new toys with an unsaved buffer of something that matters to you&rdquo; rule and making incremental changes.</p>
<h2 id="organizing-work-todo-apps">Organizing work &ndash; todo apps</h2>
<p>I spent a little time watching reviews and comparisons of Things and OmniFocus 3 today. Last night I started putting together a 90-day plan in org-mode and was enjoying the &ldquo;actions/prose&rdquo; hybrid of org-mode, but also thinking &ldquo;this is getting complex and these lists are pretty sequential and interdependent &hellip; I wonder if I want to put this weight on org-mode.&rdquo;</p>
<p>So I watched the videos, downloaded OmniFocus 3 again (I&rsquo;ve had a license for a few years), and took a stab at entering a few small chunks of work to see how it felt.</p>
<p>Not great.</p>
<p>I don&rsquo;t spend a lot of time worrying too much about how apps look, but OF is just sort of unappealing in that regard.</p>
<p>When I look at Things, there&rsquo;s a lot of visual appeal. You can&rsquo;t do much to control it, but you don&rsquo;t need to. The color scheme and roominess of the interface really work for me. When I look at an org-mode buffer, it is a very different aesthetic. I recently stopped doing mixed-mode and just live in good old Fira Code in a single size. But I&rsquo;ve got good light and dark themes and once I figured out how to control line-spacing it opened things up a little and made it feel less like a &hellip; like smelly ASCII cave. Looking over at MailMate, I can also exercise a little bit of control, so even though it is a visually simple app, the bit of decoration it does have is clean and I can pick my typefaces.</p>
<p>OmniFocus has some customization options, but I&rsquo;ve always struggled with its font sizes, sort of resenting the iOS-style &ldquo;small/medium/large/larger/very larger&rdquo; restriction on my choices, especially because there&rsquo;s a wide range of text size going on within the UI. It is also cramped. The UI is packed tight and even lists of project headings feel claustrophobic and closed in.</p>
<p>Things 3, one might respond, has next to no customization, either. Fewer choices than OF3, even. But it&rsquo;s just better done out of the box. It reminds me of something the UX designers at Puppet would have come up with in that it feels light and open.</p>
<p>That&rsquo;s a lot of time on looks, but if you have to look at the thing all day, they start mattering.</p>
<p>I think mostly I just managed to remind myself that I really loved the <em>idea</em> of OmniFocus years and years ago, but in practice it never stuck for long.</p>
<p>Things is harder to discard. It&rsquo;s just pleasant to work with, it&rsquo;s logically organized, the mobile apps are very good, and I really like the way you can organize a project with headings that are loose enough to have whatever meaning you care to give them: Milestones, themes, phases, or whatever. There&rsquo;s light Markdown sprinkled into the text areas, too. If you were not hung up on ultimate portability, the typography is clean and legible enough that you could manage prose notes in Things.</p>
<p>Back in the day, when I was using <a href="https://bear.app">Bear</a> a lot for note-taking in conjunction with Things as my task manager, I would just include a link to a Bear note in the notes field in Things. So, for instance, the Things project I had set up for my team had a heading for each member of the team where followup items went, and a link to the individual team member&rsquo;s note in Bear for prose. It worked pretty well.</p>
<h3 id="connecting-things-todos-to-org-headings">Connecting Things todos to org headings</h3>
<p>I wondered if I could do that with Emacs and an org-mode heading, and yes, I can.</p>
<p><a href="https://emacs.stackexchange.com/questions/47986/jump-to-org-mode-heading-from-external-application">This StackOverflow post</a> provided two bits of code to add navigation to a given org-mode heading using <code>org-protocol</code> and to yank the link from a given heading. It points to <a href="https://github.com/xuchunyang/setup-org-protocol-on-mac">this page</a> on how to make a simple little AppleScript app that registers <code>org-protocol</code> as a valid URL handler in macOS. I bound the link-grabbing function to <code>SPC n L</code> in Doom, and gave it a try by pasting the link into a Things note &hellip; yup &hellip; worked: Dropped me into a new Emacs GUI window with the point on the org-heading.</p>
<figure><img src="/img/things_emacs.jpg"
    alt="Screenshot of a Things todo with a link to a heading in an org-mode buffer"><figcaption>
      <h4>Things with an org-protocol link pointing to an org-mode blog post heading</h4>
    </figcaption>
</figure>

<p>Will I use it?</p>
<p>I don&rsquo;t know!</p>
<p>I remember my Things/Bear workflow being a very nice harmonization of two different kinds of work that lived in single-function apps. org-mode blurs those lines all on its own. I <a href="/posts/2023-05-02-daily-notes/#my-org-contacts-file-and-things">wrote a little about this several days ago</a> in relationship to my plaintext PRM.</p>
<p>I really like how clean Things is for capturing stuff from all sorts of places on my phone and computer. I like its seamless integration with existing macOS and iOS calendars and Reminders. I can do that stuff in org-mode and Emacs, but it takes a little extra work and feels more brittle. There are mobile apps for org-mode, like beorg, but they do feel a little clunkier than Things.</p>
<p>So I guess I&rsquo;ll take that small chunk of planning I was working on in Things, expand it to more stuff,  and see how it feels when I can link in to org-mode documents as easily as I can now.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-10</title>
      <link>https://mike.puddingtime.org/posts/2023-05-10-daily-notes/</link>
      <pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-10-daily-notes/</guid>
      <description>org-babelified API noodling with verb, org-sticky-header, Amazon&amp;rsquo;s Citadel</description>
      <content:encoded><![CDATA[<h2 id="noodling-http-with-verb-and-emacs">Noodling http with verb and Emacs</h2>
<p>My traditional &ldquo;poke around an API&rdquo; tool is usually an irb session, because I&rsquo;m probably headed for Ruby once I understand what I&rsquo;m asking for. This morning <a href="https://www.reddit.com/r/emacs/comments/13dq9ew/emacs_as_rest_api_client/">a thread on r/emacs</a> led me to <a href="https://github.com/federicotdn/verb">verb</a>, an org-mode-aware http client. At its simplest, you give it an org heading like this, from the project page:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl">       <span class="k">* </span>Example request :verb:
</span></span><span class="line"><span class="cl">       get https:/<span class="ge">/api.ipify.org/</span>?format=json</span></span></code></pre></div>
<p>Then <code>verb-send-request-on-point</code> to get a buffer with the json response.</p>
<p>But it also works with org-babel:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+begin_src</span> <span class="nv">verb</span> <span class="nb">:wrap</span> <span class="nv">src</span> <span class="nv">ob-verb-response</span>
</span></span><span class="line"><span class="cl"><span class="nf">get</span> <span class="nv">https://api.ipify.org/?format=json</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+end_src</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+RESULTS:</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+begin_src</span> <span class="nv">ob-verb-response</span>
</span></span><span class="line"><span class="cl"><span class="nv">HTTP/1.1</span> <span class="mi">200</span> <span class="nv">OK</span>
</span></span><span class="line"><span class="cl"><span class="nv">Content-Length:</span> <span class="mi">23</span>
</span></span><span class="line"><span class="cl"><span class="nv">Content-Type:</span> <span class="nv">application/json</span>
</span></span><span class="line"><span class="cl"><span class="nv">Date:</span> <span class="nv">Wed,</span> <span class="mi">10</span> <span class="nv">May</span> <span class="mi">2023</span> <span class="nv">17:18:25</span> <span class="nv">GMT</span>
</span></span><span class="line"><span class="cl"><span class="nv">Vary:</span> <span class="nv">Origin</span>
</span></span><span class="line"><span class="cl">   <span class="nv">{</span>
</span></span><span class="line"><span class="cl">    <span class="s">&#34;ip&#34;</span><span class="o">:</span> <span class="s">&#34;97.115.5.6&#34;</span>
</span></span><span class="line"><span class="cl">   <span class="nv">}</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span><span class="nv">+end_src</span></span></span></code></pre></div>
<p>That&rsquo;s delightful.</p>
<p>As I&rsquo;ve leaned more and more into org-babel, I&rsquo;ve been trying to figure out why it feels both like a big discovery but also something I remembered doing, and it finally occurred to me this morning: I used to use BBEdit&rsquo;s &ldquo;<a href="https://www.barebones.com/products/bbedit/benefitsintegrate.html#worksheet">shell worksheets</a>&rdquo; all the time to test and model a suite of scripts I&rsquo;d written to help with my copyediting work.</p>
<p><video width="100%" controls><source src="/img/bbedit-worksheet.mp4" type="video/mp4">
Your browser does not support the video tag.</video></p>
<p>My main use case was &ldquo;here&rsquo;s a filter I wrote, I&rsquo;ve got some problematic HTML from some writer sitting here, paste it over in the worksheet, run the filter on it, see how it goes.&rdquo; It&rsquo;s been &hellip; wow, a little while &hellip; since I was doing that. I just did a quick spotlight search on the librarified version and it looks like the last time I edited it was 2009.</p>
<h2 id="org-sticky-header-mode">org-sticky-header-mode</h2>
<p>Sometimes, deep into an org-mode file, I get sort of lost and wondering where I am. <a href="https://github.com/alphapapa/org-sticky-header">org-sticky-header</a> is for those times, providing a breadcrumb line at the top of the window:</p>
<figure><img src="/img/org-sticky-header.jpg"
    alt="An Emacs screenshot showing breadcrumbs of org headings"><figcaption>
      <h4>org-sticky-header in my ox-hugo file.</h4>
    </figcaption>
</figure>

<h2 id="more-like-cit-a-dumb-amirite">More like cit-a-dumb, amirite?</h2>
<p>Al and I saw a trailer for Amazon&rsquo;s <em><a href="https://en.wikipedia.org/wiki/Citadel_(TV_series)">Citadel</a></em> in a movie theater and being the sort of people we are it seemed like catnip. Waiting around for it to arrive, I perused the reviews and was only mildly surprised that they were savage. We watched it anyhow, and I guess I think two things:</p>
<ol>
<li>
<p>It&rsquo;s a very expensive spy show by people who produced <em>Avengers</em> movies, so yes, it is something of a pastiche. A little <em>Mission Impossible</em>, a little <em>Bourne Identity</em>, a little <em>Black Widow</em>, a little <em>Agents of SHIELD</em>, a little <em>Kingsmen</em>.  There&rsquo;s a soapy element to it. You can MST3K the living hell out of it on the first watch.</p>
<p>Do I <em>like</em> it? I mean, yeah? It is not demanding, it&rsquo;s a little silly, you could even call it <em>dumb</em> in an endearing way. It is for sure trope-y, anyhow. I don&rsquo;t end an episode feeling resentful of the time lost &ndash; good sign! &ndash; and it is honest about how it intends to get you back each week: reveals, as opposed to more puzzles.</p>
</li>
<li>
<p>TV criticism is really tedious.</p>
</li>
</ol>
<p>This is not a &ldquo;let people like dumb things, critics!&rdquo; complaint.</p>
<p>It would be really weird to me if a big, expensive Amazon spy show&rsquo;s critics/audience enjoyment ratio skewed high on the critics side. Big, expensive, popular entertainments are miraculous constructions of cross-demographic box-checking and cynical cultural manipulation designed to do about as well in Topeka as they do in Atlanta. Television critics, on the other hand, come out of a narrower cultural milieu, and exist in uneasy tension with their reading audiences.</p>
<p>I&rsquo;d <em>hate</em> having to go review an <em>Avengers</em> movie, or a season of the new <em>Star Trek</em> show, or a new <em>Star Wars</em> thing, because the fandom for established properties is <em>right there</em>, waiting for you to not like their thing they like. It&rsquo;s sort of complicated by the occasional swerve: Gender-flip a property, play with elvish phenotypes, etc. and that makes it fraught in a different way and the calculation changes.</p>
<p>Something greenfield, though &ndash; a non-property &ndash; and I&rsquo;d guess critical instincts are on clearer display. Maybe the stars bring along a fandom, but it&rsquo;s just not as dangerous.</p>
<p>The reviews for <em>Citadel</em> felt a little like that. Like, sort of harsh over stuff that gets a pass when it&rsquo;s attached to a big franchise. And a lot of focus on inside baseball: Changing creative teams, the production cost, etc.</p>
<p>So, subhead aside, you know, <em>Citadel</em> seems better than the critical consensus. I&rsquo;d say its current &ldquo;middling C&rdquo; audience score is more fair than its &ldquo;high F&rdquo; critical average. If I had my thoughts completely in order around genre grade-curving, I might even go higher than &ldquo;middling C.&rdquo; Its Major Genre is &ldquo;spy thriller,&rdquo; and its Supporting Flavors are &ldquo;breezy&rdquo; &ldquo;romantic,&rdquo; &ldquo;light,&rdquo; and &ldquo;cross-demographically appealing.&rdquo; Your curve can do a lot of work with that.</p>
<p>My gut tells me it is not going to produce a lot of stans &ndash; It seems like the kind of thing I imagine <em>every</em> generation believes the next older generation would prefer a little more. But it&rsquo;s also an okay diversion. If I watched a <em>lot</em> of t.v. and really believed every minute of it needed to count, <em>Citadel</em> probably would not make the cut. But I tend to watch t.v. when I do not want to invest the time in a movie, and feel a little too tired to read a book. Things like <em>Citadel</em> work great for me.</p>
<h2 id="carrion-comfort">Carrion Comfort</h2>
<p>I don&rsquo;t know why Dan Simmons&rsquo; <em><a href="https://www.goodreads.com/en/book/show/11286">Carrion Comfort</a></em> burbled back up on social media, but it did, and I was fresh off a re-read of <em><a href="https://www.goodreads.com/en/book/show/18956">Homicide</a></em> that was sort of grueling this time, so I figured what the hell.</p>
<p>Which makes two books in a row that I picked up remember-expecting one thing and finding something harder.</p>
<p><em>Homicide</em> was one of the foundational texts of what became <em>The Wire</em>, which I recently re-watched. The book and series share characters (real people in <em>Homicide</em> thinly adapted for <em>The Wire</em>) and some scenes in <em>The Wire</em> are lifted straight from <em>Homicide</em>.</p>
<p><em>The Wire</em> holds up well today. The cast is diverse, and that softens some of its harder observations about racial politics in a one-party town, by which I guess I mean, &ldquo;which lets it get away with Clay Davis as a character.&rdquo; <em>Homicide</em> also holds up, despite being published in the late &rsquo;80s, but I think it probably enjoys something of a reverse pedigree, too, and I think it would bother a lot of people if it came out today: There&rsquo;s much less appetite for its rough irony, even if you have no problem locating where its heart is at, and even if you know to treat it like honest reporting.</p>
<p>But wow was it hard to read this time. It probably should be hard to read a book about a year in the life of a homicide squad in a city that averages better than a murder a day. It doesn&rsquo;t flinch. It took me forever to get through, because it was just hard to read it.</p>
<p>But it also felt important to read it. It reminded me a lot, this time, of David Grossman&rsquo;s amazing <em><a href="https://www.goodreads.com/book/show/78127.On_Killing?from_search=true&amp;from_srp=true&amp;qid=ZXALKmRbL7&amp;rank=2">On Killing</a></em>, which I read while I was in therapy for some military stuff. (For the record, because it comes up, no, I have never killed anybody, but <em>On Killing</em> had a ton of explanatory power for me trying to make sense of what had happened to me in the army nonetheless.) The two feel connected by an understanding of why some people become police (or join the army) that has gone completely missing in the popular discourse, and in the poignancy with which they consider the consequences of exposing a human to the things a homicide detective, or a soldier, are exposed to. I don&rsquo;t know how our society will find its way to moral balance between the cultural poles that give us law-n-order copaganda and &ldquo;ACAB,&rdquo; but <em>Homicide</em> could be an important text in the process.</p>
<p>Anyhow, I didn&rsquo;t like <em>Carrion Comfort</em> much when I read it in the early &rsquo;90s. I think my taste in horror was maybe more Lovecraftian, and it felt a little overstuffed. There are places where it tells and doesn&rsquo;t show. But there were a few scenes in it that stuck with me that weren&rsquo;t what you might expect to stick from a novel about mind-controlling vampires. So when it came back up again and I was in need of a cool-down, I loaded it up in the Kobo.</p>
<p>I&rsquo;m about a quarter of the way through it this time, and I appreciate it more. Like, the horror parts are more <em>horrible</em> to me. The parts I thought were maybe extraneous now feel like nice attention to detail. Some of it still feels a little tells-doesn&rsquo;t-show, but I feel a little more patient about them and I wonder if they were just a way to get the audience to sort of pay attention where it matters in the early going.</p>
<p>Anyhow, enjoying the re-read, but it&rsquo;s landing harder this time.</p>
<h2 id="i-m-not-saying-org-re-reveal-helped-me-win-the-presentation-dot-dot-dot">I&rsquo;m not saying org-re-reveal helped me win the presentation &hellip;</h2>
<p>&hellip; but I&rsquo;m not <em>not</em> saying it, either.</p>
<p>And, I guess, by &ldquo;win&rdquo; I mean that superstition forbids me to say much about some paperwork I signed, but I signed some today.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-08</title>
      <link>https://mike.puddingtime.org/posts/2023-05-08-daily-notes/</link>
      <pubDate>Mon, 08 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-08-daily-notes/</guid>
      <description>More on org-reveal - general goodness, custom CSS. Zoom and Mac display mirroring, scrum and kanban.</description>
      <content:encoded><![CDATA[<h2 id="more-on-org-reveal-custom-css">more on org-reveal, custom CSS</h2>
<p>I spent a chunk of the weekend working on a presentation using org-mode and org-reveal.
I kept getting reminded of why org-mode is so powerful, both as a paradigm and as an ecosystem.</p>
<p>The presentation itself just went faster freed of having to either operate inside presentation software, or working with an eye to moving things into presentation software. You&rsquo;re just outlining, which is efficient and fast with org-mode.</p>
<p>As you work in the early &ldquo;get it all out of your head&rdquo; stages, you can take advantage of org as a todo-inflected outliner, adding literal TODOs and tags to headings to remind you to follow up or help you find common themes/areas. It&rsquo;s simple to reorder headings, subheadings, and lists. You can make a kitchen sink area and mark it <code>:noexport:</code> and quickly refile dead-ends or reminders with no place to go into it. As you move into refining, those reordering and moving/refiling features make short work of small changes/adjustments. Unlike presentation software, you don&rsquo;t get caught up in positioning/layout hell.</p>
<p>That&rsquo;s not to say that there are no positioning concerns, and the way you address them is something a lot of people aren&rsquo;t going to tolerate, but works fine for me: If you want, e.g. columns &ndash; maybe two or three equally sized ones &ndash; you have to do it in CSS.</p>
<p>That raises a few usability questions: How much CSS, and how do you wedge it into the org format?</p>
<p>&ldquo;How much&rdquo; isn&rsquo;t much, at least if you know you have full control of the display environment for your presentation. I got away with a few lines:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">reveal</span> <span class="p">.</span><span class="nc">leftcol</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">   <span class="k">float</span><span class="p">:</span> <span class="kc">left</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">   <span class="k">width</span><span class="p">:</span> <span class="mi">48</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">   <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">reveal</span> <span class="p">.</span><span class="nc">rightcol</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">   <span class="k">float</span><span class="p">:</span> <span class="kc">right</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">   <span class="k">width</span><span class="p">:</span> <span class="mi">48</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">   <span class="p">}</span></span></span></code></pre></div>
<p>How to wedge it in isn&rsquo;t hard, either, at least with org-reveal:</p>
<p>You just put it in your org directory somewhere and pull it in at the top of the presentation file:</p>
<p><code>#+REVEAL_EXTRA_CSS: css/my-reveal.css</code></p>
<p>If you get tired of repeating yourself across multiple presentations, just customize it with <code>org-re-reveal-extra-css</code>.</p>
<p>There were a few things about the <code>revealjs</code> theme I am using that didn&rsquo;t quite work for me, and it was easy to use my <code>extra-css</code> file to override them after a quick session with the Web inspector.</p>
<p>The markup inside a doc is pretty simple, too:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="gh">*</span><span class="gs"> Slide Title</span>
</span></span><span class="line"><span class="cl"><span class="c">#+BEGIN_leftcol</span>
</span></span><span class="line"><span class="cl">*Left Heading*
</span></span><span class="line"><span class="cl">  - foo
</span></span><span class="line"><span class="cl">  - bar
</span></span><span class="line"><span class="cl">  - baz
</span></span><span class="line"><span class="cl"><span class="c">#+END_leftcol</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c">#+BEGIN_rightcol</span>
</span></span><span class="line"><span class="cl">*Right Heading*
</span></span><span class="line"><span class="cl">  - foo
</span></span><span class="line"><span class="cl">  - bar
</span></span><span class="line"><span class="cl">  - baz
</span></span><span class="line"><span class="cl"><span class="c">#+END_rightcol</span></span></span></code></pre></div>
<p>The <code>BEGIN_</code> keyword just ouputs a div with the <code>rightcol</code> or <code>leftcol</code> class.</p>
<p>So, do I <em>like</em> doing this?</p>
<p>I mean, not in an absolute sense. The presentation I&rsquo;m working on right now is supposed to represent a work plan I hope I get a chance to actually start implementing. In my ideal world, I&rsquo;d have a way to hide the positioning/styling markup in a drawer so that it was there and out of the way, allowing the presentation to be a living document that flipped back and forth between a roadmap work document and a presentation.</p>
<p>If I wanted to make that sort of document &ldquo;code switching&rdquo; a priority, I&rsquo;d get rid of the positional stuff, and I&rsquo;d be in a pretty good place to pull it off. Good enough for my style of presenting.</p>
<p>And even if I&rsquo;d rather not have the wasted motion, it is not a bad amount of wasted motion. The separation of concerns between content and presentation is still balanced in a direction I like, and it&rsquo;s not a lot of work to take a practical working doc and turn it into a useful presentation. It reminds me a lot of early, pre-WYSIWYG word processors, like PaperClip III, and typesetting systems that needed &ldquo;dot commands&rdquo; to send formatting information to a spooled laser printer.</p>
<p>Here&rsquo;s a <a href="https://oer.gitlab.io/emacs-reveal-howto/howto.html">pretty good presentation on the stuff you can do with org-reveal</a> (as bundled into emacs-reveal). It&rsquo;s where I got the CSS stuff from after a little excavation.</p>
<h2 id="zoom-and-mac-display-mirroring">Zoom and Mac display mirroring</h2>
<p>Getting ready for that presentation, I wanted to do something really simple:</p>
<ul>
<li>Open my presentation in Safari.</li>
<li>Open RevealJS&rsquo;s presenter window (current slide, next slide, timer, speaker notes)</li>
<li>Put the presentation in fullscreen</li>
<li>Share the fullscreened presentation</li>
<li>Run the presentation from the presenter window</li>
</ul>
<p>Which &hellip; no. Not happening.</p>
<p>I could do everything but last part, because when I&rsquo;d move from the fullscreened Safari window to the presenter window, the thing shared on Zoom became Safari&rsquo;s placeholder &ldquo;ESC to exit fullscreen mode&rdquo; tab, and it paused sharing anyhow.</p>
<p>I fiddled around for a while, gave up, and decided maybe the best option was a Firefox plugin that makes a window look mostly fullscreen while not being actually fullscreen. I knew I&rsquo;d wake up this morning hating it, but also knew I had something I could live with, and that would allow me to turn back to polishing the actual content.</p>
<p>This morning I did, indeed, wake up hating the solution. So I went back into Zoom because I vaguely remembered that you can share classes of things besides &ldquo;apps,&rdquo; e.g. devices and displays. Sure enough, you can share devices, displays, and whole desktops (mostly, since full-screened Safari exists in some sort of desktop/screen netherworld, I think.)</p>
<p>I ended up grabbing my iPad Pro, connecting it to my Mac Studio, and using it as a secondary display/desktop. It was easy to drag the full-screened Safari presentation into the iPad Pro, full-screen it, open the presenter window, move that up to the primary desktop, and have it all work as expected.</p>
<p>I am positive I had the setup I thought of first  working in the past with just a single monitor, and I found evidence of people noticing that something changed at some point and offering frankly bizarre and counter-intuitive workarounds. I&rsquo;m glad I just have an iPad Pro to throw at the problem.</p>
<p>I&rsquo;m also glad that I&rsquo;ve fully embraced &ldquo;don&rsquo;t change anything on game day.&rdquo; It didn&rsquo;t take me long &ndash; maybe 30 minutes &ndash; to get from &ldquo;I&rsquo;m using a new presentation approach and I should test this&rdquo; to &ldquo;this isn&rsquo;t working how I remember&rdquo; to &ldquo;I tried everthing I know&rdquo; to &ldquo;settling on this workaround&rdquo; to &ldquo;oh, right &ndash; this might work.&rdquo; Just fine for 36 hours out. It would have sucked on game day.</p>
<h2 id="scrum-and-kanban">Scrum and kanban</h2>
<p>Interesting post: &ldquo;<a href="https://lucasfcosta.com/2022/10/02/scrum-versus-kanban.html">You don&rsquo;t need Scrum. You just need to do Kanban right.&rdquo;</a></p>
<p>As my friend Luke is fond of pointing out, most people don&rsquo;t know what Kanban even is, thinking it&rsquo;s more of a presentational approach than a whole methodology.</p>
<p>Regarding this post, which I have read once and have marked to read again more carefully, the one thing that stuck in my craw a little was the theme of &ldquo;making work visible,&rdquo; because &ndash; and I need to do that second read &ndash; it seems that visibility stops at the edge of &ldquo;the team.&rdquo;</p>
<p>Scrum may, indeed, be &ldquo;manager training wheels,&rdquo; and it can definitely become brittle in the face of &ldquo;a stochastic process such as software development.&rdquo; But it also makes a team (or organization&rsquo;s) work seem more legible to the rest of the business, which is busy trying to understand what&rsquo;s going into the next quarter&rsquo;s training offerings, messaging briefs, marketing plans, forecasts, etc.</p>
<p>One of the lessons the Fourth International took away from the failure of the 1917 Russian revolution (not the eventual &ldquo;Berlin wall comes down&rdquo; failure &ndash; the &ldquo;oh, did you intend for there to be Stalin?&rdquo; failure) was that you can&rsquo;t have socialism in one country. A friend of mine did his master&rsquo;s work on intentional communities such as the Amana Colonies, Harmony, etc. and found similar: Given a local system that is misaligned with its broader context, the broader context takes advantage of its encirclement and either forces compliance or increases pressure until internal contradictions destabilize the system and cause it to either fail, or betray its own principles in order to &ldquo;survive.&rdquo;</p>
<p>I&rsquo;d love to talk to someone who&rsquo;s &ldquo;done kanban&rdquo; as their agile methodology on an enterprise delivery footing. Not because I don&rsquo;t think it&rsquo;s possible, but because I&rsquo;m  curious about how it worked.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-06</title>
      <link>https://mike.puddingtime.org/posts/2023-05-06-daily-notes/</link>
      <pubDate>Sat, 06 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-06-daily-notes/</guid>
      <description>If you&amp;rsquo;re going to work on a deck on a Saturday, at least play with org; making catppuccin work with Doom&amp;rsquo;s helm; @andycarolan@social.lol reminds us longboarding season is here.</description>
      <content:encoded><![CDATA[<h2 id="turn-org-files-into-decks-with-org-reveal">Turn org files into decks with org-reveal</h2>
<p>It&rsquo;s Saturday afternoon and I am happy to be sitting here working on a presentation. Al&rsquo;s out of town, so she doesn&rsquo;t have to put up with me asking her how things sound, I can sit here in my bathrobe and monologue at myself, and only the cats are here to bear witness to me pacing around when I get too agitated to keep typing.</p>
<p>I was <em>not</em> happy to make a bunch of org notes then try to figure out how to get them into presentation software, and didn&rsquo;t like anything  available via the usual export options , but I remembered that Doom has a presentation package for org-mode, so I enabled it (<code>+present</code> in the org-section of <code>init.el</code>) .</p>
<p>That package provides you with a properly configured <a href="https://gitlab.com/oer/org-re-reveal">org-re-reveal</a>, which takes an org-mode document and turns it into a <a href="https://revealjs.com">reveal.js</a> presentation. reveal, in turn, provides you with a deck you can open in your browser with transition effects, a speaker window, and keyboard shortcuts.</p>
<p>I&rsquo;m seldom fond of the stuff that has to happen to get a bunch of HTML loaded into a simpler plaintext format, but the demands of org-re-reveal are pretty light.</p>
<p>I put this at the top of the document:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">#+title: My Presentation
</span></span><span class="line"><span class="cl">#+REVEAL_THEME: league
</span></span><span class="line"><span class="cl">#+REVEAL_TRANS: fade
</span></span><span class="line"><span class="cl">#+OPTIONS: toc:nil num:nil
</span></span><span class="line"><span class="cl">#+OPTIONS: timestamp:nil</span></span></code></pre></div>
<ul>
<li><code>toc:</code> controls whether it has a table of contents slide</li>
<li><code>num:</code> controls whether it numbers the slide headings</li>
<li><code>timestamp:</code> controls whether it puts the creation date on the title slide</li>
</ul>
<p>Then for each list on a give slide, I add the first line below just over it:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">#+ATTR_REVEAL: :frag (fade-in)
</span></span><span class="line"><span class="cl">- apples
</span></span><span class="line"><span class="cl">- pears
</span></span><span class="line"><span class="cl">- bananas</span></span></code></pre></div>
<p>&hellip; which causes each list item  to appear in sequence as I advance through the slide.</p>
<p>If you want speaker notes to show up in the speaker window they go in a little block as Markdown:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">#+BEGIN_NOTES
</span></span><span class="line"><span class="cl">Some speaker note
</span></span><span class="line"><span class="cl">#+END_NOTES</span></span></code></pre></div>
<p>That&rsquo;s about it. In Doom, you just <code>SPC m e v b</code>  and it opens the presentation in your default browser, ready to go. Tap <code>s</code> and it brings up the speaker window, with a timer, current slide, and next slide. <code>esc</code> gives you thumbnails of the presentation so you can go back to a slide by sight, or <code>g</code> to go to a given slide number.</p>
<p>The presentation itself is very simple and clean. You can choose from several themes, including low-contrast favorites Dracula and Solarized for the &ldquo;oh! My terminal looks like that!&rdquo; crowd, or some other generically named ones that just look &hellip; normal.</p>
<p>There are some presentation modes for org-mode that let you put your org-mode buffer itself into a specially styled mode. I did a trial run with one, but the theme choices were a little offputting, navigation was strange, and there&rsquo;s a little bit of &ldquo;<em>I am doing this in an Emacs buffer</em>&rdquo; nerd glee involved. Fine for Emacs influencer YouTubers, but a little distracting for my intended audience, whom I want to expose to my particular combination of charm, reason, and attentional issues  via the content, not the presentation. And I really liked that there was zero config file noodling to get it to work. It&rsquo;s one of Doom&rsquo;s finer &ldquo;batteries included&rdquo; moments.</p>
<p>I&rsquo;ve always, by the way,  liked Keynote&rsquo;s outliner mode when I&rsquo;ve been working on a presentation. It encourages a focus on structure, allows for iterative work as ideas come and go or shift around, and keeps you out of trying to do a bunch of custom work on each slide.  Had I not learned about org-re-reveal I would have just popped open Keynote and retyped my outline.  And at some point, when I&rsquo;m back in the world of &ldquo;we&rsquo;re all supposed to use this template you can download from Confluence&rdquo; I expect I will have to figure out how to use the pptx export options. For now, though, org-re-reveal provides an extremely simple, easy, direct path from &ldquo;outline&rdquo; to &ldquo;presentation.&rdquo;</p>
<h2 id="making-catppuccin-work-for-helm-in-doom">Making catppuccin work for helm in Doom</h2>
<p>I&rsquo;m a fan of the <a href="https://github.com/catppuccin/catppuccin">catppuccin palette family</a> and they&rsquo;re simple to add to Doom: just stick the <a href="https://github.com/catppuccin/emacs">theme file</a> in <code>~/.config/doom/themes</code> and then use them in <code>config.el</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">doom-theme</span> <span class="ss">&#39;catppuccin</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">catppuccin-flavor</span> <span class="ss">&#39;frappe</span><span class="p">)</span></span></span></code></pre></div>
<p>They don&rsquo;t set any values for the selection highlight color, though, which means you can&rsquo;t really tell which completion line you&rsquo;re on as you move the cursor around. It&rsquo;s also an exercise in a very unique sort of frustration to try the usual &ldquo;what is this face called&rdquo; trick of <code>desc-face</code> (<code>SPC h F</code> in Doom ) in a buffer you can&rsquo;t run a command on.</p>
<p>My own search queries about it were just poorly formed enough that I stood on the precipice of saying &ldquo;sure, I&rsquo;ll just eat these 50 lines of lisp off the sidewalk to <em>number</em> the selection if that&rsquo;s what it takes,&rdquo; but I reframed one last time and finally found the answer.</p>
<p>The face to customize is <code>helm-selection</code>.  Just give it a background and it&rsquo;s fine.</p>
<h2 id="longboarding-season-is-here">Longboarding season is here</h2>
<p><video width="320" controls class="rt-img"><source src="/img/wipeout.mp4" type="video/mp4">
Your browser does not support the video tag.</video></p>
<p>Andy Carolan <a href="https://social.lol/@andycarolan/110316990998796991#.">reminded me</a> that longboarding season is here.</p>
<p>A few years ago Al and I decided we wanted to learn how to lonboard. I don&rsquo;t remember why. I think we just wanted to get out and do something together. So we bought some very cheap Amazon completes that looked cool &ndash; 42&quot; top-mount pintails &ndash; and spent weeks over at the nearby elementary school playground learning how to roll around on them like very upright mannequins on wheeled platforms.</p>
<p>Then we started watching videos and reading blogs and figuring out better choices. I finally settled on a Pantheon Trip &ndash; a little 33&quot; double-drop. Alison got a Loaded Icarus, a really nice composite deck with a bunch of spring to it.  I also had a Bustin&rsquo; Maestro, a 37&quot; dropthrough. I had several more boards for that matter, trying to get comfortable, and ended up <a href="/posts/2018-10-20-the-midlife-longboard/">writing a guide for fellow olds</a>.</p>
<p>We took the boards everywhere for a while: State parks sometimes have good accessible paths you can ride on, or just good asphalt around the campground for cruising. Also Saturday coffee runs and cruises down the Springwater. For a period, when I was riding the train to work, I used mine as a &ldquo;last-mile&rdquo; conveyance to the Lents Town Center station. A few times I did 10-mile solo rides down the Springwater.</p>
<figure class="rt-img"><img src="/img/subsonic.jpg"
    alt="Closeup of longboard trucks with light blue 90mm wheels attached and the Subsonic logotype on the deck" width="320"><figcaption>
      <h4>The Subsonic GT40. Best coffee cruiser ever</h4>
    </figcaption>
</figure>

<p>Cruising was fun, and the Pantheon Trip is a great deck for that because it has huge wheels and rides super low to the ground. It&rsquo;s low effort to push, and the giant wheels just roll over grit and rocks.</p>
<p>We stopped riding together when Al took her spill: She hit a seam that joined the Springwater to one of the overpasses and went over backwards. She threw her arm out and it dislocated the part of her elbow that didn&rsquo;t just shatter. We spent 40 minutes out on the Springwater while emergency responders from three jurisdictions argued over who should come get her. She&rsquo;s got titanium in that joint now, and exceeded the doctor&rsquo;s predictions, regaining full mobility. The only reminder is the bad-ass scar and some aches when the weather is cold and wet.</p>
<p>I kept riding, and absent the sort of mellow vibe we&rsquo;d established as a couple got interested in downhill, so I took a class from a local longboarding champion. We met every Wednesday night at Mt. Tabor. It was one of the most fun things I&rsquo;ve done in a while. Completely padded up, helmeted, and doing the hills we were doing, it was no big deal to wipe out, and it felt <em>great</em> to get knocked around a little. I&rsquo;d leave class feeling the same way I felt at the end of a day in the sawdust pits or the swing-landing trainer at jump school.</p>
<p><video width="100%" controls><source src="/img/slides.mp4" type="video/mp4">
Your browser does not support the video tag.</video></p>
<p>Anyhow, last season I traded in my hard pads for some nicer G-Form elbow and knee pads that go under my shirt and pants a little more easily, and I traded my Pantheon Trip in for a <a href="https://pantheonboards.com/product/pantheon-pranayama-complete-commuter-longboard/">Pantheon Pranayama</a>, which is pretty much the Trip except with traditional kingpin trucks, so it&rsquo;s a little more nimble. I went with the 7-ply deck, so it&rsquo;s also less stiff than my 8-ply trip. I thought that might have been a mistake, but I&rsquo;m down about 25 pounds from last season and I think it&rsquo;s going to be okay.</p>
<p>Anyhow, it&rsquo;s 10 a.m. and time to get back to that deck for a little while. Presenting Tuesday!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-05</title>
      <link>https://mike.puddingtime.org/posts/2023-05-05-daily-notes/</link>
      <pubDate>Fri, 05 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-05-daily-notes/</guid>
      <description>Mac plainttext primitivism, Superkey, Bladerunner 2049 criticism, the end of Brydge.</description>
      <content:encoded><![CDATA[<h2 id="the-good-easy-desktop">The Good Easy desktop</h2>
<p>Years ago I came across a curious point of view about how to set up a Mac called &ldquo;<a href="https://web.archive.org/web/20011222123016/http:/www.winterspeak.com/columns/goodeasy.txt">The Good Easy</a>.&rdquo; It would be completely unacceptable to anyone I know working in tech, not because of its underlying principles, which are interesting, but because it presumes that it&rsquo;s okay to tell a new hire &ldquo;this is how you will use your computer.&rdquo; No, not &ldquo;this is how our team works together, figure out how to interface with it with your preferred toolkit,&rdquo; but &ldquo;do these exact things to your computer:&rdquo;</p>
<p>Stuff like:</p>
<blockquote>
<p>&hellip; in BBEdit, make sure it&rsquo;s set to softwrap, window width, start up with nothing, searches wrap around, don&rsquo;t print headers or date stamp, don&rsquo;t show any toolbars and make veggie the default font.</p>
</blockquote>
<p>and</p>
<blockquote>
<p>&hellip; keyboard control panel make the repeat rate as fast as possible and the delay as short as possible. Under options, assign f keys (7 netscape, 8 emailer, 9 bbedit, 10 now up to date)</p>
</blockquote>
<p>and</p>
<blockquote>
<p>&hellip; trash should be viewed as a list</p>
</blockquote>
<p>I think it burbled into my view during The Great Lifehack Explosion of the early aughts when WIRED did a little writeup, and I&rsquo;d guess it sparked interest because it was an OS9-era attempt to steer the Mac experience toward something more plaintext and keyboard-centric than was considered &ldquo;normal&rdquo; to people at the turn of the century. A Mac wasn&rsquo;t a thing, at that point, with a BSD userland or thousands of classic UNIX apps all tuned toward processing text.</p>
<p>Anyhow, as I think about my note-taking and <a href="https://mike.puddingtime.org/posts/2023-05-02-daily-notes/#my-org-contacts-file-and-things">what things belong where in it</a>, I think about that particular period in nerd culture: UNIX primitivists had Linux, but it was a hard thing to love when the answer to having both a working printer <em>and</em> the ability to burn CDs, <em>and</em> a working sound card was probably one custom kernel build to put the missing thing in, another custom build to put the thing back in you forget was &ldquo;just working&rdquo; for a reason, and maybe a third build just because you didn&rsquo;t follow the recipe.</p>
<p>OS X was interesting because you could listen to music, burn CDs, <em>and</em> send things to your printer without thinking about it too hard. (Well, for some reason printing to shared printers on  early OS X didn&rsquo;t work well when I had <a href="https://en.wikipedia.org/wiki/Wired_Equivalent_Privacy">WEP</a> enabled on my 802.11b network.) But there was also that interesting layer underneath &hellip; <a href="https://mike.puddingtime.org/posts/2023-04-27-were-you-to-attempt-this-with-applescript/">plaintext land</a>.</p>
<h2 id="superkey">Superkey</h2>
<p>Yesterday I wrote a little about <a href="/posts/2023-05-04-daily-notes/#charmstone">Charmstone</a>, a task switching alternative by <a href="https://ryanhanson.dev">Ryan Hanson</a>, who makes a lot of interesting little UI enhancers with a focus that&rsquo;s a little on keyboard centricity but also just generally reducing motion. He also makes <a href="https://superkey.app">Superkey</a>, which is adjacent to things like <a href="https://github.com/philc/vimium">Vimium</a>, which try to bring the &ldquo;stay on the home row as much as possible&rdquo; paradigm to the UI beyond your text editor. I&rsquo;ve been using <a href="https://github.com/televator-apps/vimari">Vimari</a>, a Vimium port for Safari;  and also <a href="https://www.homerow.app">Homerow</a>, which does the same thing for the entire Mac UI: Decorates every link or UI element with a tag of one or two letters you can type to jump to a given  element without using a mouse.</p>
<p>Superkey is the same idea: You have a screen full of menus, links, and buttons and you&rsquo;d rather not take your hands off the keyboard to get around, so you tap a hotkey (I mapped it to my right option key) and get a search field. Unlike Vimium et all, it doesn&rsquo;t label all the UI elements, but rather begins to select the names of things as you type them. You can use the tab or semicolon key to go to the next match. Once you&rsquo;re on the element you want to be on, you tap return to activate it.</p>
<p>The drawback of this approach compared to Vimium or other UI labeling solutions is that you probably have to type more. The advantage is that the UI isn&rsquo;t completely covered with labels. For instance, here&rsquo;s the front page of reddit with Vimari&rsquo;s find mode activated:</p>
<figure><img src="/img/vimari_reddit.jpg"
    alt="A browser screenshot with all the many links on reddit&#39;s front page tagged for navigation"><figcaption>
      <h4>Vimari on reddit&#39;s front page</h4>
    </figcaption>
</figure>

<p>On the other hand, here&rsquo;s Superkey (searching for &ldquo;hledger.&rdquo;)</p>
<figure><img src="/img/superkey_screen.jpg"
    alt="A screenshot of the reddit front page with a floating search field and a green line pointing to matching text"><figcaption>
      <h4>Superkey searching for &#34;hledger&#34;</h4>
    </figcaption>
</figure>

<p>On a less cluttered page, the difference isn&rsquo;t huge. On a page like reddit, with a ton of little controls masquerading as &ldquo;links&rdquo; all crowded in around each other, the &ldquo;label everything, let the user sort it out&rdquo; is pretty disorienting and sometimes simply gets in the way: Do I want <code>va</code> or <code>vz</code>? I can&rsquo;t always tell.</p>
<p>Maybe more interesting (but I&rsquo;m nowhere near using it enough at this point to know if it&rsquo;s a good idea) is the possibility with Superkey that I could use it for things besides alighting on a UI control of some kind:</p>
<figure><img src="/img/superkey-superkey.jpg"
    alt="Superkey searching for the word &#34;superkey&#34; in Emacs"><figcaption>
      <h4>Superkey searching in Emacs</h4>
    </figcaption>
</figure>

<h2 id="ryan-gosling-and-the-baseline-scene-in-bladerunner-2049">Ryan Gosling and the &ldquo;baseline&rdquo; scene in Bladerunner 2049</h2>
<p>I really loved this   <a href="https://cohost.org/mcc/post/178201-the-baseline-scene">deep read of <em>Bladerunner 2049</em> and the baseline scene</a>, and how Ryan Gosling brought an acting exercise to his characterization of K.</p>
<blockquote>
<p>The point of the baseline test is not to fail inhumans. The culture has already decided that K is subhuman. The baseline is testing to see if someone marked as inhuman is becoming human. The baseline text, like the questions, has heavy emotional content. The environment of the baseline test is designed to maximize stress; alone in a cold white cell, the interrogator harshly barking the questions, the testee unsettled by the alien noises and unblinking eye of the monitoring equipment. It would be nearly impossible to be in that environment and not have an emotional response. But the culture has decided that replicants do not have emotional responses. The state wants dispassionate murderers for its executioners, the economy demands uncomplaining workers. The perceived emotional shortcomings of the replicants have become part of their assigned social function. So a replicant which responds to circumstances like a human is declared defective and destroyed. The culture does not even think of it as a punishment. A part is malfunctioning and it gets replaced.</p>
</blockquote>
<p>Some really good thoughts about how Ridley Scott&rsquo;s <em>Bladerunner</em> understood and misunderstood Philip K. Dick&rsquo;s preoccupations, and how Villeneuve brings the story back to the source.</p>
<p>Made me want to go back and rewatch both, and re-read the source material, which is a mark of engaging criticism.</p>
<h2 id="the-downfall-of-brydge">The downfall of Brydge</h2>
<p>I was a relatively early Brydge customer, and felt there was no way the reviewers who had early units were being thorough. The keyboards were mushy and missed keystrokes because something was wrong with the Bluetooth, and they were physically uncomfortable devices to use when transitioning from keyboard to touch.</p>
<p>So I don&rsquo;t feel surprised to <a href="https://9to5mac.com/2023/05/04/brydge-keyboards-out-of-business-update/">read that they&rsquo;re done.</a> I wouldn&rsquo;t have even before Apple decided to get into the &ldquo;make an iPad a quasi-laptop&rdquo; game for itself.</p>
<p>I&rsquo;m not sure why I&rsquo;m linking to this, except to say Brydge always felt to me like it was emblematic of  a sort of superficiality in tech product reviews. It looked cool, and for a certain kind of gadget person it was a potential solution to a thing mostly Gadget People want, which is some Grand Unified Device That Does It All With No Tradeoffs.  But end user reviews were not good.  The Verge&rsquo;s <a href="https://www.theverge.com/2020/4/3/21206568/brydge-pro-plus-review-ipad-pro-keyboard-trackpad">7/10 review</a> was inexplicable to me, especially since it missed things others were complaining about, and because one of its dings was merely that Apple had a competing product coming out.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-04</title>
      <link>https://mike.puddingtime.org/posts/2023-05-04-daily-notes/</link>
      <pubDate>Thu, 04 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-04-daily-notes/</guid>
      <description>Better task-switching with Charmstone, vim for zsh, our neighborhood slumlords, and the helpfulness of YNAB.</description>
      <content:encoded><![CDATA[<h2 id="charmstone">Charmstone</h2>
<p>Today I learned about <a href="https://charmstone.app">Charmstone</a>, an alternate task-switcher for macOS. I&rsquo;m still using the free version, so I&rsquo;m missing a few features, but even the free version is interesting.  You press your  two trigger keys (<code>ctrl opt</code> by default) and move the mouse/cursor a little and it pops open a floating app switcher with four options next to the cursor. Besides plain old apps, you can include folders or scripts.</p>
<p>It looks like this:</p>
<figure><img src="/img/charmstone.jpg"
    alt="A floating menu centered around the cursor offering quick access to four application icons."><figcaption>
      <h4>Charmstone&#39;s basic version with just four apps to choose from.</h4>
    </figcaption>
</figure>

<p>I didn&rsquo;t get &ldquo;why do you need to do the little bit of mouse motion&rdquo; for a couple of seconds, then realized &ldquo;oh, it&rsquo;d be bad if you were just trying to do a keyboard operation with those two keys.&rdquo; Then after a few repetitions I realized that you also begin to remember where in the floating selector your apps are, so the actual gesture is &ldquo;press your two trigger keys as you begin to move in the direction of the target app.&rdquo; It, uh, sort of suggests this in the part of the marketing copy that reads &ldquo;Use spatial memory to put your desired app in focus more quickly.&rdquo;</p>
<p>Anyhow, I am going to keep using it for a while longer. I haven&rsquo;t been using it for long and it isn&rsquo;t baked in yet. It&rsquo;s interesting just because it makes me rethink an operation I don&rsquo;t think twice about anymore (task switching) in that way where you begin to realize you&rsquo;ve perhaps internalized needless motion, or at least motion that could be more economical.</p>
<p>The same developer is one of those kinda cool cottage software houses who&rsquo;s got a Thing They&rsquo;re Focused On, and their thing is UI. In addition to Charmstone, they&rsquo;ve got a <a href="https://rectangleapp.com/">window management tool</a>, an interesting <a href="https://superkey.app">keyboard-oriented UI search tool</a> that takes cues from things like Vimari without being devoted to <em>vim everywhere</em>, and a <a href="https://ryanhanson.dev">bunch of other stuff</a> similar to the little enhancements and &ldquo;haxies&rdquo; that have long existed in the Mac ecosystem, but with a really pleasant visual design and consistent sensibility that isn&rsquo;t always there.</p>
<p>I haven&rsquo;t tried his window manager, but I&rsquo;ve been using <a href="https://www.irradiatedsoftware.com/sizeup/">Sizeup</a> for years and I think they are pretty similar. His is open source and free.</p>
<h3 id="small-update">Small update</h3>
<p>I&rsquo;ve been using Charmstone all day and really appreciate its <code>Launch active apps</code> setting, which gives you a new window if you switch to an app with none (e.g. you <code>cmd w</code>&rsquo;d the last active window and get nothing when you use the normal <code>cmd tab</code> switcher to get to it.) Mailmate is one of those apps that just sits there and does nothing, so checking mail every so often has been a great reinforcer as I remember I&rsquo;d have saved a step if I&rsquo;d just used Charmstone.</p>
<h2 id="in-the-neighborhood">In the neighborhood</h2>
<p><a href="https://www.wweek.com/news/chasing-ghosts/2023/05/03/duplexes-too-disgusting-to-occupy-stand-on-the-banks-of-johnson-creek/">The hideous, sewage-leaking, decrepit duplexes described in this article</a>  are in my neighborhood.  I live in Lents, and these houses are right off the Springwater near the Foster Floodplain Natural Area, on the other side of 205 from us.</p>
<p>Al and I walk by them every several days on our way to the Floodplain, and they&rsquo;ve inspired a lot of speculation. We remember when they were just this odd little colony that appeared to have folks renting them. We remember when they started being boarded up. We remember when the gate collapsed, and was then replaced with something makeshift, and then when it was obvious squatters were living there.</p>
<p>Al has worked in homeless policy and services for several years now, so she&rsquo;s got a working library of landlord patterns that found an easy match  in this case: Absentee landlord who doesn&rsquo;t particularly care; tenants holding on despite backed up sewage because there&rsquo;s not a next rung down, just an abyss.</p>
<p>The area around those duplexes was home to a small colony of RVs and vans, but about the time the police cleared out the squatters in the duplexes, there was also a general sweep of that area. Several of the RV owners found their way to our neighborhood. That&rsquo;s part of the pattern every year once the weather starts warming up. We&rsquo;ll have three or four waves before it gets cold again at the end of the year. Each wave is four or five RVs parked along the block and around the corner. In between the big waves individuals we&rsquo;ve come to recognize over the years leave to avoid the new crowd, then orbit back through when it quiets down again.  Each time we make an effort to get to know them.  Al&rsquo;s better at it than I am, and is more helpful anyhow: She helps them understand where to start in the social services labyrinth, saving them a few steps. But she also takes them food and water, and sometimes just listens to what they have to say.</p>
<p>I have a little distance from the problem. It&rsquo;s not my work or career. I&rsquo;ve thought (and felt) through how I feel when a new wave comes through. It took a few years of experiencing a particular cognitive dissonance about the matter to finally put my finger on what I was feeling and realize this is one topic where I&rsquo;m not any of &ldquo;liberal,&rdquo; &ldquo;progressive,&rdquo; &ldquo;moderate,&rdquo; or &ldquo;conservative.&rdquo; Few combinations of political program and cultural leaning I&rsquo;ve come across work for me here, which makes it easy to listen to pretty much nobody on the matter.</p>
<p>Al, on the other hand, doesn&rsquo;t ever get distance. It is her job. And when she comes home at night, it&rsquo;s parked across the street. It wakes her up at night with 3 a.m. screaming matches. When families roll through, it&rsquo;s a thing to think about because she&rsquo;s a mandatory reporter. She has friends in county and metro policy circles, so happy hour with them is &hellip; that.  When she comes downstairs and says &ldquo;I need to take some food boxes over there&rdquo; it is not because her selflessness knows no bounds, but because her capacity to live with what&rsquo;s going on around her is close to exhausted.</p>
<p>We&rsquo;ve become a political party of two on the matter, one of us who just lives with it 24/7, and the other with just enough distance to  say &ldquo;so you&rsquo;re telling me you were briefly considering whether or not to take yet another stupid opinion on the matter personally?&rdquo;</p>
<h2 id="vim-keybindings-and-the-shell">vim keybindings and the shell</h2>
<p>I&rsquo;ve gotten so used to Evil mode in Emacs, and so comfortable with stuff like Vimari elsewhere, that I figured I&rsquo;d give oh-my-zsh&rsquo;s vim mode a try. That didn&rsquo;t go well. <a href="https://github.com/jeffreytse/zsh-vi-mode">jeffreytse/zsh-vi-mode</a> promises to make it all better, so I&rsquo;m giving it a try.</p>
<p>I can&rsquo;t even explain what wasn&rsquo;t working about the original plugin I was trying. I just know it was confusing, but that it feels even worse to go back to Emacs/readline keybindings, so I&rsquo;m just going to give this a try.</p>
<h2 id="ynab-plug">YNAB plug</h2>
<p>For years I was a Microsoft Money person, even if it meant running Windows in a VM to use it. During our paycheck-to-paycheck years Money&rsquo;s cash flow forecast tool was like some sort of oracle I could consult about the eventual downstream impact of emergency expenses. I knew it wasn&rsquo;t the right answer, but it was one of those &ldquo;bad answer is better than worse alternatives&rdquo; things that sort of reinforced a bad status quo.</p>
<p>I don&rsquo;t know how long its been since Money was even a thing &ndash; <a href="https://en.wikipedia.org/wiki/Microsoft_Money">Wikipedia says they killed it in 2009</a>, so okay &ndash; but I jumped to Quicken for Mac, which had a similar tool that wasn&rsquo;t nearly as good, but that was okay, too: Money&rsquo;s version seemed to take your actuals into account, whereas Quicken&rsquo;s was a straight &ldquo;here are your budgeted inflows, here are your budgeted outflows, here&rsquo;s the difference over time,&rdquo; with the added ability to sort of amortize a pre-determined monthly variance for unbudgeted expenses.</p>
<p>It was <em>worse</em> because it was less accurate than Money, but it was <em>better</em> because it nudged me in the direction of &ldquo;oh, maybe I ought to be budgeting for these things instead of guessing them.&rdquo;</p>
<p>When Mac Quicken 2007 was finally retired and replaced by Quicken for Mac, the tool got even less helpful &ndash; they took away the ability to add a variance, which meant that if you didn&rsquo;t budget it the cash flow forecast tool wasn&rsquo;t going to consider it. My little hack around that was to go to &ldquo;allowance&rdquo; accounts, but all that did was isolate personal and less predictable expenses from the more predictable monthly bills and payments.</p>
<p>Basically, I refused to learn the real lesson of that feature, which was that it wasn&rsquo;t a proper substitute for real budgeting.</p>
<p><a href="https://www.ynab.com">You Need A Budget</a> uses <a href="https://en.wikipedia.org/wiki/Envelope_system">envelope budgeting</a>:</p>
<blockquote>
<p>Typically, the person will write the name and average cost per month of a bill on the front of an envelope. Then, either once a month or when the person gets paid, they will put the amount for that bill in cash in the envelope. When the bill is due, the money is taken out to pay for that bill.</p>
<p>This prevents the person from spending the money out of their pocket or bank account, because it is already allocated to the bill.</p>
</blockquote>
<p>&hellip; it just does it with software: You tell it your budget and what you have in the bank, and then record the draw on each &ldquo;envelope&rdquo; as you move through the month.</p>
<p>It has been around for a while, first as a standalone app, then in its newest incarnation as a web app. I tried it in its earlier days, when the developers refused to support downloading transactions to force you to do the work of tracking where your money was going, but there was no way I was going to do that data entry, and I was also pretty hooked on some kind of cash flow forecasting tool.</p>
<p>Last year, though, I decided to give it another spin. They&rsquo;ve softened up their position on automated transactions because, I imagine, in most households the &ldquo;envelopes&rdquo; are now completely metaphorical. My physical currency on hand goes up during camping season, because that&rsquo;s how you buy firewood at the state parks, but otherwise?</p>
<p>Like any tool built around a particular mindset, the YNAB social experience &ndash; its subreddit, support forums, assorted online enclaves &ndash; can feel more like a spiritual movement or ideological tendency than a way to budget. I tune all that out. I have enough needless rigor in my life reading Metafilter comments.</p>
<p>The &ldquo;just enough rigor&rdquo; part to me comes down to the fact that it makes the envelope metaphor work. The iOS app comes with a little widget that tells you how much money is left in key envelopes. &ldquo;Can we do this thing?&rdquo; Well, check the widget: Says there&rsquo;s <code>$x</code> in the envelope for that kind of thing, which would ordinarily mean &ldquo;no,&rdquo; but I see there&rsquo;s <code>$y</code> in this envelope over here &ndash; so is that tradeoff okay? And from that follows an easier time sticking to your goals.</p>
<p>The closest it comes to a forecasting tool is the ability to take anything you already have in the bank, or that is left over in the budget at the end of the month, and pre-budget it in the months ahead.</p>
<p>That&rsquo;s not to say cash flow forecasting doesn&rsquo;t have its place.</p>
<p>When I knew a layoff was coming, it was simply not possible to reconcile the YNAB mindset with something that meant a lot to me, which was the ability to go still for a few months and not worry about anything once I finished up.  It was <em>important</em> to me as I dealt with the emotional stuff you deal with when you both know you are done somewhere but have committed to going out on a professional note, and then it became <em>critical</em> once I realized I had a health thing to address.</p>
<p>On the other hand, YNAB does such a good job of recording budget information and making it exportable that it was trivial to take my carefully considered envelopes, export them to a spreadsheet, and make a very simple forecasting tool I could build scenarios around. It meant I could calm down a little, come up with a plan, and do the whole &ldquo;mind like water&rdquo; thing once I had that plan. At the same time, it wasn&rsquo;t something I could imagine maintaining because it was a spreadsheet and I am not one of those people.</p>
<p>I&rsquo;m glad I adopted more rigorous budgeting when I didn&rsquo;t need to, removing my dependency on a forecasting tool. And I&rsquo;m glad that the careful work I did making that change made it easier to build something I would not want to maintain daily, but was able to use to look 3, 6, 9 or 12 months ahead given my situation.</p>
<p>This is a weird thing to write about.</p>
<p>Years ago a friend of mine shared some personal stuff around money. I don&rsquo;t think they meant to share as much as they did, and then after doing so felt circumspect about it, trying to sort out whether they&rsquo;d done a TMI thing, or maybe revealed a defect they shouldn&rsquo;t have, or had opened themselves up to judgment. I mean, not from me. All due respect to my fellow veterans, I was not one of the ones who woke up in an army barracks one morning because of his great life choices.</p>
<p>And because even since then &ndash; even after a crash course in making the best of a bad decision &ndash; I had the good/bad fortune of not having to figure this stuff out for a long while: A life privileged and easy enough that I got to concentrate on other life skills. I think since getting laid off that I have said of the experience &ldquo;I guess my luck finally ran out&rdquo; exactly once, and it was a self-evidently foolish thing to say the second it escaped my lips. My political commitments preclude much belief in luck, and my spiritual commitments do not include it in their reckoning.</p>
<p>But still &hellip; it&rsquo;s a weird thing to write about. An uncomfortable thing. US culture is messed up about money and deeply infused with an ideological commitment to the moral virtues of precarity. Even the kindest, least judgmental people vibrate around this topic, because <em>most of us</em> live an existence of gauging whether there are yet rungs below us &ndash; a duplex with overflowing sewage owned by an indifferent slum lord from some other state &ndash;  or just the abyss.</p>
<p>You would hope, in a society that has so thoroughly ravaged its own safety net, that we&rsquo;d recognize that deep unease and transcend our alienation and atomization, even if not to try to put some of it back right now after due consideration of the horrors we see just stepping out onto a downtown sidewalk. Even if only to say to each other, &ldquo;we are collectively worthy of more kindness and care than we are choosing to extend to ourselves,&rdquo; whether that&rsquo;s on a civilizational scale &ndash; where our <em>actual</em> priorities include taking away tents and tarps on the coldest week of the year, or simply being the bluest state with the worst mental health services &ndash; or a personal scale, where friends apologize to each other for bringing up money because everybody&rsquo;s so anxious about it.</p>
<p>So, one of the aspirations I have for my writing is to be helpful. YNAB helped me understand how to budget and plan, and while I would not say it is for everybody, or that everybody needs it, it is definitely for me and I definitely did need it. If you&rsquo;re uneasy about money, or not sure you&rsquo;re doing it right, their content marketing is pretty top notch: Even if you don&rsquo;t buy their product, they do a great job of articulating a particular approach to money and budgeting that might be helpful.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-03</title>
      <link>https://mike.puddingtime.org/posts/2023-05-03-daily-notes/</link>
      <pubDate>Wed, 03 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-03-daily-notes/</guid>
      <description>A Ruby/CLI-based plaintext PRM, Robert DeNiro on exporting org-mode to JSON, blogging with ox-hugo, that Royal Enfield Himalayan</description>
      <content:encoded><![CDATA[<h2 id="friends-a-plaintext-ruby-based-prm">&ldquo;friends&rdquo; - a plaintext, Ruby-based PRM</h2>
<p>Looking around for other people who have done CRM/PRM-ish things in plaintext, I found <a href="https://github.com/JacobEvelyn/friends">JacobEvelyn/friends</a>. It&rsquo;s written in Ruby, uses Markdown for its home format, and gives you a command line interface to a record of your friends and activities.  I appreciate how thoroughly it thinks about what it is trying to do, and I sense a set of concerns similar to mine about the &ldquo;keeping up with personal contacts&rdquo; challenge.</p>
<p>Some things I like about it:</p>
<ul>
<li>Simple CLI data entry syntax</li>
<li>Some &ldquo;habit tracking&rdquo; style reporting to help you understand if you&rsquo;re keeping up your practice.</li>
<li>Clean reporting with a lot of flexibility that would let you build more reporting.</li>
<li>Simple use of Markdown, with no elaborate syntactical overlay.  If you gave up on friends, your data would be easily readable.</li>
</ul>
<p>It&rsquo;s probably good to note that friends isn&rsquo;t a full contact management system. It&rsquo;s better to think of it as a sort of journaling and habit tracking tool with a tight focus on keeping up with people, not a way to manage all your contact details. If I could extend one thing about it, it would probably be to be able to store email addresses with contacts: Email addresses aren&rsquo;t <em>great</em> keys, but also they&rsquo;re fine keys sometimes, and they&rsquo;d open friends up to interacting with other tools.</p>
<h2 id="ox-json-and-the-wisdom-of-neil-mccauley">ox-json and the wisdom of Neil McCauley</h2>
<p>As I was looking through the docs for friends and waming up to it some I wondered how readily I could migrate my org-contacts information. My home language is Ruby, so I tend to start there when I&rsquo;m looking for a library. There&rsquo;s one org-mode gem I&rsquo;m aware of, but its primary preoccupation is converting org-mode to HTML or Textile for presentation purposes.</p>
<p>Another way to come at the problem is to get the org markup into something more universally parseable, which is where <a href="https://github.com/jlumpe/ox-json">ox-json</a> could help. Does what it says on the tin: Converts an org-mode file into JSON, including, crucially, the data stored in the  <code>:PROPERTIES:</code>  drawer. Currently it passes by the <code>:LOGBOOK:</code> drawer, so that limits what you can do with it, but it still opens up possibilities.</p>
<p>Why?</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/rGPWW9Pjzto" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<h2 id="ox-hugo-update">ox-hugo update</h2>
<p>I started blogging with <a href="https://github.com/kaushalmodi/ox-hugo">ox-hugo</a> several weeks ago, going into it a little warily.</p>
<p>Recap:</p>
<ul>
<li>You write all your posts in a monolithic org-mode file.</li>
<li>Each heading is a post.</li>
<li>Heading tags become post tags.</li>
<li>Headings in a <code>TODO</code> state are drafts.</li>
<li>Metadata can be stored in the <code>:PROPERTIES:</code> drawer (tidy, but the templating syntax gets cluttery if you&rsquo;re not a lisp native) or additional metadata src blocks (more visually cluttered when writing, but easier to read the template  if you&rsquo;re a YAML native)</li>
<li>You can set it up to automatically export the Markdown version into your Hugo content hierarchy whenever you save the buffer.</li>
</ul>
<p>Why would you want to do this?</p>
<p>As someone who does a lot of digest posts, I like having my pre-publication notes, links, etc. in the org-mode ecosystem, with all of its text manipulation affordances.  If a topic I&rsquo;m working on isn&rsquo;t ready when it&rsquo;s time to publish that day, I just <code>refile</code> the subheading under my <code>* Daily Post Overflow</code>  heading and keep going. I also like org-mode&rsquo;s structure editing features. It&rsquo;s simple to move headings and their content around within a post.</p>
<p>I thought the &ldquo;all-in-one-file&rdquo; thing would annoy me, and there is part of me that still doesn&rsquo;t like seeing all the surrounding context, but that&rsquo;s what <code>subtree to indirect buffer</code> is for. I drop into an indirect buffer for the long-haul writing, then pop back out of it if I need to pull things in from the overflow area or check on something from a previous post.</p>
<p>I did stub my toe on one thing, which was that the org-capture template I found to make the post setup simpler was setting <code>:EXPORT-HUGO-DATE:</code>, which updates dynamically when you save a post heading. I went back to make some edits to a post, saved my work, and it altered the date metadata in the Markdown output and jumbled my post order. The answer seemed to be to switch that to <code>:EXPORT_DATE:</code>, and now it behaves.</p>
<p>I also put off cleaning up my capture template so all the metadata could go in the <code>:PROPERTIES:</code> drawer. At first It was easier  to just embed some YAML at the top of the post body with <code>#+begin_src yaml :front_matter_extra t</code> rather than working out the Lispier syntax for post image and cover image in the context of writing a capture template.  It just took a few minutes to fix once I decided to bother with it, and the template now outputs <code>:PROPERTIES:</code> metadata:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl">:EXPORT_HUGO_CUSTOM_FRONT_MATTER<span class="gd">+: :cover &#39;((image . &#34;&#34; ) (caption . &#34;&#34; ))
</span></span></span><span class="line"><span class="cl"><span class="gd">:EXPORT_HUGO_CUSTOM_FRONT_MATTER+</span>: :images &#39;(/momo-logo.jpg)
</span></span><span class="line"><span class="cl">:EXPORT_DESCRIPTION:</span></span></code></pre></div>
<p>I only sometimes use cover images, but I like to include my site logo in social posts, etc. when I don&rsquo;t have some other image to show, so the template defaults to an empty cover image and <code>image</code> metadata that Hugo&rsquo;s OpenGraph templating can pull in.</p>
<p>Several weeks in, I like the workflow. One tiny part of my soul is troubled that I have org source and Markdown output, but on the other hand the org source overwrites the Markdown output on edit, so the two don&rsquo;t drift. Realistically, the Markdown would be the more migratable content were I to shift off of Hugo, and it&rsquo;s simply better to author in org-mode.  So there&rsquo;s no associated toil and each format gets to be useful in the way it is best suited to be so.</p>
<h2 id="that-royal-enfield-himalayan">That Royal Enfield Himalayan</h2>
<p>I complained a little about my Royal Enfield Himalayan a few days ago: a little big for the power it has, and it had some QA problems that took some time to track down  I am pretty sure I am going to sell it to fund something similar.  But I did swap in a fresh battery and cleaned it up from winter storage, and rode it up to St. Johns for lunch yesterday, which meant a few dozen miles. It ran pretty well!</p>
<p>Last year, after dealing with rough idling and stalls, I finally broke down and installed a <a href="https://www.boosterplug.com/shop/frontpage.html">BoosterPlug</a>. Himalayans run too lean out of the factory, and the difference after installing one was pretty amazing. It was about a five-minute operation and it made the difference between a very rough first five minutes and &ldquo;let it idle for 30 seconds and it&rsquo;ll be fine.&rdquo; The machine never stalls now. I do think it still idles a little low, but that&rsquo;s a fine-tuning thing.</p>
<p>Anyhow, it was nice to ride around. Yeah, it&rsquo;s a little big, but it&rsquo;s not a big bike. There&rsquo;s plenty of pep for the city. Running up HWY 30, it did fine with the lunch crowd and there was plenty of power to overtake or squeeze out of spots at urban parkway speeds. I&rsquo;d do exit-to-exit on the Portland bypasses with it.</p>
<p>I was also glad to see <a href="https://www.sabatinomoto.com">an RE dealership up in St. John.</a>  Wasn&rsquo;t a fan of the Harley dealership I was getting service at and had to do a lot of research on my own to get help when it was suffering from factory QA problems.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-02</title>
      <link>https://mike.puddingtime.org/posts/2023-05-02-daily-notes/</link>
      <pubDate>Tue, 02 May 2023 00:00:00 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-02-daily-notes/</guid>
      <description>A Mackup/Dropbox glitch, integrating org-contacts and Things, conversations not interviews.</description>
      <content:encoded><![CDATA[<h2 id="mackup-and-dropbox">Mackup and Dropbox</h2>
<p>I recently recommended <a href="https://github.com/lra/mackup">Mackup</a>, a Mac config syncronization tool, but I&rsquo;m having a few issues with it now. In general, it does a pretty good job with most apps, but I ran into a weird bug with Mailmate where it kept forgetting all my settings. After a few go-rounds I opened up the Console and searched for Mailmate messages and found it wasn&rsquo;t able to write to its prefs file. I put Mailmate in Mackup&rsquo;s skip list, removed the symlinks and let it write its files again and all was well. Searching Mackup&rsquo;s issues, <a href="https://github.com/lra/mackup/issues/1891">I found someone experiencing a similar issue with Xcode</a> and learned it seems to be a thing with Dropbox and iCloud and certain apps. In the case of Dropbox, it has come with that app&rsquo;s move to the <code>CloudStorage</code> folder.</p>
<p>I&rsquo;m not sure this is enough to get me quit using it. It works quite well with my Emacs config, gpg, ssh, zsh, and other stuff. I also like using it for syncing my <code>~/bin</code>.  It doesn&rsquo;t work so well with Terminal.app, and gets a little weird now and then with a few other things.</p>
<p>Just &hellip; proceed with caution, I guess is the advice.  For now I&rsquo;ve got Mailmate, Terminal.app, karabiner, and Bartender on the skip list. That&rsquo;s fine for most of them: They&rsquo;re generally best configured a little different between laptop and desktop anyhow.</p>
<h2 id="my-org-contacts-file-and-things">My  org-contacts file and Things</h2>
<p>I stopped using mu4e. I was uncomfortable with the interplay between several different clients (both automated and user-facing) and my Maildir and IMAP. That left a a small hole in the functionality I&rsquo;d built into my org-mode PRM: being able to quickly mail a contact from a Doom Emacs menu. So I made a quick function that just turns the email address in the org-contacts record into a <code>mailto:</code> link and <code>open</code> call to the system that invokes my preferred mail client (Mailmate at this point). So if the point is over an org-contacts heading I can <code>SPC C m</code> (&ldquo;leader - CRM - mail&rdquo;)  and get a new message.</p>
<p>I&rsquo;m on the record somewhere about not liking the emphasis on URL schemes for Mac automation. I don&rsquo;t like the ins and outs of encoding values and cramming data into that format. At the same time, it <em>does</em> seem to have kept the idea of Mac end-user automation from fading away. So as I sat there looking at my new mailto function, I wondered about how all the contact data I&rsquo;m keeping could interact with the wider Mac ecosystem in a sort of &ldquo;if needed&rdquo; manner, hence this little thing.</p>
<p>It just provides an interactive menu for selecting a contact activity (ping, call, write, etc.) and an interactive date picker, then makes a Thing todo that includes the tags for the contact, with a &ldquo;start date.&rdquo; I can get at it with <code>SPC C g</code> (&ldquo;leader CRM thinGs&rdquo;).  I don&rsquo;t mean to use it? I was just curious. I&rsquo;m not sure.</p>
<p>What I am learning as I use org-mode day-to-day again is that there are things that come naturally to it and that do not come naturally to it. I&rsquo;ve got working integrations with my calendar, for instance, but calendar syncing is another one of those things that eats the one thread you have to work with when it runs, and sometimes it does mysterious things if you mess with a plaintext representation of a more complex data structure that was never written with direct human interaction in mind.</p>
<p>That&rsquo;s always the struggle with Emacs: What <em>can</em> it do, and what <em>should</em> it do?</p>
<p>The temptation is to crawl into a uni-environment and torture everything into some kind of alignment, but that&rsquo;s brittle. It might <em>feel</em> good if your temperament or proclivities lead you to feeling comfortable with that particular shape, but there are tradeoffs whether you acknowledge them or not. In this particular case, the line I am sensing is the line between &ldquo;getting things done&rdquo; in a very mixed, tactical, &ldquo;chores, obligations, and interrupts&rdquo; kind of way, and getting things done in a very &ldquo;life is an information problem&rdquo; kind of way.</p>
<p>I love org-mode as a way of organizing information and thoughts. In particular, I am very fond of all the refiling capabilities it offers, because ideas and information can be shuffled around between different contexts inside the broader org-mode context without lifting a hand from the keyboard. As a day-to-day &ldquo;chores and household projects&rdquo; tool, I&rsquo;m a little less certain about it, mainly because of the mobile piece. <a href="https://beorgapp.com">beorg</a> is great, but it is also a little bit of work to use, and its syncing model is borrowed, so it&rsquo;s not as good as a purpose-built solution. Further, it is not consistent with my desktop org-mode environments when it comes to things like the agenda views.</p>
<p>So, you know, the interesting thing to me becomes &ldquo;how can this sophisticated text manipulation environment fit into a broader toolkit?&rdquo; How can all these things interconnect and complement each other? What are the kinds of work that makes sense living in a purpose-built tool because their typical context favors less thinking and less complexity, vs. the kinds of work that are broadly the same thing (&ldquo;a thing I need to do&rdquo;) that benefit from more thinking and more complexity? What kinds of tasks can be &ldquo;dead&rdquo; and in a little purpose-built silo, and what kinds of tasks benefit from a little bit of added complexity to exist in a better context? How could a thing move from one environment to the other?</p>
<p>Interesting to me, anyhow, because my tendency, at rest &ndash; my unconscious tendency &ndash; is to want everything in one tool, but I continue to learn over time that the one-tool outlook breeds its own kinds of complexity.</p>
<p>Anyhow, here&rsquo;s that function. It works okay so far. The one glitch is that the Things URL scheme won&rsquo;t make a tag if it doesn&rsquo;t exist, so I had to go in and tag an existing todo with all my contact types (friend, network, recruiter, etc.) to get the function to properly tag a contact todo.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/org-contacts-to-things</span> <span class="p">(</span><span class="nv">contact-kind</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Create a Things to-do item based on the current Org Contacts record.
</span></span></span><span class="line"><span class="cl"><span class="s">   CONTACT-KIND is a string that specifies the kind of contact (&#39;ping&#39;, &#39;call&#39;, &#39;write&#39;, &#39;schedule&#39;, or &#39;follow up&#39;).&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span>
</span></span><span class="line"><span class="cl">   <span class="p">(</span><span class="nf">list</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">completing-read</span> <span class="s">&#34;Contact Kind: &#34;</span> <span class="o">&#39;</span><span class="p">(</span><span class="s">&#34;ping&#34;</span> <span class="s">&#34;call&#34;</span> <span class="s">&#34;write&#34;</span> <span class="s">&#34;schedule&#34;</span> <span class="s">&#34;follow up&#34;</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let*</span> <span class="p">((</span><span class="nv">name</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="no">nil</span> <span class="s">&#34;Name&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">email</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="no">nil</span> <span class="s">&#34;Email&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">phone</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="no">nil</span> <span class="s">&#34;Phone&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">note</span> <span class="p">(</span><span class="nf">read-string</span> <span class="s">&#34;Note: &#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">notes</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;Email: %s\nPhone: %s\nNote: %s&#34;</span> <span class="nv">email</span> <span class="nv">phone</span> <span class="nv">note</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">start-date</span> <span class="p">(</span><span class="nv">org-read-date</span> <span class="no">nil</span> <span class="no">nil</span> <span class="no">nil</span> <span class="s">&#34;Start Date: &#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">start-date-string</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y-%m-%d&#34;</span> <span class="p">(</span><span class="nv">org-time-string-to-time</span> <span class="nv">start-date</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">tags</span> <span class="p">(</span><span class="nv">org-get-tags</span> <span class="no">nil</span> <span class="no">t</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">tag-string</span> <span class="p">(</span><span class="nb">if</span> <span class="nv">tags</span> <span class="p">(</span><span class="nf">mapconcat</span> <span class="ss">&#39;identity</span> <span class="nv">tags</span> <span class="s">&#34;,&#34;</span><span class="p">)</span> <span class="s">&#34;&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">title</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;%s: %s&#34;</span> <span class="nv">contact-kind</span> <span class="nv">name</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">url</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;things:///add?title=%s&amp;notes=%s&amp;when=%s&amp;tags=%s&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="p">(</span><span class="nv">url-encode-url</span> <span class="nv">title</span><span class="p">)</span> <span class="p">(</span><span class="nv">url-encode-url</span> <span class="nv">notes</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                      <span class="p">(</span><span class="nv">url-encode-url</span> <span class="nv">start-date-string</span><span class="p">)</span> <span class="p">(</span><span class="nv">url-encode-url</span> <span class="nv">tag-string</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">start-process-shell-command</span> <span class="s">&#34;open&#34;</span> <span class="no">nil</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;open \&#34;%s\&#34;&#34;</span> <span class="nv">url</span><span class="p">))))</span></span></span></code></pre></div>
<h2 id="conversations-not-interviews">Conversations, not interviews</h2>
<p>Refreshing interview closer of the month:</p>
<p>&ldquo;We have a few minutes left, any questions of me?&rdquo;</p>
<p>&ldquo;No. I came into this thinking you&rsquo;d either say &lsquo;did you even read the job description? Now good day while I go fire the recruiter,&rsquo; or you&rsquo;d see something that would lead you to want a conversation, which I hope we&rsquo;ll continue so I can learn more.&rdquo;</p>
<p>And there we were, having a conversation.</p>
<p>I&rsquo;ve been very lucky to have had several <em>conversations</em> recently. It&rsquo;s reminding me of the times I had <em>interviews</em> and how those things went wrong down the road. It&rsquo;s great to end a conversation hearing the person you were conversing with say &ldquo;wow, the time flew by &hellip; but this felt so organic.&rdquo; You can enter a conversation with curiosity, and with a good conversational partner you can see where things go, make connections to your experience in the moment, change course or call up other experiences when they say &ldquo;well, that&rsquo;s not quite what we&rsquo;re dealing with here.&rdquo; That&rsquo;s much better than  pre-thinking a bunch of answers and poring over &ldquo;ten most common questions&rdquo; or (if Nigel or Chris are reading) &ldquo;you&rsquo;re trapped in a 20&rsquo; blender&rdquo; scenarios.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Finding an org-contact record&#39;s emails in MailMate and events in Google Calendar</title>
      <link>https://mike.puddingtime.org/posts/2023-05-02-finding-an-org-contact-record-s-emails-in-mailmate/</link>
      <pubDate>Tue, 02 May 2023 00:00:00 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-02-finding-an-org-contact-record-s-emails-in-mailmate/</guid>
      <description>Looking up email histories and past Google Calendar events from org-contacts, and a few ideas about how to schedule time with people.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been digging <a href="https://freron.com">MailMate</a>, but missing a function I&rsquo;d added to my Doom Emacs setup that let me search mu4e for mails from a contact in my <code>contacts.org</code> file.  I set out to fix that this evening thinking it&rsquo;d probably be an AppleScript thing, but <a href="https://manual.mailmate-app.com/extended_url_scheme">it turns out MailMate has its own URL scheme</a> (<code>mlmt:</code>) that includes queries. From the command line, for instance, you&rsquo;d just do something like <span class="inline-src language-sh" data-lang="sh"><code>open mlmt:quicksearch?string=&quot;foo@bar.com&quot;</code></span>  to search for that address.</p>
<p>(I learned about that from this post by James Sulak (another Emacs person, as it turns out), who shared <a href="https://boxkitemachine.net/posts/mailmate-and-alfred/">a set of helpful Alfred workflows for working with MailMate</a>.)</p>
<p>This function grabs the <code>EMAIL</code> property of a given org-contacts heading and runs the <code>open</code> shell command:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/open-mlmt-quicksearch</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Open a quicksearch URL for the email address at point.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">email</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="p">(</span><span class="nf">point</span><span class="p">)</span> <span class="s">&#34;EMAIL&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">if</span> <span class="p">(</span><span class="nv">not</span> <span class="p">(</span><span class="nv">string-empty-p</span> <span class="nv">email</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">shell-command</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;open &#39;mlmt:quicksearch?string=%s&#39;&#34;</span> <span class="nv">email</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">message</span> <span class="s">&#34;No email address found&#34;</span><span class="p">))))</span></span></span></code></pre></div>
<p>MailMate search is very fast. The results are there in an eyeblink.</p>
<p>&hellip; and that sort of led to this, which searches Google Calendar for an email address from a contact:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/open-gcal-search-for-email</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Open a Google Calendar search page for the email address at point.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">email</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="p">(</span><span class="nf">point</span><span class="p">)</span> <span class="s">&#34;EMAIL&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nv">search-url</span> <span class="s">&#34;https://calendar.google.com/calendar/u/0/r/search?q=%s&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">if</span> <span class="p">(</span><span class="nv">not</span> <span class="p">(</span><span class="nv">string-empty-p</span> <span class="nv">email</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nb">progn</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nf">message</span> <span class="s">&#34;Searching Google Calendar for events with email %s...&#34;</span> <span class="nv">email</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="nv">browse-url</span> <span class="p">(</span><span class="nf">format</span> <span class="nv">search-url</span> <span class="nv">email</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">message</span> <span class="s">&#34;No email address found&#34;</span><span class="p">))))</span></span></span></code></pre></div>
<p>&hellip; and that suggested this one, which gets a date from the interactive org date picker and creates an all-day  Google Calendar event with the contact as an invitee:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/create-gcal-all-day-appointment-with-contact</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Create a new all-day appointment in Google Calendar and invite the contact at point.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let*</span> <span class="p">((</span><span class="nv">date</span> <span class="p">(</span><span class="nv">org-read-date</span> <span class="no">nil</span> <span class="no">t</span> <span class="no">nil</span> <span class="s">&#34;Date: &#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">formatted-date</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y%m%d&#34;</span> <span class="nv">date</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">next-day</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y%m%d&#34;</span> <span class="p">(</span><span class="nf">time-add</span> <span class="nv">date</span> <span class="p">(</span><span class="nf">*</span> <span class="mi">24</span> <span class="mi">60</span> <span class="mi">60</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">contact-email</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="p">(</span><span class="nf">point</span><span class="p">)</span> <span class="s">&#34;EMAIL&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">url</span> <span class="p">(</span><span class="nf">concat</span> <span class="s">&#34;https://calendar.google.com/calendar/u/0/r/eventedit?dates=&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">formatted-date</span>
</span></span><span class="line"><span class="cl">                      <span class="s">&#34;/&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">next-day</span>
</span></span><span class="line"><span class="cl">                      <span class="s">&#34;&amp;pli=1&amp;sf=true&amp;action=TEMPLATE&amp;add=&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">contact-email</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">browse-url</span> <span class="nv">url</span><span class="p">)))</span></span></span></code></pre></div>
<p>I preferred just setting it to all-day, because I&rsquo;ve learned a few things about scheduling time to catch up with people in a non-business context:</p>
<ol>
<li>It&rsquo;s usually gonna be a few weeks out. PTO, busy, etc.</li>
<li>Setting a day is pretty easy, but setting a good time can be hard when it&rsquo;s that far out. Schedules do things, or we know a given day is <em>usually</em> our good day, but specifics can shift around.</li>
<li>Setting an all-day item and a reminder to lock down the details several days out makes it easier to agree to <em>something</em> and work out the details when calendars are a little more clear. No constant shuffling if one party or the other isn&rsquo;t in complete control of their own calendar.</li>
</ol>
<p>I wonder if I should go read a book about how to stay in touch with people. I know there are several.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Exporting a DayOne commonplace book to org-roam</title>
      <link>https://mike.puddingtime.org/posts/2023-04-30-exporting-a-dayone-commonplace-book-to-org-roam/</link>
      <pubDate>Sun, 30 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-30-exporting-a-dayone-commonplace-book-to-org-roam/</guid>
      <description>A very cheap and cheerful DayOne-to-org-roam exporter and a link to a useful org-roam search function.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve kept some quotes in DayOne for years, and I frequently find myself coming back to them when I&rsquo;m writing, either to actually use them or to just remember an idea. I thought it&rsquo;d be handy to have them in my writing tool, so I used ChatGPT to help me write a quick exporter.</p>
<p>I&rsquo;ll include that below, but the other thing to link to before your eyes glaze over with a hunk of Ruby is <a href="https://org-roam.discourse.group/t/using-consult-ripgrep-with-org-roam-for-searching-notes/1226/7">this useful post on using consult-ripgrep with org-roam for fulltext search from the org-roam Discourse.</a> I&rsquo;ve been careful to tag everything I&rsquo;ve put in so far, but I won&rsquo;t get to that with this batch of files, and I usually remember a keyword, anyhow. So they&rsquo;re just tagged  with &ldquo;quotes&rdquo; and &ldquo;commonplace&rdquo; for now.</p>
<p>The script just consumes the JSON that DayOne&rsquo;s export function provides and coughs out formatted org-roam nodes. It uses DayOne&rsquo;s uuid&rsquo;s, but tacks on a few words &ndash; just in case? Maybe over time I&rsquo;ll go clean up the titles but for now they&rsquo;re just there to provide a hint when I search.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;json&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;date&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Set these up before running</span>
</span></span><span class="line"><span class="cl"><span class="n">src_json</span> <span class="o">=</span> <span class="s2">&#34;/path/to/file.json&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">destination_dir</span> <span class="o">=</span> <span class="s2">&#34;/path/to/export/dir&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Read the JSON file</span>
</span></span><span class="line"><span class="cl"><span class="n">json_str</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">src_json</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Parse the JSON string</span>
</span></span><span class="line"><span class="cl"><span class="n">data</span> <span class="o">=</span> <span class="no">JSON</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">json_str</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">write_json_to_org_roam_files</span><span class="p">(</span><span class="n">json_str</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">data</span> <span class="o">=</span> <span class="no">JSON</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">json_str</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">entries</span> <span class="o">=</span> <span class="n">data</span><span class="o">[</span><span class="s1">&#39;entries&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">  <span class="n">entries</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">entry</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="n">created_date</span> <span class="o">=</span> <span class="no">DateTime</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">entry</span><span class="o">[</span><span class="s1">&#39;creationDate&#39;</span><span class="o">]</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y%m%d%H%M%S&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">title</span> <span class="o">=</span> <span class="n">entry</span><span class="o">[</span><span class="s1">&#39;text&#39;</span><span class="o">].</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/^&#34;/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/&#34;$/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/[^a-zA-Z0-9 ]/</span><span class="p">,</span> <span class="s1">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">squeeze</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="c1"># replace non-alphanumeric with space, remove extra spaces</span>
</span></span><span class="line"><span class="cl">    <span class="n">first_words</span> <span class="o">=</span> <span class="n">title</span><span class="o">.</span><span class="n">split</span><span class="o">.</span><span class="n">first</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/[^a-zA-Z0-9]/</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">)</span> <span class="c1"># replace non-alphanumeric with dash</span>
</span></span><span class="line"><span class="cl">    <span class="n">uuid</span> <span class="o">=</span> <span class="n">first_words</span> <span class="o">+</span> <span class="s1">&#39;-&#39;</span> <span class="o">+</span> <span class="n">entry</span><span class="o">[</span><span class="s1">&#39;uuid&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">content</span> <span class="o">=</span> <span class="no">JSON</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">entry</span><span class="o">[</span><span class="s1">&#39;richText&#39;</span><span class="o">]</span><span class="p">)</span><span class="o">[</span><span class="s1">&#39;contents&#39;</span><span class="o">].</span><span class="n">map</span> <span class="p">{</span> <span class="o">|</span><span class="n">c</span><span class="o">|</span> <span class="n">c</span><span class="o">[</span><span class="s1">&#39;text&#39;</span><span class="o">]</span> <span class="p">}</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">filename</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="si">#{</span><span class="n">created_date</span><span class="si">}</span><span class="s2">-</span><span class="si">#{</span><span class="n">first_words</span><span class="si">}</span><span class="s2">.org&#34;</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/^-/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/-$/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/-{2,}/</span><span class="p">,</span><span class="s1">&#39;-&#39;</span><span class="p">)</span> <span class="c1"># remove leading/trailing dashes and collapse multiple dashes</span>
</span></span><span class="line"><span class="cl">    <span class="n">file_content</span> <span class="o">=</span> <span class="o">&lt;&lt;~</span><span class="no">ORG_NODE</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/^\s*/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="ss">:PROPERTIES</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">      <span class="ss">:ID</span><span class="p">:</span> <span class="c1">#{uuid}</span>
</span></span><span class="line"><span class="cl">      <span class="ss">:END</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">      <span class="c1">#+title: #{first_words}</span>
</span></span><span class="line"><span class="cl">      <span class="c1">#+filetags: :commonplace:quotes:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="c1">#{content}</span>
</span></span><span class="line"><span class="cl">    <span class="no">ORG_NODE</span>
</span></span><span class="line"><span class="cl">    <span class="n">file</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filename</span><span class="p">),</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">file_content</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">file</span><span class="o">.</span><span class="n">close</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Iterate over each entry</span>
</span></span><span class="line"><span class="cl"><span class="n">data</span><span class="o">[</span><span class="s1">&#39;entries&#39;</span><span class="o">].</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">entry</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="n">write_json_to_org_roam_files</span><span class="p">(</span><span class="n">json_str</span><span class="p">,</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="n">destination_dir</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>plasticity and org-roam</title>
      <link>https://mike.puddingtime.org/posts/2023-04-30-plasticity-and-org-roam/</link>
      <pubDate>Sun, 30 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-30-plasticity-and-org-roam/</guid>
      <description>The more a thing tends to be permanent, the more it tends to be lifeless.</description>
      <content:encoded><![CDATA[<blockquote>
<p>&ldquo;The more a thing tends to be permanent, the more it tends to be lifeless.&rdquo;</p>
</blockquote>
<div class="src-block-caption">
<p>— Alan Watts</p>
</div>
<p>A few days ago <a href="https://mike.puddingtime.org/posts/2023-04-26-daily-notes/">I wrote about Zettelkasten</a>:</p>
<blockquote>
<p>In the end, it just wasn’t for me. I tried it, and Obsidian is an excellent tool for organizing your work that way, but I think the problem I had with it was that the ratio of “volume of stuff that’s just there in my head” to “volume of stuff I need to keep in a second brain” didn’t justify the existence of the second brain, or at least not one organized in classic Zettelkasten fashion.</p>
</blockquote>
<p>That remains true. However &hellip;</p>
<p>In the process of thinking about <a href="/posts/2023-02-28-about-old-posts/">what to make of old blog posts</a>  I realized that one of my bigger impediments to blogging at all was a little personal confusion about what a blog is. In the past year I had a small crisis around my personal domains and realized things had sprawled and gotten a little too tangled up, so I got a new domain that solved a few problems the old one caused, and I went to some effort to establish new email addresses and sites. It was time to do all that, because I was pretty sure I was about to get thrown out of my work nest, and I had some ideas about what I needed to do to be ready for that.</p>
<p>But solving one problem &ndash; correcting for a lack of intentionality in my web presence over years &ndash; led to another one I only recently figured out, which was about having the <em>wrong</em> intentions once I got more intentional.</p>
<h2 id="the-brochure-site-months">The brochure site months</h2>
<p>I got very into the &ldquo;personal branding&rdquo; aspects of my web presence. I had some ideas about a small book, I had done some writing about work, and I was feeling defensive about what exactly it was I said I did there. So as I sat down to think about why I wanted to have a website, there was a &ldquo;professional considerations&rdquo; piece to it that loomed larger than it ever had, and I was thinking in the direction of &ldquo;content marketing.&rdquo;</p>
<p>I built that site and really enjoyed doing it. It was a chance to stretch a few web development muscles, and I really loved the way I&rsquo;d managed to blend my photography and writing. And I liked the idea of positioning it as a slow-moving, professionally safe space where I could pull in work from past sites, but keep the focus on The Work Persona. I didn&rsquo;t discount the value of a more personal, faster-moving site, so I focused on fixing up my microblog, too.</p>
<p>Actually maintaining that sort of web presence turned out to be a drag. The second the site was up and running it became a gigantic, statically generated Blank Page Problem. Over on the microblog I was just being me; on the &ldquo;core&rdquo; site I was struggling with being the kind of writer I sort of hate to come across out in the real world, trying to sound <em>authoritative</em> and <em>opinionated</em> about <em>matters of professional import</em>. I completely get that some people manage to strike a very authentic balance with writing about what they care about, and what they care about happening to be, in part, their professional life. I couldn&rsquo;t make myself fill the page, so the site mostly sat.</p>
<p>Then I <em>did</em> get thrown out of the nest, and something I thought was kind of irritating but would eventually be surmountable when push came to shove actually became even more of an issue for me, because what had been a simple but misguided idea that I&rsquo;d just gradually fill that site up with stuff as it came to me felt inadequately urgent.</p>
<p>I am very lucky to have a supportive partner and some other good voices around me, because after I spent maybe six weeks last  fall using a period I&rsquo;d known for <em>months</em> was meant to be restful downtime doing anything but resting, thrashing around, coming up with Big Projects, I just settled down and actually rested. I just stopped. Or rather, I stopped doing anything I would ordinarily believe I was <em>supposed</em> to do, and <a href="https://mike.puddingtime.org/2023-01-17-oauth-rubocop-a/">let myself do</a> what I <em>wanted</em> to do as it occurred to me to do it:</p>
<blockquote>
<p>&hellip; I am feeling good because I realized at some point over the past couple of weeks that I am doing all this because it is playing. I used to do a lot of little utility scripts and silly gadgets because it was fun and absorbing, not because it was hugely practical or efficient. It was just playing. I stopped playing for a long while. It feels good to play again.</p>
</blockquote>
<p>Since January, I&rsquo;ve slowly turned back to what I <em>need</em> to be doing, and I&rsquo;ve been immensely grateful that my friends and network have been there for me as I find my way back to a job because there are parts of The Job Hunt that are a colossal drag &ndash; the grind of getting opportunities into the top of the funnel &ndash; and there are parts of it, once something works its way down the funnel that are hard in different ways.</p>
<p>The value of this site has played out a little differently than I imagined when I thought it was going to be a content marketing thing. It definitely <em>does</em> come up in interviews, because I&rsquo;ve done writing for it that is about work stuff, but less <code>HERE IS A BROCHURE OF MY THOUGHT LEADERSHIP</code> and more &ldquo;oh yeah, you know, I wrote about this very thing a few weeks ago, and found my thoughts changing a little once I thought it out more.&rdquo; A <em>few</em> people say &ldquo;oh, I&rsquo;d love to read that if you don&rsquo;t mind sending me the link,&rdquo; but not many. <em>But</em> when they&rsquo;ve asked there&rsquo;s been, in funnel terms, a 100 percent conversion rate from top-of-the-funnel to middle-of-the-funnel. That&rsquo;s great.</p>
<p>But the hidden half of that has been the very real struggle, after ten years in one place, of getting back into the swing of looking for my next thing to do, and shifting from that mode of sitting quietly with your hands folded politely in your lap answering questions as correctly as you can muster, to  finding the people who want to have actual conversations and <em>welcoming</em> the opportunity they present.</p>
<p>It took getting all the way to the end of one very mechanistic, flat, incurious hiring process to flip a switch in my brain.</p>
<p>One of the interviewers as good as said &ldquo;well, you&rsquo;re coming from this environment you were in so you probably are this certain way&rdquo; in the midst of a &ldquo;here are nine questions, prepare your three-minute responses, we are not permitted to have a conversation that deviates from you answering this question&rdquo; session. It was incredibly belittling and frustrating, and it finally sparked the thing that I guess you have to have sparked if you&rsquo;re going to continue the process of going around asking people to give you money in exchange for having to use Outlook or whatever, which was a sense that my background &ndash; the places I&rsquo;ve been, the things I&rsquo;ve seen, and the work I&rsquo;ve done &ndash; adds up to something more than a collection of self-published pamphlets about businessing.</p>
<p>Anyhow, the switch that flipped was, &ldquo;this could get harder before it gets easier, but it&rsquo;s going to suck hard and it&rsquo;s not going to end well if I keep looking over my shoulder.&rdquo; I, er, <em>contain multitudes</em>, and I have come to believe that the best way to get across who I am is to quit trying to draw a circle around me.</p>
<p>(I do not, by the way, have a &ldquo;so I told that guy to shove the job&rdquo; story to tell. I got declined, apparently very narrowly. I definitely would have taken the job, because I&rsquo;m fine working against expectations. You cannot go from &ldquo;studied philosophy&rdquo; to &ldquo;worked at a newspaper&rdquo; to &ldquo;administered UNIX systems&rdquo; to &ldquo;volunteered for airborne school&rdquo; without feeling comfortable being misunderstood by everyone around you.)</p>
<p>So this site is now the way it is, instead of the Brochure About Mike it was meant to be, because this, more or less and as much as I&rsquo;m willing to disclose, is <em>me</em>.</p>
<h2 id="okay-but-something-about-org-roam">Okay, but something about org-roam?</h2>
<p>Right. As I was saying. A few days ago I wrote about Zettelkasten, related some reasons I decided at the time it was not for me, and then gently defended what I took to be a mild challenge from someone who wished I&rsquo;d given it more of a chance.</p>
<p>But if the point of this site is less to <em>represent me as a unit of productive capacity</em> and more to <em>think out loud</em> about my preoccupations as they emerge (and hence become its own sort of representation), then it did its work in this case, because over the weekend that post ended up being just a thesis that I applied to what I thought I&rsquo;d want to use a Zettelkasten system for, flavored in part by my natural (and not always flattering) skepticism about why people get into these things.</p>
<p>But like all good theses, it is subject to dialectical forces &ndash; new contexts, conditions, or information.</p>
<p>In the process of trying to salvage something from hours of over-preparation, I realized I had a bunch of good material about what I think about certain things that was suffering from being stuffed into the mold of a very rigid and dysfunctional interview process that nevertheless had forced me to rethink my value proposition and set my sights a little higher than they were going in. And I also realized I have a few opportunities coming up &ndash; and will no doubt have more &ndash; to use that material very soon.</p>
<p>As I killed a little time waiting for Al to get home, my mind first went to &ldquo;well, turn it all into a couple of very thoughtful essays about IT, inclusion, etc. the better to stock your website with brochures.&rdquo;</p>
<p>Then I thought, &ldquo;we told ourselves we don&rsquo;t like doing that.&rdquo; Or as a friend put it, &ldquo;I thought you said you were over the idea of writing weird shit for LinkedIn.&rdquo;</p>
<p><em>Then</em> I thought, &ldquo;but wow, it can&rsquo;t stay in this form, because it&rsquo;ll always smell like the janitor&rsquo;s closet at the county jail when you try to get any good out of it.&rdquo;</p>
<p>I realized I wanted to do with it what I&rsquo;d sworn 48 hours earlier didn&rsquo;t really make sense to me, which was to sort of draw dashed lines on the surface of that big, strangely shaped accretion of thought, then go at it with a hammer until I had a bunch of chunks I could label and repurpose. So I took some time to re-read the org-roam manual, look at some half-understood config I&rsquo;d put in place when I was giving it a try post-Obsidian, and clear my head of the idea that I was going to some day write eight-dozen books about management thanks to Zettelkasten, or do anything particularly public at all, really.</p>
<p>Having done that, I started chunking out the ideas in that writing and  &ldquo;inserting nodes,&rdquo; in the org-roam parlance.</p>
<p>I didn&rsquo;t get too much into linking anything for now, preferring to start at the level of tagging. I once went to a talk then years later had an interesting exchange with the guy who invented the term &ldquo;folksonomy,&rdquo; and his ideas about free-tagging have stuck with me since. People often screw it up by assuming that free-tagging is somehow antithetical to &ldquo;categorization&rdquo; or other ways of making associations &hellip;  oh, <a href="http://www.ibiblio.org/hhalpin/homepage/notes/taggingcss.html">just read this for the problem with that</a>. Briefly, I have gotten hung up in the past with the advice to build <a href="https://justgage.github.io/moc.md">MoC pages,</a> etc. but was encouraged by that guy to think instead of tagging as  <a href="https://english.stackexchange.com/questions/44800/what-does-don-t-pave-the-cow-path-mean-in-this-context">cow-pathing</a>.  Eventually, you will want to put up lights and signs, and before that you may even want to make a map of the best ones. For now, I am just being careful to tag. When there is a nugget in something that I didn&rsquo;t manage to break down or separate from something close to it, I am giving it its own heading so I can make it a node with a tag.</p>
<p>Anyhow, I&rsquo;m giving the whole thing another try because I have a practical thing to do try it out on, and it is already helping me: I have a presentation coming up and it&rsquo;s great to go through that previous work shorn of a little of the original context.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-04-28</title>
      <link>https://mike.puddingtime.org/posts/2023-04-28-daily-notes/</link>
      <pubDate>Fri, 28 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-28-daily-notes/</guid>
      <description>Fixing mixed-pitch in Doom, Carlson&amp;rsquo;s fake populism, ethics in affiliate linking.</description>
      <content:encoded><![CDATA[<h2 id="mixed-pitch-in-doom">Mixed pitch in Doom</h2>
<p>Less a big thing to write about and more a thing I learned that was helpful after pounding my head against this wall:</p>
<p><code>mixed-pitch-mode</code>  allows for both variable and fixed pitches. It&rsquo;s nice for org-mode, where you&rsquo;ve got a mix of prose and more code-looking stuff &ndash; headings and body text look nicely typeset, property drawers and tags continue to use a fixed face.</p>
<p>My Doom font setting is pretty basic:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">doom-font</span> <span class="p">(</span><span class="nf">font-spec</span> <span class="nb">:family</span> <span class="s">&#34;Fira Code Retina&#34;</span> <span class="nb">:size</span> <span class="mi">15</span> <span class="nb">:weight</span> <span class="ss">&#39;regular</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="nv">doom-variable-pitch-font</span> <span class="p">(</span><span class="nf">font-spec</span> <span class="nb">:family</span> <span class="s">&#34;SF Pro&#34;</span> <span class="nb">:size</span> <span class="mi">16</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span></span></span></code></pre></div>
<p>&hellip; but for reasons that eluded me, when I entered <code>mixed-pitch</code> mode, my variable pitch font was way too small, except when it was way too big.</p>
<p>I did a lot of poking around, a lot of searching, and a lot of scrolling forums, then I broke down and asked ChatGPT, which told me to add this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">setq</span> <span class="nv">mixed-pitch-set-height</span> <span class="mi">16</span><span class="p">)</span></span></span></code></pre></div>
<p>That did it.  Combined with the <code>doom-earl-grey</code> theme, I&rsquo;ve got a pleasant, low-contrast, paper-like display to work with.</p>
<h2 id="a-rare-political-link">A rare political link</h2>
<p>I was braced to hate this column, but ended up appreciating it a lot:</p>
<p><a href="https://www.thenation.com/article/society/tucker-carlson-fake-populism-fascism/">No, You Absolutely Do Not Have to Hand It To Tucker Carlson</a> (The Nation)</p>
<blockquote>
<p>&ldquo;&hellip; there’s every reason to view Carlson’s alleged anti-war politics and putative politics as a fraud. It’s true that Carlson worries about escalation in the Ukraine/Russia conflict and has pushed for diplomacy. But his position on that issue is based not on any aversion to militarism but a belief that the United States should focus its firepower on other enemies, notably Mexico and China. Rather like the late Gore Vidal (who, alas, made this argument in the pages of The Nation), Carlson wants an American-Russia alliance against the non-white hordes. International relations scholar Daniel Drezner observes, &lsquo;It&rsquo;s also hard to claim that Carlson was opposed to U.S. military adventurism; it’s more accurate to say Carlson preferred aggressive military adventurism closer to home. Carlson repeatedly called for using the military south of the border in Mexico.&rsquo;&rdquo;</p>
</blockquote>
<p>&hellip; and</p>
<blockquote>
<p>As for economic populism, Carlson is far more likely to criticize big corporations for “wokeness” (in other words trying to keep up with changing social mores) than union busting. His populism is the kind that worries about gender ambiguity in M&amp;Ms candy—not rampant inequality. He’s all too quick to revert to GOP business-class norms when there is a partisan battle. Business Insider reported on a telling moment in 2021 when Carlson “accused President Joe Biden of proposing a tax hike on wealthy Americans to ‘punish’ them.” This was a tax on people earning more than $400,000 per year—hardly a fitting target for proletarian outrage.</p>
</blockquote>
<p>In sum:</p>
<blockquote>
<p>His occasional populist and pacifist sentiments only exist in the context of a politics that aims to take justified anti-establishment outrage and harvest it for far-right ethnonationalism.</p>
</blockquote>
<p>Why was I braced to hate it?</p>
<p>Because one of my core theses about What is Going on Right Now is that formerly cherished political categories are disintegrating, but we&rsquo;re not doing a great job of understanding what that means, or allowing each other to explore what that means. So while it&rsquo;s good to call out a charlatan like Tucker Carlson or assorted other <em>faux</em> populists (<em>fauxpulists?</em>), it&rsquo;s not great when we just shoot on past that useful distinction-making and on into the territory of &ldquo;therefore, nothing they&rsquo;re saying should have any resonance with decent people.&rdquo;</p>
<p>The danger of Tucker Carlson and others like him is not, to me, that they think bad or dangerous things. It&rsquo;s that they are accomplished ideological entrepreneurs. They&rsquo;re good at catching scent of shifts in the popular mood, understanding the language of those shifts, and then folding those shifts into whatever their real political commitments are. I&rsquo;m not sure who you could name on the left that has shown the same acumen for that kind of political marketing. Bernie Sanders, AOC, Elizabeth Warren, and Katie Porter come to mind as politicians working the left populist beat. In terms of commentators? Not sure.</p>
<p>One bad side effect has been the rise of commentator who exist outside the mainstreams of conservative or liberal thought and engage in their own entrepreneurialism despite being badly confused about their own political commitments.</p>
<p>I&rsquo;m thinking of people like Batya Sargon Unghar, who wrote a snarling takedown of student loan forgiveness as a populist issue because, she said, it wasn&rsquo;t helping &ldquo;enough classes of people,&rdquo; implying that there couldn&rsquo;t be any working people with student loan debt. She has made some good observations about the cultural and class proclivities of the professional media &ldquo;class,&rdquo; but that&rsquo;s just it: She doesn&rsquo;t see a working reporter as a &ldquo;working class person.&rdquo; The top one percent of households in the US control a third of the wealth, the bottom half of US households control 2.6 percent of it,  but let&rsquo;s pit the nurse (or reporter, or software developer, or corporate recruiter, or technical writer) paying off their student loans against the person working a job that didn&rsquo;t require college.</p>
<p>And I&rsquo;m also thinking of the contrarian class &ndash; people who probably have some sort of left political commitment but respond poorly to reflexive rejection of an idea because the wrong person coopted it, and who end up contributing to a feedback loop: They become impatient with the echo chamber, they resent the lazy dunks and thoughtless inconsistencies of politics built around cultural antagonisms, and they get lumped, in turn, with &ldquo;the dark side,&rdquo; tainting anything <em>they&rsquo;ve</em> ever put forth regardless of its worthiness.</p>
<p>Anyhow, my point, I suppose, builds off this one:</p>
<blockquote>
<p>The strategy of selectively borrowing left-wing ideas in order to bolster a program of nationalism, racism, and gender conformity is not new. As Meyerson and Mavuram rightly observe, this is a familiar tactic of fascism, which typically emerges in a time where establishment politics are in crisis and the public is open to multiple solutions.</p>
</blockquote>
<p>I appreciate an article that can acknowledge that selective borrowing, and remind readers that Carlson and other fake populists like him are identifying &ldquo;what works&rdquo; about left political ideas. That doesn&rsquo;t mean we should spend our time understanding how we could rehabilitate Tucker Carlson: He does not want to be rehabilitated. He is a cynic whose commitments are not mine. But we should spend <em>some</em> time understanding what in there both resonates with our own politics and speaks to people who are suffering.</p>
<h2 id="affiliate-links-and-ethics">Affiliate links and ethics</h2>
<p>If you truly think a product is too bulky, pointlessly prods people toward buying a thing that replaces a shared good they probably already have, is hard to use, leaks water, takes forever, and <a href="https://www.theverge.com/23659598/steambox-electric-lunchbox-battery">is only worth a score of &ldquo;5/10&rdquo;</a> even though you couldn&rsquo;t even get your own spouse to try it out, I&rsquo;d propose that you not put affiliate links in your review.</p>
<p>I think this cuts to the core of my issue with modern review sites. The only way to get the reviews is to accept that they need affiliate link revenue; but you end up in situations like this, where the product is a sustainability nightmare about which the only nice things you can say are &ldquo;doesn&rsquo;t smell,&rdquo; &ldquo;looks cute,&rdquo; and &ldquo;good if you don&rsquo;t have an outlet&rdquo; (even though you also note it is too big and heavy to actually carry anywhere there are no outlets). They still feel okay tossing up the affiliate links, even though their review nets out to &ldquo;useless; do not buy.&rdquo;</p>
<p>I&rsquo;m just picking on this review because it went by in the news stream last week. There&rsquo;s much worse.</p>
<p>But man it could also be better. There is so much electronic junk in the world &ndash; drop-shipped ripoffs, poorly thought out Kickstarters, parts-bin garbage. There should be less of it. It should not be okay to make something out of plastic and toxic battery components <a href="https://www.macrumors.com/2023/04/26/amazon-discontinuing-halo-wristband/">then render it useless in six months</a>.</p>
<p>It&rsquo;s fine for the Verge to do its journalistic duty by fairly reviewing a bad product and saying it&rsquo;s bad. It&rsquo;s correct for the Verge to disclose the existence of affiliate links to better educate people on how they&rsquo;re incentivized.  It would be awesome if the Verge, and sites like it, would go one step further and say &ldquo;we&rsquo;re not going to help you buy this thing&rdquo; when they plainly don&rsquo;t think the thing is worth buying, and when that thing is going to be turning up in a landfill.</p>
<p>Okay.  That&rsquo;s it for today. This afternoon is spoken for.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Were you to attempt something like this in AppleScript</title>
      <link>https://mike.puddingtime.org/posts/2023-04-27-were-you-to-attempt-this-with-applescript/</link>
      <pubDate>Thu, 27 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-27-were-you-to-attempt-this-with-applescript/</guid>
      <description>&lt;p&gt;I started down the path of &lt;a href=&#34;https://mike.puddingtime.org/posts/20230413-making-a-plaintext-personal-crm-with-org-contacts/&#34;&gt;building some sort of PRM in org-mode&lt;/a&gt; because I couldn&amp;rsquo;t find anything that worked the way I wanted. I did briefly look at Apple&amp;rsquo;s Contacts app, and also at &lt;a href=&#34;https://flexibits.com/cardhop&#34;&gt;Cardhop&lt;/a&gt;, which builds on top of your Contacts database but still makes some assumptions about how good you are at all at remembering to reach out to people.&lt;/p&gt;
&lt;p&gt;I also looked at &lt;a href=&#34;https://monicahq.com&#34;&gt;Monica&lt;/a&gt;, an open source PRM. The promising part of Monica is its API. The web UI itself shows comprehensive data for each contact, but does not do anything in the way of bulk editing and has no automation at all. It&amp;rsquo;s laborious to bootstrap.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I started down the path of <a href="https://mike.puddingtime.org/posts/20230413-making-a-plaintext-personal-crm-with-org-contacts/">building some sort of PRM in org-mode</a> because I couldn&rsquo;t find anything that worked the way I wanted. I did briefly look at Apple&rsquo;s Contacts app, and also at <a href="https://flexibits.com/cardhop">Cardhop</a>, which builds on top of your Contacts database but still makes some assumptions about how good you are at all at remembering to reach out to people.</p>
<p>I also looked at <a href="https://monicahq.com">Monica</a>, an open source PRM. The promising part of Monica is its API. The web UI itself shows comprehensive data for each contact, but does not do anything in the way of bulk editing and has no automation at all. It&rsquo;s laborious to bootstrap.</p>
<p>In the process of trying to figure out how I could write some automation to move Contacts information beyond the basic vCard fields into Monica I did end up having to learn about how macOS Contacts work and realized you can create custom labels for date fields then add them to your card editing template in Contacts&rsquo; preferences.</p>
<p>The data entry widget for these fields expects a date and is tolerant of not entering a year (which helps it support, er, &ldquo;polite&rdquo; birthdays). You can, in turn, use it somewhat opaquely in a Contacts smart list: There&rsquo;s a generic &ldquo;Date&rdquo; field you can filter on that looks at date fields in the card.  Paired with a &ldquo;within/not within,&rdquo; or &ldquo;in the next&rdquo; parameter, you can make a smart list of &ldquo;people not contacted in the past 30 days,&rdquo; etc.</p>
<p>If Contacts smart lists could also use groups, you could do a lot by just setting a &ldquo;last contacted&rdquo; date field and making a set of smart lists based on group membership. Contacts smart lists <em>can&rsquo;t</em> use groups, though, which is a strange oversight.</p>
<p>As I was trying to figure out, though, how to get my contacts uploaded to Monica in a way that would let me use its API to add tags to them once they were imported, I worked out some AppleScript that let me prepend a contact&rsquo;s group into its note as a hashtag. Contacts smart lists <em>can</em> filter on the contents of notes.</p>
<p>As a solution goes, it&rsquo;s in the category of &ldquo;cheap and cheerful.&rdquo; If you wanted to use macOS Contacts to keep track of your most recent touchpoint with someone, and drive a little automation to surface contacts you haven&rsquo;t reached out to in a while, you could do it with one custom field and adopting a simple convention for notes. You&rsquo;re also well into the territory of things AppleScript can do to help out, too: It is trivial to write scripts that automate logging, etc. or even write reminders or make events in a contacts calendar. In fact, here&rsquo;s a script that operates on the selected contact and lets you log activity in its note:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-applescript" data-lang="applescript"><span class="line"><span class="cl"><span class="k">set</span> <span class="nv">theDate</span> <span class="k">to</span> <span class="nb">current date</span>
</span></span><span class="line"><span class="cl"><span class="k">set</span> <span class="nv">noteDate</span> <span class="k">to</span> <span class="nb">do shell script</span> <span class="s2">&#34;date &#39;+%Y-%m-%d&#39;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">tell</span> <span class="nb">application</span> <span class="s2">&#34;Contacts&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">selectedPeople</span> <span class="k">to</span> <span class="nv">selection</span>
</span></span><span class="line"><span class="cl">	<span class="k">repeat</span> <span class="k">with</span> <span class="nv">thePerson</span> <span class="k">in</span> <span class="nv">selectedPeople</span>
</span></span><span class="line"><span class="cl">		<span class="k">set</span> <span class="nv">customDates</span> <span class="k">to</span> <span class="nv">custom</span> <span class="nv">dates</span> <span class="k">of</span> <span class="nv">thePerson</span>
</span></span><span class="line"><span class="cl">		<span class="k">set</span> <span class="nv">lastContactedExists</span> <span class="k">to</span> <span class="no">false</span>
</span></span><span class="line"><span class="cl">		<span class="k">repeat</span> <span class="k">with</span> <span class="nv">aCustomDate</span> <span class="k">in</span> <span class="nv">customDates</span>
</span></span><span class="line"><span class="cl">			<span class="k">if</span> <span class="na">label</span> <span class="k">of</span> <span class="nv">aCustomDate</span> <span class="ow">is</span> <span class="s2">&#34;last contacted&#34;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">				<span class="k">set</span> <span class="nv">value</span> <span class="k">of</span> <span class="nv">aCustomDate</span> <span class="k">to</span> <span class="nv">theDate</span>
</span></span><span class="line"><span class="cl">				<span class="k">set</span> <span class="nv">lastContactedExists</span> <span class="k">to</span> <span class="no">true</span>
</span></span><span class="line"><span class="cl">			<span class="k">end</span> <span class="k">if</span>
</span></span><span class="line"><span class="cl">		<span class="k">end</span> <span class="k">repeat</span>
</span></span><span class="line"><span class="cl">		<span class="k">if</span> <span class="ow">not</span> <span class="nv">lastContactedExists</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">			<span class="k">if</span> <span class="nv">length</span> <span class="k">of</span> <span class="nv">customDates</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">				<span class="k">set</span> <span class="nv">firstCustomDate</span> <span class="k">to</span> <span class="nb">first</span> <span class="nb">item</span> <span class="k">of</span> <span class="nv">customDates</span>
</span></span><span class="line"><span class="cl">				<span class="k">set</span> <span class="nv">newCustomDate</span> <span class="k">to</span> <span class="nb">make</span> <span class="nb">new</span> <span class="nv">custom</span> <span class="nv">date</span> <span class="nb">at</span> <span class="nb">after</span> <span class="nv">firstCustomDate</span>
</span></span><span class="line"><span class="cl">			<span class="k">else</span>
</span></span><span class="line"><span class="cl">				<span class="nb">make</span> <span class="nb">new</span> <span class="nv">custom</span> <span class="nv">date</span> <span class="nb">at</span> <span class="k">end</span> <span class="k">of</span> <span class="nv">custom</span> <span class="nv">dates</span> <span class="k">of</span> <span class="nv">thePerson</span> <span class="k">with</span> <span class="na">properties</span> <span class="p">{</span><span class="na">label</span><span class="p">:</span><span class="s2">&#34;last contacted&#34;</span><span class="p">,</span> <span class="nv">value</span><span class="p">:</span><span class="nv">theDate</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">			<span class="k">end</span> <span class="k">if</span>
</span></span><span class="line"><span class="cl">		<span class="k">end</span> <span class="k">if</span>
</span></span><span class="line"><span class="cl">		<span class="k">set</span> <span class="nv">theNote</span> <span class="k">to</span> <span class="nv">note</span> <span class="k">of</span> <span class="nv">thePerson</span> <span class="k">as </span><span class="nc">string</span>
</span></span><span class="line"><span class="cl">		<span class="k">if</span> <span class="nv">theNote</span> <span class="ow">is</span> <span class="s2">&#34;missing value&#34;</span> <span class="k">then</span> <span class="k">set</span> <span class="nv">theNote</span> <span class="k">to</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">		<span class="k">set</span> <span class="nv">prependText</span> <span class="k">to</span> <span class="na">text returned</span> <span class="k">of</span> <span class="p">(</span><span class="nb">display dialog</span> <span class="s2">&#34;Enter text to prepend to the note of &#34;</span> <span class="o">&amp;</span> <span class="na">name</span> <span class="k">of</span> <span class="nv">thePerson</span> <span class="o">&amp;</span> <span class="s2">&#34;:&#34;</span> <span class="nv">default</span> <span class="nv">answer</span> <span class="s2">&#34;&#34;</span> <span class="nb">buttons</span> <span class="p">{</span><span class="s2">&#34;Cancel&#34;</span><span class="p">,</span> <span class="s2">&#34;OK&#34;</span><span class="p">}</span> <span class="nv">default</span> <span class="nb">button</span> <span class="s2">&#34;OK&#34;</span> <span class="nv">cancel</span> <span class="nb">button</span> <span class="s2">&#34;Cancel&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="k">set</span> <span class="nv">noteUpdated</span> <span class="k">to</span> <span class="s2">&#34;[&#34;</span> <span class="o">&amp;</span> <span class="nv">noteDate</span> <span class="o">&amp;</span> <span class="s2">&#34;] &#34;</span> <span class="o">&amp;</span> <span class="nv">prependText</span>
</span></span><span class="line"><span class="cl">		<span class="k">if</span> <span class="nv">theNote</span> <span class="ow">is not</span> <span class="s2">&#34;&#34;</span> <span class="k">then</span> <span class="k">set</span> <span class="nv">noteUpdated</span> <span class="k">to</span> <span class="nv">noteUpdated</span> <span class="o">&amp;</span> <span class="no">return</span> <span class="o">&amp;</span> <span class="nv">theNote</span> <span class="o">&amp;</span> <span class="no">return</span> <span class="o">&amp;</span> <span class="s2">&#34; &#34;</span> <span class="o">&amp;</span> <span class="no">return</span>
</span></span><span class="line"><span class="cl">		<span class="k">set</span> <span class="nv">note</span> <span class="k">of</span> <span class="nv">thePerson</span> <span class="k">to</span> <span class="nv">noteUpdated</span>
</span></span><span class="line"><span class="cl">		<span class="nv">save</span> <span class="nv">thePerson</span>
</span></span><span class="line"><span class="cl">	<span class="k">end</span> <span class="k">repeat</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span> <span class="k">tell</span></span></span></code></pre></div>
<p>So, looking at that, would you <em>want</em> to glue all this together with Applescript?</p>
<p>I don&rsquo;t think so. I don&rsquo;t, anyhow. It just took me a morning to figure that out.</p>
<p>In the process of roughing out automation for creating reminders, for instance, I managed to get Reminders.app to beachball on every run with a simple five-liner. Why? I don&rsquo;t know. Stack Overflow didn&rsquo;t know. But after a good 15 years of using AppleScript for jobs large and small, I know that sometimes you find its weird little corner cases and that&rsquo;s all there is to it. I&rsquo;d rather <a href="https://www.jwz.org/blog/2003/05/no-good-deed-goes-unpunished/">tell Jamie Zawinski that I don&rsquo;t know who the author of XScreensaver is</a> than ask Apple to fix it.</p>
<p>When I ask myself &ldquo;would I want to build something on top of this ecosystem that I mean to use forever?&rdquo; I can&rsquo;t even figure out three scripts I would need to write then get to the end of debugging the second one before I know the answer is &ldquo;no.&rdquo;</p>
<p>I mean, what does <em>forever</em> mean? Because my personal belief is that we have to assess the foreverness of the competing candidates, and probably think about how amenable data kept in the least forever of those formats is to being migrated to a more forever format/system:</p>
<ul>
<li>macOS Contacts</li>
<li>org-mode</li>
<li>vCard</li>
<li>plain text with moderately elaborate markup amenable to some automated processing</li>
</ul>
<p>(I put that list in ascending order of longevity/permanence, feeling very appreciative that org-mode allowed me to reorder it with <code>opt arrow</code>).</p>
<p>I trust macOS Contacts a bit. I don&rsquo;t how much money I would be willing to risk on a series of bets about it working as it does today in 2, 5, or 10 years. While trying to understand my AppleScript options with it I was brought face-to-face with changes to the underlying scripting model several times. In all fairness, those changes played out over decades and it&rsquo;s only because I&rsquo;m at a point in life where I can still think &ldquo;OS X is new&rdquo; that they even seem mentionable. It&rsquo;s also completely possible to get Contacts info out into some other format. There&rsquo;s also just the whole &ldquo;ramming your head against AppleScript&rdquo; aspect of the problem.</p>
<p>Moving up the Pyramid of Forever, I trust org-mode to be around for a very long time, but can also see how the API is still subject to change. Functions come and go so automation can break and make it hard to keep a contacts list maintained. On the other hand, I&rsquo;m not doing much now that couldn&rsquo;t be done by hand until I figured it out, and the things I&rsquo;ve bumped into are pretty small so far: changes in the namespace, functional replacements, etc.</p>
<p>Moving on:</p>
<p>I trust the vCard standard to stay how it is a bit more. It&rsquo;s on &hellip; version 3 or 4? &hellip; of the spec? There&rsquo;s a spec. There are a lot of stakeholders interested in that spec. Even Apple quietly crams a whole vCard property into each contact, even if it has its own version of each property you&rsquo;d find in a vCard anyhow.</p>
<p>So, moving on to the top of the pyramid:</p>
<p>I trust structured plain text to be useful for the rest of my life.</p>
<p>So something built on org-mode seems like the smart play for data longevity? Even if all my automation broke, core org-mode makes it easy to do the things I do: change todo states, add values to the <code>PROPERTIES</code> drawer, add tags, log changes, etc.</p>
<p>The one thing that I&rsquo;ve <em>mostly</em> decided not to worry about is the disconnect between my contacts list and my org-contacts file.</p>
<p>One useful feature of contacts via Fastmail is the dynamic &ldquo;Autosaved&rdquo; group. If I write someone, they go into that group. Periodically moving contacts that surface there into one of my permanent groups then removing them from &ldquo;Autosaved&rdquo; provides a simple, organic workflow for keeping up with new people. There is also a bunch of useful automation present in macOS/iOS for surfacing things about contacts from other apps, so you&rsquo;re constantly being offered the opportunity to pull in new information. This morning, for instance, going through my Contacts list, I noticed that something somewhere in the bowels of macOS or iOS was beginning to notice connections between my contacts and Ivory, the Mastodon client. That&rsquo;s pretty cool.</p>
<p>On the other hand, <em>this</em> is well within AppleScript&rsquo;s wheelhouse:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-applescript" data-lang="applescript"><span class="line"><span class="cl"><span class="k">tell</span> <span class="nb">application</span> <span class="s2">&#34;Contacts&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">selectedContacts</span> <span class="k">to</span> <span class="nv">selection</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nv">length</span> <span class="k">of</span> <span class="nv">selectedContacts</span> <span class="ow">is not</span> <span class="mi">1</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">		<span class="nb">display alert</span> <span class="s2">&#34;Please select exactly one contact.&#34;</span>
</span></span><span class="line"><span class="cl">		<span class="no">return</span>
</span></span><span class="line"><span class="cl">	<span class="k">end</span> <span class="k">if</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">theContact</span> <span class="k">to</span> <span class="nb">first</span> <span class="nb">item</span> <span class="k">of</span> <span class="nv">selectedContacts</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">theName</span> <span class="k">to</span> <span class="na">name</span> <span class="k">of</span> <span class="nv">theContact</span> <span class="k">as </span><span class="nc">text</span>
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">theEmails</span> <span class="k">to</span> <span class="nv">value</span> <span class="k">of</span> <span class="nv">emails</span> <span class="k">of</span> <span class="nv">theContact</span> <span class="k">as </span><span class="nc">text</span>
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">thePhones</span> <span class="k">to</span> <span class="nv">value</span> <span class="k">of</span> <span class="nv">phones</span> <span class="k">of</span> <span class="nv">theContact</span> <span class="k">as </span><span class="nc">text</span>
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">theNote</span> <span class="k">to</span> <span class="nv">note</span> <span class="k">of</span> <span class="nv">theContact</span> <span class="k">as </span><span class="nc">text</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c">-- Format the contact data as an org contacts string</span>
</span></span><span class="line"><span class="cl">	<span class="k">set</span> <span class="nv">theContactString</span> <span class="k">to</span> <span class="s2">&#34;** &#34;</span> <span class="o">&amp;</span> <span class="nv">theName</span> <span class="o">&amp;</span> <span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">:PROPERTIES:
</span></span></span><span class="line"><span class="cl"><span class="s2">:EMAIL: &#34;</span> <span class="o">&amp;</span> <span class="nv">theEmails</span> <span class="o">&amp;</span> <span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">:PHONE: &#34;</span> <span class="o">&amp;</span> <span class="nv">thePhones</span> <span class="o">&amp;</span> <span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">:NOTE: &#34;</span> <span class="o">&amp;</span> <span class="nv">theNote</span> <span class="o">&amp;</span> <span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">:NAME: &#34;</span> <span class="o">&amp;</span> <span class="nv">theName</span> <span class="o">&amp;</span> <span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">:END:&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c">-- Copy the contact string to the clipboard</span>
</span></span><span class="line"><span class="cl">	<span class="nb">set the clipboard to</span> <span class="nv">theContactString</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span> <span class="k">tell</span></span></span></code></pre></div>
<p>&ldquo;Look through new contacts, run that script from a keyboard shortcut, paste the new contact into my <code>contacts.org</code> file.&rdquo;</p>
<p>I could go one step further and <em>append</em> the text to my <code>contacts.org</code> file, but I don&rsquo;t like operating on busy files like that.</p>
<p>AppleScript was plainly built to do little things like that. You have to learn its sort of crabbed, verbose way of doing things, but it&rsquo;s not too hard (and Shortcuts is getting pretty good if you can deal with the sudden drop in functionality that can appear out of nowhere when you hit the limits of some Apple engineer&rsquo;s imagination or time).</p>
<p>Anyhow, it all just comes down to aesthetics and preferences, right?</p>
<p>I&rsquo;ve got a draft heading sitting in my blog.org file with a title of &ldquo;Plain text is calming.&rdquo; I&rsquo;m not sure where that little essay is going, but I know where it started: When I&rsquo;m staring at a text editor I feel much better than when I&rsquo;m staring at a web or app UI. I might have some challenges with discoverability, or a lack of forgiveness for little slips of the finger, or whatever. But I still feel better because I&rsquo;ve been a happy citizen of Plaintext Land for over 30 years, and there is a governing mentality there that does not exist in other parts of the technology world. I&rsquo;m not saying the <a href="https://www.puppet.com/docs/puppet/8/http_api/pson.html">occasional wheel doesn&rsquo;t get reinvented,</a> but I am saying that with most plaintext stuff you get to choose your tools, or make them for yourself if there are no good choices. So it&rsquo;s calming because I don&rsquo;t have that feeling of always looking for the exit when I encounter a plaintext system. I know it&rsquo;s there.  That&rsquo;s the preference, anyhow. I made money for a few years being really, really good at turning CMS databases into plaintext and massaging them into other CMSes, so my patience for finding the structure and working with it is high. I don&rsquo;t worry about where the exit is because in my 40-year history with computers, it has never eluded me in the plaintext world.</p>
<p>The aesthetics are another kettle of fish, and plaintext people run a weird gamut from &ldquo;text editors are like samurai swords&rdquo; to &ldquo;mastery of a plaintext interface is a kind of performance art.&rdquo; Right now I&rsquo;m sort of luxuriating in Evil mode, because I finally get the emphasis on ruthless elimination of motion vi engenders. I&rsquo;ve  <a href="/img/Joy04.pdf">made terrible fun of people over this in the distant past</a> and feel a little bad about that, but less than two months into this particular experiment, I don&rsquo;t want to go back. Evil mode is like the end of the first Star Trek movie as far as I&rsquo;m concerned.</p>
<figure><img src="/img/decker_ilia.gif"
    alt="Will Decker and Ilia merging into some sort of computer overmind in Star Trek: TMP">
</figure>

<p>Anyhow, I do want to get back to the whole &ldquo;plaintext is calming&rdquo; idea and do some more writing about it. Today&rsquo;s jaunt into &ldquo;what if I could make what I wanted in the macOS ecosystem?&rdquo; was one of those processes I go through when I&rsquo;ve gone so far with an idea and wonder if I really want to commit &ndash; if I&rsquo;m not making life a little harder on myself than I need to, or if there&rsquo;s not some simpler way to do it (even if still in the DIY mode,) and the answer came back &ldquo;don&rsquo;t think there is.&rdquo; I&rsquo;m at home in what I made.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-04-26</title>
      <link>https://mike.puddingtime.org/posts/2023-04-26-daily-notes/</link>
      <pubDate>Wed, 26 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-26-daily-notes/</guid>
      <description>A little on me and Zettelkasten, getting the TW200 out for spring.</description>
      <content:encoded><![CDATA[<h2 id="linking-and-the-thing-about-zettelkasten">Linking and the thing about zettelkasten</h2>
<p>Last year I went on a tear around personal knowledge management (PKM). It started with discovering Obsidian and really appreciating its out-of-the-box capabilities. I do think, if Emacs is just more than you can bear the thought of, that Obsidian is an excellent choice for the sort of text-as-organizing-data approach org-mode is simply best at.</p>
<p>That said, its fatal flaw is basically Markdown, which is not meant to bear the load of text as organizing data. You <em>can</em> use it that way, but after &hellip; two decades? &hellip; of Markdown, we are not conditioned to think of it that way, and any superset of the core emph/strong/link/image markup comes at the expense of its overall <em>feel</em>. I&rsquo;m not saying it <em>can&rsquo;t</em> bear more, I&rsquo;m saying that the more you add, especially when you start getting into multiple characters to do things like wedge in HTML or what&rsquo;s essentially XML, the more burdensome it becomes and the more unreadable your source text becomes.</p>
<p>Realistically, org-mode has a similar problem: To get the really good stuff out of it you are adding metadata at at least the heading level. The difference is that for the balance of its lifespan it has been like that, and its development is both enhanced and constrained by the fact that it is a creature of Emacs. There are affordances that can hide the worst of the clutter, and the inline formatting syntax is not much more verbose than Markdown when it is at all. Deciding to use org-mode is not a &ldquo;buy the ticket, take the ride&rdquo; proposition. You bought the ticket when you edited your init.el the first time, and org-mode is just part of the ride.</p>
<p>Anyhow, You can&rsquo;t really get into Obsidian without being exposed to the whole Zettelkasten thing.  It led me to Sönke Ahrens&rsquo; <em><a href="/posts/2022-02-13-currently-reading-how/">How to Take Smart Notes</a></em>, a small book about how to build a Zettelkasten system and what to do with it, and I found that book very compelling.</p>
<p>When I contextualize my reaction to it, I&rsquo;m going to own a few things up front:</p>
<ul>
<li>Like a lot of people, I was in the process of climbing out of a few years of lockdown, isolation, and anxiety. I had a certain kind of mental energy that was very inward-focused.</li>
<li>I had a strong sense that my job was not going to be long for this world, but was just beginning to get some traction on things that mattered to me, so that energy was searching for an outlet.</li>
<li>I had a few ideas for projects that I&rsquo;d shelved for a period, but I was beginning to think that I needed to get going on them as part of my preparation for either being displaced or hitting the job market.</li>
</ul>
<p>So I was primed for the Zettelkasten pitch.</p>
<p>But I&rsquo;ve also been a sort of tech/nerd-adjacent type for decades, and was around during the heyday of GTD, 43 Folders, &ldquo;lifehacks&rdquo; before &ldquo;lifehack&rdquo; meant &ldquo;refrigerate bologna and you won&rsquo;t get sick eating it!&rdquo; or &ldquo;don&rsquo;t run up the balance on your credit cards!&rdquo;, and all the other productivity manias that blew through. This is me in 2005:</p>
<blockquote>
<p>Sometimes I read a comment from someone who insists that his routine involves some insanely arcane and convoluted use of yarn and a special shell script he whipped up that reads crap down from his Backpack account and then squirts it into his Palm, makes a redundant backup on the server he maintains in Malaysia and produces printed 3x5 copies in triplicate, one of which he pins to his infant son&rsquo;s sleeve before leaving for the morning (&ldquo;If I died, I couldn&rsquo;t live with him thinking his father went out the door without an action list and a plan!&rdquo;).</p>
</blockquote>
<p>&hellip; and me again in 2007:</p>
<blockquote>
<p>While looking around for some info on &ldquo;Getting Things Done&rdquo; so I could share a summary, I came across:</p>
<p>&ldquo;Allen says his martial arts background helped him appreciate the value of eliminating distractions.</p>
<p>&ldquo;&lsquo;If four people jump out at you in a dark alley, you don&rsquo;t want to be thinking about two e-mails you haven&rsquo;t answered,&rsquo; he said.</p>
<p><em>Fending Off Four People - A Plan</em></p>
<p>@street, by alley</p>
<ul>
<li>run down street flapping arms and yelling for help (?) (save breath by not yelling?)</li>
<li>run into nearby store?  (make &ldquo;nearby store&rdquo; context?)</li>
<li>make Bruce Lee noises to see if that works then run? (split into two actions? or is that too much?)</li>
<li>prioritize possible ambush choices &hellip; by absolute order or relative priority?  (make note:  plan this ahead of time for future &ndash; someday)</li>
<li>make folder and list for &ldquo;@street&rdquo; context &hellip; hasn&rsquo;t come up before</li>
<li>muggers in @mugger agenda list or defer due to one-time nature of encounter?</li>
<li>followup &ndash; could I have run faster or yelled louder?</li>
</ul>
</blockquote>
<p>Basically, I guess, there is a part of me that reads these things as largely aspirational (which is fine), but also very hung up on the idea that we are one special system or weird trick away from realizing our greatness (perhaps naive, but also fine), and that once we&rsquo;ve mastered it we will finally become <em>productive</em> (which is fine(ish?) to the extent it means &ldquo;does enough work to keep job&rdquo; but is terrible when such a mushy word becomes a proxy for human worth).</p>
<p><em>How to Take Smart Notes</em> hits all those aspirational notes, recounting the remarkable tale of Niklas Luhmann and his astounding lifetime run of 60+ books and hundreds of articles. It&rsquo;s an inspiring story, and I&rsquo;m going to grant one point for sure: If one choice is to be inspired by a prolific academic who expanded the sum of human knowledge with his little slipbox, and <em>the other</em> choice is to be inspired by someone whose productivity system is self-evidently great because he has used it to organize a small empire of retail productivity enhancement books and accessories, I&rsquo;m goin&rsquo; with the perfesser over there.</p>
<p>So I tossed myself into Zettelkasten-via-Obsidian. I had a few things I wanted to work on, I had years of material in different formats that needed to be atomized, and I was reading two or three books a week, plus dozens of articles. Like I said, I had a <em>ton</em> of nervous energy to displace because a ten-year run was about to end, and the last time I&rsquo;d felt thrown out of the nest my comfort zone was &ldquo;crabby, introverted autodidact.&rdquo;</p>
<p>In the end, it just wasn&rsquo;t for me. I tried it, and Obsidian is an excellent tool for organizing your work that way, but I think the problem I had with it was that the ratio of &ldquo;volume of stuff that&rsquo;s just there in my head&rdquo; to &ldquo;volume of stuff I need to keep in a second brain&rdquo; didn&rsquo;t justify the existence of the second brain, or at least not one organized in classic Zettelkasten fashion. That&rsquo;s not to say I can hold every consideration of a writing project in my head. I benefit greatly, for instance, from the whole project notes thing that integrates magit and Projectile: I have an org-capture template that adds a note to a todo file in the top level of a given project (read: &ldquo;repo&rdquo;) linked to the parent heading. If I&rsquo;m out and about and think about something material to my writing project, I put it in my inbox. It&rsquo;s a vestige of GTD and the idea of a trusted system. I just don&rsquo;t think it will help me in a mugging, and the way I write, share experience, and organize my thinking isn&rsquo;t amenable to the atomicity of Zettelkasten.</p>
<p>Maybe I could have gotten there! I believe other people who say it helps them! I understand the gentle pull of tending a little digital garden! I just don&rsquo;t think <em>organizing knowledge</em> is my particular life struggle, and I do not think getting better at it will be a huge life enhancer.</p>
<p>So, all that said, I really appreciated <a href="https://taonaw-blog.netlify.app/2022-03-13/">this post (somewhat) about org-super-links</a>, which describes how you can get automatic back-linking into your org-mode headings. Even though Zettelkasten isn&rsquo;t for me, I did come to appreciate automatic back-linking in Obsidian (and my brief excursion into org-roam).</p>
<h2 id="spring-is-here-so-time-to-take-lou-out">Spring is here, so time to take Lou out</h2>
<figure><img src="/img/tw200.jpg"
    alt="A Yamaha TW200 parked in front of a suspension bridge on a sunny day."><figcaption>
      <h4>Lou at Sauvie Island</h4>
    </figcaption>
</figure>

<p>&ldquo;Lou&rdquo; is my Yamaha TW200, a little farm bike I bought as a compromise between the tiny and &ldquo;bounce it between your thighs at stop  lights&rdquo; Honda Grom and the bulkier, vaguely miserable Royal Enfield Himalayan 400. &ldquo;Vaguely miserable&rdquo; because mine was a victim of a bunch of factory QA problems that left me feeling like I could never really trust it during break-in.</p>
<p>It is meaningful to me that when the tender cable for my Grom came undone and I didn&rsquo;t notice it for six months the Grom had so little in the way of parasitic drain that the battery still had life when I got back to it. The Himalayan? It needs to be on a tender 24/7, and never off one and parked for more than maaaaaybe two weeks at a time. It&rsquo;s just like that, and who knows, and the dealer I bought it from shook the whole issue off with &ldquo;that&rsquo;s how this price point is,&rdquo; which helped me clarify why a Harley dealer was selling Indian-made motorcycles to begin with: You walk in, run over to that Harley, surreptitiously glance at the price tag, realize you&rsquo;re in over your head but cannot abide the thought of not riding your new bike off the lot on that particular sunny Saturday afternoon, so maybe that Royal Enfield that looks sort of classic will do the trick, for about as much as the down-payment on your Harley was gonna be.</p>
<p>I mean, I went in <em>wanting</em> to buy mine up front. I&rsquo;d read good reviews, liked the looks, and wanted something of about that displacement and size. The QA stuff, though, is miserable. It took two goes just to figure out that the bleed lines from the fuel tank were tied too tightly to the frame, creating a vacuum that constantly caused stalls. The dealership was plainly sick of my face before I could even get 500 miles on it, and it lives in this weird space where it is too big and not powerful enough. If anyone asked me today, and if they were not interested in the &ldquo;adventure&rdquo; pedigree, I&rsquo;d tell them anything but an RE Himalayan. A Rebel 300 would probably out-perform it, and my TW200, at half the displacement, comes pretty close without having to wrestle the bulk.</p>
<p>Anyhow, Lou is my Yamaha TW200 and I love it. Fat tires, low-slung, pleasant, low rumble. It is simple and sturdy and it is the perfect bike for SE Portland&rsquo;s pothole alleys and torn-up 82nd Ave. It goes just enough to hold its own for a ride up to Sauvie Island or maybe the back way out to Estacada. It&rsquo;s a great in-city commuter.</p>
<p>This week it was finally warm enough and dry enough to start Lou up for the first time this spring.</p>
<p>TW200&rsquo;s (t-dubs) are notoriously cold-blooded, so it didn&rsquo;t want to go. I dumped some fuel treatment in and shot some starter spray in its intake and it turned over. I let it sit on high choke for a while, then turned it off, rinsed, repeated an hour later and then took it up the side of Mt. Scott.  It was still sounding a tiny bit uneven while it ran the old fuel through, but the two runs since it has sounded smooth and healthy, and it turns over right away.</p>
<p>I love it.</p>
<p>Al&rsquo;s still up in the air about finishing up her motorcycle endorsement, so we have the TW200 and the Grom sitting here. If she decides nothing doing on motorcycling, I&rsquo;ll find the Grom a home and consider something that can handle two-up a little more gracefully. We enjoy summer date nights on a motorcycle, and the TW200 isn&rsquo;t quite up to that.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-04-25</title>
      <link>https://mike.puddingtime.org/posts/2023-04-25-daily-notes/</link>
      <pubDate>Tue, 25 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-25-daily-notes/</guid>
      <description>Mail restlessness alights on MailMate, editing web forms in Emacs with Atomic Chrome, org-recur for simple and readable recurrence, GUI org-capture with Captee, more on my org PRM.</description>
      <content:encoded><![CDATA[<h2 id="mail-restlessness-alights-on-mailmate">Mail restlessness alights on MailMate</h2>
<p>I was scrolling through <a href="https://www.reddit.com/r/emacs">/r/emacs</a> today and came across someone asking for help configuring GNUS and IMAP. It has been a very long time since I did that, so I had nothing useful to contribute &ndash; that config predated me using version control &ndash; but I did notice a link to
<a href="https://useplaintext.email">https://useplaintext.email</a>, which intrigued me.</p>
<p>The last time I allowed myself to have a strong opinion about email I was writing a &ldquo;how we work&rdquo; for Puppet&rsquo;s engineering department. The boss and I believed that this was our big shot at putting a lot of email evil to rest &ndash; the scourge of top-posting, the blight of replies too widely scoped to too many groups, the simple, everyday <em>harm</em> done by needless reply-alls that add nothing.</p>
<p>It turns out the top-posters won and we just have to live with that.</p>
<p>But there was <a href="https://useplaintext.email">https://useplaintext.email</a> reminding me of a more innocent time, using the word &ldquo;harmful&rdquo; in conjunction with HTML mail, taking one more swing at putting paid to top-posting once and for all.</p>
<p>It also had a list of plaintext email clients that I gave a quick scan, and one jumped out because I&rsquo;d heard of it but never really gave it a spin: <a href="https://freron.com">MailMate</a>. It&rsquo;s a Mac email client, it defaults to plain text but will read and send HTML email (via Markdown formatting on the sending side). It&rsquo;s also super keyboard-centric. <em>And</em> it has a &ldquo;bundles&rdquo; feature that lets you write your own plugins. It comes with a bunch, including one that saves a link to a message in an org-mode file.</p>
<p>I&rsquo;ve been fiddling around with it today and like it a lot. Besides its plaintext-centricity, keyboard-centricity, and extensibility, I love that you can open up a font picker, select a piece of the interface, and define a font for it. I went through and set everything to Fira Code Retina.</p>
<figure><img src="/img/mailmate_screen.jpg"
    alt="MailMate (in Scrambled Mode) with a fixed typeface for its UI"><figcaption>
      <h4>MailMate in Scrambled Mode</h4>
    </figcaption>
</figure>

<p>So, what about mu4e? Or mutt? Still on the docket.</p>
<p>mu4e has been bugging me a little because it has a very strange and possessive set of keymappings that collide with Doom Emacs. It hijacks the space key, so my muscle memory around the spacebar as the leader key is all messed up.</p>
<p>mutt remains mutt. I have a lot of affection for it, but its main advantage over anything at all is its customizable keyboard-centric nature, and MailMate has that, too, with less fussing.</p>
<p>And there is something a little weird about running isync on two machines in the house. I mean, theoretically it is no weirder than running two IMAP clients of any kind on two machines in the house. It&rsquo;s just an IMAP client. But it&rsquo;s a busy one.</p>
<h2 id="atomic-chrome-ghosttext">Atomic Chrome/GhostText</h2>
<p>There have been a few &ldquo;use your favorite editor for text areas in your browser&rdquo; things over the years. <a href="https://github.com/alpha22jp/atomic-chrome">Atomic Chrome</a> seems to work very well with <a href="https://github.com/fregante/GhostText">GhostText</a>, an extension that works with any of Firefox, Safari, or Chrome. You just install the package in Emacs, and invoke the listener with <code>(atomic-chrome-start-server)</code> somewhere in your init. It listens for the browser extension, which can be invoked with <code>CMD SHIFT k</code>, and opens a buffer for editing.</p>
<p>As I said, this kind of thing has been around for years. The Atomic Chrome/GhostText combination just seems to be reliable in a way I haven&rsquo;t come across in the past.</p>
<h2 id="org-recur">org-recur</h2>
<p>Scheduling recurrence in org isn&rsquo;t <em>that</em> bad, but <a href="https://github.com/mrcnski/org-recur">org-recur</a> makes it really simple. It just extends org-mode&rsquo;s syntax and allows you to add recurrence rules in a heading using notation like <code>|+1|</code>, <code>|Wkdy|</code>, or <code>|1,15|</code>, for &ldquo;every day,&rdquo; &ldquo;every weekday,&rdquo; and &ldquo;1st and 15th of every month,&rdquo; respectively.</p>
<h2 id="captee">Captee</h2>
<p>org-capture, like assorted &ldquo;use your favorite editor everywhere&rdquo; plugins, is one of those things I know people have had working for a while. I remember having it set up and working a very long time ago, then I lost that config and just forgot how to do it. <a href="http://yummymelon.com/captee/">Captee</a> is a little macOS app that worked pretty much out of the box once I had an emacsclient app set up.</p>
<p>It sits in your Mac share menu and grabs URLs from browsers and browser-adjacent apps then does &hellip; stuff &hellip; to them. If you want a simple Markdown link, it&rsquo;ll do that. If you want an org-mode link, it&rsquo;ll do that, copying both to the clipboard for you. It&rsquo;ll also work with your org-capture template of choice and send a link + title + selected text to org-mode.</p>
<p>The thing I really like about it is that it works well with my RSS reader, Reeder. I&rsquo;ve just bound it to <code>C</code> in the share actions list and it saves links/titles to my org-mode inbox.</p>
<h2 id="more-on-my-org-prm">More on my org PRM</h2>
<p>I guess the thing I&rsquo;ve been calling a plaintext CRM belongs to the &ldquo;PRM&rdquo; category (for &ldquo;personal,&rdquo; not &ldquo;customers.&rdquo;) So, it&rsquo;s my org PRM now. I&rsquo;ve been getting real use out of it.</p>
<p>Building it has followed a familiar pattern of feeling a gap, thinking surely someone has filled it, realizing that is not true, then going through the same loop of &ldquo;maybe this general purpose tool?&rdquo; and a halting attempt to use it, then a realization that it doesn&rsquo;t matter how many rounded corners and AJAX transition effects the roach motel has &ndash; it&rsquo;s still a roach motel.</p>
<p>It&rsquo;s just a bad category I can only assume is as bad as it is because nobody wants to pay for it at the consumer level, and I think nobody wants to pay for it because social media has ushered in an era where we&rsquo;re all sort of performing the family holiday letter on Facebook every day of the year.  And also our &ldquo;contacts&rdquo; are all over the place. Every attempt to consolidate them and de-dup them is a minor catastrophe, with your sister-in-law manifesting nine times in the same address book and Siri forgetting where &ldquo;home&rdquo; is because something has pulled in your address-free doppelganger.</p>
<p>Anyhow, the <a href="https://mike.puddingtime.org/posts/20230413-making-a-plaintext-personal-crm-with-org-contacts/">thing I built a few weeks ago?</a> I am using it daily:</p>
<ul>
<li>Agenda reports that tell me who I haven&rsquo;t been in touch with, but want to.</li>
<li>Reminders to schedule time with people or follow up on plans.</li>
<li>Easy,fast access to past messages from contacts.</li>
<li>Quick notes about conversations.</li>
<li>Reminders to ping recruiters.</li>
</ul>
<p>There are a lot of contact management apps. There are a few apps that will issue general-purpose &ldquo;AI-driven&rdquo; reminders to contact people. There&rsquo;s nothing that feels as easy to use. I tried one that featured a lot of nice automation, but it was iOS only and there was no way to mass-select and tag contacts. Even with my relatively modest list I would have been an hour pecking in tags. With a contacts.org file, it was very fast and simple. There&rsquo;s not even a smirky &ldquo;only free if your time is worth nothing&rdquo; rejoinder, because most of these products are harder to use and take more time to deliver less, or cost astronomical amounts for what they do.</p>
<p>Being plaintext and org-mode/elisp driven, it&rsquo;s also super easy to extend and modify. If I don&rsquo;t like a decision I made about how something works, it&rsquo;s an easy change. With org-mode capture templates, the input is all uniform and structured, so I don&rsquo;t worry about backing out or moving the content elsewhere. Basically, it&rsquo;s as calming for me as text ever has been.</p>
<p>Anyhow, I use it daily, I like it a lot, and it feels good to use.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Quick mu4e notes</title>
      <link>https://mike.puddingtime.org/posts/2023-04-20-quick-mu4e-notes/</link>
      <pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-20-quick-mu4e-notes/</guid>
      <description>The bear dances! And it dances &amp;hellip; pretty good?</description>
      <content:encoded><![CDATA[<p><a href="https://www.djcbsoftware.nl/code/mu/mu4e.html">mu4e</a> is pretty good!</p>
<p>I went into giving mu a shot giving myself a giant side-eye for doing anything that involved running some MDA on a laptop, which is the minimum to use something like mu.</p>
<p>The intensity of the irritation with myself just deepened when my first pick for delivery &ndash; offlineimap &ndash; didn&rsquo;t pan out and I found myself configuring <a href="https://isync.sourceforge.io/">isync</a> to see if that would do any better. But isync (dba mbsync) works pretty well. It was easy to configure, I figured out how to gpg-encrypt my credentials, and I got it all set up in <a href="https://github.com/lra/mackup">mackup</a> such that I only have to configure/reconfigure in one place.</p>
<p>Most of my aversion to fiddling around with mail comes down to the MDA part, either because of the fragility of the component itself, or the flakiness of running these things on a laptop and how they&rsquo;ll cope with being daemonized in an environment that&rsquo;s not awake all the time. isync itself seems fine after several days, and it seems to be okay running as a <a href="https://github.com/Homebrew/homebrew-services">homebrew service</a> (with one minor caveat).</p>
<p>So that&rsquo;s getting mail down to the machine.</p>
<p><a href="https://github.com/djcb/mu">mu</a> itself &ndash; the indexing/search service for the maildir that isync creates &ndash; is pretty good. I&rsquo;ve got ~231,000 messages indexed in it, and it&rsquo;s super fast. As I&rsquo;ve been working on cleaning up my contacts list it&rsquo;s been great for just <code>mu find &quot;someone&quot;</code> from the command line. In some ways it&rsquo;s almost too helpful given the volume of messages, because you get stuff like multiple reply-to&rsquo;s in headers from Google+ email notifications or whatever, so one name can return 20 or 30 results in an address search.</p>
<p>So that brings us to mu4e.</p>
<p>Most of my aversion to running anything to do with &rsquo;net activity on Emacs comes down to blocking the whole app on a slow operation. I used to use GNUS for both IMAP and Usenet, and remember sometimes just having to get up and walk away during a sync until something finally got around to downloading. It was no way to live and I swore off anything to do with mail on Emacs unless I was willing to do it with an MDA of some kind in place (with all the attendant reasons I did not want to do that applying).</p>
<p>mu4e doesn&rsquo;t even really interact with whatever we could consider a &ldquo;physical&rdquo; mail message, though. I mean, yes &hellip; when you write a message with it, it is creating a tmp of something that is eventually handed off to an MTA, but for reading and processing it is not touching Maildir messages in the filesystem &ndash; it is instead interacting with the mu database as a set of queries. It&rsquo;s super fast. Fast the way Spotlight <em>can</em> be in Apple Mail, or search <em>can</em> be in Gmail, but consistently so.</p>
<p>UI-wise, mu4e is initially puzzling.</p>
<p>It starts from a place of &ldquo;every list of mail is just a database query, not a list of files in a <code>Maildir</code> directory.&rdquo; That&rsquo;s fine. Lots of things in computing exist as vectorized representations of an object in filesystem. The difference between mu4e and some of these other styles of digital information is that not a ton of work has been done to re-translate these vectorized abstractions back into their old metaphor. So the menus, etc. talk in terms of &ldquo;lists of headers&rdquo; and not &ldquo;folders of messages.&rdquo;</p>
<p>Broadly, you can tell mu4e started from mu &ndash;  &ldquo;let&rsquo;s make a mail search engine&rdquo; &ndash;  and then found expression as an Emacs MUA. While other MUAs <em>include</em> the idea of marking and operating but tend to start from a place of direct operation on a message (mutt&rsquo;s an exception), mu4e starts from the assumption you&rsquo;re going to mark and operate. So you don&rsquo;t &ldquo;delete a message,&rdquo; you mark it for deletion (or moving, or whatever) then either execute your marks with the <code>x</code> keystroke, or sign off on executing them when you leave a given header list (i.e. what everyone else calls a folder).</p>
<p>It&rsquo;s &hellip; I hate to even make it sound like this is a thing. If you have room in your life for setting up an MDA, a search engine for mail, and an Emacs MUA, you have whatever it is one needs to interact with a thin layer of abstraction over that whole pile of other abstractions. In some ways, mu4e feels to me like what might have happened if we chucked every innovation in mail interfaces that occurred after <a href="https://en.wikipedia.org/wiki/MH_Message_Handling_System">mh</a> and went straight to &ldquo;nah, dawg, your mail is still there on disk, but it also lives in The Matrix.&rdquo; There&rsquo;s just a little ramp for your muscle memory, is all.</p>
<p>So, what do you get in exchange, I guess?</p>
<p>First, it overcomes the core objection to running an MUA on Emacs at all: Everything except composing a message is a database operation, so everything is pretty fast.</p>
<p>People report being slowed down when trying to send messages with large attachments, and the proposed workaround (an async method you can configure) reportedly flakes out now and then. A dedicated MUA like Apple Mail might just step over that by backgrounding the send operation and letting you go on your way. Some webmail apps will give you the AJAX-y spinner until they&rsquo;re done receiving the attachment, but not otherwise lock you out of using your browser. Conceivably, a big attachment with mu4e will still cost you the use of your text editor for the duration of the attachment. People who refuse to use their text editors for things besides just editing text will find that unacceptable and weird, but also know it&rsquo;s a problem they&rsquo;ll never have.  People who think it&rsquo;s right and proper to use their text editors to catch up on Mastodon, read RSS, send mail, do their calendaring, track their todos, browse the web &hellip; aaaaaaand <em>sometimes</em> edit a text file may be more put off.</p>
<p>By default, at least in Doom, it also hooks its <code>update</code> function into firing off your MDA so it can make sure the database has the latest messages. So when you check your mail with it, it wants to kick off an <code>mbsync</code> run. That doesn&rsquo;t block it. I think it&rsquo;s possible to configure it to just prompt a reindexing of your Maildir instead of a whole MDA run. I need to do a little more in-depth investigation of how well isync is working for me because right now I think mu4e and the Homebrew daemonization fight with each other, but the net effect is that one process gets isync to download my mail instead of the other.</p>
<p><em>Otherwise</em> it is very, very fast, and its keyboard-centric UI is built toward getting at stuff quickly with a bunch of terse keystrokes to navigate to bookmarked mailboxes and canned search queries. Once you get the hang of marking/operating on a list of headers (with equally efficient keystrokes you can also customize) it&rsquo;s a mail processing machine.</p>
<p>No, sorry, excuse me &ndash; it is a mail database processing machine.</p>
<p>I&rsquo;ve previously named a few of these, but besides speed and efficiency, it offers a few other benefits:</p>
<p>First, I love composing mail in org mode markup. I sent myself a few test mails and loved, for instance, that an org mode src block was correctly colorized. org markup is a little more verbose than Markdown in some places. For instance, a blockquote isn&rsquo;t done with a leading <code>&gt;</code> but with a <code>+begin_quote</code> and <code>+end_quote</code> block.</p>
<p>Second, it&rsquo;s easily hooked into <code>org-capture</code>. Here&rsquo;s a capture template for putting a message in your inbox, marked for action within two days:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="o">&#39;</span><span class="p">(</span><span class="s">&#34;M&#34;</span> <span class="s">&#34;process-soon&#34;</span> <span class="nv">entry</span> <span class="p">(</span><span class="nv">file+headline</span> <span class="s">&#34;inbox.org&#34;</span> <span class="s">&#34;Messages&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="s">&#34;* TODO %:fromname: %a %?\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \&#34;+2d\&#34;))&#34;</span><span class="p">)</span></span></span></code></pre></div>
<p>In Doom Emacs, you get at that with <code>SPC X M</code>. When it&rsquo;s time to deal with the message, just tap <code>enter</code> on the heading and mu4e opens the message. Excuse me, no, it retrieves the header from the database.</p>
<p>In terms of drawbacks, setup time and learning curve aside, it has a few downsides:</p>
<p>At least one keymapping doesn&rsquo;t play well with Doom Emacs. In mu4e, the <code>SPC</code> key is mapped to <code>scroll-up-command</code> to serve as a pager, whereas that&rsquo;s the leader key for Doom everywhere else. The workaround is to use <code>OPT SPC</code> to get to Doom&rsquo;s menu, but I&rsquo;m still baking that into my muscle memory.</p>
<p>While orgmail-mode is cool and all, it interacts weirdly with the rest of the package sometimes, and I wish I could toggle its HTML mail features on and off now and then.</p>
<p>Its HTML mail presentation is as woeful as any mail client that starts from plaintext land, and the remedy is the same as it is in mutt: Learn the shortcut for opening HTML mail of any complexity straight into your browser.</p>
<p>Finally, it doesn&rsquo;t interact as well with <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Convenience.html#index-winner_002dmode">winner mode</a> as I&rsquo;d like, leaving frames in a weird state after some operations. I did convince ChatGPT to write a hook for me to get mail composer frames to close instead of leaving the view split:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">after!</span> <span class="nv">mu4e</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-mu4e-close-frame-after-send</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Close the frame after sending a message in mu4e.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nb">and</span> <span class="p">(</span><span class="nf">eq</span> <span class="nv">major-mode</span> <span class="ss">&#39;mu4e-compose-mode</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">             <span class="p">(</span><span class="nv">not</span> <span class="p">(</span><span class="nv">mu4e~message-autopgp-p</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">delete-frame</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">add-hook</span> <span class="ss">&#39;message-sent-hook</span> <span class="nf">#&#39;</span><span class="nv">my-mu4e-close-frame-after-send</span><span class="p">))</span></span></span></code></pre></div>
<p>org-mail also seems to leave behind spare buffers it uses to put together the plaintext part of its multipart messages.</p>
<p>Net, though, it&rsquo;s so fast and efficient that I can see past most of that. I&rsquo;m sort of curious about connecting mutt to notmuch to see how that works, mostly because I know mutt very, very well and feel a little more fluent when it comes to customizing it. Some of the stuff I&rsquo;ve got set up in mu4e could be done with a little utility scripting in mutt.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Extending the plaintext CRM to mail contacts</title>
      <link>https://mike.puddingtime.org/posts/2023-04-18-extending-the-plaintext-crm-to-mail-contacts/</link>
      <pubDate>Tue, 18 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-18-extending-the-plaintext-crm-to-mail-contacts/</guid>
      <description>Added a little automation to contacts.org with a function that auto-populates a message buffer in mu4e.</description>
      <content:encoded><![CDATA[<p>I did some menu cleanup and refactor today to get my plaintext CRM into a slightly more mnemonic state. Here are the mappings, which are readable enough:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:mode</span> <span class="nv">org</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">     <span class="p">(</span><span class="nb">:prefix-map</span> <span class="p">(</span><span class="s">&#34;C&#34;</span> <span class="o">.</span> <span class="s">&#34;CRM&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;Schedule Contact&#34;</span> <span class="s">&#34;s&#34;</span> <span class="nf">#&#39;</span><span class="nv">org-schedule-heading</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;Clear TODO states&#34;</span> <span class="s">&#34;z&#34;</span> <span class="nf">#&#39;</span><span class="nv">my/org-remove-todo</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;Update CONTACTED to today&#34;</span> <span class="s">&#34;t&#34;</span> <span class="nf">#&#39;</span><span class="nv">org-set-contacted-today</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;Update CONTACTED to ...&#34;</span> <span class="s">&#34;d&#34;</span> <span class="nf">#&#39;</span><span class="nv">org-set-contacted-date</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;SCHEDULE a date&#34;</span> <span class="s">&#34;S&#34;</span> <span class="nf">#&#39;</span><span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span> <span class="p">(</span><span class="nv">my/org-set-heading-state-and-time</span> <span class="s">&#34;&#34;</span> <span class="mi">30</span> <span class="ss">&#39;s</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;Mail this contact&#34;</span> <span class="s">&#34;m&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-org-contacts-email</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">     <span class="p">(</span><span class="nb">:prefix-map</span> <span class="p">(</span><span class="s">&#34;C r&#34;</span><span class="o">.</span> <span class="s">&#34;Remember to ...&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;... write within 7 days&#34;</span> <span class="s">&#34;w&#34;</span> <span class="nf">#&#39;</span><span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span> <span class="p">(</span><span class="nv">my/org-set-heading-state-and-time</span> <span class="s">&#34;WRITE&#34;</span> <span class="mi">7</span> <span class="ss">&#39;d</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;... followup in 3 days&#34;</span> <span class="s">&#34;f&#34;</span> <span class="nf">#&#39;</span><span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span> <span class="p">(</span><span class="nv">my/org-set-heading-state-and-time</span> <span class="s">&#34;FOLLOWUP&#34;</span> <span class="mi">3</span> <span class="ss">&#39;s</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;... ping within 7 days&#34;</span> <span class="s">&#34;p&#34;</span> <span class="nf">#&#39;</span><span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span> <span class="p">(</span><span class="nv">my/org-set-heading-state-and-time</span> <span class="s">&#34;PING&#34;</span> <span class="mi">3</span> <span class="ss">&#39;d</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;... invite within 3 days&#34;</span> <span class="s">&#34;i&#34;</span> <span class="nf">#&#39;</span><span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span> <span class="p">(</span><span class="nv">my/org-set-heading-state-and-time</span> <span class="s">&#34;INVITE&#34;</span> <span class="mi">3</span> <span class="ss">&#39;d</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span></span></span></code></pre></div>
<p>It&rsquo;s a bunch of &ldquo;tap the leader key, tap &ldquo;<code>C</code>&rdquo; for &ldquo;CRM,&rdquo; then do some common stuff,&rdquo; like setting deadlines to write someone, or update the <code>:CONTACTED:</code> property, or just set the <code>SCHEDULED:</code> date on a record. This is the <code>my/org-set-heading-state-and-time</code> function:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my/org-set-heading-state-and-time</span> <span class="p">(</span><span class="nv">state</span> <span class="nv">days</span> <span class="kp">&amp;optional</span> <span class="nv">time-type</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Sets the TODO state and deadline or scheduled date of the current heading.
</span></span></span><span class="line"><span class="cl"><span class="s">   STATE is the new TODO state to set, and DAYS is the number
</span></span></span><span class="line"><span class="cl"><span class="s">   of days from the current date to set the new time. If TIME-TYPE
</span></span></span><span class="line"><span class="cl"><span class="s">   is &#39;d&#39;, sets a deadline; if &#39;s&#39;, sets a scheduled date; otherwise,
</span></span></span><span class="line"><span class="cl"><span class="s">   prompts the user for the time type. Removes any existing schedules
</span></span></span><span class="line"><span class="cl"><span class="s">   or deadlines before setting the new time.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span> <span class="p">(</span><span class="nf">list</span> <span class="s">&#34;WRITE&#34;</span> <span class="mi">7</span> <span class="no">nil</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">org-entry-put</span> <span class="no">nil</span> <span class="s">&#34;TODO&#34;</span> <span class="nv">state</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="no">nil</span> <span class="s">&#34;DEADLINE&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">org-entry-delete</span> <span class="no">nil</span> <span class="s">&#34;DEADLINE&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="no">nil</span> <span class="s">&#34;SCHEDULED&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">org-entry-delete</span> <span class="no">nil</span> <span class="s">&#34;SCHEDULED&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">new-time</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;&lt;%Y-%m-%d %a&gt;&#34;</span>
</span></span><span class="line"><span class="cl">                                      <span class="p">(</span><span class="nf">time-add</span> <span class="p">(</span><span class="nf">current-time</span><span class="p">)</span> <span class="p">(</span><span class="nv">days-to-time</span> <span class="nv">days</span><span class="p">)))))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">cond</span> <span class="p">((</span><span class="nf">equal</span> <span class="nv">time-type</span> <span class="ss">&#39;d</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="nv">org-deadline</span> <span class="no">nil</span> <span class="nv">new-time</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">          <span class="p">((</span><span class="nf">equal</span> <span class="nv">time-type</span> <span class="ss">&#39;s</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="nv">org-schedule</span> <span class="no">nil</span> <span class="nv">new-time</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="no">t</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="nb">setq</span> <span class="nv">time-type</span> <span class="p">(</span><span class="nf">completing-read</span> <span class="s">&#34;Set time type (d/s): &#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="nv">my/org-set-heading-state-and-time</span> <span class="nv">state</span> <span class="nv">days</span> <span class="p">(</span><span class="nb">if</span> <span class="p">(</span><span class="nv">string=</span> <span class="nv">time-type</span> <span class="s">&#34;d&#34;</span><span class="p">)</span> <span class="ss">&#39;d</span> <span class="ss">&#39;s</span><span class="p">))))))</span></span></span></code></pre></div>
<p>It&rsquo;s written with the menu system in mind. It&rsquo;d be too clunky to use interactively &ndash; too many possible states to remember, etc. but as part of a bunch of canned menu options you can get to with one or two taps it saves a bunch of typing and cursor motion for common operations.</p>
<p>Then I thought, &ldquo;it&rsquo;d be handy to just visit a record and have an option to compose a mail,&rdquo; so <code>my-org-contacts-email</code> was born:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-org-contacts-email</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Open am email message to the email address in the EMAIL property of the current org-contacts heading.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nf">eq</span> <span class="nv">major-mode</span> <span class="ss">&#39;org-mode</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">email</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="p">(</span><span class="nf">point</span><span class="p">)</span> <span class="s">&#34;EMAIL&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">if</span> <span class="nv">email</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nb">progn</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nb">unless</span> <span class="p">(</span><span class="nb">featurep</span> <span class="ss">&#39;mu4e</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">              <span class="p">(</span><span class="nv">mu4e</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">mu4e-compose-new</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">message-goto-to</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nf">insert</span> <span class="nv">email</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">message-goto-body</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nf">insert</span> <span class="s">&#34;\n\n&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nf">message</span> <span class="s">&#34;No email address found.&#34;</span><span class="p">)))))</span></span></span></code></pre></div>
<p>It has some behavioral issues I need to straighten out, but if mu4e is running and I tap <code>SPC C m</code> while positioned over a contact, it opens and pre-addresses a new message in mu4e.</p>
<p>I think it&rsquo;s beyond the ken of <code>org-caldav</code>, but I suppose a call out to AppleScript could create similar functionality for scheduling things with a contact.</p>
<p>I really like the Doom menu system (and I suppose I&rsquo;d like Spacemacs&rsquo; as well). The last time I was all-in on org mode I had so much trouble with all the Emacs chords that I ended up setting up <a href="https://gitlab.com/phillord/org-drill/">org-drill</a> to periodically train. With Doom&rsquo;s menus, there are decent mnemonics up front, then visual reminders along the way. It still takes time to learn everything, but you get reminders and you can stop to study the menu if you forget. I don&rsquo;t know how many times I have mashed <code>CTRL g</code> when I lost track of my fingers during a complex vanilla Emacs sequence.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Succumbed to mu.</title>
      <link>https://mike.puddingtime.org/posts/2023-04-17-succumbed-to-mu-dot/</link>
      <pubDate>Mon, 17 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-17-succumbed-to-mu-dot/</guid>
      <description>This had to happen eventually.</description>
      <content:encoded><![CDATA[<p>I had some futzing time before writing time this morning, so I succumbed to what I initially thought was just getting <a href="https://www.offlineimap.org/">OfflineIMAP</a> going so I could get some speed improvements from mutt. Then I noticed lbdb had a <a href="https://github.com/djcb/mu">mu</a> backend, which would mean address lookup for 20 years of email. And that meant my <code>packages.el</code> file had that <code>;;(mu4e +org)</code> just sitting there, waiting to be uncommented.</p>
<p>I have a little self-control, so I made myself wait until I had mutt working before trying out <a href="https://www.djcbsoftware.nl/code/mu/mu4e.html">mu4e</a>.</p>
<p>And at that point, there was a yak capering about in my living room, and it had to be shaved:</p>
<ul>
<li>mu</li>
<li>msmtp</li>
<li>mu4e</li>
<li>&hellip; and isync</li>
</ul>
<p>isync because I found a bug in OfflineIMAP, which was inevitable given the 20-year-old email corpus I&rsquo;ve been lugging around between mail servers. It was killing Homebrew&rsquo;s ability to run offlineimap daemonized, so down that rabbit hole I went to satisfy myself the problem was widespread enough that it was worth considering alternatives, and isync has some good press.</p>
<p>Initial impressions:</p>
<ul>
<li>mu is pretty cool on its own. Very curious to play with my 20 years of email with it.</li>
<li>I haven&rsquo;t really tested mu&rsquo;s performance under mutt with search. But it is nice having very fast address lookup.</li>
<li>msmtp is &hellip; fine? I was using built-in SMTP for mutt, msmtp is there for mu4e&rsquo;s benefit so I just use it for both clients now.</li>
<li>isync seems fast enough and works well once the initial mail store is read into maildir.</li>
</ul>
<p>Tomorrow I&rsquo;ll move the data and databases over to my desktop</p>
<p>Oh &hellip; mu4e.</p>
<p>It is weird, but it&rsquo;s my kind of weird. Very high concept. Super fast. The &ldquo;squee&rdquo; factor is being able to compose mail in org-mode markup, which it turns into multipart mail. If you read the HTML version of your mail, mu4e messages look like rich text. If you read the plaintext version, it applies some plaintext styling:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Heading
</span></span><span class="line"><span class="cl">═══════
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">*Bold* and /italics/ and [a link].
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[a link] &lt;https://mike.puddingtime.org&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Subheading
</span></span><span class="line"><span class="cl">──────────</span></span></code></pre></div>
<p>Search is superfast, navigating between folders is keyboard-centric, and because the mail retrieval stuff is happening outside of an Emacs thread, it doesn&rsquo;t block. I think you can set it up to run isync async inside Emacs, but I just noticed someone&rsquo;s config a few minutes ago and it&rsquo;s bedtime.</p>
<p>I am not sure what its future will be. I really like my mutt setup. I wonder if there&rsquo;s a way to get the org-mode mail composition using Emacs as my mutt mail editor. Science needs to be done.</p>
]]></content:encoded>
    </item>
    <item>
      <title>An org-contacts source for lbdb</title>
      <link>https://mike.puddingtime.org/posts/2023-04-16-an-org-contacts-source-for-lbdb/</link>
      <pubDate>Sun, 16 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-16-an-org-contacts-source-for-lbdb/</guid>
      <description>I modified a Perl lbdb backend by ‪@publicvoit@graz.social ‬to use my org-contacts with mutt</description>
      <content:encoded><![CDATA[<p>This is a ruby-based back-end for <a href="https://www.spinnaker.de/lbdb/">The Little Brother&rsquo;s Database (lbdb)</a> that looks at a hard-coded <code>org-contacts</code> file. The idea comes from <a href="https://lists.gnu.org/archive/html/emacs-orgmode/2011-10/msg01059.html">a 2011 Perl implementation by Karl Voit</a>. Because I am not a Perl person, when it didn&rsquo;t work out of the box I converted it to Ruby.</p>
<p>And because I&rsquo;ve chosen to treat org-contacts as <code>TODO</code> items for purposes of remembering who to <code>PING</code>, <code>FOLLOWUP</code>, <code>SKED</code>, etc. it has to take the extra step of stripping those keywords from the returned name. Otherwise, my mails to Joe Grudd would be addressed to <code>FOLLOWUP Joe Grudd</code>.</p>
<p>That&rsquo;s a small bit of inelegance in my plaintext CRM setup:  As I&rsquo;ve figured out more about how <code>org-super-agenda</code> works, I&rsquo;ve had glimpses of how the plaintext CRM metadata could just be content in the <code>:PROPERTIES:</code> drawer, and hence invisible for purposes of tools like this, but a few other pieces of passive automation would have to become some sort of org-mode hook and I&rsquo;d lose the utility of tools like Beorg, which can&rsquo;t provide the automation of native Emacs.</p>
<p>For now, it&rsquo;s one of those &ldquo;this design isn&rsquo;t the cleanest, but it&rsquo;s simple and only creates a few easily solved problems&rdquo; things.</p>
<p>Here&rsquo;s the script itself. I put it in <code>~/bin</code> as <code>orgcontact.rb</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Get the query string</span>
</span></span><span class="line"><span class="cl"><span class="n">query</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Set the path to your Org-contacts file</span>
</span></span><span class="line"><span class="cl"><span class="n">orgmodefile</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="si">#{</span><span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;HOME&#39;</span><span class="o">]</span><span class="si">}</span><span class="s2">/org/contacts.org&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Read in the whole contact file</span>
</span></span><span class="line"><span class="cl"><span class="n">raw_contacts</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">orgmodefile</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">** &#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Iterate through each contact</span>
</span></span><span class="line"><span class="cl"><span class="n">raw_contacts</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">contact</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="n">contact</span><span class="o">.</span><span class="n">match?</span><span class="p">(</span><span class="sr">/</span><span class="si">#{</span><span class="n">query</span><span class="si">}</span><span class="sr">/i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Extract the name and email from the contact</span>
</span></span><span class="line"><span class="cl">    <span class="nb">name</span> <span class="o">=</span> <span class="n">contact</span><span class="o">[</span><span class="sr">/^[^\n]*/</span><span class="o">].</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/(PING|INVITE|WRITE|PINGED|FOLLOWUP|SKED|NOTES|SCHEDULED|TIMEOUT|OK)\s+/i</span><span class="p">,</span> <span class="s2">&#34;&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span>
</span></span><span class="line"><span class="cl">    <span class="n">email</span> <span class="o">=</span> <span class="n">contact</span><span class="o">[</span><span class="sr">/:EMAIL:\s+(.*)$/</span><span class="p">,</span> <span class="mi">1</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Remove tags from the name</span>
</span></span><span class="line"><span class="cl">    <span class="nb">name</span><span class="o">.</span><span class="n">gsub!</span><span class="p">(</span><span class="sr">/:\S+:/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">puts</span> <span class="s2">&#34;</span><span class="si">#{</span><span class="n">email</span><span class="si">}</span><span class="se">\t</span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="se">\t</span><span class="s2">(org-contacts)&#34;</span> <span class="k">if</span> <span class="nb">name</span> <span class="o">&amp;&amp;</span> <span class="n">email</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div>
<p>Adding <code>m_org_contacts</code> to the <code>METHODS</code> setting then including a little wrapper in <code>~/.lbdbrc</code> doesn&rsquo;t follow the canonical advice on how to configure an lbdb backend, but it works, and it&rsquo;s one less file to put somewhere:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">METHODS=&#34;m_osx_addressbook m_org_contacts&#34;
</span></span><span class="line"><span class="cl">MODULES_PATH=&#34;$MODULES_PATH $HOME/bin/lbdb&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">m_org_contacts_query() {
</span></span><span class="line"><span class="cl">   ~/bin/orgcontact.rb &#34;$1&#34;
</span></span><span class="line"><span class="cl">}</span></span></code></pre></div>
<p>So, the outcome is just:</p>
<ol>
<li>
<p>Start a new message in mutt and start typing the name/address/etc.</p>
</li>
<li>
<p>lbdb provides a list of matches from a few sources I&rsquo;ve set up: org-contacts and macOS address book</p>
</li>
<li>
<p><code>ENTER</code> to select a candidate</p>
<p>b</p>
</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>Making a plaintext personal CRM with org-contacts</title>
      <link>https://mike.puddingtime.org/posts/2023-04-13-making-a-plaintext-personal-crm-with-org-contacts/</link>
      <pubDate>Thu, 13 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-13-making-a-plaintext-personal-crm-with-org-contacts/</guid>
      <description>I don&amp;rsquo;t like the looks of any of the personal CRM software out there, so I&amp;rsquo;m making a plaintext one.</description>
      <content:encoded><![CDATA[<p>This morning Al and I took our coffee walk, but she had to hop on a call, so for the two-mile walk back home I had some time to think about the habit on my list that popped up today: <code>Social Maintenance</code> and I also happen to have, for assorted reasons, a massive amount of poorly directed nervous energy. I am scattered and my thoughts are darting all over the place, and there&rsquo;s enough jittery energy built up  that the thought of cycling through a bunch of &ldquo;what if I try <em>this</em>&rdquo; stuff is sort of comforting.</p>
<p>I started trying to cultivate a social maintenance habit with the thought in mind that I had no idea what I was really thinking, just that during this current period it is important to me to keep up social contact in ways large and small. Pretty soon thereafter I realized I had an organizational problem on my hands: My address books were kind of a mess. Not very well organized, old data, a ton of contacts with old work addresses, etc. I spent a day straightening that out and got to a place of mostly clean.</p>
<p>The next problem that presented itself was that &ldquo;personal CRM&rdquo; is just an  awful software category. Whenever I see a new contact management app, I think &ldquo;oh, this is surely the one that will let you do something with your existing information, or add useful information,&rdquo; but it never seems to be. The more competent looking entries in the market cost a lot. Searching yields a lot of &ldquo;make one in Trello,&rdquo; &ldquo;make one in Notion,&rdquo; etc.</p>
<p>I just stopped thinking about it and decided &ldquo;do it off the top of your head until something comes up for you.&rdquo;</p>
<p>So this morning, Al was on her call, and I had a <code>Social Maintenance</code> habit popping up on my agenda as a thing I was supposed to do today, and I&rsquo;d been reading about <code>org-contacts</code>, <code>org-vcard</code>, and the ways they can integrate with an org-mode agenda to show birthdays or other anniversaries. By a few blocks later I&rsquo;d thought of how I might wedge CRM-like data into that system with org <code>:PROPERTIES:</code> drawers:</p>
<ul>
<li>desired frequency</li>
<li>date last contacted</li>
<li>notes on the last contact</li>
</ul>
<p>This is all stuff you could do in a spreadsheet, and I think a lot of people do it that way. I have an aversion to spreadsheet applications, though.</p>
<p>By the time we were home, I had the beginnings of a plan: Export my macOS address book to a big vcard file, use <code>org-vcard</code> to import it into a contacts file, then start figuring out the mechanics of adding the fields I needed to drive org agenda views.</p>
<h2 id="getting-my-contacts-into-org-contacts">Getting my contacts into org-contacts</h2>
<p>There&rsquo;s an <code>org-vcard</code> package that theoretically handles the process of moving a vcard file into an org file. The maintainer has announced that they&rsquo;re not going to work on it any longer, and it seems to have problems with macOS Contacts output.</p>
<p>I put together a script (well, ChatGPT and I put together a script) that parses a VCF file and dumps the contacts out into the right format. I just cat&rsquo;d its output into the right file. It is probably best described as a menace to your data. I had so recently scrubbed my contacts that I trusted it enough.</p>
<p>An org-contacts record looks like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">\* Joe Grudd :social:
</span></span><span class="line"><span class="cl">:PROPERTIES:
</span></span><span class="line"><span class="cl">:EMAIL: joe@grudd.com
</span></span><span class="line"><span class="cl">:WEBSITE: http://joe.grudd.com
</span></span><span class="line"><span class="cl">:CONTACTED: 2023-04-12
</span></span><span class="line"><span class="cl">:END:</span></span></code></pre></div>
<p>There are a few other fields, like birthday and physical address, too.</p>
<p>On its own, it doesn&rsquo;t do a ton. You can add notes to a :NOTES: property if you like, and you can search the entire file with an <code>org-contacts</code> command that lists results instead of just doing a normal text search operation.</p>
<h2 id="tracking-contact-information">Tracking contact information</h2>
<p>There are a few ways I thought of to come at what I wanted to do, which amounted to:</p>
<ul>
<li>
<p>Keeping track of whom I&rsquo;ve had contact with</p>
</li>
<li>
<p>Keeping track of when I last had contact with someone</p>
</li>
<li>
<p>Keeping track of useful details about people</p>
</li>
<li>
<p>Surfacing people I haven&rsquo;t seen in a while</p>
<p>The <code>NOTES</code> property in a vcard record is fine, but org-mode provides a way to add a log to each record in its own drawer, which changes the record to look like this:</p>
</li>
</ul>
<!--listend-->






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl">\* Joe Grudd :social:
</span></span><span class="line"><span class="cl"><span class="c">:PROPERTIES:
</span></span></span><span class="line"><span class="cl"><span class="cs">:EMAIL: joe@grudd.com
</span></span></span><span class="line"><span class="cl"><span class="cs">:WEBSITE: http://joe.grudd.com
</span></span></span><span class="line"><span class="cl"><span class="cs">:CONTACTED: 2023-04-12
</span></span></span><span class="line"><span class="cl"><span class="c">:END:</span>
</span></span><span class="line"><span class="cl"><span class="c">:LOGBOOK:
</span></span></span><span class="line"><span class="cl"><span class="cs">  - Note taken on [2023-04-12 Wed 11:16] \\
</span></span></span><span class="line"><span class="cl"><span class="cs">    Caught up over IM for the first time in a while. He&#39;s moving to California next month.
</span></span></span><span class="line"><span class="cl"><span class="c">  :END:</span></span></span></code></pre></div>
<p>org-mode pretties all this stuff up, so the <code>LOGBOOK</code> and <code>PROPERTIES</code> drawers aren&rsquo;t always visible.</p>
<p>I also added the <code>CONTACTED</code> field to <code>PROPERTIES</code>. It&rsquo;s just an ISO-8601 date meant to reflect the last time I had some kind of contact, even if it&rsquo;s just a ping.</p>
<p>So at this point, I could just use this as is and it&rsquo;d be no worse than a spreadsheet.</p>
<h2 id="automating-updates">Automating updates</h2>
<p>I wanted a way to quickly note a contact &ldquo;touch&rdquo; so I made a few functions for that:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">org-set-contacted-today</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Set the CONTACTED property of the current item to today&#39;s date.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">org-set-property</span> <span class="s">&#34;CONTACTED&#34;</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y-%m-%d&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">org-set-contacted-date</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Set the CONTACTED property of the current item to a chosen date.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">date</span> <span class="p">(</span><span class="nv">org-read-date</span> <span class="no">nil</span> <span class="no">t</span> <span class="no">nil</span> <span class="s">&#34;Enter the date: &#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">org-set-property</span> <span class="s">&#34;CONTACTED&#34;</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y-%m-%d&#34;</span> <span class="nv">date</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:mode</span> <span class="nv">org-mode</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:localleader</span>
</span></span><span class="line"><span class="cl">      <span class="nb">:desc</span> <span class="s">&#34;Set CONTACTED property to today&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;c t&#34;</span> <span class="nf">#&#39;</span><span class="nv">org-set-contacted-today</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;c d&#34;</span> <span class="nf">#&#39;</span><span class="nv">org-set-contacted-date</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;c z&#34;</span> <span class="nf">#&#39;</span><span class="nv">my/org-remove-todo</span>
</span></span><span class="line"><span class="cl">                <span class="p">)</span></span></span></code></pre></div>
<p>Those two allow me to set the <code>CONTACTED</code> property either to today&rsquo;s date (<code>spc m c t</code>), or by interactively selecting a date (<code>spc m c d</code>). There&rsquo;s a third mapping that lets me z out the TODO status of a contact (<code>spc m c z</code>), which I will get to.</p>
<h2 id="agenda-customization">Agenda customization</h2>
<p>Next up, I wanted some kind of agenda automation &ndash; custom views that&rsquo;d let me see contacts overdue for some kind of ping. I made a few driven by a combination of tags and age of the <code>CONTACTED</code> field.</p>
<p>Here&rsquo;s one of them, driven by a function that finds aged contacts:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">&#39;org-agenda-custom-commands</span>
</span></span><span class="line"><span class="cl">             <span class="o">&#39;</span><span class="p">(</span><span class="s">&#34;N&#34;</span> <span class="s">&#34;Professional network last contacted &gt; 90 days ago&#34;</span>
</span></span><span class="line"><span class="cl">               <span class="p">((</span><span class="nv">tags</span> <span class="s">&#34;network&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="p">((</span><span class="nv">org-agenda-overriding-header</span> <span class="s">&#34;Network contacts, not contacted in the past 90 days&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                       <span class="p">(</span><span class="nv">org-tags-match-list-sublevels</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                       <span class="p">(</span><span class="nv">org-agenda-skip-function</span>
</span></span><span class="line"><span class="cl">                        <span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">                          <span class="p">(</span><span class="nb">unless</span> <span class="p">(</span><span class="nv">org-contacted-more-than-days-ago</span> <span class="mi">90</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                            <span class="p">(</span><span class="nb">or</span> <span class="p">(</span><span class="nv">outline-next-heading</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                                <span class="p">(</span><span class="nf">goto-char</span> <span class="p">(</span><span class="nf">point-max</span><span class="p">))))))))</span>
</span></span><span class="line"><span class="cl">                <span class="p">)))</span></span></span></code></pre></div>
<p>So in Doom, I can tap <code>spc oAN</code> and get a list of contacts tagged with <code>network</code> whom I haven&rsquo;t had any contact with for more than 90 days.</p>
<h2 id="setting-priority-by-touch-date">Setting priority by touch date</h2>
<p>I wanted a way to see which contacts were aging and decided to use plain old priorities for that, so a function looks at the difference between today and <code>CONTACTED</code> and prioritizes more aged contacts higher:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my/org-update-priorities-based-on-contacted</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">save-excursion</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">goto-char</span> <span class="p">(</span><span class="nf">point-min</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nb">while</span> <span class="p">(</span><span class="nf">re-search-forward</span> <span class="s">&#34;^\\*+ &#34;</span> <span class="no">nil</span> <span class="no">t</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">contacted-date</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="p">(</span><span class="nf">point</span><span class="p">)</span> <span class="s">&#34;CONTACTED&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">today</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y-%m-%d&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">        <span class="p">(</span><span class="nb">when</span> <span class="nv">contacted-date</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">days-ago</span> <span class="p">(</span><span class="nf">-</span> <span class="p">(</span><span class="nv">time-to-days</span> <span class="p">(</span><span class="nf">current-time</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">                             <span class="p">(</span><span class="nv">time-to-days</span> <span class="p">(</span><span class="nv">org-time-string-to-time</span> <span class="nv">contacted-date</span><span class="p">)))))</span> <span class="c1">; calculate days since CONTACTED date</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nv">org-set-property</span> <span class="s">&#34;PRIORITY&#34;</span>
</span></span><span class="line"><span class="cl">                               <span class="p">(</span><span class="nb">cond</span>
</span></span><span class="line"><span class="cl">                                <span class="p">((</span><span class="nf">&lt;</span> <span class="nv">days-ago</span> <span class="mi">45</span><span class="p">)</span> <span class="s">&#34;C&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                                <span class="p">((</span><span class="nf">&lt;</span> <span class="nv">days-ago</span> <span class="mi">90</span><span class="p">)</span> <span class="s">&#34;B&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                                <span class="p">(</span><span class="no">t</span> <span class="s">&#34;A&#34;</span><span class="p">)))))))))</span></span></span></code></pre></div>
<p>It&rsquo;s connected to a save hook, so every contact&rsquo;s priority gets recalculated at save:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">add-hook</span> <span class="ss">&#39;after-save-hook</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="nb">lambda</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">            <span class="p">(</span><span class="nb">when</span> <span class="p">(</span><span class="nf">string-equal</span> <span class="p">(</span><span class="nf">buffer-file-name</span><span class="p">)</span> <span class="s">&#34;~/org/contacts.org&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">              <span class="p">(</span><span class="nv">my/org-update-priorities-based-on-contacted</span> <span class="p">))))</span></span></span></code></pre></div>
<p>That prioritization shows up in the agenda views I set up, with <code>[A]</code> priority contacts getting their own section.</p>
<h2 id="custom-todo-states">Custom TODO states</h2>
<p>Finally, I wanted a way to keep track of where a given contact is, or cue myself on next steps, so I set up custom TODO states just for my <code>contacts.org</code> file:</p>
<p><code>#+TODO: PING(p) PINGED(P!) FOLLOWUP(f) SKED(s) | TIMEOUT(t) OK(o)</code></p>
<p>By putting a <code>!</code> inside the shortcut parens, org-mode will automatically log changes in and out of those states. For now I just have <code>PINGED</code> wired up that way, and <code>TIMEOUT</code> and <code>OK</code>, as <code>DONE</code> equivalents will similarly trigger a log entry.</p>
<p><code>FOLLOWUP</code> and <code>SKED</code> are there as reminders that I need to do something next. <code>TIMEOUT</code> is a way to tell myself I gave it a shot and nothing came of it. <code>OK</code> is just an interim state on the way to no state until the agenda surfaces someone again.</p>
<p>The logging for these state changes looks like this in a given contact entry:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl">\* PINGED Joe Grudd :social:
</span></span><span class="line"><span class="cl"><span class="c">:PROPERTIES:
</span></span></span><span class="line"><span class="cl"><span class="cs">:EMAIL: joe@grudd.com
</span></span></span><span class="line"><span class="cl"><span class="cs">:WEBSITE: http://joe.grudd.com
</span></span></span><span class="line"><span class="cl"><span class="cs">:CONTACTED: 2023-04-12
</span></span></span><span class="line"><span class="cl"><span class="c">:END:</span>
</span></span><span class="line"><span class="cl"><span class="c">:LOGBOOK:
</span></span></span><span class="line"><span class="cl"><span class="cs">- State &#34;PINGED&#34;     from &#34;PING&#34;   [2023-04-11 Tue 20:21]
</span></span></span><span class="line"><span class="cl"><span class="cs">- Note taken on [2023-04-12 Wed 11:16] \\
</span></span></span><span class="line"><span class="cl"><span class="cs">  Caught up over text for the first time in a while. He&#39;s moving to California next month.
</span></span></span><span class="line"><span class="cl"><span class="c">:END:</span></span></span></code></pre></div>
<p>This is also where that last &ldquo;z&rdquo; keybinding comes in:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my/org-remove-todo</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">org-set-property</span> <span class="s">&#34;TODO&#34;</span> <span class="s">&#34;&#34;</span><span class="p">))</span></span></span></code></pre></div>
<p>With <code>spc m c z</code> I can zero out the TODO state of a given contact without triggering a log entry, keeping a little bit of noise down.</p>
<h2 id="what-else">What else?</h2>
<p>That&rsquo;s the system. I guess the summary is:</p>
<p>&ldquo;I&rsquo;ve used org-contacts to keep my contacts in a plaintext file. By using existing data features and agenda customizations, I get prompts that will help me cultivate my <code>Social Maintenance</code> habit when it&rsquo;s due. With a few custom functions and a save hook, I can use light automation to make the text more dynamic without a lot of day-to-day effort.&rdquo;</p>
<p>And I&rsquo;m a little more clear on what &ldquo;social maintenance&rdquo; can mean, now. I think I&rsquo;d created an ill-defined monster the longer I let it sit there with no shape. As I put this together I got to think about what would be meaningful, and I realized it just makes my day when I get a text from someone asking how it&rsquo;s going, so that&rsquo;s a fine standard to apply.</p>
<p>And yes, it was an interesting ChatGPT exercise. It would have taken me days to suss all this out on my own. I just don&rsquo;t have the elisp. It took much less time just dialoging with the bot, and it let me work much more iteratively if an idea didn&rsquo;t test quite right. I wonder how this would have gone if I&rsquo;d thought of trying it when I was using Obsidian a lot, or if I&rsquo;d been in more of a Rails or Sinatra mood.</p>
<p>I think the whole thing will seem like overkill to some, but I am not good at keeping up with people. I am not going to go all autobiographical to explain it, I&rsquo;m just gonna say that there is what I want to do and there is what I do, and they aren&rsquo;t aligned, and I know enough about myself to know that in the absence of a supporting system my good intentions will not mean anything.</p>
<p>And I&rsquo;ve had a few recent interactions with people I haven&rsquo;t spoken to in a long time. It feels really good to reconnect, even if it&rsquo;s just a few lines of &ldquo;what&rsquo;s up with you?&rdquo; So I&rsquo;ve built a system to help me get more of that.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-04-12</title>
      <link>https://mike.puddingtime.org/posts/2023-04-12-daily-notes/</link>
      <pubDate>Wed, 12 Apr 2023 16:01:09 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-12-daily-notes/</guid>
      <description>More ChatGPT and org, using the org agenda, Yellowjackets again, Doom keybindings</description>
      <content:encoded><![CDATA[<h2 id="chatgpt-and-org-configuration">ChatGPT and org configuration</h2>
<p>I tried out <a href="https://github.com/alphapapa/org-super-agenda">org-superagenda</a> a while back. It improves on the vanilla org agenda by creating customizable sections, which help it scan a little better. I bounced off of it because while I wanted the quality of life improvements it offered, I was struggling a little with the syntax, and was caught up in that brainspace you can get into where you just want the thing to work and it&rsquo;s throwing off your sense of time and perception of the required investment to make it work.</p>
<p>This morning I was looking at my agenda and hating it because it was in a &ldquo;mostly correct except where it is glaringly incorrect&rdquo; state, so I figured it&rsquo;d be a good practical task to throw at ChatGPT:</p>
<p><code>Describe an orgmode super agenda configuration that shows habits, important items, overdue items, and items due in the near future</code></p>
<p>I got a copy-pastable example that met the requirements.</p>
<p><code>Could you add items due today to that list</code></p>
<p>Yep. That worked.</p>
<p><code>could you move the today list to second place and add a list at the bottom of unscheduled todo items</code></p>
<p>That response worked well, too. It does a decent job of explaining what each piece of the solution does.</p>
<h2 id="using-the-org-agenda">Using the org agenda</h2>
<p>Figuring out the org agenda has been key to how I use the tool.</p>
<p>With a good agenda setup I can feel pretty on top of things. When it&rsquo;s broken I know there are things out there in my file collection that I&rsquo;m not going to see. As I&rsquo;ve leaned into org capture, that&rsquo;s become even more true, because capture buffers keep you out of the file you&rsquo;re adding something to: You don&rsquo;t see the other things in there because you don&rsquo;t go past them to get to where you&rsquo;re adding new content.</p>
<p>Besides surfacing stuff, the agenda is also the nerve center. You can do basic scheduling and status changes from it, and maybe even more importantly for a sense of organizational calm, you can refile from it. So rather than visiting each file to find stuff and move it around, you can see it all from the agenda overview and refile it from there.</p>
<p>With a restored agenda, I made the connection between my literate Emacs config and all the other stuff flying around in my org mode ecosystem: Links I gathered about configuration tweaks or things I&rsquo;d like to try can more easily go into a literate config file, so I made an &ldquo;Ideas&rdquo; heading at the bottom of the file and started refiling my the Emacs-related things in my agenda&rsquo;s inbox into my <code>config.org</code> file.</p>
<p>People love hooking into org, too, so even things that started life without org mode in mind can pick up org affinities. The pinboard mode I adopted, for instance, doesn&rsquo;t natively use org&rsquo;s link storing function when copying a link, but someone wrote a function to do that.  Now I can retrieve a link and add it to a post without taking my hands off the keyboard or switching contexts.</p>
<h3 id="which-reminds-me-dot-dot-dot">Which reminds  me &hellip;</h3>
<p>I discovered <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Convenience.html">winner-mode</a> today.</p>
<p>It&rsquo;s annoying when an Emacs mode splits the window into frames, then leaves two frames behind when I quit it. <code>winner-mode</code> &ldquo;records the changes in the window configuration (i.e., how the frames are partitioned into windows), so that you can undo them.&rdquo; It&rsquo;s useful to me because I want to use <code>pinboard-mode</code> as a link retrieval tool for blogging. Once I&rsquo;ve grabbed the link, I just want to tap <code>q</code> and get back to my blog buffer, not find myself with a split window. <code>winner-mode</code> closes the pinboard buffer, then removes the frame, and I&rsquo;m back where I left off, able to add my link and keep typing.</p>
<h2 id="custom-doom-keybindings">Custom Doom keybindings</h2>
<p>I&rsquo;ve been digging Doom&rsquo;s modal interface, and waiting around for a reason to extend it. Yesterday&rsquo;s addition of <code>pinboard.el</code> finally gave me an excuse, since Doom was killing its keybindings out of the box.</p>
<p>The <code>p</code> prefix in Doom&rsquo;s menu system is already occupied by <code>projectile</code>, so I used <code>P</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix-map</span> <span class="p">(</span><span class="s">&#34;P&#34;</span> <span class="o">.</span> <span class="s">&#34;Pinboard&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;open Pinboard&#34;</span> <span class="s">&#34;p&#34;</span> <span class="nf">#&#39;</span><span class="nv">pinboard</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;open current link&#34;</span> <span class="s">&#34;o&#34;</span> <span class="nf">#&#39;</span><span class="nv">pinboard-open</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;copy org link&#34;</span> <span class="s">&#34;l&#34;</span> <span class="nf">#&#39;</span><span class="nv">org-store-link</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;edit link&#34;</span> <span class="s">&#34;e&#34;</span> <span class="nf">#&#39;</span><span class="nv">pinboard-edit</span>
</span></span><span class="line"><span class="cl">        <span class="nb">:desc</span> <span class="s">&#34;copy URL&#34;</span> <span class="s">&#34;c&#34;</span> <span class="nf">#&#39;</span><span class="nv">pinboard-kill-url</span>
</span></span><span class="line"><span class="cl">        <span class="p">)))</span></span></span></code></pre></div>
<p>So <code>spc Pp</code> will open the pinboard buffer (or switch to it), <code>spc Po</code> will open a given link, <code>spc Pl</code> will store an org link (for retrieval via <code>spc mll</code>), etc. etc.</p>
<p>One thing I&rsquo;m struggling with here is a vagary of Doom as an environment. The logical place for all of that is in the <code>bindings.el</code> file, but the bindings don&rsquo;t &ldquo;take&rdquo; when I put them there.  They do when I put them in <code>config.el</code>. The docs weren&rsquo;t super helpful in debugging that, and the things that look syntactically intuitive didn&rsquo;t seem to solve the problem.</p>
<p>It&rsquo;s no big deal, and I&rsquo;d rather just have all of that stuff travel together with the mode it addresses, anyhow, but it&rsquo;s a thing I Do Not Understand About the Environment except at a very vague &ldquo;well, there&rsquo;s a lot of lazy loading going on to keep things fast&rdquo; level, and it&rsquo;s going to bother me.</p>
<p>I should just add an <code>INSOMNIA</code> state to my TODO lists and save it for the next &ldquo;welp, it&rsquo;s 3 a.m. and I might as well screw around with this problem&rdquo; session.</p>
<h2 id="yellowjackets-again">Yellowjackets again</h2>
<p>Well, we finished the first season last night.</p>
<ul>
<li><strong>Standalone season</strong> score: 8</li>
<li><strong>Prospects for the future</strong> score: 5</li>
</ul>
<p>Basically, my &ldquo;endless puzzlebox&rdquo; antennae are quivering.</p>
<p>The season all on its own was gripping and kept our interest. I felt invested in the characters and whatever they were dealing with. I love the way it walks right up to the <em><a href="https://www.imdb.com/title/tt6998518/">Mandy</a></em> line a few times. It has a dark sense of humor but it&rsquo;s not mean.</p>
<p>The 2 missing points for the standalone season score are because it had some minor pacing/bog-down stuff in the middle, and because some stuff going on just felt like gratuitous puzzlebox misdirection. It felt at times like it was written too self-consciously aware of recap culture and a certain kind of mock-obsessive over-read/over-think that comes along with that.</p>
<p>The &ldquo;prospects for the future&rdquo; score is a function of how I felt as the credits rolled on the season ender, and it honestly wasn&rsquo;t great. The episode didn&rsquo;t feel energetic, it suggested an appetite for &ldquo;surprise reversal&rdquo; that will exceed my patience over the long haul, and it reminded a bit too much of the first couple of seasons of HBO&rsquo;s <em><a href="https://www.imdb.com/title/tt8068860/">Servant</a></em>, which I abandoned with no remorse at the end of the second season.</p>
<p>I feel a little bad about my reaction, because maybe I&rsquo;m suggesting that television productions should simply abandon the only tools they have to get more seasons. In some ways, they <em>have</em> to pander to recap culture. They <em>have</em> to pander to fannish over-analysis. They <em>have</em> to end each season with a hook and a sense of incompleteness. They <em>have</em> to live within a fickle system run by people addicted to the analytics streaming affords, who will happily kill a property and move on to the next with no sense of investment.</p>
<p>But, you know, don&rsquo;t point out a problem without pointing out a solution:</p>
<p><em>For All Mankind</em> (Al prefers to think of it as <em>Space is Trying to Murder You Again This Week</em>) does a nice job with this conundrum: Each season has an arc and a sense of conclusion. There&rsquo;s payoff. Then it does an end-credits thing where it flash-forwards to the next season&rsquo;s era and offers you a look. It doesn&rsquo;t appeal to your thwarted expectations of closure, it appeals to your curiosity.</p>
<p>And to make note of a counterpoint, <em>Succession</em> isn&rsquo;t above leaving things on a hanging note of tension, but I&rsquo;ve stuck with it. It&rsquo;s not terrible to leave things unresolved, or end a season with a directional cue in the form of an unfinished arc. Maybe the thing I&rsquo;m reacting to with the puzzlebox stuff is the garish palette those shows paint with, swinging for the meme fences.</p>
<p>Anyhow, we have a few episodes of <em>Yellowjackets</em> season 2 cued up. The prospect of watching them, having skimmed a few episode descriptions in Plex, is not sparking a &ldquo;full-body yes.&rdquo; There&rsquo;s just so much other stuff out there that I&rsquo;m okay with the thought of letting it have its run then deciding whether it&rsquo;s worth it to watch through the whole thing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Dungeons and Dragons threads its needle</title>
      <link>https://mike.puddingtime.org/posts/2023-04-10-dungeons-and-dragons-threads-its-needle/</link>
      <pubDate>Mon, 10 Apr 2023 10:58:34 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-10-dungeons-and-dragons-threads-its-needle/</guid>
      <description>I went in unsure how it could work, came out pretty sure it did work, and I think I understand why.</description>
      <content:encoded><![CDATA[<p>Al and I went to see <em>Dungeons and Dragons</em> yesterday.</p>
<p>I warned her, going in, &ldquo;there is going to be some savage nerdery in the audience.&rdquo;</p>
<p>I saw the Ralph Bakshi animated <em>Lord of the Rings</em> feature when it came out in &hellip; 1978? Someone sitting behind me narrated the entire movie (and its assorted successes and failures) for its duration. That was a formative experience for young me. I will talk your face off about a given adaptation once we are clear of the theater, but sit in stony silence during the viewing.</p>
<p>Before pulling further on that thread, just some thoughts about the movie:</p>
<p>I was first exposed to D&amp;D when I was eight or nine. Dad was in seminary and his friends all played, but it was too adult for the kids, and Dad&rsquo;s frenemy &ndash; the local Dungeon Master for Life &ndash; told him it was his observation that I had no imagination and wouldn&rsquo;t take to the game anyhow.</p>
<p>I first played the game in eighth grade. It was an accidental thing. We moved to Indiana in the middle of the school year, and the only tables in the lunch room with space by the time I got there each day were the two &ldquo;D&amp;D tables&rdquo; tucked away to the side. Given the judgment of dad&rsquo;s frenemy I wasn&rsquo;t sure I could hang, but the alternative was trying to find a spot in the mostly pre-sorted tables away from the edges of the cafeteria.</p>
<p>Each table had a distinct character.</p>
<p>The crew I fell in with preferred a play style that was broadly rules-oriented but privileged narrative flow over correctness. We did not calculate the weight of our equipment or encumbrance rules. Phil, the dungeon master, was a stickler on appropriate alignment behavior, though, and had a conception of how a Paladin should behave that I swear to god George Lucas stole for the Jedi in the prequels.</p>
<p>The other table was way more rules-oriented and were considered the more rigorous party. Jack, the dungeon master, didn&rsquo;t ease up on much.</p>
<p>Phil ran a light game. His narration had a broad, slapstick style to it. If you really botched a saving throw or had a catastrophic encounter and somehow managed to get completely mugged by a couple of kobolds, you sort of traded your dignity for your life.</p>
<p>Jack, by contrast, abided by every roll and just straight murdered players.  Your favorite 13th level Paladin got iced? Suck it. You could keep playing, but with a low-level character who acted as a boat anchor and liability for the survivors. Jack was known to play with some high school kids who ran an evil campaign, and his stories were dark.</p>
<p>The two crews stuck to their tables during the week. Every few months we&rsquo;d get together for a sleep-over and a one-night campaign, where it was generally agreed that Phil&rsquo;s &ldquo;narrative first&rdquo; approach worked a little better given the time constraints and general punchiness by the time you got to the end-game around 4 or 5 a.m.</p>
<p>I favored Phil&rsquo;s approach. When I made my own game system it was built around six-sided dice and was pretty heavily influenced by Steve Jackson&rsquo;s <em><a href="https://en.wikipedia.org/wiki/Steve_Jackson%27s_Sorcery!">Sorcery!</a></em>, <s>which was descended from one of his &rsquo;70s-era microgames</s> (wrong Steve Jackson, <a href="https://mas.to/@spacewizard/110176119138928090">thanks, Ed</a> &ndash; mph). It wasn&rsquo;t about wrapping rules around miniature gaming &ndash; Jack had maps, Phil eschewed them &ndash; but instead about adding a little entropy to a shared improvisational story-telling exercise.</p>
<p>Over the course of my gaming career I pretty much sorted everybody into &ldquo;Jack&rdquo; and &ldquo;Phil&rdquo; camps, broadly. After starting with D&amp;D, I moved on to <em>Boot Hill</em>, <em>Traveler</em>, <em>Top Secret</em>, <em>Space Opera</em>, <em>Marvel Superheroes</em>, and a heavily narrative-inflected <em>Car Wars</em>. Some crews were meticulous rules people, others not. Some of them loved their rules but kept the story light, others told pretty dark stories but favored the narrative.  Some were very welcoming of newcomers, able to be patient with the sorts of things new players do before they sort of get into the flow. Some were very &ldquo;only the experienced need apply,&rdquo; and only let you bring high-level characters into their campaigns if you&rsquo;d brought them up from scratch.</p>
<p>I&rsquo;m going into all this diversity, because I went into the movie wondering whether it would make any sense. There are definitely some set dressing things that will be familiar to multiple generations of D&amp;D players, but there&rsquo;s so much variation in how people play that I&rsquo;d be hard pressed to write down the criteria for &ldquo;faithful to the game.&rdquo;</p>
<p>It managed it, though, or at least it recreated a style of play I&rsquo;ve seen a lot among dungeon masters who are good at keeping the party moving, turning the pot up to a poil, and keeping control of the situation as an increasingly frantic party cooks up increasingly implausible solutions to whatever is coming at them.</p>
<p>The characters all sort of map to their &ldquo;classes&rdquo; without &ldquo;Use your barbarian might, Holga!&rdquo; meta-dialogue. There&rsquo;s an NPC. One of the characters pretty much screamed &ldquo;hey, emo neuro-divergent zoomers, look how much fun you could have pretending to be yourself, but with a backstory that isn&rsquo;t contradicted by your Twitter history!&rdquo;</p>
<p>It reminded me of when some new fantasy movie would come out, and we&rsquo;d take a little time out from our lunch time game to sit around dissecting the characters (what level? what class?) and any spells (&ldquo;it was definitely a magic missile, but heavier damage&rdquo;) or weapons (&ldquo;that&rsquo;s an ego sword, for sure &hellip; I&rsquo;d say +1/+3.&rdquo;)  Except it also synthesizes the past couple of decades of fantasy movie stuff (you get the Jacksonesque dungeon interiors and boom-shot landscapes, you get the MCU wise-cracking and one late scene that could have just been different CG models wrapped around Loki and the Hulk) and maps them back into D&amp;D.</p>
<p>So &hellip; savage nerdery.</p>
<p>Decades of <em>Star Wars</em>, <em>Star Trek</em>, <em>Harry Potter</em>, <em>Lord of the Rings</em>, Marvel, DC, etc. adaptations have conditioned into me a certain cringing wariness. Not about the properties so much as the fans. Or maybe what the fans will do to the properties. I found the <em>Harry Potter</em> movies incredibly tedious, and fans of the franchise suggested to me that it was because they were simply too faithful. I didn&rsquo;t get too worked up about <em>Lord of the Rings</em> and the way it inflected from a fairly faithful <em>Fellowship</em> to <em>oliphant-trunk-surfing Legolas</em> because the fans were out for blood the second Peter Jackson was announced as the director and he knew it: He had to keep them from denouncing the first one so he could capture the normies and get on with making an LotR that worked more as action-adventure in the later installments.</p>
<p>But I&rsquo;ve sat in theaters where you can hear and feel people seething. And I have an internet connection. Even if you don&rsquo;t care that the gatekeepers and pedants are upset, you can&rsquo;t help but know they are.</p>
<p>In yesterday&rsquo;s matinee, though, the crowd ate it up. I could hear people comparing notes whenever a new creature appeared or some particular location was mentioned from the established lore. People name-checked spells and relics. Al sat next to two people who were engaged in running commentary the entire time. I couldn&rsquo;t quite hear them except when something <em>really</em> delighted them and they started cackling and bouncing up and down.</p>
<p>I don&rsquo;t judge. It was fun. It leveraged the strengths of being <em>of a property</em> &ndash; some aesthetic stuff, creatures from <em>Monster Manual</em>, locations, classes, spells &ndash; but preserved the strength of D&amp;D (and RPGs generally), which I would argue is its capacity to accommodate all those diverse playing and narrative styles. Where comic book movie properties have harnessed the multiverse hack that comic publishers were forced into, both to permit constant re-creation and renewal of their IP, and to slip out of the unforgiving canon pedantry that makes <em>Star Wars</em> and <em>Star Trek</em> difficult, D&amp;D simply is a bunch of different things to a bunch of different people. It is not hard to imagine an MCU-like multi-format franchise wrapped around D&amp;D.</p>
<p>When we walked out &ndash; me as someone who&rsquo;s been around D&amp;D and RPGs for 42 years, Al as someone who has never played a minute of anything &ndash; I was saying &ldquo;that seemed to capture the spirit and it was a fine light fantasy movie,&rdquo; and Al was saying &ldquo;that was fine. I expected some sort of comedy/adventure thing and that&rsquo;s what it was. Was it like the game, then?&rdquo;</p>
<p>Sure. Somehow, it was like the game.</p>
<p>Seems like &ldquo;mission accomplished.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Writing elisp, Puppet code, and Ruby with ChatGPT.</title>
      <link>https://mike.puddingtime.org/posts/2023-04-10-elisp-puppet-ruby-chatgpt/</link>
      <pubDate>Mon, 10 Apr 2023 09:36:26 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-10-elisp-puppet-ruby-chatgpt/</guid>
      <description>I finally took the time to play with ChatGPT to configure Emacs and write some Ruby.</description>
      <content:encoded><![CDATA[<p>I finally got curious enough, and had rendered a particular Google account unimportant enough, to give ChatGPT a try. I&rsquo;ll leave out the obvious goofs &ndash; asking it to deliver the Gettysburg Address in the style of Jeff Lebowski &ndash; and write up a few slightly more complex requests. Trying to get Eliza to say swears in eighth grade got boring fast, so nothing I asked it to do was borne out of a spirit of malice toward it. Just curiosity.</p>
<p>Overall, it was a land of contrasts. It did some things really well, or got to &ldquo;really well&rdquo; with a few followup requests. But on the other end of the spectrum it simply invented non-existent functionality then documented how to configure it.</p>
<p>I don&rsquo;t have any particularly original takeaways. Put me in the broad camp of &ldquo;human venality is going to be the real problem here,&rdquo; in ways it already is where other kinds of automation are concerned. We live in a society where people not only, like, read a newspaper in their Tesla, but literally crawl into the back seat and take naps.</p>
<p>The trivial tasks I fed it were limited, so the errors it made were obvious.  I wasn&rsquo;t trying to prove or disprove its &hellip; quality?  If you&rsquo;ve ever gotten into an argument with a word processor&rsquo;s grammar checker you&rsquo;ll sort of understand what you&rsquo;re up against in this case, too, with the improvement over that scenario being that instead of staring at the alleged bad grammar and ultimately learning you&rsquo;re either a &ldquo;leave the blue squiggles&rdquo; person or a &ldquo;can&rsquo;t tolerate any blue squiggles&rdquo; person, you can tell it you didn&rsquo;t care for the answer and it often takes the hint and fixes the problem.</p>
<p>But you have to know that you don&rsquo;t like the answer. So when it wrote a Puppet module for me and did so with insecure code, I noticed that and told it to do better and it did. Nothing got into production. When it gave me unreadable output for a train schedule, its first correction was at least obviously and intuitively wrong. Nothing got into production.</p>
<p>When I think about more complex code I&rsquo;ve written the human dimension of the problem stands out more. I once modeled website revenue for a Rails app, which involved a lot of sorting out when data was sampled vs. when it wasn&rsquo;t, recursive reasoning around costs, etc. and remember the many ways I could lose my train of thought and introduce stuff that looked right even to my experienced eye as a domain expert who knew the problem space as a practitioner <em>and</em> who was describing that expertise in code. No misunderstood requirements, no senior dev fighting with the product owner because reality is stupid, no UX designer arguing that beauty is truth. Just me, passionately invested in the problem, and still introducing errors I couldn&rsquo;t spot on review &hellip; that I could only spot with tedious testing.</p>
<p>Anyhow. Nothing new.</p>
<p>Some of the things I tried:</p>
<h3 id="create-an-org-capture-template-for-daily-health-logging">Create an org capture template for daily health logging</h3>
<p>It did the request perfectly, but slightly idiosyncratically for a log format (it stuck the date in the :DRAWER: instead of as an inactive date label in the head). Subsequent conversational-style prompts (&ldquo;okay, but could you include weight and hours slept?&rdquo;) caused it to add prompts for those to the template, then &ldquo;could you make that information that appends to an org table instead&rdquo; generated a capture template appropriate to appending to a table.</p>
<p>A similar request to create an org-capture template for Hugo blogging was mostly correct, but had a few glitches and the verbose instructions left out a key variable. It was debuggable in a few minutes.</p>
<p>I&rsquo;d score it pretty highly, and using it for that task is just straightforward &ldquo;get to the point of the tool, not the labor involved in the tool&rdquo; utility. Mostly I appreciated that it matched all the parens correctly.</p>
<h3 id="tell-me-how-to-configure-offlineimap-for-use-with-mutt-on-a-mac">Tell me how to configure OfflineIMAP for use with mutt on a Mac</h3>
<p>Did I say yesterday I don&rsquo;t believe in that? I did. But it was on my mind.</p>
<p>It did this pretty well, delivering instructions tailored to the specific &ldquo;mutt + offlineimap&rdquo; use case that were as good as any tutorial, missing only the things that are idiosyncratic to Fastmail, which I forgot to mention to it. I should have thought to tell it I was getting the errors I got to see how it handled that. Instead I just searched for them on DuckDuckGo and got unstuck.</p>
<p>Interestingly, and this happened one other time, I lost the original request to a glitch in the web app. When I restated it only slightly differently &hellip; not in a way that you&rsquo;d think would materially affect the output &hellip; it came up with something slightly different that didn&rsquo;t leave out a key detail the original output did.</p>
<p>I&rsquo;d score it highly again, minus maybe its willingness to make message deletion live by default without warning. Other examples and tutorials I found mention that.</p>
<p>I followed up by asking it to show me how to capture that configuration with Puppet and hiera, and it produced a serviceable OfflineIMAP module. It would have had me storing my credentials in the plain in the Hiera YAML. I responded that I preferred not to do that so it provided me with an example that used eyaml.</p>
<h3 id="tell-me-how-to-use-mutt-with-a-bayesian-filter">Tell me how to use mutt with a Bayesian filter</h3>
<p>It went completely off the rails, inventing filtering functionality for mutt and offering configuration examples that looked &ndash; mutt-like? &ndash; but inventing a configuration variable that doesn&rsquo;t exist, near as I can tell, to invoke a configuration file mutt wouldn&rsquo;t look for to support the non-existent functionality.</p>
<p>Maybe the interesting thing that came out of the interaction was the way it cooked up a mutt-like filtering setup could work in a way that seemed idiomatically correct for mutt. It just did the technical equivalent of adding a sixth finger to the left hand by assuming a generic bayesian filter of <em>some kind</em> and taking the plumbing to connect it for granted.</p>
<h3 id="how-would-i-go-about-adding-a-second-rss-feed-with-a-different-template-for-a-hugo-site">How would I go about adding a second RSS feed with a different template for a hugo site?</h3>
<p>Another miss, with very reasonable-looking instructions that simply didn&rsquo;t work as proposed. I am not sure how close it actually got. That&rsquo;s a problem I spent some time trying to solve yesterday and it seemed close but missed some connections between content and template.</p>
<p>It gave its configuration examples in TOML, and responded correctly to a conversational &ldquo;could I have those examples in YAML&rdquo; prompt.</p>
<h3 id="tell-me-how-to-write-a-sinatra-app-to-download-an-rss-feed-filter-it-for-keywords-and-save-another-version-of-the-feed">Tell me how to write a Sinatra app to download an rss feed, filter it for keywords and save another version of the feed</h3>
<p>Prompted by a Mastodon conversation yesterday about RSS readers that could be used to filter sponsored content posts.</p>
<p>Up front, it&rsquo;s sort of a weird request on my part: I was just lazily typing in part of an idea, including Sinatra as a dependency but not explaining why (my idea would involve creating a sort of RSS proxy with dynamic filtering during each client request). I just wanted to see what it would do without putting a lot of thought into it, or sticking around to narrow things down. So I got a ruby script wrapped in a Sinatra route, honoring the request whether it made a ton of sense or not.</p>
<p>I&rsquo;ve had it do a couple of Ruby scripts, and it remembered to include `require` lines for gems. It didn&rsquo;t do that in this case. I added them and it ran. I had to tweak a few things to get it to run without error, and the filtering didn&rsquo;t work.</p>
<p>I might goof around with this one a bit more to see where it&rsquo;s going wrong.</p>
<p>This lined up with things I&rsquo;ve read from others over the past few months: It produced a scaffold of mostly working code. If I decide to mess around with it more, I&rsquo;ll have been saved digging around for examples of the basic syntax for the assorted parts of the workflow that I know from experience are correct.</p>
<h3 id="what-s-a-good-strategy-for-switching-between-regular-and-ortholinear-keyboards">&ldquo;What&rsquo;s a good strategy for switching between regular and ortholinear keyboards?&rdquo;</h3>
<p>Useless. It provided very reasonable instructions for how to learn how to use an ortholinear keyboard, but didn&rsquo;t address the actual request.</p>
<h3 id="tell-me-how-to-write-a-ruby-script-to-download-train-times-for-a-given-stop-in-portland-oregon">&ldquo;Tell me how to write a ruby script to download train times for a given stop in Portland oregon&rdquo;</h3>
<p>It produced working code that showed me the next arrival times for the next train at my neighborhood stop. It provided the correct link to sign up with TriMet to get an API key.</p>
<p>&ldquo;A-&rdquo; because it didn&rsquo;t translate epoch time to human time in the output. When I asked it to do that, it tried to comply and used the obvious syntax to convert the integer it got back from the API, but got confused by the millisecond format.</p>
<p>I tried the code and replied with:</p>
<p>&ldquo;That time format is still incorrect. I think the timestamps include miliseconds.&rdquo;</p>
<p>It replied with:</p>
<p>&ldquo;You&rsquo;re correct, I apologize for the oversight. It appears that the TriMet API returns timestamps with milliseconds.&rdquo;</p>
<p>Then it produced working code that did a simple operation on the timestamp and passed it along to <code>Time</code> and <code>strftime</code> with correctly formatted output.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Macros to score mail in mutt</title>
      <link>https://mike.puddingtime.org/posts/2023-04-09-macros-to-score-mail-in-mutt/</link>
      <pubDate>Sun, 09 Apr 2023 10:11:27 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-09-macros-to-score-mail-in-mutt/</guid>
      <description>Some ruby wired up to mutt macros allows for on-the-fly sender scoring and a color-coded message index.</description>
      <content:encoded><![CDATA[<p>In my early mutt days I used procmail and SpamAssassin on my desktop machines. I had a bunch of mutt macros set up to help score email and mark things as spam or not-spam. Once I started using IMAP on someone else&rsquo;s server that all fell by the wayside, but I really missed being able to score mail while I was processing it. I use Fastmail these days, and they support Sieve scripts, but haven&rsquo;t chosen to expose the API for that. That&rsquo;s too bad.</p>
<p>Mutt does, however, have pretty good facilities for scoring individual properties of a message, then do different color treatments for a given message&rsquo;s score in the index. Scoring and coloring can be driven by mutt&rsquo;s <a href="https://www.sendmail.org/~ca/email/mutt/manual-4.html#ss4.1">extensive list of search patterns.</a>.</p>
<p>This is a lightly annotated selection from the top of my mutt scores file, which I source in <code>~/.mutt/muttrc</code> at startup:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># -*- mode: conf-unix -*-
</span></span><span class="line"><span class="cl"># Mutt scoring file
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">unscore * # start fresh
</span></span><span class="line"><span class="cl">score ~p +5 # Mail addressed to me or one of my alternates gets 5 points
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># Date-based scoring penalties -- older things fall down
</span></span><span class="line"><span class="cl">score ~d&gt;3d -1
</span></span><span class="line"><span class="cl">score ~d&gt;7d -3
</span></span><span class="line"><span class="cl">score ~d&gt;14d -10
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">score &#34;~O&#34; +10 # &#34;Old&#34; in mutt is &#34;seen but unread&#34;. +10 so I don&#39;t miss it
</span></span><span class="line"><span class="cl">score &#34;~F&#34; +20 # flagged = +20 so it stays in the interesting view for a while, even if older
</span></span><span class="line"><span class="cl">score &#34;!~p ~d&gt;7d&#34; -10 # not for me directly, getting old, let it fade away
</span></span><span class="line"><span class="cl">score &#34;!~l&#34; +2 # to a known list, give it a bump</span></span></code></pre></div>
<p>Given some scores, you can add color treatments:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">color index white default &#34;~n 6-9&#34;
</span></span><span class="line"><span class="cl">color index white red &#34;~f trimet ~s Service\\ Alert&#34;
</span></span><span class="line"><span class="cl">color index brightblack default &#34;~f trimet ~s Service\\ Alert ~d&gt;1d&#34;
</span></span><span class="line"><span class="cl">color index magenta default &#34;~n &lt;5&#34;
</span></span><span class="line"><span class="cl">color index brightyellow default &#34;~n &gt;10&#34;
</span></span><span class="line"><span class="cl">color index brightred default &#34;~n &gt;19&#34;</span></span></code></pre></div>
<p>Adding a score to the scores file manually is no big deal. Mine tends to include specific people, work email lists, things I definitely don&rsquo;t want to miss (e.g. service alerts from TriMet), and things that I should keep seeing but want to deemphasize (like business messages from hosting providers). But it&rsquo;d also be nice to do some scoring as I&rsquo;m reviewing mail to deal with new important senders, necessary nuisances, etc.</p>
<p>So I wrote some ruby and mutt macros that let me pipe a given message into a script that extracts the sender and writes a +/- modifier to their score in a <code>scored</code> file I source alongside my <code>scores</code> file.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;mail&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;tempfile&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Wants a +/- integer, e.g. +20</span>
</span></span><span class="line"><span class="cl"><span class="n">score</span> <span class="o">=</span> <span class="no">ARGV</span><span class="o">.</span><span class="n">first</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">score_file</span> <span class="o">=</span> <span class="s2">&#34;/Users/mph/.mutt/scored&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span> <span class="o">=</span> <span class="no">Tempfile</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;msg&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="vg">$stdin</span><span class="o">.</span><span class="n">read</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">mail</span> <span class="o">=</span> <span class="no">Mail</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">from</span> <span class="o">=</span> <span class="n">mail</span><span class="o">.</span><span class="n">from</span><span class="o">.</span><span class="n">first</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">score_file</span><span class="p">,</span> <span class="s2">&#34;a&#34;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span> <span class="s2">&#34;score ~f</span><span class="si">#{</span><span class="n">from</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">score</span><span class="si">}</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">close</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">unlink</span></span></span></code></pre></div>
<p>Pretty much just &ldquo;parse the mail for the first <code>from</code> address, wrap it in a mutt <code>score</code> stanza, tack that on to the end of <code>scored</code>.&rdquo;</p>
<p>Then I added some macros:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># Score messages
</span></span><span class="line"><span class="cl">macro index,browser .sp &#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb +5\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34; # score sender +5
</span></span><span class="line"><span class="cl">macro index,browser .sP &#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb +20\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34; # score sender +20
</span></span><span class="line"><span class="cl">macro index,browser .sm &#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb -5\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34; # score sender -5
</span></span><span class="line"><span class="cl">macro index,browser .sM &#34;&lt;pipe-entry&gt;~/.mutt/mailscore.rb -20\n&lt;enter-command&gt;source ~/.mutt/scored&lt;enter&gt;&#34; # score sender -20</span></span></code></pre></div>
<p>They just pipe the message into the Ruby script with a scoring argument, the script modifies <code>scored</code>, then the macro re-sources <code>scored</code> so the index reflects the new scoring.</p>
<p>Tapping <code>.sp</code> (score plus) in the index scores a sender up, <code>.sm</code> (score minus) scores them down. <code>.sP</code> and <code>.sM</code> are embiggened scores.</p>
<p>The way mutt works, it doesn&rsquo;t accumulate these pluses and minuses, so when it parses the <code>scored</code> file it&rsquo;s just going to use the last modifier I added. That seems fine, since they&rsquo;re broad and there are other scoring factors at work. Over time the file will get long. Maybe the right thing to do is read the file in, try to match on a sender, and overwrite their entry, just to cut down on duplication.</p>
<p>The net effect of the current system is that the index is color-coded into four broad tiers: The super important, the pretty important, kinda average and should be read, and not particularly interesting and maybe worth an unsubscribe.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-04-08</title>
      <link>https://mike.puddingtime.org/posts/2023-04-08-daily-notes-for-2023-04-08/</link>
      <pubDate>Sat, 08 Apr 2023 10:26:49 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-08-daily-notes-for-2023-04-08/</guid>
      <description>As always, a plaintext revival means a mutt revival.</description>
      <content:encoded><![CDATA[<h3 id="these-things-come-in-waves">These things come in waves</h3>
<p>In the past, when I&rsquo;ve gone through a plaintext or Emacs kick of some kind, I&rsquo;ve blown past what I&rsquo;ve come to think of as a common sense limit: Eventually I&rsquo;m looking at Wanderlust, GNUS, or mu4e and thinking about the whole email in Emacs thing. Inevitably, then, you&rsquo;re looking at some sort of way to sync your IMAP account down to your local machine, and a whole layer goes in to make that work.</p>
<p>I walked up to the line this time around, asked myself what problem I&rsquo;m trying to solve, and remembered that part of what is making Doom Emacs work for me right now is how much I&rsquo;ve been keeping things limited to stuff that has to do with writing and stuff that has to do with personal organization. Those are things that don&rsquo;t stress Emacs&rsquo; single-threaded nature the way I do them, and that don&rsquo;t take me into the murky space between Emacs and the OS.</p>
<p>The problem I am trying to solve whenever I go on these kicks, is the pain of getting parts of the macOS experience into a more keyboard-centric place. Mail always sticks out because I don&rsquo;t like doing Mac Mail from the keyboard. There&rsquo;s <a href="https://smallcubed.com/">Mail Act-On</a>, but at $45 a renewal it&rsquo;s just more than I can see paying, and it doesn&rsquo;t really do much for visualization &ndash; it just makes it easy to move things into folders.</p>
<p>So my mind always goes to <a href="http://www.mutt.org">mutt</a>. It&rsquo;s not perfect &ndash; search is a challenge without something external augmenting it &ndash; but I&rsquo;m not sure it matters in the end: I use Fastmail for IMAP, and I don&rsquo;t mind punting to its web interface if I need to go dig for something.</p>
<p>I thought about mutt this time because my long-standing config has always sort of <em>felt</em> similar to the way Spacemacs and Doom put a modal UI over Emacs.  My mutt macros &ndash; here&rsquo;s a sample &ndash; use <code>.</code> as a leader and are written mnemonically:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">macro index .sn &#34;l ^a^k~N\n&#34; # Show unread/new only
</span></span><span class="line"><span class="cl">macro index .sa &#34;l ^a^kall\n&#34; # show all
</span></span><span class="line"><span class="cl">macro index .C &#34;&lt;esc&gt;V&#34; # toggle threads
</span></span><span class="line"><span class="cl">macro index .si &#34;l (~n5-100|~N)\n&#34; # show interesting 
</span></span><span class="line"><span class="cl">macro index .rs &#34;&lt;enter-command&gt;source ~/.mutt/scores&lt;enter&gt;&#34; # reprocess scores
</span></span><span class="line"><span class="cl">macro index .sf &#34;l ~F\n&#34; # show flagged
</span></span><span class="line"><span class="cl">macro index .hl &#34;l ^a^k!~l\n&#34; # hide lists
</span></span><span class="line"><span class="cl">macro index .to &#34;T ~d&gt;7d\n&#34; # &#34;tag old&#34; -- messages older than 7 days
</span></span><span class="line"><span class="cl">macro index .ab    &#34;&lt;pipe-entry&gt;/opt/homebrew/bin/lbdb-fetchaddr\n&#34;                # Store address details in lbdb.</span></span></code></pre></div>
<p>The value of mutt is less as my everything email client &ndash; I still keep up with mail from my phone or tablet &ndash; and more because over the years I&rsquo;ve tuned it to visualize and process mail from the keyboard. I still read mail with my phone or tablet every day, but don&rsquo;t like to do anything more than flag messages when I&rsquo;m out.</p>
<h3 id="html-mail-and-mutt">HTML mail and mutt</h3>
<p>mutt is sometimes hard to stick with because we lost the plaintext email battle. I know one designer who formats his email with monotype faces in what I&rsquo;d describe as a sort of problematic aesthetic revolt, but otherwise &hellip; we lost and we&rsquo;ll never be able to unsee Calibri.</p>
<p>Sticking <code>elinks</code>, <code>lynx</code> or <code>w3m</code> in your <code>~/.mailcap</code> to show HTML was best practice for a long while, provided you didn&rsquo;t mind also using <code>urlview</code> to display the links in a message once you&rsquo;d read it. I was involved in email marketing during the era when that approach worked, partially because to do HTML mail &ldquo;right&rdquo; back then meant you had someone doing it painstakingly by hand, then reviewing across a multitude of clients and platforms &ndash; you were heavily incentivized to keep it simple.  I bear the scars from a spat with a division of Siemens that was still using an old Lotus Notes and Win2000 in its marketing department. They were the customer, and the mail didn&rsquo;t look good to them, so it didn&rsquo;t look good. That was all, and we were forced to buy the next tier of service from our mail provider so we could add Lotus Notes on Win 2000 to our testing.</p>
<p>Anyhow, &ldquo;<code>elinks</code> in your mailcap and call it a day&rdquo; doesn&rsquo;t work anymore: image text, dozens of links, complex positional markup, etc. etc. etc. and it makes a lot of HTML mail a hash in a plaintext browser. There are a few ways to solve this on a Mac: One is punting to an actual browser, and the other is using the Mac Quicklook service:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">text/html;  open -a firefox %s; nametemplate=%s.html text/html; open -a firefox %s; nametemplate=%s.html; copiousoutput
</span></span><span class="line"><span class="cl">text/html; qlmanage -p %s; nametemplate=%s.html</span></span></code></pre></div>
<p>The former does about what you&rsquo;d expect from looking at it: It uses Firefox (or whatever browser you&rsquo;d care to invoke) to open the HTML part of the message, at which point you can click links, etc.</p>
<p>The latter is a little more obscure, but basically recreates what happens when you select a file and tap the spacebar to preview it on a Mac, popping up a modal window with the contents. This often works well for other kinds of attachments. With HTML mail it is enough to let you read the mail but not really interact with it (e.g. follow a link). The <code>[DEBUG]</code> label at the front of the modal&rsquo;s title suggests that nobody at Apple really took the &ldquo;plain text zealots using this to browse HTML email&rdquo; use case into account when they wrote <code>qlmanage</code>, and the man page makes clear it&rsquo;s just a debugging tool. It&rsquo;ll do if you never intend to interact with a mail.</p>
<p>I&rsquo;m sticking to the Firefox approach. It&rsquo;s super fast if Firefox is already running (it always is), and you can follow links.</p>
<h3 id="these-things-leave-in-waves-too">These things leave in waves, too</h3>
<p>At some point mutt is going to do something to annoy me. I don&rsquo;t know what it&rsquo;s going to be this time. For now, I&rsquo;m just enjoying the periodic dustoff of my config and pleasures of zipping through my inbox. If I had to guess, it&rsquo;ll have something to do with getting email messages into org-mode or calendaring, somehow. There are a few shell-based CalDav clients out there, but they&rsquo;re very sync-and-cache oriented and I just don&rsquo;t like adding services. Had mutt never added IMAP caching and built-in SMTP support, I would have a harder time justifying it.</p>
<p>But I feel more protective of my Emacs and org-mode experience than anything. This run with Doom has yielded the most stable Emacs experience I&rsquo;ve had since switching to Macs mooostly full-time ca. 2004. No mystery segfaults. No hard-locking the UI because I have IMAP, RSS, IRC, and Twitter clients running in my text editor.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Considering Twitter</title>
      <link>https://mike.puddingtime.org/posts/2023-04-07-considering-twitter/</link>
      <pubDate>Fri, 07 Apr 2023 15:54:47 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-07-considering-twitter/</guid>
      <description>Cross-posting is failing and I&amp;rsquo;m not sure why I am keeping a Twitter account.</description>
      <content:encoded><![CDATA[<p>Cross-posting to Twitter started failing in a few places, and I&rsquo;m reading announcements from assorted apps and services saying they&rsquo;re having problems. A few days ago I decided to just take the Twitter piece out of my cross-posting recipes.  It&rsquo;s not worth troubleshooting or working around. Like, literally. I have no idea what it means that most of my posts have about 10% of the views of my follower count, but that&rsquo;s where it&rsquo;s at.</p>
<p>So now I&rsquo;m just thinking about why I&rsquo;m not deleting an account I don&rsquo;t ever use.</p>
<p>I see people mentioning it as a personal identity concern, wanting to make sure their handle isn&rsquo;t taken over. It&rsquo;s true that I have used <code>pdxmph</code> a lot of places, but it&rsquo;s not, like <em>core to my brand</em> or whatever.</p>
<p>I see some &ldquo;I know some people only there&rdquo; concerns, but I don&rsquo;t think that&rsquo;s me, and I&rsquo;m pretty easily found elsewhere (e.g. LinkedIn if push comes to shove.)</p>
<p>I know some people who still post there, but I don&rsquo;t read Twitter much and nobody I know is posting anything you&rsquo;d call <em>vital.</em> Fun, amusing, etc. but not vital.</p>
<p>Sometimes I wonder if not being on Twitter at all would read as weird, somehow?</p>
<p>But I also feel indifferent to Twitter generally.  Meaning, when I wrote about why I have an account last year, the writing went through two stages. One involved a sentimental line of reasoning, then I put the writing down for a day and re-read with fresh eyes and deleted much of that and listed the several ruthlessly transactional reasons I <em>really</em> felt were keeping me on the platform. Well, the circumstances I anticipated would drive those transactional reasons came true, and when I look at all my personal channels I don&rsquo;t see Twitter doing anything for me LinkedIn hasn&rsquo;t done 50x.</p>
<p>So I can&rsquo;t really think of any reasons to keep an account there, and I remember what happened when I got rid of my old account: Nothing. When I decided to be back on Twitter with a new account a few years later, I started typing in names and following people and my follower count was back up to where it had been soon enough and my &ldquo;presence&rdquo; was effectively &ldquo;reestablished&rdquo; at the level it had been. So the &ldquo;what if Twitter comes roaring back in relevance and I can&rsquo;t believe what a fool I was to lose faith that, like, Bernie Sanders and AOC might team up and buy it off of Elon and make it rule&rdquo; scenario is covered.</p>
<p>Yeah. This is dumb. I&rsquo;m gonna leave this sit for a day or two in case there is something about keeping an account that someone can point out to me super matters, then I&rsquo;m gonna kill the thing. In some ways, a live account I never visit but assert that I own elsewhere seems like more of a reputational risk than some theoretical Nazi <code>pdxmph</code> stumbling across the open handle after I&rsquo;ve disavowed it everywhere.</p>
]]></content:encoded>
    </item>
    <item>
      <title>First stab at literate config with Doom Emacs</title>
      <link>https://mike.puddingtime.org/posts/2023-04-05-first-stab-at-literate-config/</link>
      <pubDate>Wed, 05 Apr 2023 08:53:21 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-05-first-stab-at-literate-config/</guid>
      <description>&lt;p&gt;My historic pattern for descending into Emacs hell has always started with the kitchen-sink init, and the path to recovery has always involved a patient refactoring into multiple files: Some kind of &amp;ldquo;the basics,&amp;rdquo; something just for org, something for odd little quality of life things, and a quarantine file where new stuff can enjoy a probation period where I can bisect it first when something goes wrong. If I add a big chunk of functionality from a new mode, that might get its own file, too.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>My historic pattern for descending into Emacs hell has always started with the kitchen-sink init, and the path to recovery has always involved a patient refactoring into multiple files: Some kind of &ldquo;the basics,&rdquo; something just for org, something for odd little quality of life things, and a quarantine file where new stuff can enjoy a probation period where I can bisect it first when something goes wrong. If I add a big chunk of functionality from a new mode, that might get its own file, too.</p>
<p>That has always helped me feel a little in control, at least.</p>
<p>I noticed Doom Emacs has a <code>literate</code> module in its <code>init.el</code>, so I did some reading. The very high level summary is that Doom lets you use <a href="https://en.wikipedia.org/wiki/Literate_programming">literate programming</a> principles via org-mode to build your <code>config.el</code> file from an org file:</p>
<ul>
<li>You enclose your actual configuration code in src blocks:</li>
</ul>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="c1">#+begin_src emacs-lisp</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="n">setq</span> <span class="n">doom</span><span class="o">-</span><span class="n">font</span> <span class="p">(</span><span class="n">font</span><span class="o">-</span><span class="n">spec</span> <span class="p">:</span><span class="n">family</span> <span class="s2">&#34;Fira Code Retina&#34;</span> <span class="p">:</span><span class="n">size</span> <span class="mi">14</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="n">doom</span><span class="o">-</span><span class="n">variable</span><span class="o">-</span><span class="n">pitch</span><span class="o">-</span><span class="n">font</span> <span class="p">(</span><span class="n">font</span><span class="o">-</span><span class="n">spec</span> <span class="p">:</span><span class="n">family</span> <span class="s2">&#34;Fira Sans&#34;</span> <span class="p">:</span><span class="n">size</span> <span class="mi">13</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="c1">#+end_src</span></span></span></code></pre></div>
<p>&hellip; and those blocks are &ldquo;tangled&rdquo; into a <code>config.el</code> file.</p>
<p>You get to use all of org-mode&rsquo;s affordances for document structure, so you can add headings, and your comments can just be prose:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="o">**</span> <span class="n">Base</span> <span class="n">Appearance</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">***</span> <span class="n">Line</span> <span class="n">spacing</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#+begin_src emacs-lisp</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="n">setq</span><span class="o">-</span><span class="n">default</span> <span class="n">line</span><span class="o">-</span><span class="n">spacing</span> <span class="mf">0.5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1">#+end_src</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">***</span> <span class="ne">Font</span> <span class="n">Settings</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#+begin_src emacs-lisp</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="n">setq</span> <span class="n">doom</span><span class="o">-</span><span class="n">font</span> <span class="p">(</span><span class="n">font</span><span class="o">-</span><span class="n">spec</span> <span class="p">:</span><span class="n">family</span> <span class="s2">&#34;Fira Code Retina&#34;</span> <span class="p">:</span><span class="n">size</span> <span class="mi">14</span> <span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="n">doom</span><span class="o">-</span><span class="n">variable</span><span class="o">-</span><span class="n">pitch</span><span class="o">-</span><span class="n">font</span> <span class="p">(</span><span class="n">font</span><span class="o">-</span><span class="n">spec</span> <span class="p">:</span><span class="n">family</span> <span class="s2">&#34;Fira Sans&#34;</span> <span class="p">:</span><span class="n">size</span> <span class="mi">13</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="c1">#+end_src</span></span></span></code></pre></div>
<p>So this morning I moved my still-pretty-simple <code>config.el</code> into <code>config.org</code> to see what I thought.</p>
<p>It&rsquo;s pretty cool!</p>
<p>The traditional ugliness of Emacs configs, for me, has always been the slow drift out of organization. Maybe for a while all the UI stuff, personalization stuff, appearance stuff is traveling together, but something makes its way in at the bottom of the file, then something else, and you&rsquo;re left with a bunch of things that aren&rsquo;t near their logical neighbors. There are the things you comment out that just become a big chunk of &hellip; something &hellip; it&rsquo;s hard to read because they aren&rsquo;t syntax highlighted anymore. There&rsquo;s verbose documentation that makes it hard to scan. etc.</p>
<p>Literate config in Emacs allows you to bring semantically meaningful structure to the configuration file: Broad categories of options can go under headings, commentary is written as prose, and you can use all of org mode&rsquo;s structure editing tools to quickly move chunks of configuration around into a more readable, logical order.</p>
<p>Doom&rsquo;s default <code>config.el</code> comes with a ton of comments. I&rsquo;m glad they&rsquo;re there when I need them, I hate having to scroll through and past them. Moving everything into <code>config.org</code> let me just move the comments into a <code>Docs</code> heading for each section, so they stay folded away unless I need them.</p>
<p>I&rsquo;ve got a few chunks of config that need some work. I can research how to use a given module, toss in reference links and sample snippets, and only allow certain code blocks to be compiled into my final <code>config.el</code>.</p>
<p>And I can also evaluate a src block by hitting <code>enter</code> on the last line of the block, so if you&rsquo;re in an iterative mode, trying things out and testing them, it&rsquo;s a few keystrokes less to make sure something evaluates cleanly, returns the value I was hoping for, etc.</p>
<p>I&rsquo;ve known about literate programming in the context of org for a while. A very long while ago, when I was first playing around with web analytics reporting, I had some simple code blocks embedded in an org file that allowed me to pull basic website numbers into my org file by getting the output of a script. That could all then be exported into a status report.  It was cool but also trivial. It didn&rsquo;t feel like a huge quality of life improvement. This feels like something that, with very little time spent getting it into basic shape, will be more maintainable over time. It&rsquo;s easy to see where to insert something in the document, so things are more likely to stay organized,  and it&rsquo;s easy to test.</p>
<p>It was very little work to set up in the Doom Emacs context:</p>
<ol>
<li>I enabled the functionality in <code>init.el</code> by uncommenting <code>literate</code></li>
<li>I copied my <code>config.el</code> file into <code>config.org</code> wholesale.</li>
<li>I put every config stanza under a level 2 heading to start.</li>
<li>Short (5 lines or fewer) comments became leading prose blocks.</li>
<li>Long comments went into level 3 <code>Docs</code> subheads.</li>
<li>I collapsed my view to headings only and  moved everything related to each other into proximity of each other with org&rsquo;s section up/down keys.</li>
<li>I added top-level headings for basic config, my more extensive org mode stuff, and utility functions.</li>
</ol>
<p>I&rsquo;m still building up my Doom config, so it didn&rsquo;t take long. Maybe 15 minutes to get to something much more easy to scan:</p>
<p><img src="/img/org-config.jpg" alt="Screenshot of an org-based config file&rsquo;s heading hierarchy"></p>
<p>Sitting here thinking about it, I guess it reminds me a little of the first time I sat down and wrote a real Puppet manifest for a real purpose and not a &ldquo;how does this thing work?&rdquo; purpose. It felt like clarity was emerging from the writing process.</p>
<p>Seems like a keeper.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-04-03</title>
      <link>https://mike.puddingtime.org/posts/2023-04-03-daily-notes-for-2023-04-03/</link>
      <pubDate>Mon, 03 Apr 2023 11:00:40 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-03-daily-notes-for-2023-04-03/</guid>
      <description>Vimari, my Emacs origin story, a 24-year-old free sample chapter, and my Jurassic Park moment with a pizza box. John Wick 4, Diego Sanchez has lessons.</description>
      <content:encoded><![CDATA[<h3 id="vimari-and-my-emacs-origin-story">Vimari and my Emacs origin story</h3>
<p>Some time in 1991 I got a job at Indiana University. It wasn&rsquo;t much of a job, but for someone who&rsquo;d quit his job at a newspaper and had just spent a year flipping burgers at a place called &ldquo;G.D. Ritzy&rsquo;s,&rdquo; it was okay.</p>
<p>Everybody at IU could get an account on a VAX cluster running VMS. You could log in on one of the many VT100&rsquo;s scattered around campus, or telnet in via one of the Macs (SE&rsquo;s mostly in the public clusters) or PCs (a bunch of Zenith 286&rsquo;s.) If you had a modem at home you could get in that way, too. The machines in the cluster were all named things like &ldquo;Rose,&rdquo; &ldquo;Jade,&rdquo; &ldquo;Aqua,&rdquo; and other shades, so people called them &ldquo;the color computers.&rdquo; By early &rsquo;90s shared computing standards they were simple enough to use: You got a menu at login that offered the basics (email, directory services, interactive chat, etc.), and there was a small collection of utilities people wrote that you could install to do stuff like look up which user was logged into which terminal in a given lab (which broke whenever a terminal got moved, because the utility location database was put together by hand.)</p>
<p>The VAX clusters were hideously overloaded and logins were queued. At lunch I&rsquo;d walk from my work building over to a nearby academic building that had a study carrel with a VT100 taking up all the desk area, start a login, open my lunch and finish most of my sandwich before my password would be accepted. Once in it was faster but still pokey, so I&rsquo;d spend the hour doing email or bickering on Forum, the local discussion board.</p>
<p>I complained about how slow things were to a friend who was doing her PhD in biology, and she told me the resident nerd in her lab had helped everybody get &ldquo;metal&rdquo; accounts, which were much faster. I&rsquo;d seen them in use but assumed they were reserved for some class of university person I was not. &ldquo;No,&rdquo; she told me, &ldquo;just go to the computing services helpdesk in the union, and don&rsquo;t say &lsquo;metal,&rsquo; say &lsquo;unix.&rsquo; You have to say you want a &lsquo;unix&rsquo; account.&rdquo;</p>
<p>Okay. Got it. So on my next stop by the union I went down there and told the help desk person &ldquo;please give me a &lsquo;unix&rsquo; account.&rdquo;</p>
<p>He collected some information and jotted my username and password on a tri-folded pamphlet that said something like &ldquo;UNIX At Indiana University.&rdquo; The pamphlet served mainly to say &ldquo;you&rsquo;re about to use something that will remind you of MS-DOS just enough to confuse you but not enough to help you.&rdquo; It also explained how to write an alias to make some things be more like MS-DOS, and it said if you wanted to write a file, you should use a program called <code>vi</code>.</p>
<p>I logged into my new account on a node called &lsquo;silver,&rsquo; and right away noticed that the login was instantaneous, and that it dumped me into a bare prompt. No helpful menu. No nothing. I spent a lot of time in that pamphlet, learning that <code>elm</code> was for email, and that I had a choice of <code>rn</code> or <code>tin</code> for this thing called Usenet that absolutely kicked Forum&rsquo;s ass, and that there were these things called <code>man</code> pages that were both often delightful and occasionally infuriating.</p>
<p>I was mostly interested in using my account for writing, though, since I could keep my work on a central machine and get at it from anywhere on campus or from home, where I had a Lear-Siegler ADM3A+ and a 300-baud modem. <code>vi</code> posed a small problem there, however, as it didn&rsquo;t seem to have word-wrap. I mean, I am sure it probably did, but <code>man vi</code> wasn&rsquo;t telling me how that might work.</p>
<p>So I made my way down to the UCS help desk in the student union again and said to the person at the counter, &ldquo;I am trying to write with my unix account, and there&rsquo;s no word wrap in <code>vi</code>.&rdquo;</p>
<p>&ldquo;Oh, huh. I don&rsquo;t know. I just use WordPerfect. Um &hellip; the guy who knows unix is here.&rdquo;</p>
<p>So he shouted over his shoulder, &ldquo;hey, how do you turn on word wrap in vi? It&rsquo;s for a unix account.&rdquo;</p>
<p>&ldquo;Oh, it doesn&rsquo;t have it. Tell him to use Emacs.&rdquo;</p>
<p>&ldquo;Okay. Yeah. Um, you should use Emacs. It sounds like it has word wrap.&rdquo;</p>
<p>Then he slid me a salmon-colored tri-fold pamphlet that said &ldquo;Emacs at Indiana University.&rdquo;</p>
<p>Okay.</p>
<p>The pamphlet said nothing about word-wrap, but I had a USENET account, so I asked whichever Emacs group I found first, and someone started me down the path. That&rsquo;s it. 32 years later &ldquo;I am an Emacs user&rdquo; because in 1991 I couldn&rsquo;t figure out word-wrap in vi.</p>
<p>&ldquo;Unix&rdquo; (I later learned I was actually using Ultrix) took over how I thought about computers. When I put the ADM3A+ aside so I could use an IBM XT I&rsquo;d bought at university auction for $35, I reversed my journey of aliasing all the Unix shell commands to their DOS equivalents and installed something called 4DOS, which provided an improved shell for MS-DOS machines and allowed me to make Unix-like aliases. Dumpster-diving outside one of the academic buildings I found a complete set of disks and manuals for <a href="https://en.wikipedia.org/wiki/Sprint_(word_processor)">Borland Sprint</a>, which was a word processor for DOS that included keystroke emulation layers for WordStar (whatevs), WordPerfect (hot), and Emacs (!).</p>
<p>That also primed me for my first &ldquo;tech job,&rdquo; sorting out a Sun pizza box that served as a printing queue for a pair of Xerox DocuTech&rsquo;s in my office. When the thing went down, my boss grabbed me because &ldquo;you know computers&rdquo; and I was allowed to actually sit at the terminal, wherein I had my _<em>Jurassic Park</em> moment a year before <em>Jurassic Park</em>.</p>
<p><img src="/img/jurassic-park-unix.jpg" alt="Screen capture of Lex in Jurassic Park saying &lsquo;it&rsquo;s a unix system, I know this.&rsquo;"></p>
<p>It <em>was</em> a Unix sytem, and I <em>did</em> know it. Mostly. Enough that the Xerox support tech and I were able to communicate over a very long support session, determine that my boss kept turning the box off at night, which was keeping <code>cron</code> from running, and killing the print queue when <code>/tmp</code> filled up. From that point forward, some of my job was my old job and some of it was just doing computer stuff that needed to be done.</p>
<p>Being pointed to Emacs also started my education about Free Software (&ldquo;open source&rdquo; was years away). I&rsquo;d never really thought about software as a thing you&rsquo;d think about ethically. I thought shareware was cool but usually bad compared to the stuff you got at WaldenSoft, and that the best software had to be fished out of a dumpster outside the communications department building after some professor had moved on. Emacs was happy to educate me about all that, though.</p>
<p>When Linux turned up I was completely primed for it. I didn&rsquo;t have the hardware or skill to install it, and wouldn&rsquo;t until 1995, but wow was I ready for a real Unix on hardware I could afford.</p>
<p>Anyhow, the whole &ldquo;vi vs. Emacs&rdquo; thing was always the source of some wry amusement to me. When I wrote a book about Linux that had <a href="/img/Joy04.pdf">a whole chapter on the flame wars of the late 20th century Linux community</a> the matter figured prominently. When we released a sample chapter on LinuxToday people felt this was divisive and unworthy of the open source community ethos:</p>
<blockquote>
<p>Vi fans are proud of their hard-earned knowledge and mastery. You can find Web pages with buttons that read, “Crafted with the vi editor.” There are vi coffee cups with the commands you might need to know printed on the sides. Vi people take a ruthless pleasure in telling newbies to use vi. They know what the newbie’s getting into, and they aren’t about to warn them. If the newbie works in an adjoining cubicle, vi users sit quietly and listen to the newbie’s terminal beep over and over and over while the first lesson of vi is pounded into their skulls: You can’t “just start typing” with vi. People who want to do that are morally defective.</p>
</blockquote>
<p>But personally I just sort of kept quiet about the whole thing outside of admitting that I was an Emacs person and sometimes mentioning that was mostly owing to an historical accident. I mean, when Puppet started doing stuff with Clojure in 2013,  and suddenly Emacs-by-way-of-Spacemacs started turning up on more screens, I did feel a small surge of vindication, but also could not puzzle out the whole <a href="https://github.com/emacs-evil/evil">Evil</a> thing.</p>
<p>But here I am, typing this on Emacs using Doom Emacs and keeping the Evil layer turned on because I got a little bored and wondered what life could have been like if someone had told me vi had word-wrap in 1991.  Interestingly, because I have applied myself to learning and practicing vs. backing into the bare minimum over the years, I think I might be at least as proficient from the past several weeks of practice. I&rsquo;ve got a janky, hybrid style right now, because Doom is set up to let a lot of Emacs keybindings still work, and also lets me use more traditional Mac keybindings for basic text operations. Maybe it&rsquo;s less of a conversion to the <code>vi</code> keybindings and more an appreciation of Doom&rsquo;s modal interface. But I do continue to find myself on the control key less, and I appreciate that.</p>
<p>Oh, right: It has taken enough that I added <a href="https://github.com/televator-apps/vimari">Vimari</a> to Safari. It gives you a bunch of vim keybindings. The one I actually like the most is <code>f</code> to label all the links on the screen and jump to one.</p>
<h3 id="spacemacs">Spacemacs</h3>
<p>Speaking of Spacemacs, I did give it another look over the weekend just because Doom doesn&rsquo;t use <code>~/.emacs.d</code> and Spacemacs doesn&rsquo;t look in <code>~/.config</code>, so swapping configs is a cheap thrill. I completely get the charm, and could see myself using it if I&rsquo;d have tried it before Doom, but I did find some config conventions a little less to my liking &ndash; they sort of tangle things up in a way that feels more error prone &ndash;  and I found the out-of-the-box configs in Doom more to my liking.</p>
<h3 id="john-wick-chapter-4">John Wick Chapter 4</h3>
<p>Al and I went to see the new <em>John Wick</em> movie over the weekend. It&rsquo;s long and I would argue it is too much of its particular good thing. Running close to three hours, there&rsquo;s a whole section I think they could have removed, losing little.  At the same time, Donnie Yen is so great as Caine. Watching his more old-school cinematic martial arts style contrasted with John Wick&rsquo;s sometimes awkward, brutally utilitarian &ldquo;not going for a submission, just holding your head still so I can shoot it&rdquo; fight choreography was cool, and it made me glad I&rsquo;ve got <em>Blind Fury</em>, <em>The 36th Chamber of Shaolin</em>, and <em>The Five Venoms</em> lined up on Plex.</p>
<p>I guess it feels a little churlish to complain about 3-hour run times. I remember when even up-market Hollywood stuff was frequently coming in at under 2 hours, and it felt penny-pinching and sad.</p>
<p>Anyhow, tomorrow is a big day. Al helped me rehearse yesterday, and I&rsquo;m sitting here in that state you get into when you&rsquo;ve prepared right up to the point of over-preparation and you need to stop so your brain can consolidate it all and you can just go in and play your game, knowing that you&rsquo;re going to tell the best possible story about who you are, then leave it to the people on the other side of the table to decide if they want that.</p>
<p>To quote the great Diego Sanchez:</p>
<p><img src="/img/diego.gif" alt="GIF of Diego Sanchez chanting &lsquo;yes&rsquo; as he walks in for a fight"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-31</title>
      <link>https://mike.puddingtime.org/posts/2023-03-31-daily-notes-for-2023-03-31/</link>
      <pubDate>Fri, 31 Mar 2023 07:01:43 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-31-daily-notes-for-2023-03-31/</guid>
      <description>Journaling with org-roam, exploring Zettelkasten to inform writing, spring camping shakedown.</description>
      <content:encoded><![CDATA[<h3 id="journaling-with-org-roam">Journaling with org-roam</h3>
<p>I made &ldquo;my journaling practice&rdquo; the focus of some attention this week. I started out with org-journal, but ran into an issue with it I couldn&rsquo;t untangle regarding line wrapping. I couldn&rsquo;t understand what was even going on until I read that it uses its own org-<em>derived</em> major mode, which at least explained why it suddenly started working when I invoked org-mode by hand on a journal buffer, at the expense of god knows what functionality.</p>
<p>In the end, I decided &ldquo;whatever.&rdquo;</p>
<p>I was happy with my daily journal pages in Obsidian, which fully existed in my Zettelkasten. So I decided to set org-journal aside &ndash; I wasn&rsquo;t planning on using many of its features anyhow &ndash; and focus instead on making org-roam dailies capture templates to suit my needs. At this point it just means I have a couple of quick keystroke paths to capture my morning and evening prompts in the current day&rsquo;s daily page, which also gets used mostly just as a running log.</p>
<p>Being able to say &ldquo;whatever&rdquo; and set aside a bottomless round of troubleshooting is how I&rsquo;ve committed to using Emacs this time around. Doom continues to mostly &ldquo;just work&rdquo; and has proven stable and manageable. At the same time, I&rsquo;m being less adventurous. If something doesn&rsquo;t seem right and doesn&rsquo;t yield to a few common-sense experiments, I prefer to bounce off the issue and figure out what will &ldquo;just work.&rdquo;</p>
<p>I will say that the sqlite dependency at the bottom of org-roam makes me uneasy. It is odd for me to err in favor of something like that vs. trying a little harder to make another solution with fewer outside dependencies work. It&rsquo;s just a taste thing that&rsquo;s been developing more and more over the past few years.</p>
<p>And the whole thing isn&rsquo;t peculiar to Emacs. It&rsquo;s any extensible tool. Like, Yoda said the only thing in the Evil Force Tree is what you take with you, so don&rsquo;t take a teetering edifice of other peoples&rsquo; poorly understood code in there.</p>
<h3 id="job-hunting-and-writing">Job hunting and writing</h3>
<p>I realized in the process of preparing answers to 18(!) interview questions that I was doing more intense thinking and writing about why I show up at work and how I like to be at work than I have in a long while. I have done a few &ldquo;what&rsquo;s your personal operator manual&rdquo; exercises, but not in a way that felt as high stakes as &ldquo;I want really want this particular job.&rdquo;</p>
<p>I&rsquo;ve also been doing more writing about work lately, as part of the job-hunting strategy. I haven&rsquo;t been comfortable with the mode I&rsquo;ve been using to do that writing. It is a little too ponderous, a little too just-so. And informal analysis tells me LinkedIn does something with those reading time statistics it collects that also cause that form to work against me.</p>
<p>If you are mystified and gob-smacked by the flatly bizarre content that flows across your feed there, wondering &ldquo;who on earth reads this?&rdquo; the answer is what it <em>always</em> is with algorithms The Tech People cook up to solve engagement problems: They don&rsquo;t have a meaningful way, yet, to assess the content, but they are committed to a project of &ldquo;surfacing&rdquo; the &ldquo;best&rdquo; content. So they assess the formal characteristics of the content that succeeds so they can seed the feedback loop. I&rsquo;ve done this. I&rsquo;d be galled with myself for forgetting it if I hadn&rsquo;t remembered quickly enough.</p>
<p>So I&rsquo;m going to experiment with a shift in writing approach, and use it as a practical application of Zettelkasten:</p>
<p>The practical writing I&rsquo;ve been doing to prepare for interviews has engaged me on a different level. Stories play into it because even when the interview style is very conceptual I still steer my answers into the behavioral, giving interviewers something they didn&rsquo;t even realize they wanted sometimes. So I have to think about what I&rsquo;ve done, not just how I think things should be.</p>
<p>But an insight from my coach after a disappointing round of interviews has been ringing in my ears, too:</p>
<p>&ldquo;Mike, they don&rsquo;t want to hear your stories until they trust you enough to let you in a little more.&rdquo;</p>
<p>So the change is just: I have a bunch of very concise writing I&rsquo;ve done to prepare. It has touched on a bunch of stuff I care about and have done: change management, communications, people management, operational excellence, conflict management, and goal-setting.  It starts small &ndash; a concrete question &ndash; grows into something bigger, because I&rsquo;m inclined to story-telling &ndash; then settles back into something I can get across in a few minutes. It&rsquo;s all so atomic that it wants to be turned into nodes, ready for slight rehydration as part of a different kind of writing I want to get better at, even once I&rsquo;m done looking for work.</p>
<p>I&rsquo;m interested to try it, because my writing comes from a certain tradition: Get it all out, pare it back, let something back in, take something else back out, back and forth until you&rsquo;re asking for just the right amount of attention &ndash; nothing less than the lede promised, nothing more than the lede can bear.  It&rsquo;s like sculpting a big hunk of rock. This approach will be more like &hellip; Jenga? Starting from a compact, economical place and making sure no more is added than it can bear to accomplish something a little more ambitious than &ldquo;capture the thought,&rdquo; but still modest, and still balanced.</p>
<p>Anyhow, today is a little busy, so I&rsquo;m wrapping early. I&rsquo;m really looking forward to next week: It&rsquo;ll be hectic on Monday and Tuesday, then Al and I are taking the Outfitter to Nehalem Bay for its spring shakedown: A few days of beach-walking, hanging out in Manzanita, and movies on the iPad.</p>
<p><img src="https://photos.smugmug.com/photos/i-MXfdK36/0/3df63d33/XL/i-MXfdK36-XL.jpg" alt="A small, square camping trailer sits under tall pines, a folding love seat sits on a camp rug in front of a Solo Stove."></p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-29</title>
      <link>https://mike.puddingtime.org/posts/2023-03-29-daily-notes-for-2023-03-29/</link>
      <pubDate>Wed, 29 Mar 2023 11:42:01 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-29-daily-notes-for-2023-03-29/</guid>
      <description>Trying org-journal, Good Sudoku, blog content migration tools.</description>
      <content:encoded><![CDATA[<p><em>Breaking</em>: I just discovered Doom&rsquo;s <code>rotate text</code> module in the process of thinking &ldquo;why can I not just flip this post&rsquo;s draft metadata from <code>true</code> to <code>false</code> with a keystroke? Did I see something about that in <code>init.el</code>?&rdquo; I <em>did</em> see something about that in <code>init.el</code>, so I uncommented the line, did a <code>doom sync</code>, and it&rsquo;s there: just put a word under the point and <code>] r</code> to go through the candidates.</p>
<p>Anyhow &hellip; as I was about to post:</p>
<p>I am in one of those liminal places people find themselves in from time to time.  I suppose the best thing you can say about them is that it&rsquo;s better when you know you&rsquo;re there than when you don&rsquo;t, because you at least have a fighting chance of arresting the worst of your bad habits.</p>
<h2 id="good-sudoku-is-real-sudoku-i-guess">Good Sudoku is real Sudoku, I guess</h2>
<p>For instance, sometimes it&rsquo;s good to stop moving around so much and just wait the thing out. Sudoku has always been good at that for me, but so much of my conception of Sudoku involved mandatory tedium. Like, I didn&rsquo;t even fully embrace the &ldquo;logic&rdquo; parts of the game because some of what made it soothing was the dull repetition of pre-filling all the gimmes, and you don&rsquo;t need hard puzzles to waste a bunch of time on that while you fight with a virtual copy of your office nemesis.</p>
<p><a href="https://www.playgoodsudoku.com">Good Sudoku</a> for iOS/iPadOS is several years old, now. I saw it come out, downloaded it, and honestly thought there was some sort of catch to it. It has a few provisions for automating or at least bringing focus to the early stages of a puzzle, and I found that with those affordances I can reliably complete puzzles at the &ldquo;advanced&rdquo; level without getting out of my comfort zone in terms of logical patterns. I can finish some &ldquo;Expert&rdquo; ones without a hint, and maybe half of them with just a single hint. It was so jarring to me that I even went looking for evidence that there might be people who hate it for spoiling a tedious and frustrating but essential element of the game. Like, maybe there are people out there who <em>like</em> that you have to do all the paperwork. If there are, I didn&rsquo;t see them in the first few pages of a DuckDuckGo query asking if Good Sudoku can even be considered real Sudoku.</p>
<p>So the revelation, I guess, is that Sudoku remains fun with those affordances in place. You still have to, like, use logic and stuff &hellip; you just have to learn more advanced things more quickly because the quality of life enhancements get you there faster. But there&rsquo;s still plenty of challenge left. For the first time, though, Sudoku is a question of &ldquo;how good do I care to become?&rdquo; instead of &ldquo;how much tedium can I take?&rdquo;</p>
<p>Maybe more importantly than being &ldquo;fun,&rdquo; Sudoku remains absorbing. When my brain spins up too far, and I find myself stuck in those things I do when I&rsquo;m in a liminal space, it&rsquo;s a way to background the things that feel like distractions, soak up some excess cognitive capacity, and process the thing that is eating me at a level I can deal with while I give over some spare cycles to spotting a new pattern I&rsquo;m still trying to internalize.</p>
<h2 id="org-journal">org-journal</h2>
<p>I&rsquo;ve had a daily journal practice going for a little while now, partially cribbed from a pre-made paper daily journal I tried out a few years ago. In its most recent form, the day starts with three prompts:</p>
<ul>
<li>What&rsquo;s today&rsquo;s biggest challenge?</li>
<li>What are you happiest about?</li>
<li>What are you most nervous about?</li>
</ul>
<p>&hellip; and it ends with three prompts:</p>
<ul>
<li>What happened today?</li>
<li>What went well today?</li>
<li>What could you improve?</li>
</ul>
<p>I include my morning and evening entries in my habit trackers so I can get a reminder, and I set up a template in DayOne to pre-fill the entry for the day.</p>
<p>I&rsquo;ve been pretty good about sticking to it, but I noticed recently that it was not working on a few levels:</p>
<p>First, it has become perfunctory &ndash; a task to accomplish. When I tap back through past entries I didn&rsquo;t have much of a sense of &ldquo;me&rdquo; in there because the entries were brief and suggestive of me just being very much in my own head and not doing much written thinking or processing.</p>
<p>Second, the questions have some issues. In particular, I noticed &ldquo;what are you most nervous about&rdquo; was putting me in a mindset where I had to cast about to think about something to be nervous about. That&rsquo;s &hellip; that&rsquo;s something to do when maybe you don&rsquo;t have an amygdala. It took me some time to get around to understanding how much that question was infusing my thinking with the idea that I was &ldquo;anxious.&rdquo; Glad I did.</p>
<p>So I did the thing I do when something I do isn&rsquo;t working for me and I made it a set of documents. It was a good excuse to try out org roam as a Zettelkasten replacement for Obsidian. The three nodes I made were:</p>
<ul>
<li>Journaling: tools</li>
<li>Journaling: practices</li>
<li>Journaling: experiments</li>
</ul>
<p>All of them link back to a &ldquo;Purpose: Writing&rdquo; node.</p>
<p>Then I put down some time on the schedule to write some notes about each, asking what I want to get out of the practice, what tools I have under consideration for continuing it (e.g. Obsidian, <a href="https://dayoneapp.com">DayOne</a>, assorted Emacs stuff), and which experiments I mean to run for how long to see what works.</p>
<p>I&rsquo;ve just started a  &ldquo;use <a href="https://github.com/bastibe/org-journal">org-journal</a>&rdquo; experiment.  I use the vanilla config from Doom, and I added a morning and evening entry template using <a href="https://github.com/joaotavora/yasnippet">yasnippet</a> to keep the investment in automation light for now. The one minor disappointment I&rsquo;m experiencing is how <code>org-crypt</code> works, which is entry-by-entry, and manually. Maybe there&rsquo;s a different way to protect the content anyhow, but <code>org-crypt</code> seems to be the Doom-blessed approach, and I was hoping for something a bit more transparent. I&rsquo;m also guessing there&rsquo;s a way to make it more transparent at the cost of eating someone else&rsquo;s elisp off the sidewalk.</p>
<p>Playing with tools is just sort of the fun part of it. It was immensely useful, once again, to sit down and write about why I even cared and wanted to do this, and when I sat down this morning to write my first entry of the day the renewed sense of purpose did as much as anything to make the entry more rich. I can imagine &ldquo;me in ten years&rdquo; getting something out of that entry, which is a vast improvement over the bulk of the past quarter&rsquo;s worth of entries.</p>
<h3 id="migrating-content-from-microblog">Migrating content from micro.blog</h3>
<p>I downloaded the smaller set of archives from micro.blog this week and started seeing what it would take to move the content into place and start chipping away at a few generations of thinking about image hosting and markup. It&rsquo;s all Hugo files, so that&rsquo;s good, and the assorted idiosyncracies are all distinct enough from each other that there&rsquo;s not a lot of &ldquo;this regexp is going to wipe out something completely unrelated.&rdquo;</p>
<p>A few useful tools in this process:</p>
<ul>
<li><a href="https://www.publicspace.net/ABetterFinderRename/index.html">A Better Finder Rename</a> is wonderful for traversing a directory and &hellip; renaming things. Being able to rename files three levels deep in a hierarchy based on their parent folders is pretty handy. I had a license years ago. It was worth the reup.</li>
<li><a href="https://www.devontechnologies.com/apps/freeware">EasyFind</a> is great for fast searches of files in a way that works better for me than how Spotlight operates, then makes them available for bulk operation. In this case, it helped in quickly segregating files by certain metadata and moving them off into subdirectories. Great value for no cost.</li>
<li><a href="https://www.barebones.com/products/bbedit/">BBEdit</a> is such a champ at bulk file processing. Having a visual regexp tool to pre-flight operations across a collection of files is great. Saving those operations is great. It&rsquo;s fast, stable, and doesn&rsquo;t blink when you toss thousands of text files at it.</li>
</ul>
<p>I wanted to go at some of the migration challenges with scripting, but there seems to be <a href="https://pypi.org/project/python-frontmatter/">a single Python lib</a> that groks YAML frontmatter in Markdown, and that&rsquo;s not one of my good languages, so I&rsquo;d be hand-rolling something that I&rsquo;d rather not. The three tools I listed above are all pretty capable and have the advantage of offering some sort of pre-flight feedback, sometimes with syntax highlighting, etc. I&rsquo;ll take those shortcuts.</p>
<p>And wow is this all so much better than the stuff I used to make money dealing with: Legacy blogging systems with a database backend and a bizarre blend of &ldquo;yes, there&rsquo;s the body of the article right there in the <code>body</code> field, but where on earth is the title? I can see it on the front end but it does not exist in this db dump.&rdquo; (A: The title was in a separate table from the content table &ndash; which was specific to the site &ndash; and that titles table covered every site under management by that CMS, <em>and</em> no they wouldn&rsquo;t export that for my client when they left the service. I got super creative with the Bing API to reunite all the articles with their titles for that gig.)</p>
<p>Anyhow, that&rsquo;s plenty for today and I need to get a run in. Ben&rsquo;s home this week and we&rsquo;re taking him out tonight. It is still sometimes strange to have become a person who lives in a home that a 19-year-old man comes home to now and then, and it was also strange to realize two hours into a conversation with him yesterday that he is just this person it is great to have a conversation with. But it&rsquo;s strange in the most wonderful way.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Star Trek: Strange New Worlds</title>
      <link>https://mike.puddingtime.org/posts/2023-03-27-star-trek--strange-new-worlds/</link>
      <pubDate>Mon, 27 Mar 2023 09:37:08 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-27-star-trek--strange-new-worlds/</guid>
      <description>&amp;lsquo;Star Trek: Strange New Worlds&amp;rsquo; suggests there is a point to all the struggles we deal with today that lies beyond living in a state of permanent cultural dominance.</description>
      <content:encoded><![CDATA[<p>I had a pretty good reaction to the first half of <em>Star Trek: Strange New Worlds</em>:</p>
 <iframe src="https://social.lol/@mph/110088020012317537/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>I finished the first season yesterday with an <em>Aliens</em> homage, a faint call back to <em>Shore Leave</em> from the original series (TOS), and a sort of What If? episode built around the events in <em>Balance of Terror</em> from TOS.</p>
<p>The Rolling Stone review I linked to above continues to feel mostly true to me: The tilt toward the episodic and the willingness to be a little corny evoke the original series and its particular kind of optimism. And there are all kinds of episodes: light ones, heavy ones, &ldquo;some crucial piece of information about this culture is missing&rdquo; ones.</p>
<p>What else is there to like?</p>
<p>Since Uhura, Chapel, and Spock are all featured characters, we get their early stories. It&rsquo;s not hard, regrettably, to improve Chapel from the original series, but they&rsquo;re good improvements. We don&rsquo;t have a ton of Uhura&rsquo;s backstory, so their choices with her don&rsquo;t really run into the teeth of dreaded fidelity to canon. Spock works pretty well for me, and they are willing to fly close to the sun with the Spock-centric plots and beats, so also cheers to their boldness.</p>
<p>I like they way they&rsquo;ve squared visual design with TOS. The uniforms keep the color scheme, the materials sort of blend Abram&rsquo;s Kelvin timeline uniforms with TOS, devices look a lot like their TOS counterparts where it makes sense, with modernizing upgrades to their functionality where CG allows. Spock still has his ViewMaster/microfilm reader science station thing. There are Jeffreys Tubes.</p>
<p>None of that really goes to why I feel so warmly toward it, though.</p>
<p>When the original series was too self-aware, it was in the meta of a particular generation of producers and writers making a television series: It was a generation that had come up under television with the idea that it was a way to put theater in the home. The captain was a Shakespearean actor, the blocking sometimes felt very stage-like.  It was broad. When it was high-minded, it was in a particular Greatest Generation Puts on a VoA Show kind of way.</p>
<p>I didn&rsquo;t respond well to <em>Star Trek: The Next Generation</em> partially because its self-consciousness included too much of a sense of itself as a broad corrective for TOS&rsquo;s worldview. It&rsquo;s a fine line writing parables and morality tales with science fiction. Things have to stay anchored in the present on some level, so the audience can latch onto the analogies and metaphors and extract the lesson, but too much and you over-correct into presentism. Personally, I think <em>The Next Generation</em> didn&rsquo;t manage the balance. It was too pleased with itself for daring to critique a beloved series for being too pleased with itself, and that made its hypocrisies glaring.</p>
<p>As what is now the other bookend for the original series, <em>Strange New Worlds</em> has gone another direction. There is still the notion of humanity as a project of continuous improvement, but it has gone in another direction from most other reboots, prequels, sequels, etc. in that its 23rd century feels so much less self-conscious. Specifically, so much less <em>in reaction to</em> the present. It subverts our understandings of characters from the original series that we simply knew to read a certain way based on the cultural context from which that series arose, but with much less didacticism than <em>The Next Generation</em>. It suggests, in a way I would have told you sight unseen is incompatible with current sensibilities about how entertainment is supposed to work, that there is a point to all the struggles we deal with today that lies beyond living in a state of permanent cultural dominance. That the <em>point</em> is not reviving 20th century troglodytes from suspended animation so we can lecture them about our transcendence of capitalism, or defending 24th century humanity&rsquo;s right to exist by joining an omnipotent pure energy being&rsquo;s condemnation of 20th century humanity. That the <em>point</em> of all the struggle is to get to a better present where people can simply <em>be</em> in a more just universe. It&rsquo;s a vision of people living in a better tomorrow so far removed from our own that they don&rsquo;t even talk about what it&rsquo;s like to live there &hellip; they just live there. It simply feels less didactic and more genuinely optimistic. That surprises me, because that is not The Current Mood. The show&rsquo;s writers have figured out a special kind of balance. <em>Strange New Worlds</em> wears its values confidently.</p>
<p>So I think that&rsquo;s why I&rsquo;ve allowed each episode, even the ones drawing on the faces of <em>Trek</em> I have liked the least as a life-long fan, to hit me on whatever emotive level it is going for. By feeling less choked with self-awareness, it opens up space to just be in that universe with those people and engage with the material with more vulnerability.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-24</title>
      <link>https://mike.puddingtime.org/posts/2023-03-24-daily-notes-for-2023-03-24/</link>
      <pubDate>Fri, 24 Mar 2023 10:04:10 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-24-daily-notes-for-2023-03-24/</guid>
      <description>More on learning with Vim Adventures, TickTick is out, time to pack it in on micro.blog.</description>
      <content:encoded><![CDATA[<h3 id="re-ticktick">re: TickTick</h3>
<p>It has been supplanted by org-mode.</p>
<p>Final verdict: It&rsquo;s pretty good. If I had to put all my to-do lists in a proprietary, closed-format tool, it would probably be the one, or at least in the running with Things. I just appear to be due for an org-mode kick, and TickTick happened to be standing around when it happened.</p>
<p>In terms of getting out of org-mode what I was getting out of  TickTick beyond a simple todo list, it came down to mobile, habits, and pomodoros.</p>
<p>[beorg][] handles Reminders integration. Doom Emacs lets you pull in <code>org-habits</code> out of the box, so I just did that and set up a habits file. They&rsquo;re pulled into my agenda, which shows streaks information for them.</p>
<p>I also added <code>org-pomodoro</code>, which works about like you&rsquo;d expect: Pick an item from the agenda, trigger the timer, and it adds a time entry to that item in its home file for each Pomodoro completed:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">** omg.lol Docs
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">*** Git workflow
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">**** DONE Beginner section
</span></span><span class="line"><span class="cl">DEADLINE: &lt;2023-03-24 Fri&gt;
</span></span><span class="line"><span class="cl">:LOGBOOK:
</span></span><span class="line"><span class="cl">CLOCK: [2023-03-24 Fri 14:19]--[2023-03-24 Fri 14:44] =&gt;  0:25
</span></span><span class="line"><span class="cl">CLOCK: [2023-03-24 Fri 13:49]--[2023-03-24 Fri 14:14] =&gt;  0:25
</span></span><span class="line"><span class="cl">CLOCK: [2023-03-24 Fri 11:25]--[2023-03-24 Fri 11:50] =&gt;  0:25
</span></span><span class="line"><span class="cl">CLOCK: [2023-03-24 Fri 10:14]--[2023-03-24 Fri 10:39] =&gt;  0:25
</span></span><span class="line"><span class="cl">CLOCK: [2023-03-24 Fri 09:38]--[2023-03-24 Fri 10:03] =&gt;  0:25
</span></span><span class="line"><span class="cl">:END:</span></span></code></pre></div>
<p><a href="https://writequit.org/denver-emacs/presentations/2017-04-11-time-clocking-with-org.html">I found this presentation helpful for figuring out how to add reporting with the time data you can gather</a>.</p>
<h4 id="always-coming-home">Always coming home</h4>
<p>At some point we have to acknowledge to ourselves that maybe the chaos is the actual pattern, or that the things we think are chaotic are not after all, even if we can&rsquo;t quite feel the rhythm.</p>
<p>When it comes to tools &ndash; especially productivity ones &ndash; I am fickle. I&rsquo;ve been through four or five major &ldquo;all in on org&rdquo; moments in my life, and then I&rsquo;ve fallen out of them.</p>
<p>org-mode can be tough to stick with: Emacs can be crabby, the ecosystem feels fragile sometimes, and you occasionally go through these periods where everyone&rsquo;s carrying on about some new Emacs build or hotness and you chase after it ten minutes before a day full of meetings where the segfaults start in the middle of a note.</p>
<p>No amount of fluency with the tool or joy in the format can get you around the days where the tool just doesn&rsquo;t feel steady.</p>
<p>On the other hand, one missing piece from previous Big Org periods has been a habit I picked up during the pandemic of being more circumspect about the tools I pick up and what I want to do with them. I write about what I hope to get out of something. I think about what I want to use it for. Sometimes I learn about a new feature or approach and decide to roll it in, but I&rsquo;ve gotten a lot better at knowing why I use the things I do, and what I want out of them. I&rsquo;m also more suspicious of changing them up much.</p>
<p>In assorted parts of my technical life, that new habit has been a real boon, because &ldquo;tech&rdquo; in the broadest sense is something I like to play with, and I used to constantly break the rule &ldquo;Don&rsquo;t try anything new on race day,&rdquo; with all the ensuing chaos that comes with it. Like, years ago past Mike got really disgusted at work and swore he was done with his job and applied for a bunch of jobs, and decided that was the right time to change email providers because he heard that the one he was switching to had some cool features. Yes, some mails went missing.</p>
<p>Where my Emacs life is concerned, it just comes down to &ldquo;one thing at a time, only one thing a day, if at all.&rdquo;</p>
<p>I self-interpret that to mean &ldquo;you can turn on one module and snarf up one quick tweak or imported config to go with it.&rdquo; Adding <code>org-super-agenda</code>? Great &ndash; turn it on and add one config change. Doing pomodoros? Okay, don&rsquo;t change your org agendas to show the timing, just make sure you can record the times consistently, and that it isn&rsquo;t making things feel wobbly. I usually just do a pomodoro of fiddling at the beginning of the day, which is about enough time to find something, turn it on, and see if it passes the initial use test before it&rsquo;s time to do other stuff.</p>
<p>I&rsquo;ve been harping a lot elsewhere on how stable Doom Emacs feels compared to my own <code>init.el</code> ecosystem, but I suspect part of it is just that I&rsquo;ve been very careful about what I add and how much I add at a time. I think Emacs is in a unique tier of sensitivity to a lot of thrashy change, but just about anything built on a lot of user-generated content (e.g. modules, add-ons, plugins) can be made to misbehave and become hard to troubleshoot.</p>
<p>Another thing that has changed about me over the past few years has been a growing awareness that I can get into a headspace where I prize automation and less overall motion to the point of paralysis. It took seeing other people falling into that pit &ndash; believing that they came into work that day to automate something and not to achieve an outcome &ndash; to get me to see it in myself and snap out of it a little.</p>
<h3 id="vim-adventures">Vim Adventures</h3>
<p>I mentioned yesterday that I&rsquo;ve been enjoying Vim Adventures:</p>
<iframe src="https://social.lol/@mph/110075234226930854/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>&ldquo;Enjoying&rdquo; is sort of relative. It wants you to learn stuff that is a slog, and it has a few puzzle challenges that can be challenging since they not only demand you use the keys you&rsquo;ve been learning to accomplish the task, they sometimes require you to do a little lateral thinking. You can&rsquo;t get away with just memorizing a keystroke for a given lesson, use the keystroke a few times, then get on with it. You end up using the keystroke repeatedly trying to solve a puzzle in under <em>n</em> keystrokes, sometimes not realizing there&rsquo;s another lesson buried in there about cursor motion behavior or what have you.</p>
<p>In the end, though, the puzzles are well constructed. New stuff comes in at a steady pace, and each new set of challenges provide a mix of what you&rsquo;ve already learned with the new stuff, so you have to constantly adapt. I tried another, less gamified vim tutorial to see if it would work better for me and it was disorienting after a few hours with Vim Adventures: I couldn&rsquo;t see how any of it could possibly stick in any meaningful timeframe.</p>
<p>I&rsquo;m typing this in the space between writing pomodoros this morning. This is the first day I&rsquo;ve had all week to be deep in a writing/revision cycle using what I&rsquo;ve been learning. It&rsquo;s been interesting to realize how much stuff Vim Adventures has taught me to &ldquo;just do&rdquo; with minimal delay, but I can still sense the occasional spike in cognitive load when a few decades of muscle memory collide with newly learned things that are still up there in the thinking layers.</p>
<p>It&rsquo;s also interesting, as someone whose first deep Unix experience dates back to an Ultrix box and VT100 in 1991, how much these assorted UI ecosystems have come to acknowledge each other. Doom understands the basic Mac text keybindings, so when I&rsquo;ve exhausted my vi keybinding knowledge and just need to do a damn thing to a block of text, cmd-x and cmd-v are right there.</p>
<p>I have asked myself a few times &ldquo;why are you doing this at all,&rdquo; and as near as I can figure it comes down to:</p>
<ul>
<li>Finding I prefer hand positioning that involves fewer control key chords.</li>
<li>Enjoying the learning experience. It&rsquo;s stimulating.</li>
<li>A recent encounter with the mythical &ldquo;vi only&rdquo; system in the form of my EdgeRouter X. Dinking around with files in that thing was a pain, just as the vi bigots have always warned. Completely doable with my limited repertoire of vi skills, but clumsy.</li>
</ul>
<p>I suppose I should also sing Doom Emacs&rsquo; praises once more: It does a lot to make Emacs feel more stable by taking care of housekeeping and providing some reasonable defaults. It&rsquo;s a good learning platform because there are fewer random things going on out of the box. I don&rsquo;t know if I&rsquo;d be able to tolerate the learning curve with my own <code>init.el</code> in place.</p>
<h3 id="probably-time-to-wind-down-on-microblog">Probably time to wind down on micro.blog</h3>
<p>A few months ago I took this site and moved it from Jekyll to Hugo. Jekyll was fine and all, but the more I dug into Hugo&rsquo;s features the more it seemed like an interesting direction to go. I also wanted to move the site from <em>looking</em> personal marketing heavy to just being a blog that also has stuff in it about work/business sometimes.</p>
<p>That was a liberating move: I was able to get myself into a pretty easy writing/publishing workflow that was perhaps a little more computer-bound than what I could get away with on micro.blog, but not so bad.</p>
<p>I kept sticking to my micro.blog presence partially because it has robust cross-posting features I hadn&rsquo;t bothered to suss out using something like IFTTT or Zapier. At the same time, I have a little too much web producer left in me to be comfortable with two domains that are roughly doing the same thing. I once automated a consolidation, content migration, and re-canonicalization of four dozen websites. People sneer about SEO and all the evils of the SEO industry, but there are search engines in the world and there are reasons to care about what they make of your web presence.</p>
<p>If all I wanted to do was have a blog in the most traditional &ldquo;reverse-chronological-ordered posts&rdquo; sense of the word, I&rsquo;d probably stick with micro.blog. Its Hugo foundations allow just enough flexibility to do the basics, and your content can be exported with relatively few idiosyncracies &ndash; no worse than any other Hugo theme. You can write shortcodes and customize a lot of the way the site works.</p>
<p>It&rsquo;s kind of a frustrating platform for iterative development, though. There&rsquo;s enough variance between a basic Hugo theme and what micro.blog needs that you have to do some trial-and-error. Using vanilla Hugo on a laptop, iterative learning is lightning fast and the feedback loops border on instantaneous, especially with <code>hugo server --navigateToChanged</code>. With micro.blog, there&rsquo;s a build time delay to figure out if your thing worked or not, or to get feedback on how it is failing.</p>
<p>I have also found I prefer the free-wheeling nature of Mastodon a little more appealing than the social layer of micro.blog. I&rsquo;ve written about that <a href="https://mike.puddingtime.org/posts/2023-03-13-the-pleasures-of-a-small-mastodon-instance/#comparing-to-microblog">elsewhere</a>, so we&rsquo;ll leave it alone here.</p>
<p>Anyhow, it&rsquo;s time to go through the past couple of years of micro.blogging and work out how to manage that migration. One idea I want to explore is the creation of a &ldquo;microblog&rdquo; content type that would allow me to just move all that stuff into its own silo largely untouched, with some design work to cope with the titleless posts over the years, and with some logic in my Atom feed to allow for ongoing microposts that stay out of Atom but still get syndicated over Mastodon.  Similarly, that could be a quick path to getting all my old dot unplanned content moved over under its own &ldquo;vintage&rdquo; content type.</p>
<p>At some point I am not going to have the kind of time on my hands that I have now, so my thinking is beginning to shift to &ldquo;what&rsquo;s expedient&rdquo; vs. &ldquo;what could enhance your career as a Hugo consultant with yourself as your only client.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-22</title>
      <link>https://mike.puddingtime.org/posts/2023-03-22-daily-notes-for-2023-03-22/</link>
      <pubDate>Wed, 22 Mar 2023 10:42:33 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-22-daily-notes-for-2023-03-22/</guid>
      <description>Succumbing to org-roam, the pleasures of a straight razor competently wielded, Decline of Western Civilization.</description>
      <content:encoded><![CDATA[<h3 id="succumbing-to-org-roam">Succumbing to org-roam</h3>
<p>Well, it took less than 12 hours to go from &ldquo;I&rsquo;m not going to even touch that&rdquo; to &ldquo;huh, I wonder if it&rsquo;s cool?&rdquo;</p>
<p>Yes, <a href="https://www.orgroam.com">org-roam</a> is cool. It&rsquo;s a Zettelkasten implementation built atop org-mode. To make it work in Doom Emacs you just add it to the org-mode line in Doom&rsquo;s <code>init.el</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">(org +roam2) </span></span></code></pre></div>
<p>&hellip; and then run <code>doom sync</code>.</p>
<p>You should add a <code>roam</code> subdir to your standard org files location or it will complain when you try to use it.</p>
<p>You can instantiate a new node with <code>spc n r i</code> (&rsquo;n&rsquo;otes, &lsquo;r&rsquo;oam, &lsquo;i&rsquo;nsert)</p>
<p>That gets you a roam buffer and you can start typing. As with most transient Emacs buffers, <code>C-c</code> will save and exit.</p>
<p>If you want to link to a separate note, you can start typing its name in the body of the current note and get an autocomplete list.</p>
<p>If you link to a note from another note, Roam takes care of adding a backlink at the bottom of the target note.</p>
<p>As with all things Emacs, there are org-roam configs you can go find on the street and stick in your mouth. As with all things Emacs, I didn&rsquo;t describe it that way because I thought that would make such an approach attractive to you. I want you to be repulsed by that approach because it is unclean. One of the advantages of Doom Emacs (or Spacemacs, or Prelude) is that if they include a package, they probably include some basic configuration, so you can kick the tires then start layering on capabilities.</p>
<p>Anyhow, in its basic Doom Emacs config, org-roam is unremarkable. If you want a zettel and don&rsquo;t want Emacs, go get Obsidian or one of its competitors. I&rsquo;m going to stick with it for a while. As I mentioned <a href="/posts/2023-03-21-daily-notes-for-2023-03-21/">yesterday</a>, I like org-mode&rsquo;s intertwingling of tasks/actions/todos and prose, so it suits me.</p>
<h3 id="the-pleasures-of-a-straight-razor-competently-wielded">The pleasures of a straight razor competently wielded</h3>
<p>A brief history of me and professional grooming:</p>
<ul>
<li>My grandmother paid for my first stylist haircut when I was in 7th grade. I had no idea how to maintain it.</li>
<li>I spent a few years just telling barbers to take it all off.</li>
<li>The army taught me the pleasures of walking in, paying your $5, and getting a high-and-tight. Once I&rsquo;d been in a few years, I&rsquo;d modify the request to say &ldquo;leave a little up top.&rdquo;</li>
<li>Over the past 20 years I developed an appreciation for Great Clips because they store your preferences and last cut in the computer under your phone number.</li>
</ul>
<p>Then last year I walked into a barber shop near the office because things were dire and I had a few minutes. The barber handled the basic cut, then offered to do some detail work with a straight razor since he had time. That part was amazing, and it made my day.</p>
<p>I started going back, partially because it was a great first experience and partly because the barber was utterly disinterested in small talk. Just enough to establish we spoke a common tongue, then nothing except the occasional request for a decision.  We did enter into an extended dialog about my beard made up of very sharp exchanges in the ensuing months. He was in favor of taking more of it off, and I would say &ldquo;no, I&rsquo;m not there yet, please just do what you can with it.&rdquo; He&rsquo;d mutter and then cluck when he got to the part where it began to curl at the bottom. &ldquo;I can&rsquo;t do anything with this &hellip; you&rsquo;re sure you&rsquo;re okay?&rdquo;</p>
<p>Then last week I had a video conference and was wearing a shirt with a collar and a jacket and I realized I couldn&rsquo;t see my collar under my beard. I couldn&rsquo;t really see my mouth, either.</p>
<p>I recently read about a study that suggested people with beards will ultimately be perceived as more trustworthy and accessible <em>once they are given an opportunity to smile</em>. Until that point, the unbearded have all the social advantages. So I decided it might be best to make my mouth observable. COVID and masking did reveal me to be a proficient eyebrow flasher, but I don&rsquo;t think you can completely rely on that.</p>
<p>So I booked time with my barber and left out the haircut (I&rsquo;m good for a few more weeks) but did add the razor true-up.</p>
<p>When I sat down he resignedly asked &ldquo;the usual, just fix the scruff?&rdquo; and I said &ldquo;no, I&rsquo;d like to get some of that length and volume out of there.&rdquo; He started to nod vigorously, and we entered into an extended negotiation measured in finger widths (&ldquo;okay, but top of finger or bottom?&rdquo;) and ultimately settled on something that would both reveal my mouth and also let you see my neck and/or collar.</p>
<p>Then it was just closing my eyes and enjoying the hot towel, thick lather, and precision work of a sharp straight razor, including temples and neck.</p>
<p>Restorative.</p>
<p>I go all the way across town &ndash; the barber moved from near the office to even further west &ndash; but it&rsquo;s worth the train ride once a month to have a good barber.</p>
<h3 id="movie-decline-of-western-civilization">Movie: Decline of Western Civilization</h3>
<p>I rewatched Penelope Spheeris&rsquo; <em>Decline of Western Civilization</em> for the umpteenth time. X is one of my top 5 favorite bands of all time, so I love everything with them in it, even if John Doe&rsquo;s trolling over &ldquo;Johnny Hit and Run Pauline&rdquo; makes me cringer harde with every viewing.  The people around the periphery are great, too, including Club 88&rsquo;s owner, who is determined to greet the whole freak show playing out in his venue with a certain patient equanimity I hope I can equal as the world moves on around me. And I&rsquo;m grimly fascinated with Fear, and Lee Ving in particular, and his theatrical hate.</p>
<p>Punk was the first real subgenre I embraced. I was up at 2 in the morning in 10th grade, working on a paper for my journalism class, when the college radio station I&rsquo;d been listening to jazz on hours earlier suddenly crackled back to life from its post-midnight-signoff hiss because someone had snuck into the studio and announced the first (and possibly last) installment of &ldquo;Goshen College&rsquo;s Guts Radio.&rdquo;</p>
<p>Then they peeled my skull back with Fear, Black Flag, Dead Kennedys, and stuff I never heard again.</p>
<p>I mentioned it to the stoner who sat in front of me in American History and he came back the next day with the Dead Boys&rsquo; <em>Young, Loud and Snotty</em> on one side of a cassette tape, and a hastily assembled tour of more vintage punk on the other.</p>
<p>Anyhow, <em>Decline</em>: X are the odd ones out there. A punk act, yes, but with the seeds of their eventual trajectory present if you look for them. The case has been made that they were a case of tragic mistiming and I think it might be true: There they were at the height of their <em>energy</em> in 1980, but the <em>sensibility</em> they anticipated was years away from the eventual saturation it achieved with vintage scavengers and billy boys. My affection for X is undying: They were my bridge from a sullen, resentful anger toward all the normal people to a belief that maybe <em>I</em> was one of the decent people, too.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-21</title>
      <link>https://mike.puddingtime.org/posts/2023-03-21-daily-notes-for-2023-03-21/</link>
      <pubDate>Tue, 21 Mar 2023 11:03:54 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-21-daily-notes-for-2023-03-21/</guid>
      <description>Back to org-mode, a decent C25K Apple Watch app, custom Hugo RSS.</description>
      <content:encoded><![CDATA[<h3 id="back-to-org-mode">Back to org-mode</h3>
<p>Reasonable default configurations have been a pleasure of [Doom Emacs][]. Even org-mode, which I had somewhat dialed in on my own, works well enough, and maybe better, under Doom. When I took my <code>org-conf.el</code> apart I realized how many geological layers of features that sounded interesting but never made their way into regular use were sitting there, gumming things up and slowing things down.</p>
<p>I posted last night about a nicely wired up Projectile/org-mode pairing:</p>
<iframe src="https://social.lol/@mph/110059541236136990/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>Whenever I get bit by the org-mode bug, the first thing I notice and remember loving is the intertwining of text and tasks. Sitting down and making lists in an app has never felt completely comfortable to me, and the notes capabilities of a lot of task apps leave me cold. They look and feel like afterthoughts, and the text is dead and inert inside them. Once the task is done, the text is effectively gone unless you take time to pull it out and put it somewhere.</p>
<p>When your todos and text are happening on equal footing with each other, your &ldquo;todo list&rdquo; stops being a todo list and starts being a sort of log or journal. Structure your notes correctly within todos, and org-mode makes it easy to copy them into another file or hierarchy, or you can just leave them in place and keep moving.</p>
<p>Preparing for a meeting this week, I loved sketching in the things I needed to cover as headings that happened to be todos, then launching straight into notes underneath those headings, roughing in initial thoughts or leaving myself prompts without clicking into a cramped little box.</p>
<p>I loved org-mode when I worked in a status report work culture because my weekly report was also my todo list. I wrote an exporter that kept out the stuff nobody else cared about, but showed the most recent log entry in each item. As priorities shifted, my status report was always up to date. As I wrote each week&rsquo;s update, I could see the previous week&rsquo;s just below it in the item drawer. Items that were delegated, on hold, or dropped, reflected reality at the moment of export. Attempts to do similar with other tools never came close, no matter how robust their scripting libraries.</p>
<p>So, having an Emacs distro that feels very solid underfoot and presents a clean, useful, uncluttered org configuration is a real joy.</p>
<p>I am also enjoying <a href="https://beorgapp.com">Beorg</a>, an iOS/iPadOS app that works well with org-mode, syncing via iCloud, Dropbox, WebDAV, or Box. It tilts toward the todo/agenda-oriented parts of the org-mode experience, but you can edit your prose notes with it in a pinch. It can also integrate with iOS Reminders and Calendar apps, so your agenda view can reflect your org stuff and your phone stuff if you have to live in a split ecosystem for things like shopping lists. It&rsquo;s not a completely seamless experience, but it is smooth and works well.</p>
<p>And the whole experience reminds me that, speaking only for myself, as much as I think it&rsquo;s possible to get work done on an iPad, I can&rsquo;t get it done as well as I can on a laptop or desktop machine.</p>
<h3 id="c25k-phone-app">C25K phone app</h3>
<p>&ldquo;Try to get more exercise&rdquo; has found its way onto the medical agenda, so I am trying to get more exercise.  My routine over the past couple of years has involved 3 or 4 miles of walking most weekdays, and upwards of 6 or 8 on weekends. That has served me pretty well, but after a few experiments and some measuring, it&rsquo;s pretty clear that 30 minutes of running every other day is helping even more.</p>
<p><a href="http://www.c25k.com">Couch to 5k</a> has been my go-to &ldquo;get back into running&rdquo; program over the years. It&rsquo;s a slow ramp &ndash; slower than I&rsquo;d like some days. When I compare how well I&rsquo;ve kept up a running habit (and kept feeling healthy) ramping myself up vs. sticking to C25K, it&rsquo;s clear I do better letting myself be held back a little.</p>
<p>When I first did C25K I did it using a Timex Ironman and watching the stopwatch. That wasn&rsquo;t great because it kept me from just going to my running place. In early smartphone days I was happy to use an app, but wow was iOS terrible for that kind of thing back then: Music never coming back after a voice prompt, bad UI ideas, etc.</p>
<p>I&rsquo;d always hoped Apple Watch would address it, but for a few years it was even worse, and I went through a series of hacks and workarounds, but was resigned to just keeping my phone on me for runs.</p>
<p>This time around it seems Apple Watch is finally mature enough to support a standalone C25K app in the form of <a href="https://apps.apple.com/us/app/watchto5k-couch-to-5k-watch/id1517914828">WatchTo5K</a>. It&rsquo;s part of a crowded field, and there may be others that work just fine, but WatchTo5K had decent reviews and has gotten me through three weeks so far with no complaints. It just works, it&rsquo;s simple, and it talks to Apple Health so I can correlate runs with a few other biometrics.</p>
<p>The only other wrinkle isn&rsquo;t a big deal: I run in a park across the street from my house, so the watch is constantly picking up then dropping my Wi-Fi network. Even though my running playlist is downloaded to the watch, it causes the music to stutter every time I run back out of range. Putting the watch in airplane mode addresses that.</p>
<p>It&rsquo;s pretty nice to just put on my watch and Beats Fit Pros, start my playlist, start the app, and start running, with nothing else to think about or fiddle with for the next 30 minutes.</p>
<h3 id="custom-hugo-rss">Custom Hugo RSS</h3>
<p>I made a small tweak to my site&rsquo;s RSS feed, adding a shortcode to list the tags for each post and adding it to each entry&rsquo;s description. It&rsquo;s a small adaptation to reflect the ways I use my feed to cross-post to Mastodon and Twitter. Mastodon is especially on my mind, given that tags are what drives discovery. For my daily posts it&rsquo;ll be a little redundant and I guess I could build some logic in to handle that, but not today.</p>
<p>Here&rsquo;s the shortcode (<code>rss_tags.html</code>):</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">{{- $tags := .Language.Params.Taxonomies.tag | default &#34;tags&#34; }}
</span></span><span class="line"><span class="cl">{{- range ($.GetTerms $tags) }}
</span></span><span class="line"><span class="cl">  #{{ .LinkTitle }}
</span></span><span class="line"><span class="cl">{- end }}</span></span></code></pre></div>
<p>&hellip; and <a href="https://codingnconcepts.com/hugo/custom-rss-feed-hugo/#customize-rss-feed">here&rsquo;s the tutorial I used</a> to figure out how to customize the feed. It just involved changing the description element:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;description&gt;{{ .Summary | html }} &lt;br /&gt;
</span></span><span class="line"><span class="cl">  {{ partial &#34;rss_tags.html&#34; . }}
</span></span><span class="line"><span class="cl">&lt;/description&gt;</span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-20</title>
      <link>https://mike.puddingtime.org/posts/2023-03-20-daily-notes-for-2023-03-20/</link>
      <pubDate>Mon, 20 Mar 2023 09:33:02 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-20-daily-notes-for-2023-03-20/</guid>
      <description>Doom Emacs, Mackup for config backups, Rocky IV, Jedi: Fallen Order.</description>
      <content:encoded><![CDATA[<p>Well, we got busy and it was hard to keep up daily posts last week. So back at it this week.</p>
<h3 id="doom-emacs">Doom Emacs</h3>
<p>I made it a point to give myself a bunch of fussing around time yesterday, and decided to spend it on installing <a href="https://github.com/doomemacs/doomemacs">Doom Emacs</a>. In its own words:</p>
<blockquote>
<p>Doom is a configuration framework for GNU Emacs tailored for Emacs bankruptcy veterans who want less framework in their frameworks, a modicum of stability (and reproducibility) from their package manager, and the performance of a hand rolled config (or better). It can be a foundation for your own config or a resource for Emacs enthusiasts to learn more about our favorite operating system.</p>
</blockquote>
<p>There&rsquo;s a small omission: It also starts from the assumption you want to use <a href="https://github.com/emacs-evil/evil">Evil mode</a>.</p>
<p>So, the highlights?</p>
<ul>
<li>You get a splash screen with the option to restart your last session, open your org agenda, go to your config files.</li>
<li>You get a modal interface with handy menus you can open up by tapping the space bar.</li>
<li>You get a more terse config up front by uncommenting functionality in an init file and letting Doom handle a lot of presets.</li>
<li>You have to take a few more steps when you make a change because you have to run an external command to compile your config.</li>
<li>You get a little more verbosity in parts of your config because you have to frame any custom changes as post-instantiation variables for a given module.</li>
</ul>
<p>My subjective take thus far:</p>
<ul>
<li>Initially hated it because of course I did: I&rsquo;ve got Stockholm syndrome around my multi-file Emacs config, and Doom even cuts you off from using Emacs&rsquo; native Customize.</li>
<li>Went to bed thinking &ldquo;if this feels god awful tomorrow morning, when it is time to get things done, I am going to get rid of it ASAP.&rdquo;</li>
<li>Woke up feeling curious and a little eager to try it out.</li>
<li>Currently in the painful &ldquo;develop muscle memory&rdquo; phase for some basic operations, still stumbling with modal editing, but not having a pinkie poised over the control key is nice.</li>
<li>I kind of like the whole <code>doom sync</code> workflow when I make a change. A lot of weird Emacs things-that-go-wrong seem to come down to package weirdness and compile errors, and Doom does a lot to clean that stuff up.</li>
<li>A little more empathy for the ortholinear and Planck people when the space-bar is what initiates actions and there&rsquo;s less emphasis on the control key.</li>
<li>I like the preset configs for features I wouldn&rsquo;t have bothered with otherwise. I&rsquo;ve come to appreciate minimaps, and wouldn&rsquo;t have bothered with one if it weren&rsquo;t something I could simply turn on and expect to work without a lot of fiddling.</li>
<li>The theme I settled on (&ldquo;Nord&rdquo;) is coherent and well thought out, and it covers all the UI I&rsquo;ve encountered so far. One challenge with Emacs themes is the challenge with any theme, I guess, which is that you can&rsquo;t always know what&rsquo;s out there with its own notions about a good palette. As a result, you sometimes get disappearing UI elements as the foreground of something coincidentally matches the theme&rsquo;s background, etc.</li>
</ul>
<p>You don&rsquo;t have to do the whole Evil thing, either: It can be toggled off and you still get a lot of Doom affordances, but with more complex keystrokes to invoke them. I&rsquo;m keeping it on because I have time to mess with it, and because my foundational Unix user myth re: my editor religion is a matter of freak happenstance I&rsquo;ve never really reconciled myself to.</p>
<p>No verdict yet, really, besides &ldquo;gonna keep using it because it has some very sane defaults that make Emacs feel more cohesive than my hacked-together &ldquo;<code>init.el</code> of Theseus&rdquo; that started its life on an Amiga 500 in 1996.</p>
<h3 id="mackup">Mackup</h3>
<p><a href="https://github.com/lra/mackup">Mackup</a> is just this backup config thing. On a Mac you install it from Homebrew, run it, and it backs up configs for over 550 applications: Everything from Adium to zsh, with ssh, Emacs, tmux, Sublime, git, rubocop and hundreds more in between.</p>
<p>Basic features:</p>
<ul>
<li>A variety of cloud stores: Dropbox, iCloud, Google Drive, and your own filesystem.</li>
<li>Exclude lists, for the things you don&rsquo;t want backed up/syncing across machines.</li>
<li>An Include list, to narrow what it touches to explicit apps.</li>
<li>Custom files, so you can tell it to, e.g. backup your <code>~/bin</code> or something with an odd location for its config.</li>
</ul>
<p>It has a dry-run switch so you can review what it would do, and a &ldquo;no, this is awful, put it all back&rdquo; argument.</p>
<p>There are some bugs. It did something weird to my iTerm config after I forced it to, reasoning that the only reason I use iTerm is because some YouTuber told me to and so didn&rsquo;t care if I learned a Mackup limitation the hard way. It also believes that the Doom Emacs config is somewhere it is not, so I wrote a custom config for that in two minutes:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[application]
</span></span><span class="line"><span class="cl">name = My Doom Emacs
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[configuration_files]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[xdg_configuration_files]
</span></span><span class="line"><span class="cl">doom</span></span></code></pre></div>
<p>Verdict so far: It&rsquo;s fine and I&rsquo;m going to keep using it. I recently started putting more config stuff in Git and was beginning to think about how to make something similar. Glad I don&rsquo;t have to.</p>
<h3 id="rocky-iv">Rocky IV</h3>
<p>We finished up our run of the OG Rocky movies I was willing to watch with <em>Rocky IV</em> last night. The one with the Russian. Al was in her phone after the first montage/music video (of four? I lost count). I knew it was going to be awful, but I haven&rsquo;t seen it since my dad took me and Cousin Scotty to see it in the theater in 1985 and a mild spirit of completionism had descended on me.</p>
<p>It was sort of interesting to see the music video editing sensibility in the direction. Like, you could spot music video tropes in the angles and cuts. It served to make Drago, the Russian, weirdly sympathetic because some of it is bewildering, or at least seems designed to provoke feelings of bewilderment and maybe a little nausea. I think the tempo of editing is generally faster these days, but perhaps less jumpy and discontiguous.</p>
<p>Anyhow, I found myself wondering when they were going to show Drago being injected with steroids with a brief closeup of a dripping needle, then wondered how, almost 40 years later, I remembered that passing detail, then learned it was because they show the needle four or five times in case you were looking away and didn&rsquo;t get that the Russian was cheating.</p>
<p>Also, wow, this weird conflation of Soviet and Nazi ideologies where the Russians start bragging that Drago is of superior genetic stock.</p>
<p>And the lyrics in one of the music video tracks about how it feels like &ldquo;freedom is on the ropes.&rdquo;</p>
<h3 id="finished-jedi-fallen-order">Finished Jedi: Fallen Order</h3>
<p>I wrapped up <em>Star Wars Jedi: Fallen Order</em> over the weekend.
:
I get the impression it is very much A Kind of Game with a lot of the conventions people not only tolerate but even look forward in that kind of thing.</p>
<p>I found some of it frustrating until I dug into the configuration menu and found I could turn on some accessibility features that made a few recurring tasks (e.g. grabbing while jumping) less fiddly, and that allowed me to spend more time exploring and letting the story unfold than repeatedly falling to my death or tumbling to the bottom of some puzzle.</p>
<p>I learned to live with Jedi Wall Running, but never warmed up to all the moments where you have to slide down a slick mud or ice path and time jumps/grabs/wall-runs/bounces. That all felt less like Jedi Bad-Assery and more like someone decided to reskin a snowboarding game.</p>
<p>I was also a little over all the planet-hopping. You have to revisit things several times. I get that part of the way you make the power fantasy aspects of these games feel more acute is by presenting an impossible obstacle then letting the character skill up and overcome it. But that <em>could</em> take the form of presenting an impossible <em>kind</em> of obstacle and letting the player skill up and overcome one <em>just like it</em> somewhere else?</p>
<p>As a <em>Star Wars</em> property, I really enjoyed it. It&rsquo;s a lightweight story, but the whole time period between the fall of the Republic and SW:ANH has good story-telling potential, and I liked what they did with it in this game.</p>
<p>The upcoming sequel won&rsquo;t be on PS4, so &hellip; so much for all my gloating about being a trailing-edge casual who doesn&rsquo;t need the latest.</p>
<p>Anyhow, I think my next game is going to be <em>Ghost of Tsushima</em>. I went into <em>Fallen Order</em> thinking it&rsquo;d be a good way to get a little more grounded in modern Big Games, and <em>Ghost</em> is what I had in mind specifically.</p>
<p>Okay. We&rsquo;re at time. This was more of a tool for procrastination today than it should have been. I want to put in two hours on some overdue work.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Bring everyone along with inclusive leadership practices</title>
      <link>https://mike.puddingtime.org/posts/2023-03-16-bring-everyone-along/</link>
      <pubDate>Wed, 15 Mar 2023 13:46:25 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-16-bring-everyone-along/</guid>
      <description>Steps to effective, inclusive cross-functional work by leading with clarity, curiosity, and generosity.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been having an extended conversation on project governance, organizational change, and inclusive leadership with a friend who&rsquo;s been trying to help an organization move from &ldquo;stuck&rdquo; to meaningful change.  It&rsquo;s been great to see progression from &ldquo;leadership can&rsquo;t even tell me what problem we&rsquo;re trying to solve&rdquo; to &ldquo;today someone told me they feel like we&rsquo;re really getting things done.&rdquo;</p>
<p>Specific ideas they&rsquo;ve brought to their organization in the past few months include:</p>
<ul>
<li>Decision-making frameworks (like <a href="/posts/2022-05-03-using-the-daci-framework/">DACI</a>).</li>
<li>Continuous improvement (<a href="/posts/2023-01-31-make-experiment-sound-less-dangerous-/">but not open-ended faux experiments</a>).</li>
<li>Intentional change management (which is the subject of a longer post I&rsquo;m just now getting outlined).</li>
<li><a href="/posts/2022-05-03-supporting-an-open-door-culture-by-listening/">Being curious</a> about the ways in which a seemingly benign process doesn&rsquo;t work for the intended beneficiaries.</li>
</ul>
<p>People don&rsquo;t always associate those things &ndash; decision-making frameworks, change management &ndash; as enablers. Instead, they see a mountain of forms, process docs, and specialists asking them to start from the beginning so &ldquo;the process&rdquo; can have a chance to work.</p>
<p>I&rsquo;m not here to write a defense of process, because too many people have a lived experience of process that is indefensible. The kind of people I have spent most of my career working with or managing don&rsquo;t need to read a defense, anyhow: operations teams, IT groups, and services teams all understand the value.</p>
<p>Instead, I&rsquo;m here to talk about some practices cross-functional leaders can apply to their work and behavior to foster inclusion and help everybody do their best work. This applies to be people whose roles are inherently cross-functional &ndash; they lead a centralized service of some kind &ndash; and people who are stepping up to lead from within their day-to-day work in a functional group.</p>
<p>As that conversation I am having about governance, change management and inclusion has unfolded I have heard a lot about an organizational history full of weaponized, disempowering process. Conversations around new initiatives were full of distrust, nobody wanted to bring in supporting specialists from finance or HR, and every meeting was stacked with senior leaders who didn&rsquo;t participate or contribute but weren&rsquo;t willing to turn their back on the situation.</p>
<p>As we talked things through, I identified some key mindset and practices that have helped me as I&rsquo;ve led cross-functional initiatives over the years, starting with three key attitudes.</p>
<h3 id="clarity-curiosity-generosity">Clarity, curiosity, generosity</h3>
<p>I have a practice of going through my calendar and making pre-notes for meetings at the start of each day. I write down the purpose of the meeting, then I answer the question &ldquo;how do I want to show up?&rdquo; Over a year of doing that, I found three words showing up more than any other:</p>
<ul>
<li><strong>Clarity:</strong> I want to focus on what&rsquo;s important and help keep other people focused, too.</li>
<li><strong>Curiosity:</strong> I want to understand what the people around me need and how they may see things differently from me. I want to learn more about how they work and what their jobs require of them. I want to understand how their version of &ldquo;common sense&rdquo; differs from mine.</li>
<li><strong>Generosity:</strong> By knowing what&rsquo;s important to me, I can be generous: I can share control, or information I might otherwise hoard to keep control of things that don&rsquo;t matter, or show flexibility to change how I work because my particular processes and practices aren&rsquo;t good unto themselves; they&rsquo;re only as good as the outcomes they enable.</li>
</ul>
<p>These are all aspirational states, for me at least, but when I leave a meeting or 1:1 feeling like I kept them all in sight and honored them in some small way, that goes down as a &ldquo;firing on all cylinders&rdquo; interaction. They&rsquo;re the foundational mindset of leading inclusively, helping me to welcome people in and behave like someone people want to collaborate with.</p>
<h3 id="being-clear-on-what-matters">Being clear on what matters</h3>
<p>Our needs and incentives don&rsquo;t always align with the people around us, even in very directed, disciplined organizations. We may share the same top-level OKRs or goals, but underneath that are all the contradictions that come with multiple specialized groups with different jobs. Being clear on what we need for ourselves and our own teams at the start helps remove a lot of distractions and ease the tendency toward uninclusive behavior.</p>
<p>When I&rsquo;m sitting down in front of a blank piece of paper thinking about how to start building out an initiative or describe a project, I like to ask myself one question before any other:</p>
<p>&ldquo;What problem am I trying to solve?&rdquo;</p>
<p>It gives me a moment to think about where I need to end up.  It focuses me on the thing at hand, helping me disentangle this particular work from all the other things I&rsquo;ve got to think about. When I don&rsquo;t start that way &hellip; when I start with a list of outcomes or a set of preconceived milestones the writing takes on an improvisational air as I try to cover all the elements of a vision I still only see as an aggregate.</p>
<p>This is useful as a way to focus and think, and it&rsquo;s also key to showing up well when working with stakeholders. Knowing what you really need going in &ndash; understanding what problem you&rsquo;re trying to solve, what outcome you need to achieve &ndash; helps you remember what&rsquo;s important and set aside things that aren&rsquo;t. In return, the list of things you have to control or worry about shortens, and you can act with more generosity.</p>
<h3 id="cast-a-wide-net">Cast a wide net</h3>
<p>Grounded in your goals and objectives, you need to cast a wide net as you organize your stakeholders.</p>
<p>This is less a question of &ldquo;what:&rdquo;</p>
<ul>
<li>People working in other business units with a stake in the outcome who have to contribute and even drive parts of the work.</li>
<li>People working in support functions (e.g. finance, HR, IT) who can provide support in the form of communications best practices, access to centralized resources, or just smoothing out the path through things like tool adoption or expenses that have to be shared.</li>
</ul>
<p>It&rsquo;s more a question of &ldquo;how:&rdquo;</p>
<ul>
<li>Talking to the obvious stakeholders ahead of time and asking them if you&rsquo;re missing anyone in their organization, or someone they regularly work with in another.</li>
<li>Sharing your stakeholder list early, ahead of any kickoffs, so the network you just created for your project or initiative can help you fill gaps.</li>
</ul>
<p>I like to think in terms of &ldquo;day 0&rdquo;: Pre-kickoff socialization and check-ins, before the story goes from you asking, &ldquo;should I include you?&rdquo; to them saying, &ldquo;I heard there was a meeting I wasn&rsquo;t invited to.&rdquo; I know which conversation starter I&rsquo;d prefer.</p>
<h3 id="communicate-roles-and-responsibilities-clearly">Communicate roles and responsibilities clearly</h3>
<p>Another part of &ldquo;day 0&rdquo; is taking an initial swing at understand roles and responsibilities: Describing where everyone fits in, how they can best contribute, and where in the work they should be shifting between offering input or consultation, or actually owning and driving.</p>
<p>It&rsquo;s helpful to learn how to think in terms of the <a href="/posts/2022-05-03-using-the-daci-framework/">DACI decision-making framework</a>, even if you never sit down and write up an actual DACI matrix:</p>
<ul>
<li>Who decides this is done to standard?</li>
<li>Who makes sure things are getting done?</li>
<li>Who needs to be consulted for this to be successful?</li>
<li>Who needs to know what we&rsquo;re doing (or what we decided)?</li>
</ul>
<p>It&rsquo;s helpful to distribute this ahead of a kickoff, too, along with the initial agenda. It will often jog peoples&rsquo; memories about other potential stakeholders, and it will give them a chance to have the conversations they need &ndash; with their teams or leadership &ndash; to get clarity on their own goals, or to speak up if you missed how they can best contribute.</p>
<h4 id="assertiveness-is-okay">Assertiveness is okay</h4>
<p>Assertiveness about roles and responsibilities sometimes feels like the opposite of &ldquo;inclusive&rdquo; or &ldquo;welcoming.&rdquo; You&rsquo;re telling people where they fit into a project or process. Sometimes, if you&rsquo;re being realistic, you know they might not like what you have to say or they may be working for a leader who coaches toward keeping control of a situation.</p>
<p>Remember a few things:</p>
<ul>
<li>
<p>They might not even react that poorly. People are often relieved when they learn that all you want is consultation, provided they also see a good-faith effort to listen and act on what they told you.</p>
</li>
<li>
<p>Some people are resistant to &ldquo;merely&rdquo; being informed because they&rsquo;ve lost confidence that that will even happen, and that they&rsquo;ll miss out on something important to them. That&rsquo;s why you take the time to cast a wide net in the first place: You&rsquo;re on a better footing to build trust if you included them to begin with.</p>
</li>
<li>
<p>Being clear on what you need makes it easier to say &ldquo;you know what, for this part of the process where you&rsquo;re the one doing most of the work you should drive design and approach &ndash; what matters to me is over here, and I&rsquo;ll drive that.&rdquo;</p>
</li>
</ul>
<p>It&rsquo;s a fine balance, being assertive around roles and responsibilities while also remaining curious, and generous. The clearer you are on what you really need, and the less attached you are to an abstract conception of what it means to &ldquo;be in control,&rdquo; the easier it is to be a kind of &ldquo;assertive&rdquo; people respect.</p>
<h4 id="be-ready-to-negotiate">Be ready to negotiate</h4>
<p>In organizations trying to scale up there are a lot of business processes unique to each group that were never built with other groups in mind. Specialists in support services layer on processes and practices meant to smooth out their own work. They&rsquo;re also frequently oversubscribed, and struggling to figure out how they can participate. Sometimes they can come off as rigid or disinterested in deviating from their particular processes. Curiosity is a useful mindset. You can ask:</p>
<ul>
<li>If we need to move faster than your process allows, which parts matter the most to you?</li>
<li>Can we do some of this in parallel?</li>
<li>Will you accept a commitment to do a fast followup and &ldquo;fix it in post&rdquo; if we need to deliver something before all your work is done?</li>
</ul>
<p>Just lead with the goals and objectives you made sure you were clear on before you even sent out the first invitation and make clear you&rsquo;re curious and interested about their own goals and objectives.</p>
<h3 id="record-and-communicate-your-decisions">Record and communicate your decisions</h3>
<p>Once you&rsquo;re up and running with your stakeholders, there&rsquo;s still a possibility you&rsquo;ve missed someone:</p>
<ul>
<li>A person who should be participating but isn&rsquo;t &ndash; your network just didn&rsquo;t catch them.</li>
<li>Someone who&rsquo;s affected by what you&rsquo;re doing and needs to be informed, even if they aren&rsquo;t in a position to make decisions about your work.</li>
</ul>
<p>People become anxious and controlling when they&rsquo;re not informed, and the people who need work on consistent communications learn the wrong lessons from the anxious and controlling people around them: They double down on their uncommunicativeness and unwillingness to include people.  It&rsquo;s the worst kind of negative feedback loop.</p>
<p>To head that off, you should be documenting your decisions in the open, whether that&rsquo;s a regular communication in the right forum or just making sure your decisions are captured in a wiki or accessible project board.</p>
<p>It&rsquo;s helpful to think of project meetings and documentation in a manner similar to the &ldquo;sunshine laws&rdquo; you find in government:</p>
<ul>
<li>Meetings and communications in the working project group are relatively privileged: People should feel free to express concerns, address potential management and communications challenges, and &ldquo;think aloud&rdquo; in a way that enables creativity.</li>
<li>Agreed-upon actions and decisions have to be publicly communicated in a forum that allows feedback.</li>
</ul>
<p><a href="/posts/2022-05-03-so-you-want-to-write-an-rfc/">I like RFCs</a> because they make the ideation and decision-making process more transparent, and because they provide an opportunity to explain roles and responsibilities up front. Seeing the history of a decision &ndash; then seeing who made the decision, and understanding whom to appeal a decision with &ndash; gives people more confidence in the decision. If they feel like they are valued stakeholders in the process who are being informed about things that might affect them they&rsquo;ll feel better about participating.</p>
<p>As with every tool that adds an element of structure and formality, people might feel uncomfortable:</p>
<p>It&rsquo;s sometimes hard to work in the open, especially if there are trust issues to deal with. It often helps to book time with people new to written collaboration and talk through expectations, or to share prior art as a model. It also helps to simply take a few minutes to let people talk out a concern they&rsquo;re struggling to commit to writing. We often experience tension between telling people what we need and framing it in a way that&rsquo;s okay in the context of showing up collaboratively. Giving people a little space to just say it out loud helps them figure out how to think about it more constructively.</p>
<p>Another tool to consider is a simple decision registry: A place where decisions are consistently recorded, including who made the decision and links to supporting documents or meeting notes, for anyone to review.</p>
<h3 id="learn-why-passive-voice-isnt-just-a-grammar-teachers-hangup">Learn why passive voice isn&rsquo;t just a grammar teacher&rsquo;s hangup</h3>
<p>In a nutshell, &ldquo;the passive voice&rdquo; involves sentences where nobody does anything and everything is acted on by &hellip; something or someone unspecified.</p>
<p>The <strong>grammatical</strong> reason to avoid the passive voice is that it is usually less efficient and elegant:</p>
<p>&ldquo;It was decided to proceed with the alternative proposal&rdquo; is a poor choice when &ldquo;Joan decided to proceed with the alternative proposal&rdquo; is sitting right there.</p>
<p>The <strong>social</strong> reason to avoid the passive voice is that it obscures accountability, dilutes responsibility, and hides the decision-makers. People sometimes think it is a trust-building choice because of a mistaken belief that it sounds more formal and business-like, but it has the opposite effect.</p>
<p>The <strong>operational</strong> reason to avoid it is that it makes a process document impossible to read or use, because people start from &ldquo;what is my part in this process?&rdquo; It is very hard to search for your team&rsquo;s responsibilities in a document that never says who&rsquo;s doing anything.</p>
<h3 id="be-ruthless-in-eliminating-complexity">Be ruthless in eliminating complexity</h3>
<p>If you&rsquo;re a process person &ndash; if you thrive on thinking through a flow chart, covering all the angles, de-risking each step &ndash; then you are more likely coming from a place of comfort with a certain kind of complexity, and of some familiarity with all the systems you have to interact with.</p>
<p>That is not everybody.</p>
<p>As I&rsquo;ve worked on an essay about a change management document I have used a lot, I&rsquo;ve thought a lot about the times I put that document in front of a leader trying to figure out how to make a needed change then watched their faces fall as they saw two pages of questions and tables. I pared it down over time as I reminded myself of the idea that &ldquo;if it&rsquo;s not obvious to the person you&rsquo;re trying to help, it is not obvious.&rdquo; The version I&rsquo;m looking forward to sharing shifts a lot of the questions people were expected to answer completely to prompts they could think through without writing a novel.</p>
<p>One team I joined had  a particular JIRA workflow that couldn&rsquo;t start until the customer successfully completed a 12-question form that substantially repeated itself and made clear that no matter what you said in each of the &ldquo;three or four paragraphs recommended&rdquo; fields, you were going to have to re-explain.</p>
<p>When I was put in a position to do something about that, I changed the twelve questions to three:</p>
<ol>
<li>What problem are you trying to solve?</li>
<li>(Optional) Have you identified any solutions you&rsquo;d like to try?</li>
<li>Does your departmental leader know you&rsquo;re asking for this?</li>
</ol>
<p>Anything else we could handle by sending a business systems analyst or architect to ask, and we stopped the practice of making people fill out associated tickets: BSAs, project managers, and other specialists knew what we cared about and offered to capture that in a meeting where people could just talk out their needs.</p>
<p>I wish I could have collected better metrics about that change, but it was easier to toss the old workflow with all of its conditional logic and triggers than try to preserve the 25 (!!!) tickets one customer request would generate. What I do know is that group reviews of the backlog shifted from months-old requests languishing to a more frequent &ldquo;we opened this last week, did we &hellip;&rdquo; &ldquo;Yes, it&rsquo;s moving on to a PoC.&rdquo;</p>
<p>When you&rsquo;re working hard to make the process more accessible to the people you&rsquo;re supporting, most of them can tell. That makes asserting roles and responsibilities easier, and it makes communicating decisions easier, because you&rsquo;re building trust that the process is there to serve and accommodate them, not marginalize and disempower them.</p>
<p>So, bias toward simplicity, and if you&rsquo;re responsible for designing or driving a process, take some responsibility to ease peoples&rsquo; interactions with it. If you know writers or UX designers, they&rsquo;re great people to bring in for a quick consultation: Writers can help clarify language and expose faulty reasoning, and good designers excel at taking workflows apart and considering how people can interact with them more successfully.</p>
<h3 id="-and-be-patient">&hellip; and be patient</h3>
<p>Part of an cross-functional leader&rsquo;s job is untangling mistrust and resistance. Getting people to participate in a more inclusive process can be challenging because they may have learned over years that &ldquo;The Process People&rdquo; are best worked around or avoided, or that they have to think in terms of control instead of outcomes.</p>
<p>When I first introduced RFCs to a group as a way to make ideation and decision-making more transparent, some people didn&rsquo;t participate: They didn&rsquo;t see the point and hadn&rsquo;t seen cross-functional conversations about shared problems work. Within a quarter, though &ndash; having seen a few play out and having learned they could talk through things like a disagreement about roles and responsibilities &ndash; people who&rsquo;d been conspicuously silent were kicking off their own RFCs and driving accountable behavior around them.</p>
<p>When I first introduced decision registries to a governance group, the initial few responses around the company were &ldquo;who the hell put this group in charge,&rdquo; but because we were sharing meeting notes and tickets publicly, and then writing down our decisions, people went from that early hostility to, &ldquo;I&rsquo;m affected by this decision and I don&rsquo;t see myself in any of the docs, can I be included?&rdquo;</p>
<p>Of course they could. We wanted to help everyone do their best work, and that started by  trusting people to be collaborative, and making sure they saw the structures we built and the way we worked as something that enabled their participation instead of locking them out.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Pleasures of a Small Mastodon Instance</title>
      <link>https://mike.puddingtime.org/posts/2023-03-13-the-pleasures-of-a-small-mastodon-instance/</link>
      <pubDate>Mon, 13 Mar 2023 09:36:41 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-13-the-pleasures-of-a-small-mastodon-instance/</guid>
      <description>Not a firehose and not a tiny village.</description>
      <content:encoded><![CDATA[<p>A lot of things landed for me about the same the Fall &lsquo;22 Twitter Exodus to Mastodon began, but mostly I was wrapping up my three-month-long transition out of Puppet and suddenly had a windfall of time and a ton of nervous energy.</p>
<p>I remember being very excited about the discourse. I probably drove Al to mild distraction recounting all the debates about content warnings and the intersecting (and conflicting, and orthogonal) needs of all the people finding their way onto Mastodon.</p>
<p>I had been on Mastodon for most of the year prior, but in a very unengaged way on a photography instance where I kept messing up and cross-posting stuff that didn&rsquo;t quite belong. So I paid my $5 and moved to <a href="https://omg.lol">omg.lol&rsquo;s</a> instance. Then I followed a ton of people (for me).</p>
<p>For a couple of months &ldquo;normal&rdquo; Mastodon use was scrolling through my entire Home feed, then skimming the Federated feed. I eventually figured out the Federated feed was where I really did not want to be, and I ended up thinking about it the same way I think about Twitter today: Something I might happen into briefly, nowhere I wanted to stay. I didn&rsquo;t spend a ton of time in the Local feed.</p>
<p>Something kind of cool happened, though, as I stopped looking at the Federated feed and would find my way into Local more often if I had a few minutes to poke around: I started recognizing more people as their posts went by, and found the folks in Local were more likely to engage, too. I don&rsquo;t know how many active users there are on omg.lol&rsquo;s instance, but few enough that I recognize a lot of names and have gotten to know peoples&rsquo; assorted interests and tics, but also enough that there are still plenty of &ldquo;oh, I don&rsquo;t recognize this person&rdquo; moments.</p>
<p>Over time I&rsquo;ve found that I like to start a Mastodon session with Local then move on to Home for a skim. As I&rsquo;ve thought about why, I guess it&rsquo;s just that blend of familiarity that comes from being a smallish pond, with a little entropic salt for serendipity.</p>
<p>I think there are tradeoffs because you&rsquo;re sort of out on the rim of the Fediverse and that affects what comes over the transom of your Local. I split the difference with a list of people I know outside my Local whom I trust to stick stuff in my timeline either by checking that list or by adding notifications for their posts.</p>
<p>It all adds up to making Mastodon something I enjoy, but can set aside for a few days at a time. There&rsquo;s the comfort of the familiar in a small town where you may recognize most people even if you don&rsquo;t know them all. And the fun of serendipity and chance for randomness of a small city you still feel like you could walk from end to end in an hour or so.</p>
<p>If anyone asked me about a starting instance (and nobody does, because my friend circles involve people who already have an opinion about Mastodon and people who are passionately disinterested in any social media) I&rsquo;d encourage them to look for sub-2000-member ones that appear to have legs on them.</p>
<h3 id="comparing-to-microblog">Comparing to micro.blog</h3>
<p>I think a smallish instance has also worked better for me than micro.blog, which has added enough friction to interaction and discovery that I get stuck. I <em>like</em> being able to simply favorite a post without having to say anything in particular. I like being able to Boost a post without any particular comment. I like the emphasis on pinned introductory posts. I like hashtags as a discovery tool (both incoming and outgoing).</p>
<p>I do appreciate the spirit of micro.blog&rsquo;s design decisions and what they&rsquo;re trying to avoid recreating, but my own experience of those decisions has been to feel a little claustrophobic and a little compelled to participate at a level that is more than I want.</p>
<p>And I do feel a little suspicious of the reasoning sometimes. I don&rsquo;t know how much was driven by data and study and how much, like Mastodon&rsquo;s most notorious reaction-driven design decision &ndash; anti-quoting &ndash; is narrow caution and wrong lessons learned.</p>
<p>Anyhow, it is nice to be spoiled for choice. micro.blog works really well for some people and I appreciate the recent attempts to build a bridge to the Fediverse while staying true to their view of the world, even if it is not mine. I&rsquo;ll take that over anything coming out of the big corporate plays.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Post-Creed Rocky I-III viewing</title>
      <link>https://mike.puddingtime.org/posts/2023-03-12-rocky-i-iii-at-home/</link>
      <pubDate>Sun, 12 Mar 2023 22:13:58 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-12-rocky-i-iii-at-home/</guid>
      <description>Strange to realize this franchise is almost 50 years old.</description>
      <content:encoded><![CDATA[<p>We went to see <em>Creed III</em> in the theater last week, which reminded me I haven&rsquo;t seen any of the original <em>Rocky</em> movies in a long while. Al said we had to watch the first two <em>Creed</em> movies again, so we did that, then turned our attention to Rockies I-III.</p>
<h3 id="rocky">Rocky</h3>
<p>I love the look and texture of the first one. Closing in on 50 years old, it&rsquo;s all low light and film grain.</p>
<p>There&rsquo;s some cultural stuff going on that seems alien now: Mass culture still treated Italians as a separate ethnicity. If you were consuming the mass media of your grandparents&rsquo; prime years, you had a sense there was some still some bigotry attached not too many years before, but the &rsquo;70s were much more celebratory: Lots of Italian protagonists in t.v. and movies that played with the tensions of those past stereotypes, and I guess I remember that being Italian was sort of short-hand for working class, too. It was a very soft version of the idea that &ldquo;race is the modality in which class is lived&rdquo; in the final moments of a particular identity before it was subsumed into &ldquo;whiteness&rdquo; by American media.</p>
<p>This time around I also found myself thinking about how much the camera is just with Stallone the entire time. In his &lsquo;76 review, <a href="https://www.rogerebert.com/reviews/rocky-1976">Roger Ebert says</a>:</p>
<blockquote>
<p>&ldquo;Its story, about a punk club fighter from the back streets of Philly who gets a crack at the world championship, has been told a hundred times before. A description of it would sound like a cliche from beginning to end. But <em>Rocky</em> isn&rsquo;t about a story, it&rsquo;s about a hero. And it&rsquo;s inhabited with supreme confidence by a star.&rdquo;</p>
</blockquote>
<h3 id="rocky-ii">Rocky II</h3>
<p>Harder to watch because the setup involves Rocky screwing up his newfound fame, and Stallone plays him &hellip; dumber? Al wondered if he was trying to portray the effects of <em>Dementia Pugilistica</em>. I thought it was a reasonable depiction of what someone like Rocky might do, even if the performance was grating.</p>
<p>On the whole, it&rsquo;s just darker, slower, and more difficult to watch; and also more jerky in its progression.</p>
<p>Awesome media artifact: Roger Ebert <a href="https://www.rogerebert.com/interviews/watching-rocky-ii-with-muhammad-ali">writing about watching <em>Rocky II</em> with Muhammed Ali</a>:</p>
<blockquote>
<p>&ldquo;&lsquo;For the black man to come out superior,&rsquo; Ali said, &lsquo;would be against America&rsquo;s teachings. I have been so great in boxing they had to create an image like Rocky, a white image on the screen, to counteract my image in the ring. America has to have its white images, no matter where it gets them. Jesus, Wonder Woman, Tarzan and Rocky.&rsquo;&rdquo;</p>
</blockquote>
<h3 id="rocky-iii">Rocky III</h3>
<p>The 99-minute-long Mr. T installment of the series. Yikes. I&rsquo;m committed to getting to <em>Rocky IV</em> so this was a necessary stop. The most gobsmacking part of it is the way Mr. T&rsquo;s &ldquo;Clubber Lang&rdquo; is portrayed as a snarling animal who sexually menaces Adrien, but Rocky&rsquo;s brother-in-law Pauly is there to say some racist stuff, and since we&rsquo;re to read Pauly as a racist boob, then we&rsquo;re to believe the movie&rsquo;s heart is in the right place. Jesus. See Muhammed Ali in the previous section.</p>
<p>Yeah. No. Not a lot of time for this one.</p>
<p>I read recently that Stallone wasn&rsquo;t in <em>Creed III</em> because he disagreed with the direction  the script went (&ldquo;too dark&rdquo;), and because he&rsquo;s got a long-standing beef with Irwin Winkler, the franchise&rsquo;s producer all these years. I read a theory that the script he rejected called for Rocky to die of the illness they set him up with in the first <em>Creed</em> movie and he wasn&rsquo;t having it. Personally, I thought he got sent off fine in <em>Creed II</em>, quietly, after turning in a pretty good performance as an aging Rocky in <em>Creed I</em> and <em>II</em> that actually convinced me going back to the originals was a good idea at all.</p>
<p>I will say that one of the <em>Creed</em> series&rsquo; achievements is selling the viewer on the iconic, mythic weight of a franchise that stopped working after the first sequel.  It&rsquo;s an amazing rehab job.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Heat at the Hollywood</title>
      <link>https://mike.puddingtime.org/posts/2023-03-12-heat-at-the-hollywood/</link>
      <pubDate>Sun, 12 Mar 2023 17:23:17 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-12-heat-at-the-hollywood/</guid>
      <description>Nice night at the movies with one of the best American crime dramas ever.</description>
      <content:encoded><![CDATA[<p>We went to see <em>Heat</em> at the Hollywood Theater on Saturday night.</p>
<p>I would have to think for a while to name a better American crime drama. The mind goes to <em>Goodfellas</em>, <em>The Departed</em>, <em>The Godfather Parts I &amp; II</em>, <em>L.A. Confidential</em> and on and on, but there is something about <em>Heat</em>. There&rsquo;s so much going on in nearly three hours. Michael Mann takes so much time to draw out characters he could have chosen to leave out or give less time to, so it feels luxurious and full.</p>
<p>I think history will be kinder to Robert DeNiro&rsquo;s performance than it has been to Pacino&rsquo;s, but Pacino reigned it in when it was important. In 1995 he was getting rewarded a lot for a certain kind of explosiveness.</p>
<p>It was a great audience, too. Appreciative, but with a good sense of humor about it when a few of the lines don&rsquo;t work so well. I wonder how many of the few clunkers there are is about the style of the time and how much is just &ldquo;that wasn&rsquo;t written so good.&rdquo;</p>
<p>And it was great to just see it on the big screen. I&rsquo;ve never seen it on anything bigger than a 42&quot; screen. I loved Mann&rsquo;s LA landscapes having room to stretch, and for some of his action camera work to become overwhelming.</p>
<p>Every time I go to a movie at the Hollywood I wonder why I&rsquo;m not going to more. <em>Enter the Dragon</em> is coming soon and I think I have go to.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-10</title>
      <link>https://mike.puddingtime.org/posts/2023-03-10-daily-notes-for-2023-03-10/</link>
      <pubDate>Fri, 10 Mar 2023 09:22:34 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-10-daily-notes-for-2023-03-10/</guid>
      <description>Reading and watching Sharp Objects, Panic&amp;rsquo;s Nova, lens corrections defended, forced institutionalization, NPR.</description>
      <content:encoded><![CDATA[<h3 id="sharp-objects">Sharp Objects</h3>
<p>Al &amp; I finished <em>Sharp Objects</em> (the HBO series) last week. I checked <em>Sharp Objects</em> (the novel) out on my Kobo right after.</p>
<p>The series was respectful of the source material, and it was an effective translation on a few levels: Where the novel requires a certain attentiveness from the reader, the series &ndash; through its use of disjointed flashback &ndash; makes the viewer stretch a little. There were insertions in the series that feel almost scientific in the way they rebalance the narrative. In order to afford the dreamy, disorienting flashbacks, a few characters are pulled into sharper relief and a few situations tip it closer to melodrama than the novel went.</p>
<p>The series pacing was interesting, too: The first three or four episodes take their time building up, and they&rsquo;re a little exhausting. We went on a &ldquo;one ep a night&rdquo; budget for those. In the back half it all tips over and we wanted to go two at a time. It was more challenging than the source material.</p>
<p>I don&rsquo;t always have the patience for this kind of series. Al tends to like them a little more and really enjoys the ur-genre of slow, psychological crime drama that seems to come out of Europe a little more than the U.S. The last time I sat through one of these was <em>Mare of Easttown</em>, and I liked that one a lot, too.</p>
<h3 id="panics-nova">Panic&rsquo;s Nova</h3>
<p>I&rsquo;ve been using Sublime Text a lot lately, but got a case of the fidgets and decided to give <a href="https://nova.app">Panic&rsquo;s Nova</a> another try. I&rsquo;ve had a license for a while, but I bought it during a previous web jag then forgot about it.</p>
<p>Stuff I&rsquo;m enjoying this go-round:</p>
<ul>
<li>&ldquo;Tasks,&rdquo; which work by project similar to Sublime&rsquo;s build systems. I like being able to fire up a Hugo preview server within the app.</li>
<li>Git integration, both as a matter of making it easy to stage, commit, push, and make branches but also with the inline Git blame stuff. Sublime pushes you toward their own Git client. I don&rsquo;t know what there is in the extension ecosystem there.</li>
<li>GUI config, which sounds weird but after a few month&rsquo;s of Sublime&rsquo;s JSON configuration and the friction it adds, it&rsquo;s nice to just open a config panel, see an option, add a value, and go.</li>
<li>Nice little bits of UI flare, like the brace matching beacon.</li>
</ul>
<p>It feels more like Coda or Espresso than it feels like Sublime or TextMate, which is to say leaning heavily toward a certain kind of web developer, but the extensions and build systems feel worth exploring more, and probably make it good for all-rounder types who bounce between a static site, utility scripting, and frameworks like Rails or Sinatra.</p>
<h3 id="software-lens-corrections-defended">Software lens corrections defended</h3>
<p><a href="https://www.dpreview.com/articles/2128193923/a-distortion-of-the-truth-here-s-why-we-re-not-against-software-lens-corrections">DPReview on software lens corrections</a> and how they&rsquo;re okay? It&rsquo;s photography, so of course there&rsquo;s a controversy at all. I do know I was shocked when I trialed DX Photolab and processed a few raw files from my Q2: The digital correction with that lens even gets rid of the Leica-supplied lens hood, so without automatic correction turned on in PhotoLab I thought something had gone horribly wrong. Then I turned it on and the pictures went back to the usual gorgeous Q2 output.</p>
<p>The article makes a compelling case: It helps keep complexity and cost down and it&rsquo;s used in a way that is amenable to mathematical correction. I&rsquo;m grateful for the tiny &ldquo;Fujicrons&rdquo; in my Fujifilm kit, and I suspect they&rsquo;re exactly the kind of lens that is enabled with digital correction.</p>
<h3 id="jacobin-on-involuntary-hospitalization">Jacobin on involuntary hospitalization</h3>
<p>Jacobin is one of the few consistent voices on the ways in which <a href="https://jacobin.com/2023/03/mental-asylums-welfare-state-involuntary-incarceration-hospitalization/">we are failing the poor and mentally ill</a>. If I need someone to bust whatever neoliberal frame I&rsquo;ve succumbed to on issues like public housing, health care, or mental health treatment, Jacobin pretty reliably manages that for me.</p>
<p>Something I appreciate about this piece is the way in which the writer stays clear of a certain rhetorical trope that&rsquo;s become common on the left liberal side of the homelessness/mental health care debate.  They&rsquo;re willing to acknowledge that mental illness and addiction are prominent complicators.</p>
<p>In Portland media, at least, there&rsquo;s an almost ritualistic need to say these things are not &ldquo;primary drivers.&rdquo; I understand why that is, the way I understand why any degraded discourse instills a need to checkmate &ldquo;the other side,&rdquo; but Oregon has some of the worst mental health and addiction care in the nation, and mental illness and addiction are huge complicators in our homelessness crisis. Saying so isn&rsquo;t always some sort of rhetorical feint or victim-blaming.</p>
<p>Anyhow, the article isn&rsquo;t about that.  It is about why this country&rsquo;s mental health care is in such a tragic shambles and why forced institutionalization is not the answer.</p>
<h3 id="npr">NPR</h3>
<p>I have a phone-based smart alarm tied to the Hues in my room. It senses when I am stirring and gently creates a Hue-driven &ldquo;dawn&rdquo; up to 30 minutes before I want to get out of bed. In the winter it is the best.</p>
<p>I also have a clock radio set to play NPR at my hard wakeup time.</p>
<p>This morning I was especially irritated by NPR and found myself wishing for newscasts that used to be more common on AM radio a long time ago.</p>
<p>When I was a kid in Indiana the parents on our block took turn hosting the kids waiting for the school bus during the winter. You&rsquo;d get up in the dark, bundle up, go nextdoor or across the street and stand around in the living room of the hosting family waiting for the bus to honk, or spot its flashing white light reflecting off the walls of the still mostly unlit house.</p>
<p>One of the houses in the bus-waiting coop had a kitchen in the back lit with fluorescent lights, and the mom played AM radio news. I&rsquo;d stand in the living room and smell their breakfast and see her moving around back there, across the living room and through the dining area you get in old houses. You&rsquo;d hear professional radio newscasters reading the headlines in summary, maybe with some recorded audio clips. You&rsquo;d hear financial news in the form of interest rates, and stock market indexes, and the station they listened to also had commodities prices. Then a few top 40 songs from previous decades and a ton of ads from local merchants.</p>
<p>There was something fundamentally square yet wholesome about the whole thing in its wildly variable information density: I started each day the bus-waiting co-op convened at the Weighoff house aware of five or seven top stories, the general state of key Wall Street indexes, and the overnight price of corn. I also became very familiar with a version of &ldquo;Morning Has Broken&rdquo; that either predated Cat Stevens&rsquo; interpretation, or was piped in from an alternate universe where the Lawrence Welk Singers reigned supreme.</p>
<p>It didn&rsquo;t feel like anybody was swinging for a Peabody Award. It was nothing anyone would describe as &ldquo;smart&rdquo; or &ldquo;engaging.&rdquo;</p>
<p>NPR does about five minutes of straight news at the top of every hour, and then it&rsquo;s on to the interviews and features, and there are mornings I find those cloying, grating, or both. I think the answer may be to either drop the clock radio, or pick a music station with top-of-the-hour headlines, or find a straight-news podcast I can autoplay on an alarm.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-09</title>
      <link>https://mike.puddingtime.org/posts/2023-03-09-daily-notes-for-2023-03-09/</link>
      <pubDate>Thu, 09 Mar 2023 22:11:33 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-09-daily-notes-for-2023-03-09/</guid>
      <description>Interviews &amp;amp; job search stuff, Jedi: Fallen Order and Pokemon Sword, weblog.lol writing about Git.</description>
      <content:encoded><![CDATA[<h3 id="job-stuff">Job stuff</h3>
<p>I got a little jostled out of the routine this week thanks to a couple of interviews (yay!) and the prep that goes along with them, then the inevitable and squirmy paralysis of post-interview &ldquo;well, now what?&rdquo;. I also got some writing energy out of the way with <a href="https://mike.puddingtime.org/posts/2023-03-07-retail-manager--wholesale-manager/">a quick post that riffed off one of the interview topics</a>.</p>
<p>I shared the post on LinkedIn. It&rsquo;s something I need to start doing and have been a little blocked on. It has been a hard platform to figure out, and I figured out some things from how it worked this time that reminded me that I used to write a lot of things for a living and had to figure out ways to get people to be interested in them, then keep them around.</p>
<p>The experience also led me to remember I&rsquo;m trying to accomplish something here besides &ldquo;post things on LinkedIn,&rdquo; so I roughed in a little ad spot at the bottom of posts here that I&rsquo;ll have in better shape for next post.</p>
<p>The interviews themselves were good experiences. When I think of the stuff I ought to be going after I think about three or four ranked categories, and these were first- and second-ranked opportunities. I left them feeling like I gave a good accounting of myself, knew where I felt a little soft, and felt &ldquo;in the pocket&rdquo; enough to watch myself and learn from those soft moments.</p>
<p>The other thing that occurred to me, after having decent experiences, is that I didn&rsquo;t realize how much my last months at Puppet affected me. There&rsquo;s more to write there, and I keep thinking about how that would look, but it&rsquo;s not quite time.</p>
<h3 id="star-wars-jedi-fallen-order-pokemon-sword">Star Wars Jedi: Fallen Order; Pokemon Sword</h3>
<p>The past week or so I&rsquo;ve been very absorbed by <em>Pokemon: Sword</em> and <em>Star Wars Jedi: Fallen Order</em>. The former is just me realizing I&rsquo;m completely illiterate where Pokemon is concerned and wanting something sort of low stakes to play. The latter was just dirt cheap on the PS4 online store and I figured &ldquo;why not?&rdquo; after a decent experience playing through <em>Titanfall 2</em>.</p>
<p>I find Pokemon engaging in a sweet, silly way. It has moments where it crawls and I want some of the interactions it forces on you to end, but it&rsquo;s so lightweight and breezy and simple to grok that it makes a nice thing to sort of zone out to.</p>
<p><em>Fallen Order</em> is the reason Pokemon feels like a little vacation. I am vacationing from <em>Fallen Order</em>, which is sometimes infuriating.</p>
<p>I think it is infuriating but I also suspect it is very much a product of the standard gaming vernacular. I just haven&rsquo;t played many modern console games and never really touched things like <em>Fallen Order</em> when I <em>was</em> playing. I guess I got through a few <em>Tomb Raider</em> installments, which is pretty similar, but that was back in PS2 days.</p>
<p>So, infuriating:</p>
<ul>
<li>You do a lot of running around back and forth between planets, getting stymied on Planet A, going to Planet B and getting a new capability, schlepping back to Planet A to use the capability, then back to Planet B because you found a thing on Planet A that tells you to go there, oh but there&rsquo;s Planet C, etc.</li>
<li>Some of the level design seems sadistic. I don&rsquo;t feel accomplished when I finally get past some &ldquo;jump then grab then swing then jump then run then jump again&rdquo; &hellip; puzzle?</li>
<li>You&rsquo;re constantly reminded you are playing a game. Over-extended and beat up? You can rest to heal and get back healing pod things, but the game resets all the NPCs and monsters (same as it does if you leave a planet and come back). There are a few NPC tableaus meant to tell little stories or set the tone that you can see upwards of six or seven times, playing out the exact same way each time.</li>
</ul>
<p>I stick with it, though, because I like other parts of it. It&rsquo;s nice to look at, it&rsquo;s a Star Wars power fantasy thing and you can do badass Jedi things with a sensible enough backstory to explain how you can both be a badass but not be a completely actualized one just yet.</p>
<p>I guess it frustrates me because if we&rsquo;re to accept that &ldquo;games can be art,&rdquo; the way we assess the artistry of any game surely has to be about that balance between game mechanics and narrative flow: The ability of the game designer to engage your interest in feats of hand-eye coordination while also keeping things moving along. I think <em>Fallen Order</em> misses some here.</p>
<p>But I also accept I just haven&rsquo;t played many games like it and that the things currently annoying me &ndash; fussy mechanics and contrived &ldquo;swing from this, wall-run along that&rdquo; &ndash; are probably just normal to most gamers. I do find myself getting better at appraising puzzles and doing more of the sort of lateral-within-the-limits-of-your-skill-tree thinking I remember doing when I played more games.</p>
<p>I&rsquo;m treating <em>Fallen Order</em> as training for <em>Ghost of Tsushima</em>.</p>
<h3 id="writing-about-git-for-beginners">Writing about Git for beginners</h3>
<p>I also spent some post-interview nervous energy on the Git publishing guide for weblog.lol, which I&rsquo;ve already done a quickstart guide for.</p>
<p>I went into the project thinking I was going to avoid doing much for beginning Git people, but the more I tried to write in things that would be helpful to them, the more I realized it would just be frustrating for new people and distracting for experienced people.</p>
<p>So I redirected and have about 2,000 words on &ldquo;what is Git? Why bother?&rdquo; and getting set up. I chose to leverage GitHub&rsquo;s own documentation for things like setting up an account and getting the GitHub Desktop app set up, and spent my own energy on explaining version control in the simplest terms possible.</p>
<p>The bulk of that work is done &ndash; still need to put in some stuff about making a first change and commit so I can show diffs and commit histories &ndash; and then it&rsquo;ll be into the much more dry &ldquo;here&rsquo;s how to set up the GitHub action and manage your blog with it&rdquo; stuff that Git newcomers and veterans alike will use.</p>
<p>It remains fun. It&rsquo;s challenging to make something like Git useful to someone who&rsquo;s just curious about it. I keep thinking of a sign on Ben&rsquo;s preschool wall:</p>
<p>&ldquo;Too much knowledge swamps the boat of wonder.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Retail Manager, Wholesale Manager</title>
      <link>https://mike.puddingtime.org/posts/2023-03-07-retail-manager--wholesale-manager/</link>
      <pubDate>Tue, 07 Mar 2023 09:18:20 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-07-retail-manager--wholesale-manager/</guid>
      <description>Some managers never get over high-touch, small-team management habits. Others forget the humans in their organization as they adopt a &amp;ldquo;scaled mindset.&amp;rdquo;</description>
      <content:encoded><![CDATA[<p>I had a great conversation during an interview yesterday, and found myself answering a question I ask a lot myself when I&rsquo;m on the interviewer side of the table: How have you dealt with resistance to change?</p>
<p>It&rsquo;s one of my go-to questions because it cuts quickly to things that matter to me in a leader on my team.</p>
<p>As with all things there is a balance that&rsquo;s sometimes lost over time as we progress through our careers and do the things we believe we have to do to scale ourselves and our management practice, and to demonstrate that we think at scale so we can keep accruing opportunities and influence.</p>
<p>In an ideal world careers are a layering process: We pick up a skill, we use it day-to-day, and when we take a step up we learn how to teach that skill so we can delegate it; we fold the values it taught us into the cultures we&rsquo;re building in our growing teams.</p>
<p>When it comes to change management, we pick up a few skills early on, as line managers and small team leaders:</p>
<ul>
<li>Building resilient, adaptable teams. Some of that is about creating a culture of continuous improvement, some of it is about not <a href="/posts/2023-01-31-make-experiment-sound-less-dangerous-/">swiping the change credit card frivolously</a>, and some of it is about building trust that you&rsquo;re the team&rsquo;s champion and advocate.</li>
<li>Learning how to carry the message from more senior leaders authentically, even when you wish they&rsquo;d chosen a different path.</li>
<li>Learning how to <a href="/posts/2022-05-03-how-to-listen-to-people/">listen effectively</a> when people on your team bring concerns about a change.</li>
</ul>
<p>All of this is high-touch, &ldquo;retail&rdquo; work that involves coaching and developing an individual  voice even as you master a &ldquo;disagree and commit&rdquo; mindset. You have to develop the essential skill of being authentic and honest with your team, and you have to be able to sit with other peoples&rsquo; emotional reactions to change, even as you led them through that change.</p>
<p>I&rsquo;ve seen two ways leaders can go wrong as they take the next step, especially when they move to a role with a more diverse set of functions:</p>
<p>One kind of leader never sets aside those high-touch habits &ndash; they stay &ldquo;retail:&rdquo;</p>
<p>Instead of learning to ask their managers and leaders &ldquo;how&rsquo;s the team?&rdquo;, or &ldquo;what are the hotspots?&rdquo; (not <em>who</em> are the hotspots, but <em>what</em> are the hotspots), their first reaction is to jump in and bring each person along, or hold group meetings where they&rsquo;re anxiously scanning the crowd for the resisters. They turn one-time open door meetings into standing 1:1s. They short-circuit their line managers&rsquo; ability to build trusting relationships on their own. And sometimes they give away the farm, undermining the change they asked their team to drive because they are too wrapped up saving people who are not coming along.</p>
<p>Another kind of leader runs in the opposite direction, and goes &ldquo;wholesale&rdquo; with a vengeance:</p>
<p>They might have been good at building teams with high esprit de corps and high trust, or they might have just been good at getting to &ldquo;good enough&rdquo; alignment without so much attrition that it raised any eyebrows. They might look over at the leader who never got away from that &ldquo;retail&rdquo; work and see them consumed by its demands. They take away a lesson that some people just don&rsquo;t want to come along, that it&rsquo;s on line management to carry the message and accept some losses, but to them it&rsquo;s just a line management problem. Sometimes they even coach their line managers to think about trust-building, transparency, and active listening as a little wasteful &ndash; something to grow out of.</p>
<p>A sustainable path that doesn&rsquo;t lose sight of the humans in your organization involves balance, and taking advantage of your growing influence and experience to build a management practice that supports line managers and creates space to do good small-team work.</p>
<ol>
<li>
<p>Move your &ldquo;retail&rdquo; practice up a level: Help your managers see the difference between active, empathetic listening and indulgence or axe-grinding. Help yourself by keeping the conversation general &ndash; what is happening, not who is doing or saying what.</p>
</li>
<li>
<p>Set the bar for intervention higher than you might be comfortable with, whether your impulse is to get in and sooth resistant people, or to coach the manager to draw a bright line and quit &ldquo;wasting time on feelings.&rdquo; People management is just as vulnerable to micromanagement as delivery management.</p>
</li>
<li>
<p>Take time to develop change management communications and action plans in consultation with your management team. They&rsquo;ll probably have a better grasp of the &ldquo;what&rsquo;s in it for me&rdquo; issues on their teams than you, and they&rsquo;ll be more confident and assertive if they have some ownership in both developing the needed change and creating the message around it. If one of your managers is content to say &ldquo;I don&rsquo;t think they&rsquo;ll have any concerns; they just need to accept it,&rdquo; they&rsquo;re not doing their job as one of your team stewards.</p>
</li>
<li>
<p>Remember your role as a supporter, and marshal resources for your team: Take the time to help the specialists around you &ndash; communications, HR business partners, program managers &ndash; engage with your team with communications planning, &ldquo;dress rehearsals&rdquo; for delivering a change message, change management, and followup.</p>
</li>
<li>
<p>Invest in training and support before managing a big change: Programs like Crucial Conversations or Fierce Conversations help managers learn how to manage their anxiety ahead of a difficult conversation through normalizing the existence of conflict and practicing hard conversations. HR business partners and experienced leaders can coach managers on what it&rsquo;s okay to say and how to say it that helps boost their confidence when they have individual conversations.</p>
</li>
<li>
<p>Develop a <a href="/posts/2023-01-31-make-experiment-sound-less-dangerous-/">continuous improvement practice</a> that shows each change is considered, intentional, and communicated both in terms of the need for it, and how it will be carried out, measured, and iterated on.</p>
</li>
</ol>
<p>As that list indicates, I still put a lot of stock in preparation and good operations for change management. But once you&rsquo;ve moved through the execution phase and are on to measuring and iterating, line managers are the ones who bear the burden of settling and focusing their teams. You should be there for them, supporting them and building their confidence in their ability to lead, but the time to show your own growth happened when you built supportive practices that keep humans in mind while driving the change your organization needs.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-06</title>
      <link>https://mike.puddingtime.org/posts/2023-03-06-daily-notes-for-2023-03-06/</link>
      <pubDate>Mon, 06 Mar 2023 09:31:57 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-06-daily-notes-for-2023-03-06/</guid>
      <description>New theme, old posts, new photo management tool.</description>
      <content:encoded><![CDATA[<p><em>Had an interview today, so this is a short one. -mph</em></p>
<h2 id="new-theme">New theme</h2>
<p>I mentioned that I was becoming increasingly uneasy with the slowly mounting pile of add-ons and workarounds I had accreted in the process of shifting <a href="https://mike.puddingtime.org">my main site</a> to Hugo.</p>
<p>Over the weekend I trialed a few theme options and settled on <a href="https://github.com/adityatelange/hugo-PaperMod">PaperMod</a>. I dropped a few &ldquo;features&rdquo; I built on the old theme until I can figure out how to reimplement them. PaperMod is a more complex theme, and I wish its templates were a little more modular, but I&rsquo;m figuring it out and I appreciate how little I have to write for myself in terms of core stuff.</p>
<p>What I have now is mostly out of the box. It&rsquo;s enough to get my existing posts back online and looking okay, with a few personalizing touches, and it&rsquo;s setting me up for &hellip;</p>
<h2 id="managing-old-posts">Managing old posts</h2>
<p>I finally started picking through the exported posts from my old WordPress blog. I fed them all into micro.blog as a test site a while back, then re-exported them as a Hugo archive, so they have Hugo frontmatter and all the image URLs are relative to micro.blog (and hence easy to re-anchor on another Hugo site on another domain).</p>
<p>I&rsquo;ve gone through 2002 and most of 2003 at this point, tagging items I&rsquo;d like to bring forward and looking for patterns. I had a habit of writing a few lines about movies I watched for a few years. They&rsquo;re not much on their own, but in aggregate I wonder what will emerge.</p>
<p>Workflow-wise, I think I just want to work up a script to turn them all into drafts, add a &ldquo;Vintage&rdquo; category, and modify <a href="https://mike.puddingtime.org/posts/2023-02-28-about-old-posts/">my &ldquo;old post&rdquo; automation</a> to include whether a post has been significantly edited. Then I can start working through as I have time, making them live as I clear them.</p>
<h2 id="photos-workbench">Photos Workbench</h2>
<p>A few weeks ago I spent some time shifting around a few apps and ended up realizing that, as fraught an idea as it is, I would most prefer to just use whatever ships with iOS and macOS to do most stuff. How often I believe I can do that and remain happy is another question.</p>
<p>I like to read other peoples&rsquo; struggles with the tools they use. Sometimes because there&rsquo;s interesting insight to glean, and sometimes because reading someone struggling to find the right thing is like watching a product team fail to prioritize its backlog and there&rsquo;s at least a behavioral reminder there.</p>
<p>I also like to read about it when someone <em>stops</em> struggling and decides something is good enough. I don&rsquo;t always agree with the assessment: Everyone&rsquo;s got their own tics. I&rsquo;ve got general things about keyboard orientation, clean import/export, sync, and accommodations for notes. Get into a specialty tool, e.g. a photo editor/organizer or text editor, and the list expands. But sometimes those &ldquo;I just decided to use this particular tool, here&rsquo;s why&rdquo; pieces tip you to functionality you didn&rsquo;t know existed, or that quietly slipped in since the last time you looked.</p>
<p>A few months ago I gave a solid two day effort to living with just Apple&rsquo;s Photo tools on iOS/macOS/iPadOS. I don&rsquo;t have a huge beef with Lightroom, but I do feel like I leave a lot on the table with it. My main uses are:</p>
<ul>
<li>Basic edits (crop, color, light, clarity/midtone contrast, geometry correction for my wider lenses)</li>
<li>Macro edits (my own presets and normalizing presets)</li>
<li>Organization (rating, keywords, other metadata)</li>
<li>Storage</li>
</ul>
<p>I don&rsquo;t make prints, I don&rsquo;t sell, and I don&rsquo;t care to participate in the social aspects they&rsquo;re layering into the newer version of Lightroom.</p>
<p>Apple&rsquo;s Photos stuff, in the meantime, has been progressing.</p>
<ul>
<li>Basic edits? Sure. Even geometry correction works at the &ldquo;manual eyeball it&rdquo; level.</li>
<li>Storage? Sure. I&rsquo;d never trust Apple as my sole storage solution, but it is not hard to layer on third-party backup options and I think you can make a Mac store originals, which makes backups more reliable and all-inclusive.</li>
</ul>
<p>Macro editing &ndash; raw processing, user presets, import presets, etc. aren&rsquo;t there. You can leverage third-party apps with Photos extensions, but on its own Photos hasn&rsquo;t chosen to do much there, and the third-party apps I&rsquo;ve seen are generally closed ecosystems. Further, though the outside apps understand edits made by Photos, Photos does not understand edits made by them. So even though the ability to copy edits and paste them onto other Photos is a welcome recent feature addition in Photos, it only works with Photos edits. Finally, Apple is sometimes slow to support certain raw formats, and a lot of that ecosystem, for better or worse, sticks to building on top of Apple&rsquo;s libraries, so you can wait for many months for some of these apps to process stuff from a newish camera.</p>
<p>Organization? Not quite? You can mark things as a favorite or organize them into albums. You can add titles and captions. There&rsquo;s location data. Rating, however, is missing, as is the ability to anti-favorite something. That makes triage hard without stretching the semantics of the UI.</p>
<p>This is all to go toward saying that this morning I read <a href="https://tidbits.com/2023/02/13/photos-workbench-helps-you-organize-rate-and-compare-photos/">a positive review from TidBITS</a> for <a href="https://www.houdah.com/photosWorkbench/">Photos Workbench</a> by Houdah. I remember them from a long time ago, when I used <a href="https://www.houdah.com/houdahGPS/">HoudahGPS</a> alongside a Garmin eTrex to do geotagging for my photos, so there&rsquo;s a Mac pedigree there. (I&rsquo;m now sitting here thinking about my little Garmin inReach, which is dead simple to operate and doesn&rsquo;t see much use out of hikes in remote places, and how much I don&rsquo;t trust any of the built-in GPS functionality of my cameras and their associated apps. Hm.)</p>
<p>Anyhow, Photos Workbench is meant to address the organizational shortcomings of Apple Photos by providing a UI for keywords, mass retitling, geotagging, ratings, and comparison. At $22 it costs less than three months of my Lightroom plan, so I am pretty sure I am going to demo it for a week, even if all I do is organize my Photos collection, which has been running parallel to Lightroom and has a lot of weird stuff in it, ranging from high-quality exports of photos from Lightroom in order to shuffle them around to other endpoints all the way down to &ldquo;crumpled receipt for my expense report&rdquo; and &ldquo;picture of the floor I was on in the parking garage from 2008.&rdquo;</p>
<p>There are, of course, always tradeoffs. In this case the big one is that it&rsquo;s Mac-bound. No iOS or iPadOS app. Increasingly I won&rsquo;t do Lightroom edits on a mobile platform, but I do like managing initial triage and rating from an iPad.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-02</title>
      <link>https://mike.puddingtime.org/posts/2023-03-02-daily-notes-for-2023-03-02/</link>
      <pubDate>Thu, 02 Mar 2023 09:27:24 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-02-daily-notes-for-2023-03-02/</guid>
      <description>Tech industry resentment, language wars &amp;amp; PMC piety, how I write these, CSS of Theseus, Playdate cometh-ish, CNET and the PE people.</description>
      <content:encoded><![CDATA[<h2 id="cnet-and-the-pe-people">CNET and the PE people</h2>
<p><a href="https://www.theverge.com/2023/3/2/23622231/cnet-layoffs-ai-articles-seo-red-ventures">Reporting from The Verge on layoffs at CNET</a>:</p>
<blockquote>
<p>&ldquo;Under Red Ventures, former CNET employees say the venerated publication’s focus increasingly became winning Google searches by prioritizing SEO. On these highly trafficked articles, the company crams in lucrative affiliate marketing ads for things like loans or credit cards, cashing in every time a reader signs up.&rdquo;</p>
</blockquote>
<p>I worked for a company similar to this after they acquired the more traditional online news play I started at. They weren&rsquo;t so much a heavily operationalized affiliate marketing company as they were into something euphemistically referred to as &ldquo;performance marketing&rdquo; and more recognizably called &ldquo;lead generation.&rdquo;</p>
<p>Basically, they came in did a good thing (dropped all the display advertising), and then filled the resulting holes in the page with widgets and internal ads for whitepapers, ebooks, and insurance cost estimators. They had a set of verticals including:</p>
<ul>
<li>home construction</li>
<li>home health care</li>
<li>auto insurance</li>
<li>for-profit education</li>
<li>home finance</li>
<li>IT (the vertical I landed in)</li>
</ul>
<p>The basic model was:</p>
<ul>
<li>They buy up actual content plays that had tried to make a go of monetizing regular editorial content, or popular blogs in a given space, that have good SEO and good placement.</li>
<li>You, the consumer, search for &ldquo;enterprise routers&rdquo; or whatever topic</li>
<li>You find a piece of straight editorial content (e.g. a review, an howto article, whatever)</li>
<li>You see an ad for a free ebook about enterprise networking you can download in exchange for your email</li>
<li>The progressive data gathering kicks in: You see an offer to get access to the &ldquo;complete library of ebooks&rdquo; in exchange for information about your company, its size, and your purchasing authority</li>
<li>A Cisco, Juniper, or Ubiquiti orders up a list of verified leads, which is sold to them for some amount of money per lead.</li>
</ul>
<p>These same people <a href="https://www.sfgate.com/education/article/QuinStreet-settles-complaints-it-misled-veterans-3671497.php">lost a massive lawsuit from 16 state attorneys general</a> over their deceptive use of the gibill.com domain, which used little &ldquo;what kind of degree would you like to get with your benefits&rdquo; widgets to steer veterans to <a href="https://www.brookings.edu/blog/how-we-rise/2021/01/12/the-for-profit-college-system-is-broken-and-the-biden-administration-needs-to-fix-it/">for-profit educational outfits</a> and their notoriously bad outcomes.</p>
<p>It wasn&rsquo;t the best 18 months of my career.</p>
<p>Affiliate marketing is a little more direct, but both models are obsessed with SEO for obvious reasons. I did pay a visit to CNET to see if I could spot what the article is talking about and it looked more on the &ldquo;affiliate&rdquo; end than the &ldquo;lead-gen&rdquo; end.</p>
<p>This part from the Verge&rsquo;s coverage elicited a bitter laugh:</p>
<blockquote>
<p>&ldquo;Former staff recounted multiple instances in which CNET employees were pressured to change their coverage of companies that advertised with Red Ventures — a flagrant violation of journalistic ethics that put CNET’s editorial independence at serious risk.&rdquo;</p>
</blockquote>
<p>Yeah, no. Let&rsquo;s rewrite for accuracy:</p>
<blockquote>
<p>&ldquo;Former staff recounted multiple instances in which CNET employees were pressured to change their coverage of companies that advertised with Red Ventures — a flagrant violation of journalistic ethics that <s>put</s> destroyed CNET’s editorial independence <s>at serious risk</s>.&rdquo;</p>
</blockquote>
<h2 id="playdate-cometh-ish">Playdate cometh-ish</h2>
<p>I pre-ordered a <a href="https://play.date">Playdate</a> July of &lsquo;21, putting me early in Group 4. It looks like I <a href="https://lists.play.date/w/eT5LjRL6jVI2BVrlom3qpg/zCICVfx2YsIGsFqqjzVdUw/NsQButOkd892H763U7m76327bDKg">might get it</a> a few months shy of the second anniversary of that order.</p>
<p>It&rsquo;s funny, because over the past few years I&rsquo;ve gone through this evolution:</p>
<ol>
<li>I love video games.</li>
<li>I love the idea of loving video games but I don&rsquo;t seem to play much lately.</li>
<li>I like some video games, but not many and it seems like there are fewer of them all the time.</li>
<li>It&rsquo;s possible I actually don&rsquo;t like video games and won&rsquo;t admit this to myself.</li>
<li>It&rsquo;s not me that changed, it&rsquo;s the games.</li>
<li>No, I just don&rsquo;t like video games.</li>
<li>I miss loving video games, but I still don&rsquo;t like them.</li>
<li>I miss playing video games, but what&rsquo;s the point: Even games on the Switch are overdone.</li>
<li>I would like to try video games again, especially the big, overdone ones.</li>
<li>I like video games quite a bit.</li>
</ol>
<p>I ordered the Playdate as my thoughts darted around between stages 4 and 7, and the lingering thinking around stage &ldquo;7&rdquo; caused me to think a few times over the past two years &ldquo;maybe I should just cancel my order.&rdquo;</p>
<p>But I remember seeing that Group 3 was shipping in the past several months and forgetting what group I was even in and feeling briefly excited, then really let down that I am in Group 4. Where the Playdate is concerned, I am at stage 10, and am very excited that I might have the thing around my birthday.</p>
<p>Oh, looks like they&rsquo;re having <a href="https://www.destructoid.com/playdate-update-stream-airing-march-catalog-games/">some sort of media event next week</a>, too, to announce an online store?</p>
<h2 id="tech-industry-resentment">Tech industry resentment</h2>
<p><a href="https://www.niemanlab.org/2023/03/those-meddling-kids-the-reverse-scooby-doo-theory-of-tech-innovation-comes-with-the-excuses-baked-in/?utm_source=pocket_saves">Nieman again today</a> with a dyspeptic take on tech industry hype and blame-shifting. I have my share of gripes about tech hucksters, and there is nothing more fun than going back to turn-of-the-millennium WIRED to jeer, but the example of &ldquo;push&rdquo; as an over-hyped nothing-burger is weird to me. The ad-driven, surveillance capitalism model WIRED argued was inevitable most definitely did find us. Is &ldquo;the web&rdquo; dead? No, but there&rsquo;s a reason people like JWZ are constantly reminding us that <a href="https://www.jwz.org/blog/2022/11/psa-do-not-use-services-that-hate-the-internet/">apps are not the web</a>.</p>
<p>Generally on board with the idea that the tech people anti-regulation mantra is not great, though. It would have served the thesis better to steer clear of the WIRED-bashing this time, or just stuck to the odiousness of <a href="https://www.metamute.org/editorial/articles/californian-ideology">the Californian Ideology</a> generally.</p>
<h2 id="language-scuffles">Language scuffles</h2>
<p>Two things this week from George Packer and Katha Pollitt:</p>
<ul>
<li><a href="https://www.theatlantic.com/magazine/archive/2023/04/equity-language-guides-sierra-club-banned-words/673085/">&ldquo;The Moral Case Against Euphemism&rdquo;</a></li>
<li><a href="https://www.thenation.com/article/culture/roald-dahl-edited/">&ldquo;Let Kids Read Roald Dahl’s Books the Way He Wrote Them&rdquo;</a></li>
</ul>
<p>Packer&rsquo;s piece is more &hellip; reactionary? &hellip; and sort of late to the &ldquo;grousing about inclusive language&rdquo; party. I read it, but it&rsquo;s an exhausting discussion with examples on the usual spectrum from &ldquo;yes, George, &lsquo;urban&rsquo; is in fact a bad euphemism we&rsquo;d do well to not use the way these guides recommend we not use it&rdquo; to &ldquo;yes, their reasons for not using &lsquo;field work&rsquo; are not great, but &lsquo;practicum&rsquo; has been in common use for a long while.&rdquo;</p>
<p>I guess Packer annoys me: I&rsquo;ve read some version of his essay at least once every five years my entire adult life, and have come to view it the way I came to view the William Proxmire Golden Fleece Award. There is something reductive and showy about the whole exercise. If you&rsquo;re the type of reader to pause for even a second on one of his examples, you realize it&rsquo;s not even a very good exercise in nut-picking.</p>
<h2 id="how-the-sausage-is-made">How the sausage is made</h2>
<iframe src="https://social.lol/@tomk/109952435170112455/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>My first little digest post practice was a way to keep up a blog during the work day: I&rsquo;d just open up a BBEdit file and start dropping stuff in during little breaks. I created a sort of dead man&rsquo;s switch situation, where a cron job would launch an AppleScript that grabbed the file at 17:30 and posted it for me.</p>
<p>I brought the practice with me, only over a week timeline, when I joined the Puppet marketing team. The content was always aimed at &ldquo;practitioners who like Puppet,&rdquo; but I had an informal rule about having only one item that promoted the company&rsquo;s interests: My belief was that marketing teams should give more value &ndash; help, interesting stuff to read &ndash; than they take. The posts did really well: They usually led the week in page views and stickiness, and people clicked through on the promotional stuff.</p>
<p>Most recently I&rsquo;ve brought the format back because I&rsquo;m still trying to suss out how I want blogging to work for me generally.</p>
<p>I&rsquo;ve got this blog, I&rsquo;ve got my omg.lol weekly update blog, and I&rsquo;ve got my micro.blog. I&rsquo;m beginning to chafe with the latter: It has great cross-posting capabilities, but I don&rsquo;t feel like a match for the culture on that service. If I&rsquo;m going to have a hosted provider of some sort, I want them to be more of a common carrier than a boutique. I think micro.blog is great, but:</p>
<ul>
<li>It feels opinionated in a way that doesn&rsquo;t work for me.</li>
<li>It feels like the feature requests I see go by are often filtered through some opinions about What Went Wrong with Social Media that are reactive guesses.</li>
<li>It&rsquo;s a little confusing in a needless way. There&rsquo;s a muddiness in the language in the interface.</li>
</ul>
<p>I guess it just feels suspended between the conflicting imperatives of making a mass tool &ndash; or at least wanting to build a mass tool &ndash; and preferring to remain in a very high-concept place where ideas don&rsquo;t have to cohere into well articulated, concrete outcomes for users. I&rsquo;m sure happy users of the service will disagree.</p>
<p>Anyhow, there is a standing todo on my writing topics list that&rsquo;s &ldquo;figure out your content strategy,&rdquo; which maybe sounds cold-blooded and businessy for a sole proprietor blog, but I am not doing this entirely for the entertainment value. &ldquo;Digest posts&rdquo; are a good way to keep from swamping your feed, post output, and archives, and to prevent burying the stuff you&rsquo;d like people to find without having to carve out a whole special hole to stick business stuff in.</p>
<p>But there&rsquo;s also just a good unto its own in doing the thing. It&rsquo;s daily writing, and it&rsquo;s framed in a way that makes it low stakes. If some of these things were their own entries, I&rsquo;d feel compelled to have a more concrete thesis, more detailed reasoning, citations, etc. That is not, in my experience, a good way to maintain the part of writing that is less about craft and more about motion.</p>
<p>So, the workflow to make these every day is:</p>
<ul>
<li>I spend the first 30 minutes of the day over tea and my RSS reader. I bookmark anything of passing interest if something about it stirs a comment in me.</li>
<li>When I go upstairs to sit down and do day planning, I pop open a terminal and run my <a href="https://paste.lol/mph/hpost.rb">Hugo posting script</a>. I added a switch that puts the right tags and title in place for me, and it opens a Sublime window if I just run <code>hpost --daily</code>.</li>
<li>I drop in any initial headings I&rsquo;ve thought of and put those in the post summary just to remind me.</li>
</ul>
<p>Then it&rsquo;s just a question of pecking at it during the day. I try to do Pomodoros for my important stuff, so I&rsquo;ll type in a few words here and there during the five-minute breaks, or if I&rsquo;m caught up for the day I might give the thing a full Pomodoro of its own. I give myself an hour for lunch, and often spend a chunk of that time filling things in or expanding on stuff.</p>
<p>That&rsquo;s about it. When I&rsquo;m at a point in the day where I can&rsquo;t see putting anything more into it, I ship it. I&rsquo;m working with Hugo and a Git-based publishing pipeline, so if there are multiple WIP commits I squash them and push them up just to make it easier to eyeball non-content changes. I&rsquo;m using <a href="https://mastofeed.org/">Mastofeed</a> to automate the posting process.</p>
<p>I&rsquo;d like more descriptive Masto posts, so I&rsquo;m considering cloning the RSS feed I use to make them: Mastofeed provides template tokens for title and link, so the description/summary goes missing. I might just do it by hand, for that matter.</p>
<h2 id="design-notes">Design notes</h2>
<p>The past few days I&rsquo;ve been making little improvements to the CSS of my theme here. The last time I did much with CSS was over ten years ago, and it was mostly in the context of using Bootstrap for personal projects. Responsive design practices &ndash; and the CSS features that support them &ndash; are new to me as something I&rsquo;d code for myself vs. relying on a framework, but I like being able to do stuff like progressively hide the visual clutter that works fine on a laptop or big tablet but not great on a phone. I started by taking a lot away, and now I&rsquo;m adding it back.</p>
<p>It&rsquo;s beginning to weigh on me a little, though:</p>
<p>I&rsquo;ve written a Hugo shortcode to make tags link to interesting things, and that&rsquo;s portable. I&rsquo;ve done some stuff to drive the front page &ldquo;Picture of the Week&rdquo; feature that is probably generalizable to another theme. I&rsquo;ve done a few other things that are probably better done some other way.</p>
<p>But basically I&rsquo;m layering stuff on top of a theme that was done more as a PoC for how to use <a href="https://simplecss.org">SimpleCSS</a> with Hugo out of the box and that plainly was not meant to carry some kinds of weight. So with all my little amendments and changes, my override directory is running about 25% of the total size of the original theme, for something where I started by thinking &ldquo;I&rsquo;ll just swap in my preferred palette.&rdquo;</p>
<p>That&rsquo;s not necessarily a bad thing in a &ldquo;well, many websites are CSS of Theseus propositions&rdquo; sense, but I know my own limitations. I&rsquo;ve also gotten better with Hugo over the past couple of months and would probably understand what some more complex themes are trying to do, rather than bouncing off of them and going primitivist.</p>
<p>Probably time to make a branch and see how badly stuff blows up when I lay on another theme.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-03-01</title>
      <link>https://mike.puddingtime.org/posts/2023-03-01-daily-notes-for-2023-03-01/</link>
      <pubDate>Wed, 01 Mar 2023 09:25:39 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-03-01-daily-notes-for-2023-03-01/</guid>
      <description>TickTick &amp;amp; Drafts, the tech sin-eater, I casual, new printer day, job hunt news</description>
      <content:encoded><![CDATA[<h2 id="i-casual">I, casual</h2>
<p>When I got my PlayStation 4 a little while back I thought I was buying into the same sort of thing going on with my Nintendo Switch in terms of game selection and cost.</p>
<p>I like the Switch just fine and haven&rsquo;t had a huge issue with the Nintendo online market. It&rsquo;s slow-loading and frustrating to shop through if you don&rsquo;t keep up with it weekly, but it&rsquo;s fine. I don&rsquo;t tend to buy too much stuff when it&rsquo;s new, but I&rsquo;ve bought a few of the big ports over the years, and I do catch the occasional sale. All in all, selection is okay and cost is what I guess I expect for using an online store instead of buying used stuff.</p>
<p>The thing I wasn&rsquo;t expecting with the PS4 was what I guess I should have been expecting for a superseded platform that&rsquo;s mostly still on shelves because of supply chain problems: There&rsquo;s a ton of stuff that&rsquo;s great for a casual like me at prices I find incomprehensibly low. It&rsquo;s stuff I saw ads for a while back and thought &ldquo;looks cool, too bad I hate games now&rdquo; over the years, and it&rsquo;s $4.99 or even free if there&rsquo;s a bunch of DLC they can still sell for more.</p>
<p>As someone who&rsquo;s gamed on:</p>
<ul>
<li>VIC 20</li>
<li>Atari 2600</li>
<li>Nintendo NES</li>
<li>Atari 5200</li>
<li>Commodore 64</li>
<li>Amiga 500</li>
<li>PC (8088,386,early Pentiums)</li>
<li>Sega Genesis</li>
<li>Gameboy, Lynx, whatever Sega&rsquo;s handheld thing was in the early &rsquo;90s</li>
<li>PS 1, 2, 3</li>
<li>Nintendo DS, 3DS, Switch</li>
</ul>
<p>&hellip; the value I&rsquo;m getting as a casual gamer is just beyond anything I&rsquo;ve ever seen. I haven&rsquo;t felt this way since I went to a flea market where some guy was selling grocery bags with a Sega Genesis and a few fist-fulls of cartridges for $20. I&rsquo;ve got more games than I know what to do with sitting on this thing, with a PSPlus subscription that delivers even more.</p>
<p>I know there&rsquo;s better, cooler, and prettier out there, and I have briefly experienced the tug of seeing a new release and not seeing my system listed, but not enough to get me to care. This thing is pretty fun for a 10-year-old product. It makes me curious about the economics of the whole market. I assume at some point someone at PlayStation Central will decide they&rsquo;ve indulged people like me long enough and their digital marketplace will fold up and herd us all along, but for now I kinda feel like I&rsquo;m getting away with something.</p>
<h2 id="ticktick-progress">TickTick Progress</h2>
<p>Today I found <a href="https://actions.getdrafts.com/a/1Mg">a Draft action for getting stuff into TickTick</a>. Not much more to say about TickTick generally. I&rsquo;ve been fine-tuning the focus stuff and adjusting the reminders and find it very usable. Being able to fire-and-forget a Draft into my inbox is useful and makes me more likely to keep using it.</p>
<h2 id="airconnect">AirConnect</h2>
<p>We went Sonos a while back, but just before AirPlay2 support came along, so there are a few devices in the house that require the Sonos app. The last of them &ndash; a pair of Sonos 1&rsquo;s, are sitting in my office so Al and Ben don&rsquo;t have to deal with them because the Sonos app is infuriating.</p>
<p>This morning I gave myself a 30-minute pomodoro to go find something to help me with this problem and ended up with <a href="https://github.com/philippe44/AirConnect">AirConnect</a>, which just sits on your network and advertises Sonos speakers (and Chromecast devices) as AirPlay devices.</p>
<p>I went in a little warily when the first post I found was some guy talking about running it in Docker, but a quick DuckDuckGo search netted me the <a href="https://github.com/eizedev/AirConnect-Synology">AirConnect-Synology</a> project, which just makes packages for Synology.</p>
<p>Configuration was amazingly simple: I uploaded the package, ticked a few boxes, accepted a few defaults, and it was working.</p>
<p>I&rsquo;m glad it&rsquo;s just for these two speakers in a room nobody else uses. I don&rsquo;t trust anything until it has been &ldquo;just working&rdquo; long enough for me to forget it exists, and I hate forgetting about tech things that affect Al &amp; Ben.</p>
<p>People like to jokingly refer to themselves as their family&rsquo;s IT department. I prefer to think of myself as our family&rsquo;s tech sin-eater.</p>
<h2 id="new-printer-day">New printer day</h2>
<p>My little Brother laser printer, which worked pretty well through grade, middle, and high school for Ben, has always made me tense up when it wakes up. The UPS on the same circuit senses the sag of a laser printer heating the drum on startup and makes ominous clicks and increments the fault counter and sometimes the lights flicker. I did enough reading to know laser printers do this to everybody.</p>
<p>With our recent electrical problems, something had to give: There&rsquo;s a little too much load on the &ldquo;office and entertainment&rdquo; wing of the residence. My new MOCA stuff gives me some options for moving bits around the house, but the two power-hungriest rooms are on the same small circuit (inexplicably also including the range hood downstairs) and there&rsquo;s not a lot that can go anywhere else. It&rsquo;d make the most sense to move the laser printer, but it&rsquo;s a pre-AirPrint model, so it&rsquo;d be a pain without the NAS going along with it (which has served it up as an AirPrint endpoint when it&rsquo;s connected via USB.)</p>
<p>So I replaced it with a Brother inkjet all-in-one everybody says is fine. For some reason, everyone&rsquo;s top pick being consistently rated 4/5 stars is comforting to me. Like, lots of people think it&rsquo;s fine and a few other people are disappointed by some pedestrian hangup or another.</p>
<p>It came today and I admired a few things about setting it up:</p>
<ul>
<li>The display walks you through onboarding - installing the cartridges and paper, getting it networked, etc.</li>
<li>It does a quick calibration test where it prints a page then scans the page to check nozzle alignment.</li>
<li>It&rsquo;s the first scanner I&rsquo;ve personally owned that works natively with Apple&rsquo;s Preview to do over-the-network scanning.</li>
<li>AirPrint just works with no need to get the NAS involved or any other hacks.</li>
</ul>
<p>And unlike Epsons and Canons I&rsquo;ve owned, reviews suggest it&rsquo;s better about sitting and not ruining its own ink cartridges if you&rsquo;re not constantly using it.</p>
<p>The fax part is useless. I guess I&rsquo;m a little surprised there&rsquo;s not some sort of e-fax thing built in, but whatevs.</p>
<h2 id="job-progress">Job progress</h2>
<p>I went from radio silence for the past five or six weeks to two interviews next week. The hang time on one of them after applying was close to 30 days. Thinking back, I don&rsquo;t think <em>I</em> ever ran a search that slow, but it&rsquo;s happening a lot from what I hear.</p>
<p>I&rsquo;m also glad I built the job tracking setup I did: I knew going in that long gaps in contact, slow responses, etc. would all be part of the process, and that it&rsquo;d be good for my morale if I could quantify what I was seeing. So when I heard back today and thought &ldquo;that was fooorrrrreeeever ago&rdquo; then looked up the card, I could see that I opened the card on the 1st of last month and submitted an application the next day.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-02-28</title>
      <link>https://mike.puddingtime.org/posts/2023-02-28-daily-notes-for-2023-02-28/</link>
      <pubDate>Tue, 28 Feb 2023 21:23:55 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-28-daily-notes-for-2023-02-28/</guid>
      <description>Declining games journalism, inclusive Git docs, Sublime as your git editor, electricity, TickTick progress.</description>
      <content:encoded><![CDATA[<h2 id="-electrified-again">⚡️ Electrified again</h2>
<p>The whole electrical situation was resolved today, finally. We had to replace a breaker that had failed outright and wasn&rsquo;t tripping when overloaded. We had a good electrician who was happy to talk me through what he was seeing and doing.</p>
<p>Now that it&rsquo;s over I&rsquo;m going to go through and figure out the draw of all the stuff on the circuit where we were having the problems. There is a lot of gear in a concentrated area of the house. Enough that when I fired up the laser printer to print a tax return today the UPS (which it isn&rsquo;t even plugged into) registered an &ldquo;event&rdquo; and showed a sag, and kept doing it until I finally turned the printer off instead of waiting for it to go idle.</p>
<h2 id="-declining-games-journalism">📰 Declining games journalism</h2>
<p>I was a believer in &ldquo;New Games Journalism&rdquo; even if I am not going to link to its seminal piece of writing, and I&rsquo;ve enjoyed it. Games as a topic of personal interest are low enough stakes that I don&rsquo;t mind if video game reviews and some reporting are inflected with fannish preoccupations and a lack of distance from the subject. But reading about someone&rsquo;s subjective experience of a game is different from reading about, say, abusive labor practices in a big business. Nieman has <a href="https://www.niemanlab.org/2023/02/is-there-a-future-for-video-games-journalism/">a piece about the contraction of video game journalism</a> that&rsquo;s familiar to me as a former enthusiast press editor.</p>
<p>The short version is that investors understand video games are a big deal, and also that there&rsquo;s a lot you can get away with in terms of coverage before you stop making whatever money you&rsquo;re content to squeeze out of your properties.</p>
<p>I did a few years in an enthusiast web vertical 20 years ago, and the dynamics sound familiar: Pioneers build an audience, media plays sense an opportunity, the pioneers sell, the media plays start squeezing.</p>
<p>And there&rsquo;s also the nature of content production in the attention economy:</p>
<blockquote>
<p>&ldquo;&hellip; games journalists are at one unique disadvantage compared to the rest of the cultural dialogue, because an expansive alternative media ecosystem exists on YouTube and Twitch where hugely influential content creators, like Felix &lsquo;PewDiePie&rsquo; Kjellberg and Mark &lsquo;Markiplier&rsquo; Fischbach, provide their own commentary about the games industry in direct competition with reporters. No, PewDiePie isn’t launching the investigations you might find at a more formal media enterprise, but he does possess millions of subscribers who rely on him to illuminate and extrapolate upon the daily slate of headlines in the hobby. For some young gamers, a confederation of their favorite talking heads — all operating their own bespoke social brands — achieves the same purpose as the IGN homepage. <strong>It makes you wonder if the sudden spike of unemployed games journalists might be felt more acutely by the public if there weren’t a bedrock of YouTubers sharing the same foundational bandwidth.</strong> [emph. mine] After all, a YouTube channel is never at the mercy of mercurial ownership.&rdquo;</p>
</blockquote>
<p>I mean, yes. That&rsquo;s another thing that&rsquo;s familiar to me: When I did reader roundtables and research interviews, the two most common refrains from our IT practitioner audience were:</p>
<ul>
<li>&ldquo;Just be more like Stack Overflow &hellip; I want answers, not some guy who once worked at DEC&rsquo;s opinion.&rdquo;</li>
<li>&ldquo;Get more tech bloggers who actually do this stuff. Sorry and no offense, but I don&rsquo;t care if there are a few misspellings if their configuration examples are right.&rdquo;</li>
</ul>
<p>I took the feedback and spent more time recruiting practitioners who wanted a little spending money vs. professional writers. One of my best writers worked on the UNIX team at a local university and had a thing for German SUVs: The stuff he turned in for me made his lease payments, and he could write it in his sleep. He&rsquo;s how <a href="https://www.enterprisenetworkingplanet.com/management/servers-dance-on-a-string-with-puppet/">I learned about Puppet five years before I worked there</a>.</p>
<p>But the stuff they were doing wasn&rsquo;t &ldquo;networking journalism,&rdquo; and there was a reason we leaned heavily on repurposed general business reporting across our network: The stuff that really engaged people was hands-on, howto content. A general reporting piece would fall out of the top 10 on a site within a week. Analysis I did showed that stuff usually did well to break even before its shelf-life expired. 2,000-word tutorials on Samba, however, continued to earn every month five years after they&rsquo;d first been published.</p>
<p>Being Nieman, this piece wants to point to interesting stories in the game industry around things like labor relations, and it&rsquo;s less enthusiastic about sites that help you get past the third boss in a recent game. Is that &ldquo;game journalism,&rdquo; or is it business reporting? Are you reporting about the game industry, the tech industry, or business? Questions I was dealing with years ago in Linux/open source media. And we split the difference: Most of our more newsy Linux coverage ended up on the generic server site, most of our Linux tutorials stayed on the Linux sites. That was the way readers wanted it, as near as I can tell. The people on my enthusiast sites were bored by the news stories and lit up over reviews and tutorials.</p>
<h2 id="-inclusive-git-workflow-docs">✏️ Inclusive git workflow docs</h2>
<p>I got underway in earnest on a guide to the weblog.lol Git publishing workflow today. It is going to be a little different from <a href="https://weblog.lol/quickstart-1-intro">the quick start guide I published a few weeks ago</a>.</p>
<p>My first instinct is just, &ldquo;Git isn&rsquo;t for everybody, and for some it is alarming.&rdquo; I once had a tech writer on my team who genuflected before he pushed a new release&rsquo;s docs to production, and he&rsquo;d been using Git on the daily for years. So I thought &ldquo;just start from they know it and use it.&rdquo;</p>
<p>On the other hand, I have a strong sense, just watching people in the omg.lol community chat back and forth, that we&rsquo;re having a bit of a <em>moment</em> right now: People are interested in stuff around web publishing and tech generally that they may have sat out with the advent of social networking. There&rsquo;s not a lack of interest in learning some of the more complex parts of it, and there&rsquo;s definitely ability. Adam&rsquo;s created a service that is really compelling to people who want to play with things they haven&rsquo;t before.</p>
<p>So I&rsquo;m going to try to thread the needle and put some docs off to the side of the main flow that  link out to the pieces you need to get Git onto your system, set up your GitHub account, etc. We&rsquo;ll see how it goes. The workflow itself is simple and could be documented in a page of ordered lists. I&rsquo;d like to go a little further and help people learn a new thing.</p>
<p>Speaking of git:</p>
<h2 id="-using-sublime-text-as-your-git-editor">💡 Using Sublime Text as your git editor</h2>
<p>Helpful gist with the command line switches you need:</p>
<p><a href="https://gist.github.com/geekmanager/9939cf67598efd409bc7">https://gist.github.com/geekmanager/9939cf67598efd409bc7</a></p>
<h2 id="-ticktick-progress">✅ TickTick progress</h2>
<p>Several days in, TickTick is working for me.</p>
<p>Usually I prefer &ldquo;Lego&rdquo; apps: When I see hard-coded ideas I shy away. I guess it just makes more sense to me to have relatively value neutral tools, which is part of why I never took a shine to earlier iterations of OmniFocus, which was just all in on being the canonical GTD-in-an-app. It got more loose over time, but I still found it clicky and a little too opinionated. I liked Things because it felt more flexible.</p>
<p>TickTick has a few opinions and builds some very specific functionality in &ndash; its Pomodoro timers and habit tracking &ndash; but it feels like &ldquo;just enough, not too much&rdquo; and it&rsquo;s all optional if all you want is &ldquo;make a list&rdquo; or &ldquo;make lists.&rdquo;</p>
<p>I&rsquo;m not immune to the charms of a habit tracker, either. I&rsquo;ve used them in the past, but they&rsquo;re usually standalone things that don&rsquo;t integrate well with the other todo stuff I&rsquo;ve got, so they become weird little silos instead of part of The List for the Day.</p>
<p>This morning I opened Obsidian and looked at the daily page format I&rsquo;d set up to do basic habit stuff, then looked at TickTick, and there was no question in my mind that TickTick worked better for me.</p>
<p>I&rsquo;m still using Obsidian for my job tracking stuff. I really love making a card for a prospect, having some metadata to keep track of when I opened the card, applied for a role, talked to a recruiter, etc., and then being able to add interview notes and other data.</p>
<p>re: the TickTick habit tracker, you can also set each habit up so that you can leave a little review each time you complete it (or turn the review part off for any of the habits you&rsquo;ve got). I leave it on for some (reading time, social maintenance, job stuff) and off for others (doing the dishes and other &ldquo;who cares how you felt about it or how you did it&rdquo; tasks.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>About Old Posts</title>
      <link>https://mike.puddingtime.org/posts/about-old-posts/</link>
      <pubDate>Tue, 28 Feb 2023 09:28:59 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/about-old-posts/</guid>
      <description>Over time I am going to start bringing in older and older posts from my old blog, &lt;em&gt;dot unplanned&lt;/em&gt;. I took much of it down several years ago during a big web reorg, but I want to start putting some of it back in place. It&amp;rsquo;s me, in one way or another.</description>
      <content:encoded><![CDATA[<blockquote>
<p>&ldquo;You are under no obligation to be the same person you were five minutes ago.&rdquo;<br>
— Alan Watts</p>
</blockquote>
<p>I just put in a little treatment for old posts:</p>
<div class="old-post-notice">
This post is more than 1,000 days old.
</div>
<p>Over time I am going to start bringing in older and older posts from my old blog, <em>dot unplanned</em>. I took much of it down several years ago during a big web reorg, but I want to start putting some of it back in place. It&rsquo;s me, in one way or another.</p>
<p>For a long while I didn&rsquo;t think much of what was in there. I guess that was a product of not thinking of myself as a dynamic person. I was just me, had been me, continued to be me.</p>
<p>I am not going to claim any transformational moment or conversion. I just know that one day I went to look something up I had written years earlier and realized I didn&rsquo;t completely recognize the author.</p>
<p>At that particular moment the things that jumped out at me were my coarseness and my anger. Strange to realize that the very first entry I ever wrote in <em>dot unplanned</em> was some time in 2002. I&rsquo;d been out of the army for less than five years, and the year previous had contemplated getting recalled to duty.</p>
<p>The version of me writing in 2002 was still angry about what I&rsquo;d experienced, felt deeply uncomfortable around people for fear of being judged, and still talked the way I&rsquo;d learned to talk to get along in the barracks.</p>
<p>When I play the &ldquo;this is to then as then was to &hellip;&rdquo; game I realize that I am to the person writing in 2002 as that person was to me at nine years old.</p>
<p>Those old posts have been with me the entire time, though. Once I realized how much value they had for telling me where I&rsquo;d been, and for making me sit with the discomfort of decades-old ideas and behaviors I&rsquo;d once thought just fine, I started looking forward to the &ldquo;on this day&rdquo; reminder I got from the journaling tool I put them all in. Each day provides an opportunity to look back. Some days I remember exactly what I was thinking, other days I have no idea and would have bitterly denied ever talking that way or thinking that way.</p>
<p>Whatever turns up, I own all of it. That treatment at the top of those older posts is not so much an excuse as it is a reminder.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-02-27</title>
      <link>https://mike.puddingtime.org/posts/2023-02-27-daily-notes-for-2023-02-27/</link>
      <pubDate>Mon, 27 Feb 2023 10:52:37 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-27-daily-notes-for-2023-02-27/</guid>
      <description>TickTick and productivity, the hilarity of Doom, an electrical failure, Tailscale, design fiddling</description>
      <content:encoded><![CDATA[<p><em>I used to do a daily page for my old dotunplanned blog, where I&rsquo;d dump things in as I thought about them and publish at the end of the day. Today&rsquo;s attempt to revive the custom is longer than usual because I ended up with a ton of time on my hands waiting for the electrician with all the infra shut down. We&rsquo;ll see how it goes.</em></p>
<h2 id="i-gamer">I, gamer</h2>
<p>The fun part of the PS4 has just been catching up on whatever has been going on in console gaming over the past while. I remember being a very avid gamer once upon a time &ndash; during the PS1 and PS2 era &ndash; then I was just really into the Nintendo DS, and then I didn&rsquo;t play much anymore. My 3DS never saw a lot of use, and I don&rsquo;t get much time in on the Switch. It has always felt like games on the Switch are too big to just pick up and put down between meetings, but too small to really invest discretionary time in.</p>
<p>So I got a PlayStationPlus membership and I&rsquo;ve been taking advantage of how cheap everything I&rsquo;m curious about is.</p>
<p>I <a href="https://mph.weblog.lol/2023/02/omg-its-a-weekly-update-2023-02-17">took a detour into the Doom remake</a>, and I am not sure if it&rsquo;s okay to say so, but I find it hilarious.</p>
<p>I remember Doom from when it was the slightly grittier evolution of Wolfenstein 3D, and it always to me to be solid execution with an excellent vibe. The remastered version I downloaded to my PlayStation is also pretty well executed, and the vibe benefits from the graphical advancements.</p>
<p>The first time I killed a demon by running up to it, tearing its arm off and beating it until it spilled ammo and health like an infernal piñata made me howl.</p>
<p>The whole thing is sort of hilarious that way. You end up in hell fighting demons to a grinding, thrashing soundtrack, there are demonic runes everywhere, bodies, flames, blood all over the place. It&rsquo;s just hilarious.</p>
<div style="position: relative; width: 100%; padding-bottom: 56.25%;">
<iframe
style="position:absolute; width:100%; height:100%;"
src="https://getyarn.io/yarn-clip/ee8eff9b-869e-462f-a4c0-1ec7b6565562/embed?autoplay=false&responsive=true"
frameborder="0"
></iframe>
</div>
<h2 id="i-handyman">I, handyman</h2>
<p>I just fixed our garage door sensor for the third time in fourteen years. I predicted it would go differently this time the last time I fixed it, because the recurring problem is a pair of wires leading to the sensor that periodically get snagged by &hellip; something  &mdash; a yard tool, a piece of bicycle, a carelessly plopped laundry basket &mdash; and one of them breaks.</p>
<p>Whoever built the house and installed the garage door provided as much wire as was needed to connect the sensor, then covered the wiring in dryall. If there is any spare wiring available up there in the wall somewhere, it is smashed in place behind the drywall and I&rsquo;ve tugged at it as hard as I dare lest I break off the remaining bits coming out of the wall.</p>
<p>So I&rsquo;ve known for five years now that there was no more wire coming out of the wall &hellip; that the next break would be the one where I&rsquo;d have to splice more wire in, because there wasn&rsquo;t enough left to cover the space from the wall to the sensor and still get it wrapped around the post.</p>
<p>Anyhow, this time Gorilla Tape is involved in making it all sit there more snugly and less likely to be snagged and I can close the garage door without standing there holding the button. That has created a surprising amount of friction where taking my bike anywhere is concerned.</p>
<p>I had the time to do this today because the half of the house that hosts all our networking infrastructure and my office sits shrouded in darkness. The breaker for that circuit failed last week as the winter storm was happening. It didn&rsquo;t fail in the &ldquo;it just blew, you can reset it&rdquo; kind of way, but in the &ldquo;fails and doesn&rsquo;t even seem to have blown and you can&rsquo;t even trip the test switch&rdquo; kind of way.</p>
<p>I felt it coming &ndash; the UPS for all the infrastructure was making the click it makes when the supply is getting frisky, but never tripped over into &ldquo;I&rsquo;m running on battery power now.&rdquo; When everything did finally go dark I went down to the garage, couldn&rsquo;t seen a tripped breaker, flipped the two candidates (both are labeled the same thing and I&rsquo;ve never taken the time to label them &ldquo;front&rdquo; and &ldquo;back&rdquo;) and went back upstairs to &hellip; nothing.</p>
<p>Then eight hours later it all lit up again. Then failed again.</p>
<p>Same symptoms: Not tripped, can&rsquo;t test.</p>
<p>I called the home warranty company and they promised a 24 hour window for a contractor, but by then Portland was covered in ice. They finally texted this morning, asked for availability, and are on their way.</p>
<p>For now the router, Wi-Fi, and switch are running off of a long extension cord running out of my office, down the hall and into an outlet on the not-blown upstairs circuit.</p>
<p>The last time we had an electrical problem like this was maybe 10 years ago during a pair of 100-degree-plus days. A light fixture that was a little heavy pulled itself free of a softened nylon anchor and the clash of wires tripped the arc breaker (on the same circuit that&rsquo;s bothering me now). That was when we learned that whoever wired the house had run the range hood in the kitchen downstairs into the same circuit as the two bedrooms and bathroom on the other, upstairs end of the house.</p>
<p>&ldquo;Some Russian, probably,&rdquo; opined the contractor who came to have a look.</p>
<p>I destroyed an <a href="https://en.wikipedia.org/wiki/AirPort_Extreme">Airport Extreme</a> that week by bringing it down from my office and putting it the only place it could rest near the only open outlet, in a window.</p>
<p>I say &ldquo;destroyed,&rdquo; but what really happened was that the Ethernet port stopped working.</p>
<p>The &ldquo;Progress!&rdquo; note in all this is that during the period where all the networking and Wi-Fi was down, we just flipped to the 5G hotspots our phones provide and carried on with our business. It doesn&rsquo;t outperform <a href="/posts/2023-02-21-the-miracle-of-moca/">the new MOCA/EdgeRouter/CenturyLink</a> setup, but it is faster than our Xfinity/Eero-as-wireless-only-mesh setup was.</p>
<p>Last time, I would imagine all we had was 3G, and there was no &ldquo;all you can eat.&rdquo; I remember because we burned through our cap, decided to go to the mall for the air conditioning, and my attempt to transfer some spending money to Ben using the mobile bank page took five minutes because AT&amp;T dealt with data hogs by dropping them to EDGE speeds until the month was over.</p>
<h2 id="ticktick">TickTick</h2>
<p>I&rsquo;m giving TickTick a try this week. Stuff I like about it:</p>
<ul>
<li>The interface looks as simple or busy as I want it to be. Something I appreciate about Things 3 is its ability to fall back to &ldquo;just a nice todo list app&rdquo; during those times when I don&rsquo;t feel like messing with it.</li>
<li>It has a habit tracker that integrates with the rest of the app. If you set up a habit and it&rsquo;s due, it turns up in the &ldquo;Today&rdquo; list, or you can interact with it in its own &ldquo;habits&rdquo; area.</li>
<li>It has a built-in Pomodoro timer. That method works pretty well for me (using it now!) and it&rsquo;s more than a superficial integration: You can specify what on your list is getting the time.</li>
</ul>
<p>Stuff I&rsquo;d rather it not:</p>
<p>Everything is framed as &ldquo;how productive&rdquo; you are. I&rsquo;m just tired of that language.</p>
<p>I am tired of that language because after a couple of years of watching people burn out and then thrash around trying to figure out what was &ldquo;wrong&rdquo; with them, I came to the conclusion that as much as the gentrification of mental illness annoys the living hell out of me, it doesn&rsquo;t <em>outrage</em> me the way the modern workplace turns workers on themselves (and deepens that gentrification feedback loop, because the only help you&rsquo;re going to get as you thrash around, worrying that you&rsquo;re falling behind your peers in the company&rsquo;s &ldquo;performance culture,&rdquo; is a non-ironic invitation to take your woes to the EAP).</p>
<p>And, more importantly, not every single thing you want to do has to be &ldquo;productive.&rdquo;  It is not, for instance, a matter of &ldquo;productivity&rdquo; to remind myself that I want to read a chapter of a book every day, or learn how to make my own mayonnaise, or take a picture every day.</p>
<p>Anyhow, it&rsquo;s pretty easily ignored if you stay away from the reporting, which I intend to. I just want something more ergonomically sound than Apple&rsquo;s Reminders, and the purpose-built habit and pomodoro stuff rolls a number of things into one context.</p>
<h2 id="tailscale">Tailscale</h2>
<p>I spent a while not bothering to play with tech stuff, so when I heard about <a href="https://tailscale.com">Tailscale</a> I never did anything with it. Once I <a href="/posts/2023-02-21-the-miracle-of-moca/">got my new network stuff going</a> I decided to start doing more with my Synology NAS just because it&rsquo;d be easier to network and secure with a decent router in place.</p>
<p>Poking around the VPN packages available for it I saw the Tailscale app and thought &ldquo;oh, that.&rdquo;  In just a few minutes I had all my stuff added to it and talking to each other, and a whole set of problems I was willing to create for myself went away.</p>
<p>I haven&rsquo;t done any testing with it out in the world yet, but internally it integrates fine with my internal DNS. It&rsquo;s so smooth.</p>
<h2 id="design-fiddling">Design fiddling</h2>
<p>I spent a little time fiddling with site design today, too, just to make the front page a little more lively. I took a swing at some responsive design, as well. It&rsquo;s crude, but the front page is way more &ldquo;just the essentials&rdquo; on a phone, were someone to wander out to it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Ghost Dog: The Way of the Samurai, 24 years later</title>
      <link>https://mike.puddingtime.org/posts/2023-02-26-ghost-dog--the-way-of-the-samurai--24-years-later/</link>
      <pubDate>Sun, 26 Feb 2023 19:02:20 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-26-ghost-dog--the-way-of-the-samurai--24-years-later/</guid>
      <description>A rewatch of Ghost Dog: The Way of the Samurai 24 years later causes me to re-appreciate 1999 in movies, and reappreciate on odd but poignant consideration of purpose.</description>
      <content:encoded><![CDATA[<p><img src="/img/ghost_dog_poster.jpg" alt="A movie poster for Ghost Dog: The Way of the Samurai"></p>
<p>Al and I went to see a 35mm screening of 1999&rsquo;s <em>Ghost Dog: The Way of the Samurai</em>. I noted a few days ago that I often forget it was part of the &ldquo;class of &lsquo;99&rdquo; &ndash; a great year for movies that included:</p>
<ul>
<li><em>Fight Club</em></li>
<li><em>The Matrix</em></li>
<li><em>Eyes Wide Shut</em></li>
<li><em>Office Space</em></li>
<li><em>Magnolia</em></li>
<li><em>But I&rsquo;m a Cheerleader</em></li>
<li><em>The Virgin Suicides</em></li>
<li><em>Being John Malkovich</em></li>
<li><em>The 13th Warrior</em></li>
<li><em>Boys Don&rsquo;t Cry</em></li>
<li><em>Election</em></li>
<li><em>Mystery Men</em></li>
<li><em>Three Kings</em></li>
<li><em>The Limey</em></li>
<li><em>Ravenous</em></li>
<li><em>Summer of Sam</em></li>
</ul>
<p>1998 hadn&rsquo;t been a slouch, either:</p>
<ul>
<li><em>The Big Lebowski</em></li>
<li><em>The Thin Red Line</em></li>
<li><em>Buffalo &lsquo;66</em></li>
<li><em>Ronin</em></li>
<li><em>A Simple Plan</em></li>
<li><em>Run Lola Run</em></li>
<li><em>The Opposite of Sex</em></li>
<li><em>Smoke Signals</em></li>
</ul>
<p>&hellip; and 2000 kept did okay:</p>
<ul>
<li><em>American Psycho</em></li>
<li><em>Memento</em></li>
<li><em>Almost Famous</em></li>
<li><em>Crouching Tiger, Hidden Dragon</em></li>
<li><em>O Brother, Where Art Thou?</em></li>
<li><em>Boiler Room</em></li>
<li><em>Battle Royale</em></li>
<li><em>Amores Perros</em></li>
<li><em>The Way of the Gun</em></li>
</ul>
<p>I picked some of the ones I did because we reaped something wonderful from the popularization of the indy sensibility. <em>Reservoir Dogs</em> had played twice in my town in 1992, first in its art house run and then in the cineplexes when it got a wider distribution deal. It took a few years for that sensibility to thoroughly saturate mass culture and then begin to attract big studio money, but it eventually got there. Maybe my own tastes broadened, but my sense is that something raw and vital found expression over the course of the &rsquo;90s.</p>
<p><em>Ghost Dog</em> is of a piece with a number of the fascinations of the era, and with its postmodern &ldquo;toss the genres in a blender&rdquo; sensibilities. Roger Ebert picked up on it <a href="https://www.rogerebert.com/reviews/ghost-dog-the-way-of-the-samurai-2000">in his own review</a>:</p>
<blockquote>
<p>&ldquo;The whole story is so strange, indeed, that I&rsquo;ve read some of the other reviews in disbelief. Are movie critics so hammered by absurd plots that they can&rsquo;t see how truly, profoundly weird &lsquo;Ghost Dog&rsquo; is?&rdquo;</p>
</blockquote>
<p>&hellip; and the Charlie Kaufman Epoch had just begun.</p>
<p>Ebert picked up on something else:</p>
<blockquote>
<p>&ldquo;His profound sadness, which permeates the touching Whitaker performance, comes from his alienation from human society, his loneliness, his attempt to justify inhuman behavior (murder) with a belief system (the samurai code) that has no connection with his life or his world. Despite the years he&rsquo;s spent studying The Way of the Samurai, he doesn&rsquo;t even reflect that since his master doesn&rsquo;t subscribe to it, their relationship is meaningless.&rdquo;</p>
</blockquote>
<p>That&rsquo;s the thing that I took away from my first viewing, over 20 years ago, and found again with last night&rsquo;s viewing.</p>
<p>There are flickers, in a few scenes between Ghost Dog and people on the street perhaps most especially with RZA&rsquo;s brief walk-on, of a hidden world. And Ghost Dog is undeniably competent &ndash; more competent than I remembered before re-watching &ndash; but at the center of it all is whatever brokenness led to him making himself whole with his adopted code. It makes the movie a wonderful opportunity to reflect on our own codes and our own sense of purpose, however we&rsquo;ve found it.</p>
<p>I think that was perhaps one of the best parts of those few years in Hollywood: There was this Tarantino-inspired eclecticism of style, &ldquo;weird&rdquo; was pretty normal compared to the &rsquo;80s, and the best movies of that time were also trying to find some sort of raw, emotive truth in the middle of their weirdness.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A little more on versatile bags and pouches</title>
      <link>https://mike.puddingtime.org/posts/2023-02-26-a-little-more-on-versatile-bags-and-pouches/</link>
      <pubDate>Sun, 26 Feb 2023 14:52:39 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-26-a-little-more-on-versatile-bags-and-pouches/</guid>
      <description>There&amp;rsquo;s a difference between the Peak Design Field Pouch v1 and v2 that has caused me to reconsider my recommendation.</description>
      <content:encoded><![CDATA[<p>Right after <a href="/posts/2023-02-26-my-edc-solution-fell-on-my-foot-this-morning-/">my post on the search for an EDC bag</a> went live I went down to the living room to dig out a spare strap and a second Peak Design Field Pouch in my motorcycle backpack.</p>
<p>&ldquo;Oh,&rdquo; I thought to myself, I bet it&rsquo;s the v1 I demoted to tool pouch when I got a v2.</p>
<p>Turns out I had it backwards: The first pouch I found and wrote about was a v1, and the one I&rsquo;d just found was a v2.</p>
<p>&ldquo;Huh. Well, I bet it&rsquo;s better!&rdquo; so I started the process of moving things over from the v1 to the v2.</p>
<p>It also turns out that the v2 moved backwards in a few ways that are important to me:</p>
<ul>
<li>There are storage pouches in the main storage area and they&rsquo;re more shallow.</li>
<li>There are more pouches in the zip area, but they&rsquo;re even more shallow and narrow, fit for little more than memory cards.</li>
</ul>
<p>The problem with the former is that the main pouches in the v2 are too shallow to clip in a multitool or flashlight. They barely work with my tiny Space Pen and they definitely won&rsquo;t hold my Magsafe battery. From the color stitching, it&rsquo;s clear they&rsquo;re meant for camera batteries.</p>
<p>The problem with the latter is that what extra partitions there are won&rsquo;t help with anything I&rsquo;d put in them.</p>
<p>It seems likely Peak Design decided to push the Field Pouch in the direction of a more narrow photography use case. Maybe, with the advent of the Tech Pouch, it made sense to specialize it a little more. I don&rsquo;t know.</p>
<p>Anyhow, I would not recommend the Field Pouch v2 as an EDC bag.</p>
<h2 id="north-st-alternatives">North St. alternatives</h2>
<p>But, you know, never identify a problem without having a solution on hand, so I&rsquo;ll happily offer an alternative: <a href="https://northstbags.com/collections/hip-packs">The North St. Pioneer</a> with a few accessories.</p>
<p><img src="/img/north_bag.jpg" alt="A small, square, green bag"></p>
<p>North St. is a bag company here in Portland. They make a lot of bicycle-forward stuff, and they make a line of hip packs that come in 8, 9, and 12-inch-wide sizes. The nine- and twelve-inch models can accommodate small, velcro-backed waterproof zipper pockets with internal pouches.</p>
<p>The Pioneer 8 is a little too small for my tastes, and the shoulder/waist strap is sewn on. That doesn&rsquo;t work for my own use case of wanting something I can carry standalone or drop into a bigger bag of some kind. If you just wanted to carry a battery, a tool, and a few other small things it could work really well.</p>
<p>The Pioneer 12 is a little large to fit in a backpack gracefully, but it can hold a lot.</p>
<p>The Pioneer 9 hits the sweet spot. It is about the size of the Peak Design Field Pouch and is only a little more thick, so anywhere you&rsquo;d put the Field Pouch you can put the Pioneer 9. You can order it in a waterproof material and it has a rain-sealed main zipper. You can also order a handlebar carrier or shoulder strap for it. It also has a front pocket that&rsquo;s great for stowing a few things you want to get at quickly without rummaging. I put my <a href="https://www.machine-era.com/products/ti-wallet">Machine Era wallet in it</a>.</p>
<p>Walking around with them you can use them as a waist pack, a cross-body bag, or a tiny sling, and with one strap you can flip between those modes easily. The clips for the assorted straps and carrying attachments are fiddly, but one solution for that is to add small &lsquo;biners or Peak Design anchors to the strap eyes.</p>
<p>I still give the Peak Design Field Pouch v1 a bigger nod:</p>
<ul>
<li>It seems more durable.</li>
<li>Its internal storage suits my tastes.</li>
<li>It&rsquo;s more expandable.</li>
</ul>
<p>But the North St. Pioneer can be ordered in nicer colors and has more versatile carry options.</p>
<p>Either way, I&rsquo;d stay away from the Peak Design Field Pouch v2. I love Peak Design and I&rsquo;ve bought more of their v2 stuff than is seemly, but the second generation Field Pouch was a rare regression.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I think my EDC solution fell on my foot.</title>
      <link>https://mike.puddingtime.org/posts/2023-02-26-my-edc-solution-fell-on-my-foot-this-morning-/</link>
      <pubDate>Sun, 26 Feb 2023 09:56:45 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-26-my-edc-solution-fell-on-my-foot-this-morning-/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Just after posting this I realized I wrote about the older version of the Peak Design Field Pouch. I also realized I had both versions and was able to make a quick comparison. &lt;a href=&#34;https://mike.puddingtime.org/posts/2023-02-26-a-little-more-on-versatile-bags-and-pouches/&#34;&gt;This followup&lt;/a&gt; cautions against the newer version of the Field Pouch and offers an alternative.&lt;/em&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><em><strong>Note:</strong> Just after posting this I realized I wrote about the older version of the Peak Design Field Pouch. I also realized I had both versions and was able to make a quick comparison. <a href="/posts/2023-02-26-a-little-more-on-versatile-bags-and-pouches/">This followup</a> cautions against the newer version of the Field Pouch and offers an alternative.</em></p>
<p>I spent a bunch of time online trying to find an &ldquo;EDC&rdquo; carrying &hellip; pouch? baglet? case? &hellip; and I ended up going with the thing that fell on my foot after I gave up and decided to get a scarf out of the closet.</p>
<p>I put &ldquo;EDC&rdquo; in scare quotes because the entire product category is a drop-ship grifter&rsquo;s paradise of overpriced junk and product shot VSCO filter abuse marketed to operator culture tacti-cool wannabes and preppers who have decided to burn all fiat currency one Amazon order at a time.</p>
<p>But it has also become shorthand for a whole category of useful things that have existed forever on the edge of diverse markets: surplus stores, outdoor stores (both middle class peddlers like REI and high prole outlets like Sportsman&rsquo;s Warehouse), and even book stores. So any search for things in this category must eventually include punting and tossing &ldquo;EDC&rdquo; into your search terms.</p>
<p>Anyhow, I was looking for some kind of pouch or carrying case for a set of  things I both want to have on me if I go out, and want in one place when I am home:</p>
<ul>
<li>Leatherman Skeletool</li>
<li>Wired earbuds</li>
<li>Lens wipes</li>
<li>Spare camera batteries</li>
<li>Spare SD cards</li>
<li>A mask</li>
<li>Small flashlight</li>
<li>Pocket notebook</li>
<li>Space Pen</li>
<li>MagSafe phone charger</li>
<li>Glasses case</li>
</ul>
<p>(EDC influencer conventions dictate that I lay all this stuff out in a neat grid, preferably on a rustic wooden surface, and take a top-down picture. They also dictate that every single one of those things be an Amazon affiliate link. I am going my own way here.)</p>
<p>It&rsquo;s a healthy amount of small but varied stuff, and keeping it all in a single, predictable place is an ADHD adaptation:</p>
<p>When things find their way out of the collection, as they will, I know where they go the second I spot them a day or two later on a bookshelf, or the bedside table, or the kitchen counter, and I can rally my executive function to grab them and head straight for whatever I&rsquo;m keeping them in.</p>
<p>Some people just keep this stuff in a single bag that goes with them everywhere. I admire these people, but that doesn&rsquo;t work for me. Too many &ldquo;out of the house&rdquo; scenarios: Everything from &ldquo;five mile round-trip walk for groceries in Woodstock&rdquo; to &ldquo;bike ride to northeast for lunch&rdquo; to &ldquo;weekend camping trip&rdquo; (when the Garmin InReach gets clipped to a loop) to &ldquo;ten mile longboard ride down the Springwater,&rdquo; to &ldquo;backroads motorcycle ride out to Estacada.&rdquo;</p>
<p>And there&rsquo;s Portland weather, too. The best, most stout waterproof bag is okay in winter but bulky and sweaty in summer. As a result I&rsquo;ve slowly accreted a collection of bags and backpacks over the years: A smallish REI daypack, a selection of Peak Design slings and backpacks, a Kavu rope sling, a North Street hip bag, a Tom Bihn cross-body satchel, and a Banjo Brothers bike backpack. Moving my collection back and forth between those things is kind of a drag.</p>
<p>So I spent a bunch of time searching. I read through review sites, watched a video or two, followed shopping results links, searched on retailer sites, and just generally poked around, and couldn&rsquo;t find the sweet spot:</p>
<ul>
<li>Can hold all my stuff.</li>
<li>Can close tightly enough to keep things from jumbling around or rattling.</li>
<li>Can fit in my bags and slings and leave room for them to perform their main purpose.</li>
<li>Can provide enough internal organization that opening it up and finding the thing I need won&rsquo;t involve rummaging and can probably be done by touch in the dark.</li>
<li>Has enough room to add a specialty tool. I don&rsquo;t, for instance, always want to carry my skate tool, but do like to have it toward the start of the longboarding season so I can adjust the trucks while I get my balance back.</li>
</ul>
<p>At a certain point there are some things in my bag/sling collection that have to be excluded from consideration. My 5l Peak Design Everyday Sling, for instance, could accommodate this collection all on its own, with a little room left over to fit an iPad mini and maybe my Ricoh GR3x, but it is bulky and doesn&rsquo;t have great internal organization, so it&rsquo;d swallow too much of the space of anything I carried it in.</p>
<p>After looking around long enough, I just gave up.</p>
<p>Most stuff in the &ldquo;EDC pouch/case/whatever&rdquo; category was too small:</p>
<p>Enough room for the holy trinity of multitool, pen, and flashlight plus a few small incidentals. That doesn&rsquo;t feel like enough to actually bother. I&rsquo;d solve that with a valet tray in a central location I could sweep into a side pocket.</p>
<p>There are some handy bigger things that were a little too big. The <a href="https://www.peakdesign.com/products/tech-pouch?variant=33179386183757">Peak Design Tech Pouch</a> is nice and I have one stowed in the trailer for a collection of adapters, cables, and other camping incidentals during the season, but it&rsquo;s basically a redesigned toiletry bag. It&rsquo;d work great for backpack-sized things, but not slings or satchels.</p>
<p>I also looked at tool rolls, but didn&rsquo;t like the ergonomics of getting things out of one.</p>
<p>Stuff in the bicycling category tends to assume you want to stick the kit in your back jersey pocket or maybe a wedge pack, and tends to be focused on repairs plus one or two doses of energy goop of some kind.</p>
<p>There is a massive amount of tacti-cool operator culture stuff, but it is usually overbuilt and bulky. The ratio of surface area to useful storage space is poor, and by the time you add all the little molle attachments and mounting points it&rsquo;s going to snag anything else you put in the bag with it.</p>
<p>The last time I went at this problem I even considered going Full Nerd on it with a <a href="https://www.scottevest.com/collections/mens-vests">Scott-E-Vest</a>, but a. no and b. they have solved the seasonal problem in a way that excludes Oregon&rsquo;s climate and involves paying them north of $1000 before they&rsquo;re done with you. Plus no amount of artful product photography can hide the fact that if you used that stuff for real you would look like you were hiding a raging case of cuboid Borg tumors under your khaki vest.</p>
<p>Can we just pause. Go hit that link, look at the product photography and the models, and ask yourself how deep-seated your fear of being seen carrying a bag must be if wearing an inside-out fishing vest even in summer is the answer to having too much shit.</p>
<p>Years ago I came across the insight that &ldquo;carrying a lot of stuff around&rdquo; is an inverse economic privilege marker. The idea was that a middle class person&rsquo;s thought process about the possibility of rain in the afternoon involves a shrug and walking out of the house hands-free because they can always duck in and buy an umbrella if it does start raining. The Scott-E-Vest company disagrees and will sell you a vest with 26 pockets that can, they want you to know, hold an umbrella, for ~$184.</p>
<p><img src="/img/scott-e-vest.jpg" alt="Picture of a smiling man sitting in a vest with a table full of stuff in front of him"></p>
<p>Actually, someone in the Scott-E-Vest marketing department must have read the same article, because the brass telescope stand in the background reads as almost reassuring.</p>
<p>So like I said, I just gave up and found a little basket where I could keep that stuff, and selectively add or take things away from whatever bag I was going to head out with.</p>
<p>Then we decided to go to a movie this weekend and it was cold outside. Ben bought me a nice scarf for Christmas I&rsquo;ve been meaning to wear, so I went upstairs to my closet to pull it down. Something came off the top shelf with it and landed on my foot:</p>
<p>A Peak Design field pouch I bought when I first learned about the brand, six or seven years ago.</p>
<p>This is a product shot from Peak Design showing one stuffed to the gills:</p>
<p><img src="/img/pd_field_pouch.jpg" alt="A nylon pouch opened up to show its contents: phone charger, camera accesories, etc."></p>
<p>I had used it on and off for long weekends, mostly as a way to carry batteries, charger, and small camera bits, then stopped using it much and put it on the top shelf of the closet. It had a certain &ldquo;a little big for how I was using it, too small to use for carrying anything extra&rdquo; quality I never got over.</p>
<p>It turns out that it is the perfect size for all my stuff. There&rsquo;s a zipper pocket inside, a few stretchy internal pouches, a pair of stiff pouches on the back wall, and a main storage area that&rsquo;s generous enough for the basics plus an extra thing or two. It&rsquo;s enough to keep everything organized and findable by touch.</p>
<p>When I fold it down it&rsquo;s held shut by strong velcro. There&rsquo;s a belt passthrough on the back for strapping it to the outside of a bigger pack. I had previously put two Peak Design anchor links on it, so I can even use it as a small bag on its own, but quickly convert it back to just being a carrying pouch I can toss in something else without having the clutter of a strap.</p>
<p>Theoretically you can stick a <a href="https://www.peakdesign.com/collections/camera-gear/products/capture">Peak Design Capture</a> on it and use it for camera carry. I&rsquo;ve never warmed up that particular use case for any of their stuff: I use the Capture on my backpacks for when I need to scramble over rocks or logs and don&rsquo;t want my camera hanging loose from its strap. That&rsquo;s owing to a 15-years-past trauma that involved my camera achieving a perfect, lens-first pendulum motion into a jagged rock. (Always buy a UV filter, kids.) But for carrying a camera around, I&rsquo;ll just live with having a strap for my bag and a strap for my camera.</p>
<p>In terms of size, it&rsquo;s a little large: It&rsquo;s about the width of a trade paperback and maybe a little longer, but only three fingers thick at its widest with all my stuff in it.</p>
<p>It also ticks the weather resistance box: It folds down tight and is made of the usual Peak Design materials, so it&rsquo;s thick and could survive in a non-weather-resistant bag in a sudden downpour.</p>
<ul>
<li>
<p>With my Peak Design Messenger, it fits fine in one of the foldable compartments, leaving room for body and lens or two lenses in the other compartments.</p>
</li>
<li>
<p>With my daypacks, it fits neatly on the bottom, or could rest on top of whatever cargo ends up in there by the end of the day.</p>
</li>
<li>
<p>With my Kavu Rope Sling it fits in the secondary zipped compartment as if  made for it, leaving room in the main for a few books, etc.</p>
</li>
<li>
<p>With my Tom Bihn satchel it easily fits in the back-side pocket, leaving room in the front for a book or two, an iPad mini, etc.</p>
</li>
<li>
<p>At home, it just sits on a small shelf on the hall tree by the front door, close to my battery chargers, looking unobtrusive.</p>
</li>
</ul>
<p>So, we&rsquo;ll see? It looks good on paper? I won&rsquo;t really know until this time next year, when it has been through all the seasons.</p>]]></content:encoded>
    </item>
    <item>
      <title>Picture of the Week: Billboard</title>
      <link>https://mike.puddingtime.org/posts/2023-02-24-potw/</link>
      <pubDate>Fri, 24 Feb 2023 16:39:52 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-24-potw/</guid>
      <description>&lt;figure&gt;
  &lt;a href=&#34;https://pix.puddingtime.org/PictureOfTheWeek/i-T2djKNX&#34; alt=&#34;Monochrome. A person walks along in a winter storm under the light of a billboard.&#34;&gt;
    &lt;img src=&#34;https://photos.smugmug.com/PictureOfTheWeek/i-T2djKNX/0/16f8a44b/XL/snow-walk-3-XL.jpg&#34; /&gt;
  &lt;/a&gt;
&lt;figcaption&gt;
Picture of the Week: Billboard
&lt;/figcaption&gt;
&lt;/figure&gt;</description>
      <content:encoded><![CDATA[<figure>
  <a href="https://pix.puddingtime.org/PictureOfTheWeek/i-T2djKNX" alt="Monochrome. A person walks along in a winter storm under the light of a billboard.">
    <img src="https://photos.smugmug.com/PictureOfTheWeek/i-T2djKNX/0/16f8a44b/XL/snow-walk-3-XL.jpg" />
  </a>
<figcaption>
Picture of the Week: Billboard
</figcaption>
</figure>
]]></content:encoded>
    </item>
    <item>
      <title>My MOCA and EdgeRouter X makeover</title>
      <link>https://mike.puddingtime.org/posts/2023-02-21-the-miracle-of-moca/</link>
      <pubDate>Tue, 21 Feb 2023 14:15:37 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-21-the-miracle-of-moca/</guid>
      <description>&lt;p&gt;Come April I will have lived in this house for 14 years, and if there are two facts about it that I do not like, it is these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whoever built it didn&amp;rsquo;t install Ethernet connections, but did see fit to wire up every room + the living room with coax drops.&lt;/li&gt;
&lt;li&gt;Depending on how you look at it, it is either very wide or very long. Either way, it is incredibly hostile to plain old Wi-Fi.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When we first moved in it was plain that the traditional Wi-Fi router that had worked well from a central location in our last house was not going to fare so well tucked away in the far corner of the house with the Comcast drop.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Come April I will have lived in this house for 14 years, and if there are two facts about it that I do not like, it is these:</p>
<ul>
<li>Whoever built it didn&rsquo;t install Ethernet connections, but did see fit to wire up every room + the living room with coax drops.</li>
<li>Depending on how you look at it, it is either very wide or very long. Either way, it is incredibly hostile to plain old Wi-Fi.</li>
</ul>
<p>When we first moved in it was plain that the traditional Wi-Fi router that had worked well from a central location in our last house was not going to fare so well tucked away in the far corner of the house with the Comcast drop.</p>
<h2 id="the-problem-with-powerline">The problem with powerline</h2>
<p>My first stab at the problem was a <a href="https://en.wikipedia.org/wiki/Power-line_communication#Home_networking_(LAN)">Powerline kit</a>. It suggested decent performance on the box but didn&rsquo;t work well in practice. A little troubleshooting later and I figured out that the switch/Comcast modem in the office were on a different circuit from the powerline adapter in the living room. It was okay enough to let the AppleTV stream, but not always well, and the laptops and phones were stuck with the distant Wi-Fi from upstairs.</p>
<h2 id="enter-eero">Enter Eero</h2>
<p>The next thing I did, years later, was buy an <a href="https://www.eero.com">Eero</a> setup. I put the base in my office with the Comcast drop, put a unit down the hall from there, and put a unit in the living room. That worked pretty well.</p>
<p>With the Eero setup, Ben and I had decent coverage on our end of the upstairs, the bedroom did okay from the living room beneath, and the living room was fine. Speed tests never broke 185-200Mbps, but we only had a 250Mbps connection and it wasn&rsquo;t like I was moving large stuff around the network. Ben complained a little about ping latency once he was into games where that mattered, so I ran an Ethernet cable out of the switch in my office and into his room next door.</p>
<p>It was one of those deals where you get as far as you can go without doing the thing you probably should have just gone ahead and done, which was paying to have someone come wire us up for Ethernet. Or so I thought. We&rsquo;ll get to that.</p>
<h2 id="getting-centurylink">Getting CenturyLink</h2>
<p>The Comcast/Xfinity connection was much better than their reputation suggests. I can only remember four or five outages of more than a few minutes over nearly 14 years. Only one went so long that I got frustrated and called support for an ETA, and was pleasantly surprised to work with a tech who explained what had happened, explained why they had blown their initial estimate, and sat with me to see if the thing they were about to try worked. I always got my promised speed, too.</p>
<p>The main pain I experienced came down to photo backups to the public cloud. It took weeks to get my library into an S3 bucket. When I decided I didn&rsquo;t want to use Amazon anymore, the thought of switching backup providers was pretty daunting. The 250Mbps that was good enough for everyone to play games or stream movies wasn&rsquo;t any good for 20 years of digital photography.</p>
<p>A layoff and some extra care with the budget also made me internalize that Comcast&rsquo;s introductory offer had worn off eons ago and I was paying more than double what people with fiber connections were paying for a quarter of the speed they were getting. So I decided to try CenturyLink. I had the connection installed in parallel with the Comcast one in case something went horribly wrong for whatever reason.</p>
<p>In terms of pure performance, CenturyLink worked really well. They told me the cable had to be run pretty far to get to my house, so instead of &ldquo;a whole gig&rdquo;, they told me I could expect 940 megs or a little slower. Every speed test wired straight into their router netted me 940Mbps.</p>
<p>A few problems presented themselves, though:</p>
<ul>
<li>My Eero and CenturyLink&rsquo;s <a href="https://www.reviews.org/internet-service/what-is-an-ont-optical-network-terminal/">ONT</a> didn&rsquo;t really like each other much.</li>
<li>Once you know there&rsquo;s upwards of 940Mbps available to anything in reach of a switch, it&rsquo;s hard to crawl along at 200Mbps down in the living room.</li>
</ul>
<p>The first problem was one of those things I couldn&rsquo;t get past. You pay some premium for Eero stuff in part because it&rsquo;s very plug-n-play and you get some routing functionality out of it. Not a ton, but enough to manage very basic home networking tasks like port forwarding.</p>
<p>The price for that plug-n-play convenience comes in the form of time lost dealing with it when something goes wrong. Not a ton goes wrong if you&rsquo;re not doing much with the kit past swapping in updated hardware or normal tasks. Things can go very wrong if you step outside Eero&rsquo;s sweet spot, which involves letting your ISP&rsquo;s modem negotiate the connection but run in bridge mode, and letting the Eero step in as the router.</p>
<p>I got snagged by this because Comcast uses a cable modem/DHCP and CenturyLink uses an ONT and PPPoE (in some markets, not in others, check for yourself before taking any of my advice in the howto part below).</p>
<p>You can overcome the hiccups, but Eero doesn&rsquo;t let you change the kind of Internet connection it expects without &ldquo;deleting the network&rdquo; and starting over. &ldquo;Deleting the network&rdquo; just means you deconfigure everything, step through a setup wizard using PPPoE for your upstream, then go through and re-onboard all your Eero access points.</p>
<p>That involves a ton of sitting around watching the light on the Eero pulse assorted colors and patterns, then finding out something went wrong somewhere, and starting over, or restarting the ONT and THEN starting over when it still doesn&rsquo;t work, or restarting the ONT and it all seems to work and then Eero tries to do an update and dumps your config information and you have to delete the network and &hellip; and &hellip; and &hellip;</p>
<p>Ultimately, after a few retries, I decided I was not willing to live with an Internet connection that couldn&rsquo;t survive a firmware update. With some regret I just put the Eero in bridge mode (effectively removing any of its value as a router) and turned those responsibilities over to the CenturyLink modem/router that came with my install.</p>
<p>People hate CenturyLink&rsquo;s router, but I do have a few things to say in its defense:</p>
<ul>
<li>The admin console doesn&rsquo;t work correctly in Safari, but works great with Chrome. See? Half full!</li>
<li>It was reliable. No matter what was going wrong elsewhere in my setup, I could wire my Mac into it directly and it was where it belonged and it behaved.</li>
<li>Unlike the Eero, even major configuration changes involved at most a reboot, which took under a minute or so.</li>
<li>I got my promised speeds with it.</li>
<li>It came back from an initial firmware update without a hiccup.</li>
</ul>
<p>Its problems are that it looks like a gigantic air freshener, the interface is pretty clunky even when working correctly on a browser I prefer to avoid, and I didn&rsquo;t trust it to keep behaving after the next firmware update, or the next, because I&rsquo;ve been burned by ISP-owned gear in the past taking away functionality or just getting worse to deal with.</p>
<h2 id="replacing-centurylinks-router">Replacing CenturyLink&rsquo;s router</h2>
<p>So the CenturyLink router needed to go and I needed to put something in its place that would &ldquo;just work&rdquo; and replace all the router functionality I&rsquo;d lost with the Eero having to fall back to a simple bridge.</p>
<p>A little redditing and googling later, and I had a $50 Ubiquiti EdgeRouter X (ER-X) on the way.</p>
<p>The ER-X has five ports and is about the size of a small consumer Ethernet switch. It listens on an obvious address and is pretty easy to set up from the command line. <a href="https://www.reddit.com/r/Ubiquiti/comments/lr5afr/comment/gomz2vn/">Someone on reddit provided the recipe</a>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">set interfaces ethernet eth0 duplex auto
</span></span><span class="line"><span class="cl">set interfaces ethernet eth0 speed auto
</span></span><span class="line"><span class="cl">set interfaces ethernet eth0 vif 201 description &#39;Internet (PPPoE)&#39;
</span></span><span class="line"><span class="cl">set interfaces ethernet eth0 vif 201 pppoe 0 default-route auto
</span></span><span class="line"><span class="cl">set interfaces ethernet eth0 vif 201 pppoe 0 mtu 1492
</span></span><span class="line"><span class="cl">set interfaces ethernet eth0 vif 201 pppoe 0 name-server auto
</span></span><span class="line"><span class="cl">set interfaces ethernet eth0 vif 201 pppoe 0 password $YOURCLPPPOEPASSWORD
</span></span><span class="line"><span class="cl">set interfaces ethernet eth0 vif 201 pppoe 0 user-id $YOURCLUSERID</span></span></code></pre></div>
<p>It took a little fussing to get ssh access ironed out, and that was easier to manage from the config tree interface than the command line recipes I found, but now it&rsquo;s accessible via the shell using <a href="https://developer.1password.com/docs/ssh/manage-keys/">1Password&rsquo;s ssh key manager</a>, which I love.</p>
<p>Once I had the ER-X configured and talking to CenturyLink, I added my switch and Eero back in and everything worked fine. Making static DHCP assignments and port forwarding assignments was about the same as any consumer router I&rsquo;ve ever seen.</p>
<h2 id="er-x-tweaks-and-features">ER-X tweaks and features</h2>
<p>In order to get the full speed of my CenturyLink connection I had to make <a href="https://vancewest.com/ubiquiti-er-x-edgerouter-increase-performance-tweak/">one other tweak to set up hardware offloading</a>, which took my SpeedTest results from a disappointing 350Mbps to my promised speed of ~940Mbps.</p>
<p>The real test, and the point of the whole exercise, was to see if my $50 had bought me some reliability. A few restarts and three firmware updates later, I was satisfied: Each time the ER-X restarted, the PPPoE connection via the CenturyLink ONT came up just fine.</p>
<p>The ER-X also has built-in support for dynamic DNS. I&rsquo;ve had a kind-of-dumb domain using Dyn&rsquo;s service for years now. It has worked fine, but Cloudflare has some of my DNS and an API. Ubiquiti <a href="https://help.ui.com/hc/en-us/articles/204976324-EdgeRouter-Custom-Dynamic-DNS">just so happens to use Cloudflare as an example for a custom DDNS setup on the ER-X</a>, so I had that working in ten minutes, as well. The one snag I hit: You have to use the legacy API key Cloudflare provides to get the recipe to work with an ER-X.</p>
<p>Finally, I found <a href="https://github.com/j-c-m/ubnt-letsencrypt">a recipe to set up the ER-X&rsquo;s web admin GUI with a Let&rsquo;s Encrypt certificate, then automate renewals</a>. That worked really well once I realized I needed to <a href="https://github.com/j-c-m/ubnt-letsencrypt/issues/42">update cacert.pem</a> on the ER-x for the scripts to work. I don&rsquo;t intend to use the GUI outside my own network, but it&rsquo;s nice to not have the cert nags from browsers.</p>
<h2 id="adding-moca-to-the-mix">Adding Moca to the mix</h2>
<p>Even with the ER-X in place and helping to make my &rsquo;net connection reliable, I still had my original problem, which was the slow Wi-Fi speeds all over the house. The Eero was doing the best it could with what it had to work with, but the upstairs is kind of twisty and full of walls, and it&rsquo;s a long hike from the part of the house where the drops come in down to the living room.</p>
<p>A few months ago, as I was bemoaning the my home&rsquo;s terrible shape and Wi-Fi hating topography, a friend mentioned <a href="https://en.wikipedia.org/wiki/Multimedia_over_Coax_Alliance">MOCA</a>, which stands for &ldquo;Multimedia over Coax Alliance.&rdquo; The long and short of it is that you can get gigabit ethernet speeds using the MOCA standard. You just have to connect a small adapter with an Ethernet port to a coax jack and connect another small adapter with an Ethernet port to another coax jack, and you&rsquo;ve got a pair of Ethernet drops.</p>
<p>The adapters are not that expensive &ndash; around $100 for a pair &ndash; and they require no configuration. You just plug them in to the coax drop, then connect a device to the Ethernet port (it can be a standalone device like a game console or PC, or it can be an Ethernet switch), and they create a connection that&rsquo;s good for close to gigabit speeds.</p>
<p>The obvious caveat is that the coax jacks have to be connected via coax somehow.</p>
<h2 id="how-to-get-moca-working-starting-from-five-disconnected-cables">How to get MOCA working starting from &ldquo;five disconnected cables&rdquo;</h2>
<p>I ordered a pair of MOCA adapters without wandering over to the side of my house to see what my particular situation was. I&rsquo;d seen a few boxes walking past all the cable entry points in the past and assumed that all the coax was connected.</p>
<p>So once I realized why everything wasn&rsquo;t &ldquo;just working&rdquo; and my Eero access point in the living room was refusing to flip over to showing a wired Ethernet connection instead of a Wi-Fi connection, I went outside the house and saw the five  coax ends sticking out of the house. Only one had a connector on the end.</p>
<p>A little redditing and googling later, and I learned I needed to:</p>
<ol>
<li>Figure out which cables led to which drops in the house.</li>
<li>Add connectors to at least one of the cables and possibly two (the ones that would need to form a MOCA network from the office to the living room).</li>
</ol>
<h3 id="1-coax-discovery">1. Coax discovery</h3>
<p>In order to figure out which drop is connected to which cable coming into the house, you need to use a coax discovery tool. Since I had five drops to sort out and am lazy, I bought a <a href="https://www.homedepot.com/p/Klein-Tools-Coax-Explorer-2-with-Remote-Kit-VDV512-101/302793719">Klein Coax Explorer</a> with four color-coded remotes.</p>
<p>The Explorer doesn&rsquo;t even have a manual, but if you know how it works you can figure out how to use it. Just look at it:</p>
<p><img src="/img/klein_explorer.jpg" alt=""></p>
<ol>
<li>You take each of the four colored remotes and stick them on a coax jack in your house.</li>
<li>You go outside and screw each of your cable ends into the end of the Explorer.</li>
<li>You check for which color indicator lights up on the Explorer.</li>
<li>You make a note, mark the cable, etc. so you know which needs to connect to which.</li>
</ol>
<p>The Explorer doesn&rsquo;t work if you just stick the coax in its probe end. It needs the cable to have an actual connector, even if it isn&rsquo;t completely affixed.</p>
<p>I had some mild luck: The one cable with a connector was the one Comcast had used to connect my Internet service years earlier, and the first cable I put a connector on and tested was the one for the living room.</p>
<h3 id="2-putting-connectors-on-cables">2. Putting connectors on cables</h3>
<p>To get the connector on the cable permanently, I needed two tools and some parts:</p>
<p>The first tool was a <a href="https://www.homedepot.com/p/Klein-Tools-2-Level-Coaxial-Cable-Stripper-VDV110-061/202721783">coax cable stripper</a> to strip the outer insulation of each cable. It was pretty easy to understand. Just stick the cable in one side, thread it until it&rsquo;s poking out the other side, twist, pull, done.</p>
<p>The second tool was a <a href="https://www.homedepot.com/p/Klein-Tools-Extended-Reach-Coax-Crimper-VDV211-100/304086110">coax crimper</a> and <a href="https://www.homedepot.com/p/Klein-Tools-F-Compression-Connector-RG6-for-Above-Ground-Outdoor-Use-10-Pack-VDV812-623/203579036">coax compression connectors</a>.</p>
<p>The crimper and connectors also did not come with a manual, but that was pretty easy to figure out, too. You just feed the wire through the back of the connector until it stops, slide the cable into the crimper with the wire end pointing into the handle end, and squeeze. The wire should poke about 1/16&quot; out of the end of the connector.</p>
<h3 id="3-connecting-the-cables">3. Connecting the cables</h3>
<p>There are two ways to connect the cables. A very practical friend pointed out that if all I wanted to do was connect up two rooms, all I needed to do was connect two wires. So to just get things working, I took that approach.</p>
<p>If I&rsquo;d known what I was looking for ahead of time, I would have noticed that my house had several of these left behind from previous installers, but I didn&rsquo;t notice, so I bought a few <a href="https://www.homedepot.com/p/IDEAL-F-Series-Coaxial-Cable-Female-Adapters-2-Pack-85-071/204063261">coax female adapters</a>. You just screw them into each of your cable connectors and they&rsquo;re set.</p>
<p>Once I got everything working with just two cables and decided to go back and add another pair of rooms, I wrote the female adapter off as a loss and used a coax splitter.</p>
<p>If you are as literal-minded as I am, you might wonder why one would use a splitter to join cables. The literal reason is that you&rsquo;re assumed to be using the splitter to take signal from one incoming cable off some source (the drop from the street, for instance) and split it across multiple cables into the home (for, e.g. multiple cable provider set-top boxes).</p>
<p>Splitters also connect all those cables, though, so there you go.</p>
<p>MOCA does require splitters rated for the frequencies it uses, so I got <a href="https://www.amazon.com/dp/B07PPPP2Y3?ref=ppx_yo2ov_dt_b_product_details&amp;th=1">one specifically rated for MOCA applications</a>.</p>
<p>You also need to terminate each of the coax ports you aren&rsquo;t using, so I got <a href="https://www.amazon.com/dp/B07VWHX2FS?psc=1&amp;ref=ppx_yo2ov_dt_b_product_details">a pack of covers</a>.</p>
<h2 id="connecting-everything">Connecting everything</h2>
<p>By the time I got back in the house from connecting the right cables, the downstairs Eero was showing that it had a 1 gig connection off the MOCA drop. A quick visit to Speedtest from my phone standing there in the living room showed me I was pulling 750Mbps. Without connecting to the same switch down there, I don&rsquo;t know what was being lost to what, but given that was a 3-4x improvement, and over 75% of my connection&rsquo;s speed, I didn&rsquo;t care to satisfy my curiosity.</p>
<p>I was heartened enough by my success there that I added two more drops:</p>
<p>One is in Ben&rsquo;s room, which is also a tv room when he&rsquo;s at school. It has his PC, a Playstation 4, an AppleTV, a smart TV, and a Sonos playbar. I put a switch in there and connected all the devices to it and connected it to a MOCA adapter, and am pulling upwards of 920Mbps according to the Speedtest app on the AppleTV.</p>
<p>I put a last-gen Eero AP and connected it to a MOCA drop in Al&rsquo;s office. She was in the worst part of the house: A floor and a wall away from the living room, two walls and a bend in the hallway away from the office, which always had the door closed because our cats are horrible. When the Eero and iPhone cooperate enough to hand off between access points, she&rsquo;s getting 4-5x the speeds she was getting in there, even with it hidden. I suspect that access point, overlooking our covered patio in the back, will provide a little better connectivity back there now, too.</p>
<h2 id="the-current-final-state">The current final state</h2>
<p>If I had found a guide that covered everything I had to figure out in one place, the most &ldquo;handy&rdquo; part of the process &ndash; doing the coax discovery and connecting the cables &ndash; would have taken about 15 minutes. Connecting the MOCA connectors is literally just a minute apiece not counting moving furniture out of the way. The Eeros didn&rsquo;t need to do anything once they were on wired connections: They just pick that up and go with it.</p>
<p>It&rsquo;s apparent there&rsquo;s a little signal loss going on with MOCA, but it&rsquo;s hard to complain with wired connection speeds at 98 percent of my top speed straight into the router and 600-750Mbps speeds in any room where you&rsquo;d care to bring a laptop or iPad.</p>
<p>Putting a MOCA drop in Ben&rsquo;s room and adding a switch allowed me to take the greediest devices in the house off the wireless network and reposition the Eero base for better day-to-day coverage.</p>
<p>I wish I&rsquo;d known about MOCA earlier. For not a lot of cost and very little time it provides great connectivity, improves your Wi-Fi experience, and provides more opportunities to wire things up, improving the experience for things that need Wi-Fi even more.</p>
]]></content:encoded>
    </item>
    <item>
      <title>omg it&#39;s a weblog.lol quick start guide</title>
      <link>https://mike.puddingtime.org/posts/2023-02-17-omg-its-a-quick-start-guide/</link>
      <pubDate>Fri, 17 Feb 2023 06:59:02 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-17-omg-its-a-quick-start-guide/</guid>
      <description>&lt;p&gt;We pushed out the &lt;a href=&#34;https://weblog.lol/quickstart-1-intro&#34;&gt;weblog.lol quick start guide&lt;/a&gt; today. It&amp;rsquo;s a &amp;ldquo;zero to something you can use&amp;rdquo; document.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>We pushed out the <a href="https://weblog.lol/quickstart-1-intro">weblog.lol quick start guide</a> today. It&rsquo;s a &ldquo;zero to something you can use&rdquo; document.</p>
<iframe src="https://social.lol/@docs/109880658968718703/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
<p>I&rsquo;m fairly sure the omg.lol community is mostly people who are comfortable seeing what <em>this</em> button does. Those folks probably also know what Markdown is, have come across the Markdown-with-front-matter pattern, and have probably dropped a few commas or left a few brackets unclosed in a config file in their day.</p>
<p>But there are also people who may have sat blogging out during its heyday, or blogged but stuck to platforms like WordPress or Blogger, or who just want some documentation to work with before jumping in.</p>
<p>This guide is written more for the latter audience.</p>
<p>I like the approach Adam has taken with weblog.lol.</p>
<p>If you wanted to stick to the core offering you could do that and have a simple, functional blog. Authoring is simple, and it&rsquo;s cool that it does some stuff implicitly (e.g. setting a post title using the first Markdown h1).</p>
<p>At the same time, he&rsquo;s written <a href="https://api.omg.lol/#web">an API</a> that&rsquo;s amenable to making tools for it and there&rsquo;s a git-based workflow if you prefer to work that way. I&rsquo;ve  seen some very nice blogs from people who know their way around CSS.</p>
<p>Personally, I enjoyed the writing exercise. My favorite writing during my time on LinuxToday, LinuxPlanet, and Practically Networked all involved writing howtos and little tutorials, and my biggest contribution to the Puppet docs was a getting started guide on Hiera. It took months to learn enough Puppet to learn enough Hiera to explain it credibly, and it was all fun.</p>
<p>I enjoy learning how something works then writing that down with an eye to helping other people along, and it turns out that&rsquo;s a useful skill to have for everything from telling people what <em>that</em> button does when you click it to explaining and directing an organizational design change for a 200-person R&amp;D organization.</p>]]></content:encoded>
    </item>
    <item>
      <title>Picture of the Week: Frost on rusty bolts</title>
      <link>https://mike.puddingtime.org/posts/2023-02-16-potw/</link>
      <pubDate>Thu, 16 Feb 2023 22:02:22 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-16-potw/</guid>
      <description>&lt;figure&gt;
  &lt;a href=&#34;https://pix.puddingtime.org/PictureOfTheWeek/i-CBQBv8T&#34; alt=&#34;Frost covers rusty bolts&#34;&gt;
    &lt;img src=&#34;https://photos.smugmug.com/PictureOfTheWeek/i-CBQBv8T/0/67b1413d/XL/coffee-walk-26-XL.jpg&#34; /&gt;
  &lt;/a&gt;
&lt;figcaption&gt;
Picture of the Week: Frost on rusty bolts
&lt;/figcaption&gt;
&lt;/figure&gt;</description>
      <content:encoded><![CDATA[<figure>
  <a href="https://pix.puddingtime.org/PictureOfTheWeek/i-CBQBv8T" alt="Frost covers rusty bolts">
    <img src="https://photos.smugmug.com/PictureOfTheWeek/i-CBQBv8T/0/67b1413d/XL/coffee-walk-26-XL.jpg" />
  </a>
<figcaption>
Picture of the Week: Frost on rusty bolts
</figcaption>
</figure>
]]></content:encoded>
    </item>
    <item>
      <title>Hi, omg.lol</title>
      <link>https://mike.puddingtime.org/posts/2023-02-06-hi--omg-lol/</link>
      <pubDate>Mon, 06 Feb 2023 16:35:29 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-06-hi--omg-lol/</guid>
      <description>&lt;img src=&#34;https://mike.puddingtime.org/prami.png&#34; width=&#34;25%&#34; style=&#34;float:right;margin:1.5rem;&#34; alt=&#34;a pink cartoon heart with a smiling face&#34;/&gt;
&lt;p&gt;Today I&amp;rsquo;m starting a contract gig writing some technical documentation for &lt;a href=&#34;https://omg.lol&#34;&gt;omg.lol&amp;rsquo;s&lt;/a&gt; weblog service. It seemed like a fun idea when I came up with it, so I sent the site&amp;rsquo;s founder, Adam, a quick note with a simple proposal. He liked the idea, too, so here we are.&lt;/p&gt;
&lt;p&gt;At the moment I&amp;rsquo;m busy looking for work doing what I&amp;rsquo;m best suited to do, which is operations or chief of staff work somewhere in the software industry. Looking for work always triggers some reflection. This most recent period of time off and now spinning the job search back up has been no different.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img src="/prami.png" width="25%" style="float:right;margin:1.5rem;" alt="a pink cartoon heart with a smiling face"/>
<p>Today I&rsquo;m starting a contract gig writing some technical documentation for <a href="https://omg.lol">omg.lol&rsquo;s</a> weblog service. It seemed like a fun idea when I came up with it, so I sent the site&rsquo;s founder, Adam, a quick note with a simple proposal. He liked the idea, too, so here we are.</p>
<p>At the moment I&rsquo;m busy looking for work doing what I&rsquo;m best suited to do, which is operations or chief of staff work somewhere in the software industry. Looking for work always triggers some reflection. This most recent period of time off and now spinning the job search back up has been no different.</p>
<p>I&rsquo;m coming off ten years at a company that defined an entire technology paradigm. It was a period of amazing growth and opportunity: I walked in the door as a technical writer, and left as its senior director of technology operations. The experience broadened my horizons and changed how I see myself. I wouldn&rsquo;t trade the experience for anything.</p>
<p>One thing I lost track of a little, though, was my sense of technology as something that is fun, interesting, and empowering for every day people. Yes, at Puppet we were making software for everyday people who just so needed to manage infrastructure at scale.</p>
<p>As a director of IT and engineering services, though, I was thinking about the needs of a 500-person business full of everyday people trying to get their work done. My thoughts about technology took a turn for the very practical, very enterprise-y. I still took my responsibility to make technology accessible and useful seriously, but fun didn&rsquo;t really enter into it the way it once had.</p>
<p>I was feeling that turn when I came across <a href="https://omg.lol">omg.lol</a> a while back: I&rsquo;d made a very practical personal site that I didn&rsquo;t much like dealing with and hadn&rsquo;t updated much. I had a personal blog that I liked a little better but didn&rsquo;t like to play with because the feedback loops with that service were slow. Then all hell broke loose on Twitter, a lot of people I knew started making the move to Mastodon, and an online friend mentioned he had a new Mastodon account via omg.lol, which stood up its own instance for its users.</p>
<p>If you haven&rsquo;t seen it yet, omg.lol is an interesting little collection of services you&rsquo;ve seen other places:</p>
<p>There&rsquo;s that Mastodon instance, a pastebin service, a URL shortener, a personal landing/links page, a DNS tool, and a weblog service that Adam put together over the course of December in the form of a series of blog posts dressed up as an Advent calendar. All the services come with a usable web UI, but Adam&rsquo;s also built an accessible API for all of it that you can access from automation as simple as an Apple Shortcut or a Drafts action.</p>
<p>The whole thing reminds me in spirit of &rsquo;90s-era dialup shell accounts you could get on the early Internet if you were interested in things like Usenet, Gopher, MUDs, or Telnet BBSs you read about in a book like <em><a href="https://en.wikipedia.org/wiki/Whole_Internet_User%27s_Guide_and_Catalog">The Whole Internet</a></em>.</p>
<p>You could use services like these in other places, but there is a certain fun positivity in the way Adam goes about running his service. There&rsquo;s an IRC server (with a Discord bridge) if you&rsquo;re interested in hanging out with him and other tinkerers, and there&rsquo;s a spirit of spontaneous, exuberant creativity to the way Adam works. A number of people using the <a href="https://social.lol">social.lol</a> Mastodon instance have commented it&rsquo;s one of the more positive Local feeds going.</p>
<p>I know once I had my account set up and was following along with the initial weblog.lol documentation dripping out over the month of December, I started feeling like playing more than I have in a while. I hacked together an Apple Shortcut to use the URL shortener, then made a little <a href="https://github.com/pdxmph/omgloldev">Sinatra-based development tool</a> to make it easier to do page design for the blogging service.</p>
<p>When January rolled around and I started digging in harder on my job search, it was fun to turn back to playing around with omg.lol stuff once I was done submitting applications or checking the network for leads.</p>
<p>So when I saw Adam mentioning that he felt behind on his documentation, I thought &ldquo;I could help with that, and probably learn more about something I&rsquo;m having a lot of fun playing with.&rdquo; I wrote him, offered to pick up a contract to document the weblog service, and we had a great conversation about what that could look like.</p>
<p>This morning I watched his <a href="https://www.youtube.com/watch?v=kcEKdxGABGU">getting-started video</a> and started building an outline. It felt good to think about a kind of writing I haven&rsquo;t done in a while, and the ways technical writing can interact with and inform design.</p>
<p>At this point we&rsquo;ve got plans for a set of documentation that&rsquo;s reasonably scoped and meaningful, starting with a quick start guide to go with his video then moving on to an &ldquo;operator&rsquo;s manual&rdquo; for templating and configuration, then &ldquo;API docs&rdquo; for people who just want a reference and all the legal values.</p>
<p>So this project is sitting alongside teaching myself Swift and assorted photography-related things while the job search goes on.  It felt good to grind through the job hunt stuff today knowing I had this to look forward to, and I&rsquo;m really looking forward to sharing good docs with the rest of the omg.lol community in the coming weeks.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Picture of the Week: Crow</title>
      <link>https://mike.puddingtime.org/posts/2023-02-03-potw/</link>
      <pubDate>Fri, 03 Feb 2023 10:45:14 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-03-potw/</guid>
      <description>&lt;figure&gt;
  &lt;a href=&#34;https://pix.puddingtime.org/PictureOfTheWeek/i-PGZb2v2&#34; alt=&#34;A crow perches on a concrete bird bath with a garage in the background.&#34;&gt;
    &lt;img src=&#34;https://photos.smugmug.com/photos/i-PGZb2v2/0/22bdc2e7/XL/i-PGZb2v2-XL.jpg&#34; /&gt;
  &lt;/a&gt;
&lt;figcaption&gt;
Picture of the Week: Crow
&lt;/figcaption&gt;
&lt;/figure&gt;</description>
      <content:encoded><![CDATA[<figure>
  <a href="https://pix.puddingtime.org/PictureOfTheWeek/i-PGZb2v2" alt="A crow perches on a concrete bird bath with a garage in the background.">
    <img src="https://photos.smugmug.com/photos/i-PGZb2v2/0/22bdc2e7/XL/i-PGZb2v2-XL.jpg" />
  </a>
<figcaption>
Picture of the Week: Crow
</figcaption>
</figure>
]]></content:encoded>
    </item>
    <item>
      <title>Picture of the Week: Profit from the Panic</title>
      <link>https://mike.puddingtime.org/posts/2023-02-02-potw/</link>
      <pubDate>Thu, 02 Feb 2023 10:32:53 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-02-potw/</guid>
      <description>&lt;figure&gt;
  &lt;a href=&#34;https://pix.puddingtime.org/PictureOfTheWeek/i-QcQR5kh&#34; alt=&#34;Wheatpaste of a tv mounted on a human body giving a thumbs up. The TV reads &amp;#34;Profit from the Panic&amp;#34;&#34;&gt;
    &lt;img src=&#34;https://photos.smugmug.com/PictureOfTheWeek/i-QcQR5kh/0/59e07f8f/XL/DSCF2082-XL.jpg&#34; /&gt;
  &lt;/a&gt;
&lt;figcaption&gt;
Picture of the Week: Profit from the Panic
&lt;/figcaption&gt;
&lt;/figure&gt;</description>
      <content:encoded><![CDATA[<figure>
  <a href="https://pix.puddingtime.org/PictureOfTheWeek/i-QcQR5kh" alt="Wheatpaste of a tv mounted on a human body giving a thumbs up. The TV reads &#34;Profit from the Panic&#34;">
    <img src="https://photos.smugmug.com/PictureOfTheWeek/i-QcQR5kh/0/59e07f8f/XL/DSCF2082-XL.jpg" />
  </a>
<figcaption>
Picture of the Week: Profit from the Panic
</figcaption>
</figure>
]]></content:encoded>
    </item>
    <item>
      <title>Making a Picture of the Week feature on Hugo (Updated)</title>
      <link>https://mike.puddingtime.org/posts/2023-02-02-making-a-picture-of-the-week-feature-on-hugo/</link>
      <pubDate>Thu, 02 Feb 2023 07:25:02 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-02-making-a-picture-of-the-week-feature-on-hugo/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Updated: See the last section&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I wanted to take advantage of the flexibility I gave myself with Hugo to have a &amp;ldquo;Picture of the Week&amp;rdquo; (PotW) feature on my new site. It took a few iterations to get it to where I liked it, and there are some things about Hugo I learned along the way, but it&amp;rsquo;s done enough for now.&lt;/p&gt;
&lt;p&gt;The basic idea is that I want to take advantage of the streamlined upload and metadata workflow I&amp;rsquo;ve set up between Lightroom and &lt;a href=&#34;https://github.com/pdxmph/imgup&#34;&gt;imgup&lt;/a&gt; to share photos without a lot of repeating myself when it comes to writing titles, alt text, etc.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><strong>Updated: See the last section</strong></p>
<p>I wanted to take advantage of the flexibility I gave myself with Hugo to have a &ldquo;Picture of the Week&rdquo; (PotW) feature on my new site. It took a few iterations to get it to where I liked it, and there are some things about Hugo I learned along the way, but it&rsquo;s done enough for now.</p>
<p>The basic idea is that I want to take advantage of the streamlined upload and metadata workflow I&rsquo;ve set up between Lightroom and <a href="https://github.com/pdxmph/imgup">imgup</a> to share photos without a lot of repeating myself when it comes to writing titles, alt text, etc.</p>
<h3 id="first-try">First try</h3>
<p>My first iteration was to keep the data for a featured picture in the site config, like this:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">params</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">potw_img_url</span><span class="p">:</span><span class="w"> </span><span class="l">https://photos.smugmug.com/photos/i-TkDZjHx/0/ce3d02d6/XL/i-TkDZjHx-XL.jpg</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">potw_caption</span><span class="p">:</span><span class="w"> </span><span class="l">Manzanita Beach at Dawn</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">potw_alt</span><span class="p">:</span><span class="w"> </span><span class="l">A rocky beach at dawn with hills and a mountain shrouded in mist. A person in a red jacket looks over the ocean.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">potw_gallery_link</span><span class="p">:</span><span class="w">  </span><span class="l">https://pix.puddingtime.org/Uploads/n-47GBfb/i-TkDZjHx</span></span></span></code></pre></div>
<p>&hellip; then pull use a partial:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#39;front-image&#39;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">figure</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;{{ .Site.Params.potw_gallery_link  }}&#34;</span> <span class="na">alt</span><span class="o">=</span><span class="s">&#34;{{ .Site.Params.potw_alt }}&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;{{ .Site.Params.potw_img_url }}&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">figcaption</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">Picture of the Week: {{ .Site.Params.potw_caption }}
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">figcaption</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">figure</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></span></span></code></pre></div>
<p>That worked fine for my purposes, but I didn&rsquo;t like all the clicking to get SmugMug photo info into the config, and I hated the idea of touching my config to do a simple task.</p>
<p>It also had no memory of previous images and I preferred the idea of building a list of these items over time to make a specific PotW page, or to just have them in the record.</p>
<p>What I&rsquo;ve settled on now is a little less clicky, and I&rsquo;ve got an idea for how to make it even less clicky.</p>
<h3 id="second-try">Second try</h3>
<p>I started by setting up a specific PotW album in SmugMug. Anyone with the URL can see it, but it&rsquo;s not exposed right now. I upload photos to there.</p>
<p>Next, I made a shortcode that can talk to metadata stored in a page:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">figure</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;{{ $.Page.Params.potw_gallery_link  }}&#34;</span> <span class="na">alt</span><span class="o">=</span><span class="s">&#34;{{ $.Page.Params.potw_alt }}&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;{{ $.Page.Params.potw_img_url }}&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">figcaption</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{ $.Page.Params.title }}
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">figcaption</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">figure</span><span class="p">&gt;</span></span></span></code></pre></div>
<p>As you can see, the frontmatter needs to have a few extra bits in it:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">title:  &#39;Picture of the Week</span><span class="p">:</span><span class="w"> </span><span class="l">Profit from the Panic&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">potw_img_url</span><span class="p">:</span><span class="w"> </span><span class="l">https://photos.smugmug.com/photos/i-87Bm3V2/0/ecba06f4/XL/i-87Bm3V2-XL.jpg</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">potw_alt</span><span class="p">:</span><span class="w"> </span><span class="l">Wheatpaste of a tv mounted on a human body giving a thumbs up. The TV reads &#34;Profit from the Panic&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">potw_gallery_link</span><span class="p">:</span><span class="w">  </span><span class="l">https://pix.puddingtime.org/Picture-of-the-Week/n-D5HJ4W/i-87Bm3V2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2023-02-01T20:10:15</span><span class="m">-0800</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">tags</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;potw&#39;</span><span class="p">,</span><span class="s1">&#39;photography&#39;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">draft</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">---</span></span></span></code></pre></div>
<p>imgup&rsquo;s PotW page gives me the YAML frontmatter:</p>
<p><img src="https://photos.smugmug.com/photos/i-FmJxrP3/0/84ceb986/XL/i-FmJxrP3-XL.jpg" alt="A screenshot of a browser showing a page that has YAML snippets next to thumbnails of photos."></p>
<p>I can copy and paste it into a PotW post along with the shortcode and it&rsquo;s ready to go.</p>
<p>Pulling it into the front page is just a partial that pulls in the most recent item tagged <code>potw</code>:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl">{{ range first 1 .Site.Taxonomies.tags.potw }}
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#39;front-image&#39;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">h3</span><span class="p">&gt;</span>Picture of the Week<span class="p">&lt;/</span><span class="nt">h3</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">figure</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;{{ .Page.Params.potw_gallery_link  }}&#34;</span> <span class="na">alt</span><span class="o">=</span><span class="s">&#34;{{ .Page.Params.potw_alt }}&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;{{ .Page.Params.potw_img_url }}&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">figcaption</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{ .Page.Params.title }}
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">figcaption</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">figure</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{ end }}</span></span></code></pre></div>
<h3 id="whats-next">What&rsquo;s next</h3>
<p>It was quick and easy to just copy a route in imgup to make the PotW page, but it&rsquo;s still manual and clicky to make a PotW post. So my next step will be to hang an endpoint off imgup that automates the process of getting the most recent PotW gallery image and its metadata so I don&rsquo;t have to write the posts at all.</p>
<h3 id="update">Update</h3>
<p>Sinatra made it easy to add a tiny bit of logic to the existing PotW route to make it send back JSON:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="k">unless</span> <span class="n">json</span> <span class="o">==</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl">  <span class="n">haml</span> <span class="ss">:potw</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span> 
</span></span><span class="line"><span class="cl">  <span class="n">content_type</span>  <span class="ss">:json</span>
</span></span><span class="line"><span class="cl">  <span class="vi">@recents</span><span class="o">.</span><span class="n">first</span><span class="o">.</span><span class="n">to_json</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div>
<p>A simple script hits the endpoint, grabs the JSON, and writes it out to a file:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="c1">##!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;net/http&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;uri&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;json&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;date&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;slugify&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;yaml&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;optparse&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># set default tags for each entry. The &#34;tags&#34; option allows you to add more</span>
</span></span><span class="line"><span class="cl"><span class="n">tags</span> <span class="o">=</span> <span class="o">[</span><span class="s1">&#39;photography&#39;</span><span class="p">,</span> <span class="s1">&#39;potw&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">OptionParser</span><span class="o">.</span><span class="n">new</span> <span class="k">do</span> <span class="o">|</span><span class="n">parser</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="n">parser</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="s2">&#34;-t&#34;</span><span class="p">,</span> <span class="s2">&#34;--test&#34;</span><span class="p">,</span> <span class="s2">&#34;Changes the endpoint to localhost:4567&#34;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">o</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="n">options</span><span class="o">[</span><span class="ss">:test</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">parser</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="s2">&#34;-o&#34;</span><span class="p">,</span> <span class="s2">&#34;--overwrite&#34;</span><span class="p">,</span> <span class="s2">&#34;Danger: Overwrite the existing potw if there&#39;s a conflict.&#34;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">o</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="n">options</span><span class="o">[</span><span class="ss">:overwrite</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">parser</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="s2">&#34;-T&#34;</span><span class="p">,</span> <span class="s2">&#34;--tags TAGS&#34;</span><span class="p">,</span> <span class="s2">&#34;Comma-delimited tags for the post, e.g. &#39;banana,apple,pear&#39;&#34;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">o</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="n">options</span><span class="o">[</span><span class="ss">:tags</span><span class="o">]</span> <span class="o">=</span> <span class="n">o</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">options</span><span class="o">[</span><span class="ss">:tags</span><span class="o">].</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">t</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">      <span class="n">tags</span> <span class="o">&lt;&lt;</span> <span class="n">t</span>
</span></span><span class="line"><span class="cl">    <span class="k">end</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">parser</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="s2">&#34;-h&#34;</span><span class="p">,</span> <span class="s2">&#34;--help&#34;</span><span class="p">,</span> <span class="s2">&#34;Get help.&#34;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">o</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="nb">puts</span> <span class="n">parser</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">end</span><span class="o">.</span><span class="n">parse!</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">options</span><span class="o">[</span><span class="ss">:test</span><span class="o">]</span> <span class="o">==</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl">  <span class="n">endpoint</span> <span class="o">=</span> <span class="s1">&#39;http://localhost:4567/potw?json=1&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">  <span class="n">endpoint</span> <span class="o">=</span> <span class="s1">&#39;https://imgup.puddingtime.org/potw?json=1&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">site_posts_dir</span> <span class="o">=</span> <span class="s2">&#34;~/src/simple/content/posts/&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">date</span> <span class="o">=</span> <span class="no">Date</span><span class="o">.</span><span class="n">today</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%Y-%m-%d&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">long_date</span> <span class="o">=</span> <span class="no">Time</span><span class="o">.</span><span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%Y-%m-%dT%H:%M:%S%z&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">title</span> <span class="o">=</span> <span class="n">date</span> <span class="o">+</span> <span class="s1">&#39;-potw&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">slug</span> <span class="o">=</span> <span class="n">title</span><span class="o">.</span><span class="n">slugify</span>
</span></span><span class="line"><span class="cl"><span class="n">filename</span> <span class="o">=</span>  <span class="n">slug</span> <span class="o">+</span> <span class="s1">&#39;.md&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">file_path</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="n">site_posts_dir</span> <span class="o">+</span> <span class="n">filename</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="no">File</span><span class="o">.</span><span class="n">exists?</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">options</span><span class="o">[</span><span class="ss">:overwrite</span><span class="o">]</span> <span class="o">!=</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl">  <span class="nb">abort</span><span class="p">(</span><span class="s2">&#34;*** Error: </span><span class="si">#{</span><span class="n">file_path</span><span class="si">}</span><span class="s2"> already exists. Exiting.&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">uri</span> <span class="o">=</span> <span class="no">URI</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">endpoint</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">request</span> <span class="o">=</span> <span class="no">Net</span><span class="o">::</span><span class="no">HTTP</span><span class="o">::</span><span class="no">Get</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">request</span><span class="o">.</span><span class="n">basic_auth</span><span class="p">(</span><span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;IMGUP_USER&#39;</span><span class="o">]</span><span class="p">,</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;IMGUP_PASS&#39;</span><span class="o">]</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">req_options</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="ss">use_ssl</span><span class="p">:</span> <span class="n">uri</span><span class="o">.</span><span class="n">scheme</span> <span class="o">==</span> <span class="s2">&#34;https&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="no">Net</span><span class="o">::</span><span class="no">HTTP</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">uri</span><span class="o">.</span><span class="n">hostname</span><span class="p">,</span> <span class="n">uri</span><span class="o">.</span><span class="n">port</span><span class="p">,</span> <span class="n">req_options</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">http</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">json</span> <span class="o">=</span> <span class="no">JSON</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">yaml</span> <span class="o">=</span> <span class="no">YAML</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">json</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">potw_post</span> <span class="o">=</span> <span class="s">&lt;&lt;-POTW
</span></span></span><span class="line"><span class="cl"><span class="c1">#{yaml}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="ss">date</span><span class="p">:</span> <span class="c1">#{long_date}</span>
</span></span><span class="line"><span class="cl"><span class="ss">tags</span><span class="p">:</span> <span class="c1">#{tags}</span>
</span></span><span class="line"><span class="cl"><span class="ss">categories</span><span class="p">:</span> <span class="o">[</span><span class="s1">&#39;photography&#39;</span><span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="ss">draft</span><span class="p">:</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl"><span class="o">---</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># escaped  to keep hugo from parsing this as a shortcode: </span>
</span></span><span class="line"><span class="cl"><span class="c1"># {\{&lt; potw &gt;}}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">POTW</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">File</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">potw_post</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="sb">`open </span><span class="si">#{</span><span class="n">file_path</span><span class="si">}</span><span class="sb">`</span></span></span></code></pre></div>
<p>Much more turnkey than it was, and with a little more logic I might be able to build it into a pre-build script of some kind to completely automate the whole thing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The problem with doing it right.</title>
      <link>https://mike.puddingtime.org/posts/2023-02-01-the-problem-with-doing-it-right-/</link>
      <pubDate>Wed, 01 Feb 2023 11:58:41 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-02-01-the-problem-with-doing-it-right-/</guid>
      <description>Make more, fret less.</description>
      <content:encoded><![CDATA[<div style="text-align:center;">
<iframe src="https://social.lol/@mph/109791137466284689/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="600" allowfullscreen="allowfullscreen"></iframe><script src="https://social.lol/embed.js" async="async"></script>
</div>
<p>This morning I was messing around with my web publishing pipelines and I ran into a problem with permalinks. It wasn&rsquo;t a big problem because I don&rsquo;t have a lot of content on the site in question, but it was a problem. I felt a weight in my chest.</p>
<p>It has been a while, but for a few years I made a living making sure permalinks didn&rsquo;t break for people who were very sensitive to that sort of thing. I tried to bring a level of that rigor to my personal web stuff, too.</p>
<p>Some of that is just what we do, right? We know how to do something &ldquo;right&rdquo; so we do it right.</p>
<p>When I ran technical websites for Linux enthusiasts, there was a high level of fixation on &ldquo;doing it right&rdquo; among my assorted communities. Some of that was people insisting on &ldquo;doing it right&rdquo; because it was their day job. Some of it was people applying an unrealistic and stringent sense of rigor to their technical lives because tech as a hobby is full of aspirants &ndash; people who don&rsquo;t do it professionally but aspire to professional levels of mastery and competence.</p>
<p>I found a lot of those folks to be suppressive. Constantly policing for correctness, constantly applying the standards of someone running multiple data centers to someone just trying to get file sharing set up between their Linux box and their wife&rsquo;s Windows laptop. They insisted on a kind of rigor that is not realistic or helpful, and that serves to simply stop anyone from doing anything.</p>
<p>I am not here to yuck anyone&rsquo;s yum. Sometimes the fun of a thing is just doing it as well as your knowledge and skill allow. More people should just be doing stuff as well as they want because it is pleasurable to them.</p>
<p>But there&rsquo;s a toxic side to that, as well, when we get wrapped around the axle over &ldquo;doing it right&rdquo; at the expense of just doing it at all: Of making a new thing, exploring a new idea, trying something out, or just unburdening ourselves of a bad decision and its outcomes.</p>
<p>We get tied up in knots for a lot of reasons:</p>
<p>We don&rsquo;t want to look dumb. We don&rsquo;t want to do it wrong. We don&rsquo;t want to accidentally run afoul of some standard people who have to worry about state actors apply to their own work. We don&rsquo;t want to give a bad impression to potential employers or existing bosses.</p>
<p>It used to confound me that StackOverflow is so full of questions where people initially refuse to just show their code instead of asking vague questions about code they refuse to show  (that always prompt a demand to show their code) until I realized &ldquo;well, they probably depleted their ego just getting to the point where they could ask strangers for help, and they&rsquo;re probably worried there are fifteen things they aren&rsquo;t doing right or that are not to someone&rsquo;s taste.&rdquo;</p>
<p>In the mean time, what&rsquo;s ticking away is our remaining seconds on this Earth and our creative energy.</p>
<p>So I&rsquo;ve broken all the permalinks on my site. In fact, right now, because I misjudged the agility of a few services I am depending on, one site is just down while I wait around for some automated systems in the bowels of a provider to acknowledge each others&rsquo; work.</p>
<p>When it all comes back up, people who bookmarked my timeless classic about org-mode on mobile devices will be frustrated. The 20 people on LinkedIn who read my post about listening to people may not be able to find their way back to it.</p>
<p>Sorry.</p>
<p>I just got tired of having this hard-to-maintain site that I never really warmed up to and felt sort of overbaked and too much about &ldquo;doing it right&rdquo; to some standard I don&rsquo;t have to worry about anymore. So I&rsquo;m not worrying about it: I made a site I&rsquo;ll have an easier time with and will like working on more, and it&rsquo;ll be online soon enough.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A lot of &#39;experiments&#39; aren&#39;t.</title>
      <link>https://mike.puddingtime.org/posts/2023-01-31-make-experiment-sound-less-dangerous-/</link>
      <pubDate>Tue, 31 Jan 2023 10:23:20 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-01-31-make-experiment-sound-less-dangerous-/</guid>
      <description>&lt;p&gt;What we often call &amp;ldquo;resistance to change&amp;rdquo; is really resistance to bad or poorly considered change. The word &amp;ldquo;experiment&amp;rdquo; turns up a lot in these moments.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>What we often call &ldquo;resistance to change&rdquo; is really resistance to bad or poorly considered change. The word &ldquo;experiment&rdquo; turns up a lot in these moments.</p>
<p>I was talking to a friend about her work with a new-to-her team of managers. She had proposed &ldquo;doing an experiment&rdquo; with a change to how their teams were working, and they were all resistant.</p>
<p>The change she was asking for was small and incremental &ndash; there wasn&rsquo;t any misplaced &ldquo;change agent&rdquo; or &ldquo;boil the ocean&rdquo; energy behind it. Still, the quiet ones just stopped interacting and the more vocal ones began listing all the reasons their teams weren&rsquo;t up for yet more change. None of it was very concrete, and it left her thinking she&rsquo;d picked up a team of people who just didn&rsquo;t want to change how they work.</p>
<p>I remember running into the same problem with a new-to-me team.</p>
<p>It was frustrating because I&rsquo;d felt like we were off on a good foot: They knew me by reputation before I joined and there was a foundation for trust. But when we came across a hitch in an old process that hadn&rsquo;t changed with the business around us, I breezily said &ldquo;well, why don&rsquo;t we try an experiment&rdquo; and proposed a potential improvement. I could see them shut down.</p>
<p>My first thought was &ldquo;what on Earth is the problem here,&rdquo; so I asked and they were forthcoming:</p>
<p>For years, &ldquo;experiment&rdquo; had been shorthand for &ldquo;let&rsquo;s just do this thing and see what happens.&rdquo; Leaving aside the definitional problems <a href="https://www.merriam-webster.com/dictionary/experiment">Webster</a> might raise, it came with other baggage.</p>
<ul>
<li>The &ldquo;experiments&rdquo; never seemed to be testing anything in particular. You could just as easily replace &ldquo;let&rsquo;s try an experiment&rdquo; with &ldquo;let&rsquo;s throw some spaghetti at the wall.&rdquo;</li>
<li>They were never bound by time, success criteria, or retrospection.</li>
<li>Because of that lack of structure, they&rsquo;d eventually melt into the practice of the team whether they improved anything or not, becoming zombie processes or unexamined &ldquo;that&rsquo;s just how we do it&rdquo; norms.</li>
</ul>
<p>I had my own damage over undefined &ldquo;experiments,&rdquo; so it wasn&rsquo;t too hard to wheel it back. They were right to be suspicious of the word, and I admitted that, then I laid out for them the same thing I suggested to my friend:</p>
<p>First, ask the question &ldquo;what problem are we trying to solve?&rdquo;</p>
<p>In a room full of people, you&rsquo;ll probably get a few versions, so asking helps get the team aligned. As a manager or leader, you&rsquo;ll give yourself an opportunity to unwind a few assumptions you&rsquo;ve already made.</p>
<p>Second, decide how and when you&rsquo;ll know the change had its intended effect.</p>
<ul>
<li>
<p>If it&rsquo;s something you have metrics for, that&rsquo;s great. If it&rsquo;s not, keep any potentially helpful metric you identify light. You can go full <a href="https://en.wikipedia.org/wiki/Zeno%27s_paradoxes">Zeno&rsquo;s Paradox</a> over metrics.</p>
</li>
<li>
<p>If it&rsquo;s in the realm of the more qualitative give the change a little time, then periodically survey the team. 1:1s are better than team meetings for this. Just keep track of sentiment and lay out your observations when you lead the review.</p>
</li>
</ul>
<p>Sometimes you&rsquo;ll get immediate feedback, other times &ndash; if the change is going to touch a lot of things or lives in a complex process &ndash; you&rsquo;ll have to give it more time. Leave room for a few repeats either way:</p>
<blockquote>
<p>&lsquo;Once is happenstance. Twice is coincidence. The third time it&rsquo;s <del>enemy action</del> a pattern.&rsquo;<br>
—James Bond</p>
</blockquote>
<p>Third, set a concrete date to review the change and make a decision about it:</p>
<ul>
<li>It satisifed our success criteria, let&rsquo;s keep it.</li>
<li>It didn&rsquo;t satisfy our success criteria, but there are ways we could adjust it. Let&rsquo;s think about those changes and re-up the change for another  period.</li>
<li>It didn&rsquo;t work at all. Let&rsquo;s discuss why, then go to the next candidate.</li>
</ul>
<p>Then stick to that decision.</p>
<p>If you decide to end it, end it, tell the team it is done and keep any documentation you have about what happened, how it worked, and why. Some teams keep a &ldquo;decision registry&rdquo; for this kind of thing. Other teams have an RFC process of some kind. However you do it, make it easy to find your notes:  Future new team members or even your successor will thank you.</p>
<p>It&rsquo;s important to stick to that decision because people who are hungry for change &ndash; or even just amenable to it &ndash; will lose their enthusiasm if they perceive that each &ldquo;experiment&rdquo; will  become yet another geological layer of unexamined process or practice to contend with.</p>]]></content:encoded>
    </item>
    <item>
      <title>About</title>
      <link>https://mike.puddingtime.org/about/</link>
      <pubDate>Wed, 25 Jan 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/about/</guid>
      <description>&lt;p&gt;Hi, I&amp;rsquo;m Mike Hall. I live in Portland, OR. I do IT for work. I do photography, movies, and metal for entertainment.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Hi, I&rsquo;m Mike Hall. I live in Portland, OR. I do IT for work. I do photography, movies, and metal for entertainment.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Colophon</title>
      <link>https://mike.puddingtime.org/colophon/</link>
      <pubDate>Wed, 25 Jan 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/colophon/</guid>
      <description>&lt;ul&gt;
 &lt;li&gt;The site it built with &lt;a href=&#34;http://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;, a static site generator.&lt;/li&gt;
 &lt;li&gt;The theme is &lt;a href=&#34;https://github.com/janraasch/hugo-bearblog/&#34;&gt;Hugo ʕ•ᴥ•ʔ Bear&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;Source is hosted on &lt;a href=&#34;https://github.com&#34;&gt;GitHub&lt;/a&gt; &lt;/li&gt;
 &lt;li&gt;The site is hosted on &lt;a href=&#34;https://pages.cloudflare.com&#34;&gt;Cloudflare Pages&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<ul>
 <li>The site it built with <a href="http://gohugo.io/">Hugo</a>, a static site generator.</li>
 <li>The theme is <a href="https://github.com/janraasch/hugo-bearblog/">Hugo ʕ•ᴥ•ʔ Bear</a>.</li>
 <li>Source is hosted on <a href="https://github.com">GitHub</a> </li>
 <li>The site is hosted on <a href="https://pages.cloudflare.com">Cloudflare Pages</a>.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>imgup (now with SmugMug as the image upload backend)</title>
      <link>https://mike.puddingtime.org/2023-01-19-imgup-now-with/</link>
      <pubDate>Thu, 19 Jan 2023 15:27:49 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-19-imgup-now-with/</guid>
      <description>&lt;p&gt;I finished up the &lt;a href=&#34;https://github.com/pdxmph/imgup/tree/smugmugv2&#34;&gt;initial SmugMug version of imgup&lt;/a&gt; today.&lt;/p&gt;
&lt;p&gt;There are some things I&amp;rsquo;d like to add, but it&amp;rsquo;s good enough to stick in Docker and run locally as a drop-in replacement for the Cloudflare edition I&amp;rsquo;ve been using.&lt;/p&gt;
&lt;p&gt;The basic workflow of the tool is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You make a private (but not secret) album.&lt;/li&gt;
&lt;li&gt;You upload images to it.&lt;/li&gt;
&lt;li&gt;During the upload process you can set the &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;caption&lt;/code&gt; properties. The &lt;code&gt;caption&lt;/code&gt; goes on to be the alt-text.&lt;/li&gt;
&lt;li&gt;Once uploaded, you get a page back with text areas that have basic Markdown and HTML for copying/pasting, like this:&lt;/li&gt;
&lt;/ul&gt;






&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;![this is alt text, which will show up for people using screen-readers](https://photos.smugmug.com/photos/i-g2xggWq/0/20655d2f/X2/i-g2xggWq-X2.jpg)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Why? Because I get better control of the quality of images I share (SmugMug wants them to look nice at a variety of sizes and compresses/resizes accordingly), I&amp;rsquo;d like to move to having permanent URLs for images in posts (and I think I&amp;rsquo;m a SmugMug lifer now), and I&amp;rsquo;d eventually like to save the messy scattering of copies of images made just for sharing then discarded.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I finished up the <a href="https://github.com/pdxmph/imgup/tree/smugmugv2">initial SmugMug version of imgup</a> today.</p>
<p>There are some things I&rsquo;d like to add, but it&rsquo;s good enough to stick in Docker and run locally as a drop-in replacement for the Cloudflare edition I&rsquo;ve been using.</p>
<p>The basic workflow of the tool is:</p>
<ul>
<li>You make a private (but not secret) album.</li>
<li>You upload images to it.</li>
<li>During the upload process you can set the <code>title</code> and <code>caption</code> properties. The <code>caption</code> goes on to be the alt-text.</li>
<li>Once uploaded, you get a page back with text areas that have basic Markdown and HTML for copying/pasting, like this:</li>
</ul>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">![this is alt text, which will show up for people using screen-readers](https://photos.smugmug.com/photos/i-g2xggWq/0/20655d2f/X2/i-g2xggWq-X2.jpg)</span></span></code></pre></div>
<p>Why? Because I get better control of the quality of images I share (SmugMug wants them to look nice at a variety of sizes and compresses/resizes accordingly), I&rsquo;d like to move to having permanent URLs for images in posts (and I think I&rsquo;m a SmugMug lifer now), and I&rsquo;d eventually like to save the messy scattering of copies of images made just for sharing then discarded.</p>
<p>Because SmugMug has a pretty nice ecosystem of plugins, uploaders, and apps, there&rsquo;s more I mean to do. For instance, it&rsquo;s possible to just shoot an image straight from Lightroom CC on an iPad to SmugMug. There&rsquo;s also a good desktop Mac uploader that can snarf up things saved to a specific folder. So if I just pick up the habit of adding title and caption metadata in Lightroom, it&rsquo;ll show up in anything else I do with <code>imgup</code>. Uploading, ultimately, will not be something I do a lot with this tool as I build the parts where I can get back recent uploads and get easy sharing snippets.</p>
<p>Still on the list of things to do with this:</p>
<ul>
<li>Make an Atom feed to automate dropping pictures into my socials.</li>
<li>Make a &ldquo;Recent Uploads&rdquo; page that provides pre-made Markdown snippets.</li>
<li>Make <code>post this</code> buttons for micro.blog, Mastodon, etc.</li>
<li>Get rid of the manual step of editing a <code>.env</code> file to save tokens. I could just dump that into a file, look for it, and spare the manual uncommenting of code.</li>
</ul>
<p>In the process of debugging oAuth, I ended up building a manual solution to the problem of keeping an oAuth session alive after restarting the app: Once you do a SmugMug auth with the app, there&rsquo;s a <code>/tokens</code> page that tells you enough to stick your oAuth access token and secret in an environment variable. In the development environment it pulls this stuff from a <code>.env</code> file. You can use the app without doing this at all, at the cost of having to re-auth the app with SmugMug each time you restart it.</p>
<h3 id="previously">Previously:</h3>
<ul>
<li><a href="https://its.puddingtime.org/2023/01/17/oauth-rubocop-a.html">oAuth, rubocop, a Drupal recollection, and the value of play</a></li>
<li><a href="https://its.puddingtime.org/2023/01/17/shortcut-upload-stuff.html">Shortcut: upload stuff to Cloudflare Images service</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>oAuth, rubocop, a Drupal recollection, and the value of play</title>
      <link>https://mike.puddingtime.org/2023-01-17-oauth-rubocop-a/</link>
      <pubDate>Tue, 17 Jan 2023 23:02:23 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-17-oauth-rubocop-a/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.puddingtime.org/cdn-cgi/imagedelivery/DdOif196F8bRAxm9Zks1Dg/20230118/--imgup_json_ss.jpg/public&#34; alt=&#34;A screenshot of a nicely formatted web page showing neatly indented JSON&#34;&gt;&lt;/p&gt;
&lt;p&gt;oAuth is sort of a pain. Now that I sort of know how to plumb it in &amp;ndash; enough that I&amp;rsquo;m going to make myself a little repo with a reference application &amp;ndash; it has opened up a lot of interesting possibilities.&lt;/p&gt;
&lt;p&gt;The whole experience reminded me of when I was doing Drupal development for a job I took to get into tech and out of pure editorial. We needed to do some work migrating a bunch of content between sites. My predecessor, who&amp;rsquo;d established the site on a previous version of Drupal, had done a similar task with a certain plugin, so working from his notes I installed and learned &amp;ndash; that it wasn&amp;rsquo;t a clickable GUI thing with a wizard anymore &amp;ndash; it was now a content migration &amp;ldquo;framework,&amp;rdquo; which meant I was going to spend some time learning its API and writing my own PHP plugin to support our particular needs, or &amp;hellip; nothing. Ask for money for the outside guys, I guess, because I&amp;rsquo;d been hired to get better at PHP, not know it. I ended up hobbling through, and I still remember hopping around my office when the damn migration just ran on our 800,000+ user database.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://www.puddingtime.org/cdn-cgi/imagedelivery/DdOif196F8bRAxm9Zks1Dg/20230118/--imgup_json_ss.jpg/public" alt="A screenshot of a nicely formatted web page showing neatly indented JSON"></p>
<p>oAuth is sort of a pain. Now that I sort of know how to plumb it in &ndash; enough that I&rsquo;m going to make myself a little repo with a reference application &ndash; it has opened up a lot of interesting possibilities.</p>
<p>The whole experience reminded me of when I was doing Drupal development for a job I took to get into tech and out of pure editorial. We needed to do some work migrating a bunch of content between sites. My predecessor, who&rsquo;d established the site on a previous version of Drupal, had done a similar task with a certain plugin, so working from his notes I installed and learned &ndash; that it wasn&rsquo;t a clickable GUI thing with a wizard anymore &ndash; it was now a content migration &ldquo;framework,&rdquo; which meant I was going to spend some time learning its API and writing my own PHP plugin to support our particular needs, or &hellip; nothing. Ask for money for the outside guys, I guess, because I&rsquo;d been hired to get better at PHP, not know it. I ended up hobbling through, and I still remember hopping around my office when the damn migration just ran on our 800,000+ user database.</p>
<p>So this weekend I was shopping around for a library to help me get oAuth plumbed in. <a href="https://github.com/omniauth/omniauth">OmniAuth</a> presented itself right away, and seemed to have a SmugMug &ldquo;strategy&rdquo; &ndash; their word for &ldquo;module&rdquo; or &ldquo;plugin&rdquo; &ndash; so my eyes lit up. Then reality set in: The strategy was for an older version, and it targeted the old SmugMug API. Okay, fine, I was feeling industrious so what even was a strategy? I looked at a few and my eyes glazed because I had a nodding understanding of how all this worked, but not enough to sit down and implement a plugin for my specific problem.</p>
<p>I think that&rsquo;s probably okay. I set OmniAuth aside and went with the <a href="https://gitlab.com/oauth-xx/oauth/">vanilla Ruby oAuth gem</a> and <a href="https://github.com/filiptepper/sinatra-oauth-1.0a-example">a reference Sinatra app</a> someone wrote that did a really nice job of creating routes that recreated the oAuth dance. I had found a few other examples, but they were less systematic and harder to peel apart. By the time I was done fiddling with it to get it to work with SmugMug&rsquo;s particular oAuth endpoints, I felt a lot more confident on how the protocol actually works.</p>
<p>So, do I &ldquo;know oAuth?&rdquo; No, I do not. Asked to implement an oAuth signin process from scratch, I could not just implement it. But I do know, more or less, the vocabulary, the steps in the process, and what it&rsquo;s doing behind the scenes. Using standard libraries is a repeatable task. Good enough.</p>
<p>What else?</p>
<p>I was a little more forward-thinking this time around and picked up <a href="https://github.com/bkeepers/dotenv">dotenv</a> to manage API tokens. I might even be over-using it a little, because it can use the variables you store in it to make other variables. It just makes the core app a little less busy at the expense of having a <code>.env</code> file to consult if something seems to come from nowhere.</p>
<p>I have never been a big linter person, so I decided to give <a href="https://github.com/rubocop/rubocop">rubocop</a> a shot. I appreciate it as an education tool. There are a lot of things about good Ruby style I never learned, so it was a little alarming at first. Sort of like I&rsquo;d been made to code in a small room with a large speaker on the wall that was fed by a room full of the most earnest Ruby style pedants monitoring me from a hidden camera.</p>
<p>I ended up turning off a few things it wanted to complain about for &hellip; reasons &hellip;  (like shebangs) but did learn a few things and did find that by paying attention and accepting the corrections I no longer guiltily run a beautifier before every commit because things are at least consistent and tidy. Plus it complains about a few things that are at least potentially problematic.</p>
<p>What else?</p>
<p>Not much. I think I&rsquo;m feeling voluble because juggling oAuth&rsquo;s needs with what I wanted to accomplish was a pain in the neck, and SmugMug maintains a separate API for uploading that is harder to interact with than the one I will need to use for the rest of the project. I don&rsquo;t even really <em>need</em> the uploading API because their own uploaders and tools are great. Cloudflare was simple to figure out, hence alluring, but using my normal stuff (e.g. Lightroom) I can also get titles, keywords, exif data, etc. and do more interesting things without having to build out a database of some kind, or building special UIs to get that stuff.  But anyhow, adding then managing the complexity of oAuth feels like an accomplishment. I don&rsquo;t know how many little ideas I&rsquo;ve bounced off of because the API I would have needed to touch had moved on from simpler approaches.</p>
<p>And I am feeling good because I realized at some point over the past couple of weeks that I am doing all this because it is playing. I used to do a lot of little utility scripts and silly gadgets because it was fun and absorbing, not because it was hugely practical or efficient. It was just playing. I stopped playing for a long while. It feels good to play again.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Shortcut: upload stuff to Cloudflare Images service</title>
      <link>https://mike.puddingtime.org/2023-01-17-shortcut-upload-stuff/</link>
      <pubDate>Tue, 17 Jan 2023 14:19:44 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-17-shortcut-upload-stuff/</guid>
      <description>&lt;p&gt;I made a &lt;a href=&#34;https://www.icloud.com/shortcuts/d5592f54b4d342a0878db6c1a3bc414c&#34;&gt;shortcut&lt;/a&gt; that pretty much does what &lt;a href=&#34;https://githhub.com/pdxmph/imgup&#34;&gt;imgup&lt;/a&gt; does, except from an iPhone (or Mac, I guess, if you want to pick an image from Photos instead of sending it via an iPhone/iPad share sheet.&lt;/p&gt;
&lt;p&gt;It just squirts an image up to the Cloudflare Images API, gets back a URL, and copies some pre-made Markdown to your clipboard suitable for pasting somewhere. Pretty simple to add a step to send it to a Drafts draft, etc.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I made a <a href="https://www.icloud.com/shortcuts/d5592f54b4d342a0878db6c1a3bc414c">shortcut</a> that pretty much does what <a href="https://githhub.com/pdxmph/imgup">imgup</a> does, except from an iPhone (or Mac, I guess, if you want to pick an image from Photos instead of sending it via an iPhone/iPad share sheet.</p>
<p>It just squirts an image up to the Cloudflare Images API, gets back a URL, and copies some pre-made Markdown to your clipboard suitable for pasting somewhere. Pretty simple to add a step to send it to a Drafts draft, etc.</p>
<p>Cloudflare doesn&rsquo;t do ProRaw, and I&rsquo;ve got my phone set to default to that, so the shortcut converts image input into 90% JPEGs (both to make them acceptable as a filetype and to compress them down under the Cloudflare file size limit. Generally I share from Lightroom anyhow, and that shares out however you choose and at whatever quality level.</p>
<p>I like sticking stuff up in Cloudflare Images because I get some dynamic options for presentation, quality, etc. that I don&rsquo;t get when I&rsquo;m sending things to micro.blog. Any automation I build against that API can eventually enjoy some reuse for the ideas I have around an image feed. If I need to abandon ship, it&rsquo;s a simple API I can use to retrieve things.</p>
<p>I&rsquo;m still plugging away at Smugmug automation, though. Cloudflare is fun to play with, doesn&rsquo;t cost a ton, and is giving me some practice/learning opportunities. Ideally, though, I&rsquo;ve had some kind of relationship with Smugmug for a very long time, I trust them,  and would prefer to use them as the resting place for &ldquo;seemed worth sharing&rdquo; content.</p>
<p>I&rsquo;m also curious about Adobe&rsquo;s API.</p>
<p>What I&rsquo;m ultimately interested in is whichever of these will let me layer in some basic metadata in the form of descriptions, etc. then retrieve it programatically for different re-presentation.</p>
]]></content:encoded>
    </item>
    <item>
      <title>calling imgup </title>
      <link>https://mike.puddingtime.org/2023-01-16-calling-imgup-good/</link>
      <pubDate>Mon, 16 Jan 2023 09:58:07 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-16-calling-imgup-good/</guid>
      <description>&lt;p&gt;Today I put the last things into &lt;a href=&#34;https://github.com/pdxmph/imgup&#34;&gt;imgup&lt;/a&gt; I need to just run it and use it. I cleaned up the result page, added a chance to enter alt text at the beginning, and made it clean up its &lt;code&gt;tmp&lt;/code&gt; after it succeeds at uploading, which now has a cleaner error page for the most error-prone part of the app. I also have it using &lt;a href=&#34;https://github.com/bkeepers/dotenv&#34;&gt;dotenv&lt;/a&gt; for configuration because that felt cleaner and more forward-looking than the YAML config thing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today I put the last things into <a href="https://github.com/pdxmph/imgup">imgup</a> I need to just run it and use it. I cleaned up the result page, added a chance to enter alt text at the beginning, and made it clean up its <code>tmp</code> after it succeeds at uploading, which now has a cleaner error page for the most error-prone part of the app. I also have it using <a href="https://github.com/bkeepers/dotenv">dotenv</a> for configuration because that felt cleaner and more forward-looking than the YAML config thing.</p>
<p>There&rsquo;s still a whole thing to do on the Smugmug side.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Insomnia-driven development  and omgloldev 1.0 </title>
      <link>https://mike.puddingtime.org/2023-01-13-insomniadriven-development-and/</link>
      <pubDate>Fri, 13 Jan 2023 04:00:01 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-13-insomniadriven-development-and/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/de78659c0c.png&#34; alt=&#34;A screenshot of a web form with HTML source code in it. Two pink buttons at the bottom read &amp;quot;Save&amp;quot; and &amp;quot;Copy&amp;quot;&#34; title=&#34;omgloldev2.png&#34; border=&#34;0&#34; width=&#34;799&#34; height=&#34;474&#34; /&gt;
&lt;p&gt;Well, it was an insomnia night so I came downstairs to finish up. It took a little work to evade the greediness of the weblog.lol GitHub action, but I think &lt;a href=&#34;https://github.com/pdxmph/omgloldev&#34;&gt;omgloldev&lt;/a&gt; works well enough to use.&lt;/p&gt;
&lt;p&gt;I set out wanting to make something that would allow me to do quick, iterative weblog.lol template development I could preview locally, and I wanted to develop my weblog.lol blog using HAML. I also wanted, for purposes of authoring, to get the CSS out of the core template, and I was tired of copying and pasting stuff back and forth with all the attendant risk.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/de78659c0c.png" alt="A screenshot of a web form with HTML source code in it. Two pink buttons at the bottom read &quot;Save&quot; and &quot;Copy&quot;" title="omgloldev2.png" border="0" width="799" height="474" />
<p>Well, it was an insomnia night so I came downstairs to finish up. It took a little work to evade the greediness of the weblog.lol GitHub action, but I think <a href="https://github.com/pdxmph/omgloldev">omgloldev</a> works well enough to use.</p>
<p>I set out wanting to make something that would allow me to do quick, iterative weblog.lol template development I could preview locally, and I wanted to develop my weblog.lol blog using HAML. I also wanted, for purposes of authoring, to get the CSS out of the core template, and I was tired of copying and pasting stuff back and forth with all the attendant risk.</p>
<p>So this thing will run on my laptop or desktop and let me flip between Safari and editor, editing the core template or CSS.</p>
<ul>
<li>You drop in your weblog.lol template as HAML with a little conditional logic</li>
<li>You fill in a few HAML Markdown files to make a nice preview for hacking on</li>
<li>You preview it</li>
<li>You get a &ldquo;Raw&rdquo; page that gives you a beautified plaintext output
<ul>
<li>You can save the template and push the whole thing to git for use with weblog.lol&rsquo;s GitHub action.</li>
<li>You can just copy your template and paste it into weblog.lol&rsquo;s template form</li>
</ul>
</li>
</ul>
<p>That&rsquo;s about it. It could stand to:</p>
<ul>
<li>commit the new template and push it</li>
<li>have nicer notifications that the new template has been saved</li>
<li>keep the last <code>n</code> templates just in case</li>
<li>code highlight the preview</li>
<li>just have a simple code editor built in</li>
<li>etc.</li>
</ul>
<p>but mainly I just want to use it to polish up my weblog.lol blog and then start using that for a small thing.  Still not sleepy. Gonna try the herbal tea thing, but I think we might just roll into the coffee walk and crash later.</p>
]]></content:encoded>
    </item>
    <item>
      <title>omgloldev - now with a copyable raw template code view</title>
      <link>https://mike.puddingtime.org/2023-01-12-omgloldev-now-with/</link>
      <pubDate>Thu, 12 Jan 2023 22:34:53 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-12-omgloldev-now-with/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/62a3315db9.png&#34; alt=&#34;A  screenshot of a web page with a textarea that contains HTML source. &#34; title=&#34;omgloldev.png&#34; border=&#34;0&#34; width=&#34;799&#34; height=&#34;474&#34; /&gt;
&lt;p&gt;A little more progress on &lt;a href=&#34;https://github.com/pdxmph/omgloldev&#34;&gt;omgloldev&lt;/a&gt; tonight: I put the conditional logic in the haml template such that if you visit &lt;code&gt;/preview&lt;/code&gt;, you get a fully rendered demo page. If you visit &lt;code&gt;/raw&lt;/code&gt; you get the raw template code in a text area with a button to copy the code to your clipboard.&lt;/p&gt;
&lt;p&gt;The thing I&amp;rsquo;m going for is a way to develop my weblog.lol blog using HAML and Sinatra niceties (e.g. partials) with a decent working preview, then render the composited templates out into the right location for weblog.lol&amp;rsquo;s publishing action to pick them up and publish them when I push to the repo.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/62a3315db9.png" alt="A  screenshot of a web page with a textarea that contains HTML source. " title="omgloldev.png" border="0" width="799" height="474" />
<p>A little more progress on <a href="https://github.com/pdxmph/omgloldev">omgloldev</a> tonight: I put the conditional logic in the haml template such that if you visit <code>/preview</code>, you get a fully rendered demo page. If you visit <code>/raw</code> you get the raw template code in a text area with a button to copy the code to your clipboard.</p>
<p>The thing I&rsquo;m going for is a way to develop my weblog.lol blog using HAML and Sinatra niceties (e.g. partials) with a decent working preview, then render the composited templates out into the right location for weblog.lol&rsquo;s publishing action to pick them up and publish them when I push to the repo.</p>
<p>It&rsquo;s not too far off for that purpose now:</p>
<ul>
<li>I edit the haml in Sublime. That&rsquo;s comfortable and familiar.</li>
<li>I run the app to get my preview server.</li>
<li>I can visit the <code>raw</code> view and copy the text and paste it into the &ldquo;production&rdquo; template, then push the changes up to GitHub to kick off the publishing action.</li>
</ul>
<p>There is a bug in the template right now that is causing some problems. I&rsquo;m not sure if it&rsquo;s just me hurrying or if I&rsquo;m running into some HAML peculiarities that are messing with how things are nested. That&rsquo;s for tomorrow or the weekend.</p>
<p>Longer term, I want to break the parts that weblog.lol makes you keep in one file (the CSS, things that naturally belong in a partial) so that I can work on them in discrete editor views. Those things can all just be HAML or CSS partials that get sucked in to make the monolithic HTML that weblog.lol wants.</p>
<h3 id="why">Why?</h3>
<p>Part of The January Plan was to start being a little more structured about things.</p>
<p>I&rsquo;ve been paying more attention to where my time goes during the day: I&rsquo;ve got specific things I definitely want to accomplish before 5, things I want to get to on a regular cadence, etc.</p>
<p>But it has been years since I&rsquo;ve just played around with any kind of coding, and I could spend my day doing things like this. As it is, I&rsquo;m bucketing it to my discretionary time and beginning to think about how all the things I like to do need to come together with things that demand more structured time (and eventually synchronization with humans).</p>
<p>So this is a slightly silly project I could accomplish other ways, but it&rsquo;s getting me back into the flow of something I like to do, with all the fun, iterative learning and fiddling and tweaking. It feels good to do it, even if it doesn&rsquo;t mean much.</p>
]]></content:encoded>
    </item>
    <item>
      <title> Everyone could use a hug. A few thoughts on a couple of Masto photography squabbles.</title>
      <link>https://mike.puddingtime.org/2023-01-08-everyone-could-use/</link>
      <pubDate>Sun, 08 Jan 2023 15:57:38 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-08-everyone-could-use/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/ca8ad0fe3b.jpg&#34; alt=&#34;A couple pose in wedding clothing in front of a photographer. They&amp;#39;re standing on rocks next to the ocean. &#34; title=&#34;L1010694.jpg&#34; border=&#34;0&#34; width=&#34;800&#34; height=&#34;450&#34; /&gt;
&lt;p&gt;This weekend I saw a few culture-clashes go by around the topic of photography that helped my thoughts gel. One involved a small dog-pile over charges of elitism, and one involved a putative professional talking down to someone who was just happy about their new camera. You could characterize those clashes as people talking down or talking up, but also just talking past each other.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/ca8ad0fe3b.jpg" alt="A couple pose in wedding clothing in front of a photographer. They&#39;re standing on rocks next to the ocean. " title="L1010694.jpg" border="0" width="800" height="450" />
<p>This weekend I saw a few culture-clashes go by around the topic of photography that helped my thoughts gel. One involved a small dog-pile over charges of elitism, and one involved a putative professional talking down to someone who was just happy about their new camera. You could characterize those clashes as people talking down or talking up, but also just talking past each other.</p>
<p>Sometimes I want to write a screed about photography culture and inclusiveness because I&rsquo;m an outsider in parts of that culture and find parts of it as frustrating and tedious as any other human endeavor that can be gate-kept. Other times I remember, as a younger person who reported to me once said, that I&rsquo;ve had eight lives, including one as a writer, where I was an insider:</p>
<p>I was (well, am) a published author. For 15 years I successfully provided for myself &amp; family. I was a managing editor, had credits in the industry outside authoring, I&rsquo;d won awards, and I had success and leadership in multiple formats. I got very good at the parts of the trade that the web added to our job descriptions.  I&rsquo;m not saying that to brag, it&rsquo;s just true and I&rsquo;m noting it to get through this thought.</p>
<p>At the peak of my career in that field we were coming off the initial shock of blogging (amazingly disruptive to tech publishers) and were beginning to see the self-publishing wave roll in. A lot of my colleagues felt threatened, and that was a fair feeling to have because the people we thought of as &ldquo;our readers&rdquo; were experiencing the benefits of disintermediation. Also it just sucks to wake up to Dave Winer and Doc Searls reading a malediction over your still-living body.</p>
<p>We did reader interviews for one of my tech sites, talking to a kind of influencer down below the level of purchasing authority, but positioned to say &ldquo;this is what I want&rdquo; and have a credible chance of getting a purchase order approved.</p>
<p>Their universal responses to what we could be doing better:</p>
<p>&ldquo;Be more like Stack Overflow,&rdquo; and &ldquo;you need more bloggers who just do this stuff and don&rsquo;t care about all the nice formatting and filler.&rdquo;</p>
<p>Suddenly our field was awash in amateurs. Bad ones, gifted ones, talented ones, terrible ones. And we were dealing with the disorientation of all our tools for determining &ldquo;usefulness&rdquo; or &ldquo;quality&rdquo; going out the window: Suddenly a terrible amateur could make up for 100-500 words of disjointed prose with five lines of useful configuration code slapped in a <code>pre</code> tag.</p>
<p>As a reader, I was dealing with my own feelings about the self-publishing tide rolling in. As I&rsquo;d scroll the store with my Kindle I&rsquo;d see tons of $0.99 books. I was less threatened by that than annoyed: Fiction wasn&rsquo;t something I was interested in doing professionally, but I had a definite hierarchy of quality in my head, and you had to have some sort of professional editing to get into the higher tiers. I know I said and wrote some uncharitable things about it all.</p>
<p>Then someone flipped the framing around for me, asking why amateur self-publishers are so averse to just paying for a goddamn editor, even just a copy editor.</p>
<p>The question engaged another part of my brain that had been dealing with writers for a while at that point, and still vaguely remembered when I was first starting out, badly damaged by public education and standardized testing, carrying around a deeply held belief I couldn&rsquo;t write that no amount of positive feedback from my professors was helping:</p>
<blockquote>
<p>&ldquo;I can&rsquo;t speak for other would-be writers, but as a past would-be writer who spent a lot of time hearing he could write well from assorted authorities, I&rsquo;d say it&rsquo;s some degree of ego. Not the nasty, snarly &lsquo;grar, I&rsquo;m better than you!&rsquo; ego, necessarily, but sometimes a more fragile manifestation that editors are in a position to harm without a lot of thought.</p>
</blockquote>
<p>Having been put back in touch with my younger self, I remembered that I knew a lot about amateur creators and had a whole set of behaviors and strategies for helping them gain confidence:</p>
<blockquote>
<p>&ldquo;As an editor for online tech sites, I tend to recruit writers on the basis of what they know first, how well they can write next. If I can look at their sample and imagine merely editing it—not engaging it with lash and fire—I&rsquo;m happy to work with them. I&rsquo;ve had a few come through who are better than mediocre: They&rsquo;re adept writers, but they happened to pick another career. Some are recently out of some IT program where they had a good experience with a supportive professor who suggested that they were better at writing than they suspected.</p>
</blockquote>
<blockquote>
<p>&ldquo;I&rsquo;ve learned to treat them the way I wish someone had treated me when I was first being told I was a good writer and had no way of knowing for myself: I understand that their poorly understood talent might seem like some sort of magical manifestation to them. Because they have no way of understanding why they&rsquo;re good writers for themselves (they didn&rsquo;t spend school reading good writers or learning about what makes writing good), they depend on outside authority. At the same time, they&rsquo;re afraid that as easily as one random outside authority conferred the mantle of &ldquo;good writer,&rdquo; another could take it away.&rdquo;</p>
</blockquote>
<p>Reminded of empathy I&rsquo;d stopped experiencing as something other than a management strategy, I came back around to the topic, which was how to deal with this influx of self-publishers of varying degrees of professional conscientiousness and talent:</p>
<blockquote>
<p>&ldquo;I&rsquo;ve seen a lot of $1.99 and $2.99 genre books come through the Kindle store, and the one thing they remind me of above all other things is that the barrier to saying &lsquo;fuck it &hellip; might as well go for it&rsquo; is lower than ever. Hopefully it&rsquo;ll be a remedy for a lot of people who are completely paralyzed by the presence of the Web in their lives, because it&rsquo;s a non-stop reminder that someone, somewhere is being so fantastically awesome that even trying to be heard or hoping to be appreciated is pointless. A lot of people will still fail, I doubt many of them will ever make a living at it, but a number have a better chance than they ever had before to make a living doing something they love.&rdquo;</p>
</blockquote>
<p>&hellip; and that, eleven years later, is where I try to be today.</p>
<p>Unlike my time as a writer and editor, my professional and personal interests have diverged. I like &ldquo;ops stuff&rdquo; and &ldquo;chief of staff&rdquo; stuff for work, and I am passionate about taking pictures for just walking around being me. I&rsquo;ve done a couple of commissions and I&rsquo;ve donated some prints to help out a struggling website, but mostly I just like to make sure there&rsquo;s a camera with me, I like to share the pictures I take, and I like to revisit them later to see what I can see that&rsquo;s new.</p>
<p>I share the internet with kinds of photographers who are different from me. They&rsquo;re trying to make a living, they&rsquo;re in an active state of honing their craft in a way that is different from how I try to improve.</p>
<p>There are pockets of that culture that both annoy me and remind me of when I was making a living with my writing, because there are similar technology-driven dynamics afoot. I&rsquo;ve known a few photographers who have lost niche but sustaining businesses, first to prosumer digital cameras, and then to smartphones.</p>
<p>I get annoyed sometimes, because people under pressure or in fear for their livelihoods, while sympathetic characters, sometimes express their angst in really poor ways, either by denigrating hobbyist amateurs and their work, tossing around sexist slurs about the social aspects of popular photography, or simply insisting on speaking to amateurs and hobbyists in professional terms, as if to say there is a single way to talk about photography that must conform to their formalist or commercial concerns.</p>
<p>I also get annoyed because I see myself in them, from when I felt under threat and before someone asked a question that unlocked an answer in me that I&rsquo;d forgotten I had.</p>
<p>And I feel a dull unease because they (often unintentionally) poke at the part of me who hears things like &ldquo;you&rsquo;ve got a good eye,&rdquo; or &ldquo;you should try to sell some of this&rdquo; or &ldquo;your pictures are just, like, photographic&rdquo; and feels that jolt of vulnerability, that sense that &ldquo;as easily as one random outside authority conferred the mantle of &lsquo;good writer,&rsquo; another could take it away.&rdquo;</p>
<p>The annoyance and unease dissipate a little, because I found my way to kindness and can only trust other people will, too. We need more art in the world. We need more people striving to make beautiful things, silly things, pretty things, ugly things, whatever. We need more people striving to create. So we need to be kind.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Build an OPML file of new stuff in ohh.directory so you don&#39;t have to visit site-by-site in a browser </title>
      <link>https://mike.puddingtime.org/2023-01-07-build-an-opml/</link>
      <pubDate>Sat, 07 Jan 2023 15:30:31 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-07-build-an-opml/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/7c59b488d9.jpg&#34; alt=&#34;Detail of a rusted bulldozer tread painted with chipped yellow paint. &#34; title=&#34;L1000640.jpg&#34; border=&#34;0&#34; width=&#34;599&#34; height=&#34;400&#34; /&gt;
&lt;p&gt;I love that &lt;a href=&#34;https://ooh.directory&#34;&gt;ooh.directory&lt;/a&gt; exists: It&amp;rsquo;s a clean, simple, helpful directory of blogs. The site publishes an RSS feed of all its latest additions, which is very helpful.&lt;/p&gt;
&lt;p&gt;This automates the process of getting the feed from each blog into an OPML file you can import into your news reader:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://paste.lol/mph/oohpml.rb&#34;&gt;https://paste.lol/mph/oohpml.rb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Starting from &amp;ldquo;what the hell do I even know about OPML?&amp;rdquo; and &amp;ldquo;what the hell do I even know about processing XML with Ruby?&amp;rdquo; over tea this morning, it is the bare minimum I could do to:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/7c59b488d9.jpg" alt="Detail of a rusted bulldozer tread painted with chipped yellow paint. " title="L1000640.jpg" border="0" width="599" height="400" />
<p>I love that <a href="https://ooh.directory">ooh.directory</a> exists: It&rsquo;s a clean, simple, helpful directory of blogs. The site publishes an RSS feed of all its latest additions, which is very helpful.</p>
<p>This automates the process of getting the feed from each blog into an OPML file you can import into your news reader:</p>
<p><a href="https://paste.lol/mph/oohpml.rb">https://paste.lol/mph/oohpml.rb</a></p>
<p>Starting from &ldquo;what the hell do I even know about OPML?&rdquo; and &ldquo;what the hell do I even know about processing XML with Ruby?&rdquo; over tea this morning, it is the bare minimum I could do to:</p>
<ul>
<li>Consume the ooh.directory &ldquo;<a href="https://ooh.directory/feeds/recently-added.xml">Recently added blogs</a>&rdquo; feed.</li>
<li>Check each link in the feed for a feed. Since some CMSes make more than one, I make the very lazy assumption that the first one discovered is the right one. That might result in this thing pulling in comment feeds or something else.</li>
<li>Make sure the stuff coming from ooh.directory is contained to its own folder when I import the OPML feed. I was going to add categories, but the feed itself uses hard-coded HTML in a list. I guess I could have Nokogiri&rsquo;d the first list from the bottom, but again &hellip; lazy.</li>
<li>Plop an OPML file out into the working directory, ready for import by most RSS readers.</li>
</ul>
<h1 id="how-do-you-use-it">How do you use it?</h1>
<p>Save it to a file, run it with Ruby.</p>
<ul>
<li>Open a terminal. <code>cd</code> to wherever you saved it.</li>
<li>Enter the command <code>ruby oohpml.rb</code></li>
</ul>
<p>It&rsquo;ll drop an OPML file in the directory you ran it in. Most RSS readers seem to understand what to do with these things. It <em>should</em> put the new list of feeds in their own &ldquo;ooh&rdquo; directory. If you&rsquo;re super worried, export your stuff to an OPML file before you import it.</p>
<h3 id="whats-next">What&rsquo;s next?</h3>
<p>Nothing. I pinged the owner of the site asking if he&rsquo;d just implement OPML and he told me it&rsquo;s coming as by-category OPML files at some point and this won&rsquo;t be so useful.</p>
<p>So if it&rsquo;s helpful, great. I felt a brief surge of delight knowing I wouldn&rsquo;t have to go site-by-site to find feeds, subscribe, etc.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Why Feedly, and why Feedly &#43; something else</title>
      <link>https://mike.puddingtime.org/2023-01-07-why-feedly-and/</link>
      <pubDate>Sat, 07 Jan 2023 11:19:07 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-07-why-feedly-and/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/5feb9a0440.jpg&#34; alt=&#34;A person leans on the counter of a carnival booth for a game where you throw darts to win posters. There&amp;#39;s a wide array of posters behind them including Prince, Katie Perry, and Scooby Doo&#34; title=&#34;DSCF1009.jpg&#34; border=&#34;0&#34; width=&#34;800&#34; height=&#34;533&#34; /&gt;
&lt;p&gt;I like Feedly as an RSS back-end a lot. There are other RSS services that offer keyword filtering, but Feedly goes beyond that.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen people dis Feedly because they don&amp;rsquo;t like its attempt to popularize RSS as a research tool for work as opposed to a convenient way to aggregate sources of information for a personal interest. Others have a reaction to its focus on marketing research (even though it is moving beyond that niche).&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/5feb9a0440.jpg" alt="A person leans on the counter of a carnival booth for a game where you throw darts to win posters. There&#39;s a wide array of posters behind them including Prince, Katie Perry, and Scooby Doo" title="DSCF1009.jpg" border="0" width="800" height="533" />
<p>I like Feedly as an RSS back-end a lot. There are other RSS services that offer keyword filtering, but Feedly goes beyond that.</p>
<p>I&rsquo;ve seen people dis Feedly because they don&rsquo;t like its attempt to popularize RSS as a research tool for work as opposed to a convenient way to aggregate sources of information for a personal interest. Others have a reaction to its focus on marketing research (even though it is moving beyond that niche).</p>
<p>When I come at it from the perspective of a former tech journalist and former marketing content lead, its purpose in life is clarified. Rather than seeing it as a weird way to make a niche, personal technology popular, it&rsquo;s better to see it as a way to use automation to bring the benefits of a <a href="https://en.wikipedia.org/wiki/Media_monitoring_service">clipping service</a> to people who don&rsquo;t have the departmental or personal budget to pay for one. It is also happy to make money off people who just love RSS.</p>
<p>I stopped using it when I went through a period where I was trying to cut down on inputs a little more, and its mobile client was always frustrating and a bit buggy. Lately, though, I&rsquo;ve been sticking more stuff in my RSS reader, especially as things like <a href="https://ooh.directory">ooh.directory</a> come back around.</p>
<p>Feedly&rsquo;s filtering is better than anyone else&rsquo;s, because it goes past keywords.  There is some interesting stuff going on behind the scenes, including something that taxonomizes every article that passes through their system. That&rsquo;s a boon for someone using it as a souped-up clipping service, because the world changes from &ldquo;this is a list of sources I know about, look for my keywords&rdquo; to &ldquo;I&rsquo;m interested in these topics, bring me anything related to them from across the breadth of the feeds you, service, know about.&rdquo;</p>
<p>The people who write <em>most</em> RSS readers tend to treat RSS as a way to save yourself a bunch of visiting sites every day or as a way to avoid the bad design and ads of the sites&rsquo; layouts. They&rsquo;re not interested in writing or maintaining a back-end. In the Apple ecosystem, iCloud backend syncing is the most interesting thing in RSS readers because it gives people the benefit of having the read/unread state of all their feeds in sync. It &ldquo;frees&rdquo; them from the RSS backend services (e.g. Feedly, the Old Reader, Inoreader, etc.) and allows them to focus on the age-old RSS use case of quietly hoarding feeds in a reader and <em>maybe</em> sharing OPML files with others.</p>
<p>One annoying side effect of this approach to RSS is the recreation of the &ldquo;blog roll&rdquo; pattern, which RSS app authors recreate in the form of pre-populated feed lists, meant to &ldquo;help get you up and running with RSS.&rdquo;</p>
<p>Like blogrolls, they&rsquo;re a proponent of homogeneity and an aggregation of the safest opinions to have within a certain niche among tech obsessives. If once upon a time nobody ever got fired for buying IBM, nobody will ever go wrong quoting something they read from the pre-populated list of feeds in their RSS reader.</p>
<p>This is stultifying, and it steers me back to what I like about Feedly:</p>
<p>If the workflow of the modern, individualist RSS consumer is a sort of hunt-and-gather trudge across the plain that is the Internet, Feedly is a reasonable run at an industrial information age.</p>
<p>Yes, it has a very safe, very non-controversial list of initial feeds you can use or browse through and pick from. But it also has a pretty big store of feeds you never see, and it is continually operating on them: The articles they contain are analyzed and categorized, providing a secondary stream of content you can dip into that probably transcends your own list, and that curates at the article level, not the feed level. You can follow topics, not individuals or individual entities.</p>
<p>Is there a risk of some kind of monoculture or slant finding its way into Feedly&rsquo;s approach? Absolutely. To be truly engaged in a topic is to ultimately really only trust yourself when it comes to assessing and vetting information sources.</p>
<p>That&rsquo;s where the whole &ldquo;Iron Man vs. robots&rdquo; thing comes in (thank you Luke Kanies for the metaphor.)</p>
<p>Feedly offers you a way to curate what it brings you:</p>
<ul>
<li>Was the article properly categorized?</li>
<li>Do you want to see this source again?</li>
<li>Within this broad category, do you want to see this topic again?</li>
</ul>
<p>You&rsquo;re always free to bring in your own sources, you&rsquo;re always free to recategorize, but you have a system that augments and supports. You still have to operate it and guide it back.</p>
<p>There are more prosaic benefits to Feedly&rsquo;s approach, as well. Because it is constantly taxonomizing the content that passes through it, you can filter at a topical as opposed to keyword level, and that has some nice advantages for getting rid of annoyances. For instance:</p>
<p>If you follow many mainstream sites with paid staff you can&rsquo;t unsee the number of sponsored and affiliate link posts they put up. They try to frame it like they&rsquo;re doing some sort of journalism (&ldquo;the lowest price we&rsquo;ve seen&rdquo;). If you follow the product segment found in a given deal post, though, you also can&rsquo;t unsee how much of the stuff they&rsquo;re pushing is stock the manufacturer is probably trying to clear to make way for the next thing, and you definitely can&rsquo;t unsee the way these deals are only coming from sites with affiliate programs. No, this is not me discovering a conspiracy. This is me pointing out that deal posts are self-serving, presented as &ldquo;research,&rdquo; and inherently limited. They&rsquo;re noise.</p>
<p>Feedly has a conception of &ldquo;Deal Posts&rdquo; and categorizes them as such. You can eliminate most of them with a single generic filter instead of painstakingly gathering the textual characteristics of each kind of deal post on each site you follow. Feedly&rsquo;s not perfect, but I&rsquo;ll take an 80 or 90 percent success rate and dial in a few outliers over trying to build a bullet-proof keyword list. That&rsquo;s very useful automation.</p>
<h3 id="the-client-problem">The Client Problem</h3>
<p>So, earlier I threw a little shade at RSS reader developers. It&rsquo;s true. Something like Feedly needs back-end infra and people working on the problem of automated taxonomizing. The consumer RSS reader market doesn&rsquo;t support that on $5 an app store purchase, so there&rsquo;s no realistic way to move past the sole proprietor model of RSS curation/consumption.</p>
<p>As pure reading tools, though, the clients are pretty good! Plenty of ways to save and share content, flexibility on how you read the full article, simple ways to quickly import a feed into the reader while you&rsquo;re out browsing, and (some, limited) filtering, at least on keywords.</p>
<p>Feedly, on the other hand, does not have a good client. The iOS client is buggy and the web client doesn&rsquo;t feel very clean. There are some weird language things going on because Feedly is trying to turn streams of information composed of RSS feeds and other sources into a uniform, consistent river.</p>
<p>At the same time, you can get Feedly&rsquo;s output mediated through a good reader. Personally, I like <a href="https://reederapp.com">Reeder</a>. It&rsquo;s clean, pleasant, (Apple) cross-platform, has its own built-in read-it-later service (a good use of iCloud back-end syncing), and generally stays out of your way. Like other Apple readers it syncs feeds on iCloud if you wish, but it can also talk to many other services, including Feedly. Feedly and Reeder may represent the harmonic convergence of front-end and back-end.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Make an omg.lol pURL v2: Drafts native, no dialog</title>
      <link>https://mike.puddingtime.org/2023-01-06-make-an-omglol/</link>
      <pubDate>Fri, 06 Jan 2023 15:47:09 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-06-make-an-omglol/</guid>
      <description>&lt;p&gt;Make an omg.lol pURL v2: No need for Shortcuts, uses &lt;code&gt;name|url&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mph.url.lol/omgpurldrafts&#34;&gt;The Draft is here&lt;/a&gt; (unlisted &amp;hellip; I&amp;rsquo;m shy).&lt;/p&gt;
&lt;p&gt;Operator manual:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the action&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make a &lt;code&gt;name|URL&lt;/code&gt; pair, e.g.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;google|https://google.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;microblog|https://micro.blog&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;omg|https://omg.lol&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;
&lt;p&gt;Select the text&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the action.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Your text will be replaced by the new URL, e.g. &lt;code&gt;https://mph.omg.lol/microblog&lt;/code&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Make an omg.lol pURL v2: No need for Shortcuts, uses <code>name|url</code>.</p>
<p><a href="https://mph.url.lol/omgpurldrafts">The Draft is here</a> (unlisted &hellip; I&rsquo;m shy).</p>
<p>Operator manual:</p>
<ol>
<li>
<p>Install the action</p>
</li>
<li>
<p>Make a <code>name|URL</code> pair, e.g.</p>
</li>
</ol>
<ul>
<li><code>google|https://google.com</code></li>
<li><code>microblog|https://micro.blog</code></li>
<li><code>omg|https://omg.lol</code></li>
</ul>
<ol start="3">
<li>
<p>Select the text</p>
</li>
<li>
<p>Run the action.</p>
</li>
</ol>
<p>Your text will be replaced by the new URL, e.g. <code>https://mph.omg.lol/microblog</code>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>An Apple Shortcuts shortcut to use with Drafts to make omg.lol pURLs from selected text 🔗🧑🏻‍🔬🧪🔥</title>
      <link>https://mike.puddingtime.org/2023-01-06-an-apple-shortcuts/</link>
      <pubDate>Fri, 06 Jan 2023 15:01:11 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-06-an-apple-shortcuts/</guid>
      <description>&lt;p&gt;I made a thing.&lt;/p&gt;
&lt;p&gt;I was posting a link to Mastodon this morning and went just over the 500-character limit, so I went over to omg.lol&amp;rsquo;s pURL service to get a short link and I thought about how often I fumble around trying to find where to go make those, so I made a shortcut:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mph.url.lol/omg-purl-shortcut&#34;&gt;https://mph.url.lol/omg-purl-shortcut&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🎓 I&amp;rsquo;ve never done a Shortcut that talks to an API before, so that was educational.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I made a thing.</p>
<p>I was posting a link to Mastodon this morning and went just over the 500-character limit, so I went over to omg.lol&rsquo;s pURL service to get a short link and I thought about how often I fumble around trying to find where to go make those, so I made a shortcut:</p>
<p><a href="https://mph.url.lol/omg-purl-shortcut">https://mph.url.lol/omg-purl-shortcut</a></p>
<p>🎓 I&rsquo;ve never done a Shortcut that talks to an API before, so that was educational.</p>
<p>It is not meant to be used on its own, but you can edit the first and last steps to do that and plumb it into whatever. I made it for my use case, which is as a Drafts action that works on the selected text and replaces it with a shortened URL.</p>
<p>Not sure what the etiquette is for posting Drafts actions, and this one is so plug stupid I&rsquo;m not sure if it&rsquo;d survive curation, so here&rsquo;s the transcript of creating the action:</p>
<p>Step 1: Run Shortcut <code>pURL Shortener</code>, input <code>[[selection]]</code></p>
<ul>
<li>✅ Return to Drafts</li>
<li>✅ Wait for Response</li>
</ul>
<p>Step 2: Insert text, Template  <code>[[clipboard]]</code></p>
<p>That&rsquo;s it.</p>
<p>📕 So the workflow is just you&rsquo;re typing along and think &ldquo;I need to shorten this link&rdquo; so you select the link and fire the action, the Shortcut asks you for a name (it doesn&rsquo;t sanity check this at all) and the selection gets replaced with the new pURL. Huzzah.</p>
<p>💡The shared Shortcuts link should ask you for your omg.lol API key, which you can find toward the bottom of your <a href="https://home.omg.lol/account">account page</a>. If it doesn&rsquo;t for whatever reason, just open the shortcut and fill in the <code>Text</code> step right <em>underneath</em> the comment that begins &ldquo;Your API key goes here.&rdquo;</p>
<p>⚠️ It is not a genius. It does know if it gets something other than a <code>200</code> response.  I could have just used <code>Success</code> instead of the response code, but I wanted to leave open the option of offering a more useful error message. If it doesn&rsquo;t get a <code>200</code> back it assumes the worst and pops up an alert telling you something went wrong. You&rsquo;ll know that, though, because your selected text will have been overwritten with something you were not expecting at all.</p>
<p>⚠️ It overwrites your clipboard, too. I don&rsquo;t care because I use Alfred&rsquo;s clipboard history, but lord knows what some people expect to be in their clipboard 24 hours later. Nuclear codes. Number they got at a bar. I don&rsquo;t know. I worked IT for years: You either embrace Calvinism or become a Buddhist.</p>
<p>⚠️ It destroys the current selection in Drafts so &hellip; select wisely? And see the previous caution?</p>
<h3 id="things-to-do-with-this">Things to do with this</h3>
<ul>
<li>Make a version that works as a generic shortcut for use with RSS readers, etc, copying the link to the clipboard.</li>
<li>Make a version that responds to something like <code>https://some.url.com|shortcut_name</code> when sending from Drafts, so you don&rsquo;t have to enter a name into an alert.</li>
</ul>
<h3 id="things-i-learned">Things I learned</h3>
<ul>
<li>If you&rsquo;re dealing with nested values in a response, you use dot notation. So to get <code>status_code</code> out of this response:</li>
</ul>
<p><code>&quot;request&quot;: { &quot;status_code&quot;: 200, &quot;success&quot;: true }, </code></p>
<p>You want to use a <code>Get dictionary values</code> step from the URL contents response, then a <code>Get Value</code> step that reads <code>request.status_code</code>.</p>
<ul>
<li>The <code>if</code> statement in Shortcuts is input sensitive. So if you put it after a <code>get contents of URL</code> action, the thing it checks for is whether there was a response at all. If you want it to compare values (e.g. to check a response code) you have to add a <code>Get numbers from</code> your <code>Get Value</code> step.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>reMarkable v3 arrives and I have impressions and questions</title>
      <link>https://mike.puddingtime.org/2023-01-03-remarkable-v-arrives/</link>
      <pubDate>Tue, 03 Jan 2023 18:04:34 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-03-remarkable-v-arrives/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/ebe5ca4638.png&#34; alt=&#34;Screenshot of a terminal session showing a login to a reMarkable device with rainbow ansi art that reads &amp;quot;ZERO SUGAR&amp;quot;&#34; title=&#34;Screenshot 2023-01-03 at 6.11.10 PM.png&#34; border=&#34;0&#34;  /&gt;
&lt;p&gt;My reMarkable finally got &lt;a href=&#34;https://support.remarkable.com/s/article/Software-release-3-0&#34;&gt;the v3 update&lt;/a&gt; and, a day and some change later, the desktop client realized it had all the new features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Most practical quality of life thing:&lt;/strong&gt; You can do more notebook and note management in the desktop app. You can make new notebooks, move things around, add new pages, etc.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/ebe5ca4638.png" alt="Screenshot of a terminal session showing a login to a reMarkable device with rainbow ansi art that reads &quot;ZERO SUGAR&quot;" title="Screenshot 2023-01-03 at 6.11.10 PM.png" border="0"  />
<p>My reMarkable finally got <a href="https://support.remarkable.com/s/article/Software-release-3-0">the v3 update</a> and, a day and some change later, the desktop client realized it had all the new features.</p>
<p><strong>Most practical quality of life thing:</strong> You can do more notebook and note management in the desktop app. You can make new notebooks, move things around, add new pages, etc.</p>
<p><strong>Most interesting thing I&rsquo;m not sure how I&rsquo;ll use:</strong> You can type notes into your notebooks on the desktop app. The ability to do that with the mobile app is coming.</p>
<p>One thing I love about the idea is that I could conceivably leave my reMarkable at home or not have it on hand but still open a notebook on a laptop or (eventually, soon?) a mobile device and start a note. Suddenly you&rsquo;re free of the worst paper-like characteristic of a reMarkable, which is that its coordinates in time and space have to match yours to create new content on one. Now you just have to be near a device with a client app.</p>
<p>Interesting &ndash; or is it? &ndash; to note that in the release notes they want you to think about this as a way to add structuring text &ndash; headings &ndash; and not body text.</p>
<p><strong>Thing I&rsquo;m least sure about:</strong> &hellip; but I&rsquo;m willing to see how it goes, because it could be great:  Endless pages. reMarkable has spent all this time  committed to the bit that it is just like paper, including finite page sizes, meaning if you got to the bottom of the screen you had to make a new page. That made for some very sprawling notebooks and tedious paging around to get to stuff. I much prefer the idea of having one page per idea or logical divider or whatever in a notebook. For instance, I&rsquo;m sketching out an image feed tool. It has:</p>
<ul>
<li>Concept</li>
<li>Requirements</li>
<li>Implementation Ideas</li>
</ul>
<p>It makes more sense to me to have each of those areas on their own pages of whatever lengths.</p>
<p>When I think to another kind of note-taking I&rsquo;d do, meetings, I <em>think</em> I&rsquo;d much prefer to use the marker tool to open a new page for a given meeting, write the topic and date using the fat marker, then start writing notes on a single page. That makes for a much less cluttered and more easily scanned notebook.</p>
<p>Whether I am going to like this long term has a lot to do with how fluidly scrolling on these endless pages works. People on reddit are complaining about the whole thing, but I can&rsquo;t sort out how much is bad implementation and how much is people who hate change.</p>
<p>Anyhow, glad to have it all updated. Part of <a href="https://its.puddingtime.org/2023/01/03/well-done-with.html">Phase 1</a> involves getting back into my morning pages routine, which I&rsquo;d like to try on the reMarkable again.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Well, done with Phase 0</title>
      <link>https://mike.puddingtime.org/2023-01-03-well-done-with/</link>
      <pubDate>Tue, 03 Jan 2023 12:47:33 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-03-well-done-with/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/6285f2dae1.png&#34; alt=&#34;Screenshot of the months of November and December with an image thumbmail in each day.&#34; title=&#34;Screenshot&#34; border=&#34;0&#34;  /&gt;
&lt;p&gt;Once I knew my time at Puppet was winding down I took stock and decided to take a break. I gave myself November and December to rest. I didn&amp;rsquo;t think a lot about what it would mean to rest, I just knew I was going to do it. I&amp;rsquo;ll probably write more about it, because I might have something useful to say to people who are in a position to rest but don&amp;rsquo;t know how.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/6285f2dae1.png" alt="Screenshot of the months of November and December with an image thumbmail in each day." title="Screenshot" border="0"  />
<p>Once I knew my time at Puppet was winding down I took stock and decided to take a break. I gave myself November and December to rest. I didn&rsquo;t think a lot about what it would mean to rest, I just knew I was going to do it. I&rsquo;ll probably write more about it, because I might have something useful to say to people who are in a position to rest but don&rsquo;t know how.</p>
<p>If I am to summarize things in a few words:</p>
<p>I feel pretty good. Rested. It took me time to figure out how to stop a few runaway mental and emotional processes, and once I did things improved a lot, including my sleep and sense of optimism.</p>
<p>I have never felt more like I do now than when I wrote <a href="https://mike.puddingtime.org/life/2012/09/27/one-jumper-to">this</a>:</p>
<blockquote>
<p>&ldquo;So there’s this moment where you’re just hovering, unmoored, between a state of going up or going down. Just there. You came from the ground, you’re going back to the ground. For that moment, though, maybe it seems like you could be going nowhere; or perhaps you’re in danger of going practically anywhere.&rdquo;</p>
</blockquote>
<p>&hellip; yet I have never felt more at ease with it.</p>
<blockquote>
<p>The bad news: You&rsquo;re falling through the air with no parachute. The good news: There&rsquo;s no ground.
— Chögyam Trungpa</p>
</blockquote>
<p>The other part of the decision was that I was going to &ldquo;step it up a little&rdquo; come January. I have a better formed idea of what &ldquo;stepping it up&rdquo; might mean than I did &ldquo;rest.&rdquo;</p>
<p>So, yesterday marked the end of &ldquo;Phase 0&rdquo; of post-Puppet life, and today marks day one of &ldquo;Phase 1,&rdquo; which is meant to be about applying myself to finding a job while being as kind to myself about the whole thing as I can manage.</p>
<p>It&rsquo;ll mean a little more structure in each day. Some of that is meant to gently bend my routine back into something that will be able to fit in with more external demands on my time, and some of it is just to keep me on track and readily accountable to myself. But I also mean to continue to use the time I&rsquo;m being given and can take to do things that are restful and good for me.</p>
<p>That&rsquo;s all for now.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A Lightroom feature wish and a non-resolution</title>
      <link>https://mike.puddingtime.org/2023-01-02-a-lightroom-feature/</link>
      <pubDate>Mon, 02 Jan 2023 10:23:47 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-02-a-lightroom-feature/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2023/863ed58a3a.jpg&#34; alt=&#34;People in the floor-to-ceiling window of a coffee shop, some in shadow, some in light.&#34; title=&#34;R0000225.jpg&#34; border=&#34;0&#34;  /&gt;
&lt;p&gt;I&amp;rsquo;d like a way to lock images in Lightroom or otherwise add a tiny bit of friction to just editing something without considering a few implications.&lt;/p&gt;
&lt;p&gt;In Lightroom Classic you have the option to make a published collection with virtual copies. That&amp;rsquo;s handy, because if you&amp;rsquo;ve taken a bunch of time to get a collection into a consistent state, the virtual copies help ensure that you can keep it that way.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2023/863ed58a3a.jpg" alt="People in the floor-to-ceiling window of a coffee shop, some in shadow, some in light." title="R0000225.jpg" border="0"  />
<p>I&rsquo;d like a way to lock images in Lightroom or otherwise add a tiny bit of friction to just editing something without considering a few implications.</p>
<p>In Lightroom Classic you have the option to make a published collection with virtual copies. That&rsquo;s handy, because if you&rsquo;ve taken a bunch of time to get a collection into a consistent state, the virtual copies help ensure that you can keep it that way.</p>
<p>In Neue LR, the few publishing connections available just use the original unless you manually make a copy. Each collection you make using those connections is another collection whose members you need to be thinking about if you come across an image months or years later and think &ldquo;didn&rsquo;t work as a monochrome after all&rdquo; or &ldquo;I really like how this looks with the native film simulation,&rdquo; or even just &ldquo;wow, I overseasoned that thing.&rdquo;</p>
<p>Alternately, they could leverage the new versioning system to create and publish a point-in-time version named for and linked to the collection. That sounds more complicated to implement, but it leverages a thing that&rsquo;s already in the stack.</p>
<p>Locking seems less complicated and could offer a way to get a &ldquo;hey &ndash; edit or copy?&rdquo; dialog. I don&rsquo;t think it needs, like, a two-key hardware dongle and a second person to confirm editing. Just a bit of friction.</p>
<p>I recently bought SmugMug&rsquo;s <a href="https://www.smugmug.com/features/raw-photo-storage-management">raw upload feature</a>, so using the SmugMug connector in LrC or LR makes a lot of sense: Every time I make a gallery out of the original raws, I get a passive raw backup of images that are implicitly the ones I care most about.</p>
<p>For now, the real answer for me is to not use Neue Lightroom&rsquo;s limited connectors. I could figure out some metadata scheme or something to keep from shooting myself in the foot, but it&rsquo;s easier to just use Lightroom Classic, make virtual copies for each collection, and be at peace.</p>
<p>That&rsquo;s in keeping with something I want to work on more this year, which is just slowing down a little.</p>
<p>I made a lot of progress last year being more deliberate about a lot of things. I also gave myself a huge gift by spending days of work straightening out my archives and cleaning up some messes I made for myself. I need to take advantage of that gift and double down on that commitment to think through my workflows and behaviors a little more.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Just let me shoot, revisited^3</title>
      <link>https://mike.puddingtime.org/2023-01-01-just-let-me/</link>
      <pubDate>Sun, 01 Jan 2023 20:55:12 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2023-01-01-just-let-me/</guid>
      <description>&lt;p&gt;After two weeks of my &lt;a href=&#34;https://mike.puddingtime.org/posts/2022-12-13-just-let-me.html&#34;&gt;previously described low-frills camera setup&lt;/a&gt; I think I am ready to stop thinking about it at all.&lt;/p&gt;
&lt;p&gt;To recap, it&amp;rsquo;s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Pro Neg Standard film simulation&lt;/li&gt;
&lt;li&gt;Dynamic Range set to &amp;ldquo;200.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Highlight tone bumped up a little&lt;/li&gt;
&lt;li&gt;Shadow tone bumped down a little&lt;/li&gt;
&lt;li&gt;Color bumped up a notch&lt;/li&gt;
&lt;li&gt;A stripped down, 8-slot Q menu that covers operational details&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For walking around it gives me a fairly neutral view: Colors are &amp;ldquo;real&amp;rdquo; but vibrant, shadows are easier to see into. It seems likely I am reacting less to the mood that film simulations and extreme tone settings would introduce. It also keeps me out of the settings and in the viewfinder. Looking back, it makes the X-Pro3&amp;rsquo;s &amp;ldquo;distraction-free&amp;rdquo; conceit a little funny: Don&amp;rsquo;t give people a 16-option menu to fiddle with and they won&amp;rsquo;t get distracted, but can still enjoy the quick feedback of a rear LCD and fast access to things they might want to change but don&amp;rsquo;t have buttons for.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>After two weeks of my <a href="/posts/2022-12-13-just-let-me.html">previously described low-frills camera setup</a> I think I am ready to stop thinking about it at all.</p>
<p>To recap, it&rsquo;s:</p>
<ul>
<li>The Pro Neg Standard film simulation</li>
<li>Dynamic Range set to &ldquo;200.&rdquo;</li>
<li>Highlight tone bumped up a little</li>
<li>Shadow tone bumped down a little</li>
<li>Color bumped up a notch</li>
<li>A stripped down, 8-slot Q menu that covers operational details</li>
</ul>
<p>For walking around it gives me a fairly neutral view: Colors are &ldquo;real&rdquo; but vibrant, shadows are easier to see into. It seems likely I am reacting less to the mood that film simulations and extreme tone settings would introduce. It also keeps me out of the settings and in the viewfinder. Looking back, it makes the X-Pro3&rsquo;s &ldquo;distraction-free&rdquo; conceit a little funny: Don&rsquo;t give people a 16-option menu to fiddle with and they won&rsquo;t get distracted, but can still enjoy the quick feedback of a rear LCD and fast access to things they might want to change but don&rsquo;t have buttons for.</p>
<p>For post, it gives me a mostly neutral image that doesn&rsquo;t have anything weird going on with the colors. That makes the impact of each Lightroom choice &ndash; especially profiles &ndash; a little more clear. Shooting at DR200 instead of 100 gives me some leeway with shadow and highlight recovery. It&rsquo;s possible to stumble into that sort of flat HDR look, but it&rsquo;s also completely in my hands.</p>
<p>It&rsquo;s also completely amenable to my very generic &ldquo;punch this up a little&rdquo; import preset, which sets a few things to about 75% of where I usually end up. That makes it a little easier to triage and saves me a little twiddling once I&rsquo;ve got a set to work with.</p>
<p>As someone who can complicate things quite a bit, I&rsquo;m happy having a setup that is less complicated and less fiddly. There&rsquo;s no &ldquo;how&rsquo;re my settings?&rdquo; when I grab the camera and go out the door. I just grab it, go shoot, and then enjoy the interprative or reconceptual work in a comfortable chair at home.</p>
<p><strong>Previously:</strong></p>
<ul>
<li><a href="/posts/2022-12-13-just-let-me.html">Just let me shoot revisited, revisited</a></li>
<li><a href="https://its.puddingtime.org/2022/11/25/just-let-me.html">&ldquo;Just let me shoot,&rdquo; revisited.</a></li>
<li><a href="https://its.puddingtime.org/2022/11/17/fujifilm-just-let.html">Fujifilm &ldquo;Just Let Me Shoot&rdquo; Configuration</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>The unrelaxed photographer (on taking pictures on the street)</title>
      <link>https://mike.puddingtime.org/2022-12-30-the-unrelaxed-photographer/</link>
      <pubDate>Fri, 30 Dec 2022 17:54:45 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-30-the-unrelaxed-photographer/</guid>
      <description>&lt;p&gt;It was nice to be given permission to take pictures inside the Outdoor Store. There aren&amp;rsquo;t a lot of spaces where you feel completely welcome with a camera.&lt;/p&gt;
&lt;p&gt;When I walked out of the store I lingered on the sidewalk, reverting to older habits.&lt;/p&gt;
&lt;p&gt;These days I have learned to affect an air of indifference as I pre-visualize, camera tucked under an arm and out of sight. Taking the picture is as smooth a motion as I can make it, body on a plane orthogonal to the subject. If I am moving, there&amp;rsquo;s a brief pause in my gate. If I am still, I start moving. If I perceive people around me, I make sure my eyes are focused somewhere besides that person, or that I am facing away from them just a little, before the camera comes down from my face. As the camera comes down, I grasp the strap and let the camera swing around behind me so that as I pull it forward it&amp;rsquo;s tucked away again.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It was nice to be given permission to take pictures inside the Outdoor Store. There aren&rsquo;t a lot of spaces where you feel completely welcome with a camera.</p>
<p>When I walked out of the store I lingered on the sidewalk, reverting to older habits.</p>
<p>These days I have learned to affect an air of indifference as I pre-visualize, camera tucked under an arm and out of sight. Taking the picture is as smooth a motion as I can make it, body on a plane orthogonal to the subject. If I am moving, there&rsquo;s a brief pause in my gate. If I am still, I start moving. If I perceive people around me, I make sure my eyes are focused somewhere besides that person, or that I am facing away from them just a little, before the camera comes down from my face. As the camera comes down, I grasp the strap and let the camera swing around behind me so that as I pull it forward it&rsquo;s tucked away again.</p>
<p>I have some rules:</p>
<ul>
<li>No street people, unless they notice me and ask. It has happened a few times, but I&rsquo;ve gotten good enough that they usually don&rsquo;t.</li>
<li>No homeless, people sleeping on the street, etc. I let tents into the frame but never the people who live in them.</li>
<li>Nobody in distress.</li>
</ul>
<p>These two asked:</p>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/e1be1dbc30.jpg" alt="Two people on a riverfront. One holding a cigarette, the other drinking from a can. They closed their eyes as the shutter was released and gave me the finger. " title="Waterfront People" border="0" width="800" height="533" />
<p>&hellip; and had their fun.</p>
<p>Those rules are reflective of some ethical concerns about misery porn, and some concern for my own well-being. I&rsquo;ve been threatened a few times just being seen with a camera on me, and I&rsquo;ve heard from other photographers who have been attacked. Sometimes the attacks sound like property crimes, other times they sound like people thought they were provoked.</p>
<p>Sometimes I inadvertently break a rule if I&rsquo;m shooting at night or with a wide lens, or if I hurried a shot before going down the checklist. When that happens I check for a few things &ndash; if I can crop the issue out or credibly consider the inadvertent inclusion anonymous.</p>
<p>This is an example of what I consider an allowable mistake:</p>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/9121fbae39.jpg" alt="The Portland Outdoor Store at night, red neon sign and damaged storefront. In the shadows to the left are tents and people." title="Portland Outdoor Store at night" border="0" width="799" height="533" />
<p>I am conflicted about a few things.</p>
<p>For instance, it isn&rsquo;t possible to walk down the 205 bike path or the Springwater Corridor Trail without seeing evidence of human outdoor habitation, either active campsites or the remains of them as they repeat the cycle of encampment and eviction.</p>
<p>I don&rsquo;t take pictures of active camps for their own sake. Sometimes they get into the background. I don&rsquo;t take pictures of the people pushing carts up and down the trail. I take shots with people in them when I can anonymize the people and they don&rsquo;t seem to be in dire straits.</p>
<p>I used to avoid taking pictures of the aftermath of an encampment, but lately I&rsquo;ve begun to take a few. Those encampments are things that happen. They have consequences. I don&rsquo;t share many of those pictures because the discussion about homelessness in this city has descended into a curdled, sour stalemate; another front in the culture war. I know who would use those pictures for ammunition.</p>
<p>This is the kind of thing I am talking about:</p>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/97cbf5673a.jpg" alt="An abandoned, burned out car partially obscured by vines on a dirt lot. " title="Burned out car on the Springwater Trail" border="0" width="800" height="533" />
<p>I am also pretty careful around kids. I don&rsquo;t have any rules about keeping them out of pictures, but even in relatively &ldquo;safe&rdquo; spaces (tourist spots, for instance) I just try to avoid pointing a camera in their direction because it makes lots of parents uneasy. Will you find pictures of kids in my portfolio? Yes, you will. Will you find many? No. And I know 90 percent of them and/or took the picture in a setting where permission is strongly implied.</p>
<p>Anyhow, that was a longer unpacking than I meant to get to the point that I am not a relaxed photographer most places. I do not confuse my legal rights with how other people experience a camera in use around them. When people stop me and ask why I&rsquo;m taking pictures around them &ndash; not of them, just around them &ndash; I don&rsquo;t lead with my rights, I lead with an honest explanation. My experience has always been positive in these cases: People have accepted the explanation. Sometimes they have offered that they&rsquo;re sensitive because hostile land owners have been harassing them with cameras. I always just say, &ldquo;oh, yeah. No. I don&rsquo;t take pictures of people like that and I&rsquo;m sorry they did that to you.&rdquo;</p>
<p>Other photographers have scolded me, suggesting this is letting down our side. The only side in this I have is my own, and I behave the way I do out of the best balance I can strike of respect for others&rsquo; dignity and desire for relative anonymity in public spaces, ethical considerations, self-preservation, and, yes, my rights.</p>
<p>All of which is going toward how odd and nice it was to be told &ldquo;take all the pictures you want,&rdquo; and to even have a normally closed space opened to me so I could explore some more.</p>
<p>And also toward how it felt to step onto the sidewalk and momentarily forget I was out of that protected space. I stood there with my camera half to my eye, trying to judge a shot. Then some motion across the street caught my eye, and I started, and I tucked the camera away, walked half a block as if to scrub away the memory that I had even been there, then quietly walked back to my spot and looked for the shot again.</p>
<p>Up, snap, start moving, camera down, eyes averted.</p>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/c5cd93aae4.jpg" alt="Foreground: A vintage blue, gold, and white sign reads &amp;quot;Your BankAmericard welcome here.&amp;quot; In the background, a red neon sign &amp;quot;PORTLAND OUTDOOR&amp;quot; with a partially lit bucking bronco. " title="DSCF0946.jpg" border="0" width="800" height="533" />
]]></content:encoded>
    </item>
    <item>
      <title>It always comes back to that chart</title>
      <link>https://mike.puddingtime.org/2022-12-28-it-always-comes/</link>
      <pubDate>Wed, 28 Dec 2022 12:37:10 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-28-it-always-comes/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://imgs.xkcd.com/comics/is_it_worth_the_time.png&#34; width=&#34;100%&#34; alt=&#34;Chart with the text HOW LONG CAN YOU WORK ON MAKING A ROUTINE. TASK MORE
EFFICIENT BEFORE YOU&#39;RE SPENDING MORE TIME THAN YOU SAVE? and a table that correlates how much time you save with how often you do the task&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mattgemmell.com/using-drafts-as-a-local-wiki/&#34;&gt;Matt Gemmell on using Drafts as a local wiki&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Drafts on iPadOS, iOS, and macOS can now be used as a first-class personal knowledge base, ideas repository, Zettelkasten, and so on. I think that a wiki is a useful concept (and measurement) for such situations, and in that regard Drafts now stacks up well.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://imgs.xkcd.com/comics/is_it_worth_the_time.png" width="100%" alt="Chart with the text HOW LONG CAN YOU WORK ON MAKING A ROUTINE. TASK MORE
EFFICIENT BEFORE YOU'RE SPENDING MORE TIME THAN YOU SAVE? and a table that correlates how much time you save with how often you do the task"></p>
<p><a href="https://mattgemmell.com/using-drafts-as-a-local-wiki/">Matt Gemmell on using Drafts as a local wiki</a>:</p>
<blockquote>
<p>&ldquo;Drafts on iPadOS, iOS, and macOS can now be used as a first-class personal knowledge base, ideas repository, Zettelkasten, and so on. I think that a wiki is a useful concept (and measurement) for such situations, and in that regard Drafts now stacks up well.&rdquo;</p>
</blockquote>
<p>I was just sitting down to write down photo hosting requirements. Drafts and Obsidian both came to mind. My first thought in that ad-hoc side-by-side was &ldquo;I wish my tool notes were in Drafts and not Obsidian.&rdquo;</p>
<p>My main Obsidian vault is overgrown with plugins, and Drafts workspaces are compelling. The idea of having a slipbox workspace, a thinking workspace, and an activity workspace, with constrained lists of actions appropriate to each is pretty compelling.</p>
<p>I really like the idea of staring an idea in the thinking workspace and using the &ldquo;Sheet in Ulysses&rdquo; action when it&rsquo;s ready to be moved over as raw material for writing.</p>
<p>Somehow, there&rsquo;s a friction thing there, too:</p>
<p>Obsidian has all these plugins. Drafts has a ton of actions.</p>
<p>When I think of plugins, I think &ldquo;this is a thing that will do something for me.&rdquo; When I think of actions, I think  &ldquo;you still have to do something with this thing once you install it.&rdquo;</p>
<p>Drafts has been a little repellent to me over the years because its most ardent supporters are also automation enthusiasts on a level I have not been for years and years. That doesn&rsquo;t land with me the way it did. I remember losing hours to automating trivial things because the process of writing the automation was fun and soothing. These days I lose more hours to the irrational hope and troughs of despair that is installing and trying out plugins or add-ons.</p>
<p>It reminds me a little of when I was on the other side of the line with, say, Linux desktops: Constantly rebuilding, tweaking and updating my GNOME install, super proud of how I was on the cutting edge. Then I&rsquo;d run into someone who was, like, &ldquo;never needed more than <a href="https://en.wikipedia.org/wiki/Twm">twm</a>&rdquo; and had, like, accomplished things in life.</p>
<p>I said a few days ago that I want &ldquo;works everywhere and is simple.&rdquo; I also want a little protection from myself, but not so much that I can&rsquo;t make some things simpler with a little automation if I truly feel driven to it.</p>
<p>Like I also said as a marketing content lead years ago, contemplating new tools: &ldquo;For now it&rsquo;s text files and spreadsheets. We&rsquo;ll consider a new tool when we understand what&rsquo;s truly painful about our work when it&rsquo;s only being done in text files and spreadsheets.&rdquo;</p>
<p>Then I was promoted to management. I&rsquo;m assuming there was an orgy of tool-buying within a week.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Finding the rhythm</title>
      <link>https://mike.puddingtime.org/2022-12-28-finding-the-rhythm/</link>
      <pubDate>Wed, 28 Dec 2022 10:15:58 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-28-finding-the-rhythm/</guid>
      <description>&lt;p&gt;A good thing about morning coffee walks is that I am content to see the same thing each day and try to find the way that it has changed, while Al  can only do the same route and see the same things so many times. We both want a little salt in the hash, we just have different strategies for getting it. My camera is sort of a mechanical augment that lets me be my way. As I spent the day sorting photos yesterday, I kept seeing things coming back up and my first impulse would be to say &amp;ldquo;I have that already,&amp;rdquo; until I thought about what was different each time. Sometimes the differences were environmental: That tree died or finally fell over. That building had a business in it and now it&amp;rsquo;s boarded up. Other times it&amp;rsquo;s me: that tree was just there in the background, now it&amp;rsquo;s the focus. I wanted to capture the golden light or the busy clouds. I wanted to capture the stark white of exposed wood against the dark, rich patterns of the bark.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A good thing about morning coffee walks is that I am content to see the same thing each day and try to find the way that it has changed, while Al  can only do the same route and see the same things so many times. We both want a little salt in the hash, we just have different strategies for getting it. My camera is sort of a mechanical augment that lets me be my way. As I spent the day sorting photos yesterday, I kept seeing things coming back up and my first impulse would be to say &ldquo;I have that already,&rdquo; until I thought about what was different each time. Sometimes the differences were environmental: That tree died or finally fell over. That building had a business in it and now it&rsquo;s boarded up. Other times it&rsquo;s me: that tree was just there in the background, now it&rsquo;s the focus. I wanted to capture the golden light or the busy clouds. I wanted to capture the stark white of exposed wood against the dark, rich patterns of the bark.</p>
<p>I like watching things change, age, wear down, end. Maybe that&rsquo;s an adaptation. I like my routines and I like the feeling of dawning awareness of the constant things over time.  What&rsquo;s new today? Or is it new? Maybe it just took more beats to come back to this point in this thing&rsquo;s lifelong rhythm.</p>
<p>Like, I&rsquo;m always interested when Ben introduces me to some new music he&rsquo;s discovered because he is drawn to things where you can&rsquo;t find the rhythm over two or four bars. You almost despair of finding the rhythm at all. You have to sit with it for a while. It&rsquo;s a little strange watching his youthful impatience in so many things, then listening to his music, which you want to write off as random bleeping until you sit with it.</p>
<p>It feels good to recognize rhythms over time, and it feels good to watch change. If I&rsquo;m going to enjoy my rhythms, routines, and rituals, then I need to also enjoy change, decay, and endings. And I think this is all good preparation for when the system that is me descends into final chaos.</p>
<p>“The more a thing tends to be permanent, the more it tends to be lifeless.”</p>
<img src="https://its.puddingtime.org/uploads/2022/ab7034281a.jpg" width="600" height="450" alt="An Instax photo of pink plastic flamingoes perched on top of a fence with a twisted tree behind them. There is some discoloration, like a slightly misaligned printing process. ">
]]></content:encoded>
    </item>
    <item>
      <title>Lightroom Sorted</title>
      <link>https://mike.puddingtime.org/2022-12-27-lightroom-sorted/</link>
      <pubDate>Tue, 27 Dec 2022 20:33:33 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-27-lightroom-sorted/</guid>
      <description>&lt;p&gt;It took a whole day at the desk but I think Lightroom is straightened out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everything that exists as the original raw or jpeg is accounted for. Everything that was missing for whatever reason isn&amp;rsquo;t in the collection anymore.&lt;/li&gt;
&lt;li&gt;Everything pre-2015 is in its own catalog with its own backup plan to the NAS and cloud.&lt;/li&gt;
&lt;li&gt;Everything post-2014 is in its own catalog and completely in Adobe&amp;rsquo;s cloud as well as NAS and public cloud-backed.&lt;/li&gt;
&lt;li&gt;A few projects I did for other people are in their own catalogs and in a backup plan.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s an &amp;ldquo;everything pre-sort&amp;rdquo; archive up on S3 that&amp;rsquo;ll just sit there for a while.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I had some worry because Lightroom Classic, Lightroom CC and Adobe Creative Cloud all have some ideas about what&amp;rsquo;s in sync and what&amp;rsquo;s not that are nerve-wracking if you haven&amp;rsquo;t paid close attention to how everything was sorted to begin with. With this whole exercise over, I seem to know where everything is: If it&amp;rsquo;s in Lightroom CC, I know the original is at least in Lightroom Classic, even if it&amp;rsquo;s only available in CC as a Smart Preview.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It took a whole day at the desk but I think Lightroom is straightened out:</p>
<ul>
<li>Everything that exists as the original raw or jpeg is accounted for. Everything that was missing for whatever reason isn&rsquo;t in the collection anymore.</li>
<li>Everything pre-2015 is in its own catalog with its own backup plan to the NAS and cloud.</li>
<li>Everything post-2014 is in its own catalog and completely in Adobe&rsquo;s cloud as well as NAS and public cloud-backed.</li>
<li>A few projects I did for other people are in their own catalogs and in a backup plan.</li>
<li>There&rsquo;s an &ldquo;everything pre-sort&rdquo; archive up on S3 that&rsquo;ll just sit there for a while.</li>
</ul>
<p>I had some worry because Lightroom Classic, Lightroom CC and Adobe Creative Cloud all have some ideas about what&rsquo;s in sync and what&rsquo;s not that are nerve-wracking if you haven&rsquo;t paid close attention to how everything was sorted to begin with. With this whole exercise over, I seem to know where everything is: If it&rsquo;s in Lightroom CC, I know the original is at least in Lightroom Classic, even if it&rsquo;s only available in CC as a Smart Preview.</p>
<p>The hard part was going through seven years of photos and culling, but I ended up getting rid of close to half of that collection by the time I got rid of duplicate jpegs, stuff that didn&rsquo;t really do anything for me anymore, and things I realized worked well as just three or four photos of a thing instead of 50.</p>
<p>I had to learn one workaround to make sure everything was syncing to Adobe&rsquo;s cloud:</p>
<p>You can&rsquo;t just tell Lightroom &ldquo;put everything in Classic into the cloud.&rdquo; Everything has to be in a collection that is set to sync. Until that&rsquo;s done, you have two running numbers: The total number of photos in your collection and the total number synced.</p>
<p>By the time I was done culling I still had close to 2,000 items that weren&rsquo;t in sync for whatever reason. My first thought was &ldquo;sync status is metadata, so I&rsquo;ll just make a filter, find them, and put them in the right collections.&rdquo;</p>
<p>Nope. Lightroom knows exactly which ones are synced and which aren&rsquo;t, but you can&rsquo;t make a filter for it. You have to:</p>
<ol>
<li>Go into your &ldquo;all synced&rdquo; collection and select all. (Selections persist even as you change between collections, which matters for step 2:)</li>
<li>Go into your &ldquo;all photos&rdquo; collection and &ldquo;invert selection.&rdquo; That&rsquo;s everything that was not selected in the &ldquo;all synced&rdquo; collection.</li>
<li>Drag the result of that inversion into a collection of its own you can either sync, or use as a way to get things sorted into collections that are in sync.</li>
</ol>
<p>Now that I know how to do it it&rsquo;s a one-minute operation. Sure is counter-intuitive, though.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Fiddling with Drafts. It&#39;s a lot. </title>
      <link>https://mike.puddingtime.org/2022-12-27-fiddling-with-drafts/</link>
      <pubDate>Tue, 27 Dec 2022 10:05:11 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-27-fiddling-with-drafts/</guid>
      <description>&lt;p&gt;I spent a while this morning cleaning up my Drafts actions and making it a little more focused for regular use. It has always been on my list of things to understand better, but there&amp;rsquo;s so. much. stuff. to absorb right up front.&lt;/p&gt;
&lt;p&gt;If I were designing its UX I would explore a task area picker to cut down on all the visual noise of a fresh install.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Tell me three things you want to do with this tool.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I spent a while this morning cleaning up my Drafts actions and making it a little more focused for regular use. It has always been on my list of things to understand better, but there&rsquo;s so. much. stuff. to absorb right up front.</p>
<p>If I were designing its UX I would explore a task area picker to cut down on all the visual noise of a fresh install.</p>
<p>&ldquo;Tell me three things you want to do with this tool.&rdquo;</p>
<p>As it is, a ton of the actions it provides are in your face up front and you spend a lot of time trying to find your way back to things if you don&rsquo;t immediately adopt its action search tool or customize heavily.</p>
]]></content:encoded>
    </item>
    <item>
      <title>It sort of has to work on my phone these days. </title>
      <link>https://mike.puddingtime.org/2022-12-26-it-sort-of/</link>
      <pubDate>Mon, 26 Dec 2022 14:28:14 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-26-it-sort-of/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2022/e5eafc7a7f.jpg&#34; alt=&#34;Monochrome. A bunch of tools, some manufactuered and some improvised, hang from a barn wall. &#34; title=&#34;DSCF6299.jpg&#34; border=&#34;0&#34; /&gt;
&lt;p&gt;&lt;a href=&#34;https://borretti.me/article/unbundling-tools-for-thought&#34;&gt;Unbundling Tools for Thought&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Short version:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Tools for thought promise to let you centralize and hyperlink all your data.&lt;/li&gt;
&lt;li&gt;In practice 95% of the use cases can be naturally unbundled into disjoint apps, and the lack of centralization and cross-app hyperlinking has no real negative effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yeah. I especially appreciate his observation about tools like Obsidian, once they become swamped with plugins. It&amp;rsquo;s too much. &amp;ldquo;Stunt productivity.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/e5eafc7a7f.jpg" alt="Monochrome. A bunch of tools, some manufactuered and some improvised, hang from a barn wall. " title="DSCF6299.jpg" border="0" />
<p><a href="https://borretti.me/article/unbundling-tools-for-thought">Unbundling Tools for Thought</a></p>
<blockquote>
<p>Short version:</p>
</blockquote>
<blockquote>
<ul>
<li>Tools for thought promise to let you centralize and hyperlink all your data.</li>
<li>In practice 95% of the use cases can be naturally unbundled into disjoint apps, and the lack of centralization and cross-app hyperlinking has no real negative effects.</li>
</ul>
</blockquote>
<p>Yeah. I especially appreciate his observation about tools like Obsidian, once they become swamped with plugins. It&rsquo;s too much. &ldquo;Stunt productivity.&rdquo;</p>
<p>I have been on this merry-go-round several times and have come to believe that you just don&rsquo;t actually want the all-in-one thing. Clickup, Notion, Obsidian, etc. all want you to put your brain in them. Your brain is better than any of it and doesn&rsquo;t deserve to be crammed into these things.</p>
<p>My perspective has changed over the years on what&rsquo;s acceptable, but basically:</p>
<ul>
<li>
<p>I don&rsquo;t pay much attention to CLI tools anymore. I have a small computer in my pocket that can do a lot, including making text-based interfaces a misery. I don&rsquo;t care if I can open a mosh connection to some box somewhere and do stuff. It&rsquo;s novel, but it&rsquo;s not very productive.</p>
</li>
<li>
<p>If I&rsquo;m going to give in and make &ldquo;decent mobile experience&rdquo; important, it still has to be simple, and I prefer it to run natively across three platforms: laptop/desktop, phone, tablet.</p>
</li>
</ul>
<p>Drafts, Things, Reeder, and DayOne all fit this bill. They run on everything, they sync pretty well, and they present simply. I especially appreciate Things for this because it&rsquo;s possible to make it into a simple list app and live that way, then let it sort of spread out if I need to get a little deeper into planning or organizing. Apple&rsquo;s Reminders is so close, but they have not thought everything through (e.g. the terrible nested tasks UI).</p>
<ul>
<li>I&rsquo;m sorry that iOS/iPadOS sandboxing has exerted so much pull over the direction of Apple automation. The whole URL scheme thing is woeful, leaving you with something that&rsquo;s a baffling, eye-squinting nuisance to figure out on a small screen, and a lot of half-baked &ldquo;what the developer could figure out&rdquo; built-in actions that feel more like a proof of concept than meaningful leverage. A boss of mine once said of something I built, &ldquo;I feel like I should just be impressed the bear can dance and not complain that it isn&rsquo;t dancing very well.&rdquo; I feel that way about iOS automation.</li>
</ul>
<p>On the flip side, I think the app market has been a little salutary because it has forced developers to think about how to pare back and simplify.</p>
<ul>
<li>Things need to be portable. I want them to come out in common formats: Markdown, well-formed HTML, OPML, Taskpaper, etc. I&rsquo;ll even take JSON. Rich text isn&rsquo;t okay.</li>
</ul>
<p>And not a principle, but I am watching iCloud Files. After wondering whether there was a replacement for Evernote for one of my use cases &ndash; dropping receipts, bills, general purpose documents I might want to find again &ndash; I realized I only used two Evernote features: import and search. I never had a folder setup, I never visually browsed. I dropped things in, forgot about them, then searched for them later when I needed them. No subfolders, no elaborate tagging &ndash; just drop it in, forget about it, find it later. Every other use case bounced off me because I didn&rsquo;t want the latency of using Evernote to do the task.</p>
<p>(btw, I noticed Evernote&rsquo;s recent purchaser is a portfolio company with a big AI emphasis. What a useful trove of data they just bought.)</p>
<p>Anyhow, yeah &hellip; I can remember when the whole lifehack thing sort of took off and then settled into GTD, 43Folders, torturing OmniOutliner into a GTD tool until OmniFocus could step in, etc. etc. Any nerd can sit around all day long dreaming up things that would be cool, or occasionally useful, or of infrequent but quirky utility. At some point, the part of design that&rsquo;s about saying &ldquo;okay, enough, this is too much&rdquo; has to step in and simplify.</p>
<p>Ironic, coming from someone who&rsquo;s been using Emacs his entire adult life.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A photo is found; delayed thoughts on the 6 Jun 20 BLM march</title>
      <link>https://mike.puddingtime.org/2022-12-24-a-photo-is/</link>
      <pubDate>Sat, 24 Dec 2022 08:57:39 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-24-a-photo-is/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2022/15a3c9d420.jpg&#34; alt=&#34;Two boys stand on a balcony of their apartment holding Black Lives Matter signs, their fists raised. Others around them are watching the crowd marching below.&#34; title=&#34;DSCF7818-2.jpg&#34; border=&#34;0&#34;  /&gt;
&lt;p&gt;The act of dividing catalogs and using Lightroom to find some missing files triggered a bunch of images popping up in the &amp;ldquo;recent edits&amp;rdquo; list. This is one I thought I had only as a not great monochrome jpeg, so when it turned up as a raw I didn&amp;rsquo;t even know existed, I was pretty happy.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/15a3c9d420.jpg" alt="Two boys stand on a balcony of their apartment holding Black Lives Matter signs, their fists raised. Others around them are watching the crowd marching below." title="DSCF7818-2.jpg" border="0"  />
<p>The act of dividing catalogs and using Lightroom to find some missing files triggered a bunch of images popping up in the &ldquo;recent edits&rdquo; list. This is one I thought I had only as a not great monochrome jpeg, so when it turned up as a raw I didn&rsquo;t even know existed, I was pretty happy.</p>
<p>It&rsquo;s my favorite photo from the 6 June Black Lives Matter march in North Portland. I took hundreds that day. On review later, I realized nothing really unified them. They were pictures taken from inside a crowd. There was no theme and no sense of action.</p>
<p>I do remember walking underneath the balcony in the picture, though, because I was feeling sort of deflated.</p>
<p>When I turn out for marches I don&rsquo;t bring along a sign. The march, to my mind, doesn&rsquo;t need my distinctive commentary, it just needs my body, in a mass, with other bodies. It isn&rsquo;t a conversation so much as it is a statement. Not everyone shares my theory of  marches, though. There is always a contingent that brings some sort of &ldquo;see ME&rdquo; energy along with them. It bums me out a little, especially in a town like Portland where the best intentioned, most earnest voices also demonstrate a knack for ending up being the voice that gets heard and stays heard. The conversation shifts to their particular things: their hangups, their traumas, their particular notion of what is to be done.  The focus often fails to shift back to the marginalized person we should all be listening to. We lose focus on <a href="https://www.thephilosopher1923.org/post/being-in-the-room-privilege-elite-capture-and-epistemic-deference">who is in the room</a></p>
<p>I facilitated ally skills workshops at work for a period, and the thing I appreciated so much about the material we used (from <a href="https://valerieaurora.org">Valerie Aurora</a>, formerly of the Ada Initiative) was its suggestion that there&rsquo;s a sort of humility allies ought to be cultivating. There&rsquo;s a strong thread of &ldquo;don&rsquo;t make it all about you, ally.&rdquo;</p>
<p>That resonates with me. I was raised in a faith traditiont that stressed humility: &ldquo;Do justice, love tenderly, walk humbly.&rdquo;</p>
<p>So I mostly hope those kids thought it was all about them that day.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Photo management blues, but light at the end of the tunnel</title>
      <link>https://mike.puddingtime.org/2022-12-23-photo-management-blues/</link>
      <pubDate>Fri, 23 Dec 2022 17:27:14 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-23-photo-management-blues/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2022/354cf29ed3.jpg&#34; alt=&#34;A grainy, bug-spattered view through the window of a moving car. The main subject is a gigantic sculpture of a steer head with magnificent horns. Cows are in the foreground. &#34; title=&#34;aae.jpg&#34; border=&#34;0&#34; width=&#34;800&#34; height=&#34;600&#34; /&gt;
&lt;p&gt;That’s a picture of a giant steer head taken from the front seat of the U-Haul Al and I moved out here in back in 2001. It is the beginning of my digital photography corpus, more or less. I have a sneaking suspicion this is actually the oldest digital photo I have, taken on a visit to Portland in April of 2001 before deciding to move here from Virginia:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/354cf29ed3.jpg" alt="A grainy, bug-spattered view through the window of a moving car. The main subject is a gigantic sculpture of a steer head with magnificent horns. Cows are in the foreground. " title="aae.jpg" border="0" width="800" height="600" />
<p>That’s a picture of a giant steer head taken from the front seat of the U-Haul Al and I moved out here in back in 2001. It is the beginning of my digital photography corpus, more or less. I have a sneaking suspicion this is actually the oldest digital photo I have, taken on a visit to Portland in April of 2001 before deciding to move here from Virginia:</p>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/a20d2d5c6c.jpg" width="320" height="240" alt="a very grainy, blurry photo of a lit panel in a transit station depicting illustrations of a skunk, a warning stripe, and a snake." />
<p>I took it on the little snap-in camera they made for the <a href="https://mindjack.com/gear/eyemodule.html">Handspring Visor</a>.</p>
<p>Today, whew: 59,351 variably curated digital photos from 2001 to now all sitting in Lightroom.</p>
<p>Now that everything is up in a pair of cloud buckets, I can split out a pre-2014 catalog into its own space.  It&rsquo;s a mostly arbitrary date that includes Ben&rsquo;s first six years then a few lull years where I wasn&rsquo;t taking many pictures. I don&rsquo;t tend to go back into that stuff, and most of it is in Apple Photos where I can go get it easily enough.</p>
<p>I&rsquo;m grateful for the CenturyLink connection. It&rsquo;s working well (🤞🏻through the current weather) and makes it easy to push a lot up into a bucket quickly, and the pre-2014 stuff is pretty lightweight anyhow: Lots of jpegs compared to later years, on sub-10-megapixel sensors.</p>
<p>Anyhow, the plan is:</p>
<ul>
<li>Get that very old stuff into an archival cloud space where it can rest mostly untouched, and a local NAS space where it&rsquo;s there if I want it.</li>
<li>Get that very old stuff out of the active Lightroom instances (the Lightroom Classic catalog, which is only partially in Adobe&rsquo;s cloud, and the Lightroom CC subset, which is a mishmash of originals and &ldquo;actually LrC-only Smart Copies.&rdquo;)</li>
<li>Face down curation of 2018 (6100 images) and 2020 (9750 images).</li>
<li>Take a hand to my Smugmug account. It&rsquo;s a mess. Some by-hand albums, some stuff that was syncing out of LrC but isn&rsquo;t now, some stuff using the bridge in Lightroom.</li>
</ul>
<p><a href="https://www.arqbackup.com">Arq</a> running on the Mac Studio is making all this pretty nice to manage: I&rsquo;ve got my two cloud backup locations plus the NAS set up as endpoints.  I can make backup plans for each of those endpoints and schedule them from one place.</p>
<h3 id="looking-way-ahead">Looking way ahead</h3>
<p>If I can sit still long enough to battle down 2018 and 2020, I&rsquo;ll be closer to where I really want to be, which is more tool agnostic. Adobe&rsquo;s got me in a death grip right now because there&rsquo;s so much ambiguity about what is in its cloud, where the edits are for some images, and how well protected I am from doing something dumb and losing stuff. I gave DXO PhotoLab a try and liked it, but not enough to get me out of Lightroom this year.  Until I can get everything simplified and sane, though, I can&rsquo;t imagine moving to a workflow that doesn&rsquo;t involve someone else managing sync for me.</p>
]]></content:encoded>
    </item>
    <item>
      <title>New Backblaze backups. Next up: Untangle the Two Lightrooms and their woeful syncing situation. </title>
      <link>https://mike.puddingtime.org/2022-12-20-new-backblaze-backups/</link>
      <pubDate>Tue, 20 Dec 2022 14:12:08 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-20-new-backblaze-backups/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m doing my first photo backup to Backblaze B2 over the new CL connection.&lt;/p&gt;
&lt;p&gt;My next project is getting syncing square between Lightroom Classic and Neue Lightroom. I&amp;rsquo;m over this whole &amp;ldquo;sorry, your prized photo exists only as a Smart Preview&amp;rdquo; thing, partially because it&amp;rsquo;s seldom true and I hate the feeling I get every time:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make some edits. 👨🏻‍💻&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Note some banding or other weird artifacts &amp;hellip; try to back out of the edit that might have caused them. ❓&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m doing my first photo backup to Backblaze B2 over the new CL connection.</p>
<p>My next project is getting syncing square between Lightroom Classic and Neue Lightroom. I&rsquo;m over this whole &ldquo;sorry, your prized photo exists only as a Smart Preview&rdquo; thing, partially because it&rsquo;s seldom true and I hate the feeling I get every time:</p>
<ol>
<li>
<p>Make some edits. 👨🏻‍💻</p>
</li>
<li>
<p>Note some banding or other weird artifacts &hellip; try to back out of the edit that might have caused them. ❓</p>
</li>
<li>
<p>Realize the banding is because it&rsquo;s a Smart Preview. 😒</p>
</li>
<li>
<p>Tap the little cloud icon, see that it says the local copy and cloud copies are both Smart Previews. ⁉️</p>
</li>
<li>
<p>Feel a cold wash of terror. 😱</p>
</li>
<li>
<p>Run upstairs to where the physical raws all live, pop open Finder, search on filename, deal with the fact that I have owned maybe eight or nine Fujifilm cameras over the years and never, ever resets the file naming convention (memo to self: go do that) and hence have multiple originals with the same name. 🤦🏻‍♂️</p>
</li>
</ol>
<p>6a. Find the file. Reimport it to local Neue Lightroom (which seems to sometimes say &ldquo;oh, nice, I was wondering where you put that!&rdquo; and other times says &ldquo;hold it you &ndash; this is a duplicate!&rdquo; 😌</p>
<p>6b. Don&rsquo;t find the file. Halfheartedly search around for it in a few little stashes I&rsquo;ve got but come to grips with the fact that some things slipped through the cracks during numerous tool changes in the years before I finally just stuck with Lightroom. 😭</p>
<p>6c. Find it as a jpeg. That I did in monochrome. 🤦🏻‍♂️</p>
<p>I think the whole reason for this is not thinking hard about how sync was supposed to work between Lightroom Classic and Neue Lightroom back when the split happened. 👨🏻‍🏫</p>
<p>Anyhow, off we go.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Aspire to helpfulness</title>
      <link>https://mike.puddingtime.org/2022-12-19-aspire-to-helpfulness/</link>
      <pubDate>Mon, 19 Dec 2022 20:53:04 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-19-aspire-to-helpfulness/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/29cf7a7f01.jpg&#34; alt=&#34;iPhone screenshot of the app Tot with the txt Here&amp;rsquo;s a link to share for people  who aren&amp;rsquo;t sure how to do a good image description:
{link text &amp;ndash; sorry &amp;ndash; can&amp;rsquo;t put it in alt text without causing problems }
It can be pretty simple, and something is better than nothing, but after a day of research this one seemed like the best distillation of all the guidance I read.&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://its.puddingtime.org/uploads/2022/29cf7a7f01.jpg" alt="iPhone screenshot of the app Tot with the txt Here&rsquo;s a link to share for people  who aren&rsquo;t sure how to do a good image description:
{link text &ndash; sorry &ndash; can&rsquo;t put it in alt text without causing problems }
It can be pretty simple, and something is better than nothing, but after a day of research this one seemed like the best distillation of all the guidance I read."></p>
<p>I brought Tot back so I could have a universal place to copy my pointer when people toot about remembering to use alt text.</p>
<p>The kindest thing I think I can say to any other ally is that we should be helpful when we can. If you don’t have the wherewithal to do anything more than issues corrections, okay, but if you <em>can</em> it’s worth considering pointing people to a resource or a hint. The world is full of conflicting, contradictory information. If you have a resource that shortens someone else’s learning time (or spares them a trip through popular but less useful information),  share!</p>
]]></content:encoded>
    </item>
    <item>
      <title>I finally un-collapsed Lightroom&#39;s B&amp;W mixer</title>
      <link>https://mike.puddingtime.org/2022-12-19-i-finally-uncollapsed/</link>
      <pubDate>Mon, 19 Dec 2022 17:23:57 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-19-i-finally-uncollapsed/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2022/566580326b.jpg&#34; alt=&#34;Four images of a street scene side by side. The first is unretiuched, the second shows more vibrant colors and tighter cropping, the third shows unretouched black and white with harsh whites, the fourth shows black and white using the remixer for more even tones and less harshness&#34; title=&#34;luclacside.jpeg&#34; border=&#34;0&#34; width=&#34;800&#34; height=&#34;300&#34; /&gt;
&lt;p&gt;I accidentally learned how to use Lightroom&amp;rsquo;s black and white mixer over the weekend. I&amp;rsquo;ve spent a while at the mercy of monochrome presets and film simulations, many of which offer red/yellow/green/blue/orange filter variants, but I&amp;rsquo;d still get frustrated with their limitations and didn&amp;rsquo;t understand them very well. There&amp;rsquo;s a particular look that I sometimes stumble into when conditions are right, and I like it when I see it, but I&amp;rsquo;d never really stopped to figure out what was going on.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/566580326b.jpg" alt="Four images of a street scene side by side. The first is unretiuched, the second shows more vibrant colors and tighter cropping, the third shows unretouched black and white with harsh whites, the fourth shows black and white using the remixer for more even tones and less harshness" title="luclacside.jpeg" border="0" width="800" height="300" />
<p>I accidentally learned how to use Lightroom&rsquo;s black and white mixer over the weekend. I&rsquo;ve spent a while at the mercy of monochrome presets and film simulations, many of which offer red/yellow/green/blue/orange filter variants, but I&rsquo;d still get frustrated with their limitations and didn&rsquo;t understand them very well. There&rsquo;s a particular look that I sometimes stumble into when conditions are right, and I like it when I see it, but I&rsquo;d never really stopped to figure out what was going on.</p>
<p>I collapsed the B&amp;W mixer settings a long time ago and never opened them back up, but in the process of going through some old photos I kept getting frustrated with what I thought I saw and what I was getting, so opened the panel back up, grabbed a slider, and moved it around to see what happened (which is basically &ldquo;make a selected color&rsquo;s corresponding monochrome shade get brighter or darker&rdquo;). It&rsquo;s funny that it took me this long, because I&rsquo;ve been using the corresponding color mixer for years to get little pops of color to show up better, or to tone things down when the camera and I didn&rsquo;t agree on a tone.</p>
<p>Anyhow, this makes pictures that&rsquo;d be sort of listless as black and whites a lot more vibrant and true when used in combination with the other tone settings (shadow, black, highlight, white).  It&rsquo;s nice to have a little more control in the digital darkroom.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A small slip on digitial minimalization</title>
      <link>https://mike.puddingtime.org/2022-12-19-a-small-slip/</link>
      <pubDate>Mon, 19 Dec 2022 08:28:49 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-19-a-small-slip/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2022/1aca9578fe.jpg&#34; alt=&#34;Street scene of Powell&amp;#39;s Books at twilight. The marquee reads &amp;quot;Stay well and well read.&amp;quot; &#34; title=&#34;DSCF0114.jpg&#34; border=&#34;0&#34; width=&#34;798&#34; height=&#34;532&#34; /&gt;
&lt;p&gt;Earlier this year I did the Digital Minimalism thing and pared back a lot of tech stuff then layered it back in. That was a great one-time thing. The real usefulness of the practice has come from being more deliberate about new stuff that wants to come in, and the reasons for doing it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/1aca9578fe.jpg" alt="Street scene of Powell&#39;s Books at twilight. The marquee reads &quot;Stay well and well read.&quot; " title="DSCF0114.jpg" border="0" width="798" height="532" />
<p>Earlier this year I did the Digital Minimalism thing and pared back a lot of tech stuff then layered it back in. That was a great one-time thing. The real usefulness of the practice has come from being more deliberate about new stuff that wants to come in, and the reasons for doing it.</p>
<p>For instance, there&rsquo;s a resurgence in interest around RSS and I found <a href="https://ooh.directory">ooh directory</a>. Since I do a ton of RSS reading on my iPad, having a simple way to subscribe to a site would be nice, but there&rsquo;s an unfortunate gap in tools that let you subscribe to a feed quickly. My day-to-day RSS reader, <a href="https://reederapp.com">Reeder</a> does it on the Mac, but not on iPad.</p>
<p>I mentioned the gap and a few people pointed out NetNewsWire, which does have RSS subscriptions via the iOS share sheet. I used to love NNW, so I installed it and tried it out and for how I use RSS, it&rsquo;s as good as Reeder &hellip; almost.</p>
<p>Reeder also has a built-in, iCloud-based &ldquo;read it later&rdquo; service. During my digital declutter I decided to start using Reeder because it let me set aside Pocket, Instapaper, and other RiL contenders and just consolidate in a single app. I remember the thought process because another part of my declutter and ongoing practice is to write about tools I&rsquo;m interested in and to document the reason I have the tools I do now.</p>
<p>But I slipped a little this time because I&rsquo;ve got plenty of time on my hands and like to play with new tools, so because I was fiddling with NetNewsWire and that meant I needed a new RIL service, I looked at ReadWise&rsquo;s new Reader which &hellip; ohhh &hellip; it does RSS! What if I imported everything into there and &hellip;</p>
<p>That&rsquo;s when I remembered I&rsquo;d made a commitment to not do that:</p>
<p>The utility from RSS readers, read-it-later services and bookmarking services isn&rsquo;t to further the diversity of tools I use, it&rsquo;s to further something that is important to me, which is reading. Day-to-day, week-to-week, month-to-month, it is more important to me to spend time reading than it is to spend time playing around with tools about reading.</p>
<p>I even plumbed something in to deal with the urge to play with tools, which is a list of tools to evaluate that I keep in Things for review every month or so. So NetNewsWire is going in there, as is Readwise. They&rsquo;ll still be there in a month, and I have some reading I want to get done.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Living with Twitter is living with humans</title>
      <link>https://mike.puddingtime.org/2022-12-14-living-with-twitter/</link>
      <pubDate>Wed, 14 Dec 2022 11:53:32 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-14-living-with-twitter/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2022/7caa8b2abf.jpg&#34; alt=&#34;A mess of cigarette butts, a used paper cup and crumpled cigarette packs fill the frame&#34; title=&#34;DSCF3065.jpg&#34; border=&#34;0&#34; width=&#34;800&#34; height=&#34;533&#34; /&gt;
&lt;p&gt;Over the past few months, as the Twitter thing has unfolded, I&amp;rsquo;ve seen a few things go by and thought a few thoughts:&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve long thought most people are only half right about the terrible parts of Twitter: Yes, it&amp;rsquo;s a site where a lot of abuse and harassment goes on, but it has also developed and cultivated a collectively noxious style of discourse that has spared almost nobody. People don&amp;rsquo;t acknowledge that as much, but then there&amp;rsquo;s a lot of everyday interpersonal violence people don&amp;rsquo;t acknowledge because they&amp;rsquo;ve rationalized the need for it. If you&amp;rsquo;ve ever had a group of work friends go toxic around the break room table, and then slowly felt more and more queasy from the negativity, gossip, and judgment, you know the dynamic writ small.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/7caa8b2abf.jpg" alt="A mess of cigarette butts, a used paper cup and crumpled cigarette packs fill the frame" title="DSCF3065.jpg" border="0" width="800" height="533" />
<p>Over the past few months, as the Twitter thing has unfolded, I&rsquo;ve seen a few things go by and thought a few thoughts:</p>
<p>I&rsquo;ve long thought most people are only half right about the terrible parts of Twitter: Yes, it&rsquo;s a site where a lot of abuse and harassment goes on, but it has also developed and cultivated a collectively noxious style of discourse that has spared almost nobody. People don&rsquo;t acknowledge that as much, but then there&rsquo;s a lot of everyday interpersonal violence people don&rsquo;t acknowledge because they&rsquo;ve rationalized the need for it. If you&rsquo;ve ever had a group of work friends go toxic around the break room table, and then slowly felt more and more queasy from the negativity, gossip, and judgment, you know the dynamic writ small.</p>
<p>On the scale of three to eight people, it&rsquo;s possible for someone with a little standing to say &ldquo;this doesn&rsquo;t feel good&rdquo; and <em>possibly</em> arrest the dynamic. On a global scale? No. Planetary volumes of toothpaste cannot be shifted back into the orbiting tube. Twitter is going to remain a reductive hellhole that contributes to increasing levels of rhetorical violence (whether it&rsquo;s defensively or offensively motivated) until membership plummets, moderation is radically changed to reflect values antithetical to the dominant user base, or it simply shuts down.</p>
<p>There was this brief, &ldquo;snow day apocalypse&rdquo; mood sweeping the service and it was interesting/cool to see people turning up on Mastodon and just generally processing what they didn&rsquo;t like about the damn place. I was briefly one of the people trying to help overturn the burning car in the best spirit of a riotous holiday.</p>
<p>That apocalypic mood has since spawned a style of Twitter-related discourse that involves hectoring, scolding, and sometimes likening people who choose to remain on Twitter to Jews staying in Europe in 1938, or Nazi collaborators. That makes sense, because Twitter is a reduction machine.</p>
<p>Seeing enough of that, I felt a little remorse for intermittent scolding over the years. I&rsquo;ve long thought positioning Twitter as some site of revolutionary struggle was self-mythologizing garbage for people who don&rsquo;t really do much, so turnabout is fair play: It&rsquo;s not going to destroy the world, and it is not a world-historical struggle to call Elon Musk &ldquo;elno&rdquo; and post dire &ldquo;surely this&rdquo; pronouncements every time an employee leaks a memo with a typo in it.</p>
<p>In fact, I&rsquo;m coming to believe Twitter is no more and no less than a mirror, and a lot of us hate it because we don&rsquo;t like what we see, because we want to believe in some perfectable human state where ignorance, hypocrisy, venality, and hatred are either purged from the collective self, or the carriers of those things are finally, once and for all &hellip; driven out? Beaten?</p>
<p>But even in Edenic Mastodon, people are aligning around new struggles. Whether or not there is such a thing as a &ldquo;quote toot&rdquo; is enough to reduce people to name-calling (&ldquo;mid-brain&rdquo;, &ldquo;moron&rdquo;, &ldquo;racist&rdquo; and &ldquo;violent&rdquo; have been deployed against the developers) and it seems pretty clear that given enough people and scale, we&rsquo;ll be back where we are whenever there&rsquo;s any suitable number of people in a confined volume: Shouting to be heard, making our arguments simpler and more extreme to stand out, becoming increasingly violent in our communications as we sense others rushing to the poles, making us feel threatened that there are too many of the wrong kind of person running in the wrong direction.</p>
<p>But, you know, who am I? When I feel myself being provoked to more anger and less thoughtfulness I eventually go away for a while until I can get some balance again, but never before I&rsquo;ve indugled a little smallness and anger.  I have my set of things I think are important and meaningful. I do what I can to keep the energy I need to do them. That comes at a cost to other things I&rsquo;m not as good at doing as I used to be, when I had a less clear sense of what mattered to me and all sorts of claims to my attention and time seemed equivalent.</p>
<p>Do I wish more people shared them with me? Sure. I once worked with someone who was very, very good at simply setting aside the things she couldn&rsquo;t hope to change and for a few years thought she was callous and indifferent. It took a while, and a collection of stories from people around her to understand the ways in which she held so many people up and carried them when they couldn&rsquo;t help themslves. I came to understand that what I thought of as indifference was actually a kind of self-governance. She knew her priorities and knew how many hours in a day she had to support them.</p>
<p>So when I think of some of the people who frustrate me the worst for being <em>so good</em> and yet <em>so oblivious</em>, I try to remind myself that they&rsquo;re quietly trying to conserve energy for the things that matter to them. They&rsquo;re doing their best, same as I&rsquo;m doing my best. We&rsquo;re all collectively struggling with the imperfections of the world, trying to figure out how to keep going from day to day, trying to figure out where we can best shine a little light or make things a little better. The best of all worlds might be one where we resist the urge to make extravagant claims of each other, share what we see and believe, and accept that the people around us can only do so much, only have so much to give, and are also picking their battles.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Just let me shoot revisited, revisited</title>
      <link>https://mike.puddingtime.org/2022-12-13-just-let-me/</link>
      <pubDate>Tue, 13 Dec 2022 11:17:02 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-13-just-let-me/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://its.puddingtime.org/uploads/2022/a2a41604e8.jpg&#34; alt=&#34;a sandy yellow hat draped over a piece of flat metal shaped like a porpoise&#34; title=&#34;DSCF5308-2.jpg&#34; border=&#34;0&#34; width=&#34;800&#34; height=&#34;533&#34; /&gt;
&lt;p&gt;That is a picture of a sandy yellow hat draped over a piece of flat metal shaped like a porpoise, and it is as close to &amp;ldquo;reality&amp;rdquo; as I think the Fujifilm X-T4 is capable of making things. It almost makes me uncomfortable, and the act of zeeing out the adjustments I made when I imported it felt very strange. It is just a picture of a pretty mundane thing on a gray day, taken with a camera that was instructed to do next to nothing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://its.puddingtime.org/uploads/2022/a2a41604e8.jpg" alt="a sandy yellow hat draped over a piece of flat metal shaped like a porpoise" title="DSCF5308-2.jpg" border="0" width="800" height="533" />
<p>That is a picture of a sandy yellow hat draped over a piece of flat metal shaped like a porpoise, and it is as close to &ldquo;reality&rdquo; as I think the Fujifilm X-T4 is capable of making things. It almost makes me uncomfortable, and the act of zeeing out the adjustments I made when I imported it felt very strange. It is just a picture of a pretty mundane thing on a gray day, taken with a camera that was instructed to do next to nothing.</p>
<p>We took a trip to Manzanita over the weekend. It was pretty blustery and misty, so I took to fiddling around with things a little, still trying to see how the <a href="https://its.puddingtime.org/2022/11/25/just-let-me.html">workflow I&rsquo;ve been working on</a> would hold up, and the answer was sort of what I suspected, which was &ldquo;not well.&rdquo;</p>
<p>My initial set wasn&rsquo;t great, and I could tell it wasn&rsquo;t great while I was doing it. That made having a mess of jpegs and raws to sort through and choke the hotel Wi-Fi bandwidth irritating. I was also fussing around with the auto-exposure lock (AEL) stuff, when it dawned on me that the settings I was using were sort of pre-moody and making it hard to get a fix on metering.</p>
<p>So, when in doubt, swing the other direction:</p>
<p>I&rsquo;ve never, ever used Fujifilm&rsquo;s Pro Neg Standard simulation. Its purpose in life seems to be utterly disinterested in one of the Fujifilm value props, which is that collection of film simulations they add to with each new body release (and which they seem to have stopped including in firmware updates for older models). Even Provia sort of pops compared to it. But I was sitting in the room waiting for the worst of the blowing rain to end, fiddling around, and as I was cycling through the different settings briefly landed on Pro Neg Standard and was struck in what is perhaps the <em>right</em> way to see it: Shadows were a little less severe, things seemed just &hellip; neutral. Even.</p>
<p>So I spent the rest of the weekend using that as my shooting simulation, and it shifted my sense of post work from &ldquo;I&rsquo;m going to wrestle with this one simulation&rdquo; to &ldquo;I&rsquo;m going to build off this foundation.&rdquo; Starting &ldquo;clean&rdquo; made it easier to see what each simulation brought during post, made it easier to discern the changes in tones and shades, and gave me slightly better exposure to work with because I wasn&rsquo;t fighting the crushed shadows of the Fujifilm simulation palette. It felt more like layering on, I suppose, as opposed to the hacking off of presets I&rsquo;ve made that try to get me closer to where I think I want to go.</p>
<p>That caused me to look at a few other things.</p>
<p>I&rsquo;ve always felt hesitant to just &ldquo;go raw&rdquo; because it leaves some of that &ldquo;great jpegs straight out of the camera&rdquo; value Fujifilm provides on the table. I&rsquo;ve always tried to build presets that preserve some of that value. But as I spent the weekend capturing fairly neutral images, I realized how much stuff I had going on in the camera&rsquo;s rear screen (&ldquo;Q&rdquo;) menu. It has all the stuff I like to fiddle with to get my presets dialed in: film simulation, shadow/highlight tone, color, sharpness, the two color chrome settings, and more. But out in the field and on a tiny LCD is the worst place in the world to experiment with that stuff.</p>
<p>So I also stripped my Q menu from 16 items down to eight: two of them are things I use infrequently (flash, timer), two I use more often (face/eye detect, white balance), two are ergonomic things (AF type, photometry), and one has an actual impact on raw exposures: dynamic range. The eighth is the preset selector, which I could probably discard; maybe I&rsquo;d put dynamic range priority in its place.</p>
<p>My &ldquo;could go back to doing jpegs&rdquo; fallback are the two hardware buttons I&rsquo;ve mapped:</p>
<ul>
<li>d-pad left picks presets</li>
<li>d-pad right picks film simulations</li>
</ul>
<p>The use cases for those two are something I&rsquo;ve done now and then in the past:</p>
<p>I have a few presets that I think of as sort of &ldquo;primitivist.&rdquo; They&rsquo;re sort of extreme and I like to use them for &ldquo;mood shooting.&rdquo; I headphone up and take pictures and make myself live with whatever I get.  And sometimes I like to shoot in monochrome because the preview makes shapes and patterns pop a little more as I&rsquo;m composing.</p>
<p>This is all something I really love about Fujifilm&rsquo;s cameras in general: It&rsquo;s so easy to tailor the shooting experience. With the two bodies I have &ndash; the X-Pro3 and X-T4 &ndash; the X-Pro3 was marketed as the &ldquo;distraction-free&rdquo; model, with the no-chimping rear LCD. It&rsquo;s still reflective of my in-camera preset preferences, though, and feels a little more cluttered than the leaned-out X-T4 configuration. I&rsquo;m looking forward to stripping the X-Pro3 down and seeing what it feels like with the hybrid optical viewfinder and a prominent histogram.</p>
<h2 id="what-is-film-like-what-is-digital">What is film-like, what is digital?</h2>
<p>I&rsquo;ve really enjoyed being on Mastodon in the past couple of months because I&rsquo;ve found a lot of photographers to follow, and I&rsquo;ve been letting myself sit with a bunch of different styles. I love the ultra-clean landscape people, enjoy the eclectic experimenters who push hard on what digital lets them do, I appreciate the wildlife perfectionists, and I&rsquo;ve been watching a few strains of &ldquo;film-like&rdquo; thinking.</p>
<p>There&rsquo;s one school of thought that leans heavily into saturation, low dynamic range, detail loss. There&rsquo;s another that&rsquo;s very clean, even, and a little muted. Both are &ldquo;film-like,&rdquo; but after a weekend of shooting with a very stripped down setup that attempts to remove as much digital mediation as possible during capture, then layering film simulations and stylizations on top, I began to think about what &ldquo;film-like&rdquo; even means. I went to some photo albums (actual ones) and a shoebox of prints from over the years. Everything from muddy little 126 exposures on a camera I kept in a spare ammo pouch to muted, low-contrast stuff my grandfather took with an old rangefinder to sharp, vibrant prints I had from a heavily automated Pentax I had in 2002. Black and white Polaroids, color Polaroids, a pinhole camera I had when I was six.</p>
<p>I&rsquo;m coming to believe &ldquo;film-like&rdquo; is as much a sort of oral history or game of telephone as it is a remembrance of an actual thing.</p>
<p>I don&rsquo;t say that in judgment or dismissively. It&rsquo;s just an aesthetic, sort of like neo-noirs, which re-created the conventions of the noir era after the culture had moved on around it. When I come across the film-like stylists as I scroll down my timeline, I enjoy the evocative twinge their work provokes as much as anything, maybe even more than the razor-perfect wildlife shots or inconceivably even, digitally augmented landscapes.</p>
<h2 id="what-is-it-youd-say-you-actually-do">What is it you&rsquo;d say you actually do?</h2>
<p>I&rsquo;m enjoying the time I have right now to play around with all this stuff. I don&rsquo;t know if I have any writing in me about what&rsquo;s going on in my head during this current period, and suspect that just belongs in a journal, but I will say that having the time and space to think about these things and try different things out from day-to-day instead of hoarding my time is immensely restful and restorative. I haven&rsquo;t been happier in a long while.</p>
]]></content:encoded>
    </item>
    <item>
      <title>DXO FilmLab and Lightroom compared by a normie</title>
      <link>https://mike.puddingtime.org/2022-12-08-dxo-filmlab-and/</link>
      <pubDate>Thu, 08 Dec 2022 17:43:39 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-08-dxo-filmlab-and/</guid>
      <description>&lt;p&gt;Today I finally took the time to sit down and round-trip a few Fujifilm raw files through DXO and Lightroom. Fuji stuff is of special interest to me because X-Trans sensors pose some challenges to raw converters, and I&amp;rsquo;ve long heard CaptureOne and DXO PhotoLab generally handle FujiFilm better than Adobe Camera Raw (ACR).&lt;/p&gt;
&lt;h2 id=&#34;pros--cons&#34;&gt;Pros &amp;amp; Cons&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been trying to get my photography workflow into something that is probably trying to balance too many concerns, but:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today I finally took the time to sit down and round-trip a few Fujifilm raw files through DXO and Lightroom. Fuji stuff is of special interest to me because X-Trans sensors pose some challenges to raw converters, and I&rsquo;ve long heard CaptureOne and DXO PhotoLab generally handle FujiFilm better than Adobe Camera Raw (ACR).</p>
<h2 id="pros--cons">Pros &amp; Cons</h2>
<p>I&rsquo;ve been trying to get my photography workflow into something that is probably trying to balance too many concerns, but:</p>
<ul>
<li>
<p>I like the versatility of Lightroom Classic. It&rsquo;s able to publish to a bunch of different places and there&rsquo;s a robust plugin ecosystem. Cons: Slow, wants to think of the world as files on a platter.</p>
</li>
<li>
<p>I like the convenience of Neue Lightroom. It&rsquo;s nice to be able to do little edits on a tablet and it generally feels more responsive. Cons: Not nearly as versatile as Lightroom Classic.</p>
</li>
<li>
<p>I don&rsquo;t like how all-in on cloud stuff Neue Lightroom is, meaning it is very disconcerting when I go to export a file and get a message telling me that all it has is a Smart Preview and that the image might possibly be in Lightroom Classic. I don&rsquo;t understand what went wrong that caused the original DNG or raw file to go missing.</p>
</li>
</ul>
<p>I think some of that last point is probably just the effects of over 20 years of digital images I&rsquo;ve schlepped between no system at all, multiple generations of Apple software, multiple editions of Lightroom, and some other stuff I&rsquo;ve forgotten about. It was &ldquo;sorry, Smart Preview only&rdquo; messages appearing one too many times that got me to think I&rsquo;d better go deep and solve this now.</p>
<p>So, I shuffled a few raw files through DXO PhotoLab and then Lightroom and put them up side-by-side.</p>
<h2 id="comparisons">Comparisons</h2>
<p>DXO seems to capture more fine detail, and its three contrast controls (micro-contrast, contrast, fine contrast if you have their FilmPack) provide the ability to bring out even more. In fact, maybe there&rsquo;s an issue with the ratio of control input to image results: A few times I realized things looked superficially good as I was working with them, but once I walked away, did some other stuff, and came back, the images looked &hellip; crispy. Easy enough to dial back, but I think it happened at all because &hellip;</p>
<p>Lightroom captures slightly less fine detail, and its three contrast controls (contrast, clarity, texture) are able to bring out more, but they feel a little nerfed. The ratio of control input to image results is less extreme than DXO&rsquo;s. Over the years I&rsquo;ve come to be okay with making &ldquo;quick punch&rdquo; presets that assume a setting of &ldquo;20&rdquo; is a safe bet, with space to go to &ldquo;40&rdquo; or so before starting to get that weird Clarity Halo.</p>
<p>DXO&rsquo;s distortion and perspective controls are better than Lightrooms, and the overall medley of fixing distortion and perspective and the crop smartly adapting to each as you tune them is a nice DXO feature.</p>
<p>I appreciate that Adobe understands all of Fujifilm&rsquo;s film simulations and makes them available as profiles. DXO does not, as near as I can tell, do that. It understands the profile you took a raw image with, but it doesn&rsquo;t make all the simulations available on the body avaialable in post. Maybe that&rsquo;s because &hellip;</p>
<p>DXO sells a &ldquo;FilmPack&rdquo; product that provides its own take on &ldquo;Digital Films,&rdquo; including most of the FujiFilm ones (Astia, Velvia, Acros + filter variants, etc. etc.) It&rsquo;s an additional cost.</p>
<p>So those are the comparisons.</p>
<p>When it came to actually working with the images side by side it was pretty easy to get the ACR-decoded raw into a place that was, well, fine? Fine for my purposes?</p>
<p>I don&rsquo;t think color rendering was hugely different between the two. I did think DXO&rsquo;s version of a few Fujifilm simulations was a little overstated, but that&rsquo;s because their FilmPack product is more explicitly about recreating a film look vs. FujiFilm, which has always felt a little more dialed into the idea of bringing the color qualities of certain filmstock over while keeping a certain level of digital dynamism in the mix. You can do some stuff with in-camera controls to get things into a more &ldquo;filmy&rdquo; state, but it takes work and doesn&rsquo;t come over in the raws anyhow: Only confident jpeg shooters need apply.</p>
<p>Lately I have been going back through stuff I&rsquo;ve shot and processed and I&rsquo;ve felt some of it is overbaked. I&rsquo;ve experimented with dialing back some stuff to see what I think, and often prefer it when the edits are done with a lighter touch. So, DXO&rsquo;s &ldquo;recreate the look of these classic vintage films&rdquo; isn&rsquo;t playing great with me right now, especially when it&rsquo;s a $200 premium <em>on top of</em> the cost of FilmLab: Lightroom just makes them available to me in a way that is more inline with how they work for SooC jpegs with reasonably neutral tone and dynamic range settings.</p>
<p>I guess it&rsquo;s worth mentioning that where the contrast controls are easy to oversteer in DXO FilmLab, the color controls (saturation and vibrance) are a little more in-line with my Lightroom experience. A little goes a long way with both. I seldom venture north of &ldquo;10&rdquo; on saturation or &ldquo;20&rdquo; on vibrance.</p>
<h2 id="dxo-in-particular">DXO in particular</h2>
<p>DXO works as a standalone app or as a Lightroom Classic plugin. It&rsquo;s pretty easy to shuffle something out of LRC, into DXO, then back into LRC. You can choose to send over all your edits or just the basic raw processing stuff (perspective, distortion, noise control), though at that point they have a less expensive raw converter option.</p>
<p>There&rsquo;s a lot to like in DXO FilmLab, but with the amount of sharpening and contrast power, I also felt like I was on the hook for a lot more pixel-peeping and scrutiny before commiting, because sometimes the net result felt crispy and overdone. It was much easier to create a sort of digital harshness that I don&rsquo;t want to manage or be on the lookout for. And the nice thing about all these non-destructive tools is that if I ever do get to a place where I want DXO levels of control, I can buy it then. For now, I&rsquo;m at a point on the post-production pendulum where I don&rsquo;t mind a little more softness, less digital ultra-sharpness, and less of a simulated film look.</p>
<h2 id="so-">So &hellip;</h2>
<p>Probably good to be setting DXO aside for now. It will keep my workflow simpler, and I can go back to focusing on how to best get all the pieces of my Lightroom workflow on the DAM side working a little more predictably.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Exposure therapy revisited, or: A personal practice for tolerating awesome</title>
      <link>https://mike.puddingtime.org/2022-12-03-exposure-therapy-revisited/</link>
      <pubDate>Sat, 03 Dec 2022 00:21:52 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-12-03-exposure-therapy-revisited/</guid>
      <description>&lt;p&gt;Almost 12 years ago I wrote up a few thoughts about a morning routine I’d adopted to help me deal with some creative and personal insecurity. I called it “exposure therapy,” and it was just an active practice of looking at photographs, understanding a lot of them would be better than the ones I was taking. I stuck to it for a while until something broke up the way I organized my mornings. I kept at the habit of at least looking at pictures a few times a week, but at some point I stopped doing that and just started reading blog posts about photography. I stopped thinking about the images and started just … thinking.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Almost 12 years ago I wrote up a few thoughts about a morning routine I’d adopted to help me deal with some creative and personal insecurity. I called it “exposure therapy,” and it was just an active practice of looking at photographs, understanding a lot of them would be better than the ones I was taking. I stuck to it for a while until something broke up the way I organized my mornings. I kept at the habit of at least looking at pictures a few times a week, but at some point I stopped doing that and just started reading blog posts about photography. I stopped thinking about the images and started just … thinking.</p>
<p>Over the past month, away from work, I’ve been thinking about that routine. I’ve had more time to play around with cameras, pictures, and tools, and I’ve thought a lot about assorted technical aspects of picture-taking, but I’ve not really done anything to prime my creative pump. Worse, there’s a small part of me I have to own who is properly wondering what he’s supposed to be up to, what he should be expecting for himself, and what he should aspire to. I am so immensely grateful for the circumstances I am in, because I can sit with these things, ride them out, find new reasons to rediscover a kind of optimism I used to have in so much supply. And I have space to deal with the sense some days that I fell through a wormhole ten years ago, had some interesting adventures, and now am out the other side needing to take inventory about what happened to the <em>me</em> who tumbled in.</p>
<p>Thinking back to that morning routine, I remember the feeling I had when I’d see something go by that was just … awesome. After enough times it was sort of like a sunlight therapy lamp: Enough exposure and my sense of personal energy and creative restlessness would go up and I’d want to get out there and do it myself.</p>
<p>With the big Twitter flap and the sudden surge in Mastodon people, I’ve been trying to follow photographers as they turn up so I can build a list. Tonight, though, I also opened up a new Flipboard account because it really is a wonderful way to browse pictures from assorted feeds, and I imagine I can turn my assorted social media photography feeds into a Flipboard magazine.</p>
<p>Anyhow, here’s the post. I appreciate the me who wrote it. He was dealing with some stuff and it was really, really hard to just sit there and be overwhelmed by how much goodness there is out there, but he pulled it together and made himself stare into it.</p>
<hr>
<p><em>March 23, 2011</em></p>
<p><img src="https://its.puddingtime.org/uploads/2022/9e8694548d.jpg" alt="" title="Screenshot of some flickr favorites on iPad, ca. 2011"></p>
<p>I read a short bit a few weeks ago titled <a href="https://zenhabits.net/unline/">A Simple Guide for a Mindful Digital Life</a>, and it offered some suggestions that resonated with me, along with a few that would not be practical for a good many people. I recommend it, though, because I like the author&rsquo;s take on ownership of online presence. One thing that came of trying a few of his recommendations was a modification to my morning reading routine.</p>
<p>Over the past year, my iPad has become my morning paper. I like to get up a little early and sit by the fire reading the things I consider interesting but disposable. I use Flipboard and Twitter lists to skim through the things with which I&rsquo;d like to have headline-level familiarity.</p>
<p>I like the morning skim because I don&rsquo;t have to place any weight on anything I read there. Sometimes I bookmark useful things for later, but it&rsquo;s the only time of the day I&rsquo;ve got that I consider solely mine. After it&rsquo;s over, my time stops being just mine for long stretches.</p>
<p>One neat thing Flipboard offers is support for Flickr as a &ldquo;digital magazine.&rdquo; You can subscribe to your own Flickr stream, those of your friends, your own favorites or (and this is the part I really like) the <a href="http://www.flickr.com/explore/interesting/">flickr “interestingness” feed</a>.</p>
<p>Flickr&rsquo;s always been a little hard for me the same way the rest of the Internet can be a little hard for me. There&rsquo;s just so much good stuff going on, so many people being completely amazing, and so many things that seem almost casually wonderful that it makes ever <strong>doing</strong> anything hard. To paraphrase Theoden, who can stand against such reckless awesomeness? Why even get out of bed, because if it hasn&rsquo;t been done, it&rsquo;s in the process of being done and probably in the form of a multi-year project with incredible JavaScript transition effects.</p>
<p>That&rsquo;s harmful thinking on a few levels:</p>
<ul>
<li>You never end up doing anything.</li>
<li>Other people have an easier time telling you your limits.</li>
<li>After a while, it makes you crabby about everything, because crabbiness blunts the sheer radiance of all the random awesomeness going on, making it easier to live with.</li>
</ul>
<p>So Flickr&rsquo;s been hard, because it’s full of great photographers , and the Interestingness feed pulls in a lot of their work.</p>
<p>It occurred to me a few days ago, however, that maybe the thing to do would be to just dive into that pool of greatness, so I modified my morning routine a little by tweaking Flipboard. I pushed a lot of the lists about Facts and Things to the second page, and I filled the front page with interesting photography feeds. First in line is the Flickr Interestingness feed. I&rsquo;ve been flipping through it each morning and marking a few of the pictures I see as favorites (another nice thing Flipboard lets you do). I&rsquo;m trying to treat it as a mindless exercise, something done without a lot of reasoning, because I think doing it that way allows me to silence the inner critic for others, which makes it easier to silence the inner critic for me.</p>
<p>I try to stop thinking about the things I used to think about: Is this image overprocessed, did the photographer go too far with the sharpening, is the image correct, is the underlying sentiment hackneyed, and on and on. I try to just like stuff. Sometimes, though, I see a picture that achieves something I once tried and failed to pull off, so I favorite that for when I can circle back later, when I&rsquo;m in a better frame of mind, and consider the things that will help me take better pictures.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Some things I learned about alt text, and some complications</title>
      <link>https://mike.puddingtime.org/2022-11-30-some-things-i/</link>
      <pubDate>Wed, 30 Nov 2022 17:27:37 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-30-some-things-i/</guid>
      <description>&lt;p&gt;My long-dormant technical writer impulses kicked in a few days ago and I began to wonder about alt tags and how to write them well. I posted a request for documentation, then did a little reading on my own.&lt;/p&gt;
&lt;p&gt;Before going any further, I&amp;rsquo;ll just say that the most useful, concise, actionable content came from &lt;a href=&#34;https://uxdesign.cc/how-to-write-an-image-description-2f30d3bf5546&#34;&gt;a post by Alex Chen&lt;/a&gt;, a designer, and I will be using their approach as a practical day-to-day guide to iterate on.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>My long-dormant technical writer impulses kicked in a few days ago and I began to wonder about alt tags and how to write them well. I posted a request for documentation, then did a little reading on my own.</p>
<p>Before going any further, I&rsquo;ll just say that the most useful, concise, actionable content came from <a href="https://uxdesign.cc/how-to-write-an-image-description-2f30d3bf5546">a post by Alex Chen</a>, a designer, and I will be using their approach as a practical day-to-day guide to iterate on.</p>
<p>I also got a little pushback from someone on the idea that an alt tag needs to be done any certain way and was advised to &ldquo;just write them&rdquo; same as if I was talking to a friend. If there were no advice anywhere, I would probably take that advice. But there is advice (and worse, there is documentation.) And the things I was missing to feel comfortable &ldquo;just writing&rdquo; were a sense of audience expectations and some artistic resistance to getting too descriptive.</p>
<p>I&rsquo;m grateful to people who shared insights and resources with me. Because I am not some sort of public institution or UX researcher, I leaned on what I could learn for myself rather than tossing up polls or requests for direct input from people who rely on assistive technology to experience the web.</p>
<p>I&rsquo;d like to make clear up front that I&rsquo;ve gathered enough information and formed enough of a thought to frame how I think about alt tags and my particular photography as I practice using them, and expect my style will change as I sit with how I&rsquo;m doing it, and, hopefully, when I get feedback.</p>
<p>I&rsquo;m also using this post to write down some initial thoughts that I expect will evolve if feedback comes in. I also expect I will be getting some things wrong by at least some peoples&rsquo; lights. I hope they&rsquo;ll have the patience to inform me.</p>
<p>So, why all the uncertainty?</p>
<p>A friend once said that the pictures I post to social networking are more &ldquo;photographic&rdquo; than most. I think that comment was about the work I put in to editing before posting. It&rsquo;s very seldom, even when just grabbing a shot with a phone, that I just share the photo. I&rsquo;ll probably crop, adjust the exposure and contrast a little, boost or mute the color, etc. even if it&rsquo;s just a picture of a cup of coffee or some thing I saw on the street. It&rsquo;s much more common that the photo will go through a Lightroom session, have a profile applied to it, and more.</p>
<p>The &ldquo;and more&rdquo; part was where I was getting hung up. Another friend described my photography as &ldquo;moody.&rdquo; So from the first friend&rsquo;s assessment that my pictures were more &ldquo;photographic,&rdquo; I graduated in someone else&rsquo;s estimation to artistically expressive.</p>
<p>Fair point. I am long on the record with believing that filters were the first meaningful Instagram feature. Some were sort of horrible and overdone &ndash; kitschy &ndash; but others were understated and quietly expressive. I think VSCO improved on the aesthetics, but both apps, I think, gave phone photographers a way to convey a sort of timelessness, gravitas, or pre-nostalgia. They gave everyday photos of people goofing around, lunches, and landscapes a z-axis of expressiveness. They conveyed mood.</p>
<p>I also think a lot about mood when I&rsquo;m editing. I like using profiles that suggest the colors and contrast of film without being too &ldquo;vintage.&rdquo; I like shooting with toy and novelty lenses that allow some vignette or distortion. I pull shadows down harder, blow out highlights, and boost specific colors beyond &ldquo;what I saw&rdquo; and into &ldquo;what I thought could be there.&rdquo;</p>
<p>Some days I try to rein it in a little, especially when I spot another photographer with a more naturalistic style. Other days I lean in to it.</p>
<p>Yet another friend said to me, at the height of pandemic lockdown, &ldquo;your pictures remind me that there is something beautiful in everyday things, and that is making this terrible time more bearable.&rdquo;</p>
<p>I was especially happy to hear that during the lockdown. Like everyone, I was figuring out new things to do that didn&rsquo;t involve being indoors and around people, and my evening photo walks were a small slice of something that let me take my mind off of what was going on.</p>
<p>It also made me happy because my goal, in the end, is to make something people respond to on some level below &ldquo;that is very nicely composed and the subject matter is pleasing to me.&rdquo; I want them to feel something, even if they can&rsquo;t put their finger on what it is. In fact, the less they can put their finger on it and the more they simply have to feel it, the happier I am.</p>
<p>That made alt tags a little hard to figure out. I want people to take away what they take away. There&rsquo;s room for people to take away &ldquo;that is a very nice picture of a city street &ndash; the colors are nicely done!&rdquo; There&rsquo;s room for people to take away &ldquo;the perspective mixes up several kinds of architecture, and its shot from an angle that somehow makes the city look tumbledown, as if the skyline is collapsing and buckling.&rdquo; There&rsquo;s room to say &ldquo;there&rsquo;s a picture of a couple on a tilt-a-whirl, I like the tones &ndash; black and white was a good choice!&rdquo; and there&rsquo;s room to say &ldquo;he&rsquo;d rather not be there.&rdquo;</p>
<p>I don&rsquo;t really know anything about art as a display process, meaning I have gone to galleries and museums, and I&rsquo;ve read artist&rsquo;s statements, but I&rsquo;ve never studied what I guess you&rsquo;d call the theory of art as a display process. Intuitively, and based on what I&rsquo;ve experienced for myself, I&rsquo;d say you should receive fewer inputs or interpretation of the work the closer you stand to the actual work. Maybe you read the artist&rsquo;s statement before you start as a way to help you get a fingernail under everything you&rsquo;re being shown. Or maybe you save it for after, so as you sit there thinking about everything atomically, some organizing principle can tie it all together and give it some meaning.</p>
<p>As you&rsquo;re scrolling a small collection of images someone put on a social networking service, that&rsquo;s &ldquo;in the gallery and next to the work.&rdquo; It feels wrong to hang a placard under the image and dissect the image&rsquo;s assorted evocations. On the other hand, I&rsquo;d guess our entire conception of how to do art as a display process reflects a period where the reflexive response to &ldquo;what about people with visual impairments?&rdquo; would, at best, provoke some questions about &ldquo;how serious?&rdquo; and at worse simple dismissal.</p>
<h3 id="practical-advice">Practical Advice</h3>
<p>So outside those considerations, here are some useful things I found:</p>
<p>First off, the basics. This post from <a href="https://www.fuelyourphotos.com/alt-text-for-photographers/">Fuel Your Photos</a> recapitulated the most common advice everywhere:</p>
<ol>
<li>Write in full sentences including case and punctuation.</li>
<li>Keep the text as short as possible (this guide says 15 words, I&rsquo;ve also seen 150 characters).</li>
<li>Don’t include information that is already given in the text surrounding the image.</li>
<li>Don’t include “image of,” “photo of,” or “picture of” (a screen reader will already say this).</li>
<li>Include keywords, locations, and studio name ONLY when relevant.</li>
<li>Try to include additional words and context that are not represented in the page text.</li>
<li>Make sure the alt text is unique for each photo on the page.</li>
</ol>
<p>There is also a common piece of guidance that says &ldquo;just the facts, no interpretation.&rdquo;</p>
<p>Going a little deeper, I found the <a href="https://www.cooperhewitt.org/cooper-hewitt-guidelines-for-image-description/">Cooper Hewitt Smithsonian Design Museum guidelines for image descriptions</a>. In addition to several of the common points made above, it touches on describing colors in an image (it&rsquo;s okay to do so) and also gets into gender and skin tone:</p>
<p>On gender:</p>
<blockquote>
<p>&ldquo;No assumptions should be made about the gender of a person represented. Although, where gender is clearly performed and/or verifiable, it should be described. When unknown, a person should be described using &rsquo;they, them&rsquo; and &lsquo;person&rsquo; and their physicality expressed through the description of their features, which inadvertently tend to indicate masculine or feminine characteristics. The use of masculine and feminine are problematic and should be avoided unless necessary for describing the performance of gender.&rdquo;</p>
</blockquote>
<p>Yet other guidance (lost the link, sorry) went on to say you should <em>never</em> use gender, <em>especially</em> when describing nudes, but did leave open the idea of clothing as a kind of gender performance.</p>
<p>Some of this guidance is a stopper for me and I am not done processing it. To be frank, the reliable guidance about how to discuss gender and sex has moved on from when I was a volunteer ally skills workshop facilitator, and I am not sure how to engage in any public discussion that goes beyond affirming the gender identity people choose.</p>
<p>On skin tone:</p>
<blockquote>
<p>&ldquo;When describing the skin tone of a person use non-ethnic terms such as &rsquo;light-skinned&rsquo; or &lsquo;dark-skinned&rsquo; when clearly visible. Because of its widespread use, we recommend the emoji terms for skin tone as follows: 🏻 Light Skin Tone, 🏼 Medium-Light Skin Tone, 🏽 Medium Skin Tone, 🏾 Medium-Dark Skin Tone, 🏿 Dark Skin Tone. Also, where skin tone is obvious, one can use more specific terms such as black and white, or where known and verified, ethnic identity can be included with the visual information: Asian, African, Latinx/o/a (also see gender), etc.&rdquo;</p>
</blockquote>
<p>This guidance stumbles a little, conflating skin tone (which is as observable and describable as they suggest), and ethnicity (or &ldquo;race,&rdquo; if you prefer, and I do not).</p>
<p>For instance: &ldquo;where skin tone is obvious, one can use more specific terms such as black and white.&rdquo;</p>
<p>That&rsquo;s a curious formulation, because &ldquo;black&rdquo; and &ldquo;white&rdquo; are not skin tones under their own &ldquo;emoji-based&rdquo; taxonomy. I am pretty sure they mean &ldquo;Black&rdquo; (or, to narrow it down as we embark on this journey through the linguistic thickets of race, &ldquo;African American&rdquo;) and &ldquo;American white.&rdquo;</p>
<p>So more to the point I think they mean &ldquo;where you can localize the person in the American racial taxonomy.&rdquo; They should have just said that or something similar.</p>
<p>There&rsquo;s much more to read there, and the guide distinguishes between descriptive text and alt text. The alt text is invariably quite simple.</p>
<p>Finally, someone on Mastodon provided me with a <a href="https://uxdesign.cc/how-to-write-an-image-description-2f30d3bf5546">very helpful article</a> written by a Product designer &amp; accessibility advocate named Alex Chen who uses an &ldquo;object-action-context&rdquo; approach:</p>
<blockquote>
<p>&ldquo;there is a storytelling aspect to writing descriptions. It doesn’t necessarily make sense to go from left to right describe everything in an image because that might lose the central message or create a disorienting feeling. For that reason, I came up with a framework that I recommend called object-action-context.</p>
<p>&ldquo;<em>The object is the main focus. The action describes what’s happening, usually what the object is doing. The context describes the surrounding environment.</em></p>
<p>&ldquo;I recommend this format because it keeps the description objective, concise, and descriptive.</p>
<p>&ldquo;It should be objective so that people using the description can form their own opinions about what the image means. It should be concise so that it doesn’t take too long for people to absorb all the content, especially if there are multiple images. And it should be descriptive enough that it describes all the essential aspects of the image.&rdquo;</p>
</blockquote>
<p>I found that very helpful, because it&rsquo;s a systematic way to describe an image journalistically, which is really what I wanted going in. I have other concerns I want to play around with as I try things out and perhaps get feedback, but it&rsquo;s nice to have a simple guide.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Really digging Fujifilm Raw Studio 📷</title>
      <link>https://mike.puddingtime.org/2022-11-26-really-digging-fujifilm/</link>
      <pubDate>Sat, 26 Nov 2022 13:40:40 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-26-really-digging-fujifilm/</guid>
      <description>&lt;p&gt;I learned photography by shooting on a Minolta X-700 and dragging my film back to a tiny darkroom at the newspaper. My feedback loop was measured in days &amp;ndash; I tended to go into the office 20 miles down the road maybe twice a week.  I developed very conservative habits because I wasn&amp;rsquo;t there to learn photography, exactly, I was there to learn how to take pictures for use in a newspaper with a film camera. Going digital years later reduced that feedback time a lot, but I&amp;rsquo;ve learned over time there&amp;rsquo;s better and worse feedback at better and worse times.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I learned photography by shooting on a Minolta X-700 and dragging my film back to a tiny darkroom at the newspaper. My feedback loop was measured in days &ndash; I tended to go into the office 20 miles down the road maybe twice a week.  I developed very conservative habits because I wasn&rsquo;t there to learn photography, exactly, I was there to learn how to take pictures for use in a newspaper with a film camera. Going digital years later reduced that feedback time a lot, but I&rsquo;ve learned over time there&rsquo;s better and worse feedback at better and worse times.</p>
<p>For instance, I have never really taken the time to figure out all the settings in Fujifilm cameras. The film simulations and tone controls are pretty simple to master, but then you get into the dynamic range settings, DR override, the color and blue chrome stuff, and it gets more complicated. Each setting does its thing, and they all interact with each other. You could spend all your shooting time trying to figure that stuff out instead of shooting, and it&rsquo;s kind of a drag to keep a notebook around to write things down, or peep at EXIF later to figure out what was doing what.</p>
<p>Today I downloaded Fujifilm&rsquo;s Raw Studio and started playing with it.</p>
<p>At its core it&rsquo;s a raw file developer: You download raw files from your camera and process them into jpegs. There are other apps that do this (Lightroom, Capture One, Apple Photos), but Raw Studio has the distinction of allowing you to manipulate all the in-camera settings available on a given Fujifilm camera. Where Lightroom gives you generic controls for things like &ldquo;Highlight,&rdquo; &ldquo;Whites,&rdquo; &ldquo;Blacks,&rdquo; &ldquo;Shadows,&rdquo; Raw Studio has what you set in camera: &ldquo;Highlight Tone&rdquo; and &ldquo;Shadow Tone.&rdquo; Where Lightroom doesn&rsquo;t have the Color Chrome or Chrome Blue settings at all, Raw Studio exposes them.</p>
<p>The slightly curious thing about the application is that it needs to be connected to your Fujifilm camera, which acts as a sort of raw file co-processor. I&rsquo;d rather it were not that way, but it all works pretty transparently and cleanly: You connect via the camera&rsquo;s USB-C port, the software picks it up, and that&rsquo;s that. It doesn&rsquo;t suck battery or do anything weird.</p>
<p>The thing I&rsquo;m enjoying about the app is that it&rsquo;s a great learning tool for all the creative options available in my Fujifilm cameras. I can get instant feedback on how, say, more shadow tone interacts with Classic Chrome vs. Classic Negative, or how the two color chrome settings interact with Provia, or which of the color filters for the monochrome Acros simulations give me what effects.</p>
<p>All that helps me make decent presets I can save to my cameras that will give me pretty good straight-out-of-the-camera jpegs without trying to figure this stuff out on the street. It also makes sharing in certain contexts easier. &ldquo;Here&rsquo;s a look I like, that encapsulates my style, and it&rsquo;s in JPEG form where I can edit it in a simple mobile tool to fix the crop or straighten it or tweak small things.&rdquo;</p>
<p>I can&rsquo;t see myself discarding raw capture of some kind: I like editing too much to give up the flexibility and ability to reconsider an image years later that raw editing gives me.  But I also like the thought of being able to build some go-to presets I can save in my camera that I <em>know</em> will work for certain moods and situations, so that sometimes post can just be cropping or little tweaks vs. a whole gamut of manipulations.</p>
<p><a href="https://its.puddingtime.org/2022/11/25/just-let-me.html">Like I said</a>, this is fun.</p>
<img src="https://its.puddingtime.org/uploads/2022/5a94b0f112.jpg" width="600" height="447" alt="Screenshot of the Fujifilm RAW studio software. ">
]]></content:encoded>
    </item>
    <item>
      <title>&#34;Just let me shoot,&#34; revisited. </title>
      <link>https://mike.puddingtime.org/2022-11-25-just-let-me/</link>
      <pubDate>Fri, 25 Nov 2022 11:34:33 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-25-just-let-me/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/47decd4c59.jpg&#34; alt=&#34;Teenage boy using a laptop on a folded out sleeper sectional, orange curtains, blue blankets, steam from a vaporizer.&#34;&gt;&lt;/p&gt;
&lt;p&gt;Well, having put several hundred exposures through my jpeg-forward workflow, I&amp;rsquo;ve re-learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;White balance matters to me just enough to not care for sticking to jpegs, but not so much that I use my gray card when I enter a new lighting area; so I should stick to raw because white balance is more fixable than a jpeg.&lt;/li&gt;
&lt;li&gt;Fujifilm&amp;rsquo;s in-camera settings, especially around color, take some work. I really, really want to like the  chrome blue and color chrome settings, but the fine line between &amp;ldquo;that&amp;rsquo;s nice&amp;rdquo; and &amp;ldquo;aaaaargh! TOO MUCH!&amp;rdquo; is taking some finding. The reds, in particular, do &lt;em&gt;something&lt;/em&gt; I don&amp;rsquo;t like. There&amp;rsquo;s some interplay between the underlying film simulation, saturation, DR, and tone settings.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And really what I&amp;rsquo;ve re-learned is sloooooowwwww dooooooown. A lot of the problems with a raw-based workflow come from the own-goal of trying to do post on a phone. Whenever I go back to something where I did post on a phone, or a small tablet on the train, my edits are overcooked. I remember going through this when I was using Instagram and felt a little imprisoned by feedback: People respond better to contrasty stuff with pops of color that bust out of the confines of a small screen. I already sort of drift in that direction, and I feel much better when I rein the impulse in rather than indulge it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://its.puddingtime.org/uploads/2022/47decd4c59.jpg" alt="Teenage boy using a laptop on a folded out sleeper sectional, orange curtains, blue blankets, steam from a vaporizer."></p>
<p>Well, having put several hundred exposures through my jpeg-forward workflow, I&rsquo;ve re-learned:</p>
<ul>
<li>White balance matters to me just enough to not care for sticking to jpegs, but not so much that I use my gray card when I enter a new lighting area; so I should stick to raw because white balance is more fixable than a jpeg.</li>
<li>Fujifilm&rsquo;s in-camera settings, especially around color, take some work. I really, really want to like the  chrome blue and color chrome settings, but the fine line between &ldquo;that&rsquo;s nice&rdquo; and &ldquo;aaaaargh! TOO MUCH!&rdquo; is taking some finding. The reds, in particular, do <em>something</em> I don&rsquo;t like. There&rsquo;s some interplay between the underlying film simulation, saturation, DR, and tone settings.</li>
</ul>
<p>And really what I&rsquo;ve re-learned is sloooooowwwww dooooooown. A lot of the problems with a raw-based workflow come from the own-goal of trying to do post on a phone. Whenever I go back to something where I did post on a phone, or a small tablet on the train, my edits are overcooked. I remember going through this when I was using Instagram and felt a little imprisoned by feedback: People respond better to contrasty stuff with pops of color that bust out of the confines of a small screen. I already sort of drift in that direction, and I feel much better when I rein the impulse in rather than indulge it.</p>
<p>I think I will also take a swing at using Fuji&rsquo;s desktop raw processing software, because that&rsquo;s a way to take a raw image and apply Fuji&rsquo;s own settings to it on a desktop and big screen, where I can look for those Goldilocks settings without more &ldquo;shoot, process, learn, iterate&rdquo; on the parts I want to spend less time on.  I&rsquo;ve seen enough stuff from Fuji&rsquo;s own brand ambassadors to know there&rsquo;s something there, so it feels worth an hour&rsquo;s time to run through a few variables and see where it leaves me.</p>
<p>Anyhow, this is my idea of fun.</p>
]]></content:encoded>
    </item>
    <item>
      <title>About that room</title>
      <link>https://mike.puddingtime.org/2022-11-23-about-that-room/</link>
      <pubDate>Wed, 23 Nov 2022 10:02:38 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-23-about-that-room/</guid>
      <description>&lt;p&gt;Last night after a 12-hour day of learning how to put down flooring then putting down flooring I tacked down some baseboard on a single wall so that I could at least narrow my vision a little and see the end of the project, which has consumed a big chunk of November.&lt;/p&gt;
&lt;p&gt;Everyone had to deal with their own lockdown stuff in some way or another. In our family, it took the form of not having a ton of space by the time we&amp;rsquo;d flipped a few rooms into offices.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Last night after a 12-hour day of learning how to put down flooring then putting down flooring I tacked down some baseboard on a single wall so that I could at least narrow my vision a little and see the end of the project, which has consumed a big chunk of November.</p>
<p>Everyone had to deal with their own lockdown stuff in some way or another. In our family, it took the form of not having a ton of space by the time we&rsquo;d flipped a few rooms into offices.</p>
<p>My first swing at it involved building a cover for our tiny patio. That gave us a space to spill out onto and opened up the possibility of having guests over. We spent election night in 2020 out under that cover with our intentional family and a propane heater.</p>
<p>My second swing at it was to turn our garage into a movie theater (&ldquo;the Coviplex&rdquo;). We could have people over, open the garage door, roll out the propane heaters and have movie nights. Ben&rsquo;s godmothers agreed to sit through the Marvel movies through <em>Avengers: End Game.</em></p>
<blockquote>
<p>Me: I&rsquo;m surprised you were up for that. I mean, it&rsquo;s just, like Extruded Cultural Product.</p>
</blockquote>
<blockquote>
<p>Kathleen: Well, yeah. It is. It&rsquo;s still fun.</p>
</blockquote>
<p>It&rsquo;s sort of strange to look at both those projects now. I can remember the energy that went into them, from figuring out how to do things like build a patio cover to coding standards to how to do drywall. One aspect of my ADHD is hyperfocus, and it was on full display. I didn&rsquo;t think of what I was up to as &ldquo;a little DIY project,&rdquo; I thought of it as a sort of folk engineering. I wasn&rsquo;t interested in simply building a thing, I wanted to build it in such a way that I could also take it down in a day. I spent a lot of hours just watching and rewatching videos and reading tutorials.</p>
<p>Meanwhile, Ben was upstairs being a teenager. He liked the patio cover for sure &ndash; it was separate from the other living areas and we all fell into treating it like a shared resource, not a shared space. You could go sit outside and stare up through the cover at the towering pine in the yard nextdoor and listen to birds in silence. But the theater didn&rsquo;t really land with him. It was a little too shared.</p>
<p>One day he came down and said he just didn&rsquo;t have enough room. Our house is sort of weird to the extent that, from the curb, it looks like a plain old two-story home. The lot it was built on, however, is closer in size to the slivers you see &ldquo;tall-and-skinnies&rdquo; built on &hellip; it&rsquo;s just turned 90 degrees because it is built across the width of a former back yard, not the depth of a subdivided lot. So Ben&rsquo;s room is sort of shallow and wide. By the time his desk, stereo stand, and bed figured in, he had a tiny patch to stand on.</p>
<p>His take was to figure out some kind of rearrangement, but we talked it through and there wasn&rsquo;t much to do with it. It was sort of like a sliding-square puzzle. In the end, there was only so much square footage and not a lot to optimize with.</p>
<p>So I mentioned the idea of a loft. He didn&rsquo;t like it at first: He&rsquo;d had a skinny Ikea one when he was much younger and it didn&rsquo;t add a lot of utility. So I showed him pictures of the kinds of lofts that turn up in dorms, where you get a full bed, better floorspace, and construction meant for an adult body.  We back-and-forthed on some general design ideas, and I finally found one that he liked.</p>
<p>It felt good to do the project: I&rsquo;d learned a lot about basic household carpentry over the previous year building the other two projects, and felt comfortable taking a basic plan and improvising on it to suit his space. One design thing that was important to me was to make it feel utterly solid, so I built it to fit exactly so, and bolted it in so that when he climbed the stairs or leaned against a post, it simply did not move.</p>
<p>That gave him more space, and also subdivided the room so that he had a place to hang out and watch t.v. or play with his Switch, and his desk area. It was pretty comforting to sit down in the living room or in the garage movie theater and hear him playing music and dancing because he had room.</p>
<p>But the thing about all of this is that it was a holding action. He still couldn&rsquo;t see his friends. We&rsquo;d ultimately only reclaimed about 24 square feet. My half of a 2-up army barracks room had felt more spacious.  The context was still out there.</p>
<p>So it made some sense when Ben decided he was ready to move out after high school. The actual chain of events was a little abrupt, but I remember that same restlessness and readiness to move, and in my case it wasn&rsquo;t informed by two years of relative lockdown.</p>
<p>One thing that didn&rsquo;t work for me, as a teenager, was that my parents actually moved out of state just after I graduated from high school. I stayed back for the summer so I could earn some money before starting college. The first time I spent the night &ldquo;at home&rdquo; after going to college, it was as a guest in my parents&rsquo; home &ndash; my brother and sister had rooms, but I didn&rsquo;t have a room there. It was profoundly dislocating.</p>
<p>Ben told us he felt like he&rsquo;d outgrown the loft, and that in some ways it was a reminder of things that were hard for him. I completely got that, and my first impulse was to simply remove it and just somehow reclaim the space &hellip; he was moving out, after all. But I remembered that feeling of sleeping in a guest room in my parents&rsquo; house, so I asked him what he&rsquo;d like: Did he still want to have a room of his own in our home, even if he was moving out? What should it look like? Could I take the loft out? I asked about everything, because wherever we are and whatever house we&rsquo;re living in, wherever he spends most of his time and however much time he spends in our house, we are some kind of home.</p>
<p>I did ask him to clean the room out and pack as much as possible of what he wasn&rsquo;t taking with him. He made an effort, but was more focused on moving on to his adventure. We spent October aware that his room needed some work to get it into a place where we could even work on it. The loft needed to come out, things he&rsquo;d left behind needed to be packed. The loft had created its own share of issues to be addressed.  In October I was also trying to wind down a job in one of those situations where I felt more responsibility to individuals than I did the organization, so the month was spent pointedly not going in that room or thinking too much about taking the loft down. I was worried I&rsquo;d biased in favor of sturdiness and solidity over deconstructability. I gritted my teeth and stuck to my plan to have the room ready by Thanksgiving, but not starting until November 1st.</p>
<p>The loft teardown went pretty well in the end. I&rsquo;d expected I&rsquo;d need a second set of hands and was braced to get a few bumps on the head and some muscle strain. As it was, it took a few hours on a Saturday afternoon on my own. No bumps on the head. There were a few stripped screws, but easy enough to drill them out.</p>
<p>Over the past several weeks, as I&rsquo;ve worked away, I&rsquo;ve sent Ben little teaser photos: The loft in the process of being disassembled, the room stripped of carpet and molding, the first coat of paint, the first test run of flooring. Each time it&rsquo;s a little bittersweet and a little tentative. Part of stepping back and letting him leave the nest meant putting ourselves on a budget for his time and attention. I love texting in a way I never did before because we can have small moments of connection without the weight of letters or phone calls.</p>
<p>The deconstruction photos weren&rsquo;t great for him. A partially deconstructed loft looks a lot like a partially constructed one. I don&rsquo;t think he liked the reminder of the periods where I was absorbed with making space. Like I said, it was a good thing to do, but it wasn&rsquo;t happening for a good reason. The context cannot be set completely aside.</p>
<p>He has warmed up as things have progressed, and it felt good when the implicit finally became explicit after I sent him a picture of the room stripped to the plywood floor:</p>
<p>&ldquo;I actually really love this because it is scrubbing away the the past in the most literal sense.&rdquo;</p>
<p>Me, too.</p>
]]></content:encoded>
    </item>
    <item>
      <title>My failed posting aspirations</title>
      <link>https://mike.puddingtime.org/2022-11-19-my-failed-posting/</link>
      <pubDate>Sat, 19 Nov 2022 17:10:12 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-19-my-failed-posting/</guid>
      <description>&lt;img alt=&#34;Broken eggs and cigarettes on sidewalk concrete.&#34; src=&#34;https://its.puddingtime.org/uploads/2022/9de9112421.jpg&#34;&gt;
&lt;p&gt;As a minister&amp;rsquo;s child, I ran in minister child circles. I was not bad at cussing, but it took work to get cussing out of me. Some kids could not cuss at all. You could hear the cussing wrestle its way out of them. One friend believed that non-profane cussing was also problematic, so even his &amp;ldquo;gawl-dangs&amp;rdquo; and &amp;ldquo;bullcraps&amp;rdquo; sounded like hostage videos.&lt;/p&gt;
&lt;p&gt;Now in middle age, I am not really a prolific or accomplished cusser and it turns out, like a particular billionaire, I am also not really a poster.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img alt="Broken eggs and cigarettes on sidewalk concrete." src="https://its.puddingtime.org/uploads/2022/9de9112421.jpg">
<p>As a minister&rsquo;s child, I ran in minister child circles. I was not bad at cussing, but it took work to get cussing out of me. Some kids could not cuss at all. You could hear the cussing wrestle its way out of them. One friend believed that non-profane cussing was also problematic, so even his &ldquo;gawl-dangs&rdquo; and &ldquo;bullcraps&rdquo; sounded like hostage videos.</p>
<p>Now in middle age, I am not really a prolific or accomplished cusser and it turns out, like a particular billionaire, I am also not really a poster.</p>
<p>Like, if I write 1,000 words on the Portland subreddit about the homelessness crisis, I can rake in 150 upvotes pretty easily. If I go low and toss off something short and spicy, I get downvoted to shit.</p>
<p>Twitter? I delete a solid 10-15 percent of my output because I sit for five minutes and feel guilty for being reductive. I like Tweetbot because it makes it hard to see how many updoots I&rsquo;m <em>not</em> getting when I do finally manage to fire off a take.</p>
<p>Not great at understanding emojis: Which heart color is okay to not seem creepy? Dunno. I used a brown heart recently and sat around waiting to be corrected.</p>
<p>Hate to traffic in memes unless it&rsquo;s the Steve Buscemi &ldquo;fellow kids&rdquo; one and I&rsquo;m attacking myself.</p>
<p>In middle age, I am now the children I knew who could not cuss.</p>
<p>One of the nice things about The Current Period is that I have so. much. time. to think about how I feel about the things I see myself doing when I find myself idle and able to do whatever.</p>
<p>Like, &ldquo;Finally! Time to get good at posting!&rdquo;</p>
<p>Then I post and they don&rsquo;t really come out right.</p>
<p>I <em>do</em> like chatting with people! I am down for doing that more.</p>
<p>But I also deleted all my reddit apps today, and felt like it was good to just share some pictures and a few longer ideas with people.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Fujifilm &#34;Just Let Me Shoot&#34; Configuration </title>
      <link>https://mike.puddingtime.org/2022-11-17-fujifilm-just-let/</link>
      <pubDate>Thu, 17 Nov 2022 11:05:02 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-17-fujifilm-just-let/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s time for the rains in Portland, so that means the Ricoh GRIIIx has to stay inside, the fun little Instax cameras are best not carried around, and my really, really good Fuji primes that aren&amp;rsquo;t weather resistant have to stay on the shelf. I put together a little &lt;a href=&#34;https://its.puddingtime.org/2022/11/17/pdx-rainy-season.html&#34;&gt;weather-resistant &amp;ldquo;grab-n-go&amp;rdquo; kit with an X-Pro3 &lt;/a&gt;and the Fuji 16, 23, and 27mm WR lenses.&lt;/p&gt;
&lt;p&gt;I also z&amp;rsquo;d out my X-Pro3&amp;rsquo;s presets and made just three:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It&rsquo;s time for the rains in Portland, so that means the Ricoh GRIIIx has to stay inside, the fun little Instax cameras are best not carried around, and my really, really good Fuji primes that aren&rsquo;t weather resistant have to stay on the shelf. I put together a little <a href="https://its.puddingtime.org/2022/11/17/pdx-rainy-season.html">weather-resistant &ldquo;grab-n-go&rdquo; kit with an X-Pro3 </a>and the Fuji 16, 23, and 27mm WR lenses.</p>
<p>I also z&rsquo;d out my X-Pro3&rsquo;s presets and made just three:</p>
<ul>
<li>Neutral</li>
<li>Muted</li>
<li>Hard</li>
</ul>
<p>The basic setup is:</p>
<h2 id="all-presets">All presets</h2>
<ul>
<li>Drive mode: Photo simulation bracketing with Classic Chrome, Acros-R, and Astia.</li>
<li>File type: raw + fine JPG</li>
<li>Storage: card 1: JPG, card 2: raw</li>
</ul>
<h2 id="muted">Muted</h2>
<p>_It&rsquo;s rare that I go here. It&rsquo;s just not my style. But sometimes there are opportunities to capture that classic &ldquo;WPA black and white photography&rdquo; look.</p>
<ul>
<li>Chrome Blue and Color Chrome: Off</li>
<li>Sharpness: 0</li>
<li>Color: 0</li>
<li>Shadow and Highlight tones: -2</li>
<li>DR: 400</li>
</ul>
<h2 id="neutral">Neutral</h2>
<p><em>When I&rsquo;m not sure what&rsquo;s going on, this is the closest to letting go and letting Fujifilm&rsquo;s software development team.</em></p>
<ul>
<li>Chrome Blue and Color Chrome: Off</li>
<li>Sharpness: 0</li>
<li>Color: 0</li>
<li>Shadow and Highlight tones: 0</li>
<li>DR: 200</li>
</ul>
<h2 id="hard">Hard</h2>
<p><em>I pretty much live here. It&rsquo;s hard to push Fujifilm over the top, and this setting provides a workable JPG for a standard deviation off of any given setting.</em></p>
<ul>
<li>Chrome Blue and Color Chrome: High</li>
<li>Sharpness: 3</li>
<li>Color: 3</li>
<li>Shadow and Highlight tones: +3, +3</li>
<li>DR: 100</li>
</ul>
<h2 id="why">Why</h2>
<p>I really like Fujifilm&rsquo;s way of looking at the world where its presets are concerned. You can get some lovely images straight out of the camera. Try as I might, though, I can&rsquo;t shake the urge to have the flexibility raw images confer. The problem is that raw processors like Lightroom don&rsquo;t all honor Fujifilm&rsquo;s presets. Yes, there are equivalents, but I just haven&rsquo;t sat down to figure out a Rosetta Stone for all the settings. Fujifilm itself provides software for a raw post-processing workflow, but you have to connect your camera and use it as a sort of fuji coprocessor. Cumbersome. No good for the field, where I work off of tablets.</p>
<p>So setting up three very general presets, then using simulation bracketing gets me a usable JPG right away, with the raw files tucked away if there&rsquo;s something I want to do some real work on.</p>
<p>A variant approach that saves some sorting is to get rid of the simulation bracketing and just keep the three presets, then assign film simulation to a button as your mood dictates. Some days are Acros days, some days are Classic Chrome days, and either way the raw is sitting there if the urge to really edit strikes. If you just assign film simulations to a button, you&rsquo;re a thumb-press away from any you choose.</p>
<p>#fujifilm #photography #cameras</p>
]]></content:encoded>
    </item>
    <item>
      <title>PDX rainy season &#34;grab-n-go&#34; prime kit for an X-Pro3 📷</title>
      <link>https://mike.puddingtime.org/2022-11-17-pdx-rainy-season/</link>
      <pubDate>Thu, 17 Nov 2022 10:40:51 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-17-pdx-rainy-season/</guid>
      <description>&lt;div style=&#34;text-align:center;&#34;&gt;
&lt;img alt=&#34;fujifilm x-pro3, 23/16/27mm prime lenses, iPad mini, USBC SD reader&#34; src=&#34;https://its.puddingtime.org/uploads/2022/a557bc8994.jpg&#34;&gt;
&lt;/div&gt;
&lt;p&gt;Experimental &amp;ldquo;grab-n-go&amp;rdquo; X-Pro3 EDC kit. The whole thing + 3 spare batteries tuck in a Peak Design 5l sling.  Yes, my 16-55mm/2.8/WR covers this whole range. No, it is not an okay downtown configuration. It looks like &amp;ldquo;a big zoom&amp;rdquo; and that freaks people out.  The 27 and X-Pro look like a film thing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<div style="text-align:center;">
<img alt="fujifilm x-pro3, 23/16/27mm prime lenses, iPad mini, USBC SD reader" src="https://its.puddingtime.org/uploads/2022/a557bc8994.jpg">
</div>
<p>Experimental &ldquo;grab-n-go&rdquo; X-Pro3 EDC kit. The whole thing + 3 spare batteries tuck in a Peak Design 5l sling.  Yes, my 16-55mm/2.8/WR covers this whole range. No, it is not an okay downtown configuration. It looks like &ldquo;a big zoom&rdquo; and that freaks people out.  The 27 and X-Pro look like a film thing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Letting go of IT brain while Twitter burns (or whatever the hell it is doing)</title>
      <link>https://mike.puddingtime.org/2022-11-16-letting-go-of/</link>
      <pubDate>Wed, 16 Nov 2022 12:22:49 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-16-letting-go-of/</guid>
      <description>&lt;div style=&#34;text-align:center;&#34;&gt;
&lt;img alt=&#34;alfred e neuman in a magic 8-ball&#34; src=&#34;https://its.puddingtime.org/uploads/2022/9abb8bbd51.jpg&#34;&gt;
&lt;/div&gt; 
&lt;p&gt;It&amp;rsquo;s nice to not have to think like an IT person while Twitter decides whether or not to collapse into a singularity under the mass of fury and scorn the new owner is cultivating. It&amp;rsquo;s not even &lt;em&gt;like&lt;/em&gt; my job to have to wonder &amp;ldquo;what comes next,&amp;rdquo; &amp;ldquo;can it scale,&amp;rdquo; &amp;ldquo;how will we manage this change,&amp;rdquo; or &amp;ldquo;did we think of all the ways people are using this thing.&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<div style="text-align:center;">
<img alt="alfred e neuman in a magic 8-ball" src="https://its.puddingtime.org/uploads/2022/9abb8bbd51.jpg">
</div> 
<p>It&rsquo;s nice to not have to think like an IT person while Twitter decides whether or not to collapse into a singularity under the mass of fury and scorn the new owner is cultivating. It&rsquo;s not even <em>like</em> my job to have to wonder &ldquo;what comes next,&rdquo; &ldquo;can it scale,&rdquo; &ldquo;how will we manage this change,&rdquo; or &ldquo;did we think of all the ways people are using this thing.&rdquo;</p>
<p>I am not saying I <em>needed</em> to think about those things with regard to Twitter when I <em>was</em> an IT person. I&rsquo;m just saying work has a way of flavoring the way your brain works and how you frame things. I&rsquo;m glad to be able to witness this moment as &ldquo;just me.&rdquo;</p>
<p>In other words, it&rsquo;s just my &ldquo;job&rdquo; — loosely defined as &ldquo;whatever the hell we are supposed to be up to on this planet when there&rsquo;s nobody in a position to tell us otherwise&rdquo; — to decide whether to pay attention or not, to care or not, and decide whether to fiddle around with whatever people seem to be interested in or not.</p>
<p>I do like fiddling with new things, so I&rsquo;m doing that.</p>
<p>I am interested in &ldquo;online stuff&rdquo; and have been since my first 300 baud modem in 1988, so I&rsquo;m definitely paying attention. It was weird, however, to have someone ask me to expand on <a href="https://its.puddingtime.org/2022/11/15/i-would-love.html">a metaphor I dashed off</a> as if I might have a coherent theory of What Should Be Next. All I really have, despite 34 years of constant online life, is a vague aesthetic. The revolution, whatever it is, will not be hiring me for its product team.</p>
<p>I honestly do not like scolding, cajoling, or wishing people would do what I think they should do, but found myself doing a little of that and will stop. I&rsquo;d need to be good at Twitter to change anybody&rsquo;s mind about Twitter. Since  I&rsquo;m not good at Twitter, the best I&rsquo;d be aspiring to is to be an awesome nuisance who, if anything, is goading people into doubling down on their position, whatever it is.</p>
<p>I like a good catastrophe in the abstract, so I&rsquo;m weirdly spending more time on Twitter to have a front-row seat, but the internal vibe is very &ldquo;Mike in the Multiverse of Madness.&rdquo; Like, I walk through some shimmering light and suddenly I&rsquo;m on the planet ruled by sentient Magic Eight Balls who have developed a rich language based on octets of balls whose limited range of expression <em>combine</em> into a richer vocabulary, where gravity has stopped working, cheese is currency and there&rsquo;s a moon, but it is cracked in half and also everything is color-graded a deep violet hue.  When I&rsquo;ve had enough I open a portal and retreat to the idyll that is micro.blog, where I am content to sit in the corner.</p>
<p>Anyhow, this is part post-Puppet journal, part declaration of intent, and (hidden very deeply) part expression of empathy for those of you who are experiencing this time as unwelcome uncertainty or even traumatic dislocation. It&rsquo;s not my place to tell you &ldquo;it&rsquo;ll be fine,&rdquo; but I think it will be.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#34;The Whole Body Yes&#34;</title>
      <link>https://mike.puddingtime.org/2022-11-15-the-whole-body/</link>
      <pubDate>Tue, 15 Nov 2022 22:04:10 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-15-the-whole-body/</guid>
      <description>&lt;div style=&#34;text-align:center;&#34;&gt;
&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/c0be308575.jpg&#34; width=&#34;600&#34; height=&#34;265&#34; alt=&#34;&#34; /&gt;&lt;/div&gt;
&lt;p&gt;One of the ideas I loved from Conscious Leadership was the &amp;ldquo;whole body yes.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I was careful over the past two weeks to only start projects I&amp;rsquo;d committed to before the end of October. As I sat around taking it easy and placing few demands on myself, I still kept track of ideas I had for projects and captured them in a list.&lt;/p&gt;
&lt;p&gt;Now that it&amp;rsquo;s time to go through that list and write about what sort of shape each could take, I also want to check myself for a &amp;ldquo;whole body yes&amp;rdquo; as I sit back and think about whether to proceed.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<div style="text-align:center;">
<img src="https://its.puddingtime.org/uploads/2022/c0be308575.jpg" width="600" height="265" alt="" /></div>
<p>One of the ideas I loved from Conscious Leadership was the &ldquo;whole body yes.&rdquo;</p>
<p>I was careful over the past two weeks to only start projects I&rsquo;d committed to before the end of October. As I sat around taking it easy and placing few demands on myself, I still kept track of ideas I had for projects and captured them in a list.</p>
<p>Now that it&rsquo;s time to go through that list and write about what sort of shape each could take, I also want to check myself for a &ldquo;whole body yes&rdquo; as I sit back and think about whether to proceed.</p>
<h3 id="what-is-a-whole-body-yes">What is a Whole Body Yes?</h3>
<p>A whole body yes happens you when are fully aligned with your head, heart, and gut centers and there is bodily sense of well being as you consider a choice.</p>
<h4 id="head">Head</h4>
<p>Think of a time when you came to the logical conclusion that something made sense.
Perhaps is was a choice after thoroughly researching an issue. Notice what it feels like in your body as you think of that memory.</p>
<h4 id="heart">Heart</h4>
<p>Think of a decision that you made when you felt your heart was fully in it. Take yourself back to that exact moment and notice how that feels in your body as you think of that scene.</p>
<h4 id="gut">Gut</h4>
<p>Drop into your gut, your power center. Think back to a time when you knew instinctually that &ldquo;This is it.&rdquo; Recall how good it felt to be this solid in your choice and notice how it feels in your body.</p>
]]></content:encoded>
    </item>
    <item>
      <title>After rest, some clarity on a kind of  bullshit </title>
      <link>https://mike.puddingtime.org/2022-11-14-after-rest-some/</link>
      <pubDate>Mon, 14 Nov 2022 23:44:45 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-14-after-rest-some/</guid>
      <description>&lt;p&gt;Beneficial outcome of the fortnight: I dropped a bunch of culture-war-adjacent subscriptions. Having a few weeks to sit quietly and listen closely to both these voices I allowed into my home and my own reaction to them helped a lot.&lt;/p&gt;
&lt;p&gt;I think the way people act &lt;em&gt;about&lt;/em&gt; politics on the dimensions I care about is generally bad all around. That is a function of how I think people should behave that is not unique to me, but that is not relevant to many. It isn’t me saying “Democrats are no different from fascists” or “both sides are equally bad.” (I almost never say “both sides,” and Democrats are plainly different from fascists, but I do come from a faith tradition that managed to get martyred by Catholics and Protestants alike and it informs my world view.)&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Beneficial outcome of the fortnight: I dropped a bunch of culture-war-adjacent subscriptions. Having a few weeks to sit quietly and listen closely to both these voices I allowed into my home and my own reaction to them helped a lot.</p>
<p>I think the way people act <em>about</em> politics on the dimensions I care about is generally bad all around. That is a function of how I think people should behave that is not unique to me, but that is not relevant to many. It isn’t me saying “Democrats are no different from fascists” or “both sides are equally bad.” (I almost never say “both sides,” and Democrats are plainly different from fascists, but I do come from a faith tradition that managed to get martyred by Catholics and Protestants alike and it informs my world view.)</p>
<p>It isn’t Substack’s fault that an industry formed around staking out the real estate to support a pox distribution factory that could deliver to everyone’s home, but SubStack is the most reliable place to find the culture war entrepreneurial complex if you’re looking for examples.</p>
<p>That entrepreneurial movement is comprised of journalists and pundits who have caught scent of the sour suspicions of our times and understand there is some sort of political realignment afoot. They can tell people are frustrated and angry, but not so far gone that MAGA nihilism or weirdo Silicon Valley neo-feudalism is palatable. There’s a huge amount of free-floating anxiety in the air looking for a name, though.</p>
<p>In my frustration with the way people were conducting themselves in the collective political discourse, I found some of the culture war stuff comforting.  It was a corner of the discourse that seemed outside the political binary we insist on in the US. But over time you begin to realize it is a kind of “outside” that is necessarily nowhere at all. It isn’t off the left/right spectrum because it is its own current of thought. It is off the spectrum because that’s the only way it can make money off alienated, angry people who still hew deeply to a cultural  identity they imagine to be political from “both sides.”</p>
<p>Ultimately, culture war entrepreneurs are as much a product of the culture war and are as beholden to the culture war as the worst combatants. It’s how they make a living. They need it to exist. They need people to be alienated, fearful and angry with each other.</p>
<p>So I unsubscribed from some newsletters, and got rid of some podcasts.</p>
<p>One of the podcasts asked for feedback in the unsub form, which I provided:</p>
<p>“You claim to chronicle the culture war. But you’re not above it, outside it, or between it. You are of it and you manufacture more of it. I don’t think you’re helping.”</p>
<img src="https://its.puddingtime.org/uploads/2022/dbc0c8b76c.jpg" width="450" height="600" alt="">
]]></content:encoded>
    </item>
    <item>
      <title>Social plumbing during the Mastodon Moment</title>
      <link>https://mike.puddingtime.org/2022-11-11-social-plumbing-during/</link>
      <pubDate>Fri, 11 Nov 2022 10:52:59 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-11-11-social-plumbing-during/</guid>
      <description>&lt;div style=&#34;text-align:center;&#34;&gt;
&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/d43acc5c65.png&#34;&gt;
&lt;/div&gt;
&lt;p&gt;The Mastodon Moment is making me think about the socials again. I like a nice, tidy flow where I don&amp;rsquo;t end up repeating myself on a given channel because I have looped an input into it twice, or have accidentally round-tripped something into it.&lt;/p&gt;
&lt;p&gt;Consequently, I take a view that you should have a hub through which other things flow. micro.blog is my hub. It takes a few live inputs, and it pushes to a few outputs.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<div style="text-align:center;">
<img src="https://its.puddingtime.org/uploads/2022/d43acc5c65.png">
</div>
<p>The Mastodon Moment is making me think about the socials again. I like a nice, tidy flow where I don&rsquo;t end up repeating myself on a given channel because I have looped an input into it twice, or have accidentally round-tripped something into it.</p>
<p>Consequently, I take a view that you should have a hub through which other things flow. micro.blog is my hub. It takes a few live inputs, and it pushes to a few outputs.</p>
<p>Socially, I like the way micro.blog feels day-to-day. I don&rsquo;t follow a lot of people, and the vibe is way more relaxed than anywhere else. I appreciate the fusion of a timeline-like feed with the ability to tip over into more traditional blogging.</p>
<p>I like the nervous, buzzy energy in Mastodon right now. I am not sure what will happen next, but I&rsquo;m content to hang out there.</p>
<p>I like Mastodon&rsquo;s CW convention a lot because I live in tension between some relatively spicy political ideas and an awareness that some people might prefer to bypass that topic generally, or just not need to really engage with my ideas in particular.</p>
<p>I think it will be interesting to see if all the Mastodon instances begin to sort themselves out into legitimate communities with their own norms, and I hope that the choice to opt out of federation with other instances will tend to be more rare than not, aimed primarily at Nazi farms and troll factories.</p>
<p>This could be a real test of where we all are culturally: People have wildly varying ideas of what constitutes acceptable and unacceptable levels of disagreement, what is &ldquo;fash adjacent,&rdquo; etc. I&rsquo;ve heard a few reports already of  instances de-federating with other instances over matters of taste about how social media is supposed to work. It&rsquo;ll be interesting to see what meta-norms take hold among the instance owner/moderator class, which wields a huge amount of power over your individual experience on an instance-by-instance basis.</p>
<p>I&rsquo;m curious about how Twitter will pan out, but it has not really been anything more than a publishing endpoint to me over the past few years. It creates a little friction because I start most of my social content from micro.blog, but if I want to spare people on Twitter a click-through, I have to watch the character count, because north of 270 and it&rsquo;s best to just give a micro.blog post a title and make it a standard blog entry. But I probably didn&rsquo;t start writing thinking of it as a blog entry, so now maybe I can just expand this idea and &hellip; on and on. I can see pitching my content for Mastodon&rsquo;s character limit.</p>
<p>I also have some general beliefs about Twitter that leave me feeling just  fine if it becomes uninhabitable. As much as there&rsquo;s currently a sort of &ldquo;prison riot jubilee&rdquo; vibe in the air there, and as much as a few Notable Personalities are tentatively planting a flag in the fediverse, I know there are many, many influential people for whom Twitter is a major marketing outlet, and who have accrued a huge amount of status.</p>
<p>I was in online media during the early social era, and I witnessed and was part of the first stilted, clueless, awkward attempts among reporters to establish a social beachhead. I don&rsquo;t think they&rsquo;re going to easily decamp, and they&rsquo;re the ones who are going to decide whether to continue to legitimate Twitter or not, no matter what crabby people like me think.</p>
<p>For now, I&rsquo;m content to treat it as an end point I publish to. There are people who matter to me and for whom it is their primary social outlet, and I am long past my angry &ldquo;just get rid of your t.v.&rdquo; phase where Twitter and Facebook are concerned. But I do wish people would just get rid of that particular t.v. I believe it is harmful, and in a way that is deeper than the obvious &ldquo;problematic content appears there&rdquo; sort of way. I believe it harms the way we think about how to interact with each other and communicate ideas, partially as a result of its own limitations and partially as a result of norms that have grown up in the extended Twitter community that reinforce narrow, cramped perspectives.</p>
<p>Anyhow, not quite ready to delete my account. I do have it wired up to Semiphemeral, partially as a way to help me think of it as anything but home, partially because it&rsquo;s one less thing to irritate my preservationist impulses.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Pausing to consider smallness</title>
      <link>https://mike.puddingtime.org/posts/2022-11-08-pausing-to-consider/</link>
      <pubDate>Tue, 08 Nov 2022 10:54:17 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-11-08-pausing-to-consider/</guid>
      <description>&lt;div style=&#34;text-align:center;&#34;&gt;&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/ecbc504036.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Bread and Roses Market at night, Portland, OR&#34; /&gt;&lt;/div&gt;
&lt;p&gt;I appreciate omg.lol and micro.blog for making space for small things. The early web was like that. We can talk down GeoCities sites if we wish, but in GeoCities it was okay to be small and human. We lost that sense of the web as a place that was made up of humans &amp;hellip; a perpetual boom shot sweeping across an infinite small town with lights in all the windows. You can fly. You can stop to look at what you will, or move on. If you experience envy over anything you see, it is at least envy over the creativity, or skill, or passion bound up in someone&amp;rsquo;s little house.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<div style="text-align:center;"><img src="https://its.puddingtime.org/uploads/2022/ecbc504036.jpg" width="600" height="337" alt="Bread and Roses Market at night, Portland, OR" /></div>
<p>I appreciate omg.lol and micro.blog for making space for small things. The early web was like that. We can talk down GeoCities sites if we wish, but in GeoCities it was okay to be small and human. We lost that sense of the web as a place that was made up of humans &hellip; a perpetual boom shot sweeping across an infinite small town with lights in all the windows. You can fly. You can stop to look at what you will, or move on. If you experience envy over anything you see, it is at least envy over the creativity, or skill, or passion bound up in someone&rsquo;s little house.</p>
<p>Web 2.0 and then social media razed the small town and replaced it with a warehouse district. You pass through a metal door and there&rsquo;s a stomach-flip of vertigo as you stop being the person flying overhead, or stepping in off the sidewalk, and become a quantum of attentional value to be extracted, no longer anonymous and yet completely anonymized.</p>
<p>Twitter&rsquo;s Lovecraftian scale reduces us to that quantum, flickering in and out as the algorithm exhausts our attention then rekindles it to be extracted anew. It trains us to think that our egos are privileges we should aspire to, instead of animal legacies to shrug off. We&rsquo;re perpetually in the warehouse, and yet somehow remain on the sidewalk outside, looking through the window.</p>
<p>Facebook treats your impulse to cringe away from its algorithmic dissolution of your personhood by simulating connection. You get a stunted palette of responses: I acknowledge that, I love that, that angers me, and &ldquo;here&rsquo;s one unit of empathy as measured by the energy released with a click or a tap.&rdquo;</p>
<p>One thing it would be nice to take away from this current moment is a sense that there are ways to have the thing we were promised &ndash; more connection with more people, more sharing of ourselves, more awareness of our world &ndash; that don&rsquo;t involve treating us like an attentional vein of coal someone else can strip-mine.  Where we create small, warm spaces where we simply can be, loved around our hearth, esteemed in our village, welcomed in new places over the hill, tiny threads of lantern light lacing all our homes together.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A few Stage Manager notes</title>
      <link>https://mike.puddingtime.org/2022-10-30-a-few-stage/</link>
      <pubDate>Sun, 30 Oct 2022 17:00:51 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-10-30-a-few-stage/</guid>
      <description>&lt;p&gt;Things I like about Stage Manager on iPad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The basic concept. I made stacks for social networking and news apps, for instance, and that&amp;rsquo;s handy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The new window sizing controls. I prefer being able to grab an obvious corner and resize. I like dragging windows around to position them. I never quite got the hang of the previous multitasking gestures/behaviors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The little side dock or whatever it&amp;rsquo;s called. It feels fluid to zip in and out of stacks/apps and stuff being held over there. It works better in landscape than portrait, so I&amp;rsquo;m looking forward to when the Pros get the landscape oriented cameras and we can all agree Landscape is the Best Grip.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Things I like about Stage Manager on iPad:</p>
<ul>
<li>
<p>The basic concept. I made stacks for social networking and news apps, for instance, and that&rsquo;s handy.</p>
</li>
<li>
<p>The new window sizing controls. I prefer being able to grab an obvious corner and resize. I like dragging windows around to position them. I never quite got the hang of the previous multitasking gestures/behaviors.</p>
</li>
<li>
<p>The little side dock or whatever it&rsquo;s called. It feels fluid to zip in and out of stacks/apps and stuff being held over there. It works better in landscape than portrait, so I&rsquo;m looking forward to when the Pros get the landscape oriented cameras and we can all agree Landscape is the Best Grip.</p>
</li>
</ul>
<p>For times I have a keyboard attached, I&rsquo;m still fine with cmd-tab to cycle back and forth between apps (e.g. a note-taker and a browser), but sometimes cmd-tab is a little weird and I get in a cycle where I cmd-tab to the wrong app and it messes up the relationship of the two apps in the switcher. Just swiping in from the side and switching works pretty well.</p>
<p>So, all nice things.</p>
<p>What&rsquo;s not working so well:</p>
<ul>
<li>
<p>No gesture that I can discern for showing just the apps in the active stack. Given a stack with Twitter, Mastodon, and micro.blog, I would like a gesture that tiles them all as thumbnails and lets me tap the one I want to activate because &hellip;</p>
</li>
<li>
<p>There are no titles for active apps. Sooooome of the time I can tell which app is which based on a UI element peeking out from behind the active app. Much of the time there are cases where the apps are all too similar based on what&rsquo;s barely peeking out so I end up tapping around until I pick the right one. Maybe a long-press on a given bit of window that made a quick pop up with app and/or active document name? Or maybe a swipe-in-from-right to complement the way swipe-in-from-left shows the stacks dock.</p>
</li>
<li>
<p>I am struggling to understand the gestures related to sending a stack to the shelf. Right now, for instance, I am writing in micro.blog. If I swipe up from the bottom, micro.blog appears to minimize to Safari in the dock. But if I tap on Safari on the dock, Safari is what maximizes (which is correct, but why did micro.blog disappear into Safari&rsquo;s icon in the first place?) It may have something to do with how long I hold the gesture? Can&rsquo;t tell. Guess I need to go re-read and keep practicing.</p>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>An early management experience I should probably have posted on LinkedIn</title>
      <link>https://mike.puddingtime.org/2022-10-20-an-early-management/</link>
      <pubDate>Thu, 20 Oct 2022 09:50:10 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-10-20-an-early-management/</guid>
      <description>&lt;p&gt;&lt;em&gt;(Posted this elsewhere and felt like sharing more widely. -mph)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, when I enlisted I had the misfortune of not completing 13 correct army pushups during in-processing and I was shunted into a pre-Basic Training unit called the “Fitness Training Unit.” I completed 20 correct army pushups two days later (it had something to do with keeping my back straight), but there was no platoon to join for Basic Training for another three weeks.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><em>(Posted this elsewhere and felt like sharing more widely. -mph)</em></p>
<p>So, when I enlisted I had the misfortune of not completing 13 correct army pushups during in-processing and I was shunted into a pre-Basic Training unit called the “Fitness Training Unit.” I completed 20 correct army pushups two days later (it had something to do with keeping my back straight), but there was no platoon to join for Basic Training for another three weeks.</p>
<p>Because I was now a model of fitness with my 20 correct army pushups, and because I had to wait around three weeks to go to actual Basic Training,  and because I was a few years older than all the other soldiers, I was designated the unit’s platoon guide. The job mostly entailed making sure everyone did their chores, keeping the squad bay swept, wall lockers tidy and secured, and bunks made before formation every morning. Sometimes I escorted soldiers to sick call if they strained something.</p>
<p>As a reward, I was permitted to have one Country Time Lemonade from the vending machine in the drill sergeants’ day room each night. I was also permitted to write a community college term paper for one of the drill sergeants, who appreciated it but did later tell me he felt it prudent to add a few typos back in, since my journalism major seemed to be showing.</p>
<p>Anyhow, it was less lemonade and term papers, and more making sure everything was tidy. There was also a sting involving one of the soldiers from the Philippines and human trafficking.</p>
<p>One morning, one of the soldiers preferred to hang around chatting, so I went up to him and said “hey, you need to make your bunk before we go down to formation, or we’re all gonna get smoked and I’m gonna get yelled at by the senior drill.”</p>
<p>He told me to go fuck myself, so I repeated the request but added “can we not make this a problem?”</p>
<p>He leapt up from his bunk, assumed a sorta Bruce Lee stance, made a bunch of yipping Bruce Lee noises and launched a flurry of little kung-fu strikes in front of my face. I let him finish and said “okay, sure, could you now please make your fucking bunk?”</p>
<p>He started crying and then he made his bunk.</p>
]]></content:encoded>
    </item>
    <item>
      <title>story bundle is a great way to get bunches of ebooks for very little; Nickelmenu restores Dropbox on Kobo Libra 2’s</title>
      <link>https://mike.puddingtime.org/2022-08-18-story-bundle-is/</link>
      <pubDate>Thu, 18 Aug 2022 20:10:06 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-08-18-story-bundle-is/</guid>
      <description>&lt;p&gt;Today I learned about &lt;a href=&#34;https://storybundle.com/darksf&#34;&gt;Storybundle&lt;/a&gt; and was pretty excited to get a bunch of “dark sf” books for $25. I was bummed at the prospect of having to sideload them all into my new Kobo with a cable because Dropbox is disabled on the Libra 2. So I was also pretty excited to learn about &lt;a href=&#34;https://pgaskin.net/NickelMenu/&#34;&gt;Nickelmenu&lt;/a&gt;, which lets you reenable Dropbox on Kobos (among other things).&lt;/p&gt;
&lt;p&gt;Note: If you download Nickelmenu and your Mac decompresses the tarball, it’s not enough to just re-gzip it and leave it named *.tar.gz. You also have to rename it to *.tgz&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today I learned about <a href="https://storybundle.com/darksf">Storybundle</a> and was pretty excited to get a bunch of “dark sf” books for $25. I was bummed at the prospect of having to sideload them all into my new Kobo with a cable because Dropbox is disabled on the Libra 2. So I was also pretty excited to learn about <a href="https://pgaskin.net/NickelMenu/">Nickelmenu</a>, which lets you reenable Dropbox on Kobos (among other things).</p>
<p>Note: If you download Nickelmenu and your Mac decompresses the tarball, it’s not enough to just re-gzip it and leave it named *.tar.gz. You also have to rename it to *.tgz</p>
]]></content:encoded>
    </item>
    <item>
      <title>Some initial impressions of the Opal C1</title>
      <link>https://mike.puddingtime.org/posts/2022-08-15-some-initial-impressions/</link>
      <pubDate>Mon, 15 Aug 2022 13:32:14 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-08-15-some-initial-impressions/</guid>
      <description>&lt;p&gt;After some issues with delivery, my Opal C1 finally arrived. It is a pretty good product, but it exists in an odd nether-region between other fairly well executed webcams that cost less and just repurposing a mirrorless camera. I wouldn&amp;rsquo;t recommend it to people who don&amp;rsquo;t think of webcams as something fun to play with.&lt;/p&gt;
&lt;p&gt;Once I got a tracking number for it, I reinstalled my Fujifilm X-T4 using the new 23mm/f1.4 lens just to have something to index with. My daily driver for a while now has been an Elgato Facecam, which costs $100 less and provides a sharp, consistent picture that requires only a little fiddling during the day as the light coming through the window I face changes.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>After some issues with delivery, my Opal C1 finally arrived. It is a pretty good product, but it exists in an odd nether-region between other fairly well executed webcams that cost less and just repurposing a mirrorless camera. I wouldn&rsquo;t recommend it to people who don&rsquo;t think of webcams as something fun to play with.</p>
<p>Once I got a tracking number for it, I reinstalled my Fujifilm X-T4 using the new 23mm/f1.4 lens just to have something to index with. My daily driver for a while now has been an Elgato Facecam, which costs $100 less and provides a sharp, consistent picture that requires only a little fiddling during the day as the light coming through the window I face changes.</p>
<p>On initial test: Sharp video, nice controls. To disinterested observers who&rsquo;re just looking at your face on their screen and not really trying to understand what gear you might be using, it&rsquo;s pretty good. It is not at all better than $2,400 worth of mirrorless gear, but if you are reading this I imagine you guessed that would be so.</p>
<p>The product is touted as &ldquo;DSLR-like,&rdquo; which I believe simply means &ldquo;nice quality image with a lot of subject/background separation and <a href="https://en.wikipedia.org/wiki/Bokeh">bokeh</a> effects.&rdquo; It may also mean &ldquo;provides a lot of manual control,&rdquo; which the Opal does, but in this case it means &ldquo;there&rsquo;s a simulated aperture control and an exposure control knob, along with other image control options that are less a product of the &ldquo;single lens reflex&rdquo; part of dSLRs, but more a product of the &ldquo;digital&rdquo; part: saturation, vibrance, contrast, shadow/highlight tone.</p>
<p>Opal&rsquo;s engineers seem to get one thing others have not: Bokeh effects &ndash; that background blur that suggests a higher-end camera with a fast lens shot wide open&ndash; are better when they&rsquo;re a little greedier. A wide-open, fast lens will leave your ears out of focus. Opal&rsquo;s approach is better at managing that than, say, Zoom&rsquo;s. (But Mike, Zoom isn&rsquo;t a camera. That&rsquo;s right, but both approaches are done with software.) Opal&rsquo;s approach leaves a slightly stronger sense of the depth of field fading back, not just &ldquo;you&rsquo;re either blurred to some specific degree, or you&rsquo;re in focus.&rdquo; It even seems to understand how that blur would change as the subject turns their head from side to side. I also sort of like that the depth of field control is expressed as f-stop equivalents even if it&rsquo;s not <em>actual</em> aperture control and is actually just a scale of how blurred the background is.</p>
<p>It&rsquo;s still not perfect. If you hold your hand up to your ear, suddenly your ear shifts into focus, too, even though it was tastefully blurred a half-second earlier. If you shift around a little, the parts in the far background are briefly in sharp focus before the effect can catch up. It&rsquo;s subtle, but once you see it there is no unseeing it. I mean, of course that happens. It&rsquo;s an algorithm processing an image and responding to conditions, making a best guess at which part is the face and which part is a poster on the wall, not a piece of glass interacting with light. Still, good effort. Most people paying about as much attention as they <em>should</em> will think it looks &ldquo;dSLR-like.&rdquo;</p>
<p>The management software comes with a collection of Instagram-like effects/filters. Most of them are a little garish and overdone. One is very close to Fujifilm&rsquo;s Eterna, and I like that one. I never use &ldquo;touchup&rdquo; effects, but tried Opal&rsquo;s out. It isn&rsquo;t bad. You have to really crank it up to get the bad glamour-shot effect. But you can just use that Eterna-like preset for pleasing contrast, neutral colors, and a dampening of reds/pinks to help with complexion issues while still looking natural.</p>
<p>You can choose between setting a preset amount of zoom for purposes of cropping, or turning on a face-follow feature. I part ways with the Opal software team on this: The face following feature wants to leave an uncomfortable amount of space over the subject&rsquo;s face, so you end up sort of rising up from the bottom of the screen instead of following the more contemporary headshot practice of cropping out just a bit of the top of the head.</p>
<p>Besides all the image handling stuff, Opal touts its mic, which I don&rsquo;t think transcends &ldquo;okay:&rdquo; The sound is clear and bright, but it still has a level of reverb that isn&rsquo;t too pleasing and will still contribute to the exhaustion people feel with Zoom. Opal focuses more on noise cancellation than cleaning up that &ldquo;bouncing off the walls and ceiling&rdquo; sound. My Jabra 75 boom mic runs rings around it even if I look like an air traffic controller wearing it. If you hoped this would save you purchasing a dedicated headset or mic, it will not. (Seriously, even ear buds are better than the default laptop or monitor mic most of the time, provided you don&rsquo;t forget and let the mic slide down into a fold of clothing or bump against a zipper/buttons.)</p>
<p>Oh, finally, it does have some cute features, like cutting video if you make a peace sign or toggling face lock if you make a pinching gesture. If you cut the video, the only way to get it to come back on is to open the camera control software and find the active video toggle, so if you&rsquo;re one of those &ldquo;dip in and out of view&rdquo; people who pops back in when talking, be ready for that.</p>
<p>So, you know, tl;dr:</p>
<ul>
<li>Not as nice as a mirrorless camera, even with a kit lens</li>
<li>Nicer than most built-in laptop cameras.</li>
<li>About as nice as my Elgato Facecam, which does less fancy stuff but looks about as good.</li>
<li>The mic is better than the default laptop mic, but you probably shouldn&rsquo;t use either.</li>
<li>Not so much better than some other 4k webcams out there that I&rsquo;d recommend the added expense at this point. I bought it because I love cameras. I won&rsquo;t return it because I&rsquo;m curious to see how Opal iterates and improves. I don&rsquo;t think most people should buy it. The Elgato Facecam is about as good and the Logitech Brio is right up there minus some driver issues on the Mac (IME &ndash; others haven&rsquo;t had the same issues I have.)</li>
</ul>
<img src="https://its.puddingtime.org/uploads/2022/933da12328.png" width="276" height="600" alt="" />
]]></content:encoded>
    </item>
    <item>
      <title>The Kobo Libra 2 is pretty great</title>
      <link>https://mike.puddingtime.org/2022-08-10-the-kobo-libra/</link>
      <pubDate>Wed, 10 Aug 2022 19:16:30 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-08-10-the-kobo-libra/</guid>
      <description>&lt;p&gt;If you haven’t gone Kobo yet, I’m back to re-recommend having upgraded my Forma to a Libra 2. Same basic form factor and physical buttons, but the Libra 2 is way faster and the buttons are less mushy. Also charges with USB C at long last.&lt;/p&gt;
&lt;p&gt;Kobo ecosystem pluses remain amazingly good integration with Overdrive (super smooth with Multnomah County’s library) and a decent Pocket integration.&lt;/p&gt;
&lt;p&gt;One downside: the Dropbox integration seems to be gone, which was a great way to side load ebooks purchased direct from the publisher (small presses with bad distribution reach). Luke Savage’s &lt;em&gt;The Dead Center&lt;/em&gt;, which I’ve been anticipating for months and months, isn’t readable until I do something barbaric, like use a cable to connect to a computer.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>If you haven’t gone Kobo yet, I’m back to re-recommend having upgraded my Forma to a Libra 2. Same basic form factor and physical buttons, but the Libra 2 is way faster and the buttons are less mushy. Also charges with USB C at long last.</p>
<p>Kobo ecosystem pluses remain amazingly good integration with Overdrive (super smooth with Multnomah County’s library) and a decent Pocket integration.</p>
<p>One downside: the Dropbox integration seems to be gone, which was a great way to side load ebooks purchased direct from the publisher (small presses with bad distribution reach). Luke Savage’s <em>The Dead Center</em>, which I’ve been anticipating for months and months, isn’t readable until I do something barbaric, like use a cable to connect to a computer.</p>
<img src="https://its.puddingtime.org/uploads/2022/254075a385.jpg" width="600" height="600" alt="" />
]]></content:encoded>
    </item>
    <item>
      <title>A little on the Ricoh GRIII X and light hiking carry</title>
      <link>https://mike.puddingtime.org/2022-07-19-a-little-on/</link>
      <pubDate>Tue, 19 Jul 2022 09:18:10 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-07-19-a-little-on/</guid>
      <description>&lt;p&gt;I took my Ricoh GRIII X along for this past weekend&amp;rsquo;s camping trip. Usually I go with my Fujifilm X-T4 and a few lenses, depending on what I expect to see.&lt;/p&gt;
&lt;p&gt;This camping season I went looking for a pack a little lighter than the Osprey hydration backpack I&amp;rsquo;ve been using for a while now: I like to be able to keep my GPS, spare batteries, and multi-tool where I can just grab them without having to take my pack off. Finding something that had accessible storage and a hydration pack took me into the realm of &amp;ldquo;operator cultural&amp;rdquo; tactical goop I wouldn&amp;rsquo;t be caught dead wearing, but I must have been using bad keywords because I just happened to walk into an REI and see their hydration vest for much less than the overpriced tactical wannabe stuff, and with exactly the kind of storage I was hoping for.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I took my Ricoh GRIII X along for this past weekend&rsquo;s camping trip. Usually I go with my Fujifilm X-T4 and a few lenses, depending on what I expect to see.</p>
<p>This camping season I went looking for a pack a little lighter than the Osprey hydration backpack I&rsquo;ve been using for a while now: I like to be able to keep my GPS, spare batteries, and multi-tool where I can just grab them without having to take my pack off. Finding something that had accessible storage and a hydration pack took me into the realm of &ldquo;operator cultural&rdquo; tactical goop I wouldn&rsquo;t be caught dead wearing, but I must have been using bad keywords because I just happened to walk into an REI and see their hydration vest for much less than the overpriced tactical wannabe stuff, and with exactly the kind of storage I was hoping for.</p>
<p>The vest comes with a 1.5 liter bladder, some lightweight external tie-down points/cords good for keeping a sweatshirt or sweater handy, four stretchy mesh pockets big enough to hold a GPS or phone each, and one zipper pocket on the chest that can store a phone and wallet.  There&rsquo;s a small main storage area I used to hold light rain pants and a self-storing rain jacket early in the season, with enough room left over for a few power bars or a paper map or trail book. There are adjustable shoulder straps and two sternum straps that allow you to get it snugged down without feeling too tight.</p>
<p>For our 15.5 mile hike up and down Mt. Bailey, I stored my Garmin InReach Mini tracker, a Leatherman Signal, my iPhone (which has a symbiotic relationship with the InReach), and some batteries. I carried along my X-T4 on a shoulder strap. It was fine because  I wanted the big glass of my X-T4&rsquo;s 10-24mm lens for the scenery.</p>
<p>For this past weekend&rsquo;s shorter, easier trip, I wanted to have a little less camera along, so I kept the same load as last time, but swapped in the GRIII X as my camera. I have it on a Peak Design Leash. It fit perfectly in the remaining mesh pocket.</p>
<p>The GRIII series is a little ergonomically weird for a Fujifilm person. Like a lot of small compacts, it doesn&rsquo;t have a lot of single-purpose controls and for some functionality you have to &ldquo;chord&rdquo; by holding down one button while you turn a dial, or press something in then use a rocker to move around inside the resulting menu.</p>
<p>On the other hand, it has perfectly serviceable aperture and shutter priority modes, which put those respective controls right under your finger, and exposure comp is the primary function of another control.</p>
<p>The small-camera ergonomics take a little getting used to, but I feel somewhat fluent after several months. I&rsquo;ve also come to love a few things about it:</p>
<ol>
<li>
<p>The Ricoh mobile app is so much better than Fujifilm&rsquo;s I don&rsquo;t even know where to start. I would never, ever attempt to download a raw photo from a Fuji camera. This weekend I was able to just sit at the picnic table and run a few raw photos through Lightroom on my iPhone.</p>
</li>
<li>
<p>The Snap Focus feature is great for hiking. Just dial in a decent aperture and point-and-shoot. If you need to get in close or aren&rsquo;t sure of the focus zone, just override with a tap on the screen to set the AF point.</p>
</li>
<li>
<p>I bought the accessory optical viewfinder, which pairs well with Snap Focus in sunny conditions.</p>
</li>
</ol>
<p>If I had to choose between the GRIII X and the Fujifilm X100V, it&rsquo;d be a tough call. The X100 series aligns with deep-seated preferences, but it is not so &ldquo;compact&rdquo; that you can carry it differently from a full ILC. The GRIII is a little less easy to manually control, but Snap Focus and the optical viewfinder make it a great street camera. Also, it can literally fit in a front pocket (for most men&rsquo;s clothing). If Fujifilm either made the focus ring on the X100 series easier to use for zone focusing or just added a snap focus feature, I&rsquo;d probably forgive the extra bulk but would miss being able to stick an APS-C camera in my pants pocket or in my trail vest.</p>
<p>Also, if you&rsquo;re a Fujifilm partisan and think you could get the bulk of the GRIII&rsquo;s benefit with an XF-10, forget it. You can&rsquo;t. That&rsquo;s delusional. I don&rsquo;t know what they were thinking making that thing, but the cameras don&rsquo;t compare.</p>
<p>If I could fix one thing about the Ricoh, it&rsquo;d be to add weather sealing. Once rain is back in the picture, the X100V will come back out, size tradeoffs and all.</p>
<img src="https://its.puddingtime.org/uploads/2022/7748d3e52f.jpg" width="600" height="515" alt="" />
]]></content:encoded>
    </item>
    <item>
      <title>Never enough red pills in this present moment</title>
      <link>https://mike.puddingtime.org/2022-07-08-never-enough-red/</link>
      <pubDate>Fri, 08 Jul 2022 21:57:44 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-07-08-never-enough-red/</guid>
      <description>&lt;p&gt;This is pretty fun. Noam Chomsky and Michel Foucault debating each other in 1971,  defining some of the key tensions on the left today:&lt;/p&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/xpVQ3l5P0A4&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;Just, cool: Chomsky&amp;rsquo;s earnest &amp;ldquo;you have to start somewhere&amp;rdquo; anarchism and Foucault&amp;rsquo;s suggestion that you will never take enough red pills. Chomsky&amp;rsquo;s insistence that a journey of 1,000 miles starts with one footstep, Foucault&amp;rsquo;s gleeful wallowing in Zeno&amp;rsquo;s Paradox.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This is pretty fun. Noam Chomsky and Michel Foucault debating each other in 1971,  defining some of the key tensions on the left today:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/xpVQ3l5P0A4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>Just, cool: Chomsky&rsquo;s earnest &ldquo;you have to start somewhere&rdquo; anarchism and Foucault&rsquo;s suggestion that you will never take enough red pills. Chomsky&rsquo;s insistence that a journey of 1,000 miles starts with one footstep, Foucault&rsquo;s gleeful wallowing in Zeno&rsquo;s Paradox.</p>
<p>Also pretty good: The recent Jacobin podcast interview with Gary Gerstle, author of <em><a href="https://www.goodreads.com/book/show/58986869-the-rise-and-fall-of-the-neoliberal-order">The Rise and Fall of the Neoliberal Order</a></em>:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/XnvpdCPeIJU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>It&rsquo;s tempting sometimes to think that everything is just very <em>now</em> and can&rsquo;t possibly have anything to do with some vague <em>back then</em>. But you&rsquo;re always hearing the echoes of or living through the death throes of <em>something</em> from that vague back then.</p>
<p>These two videos pair well. The neoliberal left loves the cultural trappings of resistance that Chomsky outlines, but despises any analysis that argues our current order is anything other than liberatory, preferring to channel desire for more or other into consumption. And it abuses Foucault to paralyze any conception of liberation that tries to transcend the market or consumption.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Book note: Elite Capture by Olúfẹ́mi O. Táíwò</title>
      <link>https://mike.puddingtime.org/posts/2022-06-20-elite-capturehttpsmicroblogbooks-by/</link>
      <pubDate>Mon, 20 Jun 2022 10:50:02 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-06-20-elite-capturehttpsmicroblogbooks-by/</guid>
      <description>An attempt to reconcile the identity politics of the Combahee River Collective with the materialist left. Probably something to bother everyone in there.</description>
      <content:encoded><![CDATA[<p>This is one of those &ldquo;mention advisedly&rdquo; book summaries because there is something in this book for everyone to be unhappy about:</p>
<p>People on the identity left will not like the observation that some of the most strident voices in their faction are performing something that manages to look like self-abrogation while preserving their economic privilege and social status. People on the socialist left will be resistant to any attempt to reclaim or redeem identity politics and standpoint epistemology. Jacobin has already published <a href="https://jacobin.com/2022/05/elite-capture-identity-politics-philosophy-olufemi-taiwo">an uneasy review</a> arguing, more or less, that identity politics have always been an elite preoccupation. It is also a pretty circumlocutious piece of writing that reminds me how much &ldquo;political writing&rdquo; is a vehicle for assorted cultural battles.</p>
<p>Táíwò tries to thread the needle between these two camps and I welcome the effort.</p>
<p>It&rsquo;s a thin book that mostly serves to flesh out <a href="https://www.thephilosopher1923.org/post/being-in-the-room-privilege-elite-capture-and-epistemic-deference">an earlier essay you can still find online</a>. You can try the essay out and decide whether you want a bit more of the same thesis in the book.</p>
<p>Whether it&rsquo;s the book or the essay, I recommend Táíwò&rsquo;s writing. Between him, the Fields sister&rsquo;s <em>Racecraft</em>, Barbara Ehrenreich&rsquo;s <em>Fear of Falling</em>, Catherine Liu&rsquo;s <em>The Virtue Hoarders</em>, and Thomas Frank&rsquo;s <em>Listen, Liberal!</em>, I&rsquo;ve spent the last year or so reading a lot of streams that could serve as tributaries to a river of left populism. These streams all exist in uneasy relationship to each other, sometimes making the contradictions of the several left tendencies uncomfortably obvious but all of them offering a piece of the puzzle.</p>
<p><a href="https://micro.blog/books/9781642597141">Elite Capture</a> by Olúfẹ́mi O. Táíwò</p>
]]></content:encoded>
    </item>
    <item>
      <title>What Remains of That Digital Declutter</title>
      <link>https://mike.puddingtime.org/posts/2022-05-28-what-remains-of-that-digital-declutter/</link>
      <pubDate>Sat, 28 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-28-what-remains-of-that-digital-declutter/</guid>
      <description>Back in March I started a digital declutter. There are lots of posts about how those things start, but not many about how it&amp;rsquo;s going. These are some things I have been doing that have helped me feel more focused and intentional.</description>
      <content:encoded><![CDATA[<p>In March I started a <a href="/purpose/2022/02/09/some-notes-on.html">digital declutter</a> inspired by Cal Newport&rsquo;s <em>Digital Minimalism.</em> I wanted to get rid of a bunch of unexamined habits and replace them with more intentional behaviors that supported the things that are important to me.</p>
<p>I started a long-form followup but realized that the form of the writeup was at odds with one of my goals when I share things, so instead I am offering a collection of habits I&rsquo;ve adopted and why.</p>
<h2 id="managing-the-phone">Managing the phone</h2>
<p>I keep my phone off first thing in the morning and for the last hour of the evening.  Will I feel resentful if I find myself answering a mail or Slack message before I&rsquo;ve even started my tea? Why give myself an opportunity to feel that way? I do fudge a little: Since I start each day with a walk, I check the weather first thing.</p>
<p>Instead of grazing social media, reading mail, or whatever, I read something unchallenging for 45 minutes or an hour at the end of the day. It helps me go to sleep with a quiet mind.</p>
<p>I put my phone away to eat. I keep my phone in my pocket when I&rsquo;m in line or in a waiting room. Instead, I try to spend the time on thinking about my food or what comes to mind instead. By doing this, I&rsquo;m also giving myself breaks during the day when I am simply calm and quiet.</p>
<p>I try to embrace boredom. Mobile devices, social media, and 24-hour news promise a world where we don&rsquo;t have to be bored. Boredom provides motive force. So when I find myself tempted to go to yet another news site or re-load my RSS reader, or whatever else, I ask myself what I could be <em>doing</em> that would serve some purpose or goal I&rsquo;ve identified. The more restless I feel and the more I wish I could find something to read or play with to still that restlessness, the more I try to lean on that question.</p>
<p>Sitting there with no outside inputs often causes me to have ideas. I try keep a small paper notebook and all-weather pen around as an inbox instead of my phone, so that when I jot down an idea that comes to me while I&rsquo;m sitting there thinking I don&rsquo;t have a reason to fall into grazing the phone.</p>
<h2 id="during-the-day">During the day</h2>
<p>I spend five minutes every morning writing down what I want to get out of each thing on my calendar. I jot down how I want to show up in every meeting: Supportive? Listening? Curious? Patient? Assertive? Directive? Those pre-notes are the start of my meeting notes, so I have a reminder right there when the meeting starts.</p>
<p>I try to limit my mail checks to beginning of the day, noon, and the end of the work day. I use Sanebox digests to help me with that: My inbox stays clear and the mail accumulates in a digest folder until I am ready to review the digest. I don&rsquo;t stick to this too rigidly, but on busy or hectic days it&rsquo;s helpful.</p>
<p>I&rsquo;ve broken RSS and general news consumption into two motions: Collecting things to read from the river of news, and reading them when I plan to read. That way I spend my decision-making capacity on picking a few things instead of grazing all of it, and I remind myself that reading is important to me and should have its own time.</p>
<p>I&rsquo;ve picked one newspaper and I subscribed to its daily &ldquo;Top <em>n</em> stories&rdquo; newsletter. I click through seldom. That&rsquo;s enough news.</p>
<p>I ask how what I mean to share or write about is helpful or useful to the people who will have to make a decision about reading it. I try to make any act of self-promotion into an exchange of value instead of a one-way sales-pitch, telling people <em>how did I do this, and what happened</em>, not <em>look at me, I did this thing.</em></p>
]]></content:encoded>
    </item>
    <item>
      <title>That Didn&#39;t Happen!</title>
      <link>https://mike.puddingtime.org/posts/2017-06-11-that-didnt-happen/</link>
      <pubDate>Thu, 19 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2017-06-11-that-didnt-happen/</guid>
      <description>I&amp;rsquo;ve got a life-long habit of spinning up virtual people and arguing with them, which is to say a life-long habit of telling stories to myself that aren&amp;rsquo;t true. It&amp;rsquo;s tough to break, and I haven&amp;rsquo;t broken it. But I&amp;rsquo;ve added a little thing to the loop.</description>
      <content:encoded><![CDATA[<p>So, I had to talk about something difficult recently. How do you do
that? I mean, &ldquo;you the reader,&rdquo; not me. I know how I do it, and why.</p>
<p>I&rsquo;m an introvert. For my purposes that means a couple of things:</p>
<p>Being around a lot of people doesn&rsquo;t charge me up. Being 1:1 with
someone, or in a small group, can. I&rsquo;m not sure how typical that is of
my kind, but I know my favorite parts of the work day are with &ldquo;my
people&rdquo; in 1:1s, or with my managers. Big meetings are hard. Big social
events are hard.</p>
<p>The other thing it means is that I&rsquo;m not comfortable with a lot of
spontaneous expression. I&rsquo;m an <a href="http://www.coachingclarity.org/2013/03/11/internal-vs-external-thinkers/">internal processor</a>.</p>
<p>So, when I think I&rsquo;ve got to have a hard conversation with someone, I
think about it a lot beforehand. I used to joke that I spent my morning
commute spinning up virtual instances of people I needed to talk to so I
could think through a few possible conversational directions. I though
it was sort of cute to say that, but I don&rsquo;t think it really leads to a
good outcome.</p>
<h2 id="pre-gaming-considered-harmful">Pre-gaming Considered Harmful</h2>
<p>I mean, it&rsquo;s okay to decide you&rsquo;re going to think about what you want to
say to someone before you say it, especially if carelessness with your
words could hurt them. That&rsquo;s fine. We should all do that. We have these
little phone rooms at work that are barely big enough for a chair, and I
sometimes go into them a few minutes before I need to talk to someone
about something that matters a lot and think through what I&rsquo;m going to
say. Sometimes I even write it down in a text file. I take deep breaths
and close my eyes and settle down into myself.</p>
<p>The &ldquo;think about what you&rsquo;re going to say&rdquo; strategy begins to fail when
you imagine what you&rsquo;re going to say and <em>then</em> imagine them saying
something back, and then what you&rsquo;d say to <em>that</em> and then what they
might say back to <em>that</em>, etc. etc.</p>
<p>It took two things to help me realize the problem there.</p>
<p>The first was that one day, in the middle of a period where I wasn&rsquo;t
sleeping much, I realized how badly the lack of sleep was affecting my
perception of things around me. Passing comments suddenly seemed like
they might be insults. <a href="https://en.m.wikipedia.org/wiki/Hanlon's_razor">Hanlon&rsquo;s Razor</a> sort of went out the window.</p>
<p>So I had a pretty good fix for that: On mornings when I&rsquo;d gotten little
sleep &ndash; less than six-and-a-half or seven hours &ndash; I&rsquo;d spend a few
minutes on my commute thinking about that and what it meant. I&rsquo;d talk to
myself on my bike:</p>
<p>&ldquo;You didn&rsquo;t get a lot of sleep last night. You&rsquo;re going to be feeling a
little paranoid and on edge. You&rsquo;re going to want to take offense at
things people say to you. You&rsquo;re not going to be seeing things
correctly.&rdquo;</p>
<p>Then I&rsquo;d get into work and try to remember to talk to myself about that
a few times over the course of the day.</p>
<p>Things started to roll off my back more easily. It was nice.</p>
<p>It also started making those little conversations with virtual people go
down better. I stopped anticipating the worst, or when I would
anticipate the worst I&rsquo;d remind myself that I wasn&rsquo;t very well rested.
I&rsquo;d make a little joke to myself to spin that instance down and bring up
another one and try again anticipating better behavior.</p>
<p>You&rsquo;re thinking about the ways in which that&rsquo;s still broken, but this is
my story of self-discovery, so either skip ahead or quit reading.</p>
<p>Anyhow, that was my little hack that made difficult conversations with
virtual people in my head go better.</p>
<p>I didn&rsquo;t get the second piece until I went off to a sample training for
a program called <a href="http://conscious.is">Conscious Leadership</a>.</p>
<h2 id="meeting-conscious-leadership">Meeting Conscious Leadership</h2>
<p>If I had to describe Conscious Leadership in a nutshell, I&rsquo;d say that it
takes a lot of thinking around mindfulness and tries to make it work in
a business context. If you&rsquo;re at home with Zen Buddhism, you&rsquo;d hear some
things that are familiar to you.</p>
<p>I could go on and one about Conscious Leadership. I&rsquo;ve given copies of
the book <em><a href="https://www.amazon.com/15-Commitments-Conscious-Leadership-Sustainable-ebook/dp/B00R3MHWUE">The 15 Commitments of Conscious Leadership</a></em> to managers
who work for me and people I care about. I use its language in my daily
living, and I measure myself against its standards.</p>
<p>The way it helped me in this specific instance was that it reminded me
of how easily we can get pulled into the stories we create around
things, and how we should always strive to take a story we&rsquo;re telling
ourselves and &ldquo;explore the opposite.&rdquo; Expressed as a commitment to
sustainable behavior, the Conscious Leadership people put it like this:</p>
<blockquote>
<p>I commit to seeing that the opposite of my story is as true as or
truer than my original story. I recognize that I interpret the world
around me and give my stories meaning.</p>
</blockquote>
<p>I realized the ways in which my virtual instances were just stories I
was telling myself. I&rsquo;d made a certain peace with the worst aspects of
them by taking care to remind myself of the times when I wasn&rsquo;t well
rested and was making the stories worse, but I was still just making up
stories and arguing with them.</p>
<p>The thing is, as an introverted internal processor, it was pretty easy
for me to slip into those conversations with virtual people in the
process of just trying to figure out how to say what I wanted to say
when I felt a conversation was particularly important.</p>
<p>I had to pick up a new habit, which is really what this whole post is
about.</p>
<h2 id="a-walk-on-the-beach">A walk on the beach</h2>
<p>So, I went camping. On the last morning we were at the park I woke up
pretty early and took my camera and went for a beach walk. I set out
thinking I&rsquo;d go down to the jetty, a few miles down the beach.</p>
<p>I hadn&rsquo;t meant to spend much time thinking about things and mainly hoped
to just take pictures, but there wasn&rsquo;t a ton to shoot and I knew I was
going to have to talk about something difficult, so I lapsed into
thinking about that conversation, and that meant I started arguing with
a virtual person. Because I was thinking about a difficult conversation,
it got increasingly negative and fraught.</p>
<p><img src="/images/2020/74f363e961.jpg" alt=""></p>
<p>I caught myself doing it and got really frustrated, because I <em>know</em> I&rsquo;m
not supposed to do that. So I&rsquo;d stop for a few minutes and think about
other things, but then I&rsquo;d fall back into it.</p>
<p>Then I remembered how I coached myself about being under-rested, and
took a page from that practice.</p>
<p>As I made my way down the beach, each time I&rsquo;d get into an argument with
that virtual person, rather than getting frustrated and beating myself
up, I&rsquo;d just stop and say out loud &ldquo;this isn&rsquo;t happening. That didn&rsquo;t
happen. You didn&rsquo;t say those things.&rdquo;</p>
<p>Conscious Leadership advocates moving your body when you&rsquo;re feeling
something strong and need to process it, or see it differently, so I&rsquo;d
shake myself a little, too.</p>
<p>Reader, it felt pretty good.</p>
<p>By the time I&rsquo;d made it to the jetty, miles down the beach, I was
smiling to myself because I knew what I needed to say. I knew it miles
back down the beach. I&rsquo;d just fallen into my old habit of wanting to
think it all the way through, to know just what to say to each possible
response or argument.</p>
<p>And of course the conversation went fine, anyhow. They usually do. I pay
attention to people and how they&rsquo;re feeling, and I&rsquo;m careful in the
initial framing and get things off on the right foot, so just taking the
care at the onset is usually enough. When it&rsquo;s not, well &hellip; I stay calm
in the pocket, too.</p>
<p>Since then, though, I&rsquo;ve been using that practice a lot, and it is
incredibly helpful. I&rsquo;m an introvert! I think about what I want to say
to people before I say it! I&rsquo;ve got a life-long habit of spinning up
virtual people and arguing with them, which is to say a life-long habit
of telling stories to myself that aren&rsquo;t true. It&rsquo;s tough to break, and
I haven&rsquo;t broken it. But I&rsquo;ve added a little thing to the loop: When I
catch myself doing it, I say to myself, &ldquo;that didn&rsquo;t happen&rdquo; and it has
made me feel lighter and happier each time. I think to myself &ldquo;I don&rsquo;t
really know what they might say, but they didn&rsquo;t say that, and they
could say something completely different. You&rsquo;ll just have to find out.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to Listen to People</title>
      <link>https://mike.puddingtime.org/posts/2022-05-03-how-to-listen-to-people/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-03-how-to-listen-to-people/</guid>
      <description>Once you make the shift from being a fixer who has all the answers to a leader who listens like they don&amp;rsquo;t know the answer, you can build trust with the people you want to help.</description>
      <content:encoded><![CDATA[<p>I spent a year as the engineering site lead for Puppet’s Portland office. During that time it was my job to be the executive point of contact for any engineer, designer, or writer in our software development group. That meant that I was spending a lot of time fielding issues people were having with their team lead, line manager, or director; or I was trying to unkink operational gaps.</p>
<p>I’d always considered myself a good listener, but came to realize that perhaps I wasn&rsquo;t an <em>effective</em> listener.</p>
<p>I went into that year as more of a fixer, imagining that my job was to give advice, or take care of problems for people if they couldn&rsquo;t follow my advice. As the year progressed, the way I assessed my own effectiveness as a leader and a listener evolved. I spent less time giving advice, I measured the success of a given interaction by how much less I said than the previous one, and I shifted from offering to intervene to offering help with developing a strategy for a difficult situation or conversation the person I was listening to needed to handle for themselves.</p>
<p>Every now and then, you come across a phrase that helps you make a shift. That year, I came across this one:</p>
<p><em>&ldquo;Listen like you don&rsquo;t know the answer.&rdquo;</em></p>
<p>I once had a boss who always anticipated the problem I was bringing to him, finishing my sentences then jumping to his personal playbook to offer a solution. Because his playbook was <em>his</em> playbook, built up over years of him solving problems with the gifts and tools particular to him, it didn&rsquo;t do me a lot of good.</p>
<p>The great thing about that relationship was that I eventually learned to say, &ldquo;I don&rsquo;t think that will work for me,&rdquo; and I&rsquo;d explain why, and he&rsquo;d settle into a more constructive, conversational mode, helping me break down the problem and figure out how to solve it in a way that worked for me.</p>
<p>When you&rsquo;re in the listening leader role in a conversation, you become a lot more accessible when you listen without judgement, or without conveying the sense that you&rsquo;ve seen and done it all, or that the problem someone is experiencing is trivial.</p>
<p>Over that year, I developed a set of principles. After moving on from that role, a senior leader in the company came to me and told me that people had told him they considered me an effective listener, so he asked me to give a presentation for other managers.</p>
<p>Below is an outline of that presentation.</p>
<h3 id="people-deserve-to-know-their-choices-focus-on-that-instead-of-fixing-things">People deserve to know their choices. Focus on that instead of fixing things. </h3>
<p>Nobody likes it when people who do good work leave, and some people don&rsquo;t even like it when people who do mediocre work leave. During a time when there&rsquo;s a lot of focus on attrition or concern about morale, people will sometimes soft-pedal bad news, avoid making hard decisions, or try to defer unpleasant or hard conversations to keep everybody happy. </p>
<p>When you do that, though, you&rsquo;re just kicking the can down the road and possibly withholding what people who are genuinely unhappy need to get &ldquo;escape velocity,&rdquo; make a decision, and move on. </p>
<p>Don&rsquo;t withhold in the hopes they&rsquo;ll just calm down for a while. If they&rsquo;re faced with a situation that simply isn&rsquo;t going to change, they should know that, whether it&rsquo;s &ldquo;that&rsquo;s not how we work here anymore,&rdquo; or &ldquo;we&rsquo;ve made that decision and aren&rsquo;t revisiting it.&rdquo; </p>
<p>Anything less is just allowing them to stay in a state where they think something will change that won&rsquo;t, and it&rsquo;s keeping them from making a better decision than &ldquo;hang around until the thing I hate goes away.&rdquo; </p>
<h3 id="youre-having-these-conversations-because-there-are-strains-in-relationships-and-you-should-be-working-to-make-those-relationships-whole-again">You&rsquo;re having these conversations because there are strains in relationships, and you should be working to make those relationships whole again</h3>
<p>Ideally, you&rsquo;re giving them someone to talk to, and encouraging them to take their problems to the person best equipped to solve them as they&rsquo;re able to get enough perspective to do so. You engage in constrained and discrete action or intervention as a last resort. </p>
<p>In other words, the interactions you&rsquo;re having with any given person aren&rsquo;t the desired end-state: It&rsquo;s an interim situation. </p>
<h2 id="some-rules">Some rules</h2>
<h3 id="you-have-to-sit-and-listen">You have to sit and listen</h3>
<p>It&rsquo;s tempting to come to think of yourself as a fixer, whether it&rsquo;s of a broken manager/report relationship, a system or process, or even just someone&rsquo;s faulty perspective. </p>
<p>When someone first agrees to sit down with you and tell you what&rsquo;s going on, though, the thing they&rsquo;ve asked you to do in that moment is listen. They might ultimately want you to fix something, and the hope that you&rsquo;ll fix something is probably part of why they&rsquo;re sitting there talking to you, but in that moment the thing they want you to do is listen. Their problem probably feels unique to them, in the particulars if not as a general kind of problem. Something about it feels like it&rsquo;s outside their experience or ability to handle, or they&rsquo;re simply not sure what their expectations should be. </p>
<p>Just listening can be pretty hard. You might have some idea of what their problem is before they even begin to speak. You might be able to see where they&rsquo;re going before they get very far in to what they have to say. It&rsquo;s important to let them talk it out: They need to talk through their feelings and they&rsquo;ve asked you to help them do that. Sometimes they&rsquo;ll even talk themselves into a solution or end up better understanding what they want to ask for. </p>
<h3 id="you-dont-always-have-an-answer-and-you-need-to-admit-to-that">You don&rsquo;t always have an answer, and you need to admit to that</h3>
<p>Sometimes you don&rsquo;t know. It&rsquo;s okay to say you don&rsquo;t know and need to go learn more. </p>
<h3 id="you-have-to-learn-how-to-find-the-balance-between-acknowledging-their-feelings-and-being-part-of-a-management-team">You have to learn how to find the balance between acknowledging their feelings and being part of a management team</h3>
<p>Sometimes, you&rsquo;ll believe another manager made a mistake in their handling of a situation. The times that&rsquo;s obvious and clear-cut are pretty few. More often, there are a bunch of perspectives on the problem. In some ways, it just doesn&rsquo;t matter: Your primary function in the moment someone has brought a problem to you is to listen. (If they&rsquo;re reporting unsafe behavior or a violation of policy, you definitely need to escalate.)</p>
<p>It&rsquo;s still possible to show empathy and kindness without making comment on a colleague&rsquo;s decisions: </p>
<p>&ldquo;How did you feel when they said that?&rdquo;</p>
<p>&ldquo;How do you feel now?&rdquo;</p>
<p>&ldquo;I understand that didn&rsquo;t feel great. Looking at it from your perspective, I&rsquo;m not sure I&rsquo;d like that either.&rdquo; </p>
<h3 id="you-cant-ambush-your-colleagues-with-the-things-you-learn">You can&rsquo;t ambush your colleagues with the things you learn</h3>
<p>To most good managers, having a good understanding of the dynamics on their team and the state of the people on the team is essential to their professional self-respect. When it turns out they&rsquo;ve missed a situation, or they&rsquo;ve just learned that one of their folks is having problems without bringing it to them first it can feel embarrassing. </p>
<p>One way to make sure people are in a good place to take in what you&rsquo;ve learned about a situation on their team is to share it with them discreetly, not around a meeting table where they&rsquo;re hearing about a problem at the same time as everybody else. If you use information you have about their team dynamics or one of their employees to show them up or contradict them, all you&rsquo;re doing is creating resistance to finding a solution. </p>
<h3 id="youre-listening-to-everybody-but-you-have-a-network-and-need-to-acknowledge-that">You&rsquo;re listening to everybody, but you have a network and need to acknowledge that</h3>
<p>Even if you&rsquo;re touching base with a lot of people, you probably have a few people you talk to most. They&rsquo;ve got a particular perspective and while they may be pretty key and influential people, it&rsquo;s still just their perspective you&rsquo;re hearing. </p>
<p>When asked &ldquo;what&rsquo;s going on on the floor,&rdquo; acknowledge that: &ldquo;The folks I&rsquo;m closest to are saying this but I&rsquo;ve also heard that.&rdquo; </p>
<h2 id="a-workflow">A Workflow</h2>
<p>When someone needs to talk, there are a few things you have to do: </p>
<h3 id="listen">Listen</h3>
<p>Just listen. Try not to say much outside the usual &ldquo;active listening&rdquo; stuff:</p>
<p>&ldquo;What did you do next?&rdquo;</p>
<p>&ldquo;What went through your head when you heard that?&rdquo;</p>
<p>Stay off your phone and stay out of your laptop, or set an expectation (e.g. &ldquo;my son needs to call me from school this afternoon so I&rsquo;ll have to pick up my phone when I get a notification.&rdquo;)</p>
<h3 id="play-it-back">Play it back</h3>
<p>Once they&rsquo;ve told their story, playing it back to them in a few sentences shows them you were listening and helps ensure that you&rsquo;ve actually spotted the issue. You may have missed it, especially if you went into the interaction thinking you already knew what the problem was. </p>
<p>Just play it all back in a few sentences, and make sure you got it all:</p>
<p>&ldquo;What I heard was a, b, and c. Did I miss something in there?&rdquo; </p>
<h3 id="keep-your-own-emotion-out-of-it">Keep your own emotion out of it</h3>
<p>Sometimes people bring some stuff that&rsquo;s frustrating to hear. A lot of strong emotion from an authority figure can put people on high alert, or cause them to shut down. They&rsquo;re often afraid they&rsquo;re going to trigger some sort of reaction out of proportion to what they were hoping for. It&rsquo;s not wrong to show empathy, or say &ldquo;I can see how that would be upsetting,&rdquo; (or frustrating, frightening, etc.) but don&rsquo;t take on their emotions (that&rsquo;s bad for you) and don&rsquo;t make a big display of your own anger or frustration (they&rsquo;re there for help, not to watch you process your own emotion). </p>
<h3 id="let-them-know-what-they-can-expect">Let them know what they can expect</h3>
<p>I always make clear their story stays with me unless there&rsquo;s a policy, legal, or safety issue. Some managers don&rsquo;t like that, but it&rsquo;s one way to insulate the person doing the listening from being turned into a back channel: If the employee was hoping for that back channel, they know they won&rsquo;t get it. </p>
<h4 id="call-it-out-when-what-they-saw-was-wrong-or-unusual">Call it out when what they saw was wrong or unusual</h4>
<p>Sometimes, you&rsquo;ll learn of things that are plainly unprofessional or inappropriate. It&rsquo;s not wrong to offer an opinion. Just make clear that it&rsquo;s your opinion. </p>
<p>I once dealt with an employee whose manager a. claimed that there were secret criteria for being promoted that he couldn&rsquo;t tell her and she hadn&rsquo;t met; and b. told her teammates she wasn&rsquo;t mature enough for promotion. </p>
<p>I called those things out as a. untrue and b. inappropriate. I made clear that she had an expectation of confidentiality around performance conversations, and that the behavior wasn&rsquo;t normal.</p>
<h3 id="ask-for-permission-to-raise-the-issue-with-people-who-can-fix-it">Ask for permission to raise the issue with people who can fix it</h3>
<p>We don&rsquo;t want to be used as back channels for manipulation, and it also reassures people there asking for help with problems they can&rsquo;t resolve that they won&rsquo;t get someone in trouble or &ldquo;call down the thunder&rdquo; when they aren&rsquo;t even sure there&rsquo;s really a problem. </p>
<h3 id="set-expectations">Set expectations</h3>
<p>Tell them:</p>
<ul>
<li>Who you&rsquo;ll talk to, if they&rsquo;re okay with that</li>
<li>What you propose as a next step</li>
<li>What you&rsquo;ll do next</li>
<li>When they can expect to hear from you</li>
</ul>
<h3 id="follow-up-right-away">Follow up right away</h3>
<p>Let them know once you know something useful, whether that&rsquo;s &ldquo;this is fixed,&rdquo; or &ldquo;I can&rsquo;t do much more here, but here&rsquo;s who probably could &hellip;&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Notes on Fostering Equitable and Inclusive Behavior</title>
      <link>https://mike.puddingtime.org/posts/2022-05-03-notes-on-fostering-equitable-and-inclusive-behavior/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-03-notes-on-fostering-equitable-and-inclusive-behavior/</guid>
      <description>At the core of whatever we want to call this period of distributed work &amp;ndash; hybrid-remote, distributed, new normal, post-lockdown &amp;ndash; is a deep and essential need for more equitable and inclusive behavior in how we work and managers need to drive it.</description>
      <content:encoded><![CDATA[<p>At the core of whatever we want to call this period of distributed work &ndash; hybrid-remote, distributed, new normal, post-lockdown &ndash; is a deep and essential need for more equitable and inclusive behavior in how we work.</p>
<p>There are a lot of practices, tactics, perspectives, and playbooks on &ldquo;how to go remote&rdquo; or how to work in a hybrid environment, and there are examples of companies that run a relatively narrow playbook or embrace a few particular practices: Shifting to a written culture, promoting asynchronous work, assorted social interaction techniques to capture what is lost when the office falls away as the center of work life, decision-making techniques, etc. There is a definite case to be made that some of these techniques will work better or worse or take more or less change to succeed. But at the core of the issue in front of us is how we are going to bring everyone along in a distributed, hybrid environment in a way that honors the equity and inclusion we prize.</p>
<p>So let&rsquo;s start by admitting that behaving inclusively can be hard.</p>
<p>If you&rsquo;re a manager, you&rsquo;re probably thinking about your &ldquo;budget&rdquo; with your team: How much can you spend on introducing and supporting change?</p>
<p>If you&rsquo;re a senior or more tenured person on the team, you&rsquo;re used to things going a certain way, and don&rsquo;t always catch it when something your team does isn&rsquo;t working for someone else.</p>
<p>If you&rsquo;re brand new, it is daunting and hard to speak up when you feel left out, or think something needs to change.</p>
<p>If you&rsquo;re not part of the dominant group on a team &ndash; and enumerating the many ways people will feel that way about themselves is out of scope for this particular essay &ndash; you may feel like your perspective will simply be too alien to your teammates to share, or too frustrated from past attempts to share it to want to try again.</p>
<p>Even if everything aligns, and everyone agrees a change needs to be made, it requires <em>intentionality</em> to stick: There are habits to break, patterns to unlearn, and new behaviors to adopt.</p>
<p>Sometimes the things you have to do to be more inclusive &ndash; taking turns taking notes, or facilitating the meeting, or making sure everyone has had a chance to speak, or helping more talkative teammates tone it down while trying to draw out the more retiring ones or leave space for &ldquo;the people on the screen&rdquo; &ndash; aren&rsquo;t that easy to do: They feel awkward and uncomfortable. Sometimes they even put people in conflict because it is one thing to intellectually embrace the need for change, but quite another to actually make the change.</p>
<p>But these changes will not just happen. Your good intentions or desire to do better don&rsquo;t really matter. What matters is what you actually do.</p>
<h2 id="where-are-the-leaders">Where are the leaders?</h2>
<p>What&rsquo;s required in all this is leadership.</p>
<p>It is by now a business article cliché to note that managers are not necessarily leaders, and leaders are not necessarily managers. I am going to return to this in a second because it is true, important, and only so useful an observation to make.</p>
<p>Anyhow: What&rsquo;s required in all this is leadership.</p>
<p>Leadership, when we are talking about the problem of fostering inclusive behavior, can come from a lot of different places. It can be as simple as someone looking around, noticing that things aren&rsquo;t quite right &ndash; not everyone gets a turn to speak, or that not all ideas are heard, or that someone speaks much more than everyone else &ndash; and says something about it. Leadership is when someone simply volunteers to pick up the marker and turns the camera to make sure &ldquo;the people on the screen&rdquo; can see the whiteboard during a brainstorming session. Leadership is pointing out that some studies indicate &ldquo;brainstorming sessions&rdquo; don&rsquo;t actually work the way we think they do and proposing an alternative that actually works better when you can&rsquo;t all be in the same room. Leadership is when someone simply starts taking notes because nobody else is.</p>
<p>The most inclusively minded person I ever had on a team was not a manager. When we established a team norm that everyone, including the director, was to take a turn taking notes, he noted the times I missed meetings and made sure I took my turn when I did manage to make one. He was the one who would look around the table and ask someone who had been sitting quietly what they made of the topic. He was the one who warned me, in private after a meeting, that my profane tirade about a self-evidently backward department elsewhere in the building might have undermined peoples&rsquo; sense of safety.</p>
<p>Some people like to call this &ldquo;servant leadership,&rdquo; and that&rsquo;s fine. Reasonable arguments have been made that &ldquo;servant leadership&rdquo; is more a way to keep being the boss while presenting as self-effacing and humble, and I take their point. My favorite leader in the military always insisted on eating last when our unit was out in the field because it was the right thing to do &ndash; &ldquo;mission first, people always&rdquo; &ndash; but he did not need us to believe he was anything other than in charge.</p>
<p>Whatever kind of leadership you want to call it, if you have someone on the team regardless of their title or level who is simply getting out and pushing on inclusivity, even if it feels awkward or weird or makes people a little uncomfortable, that&rsquo;s the leader.</p>
<p>Given that model of leadership &ndash; that it&rsquo;s the person who simply does the needful when nobody else is &ndash; there&rsquo;s sort of a resourcing problem: Leaders like that can be thin on the ground.</p>
<p>There are a lot of reasons for that scarcity.</p>
<p>Sometimes teams are too comfortable with old patterns. Sometimes the manager or leadership or loudest voices are resistant to change and try to shut it down. Sometimes everyone is just suffering in silence, or stuck in a feedback loop of escalating poor behavior because everyone is struggling to be heard over everyone else&rsquo;s attempts to be heard. Sometimes teams are so homogenous that they simply cannot understand that not everyone thinks like them, or &ndash; as I once saw &ndash; believes it best to simply put the &ldquo;different people&rdquo; together so they&rsquo;ll &ldquo;be more comfortable.&rdquo; The &ldquo;they&rdquo; is ambiguous there. The &ldquo;different people&rdquo; were definitely not more comfortable, so I think it was the team that put them on the island that was seeking comfort.</p>
<p>Another set of problems comes with simply being people in business, which often comes with a huge amount of overthought baggage around roles and responsibilities: Managers and assorted program or project managers or scrum masters aren&rsquo;t sure who&rsquo;s really running the meeting, or have conflicting mental maps of who delegated what authority to whom in what team context. If the process czars have been loose in the org, there may be a paralyzing amount of ritual or reporting that tolerates no deviation, no room to breathe, no room to challenge. Team retrospectives may be heavily focused on little process fixes, because those things are easier to talk about than whether the team is fundamentally fair and inclusive in its behavior.</p>
<p>All those things &ndash; sour team dynamics and weird corporate hangups about who&rsquo;s in charge &ndash;  impede the development of leadership or the growth of leaders because they are all kinds of headwind, or extra gravity to transcend.</p>
<h2 id="bootstrapping-leadership">Bootstrapping leadership</h2>
<p>This is where I am going to return to the topic of management vs. leadership, because I&rsquo;ve got a dim view of how much leadership there is on the planet at any given time. It&rsquo;s a rare quality, made all the more rare by the extraordinary period we are living through. Isolation, disconnection, worry, sickness, and  trauma are all profoundly flattening, humbling things.</p>
<p>Nothing about being a manager, or a leader, makes you any less human or susceptible to those things. In some ways, they might even go double because leaders are often the ones picking others up and carrying them when they just can&rsquo;t go on. That isn&rsquo;t without cost.</p>
<p>So if nobody is stepping up and exhibiting natural, self-motivated leadership &ndash; if nobody is doing the needful and leading others toward inclusive practices &ndash; something has to happen to begin that cycle. In our case, I&rsquo;d argue that&rsquo;s managers.</p>
<p>Why?</p>
<p>Because they have power. Sometimes it is constrained. For instance, managers will often defer to scrum masters or program managers on issues of team practices, or allow the the lead engineer on a small team to drive a lot of the team&rsquo;s workflows and prioritization. But in our context, and in general, a manager who is not doing something in violation of policy or in a way that is shockingly misaligned with our values has plenty of power and can expect to be heard if there is a problem or even if they just think we need a change.</p>
<p>Further, managers have the most access to real power in the company, meaning the most senior leaders and the people running the administrative apparatus. They are first in line for company news, the first who are engaged with and enlisted to help during a major change, and they have the most privilege. They are, with some checks and balances in place, the arbiters of who gets to progress and who does not. Their word is taken when the question of someone&rsquo;s promotability is raised.</p>
<p>Despite having this power, there are some missing ingredients:</p>
<ul>
<li>Empowerment to drive equitable and inclusive behavior</li>
<li>Enablement</li>
<li>Accountability to deliver what they&rsquo;ve been empowered to drive</li>
</ul>
<p>In turn:</p>
<h3 id="empowerment">Empowerment</h3>
<p>Some people are great at simply driving change. They don&rsquo;t spend a lot of time asking around or forming commitees or what have you. They just see what they believe needs to be done and they do it. There&rsquo;s a tempation to ascribe this to corporate sorting hat &ldquo;personality type&rdquo; stuff, but it&rsquo;s also a function of leadership shifts,  changes in company culture, and rising or falling personal stock.</p>
<p>Other people are more retiring, or they&rsquo;ve been through enough changes (or failed attempts at change) that they&rsquo;re not so sure this is all going to work. They need some sense that if they implement a change or try something new, they will be supported. It is hard for some people to imagine, but sometimes being the manager is sort of disempowering: Someone on your team has more social juice than you, or enjoys a frequent 1:1 with your boss, or has the team&rsquo;s ear and sets a tone you find hard to counter.</p>
<p>To drive changes in behavior, managers need to believe that if they push their teams to make important changes, and that if they are working from a menu of best practices, they&rsquo;ll have support.</p>
<p>How do you give them that?</p>
<ul>
<li>You explain the changes you want to see or tell them the things you want them to care about.</li>
<li>You tell the organization the same thing and set expectations that managers have been told this stuff is important.</li>
<li>You model the behavior yourself. If a member of the SLT, a VP, or a director can&rsquo;t be bothered to do this stuff, why would a line manager expect to be supported?</li>
<li>You insist on measurement to make the point that this matters to you. Set goals, survey sentiment, measure change.</li>
</ul>
<h3 id="enablement">Enablement</h3>
<p>People don&rsquo;t always know how to do this stuff.</p>
<p>More homogenous teams tend to struggle because they have a level of personal comfort that has undermined their curiosity. They feel awkward or afraid that attempts to understand someone they&rsquo;ve inadvertently othered will provoke conflict, or that they&rsquo;ll do it wrong and get in trouble.</p>
<p>Anyone I can imagine sharing this with directly will probably have some fluency in the language of microaggression, unconscious bias, and perhaps assorted theories of oppression. Not everyone does. The bar is higher than it used to be, and while that is good &ndash; we will collectively stretch to a better and better place &ndash; it&rsquo;s a standard of conduct some people are just now getting around to understanding.</p>
<p><em>Enablement</em> is about helping people foster inclusive practices by giving them tools &ndash; guides, concrete steps to take, ways to measure their success or indicate that they need to iterate once more.</p>
<p>It has been pointed out that not every team is the same. Not every region works the same way. That the challenges for one group may be quite different from another. We have wisely recognized that one size doesn&rsquo;t fit all, and that it would be a mistake that would keep us from succeeding if we simply dictated a uniform set of behaviors and expected everyone to comply.</p>
<ul>
<li>Some teams, for instance, are great at taking turns talking; they just get hung up recognizing every source of ideas.</li>
<li>Some teams have a round-robin note-taking practice, but they quietly other the women on the team by always pairing them together.</li>
<li>Some teams are great at mentorship, but the people on the team who call in never get a word in over the people sitting in the conference room.</li>
</ul>
<p>When teams have a practice that is working, and if that practice is meeting our goals because the team is 100 percent self-reporting feelings of inclusion and equity, they shouldn&rsquo;t have to stop because that particular practice isn&rsquo;t in the playbook.</p>
<p>But they&rsquo;re all going to have blind spots, so they will need tools to diagnose the things we believe are important &ndash; what the characteristics are of an inclusive, safe, equitable team &ndash; and a set of tools they can use to up their practice until they are hitting all the marks.</p>
<h3 id="accountability">Accountability</h3>
<p>Finally, managers simply must be held accountable:</p>
<ul>
<li>Do they have personal and team goals that reflect the right focus areas?</li>
<li>Do the practices they&rsquo;ve identified to improve their team even happen?</li>
<li>Do they measure?</li>
<li>Is doing this stuff the difference between &ldquo;Improving&rdquo; and &ldquo;Achieving&rdquo; on their performance review?</li>
<li>Do they understand that downtalking &ldquo;the how&rdquo; because &ldquo;they prize delivering over being nice&rdquo; is not a good look for them?</li>
<li>Do they understand that &ldquo;generally high scores&rdquo; in assorted pulse and engagement surveys don&rsquo;t mean they&rsquo;re done and that all of the above still applies to them?</li>
</ul>
<p>This is the hardest part for any working group in a corporate environment, because lecturing about empowerment and ideating about enablement are not about <em>doing</em>, they&rsquo;re about talking and thinking. To compel people to <em>do</em>, you have a few sets of conditions that might work:</p>
<ol>
<li><strong>A culture of grassroots, bottom up accountability:</strong> Teams holding themselves, their leaders, and their managers to a standard, and undertaking the work of changing their behavior and measuring their improvement.</li>
<li><strong>Direction from the top:</strong> Senior leadership agreeing and committing to the importance of inclusive behavior as a matter of the health of the company, and making sure that peoples&rsquo; incentives so align.</li>
</ol>
<p>I believe that because of Puppet&rsquo;s size, the many kinds of management culture you can see throughout the company, the uniquely challenging nature of the times, and a few anecdotes from people who have tried to turn the hybrid-remote crank over the years that while we have people in corners of the company who are setting the right example and doing the right thing, it&rsquo;s not enough to get us over the top and create a culture of sustained and continuously improving inclusive, equitable behavior.</p>
<h2 id="initial-thoughts-on-how-aka-tldr">Initial thoughts on how, a.k.a. tl;dr</h2>
<h3 id="establish-managers-as-the-first-line-of-change">Establish managers as the first line of change</h3>
<p>We must focus on managers as the people who will drive the changes we need teams to make. They have to be convinced of the need for change, trained in how to deliver it, and established as the ongoing stewards of the improvements we make. They&rsquo;re the first step in all things.</p>
<h3 id="define-equity-and-inclusion">Define equity and inclusion</h3>
<p>What does an equitable and inclusive team look like? How does it behave? What kinds of practices does it embrace, and which does it eschew? How do you measure?</p>
<h3 id="develop-the-toolkit">Develop the toolkit</h3>
<p>There&rsquo;s plenty of literature and prior art on hybrid-remote work practices. Any curated list must center their value in fostering inclusivity and equity. There are, for instance, lots of voices in favor of shifting to a written culture &ndash; I&rsquo;m one of them, which makes sense for someone who fed himself with his writing for a decade &ndash; but viewed through an equity lens, that&rsquo;s not always going to work well in teams with power dynamic challenges or different modes of communication.</p>
<p>That doesn&rsquo;t mean tossing things out because they won&rsquo;t always work or because they have tradeoffs, but it does mean that any toolkit should note the tradeoffs inherent in each of its constituent parts, and suggest to managers ways to assess their teams.</p>
<h3 id="set-the-expectation">Set the expectation</h3>
<p>We agree there should be no expectation that a given team will use a particular set of practices, but we must expect that every team will center equity and inclusion in its practices, and that there are some constants in what it means to center anything:</p>
<ul>
<li>That you&rsquo;re going to do things that serve equity and inclusion.</li>
<li>That you&rsquo;re going to introspect your team periodically using a blend of quantitative measurement and rigorous qualitative assessment.</li>
<li>You&rsquo;re going to use that introspection to improve your practices.</li>
</ul>
<h3 id="align-incentives">Align incentives</h3>
<p>Developing, supporting, and iterating on  inclusive and equitable practices must be core to every manager&rsquo;s definition of success.</p>
<ul>
<li>They must recognize and support people on their teams who model the behavior, and show that they&rsquo;ve done so.</li>
<li>They must be evaluated and rewarded (or not) based on their support and promulgation of these practices, showing their work as part of regular performance reviews.</li>
</ul>
<h3 id="measure">Measure</h3>
<p>Some combination of quantitative and qualitative measurement must be a requirement. The question should not be &ldquo;percentage completed of a checklist of practices,&rdquo; because things will descend into parody and &ldquo;pencil-whipping.&rdquo; Instead, we should mandate experiments and documentation of the outcomes or team reactions.</p>
<p>We should also develop useful, universal survey questions that help us understand how equitably and fairly people believe they are being treated, specifically in team contexts. One challenge we&rsquo;ve had in survey language in the past has been malleable or blurry distinctions between leaders, organizational units, &ldquo;teams,&rdquo; etc.</p>
<p>Instead, we must be very concrete: Define the team, define &ldquo;my manager,&rdquo; define &ldquo;leaders,&rdquo; and make sure we are focused on the lower levels of the organization, where people form their impressions of everyday work, and where managers enjoy a great deal of latitude (and hence have the most power to effect change that impacts peoples&rsquo; impressions of everyday work.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Notes on Technical Leadership Groups</title>
      <link>https://mike.puddingtime.org/posts/2022-05-03-notes-on-technical-leadership-groups/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-03-notes-on-technical-leadership-groups/</guid>
      <description>Remembering some principles up front will help build a healthy and inclusive culture that not only gets things done, but keeps its eye on the needs of the technical organization by raising up new talent and creating a sense of belonging for everyone.</description>
      <content:encoded><![CDATA[<p>Technical leadership groups can take a number of forms: working groups, architectural groups, operational touchpoints, cross-functional teams, etc. Remembering some principles up front will help build a healthy and inclusive culture that not only gets things done, but keeps its eye on the needs of the technical organization by raising up new talent and creating a sense of belonging for everyone.</p>
<h2 id="we-dont-want-to-build-an-ivory-tower">We don&rsquo;t want to build an &ldquo;ivory tower.&rdquo;</h2>
<p>We want the group to be inclusive, meaning that it involves the right people at the right time for a given problem. </p>
<h2 id="we-want-to-constrain-the-size-of-the-standing-group">We want to constrain the size of the standing group.</h2>
<p>When we have too many people looking at too broad a collection of problems, we can&rsquo;t be sure we have the right people for each problem, and we lower the quality of decisions due to lack of engagement and/or context. </p>
<h2 id="we-want-to-make-sure-the-group-can-continue-to-work-week-to-week-in-anyones-absence">We want to make sure the group can continue to work week-to-week in anyone&rsquo;s absence.</h2>
<p>The group should be able to operate asynchronously, taking homework away, reliably engaging the right people outside the group&rsquo;s standing meeting cadence. </p>
<h2 id="we-want-the-group-to-work-in-the-open-with-open-access-to-notes-artifacts-and-decisions">We want the group to work in the open, with open access to notes, artifacts, and decisions.</h2>
<p>The group should have a Confluence space that allows for use of meeting notes with assigned actions and links to artifacts and pertinent docs. </p>
<h2 id="we-want-to-ensure-that-the-work-put-in-front-of-the-group-is-actionable-tied-to-customer-value-and-prioritized-in-a-global-context">We want to ensure that the work put in front of the group is actionable, tied to customer value, and prioritized in a global context.</h2>
<p>The group should not be a place to scratch itches or grind axes. Its backlog should be the result of collaboration between the group&rsquo;s leader (the CTO, Chief Engineer, etc.) and &ldquo;senior customers,&rdquo; (e.g. the Product leader, the Engineering leader, etc.) </p>
<h2 id="we-want-the-group-to-reflect-our-diversity-goals-by-giving-people-from-under-represented-groups-access-to-technical-leadership">We want the group to reflect our diversity goals by giving people from under-represented groups access to technical leadership</h2>
<p>Too often, we frame advancement as a progression to management. By making an effort to include under-represented people, the arch group can be a forum for technical mentorship that increases engagement and retention. </p>
]]></content:encoded>
    </item>
    <item>
      <title>So You Want to Write an RFC</title>
      <link>https://mike.puddingtime.org/posts/2022-05-03-so-you-want-to-write-an-rfc/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-03-so-you-want-to-write-an-rfc/</guid>
      <description>Hybrid-remote work requires more tools for asynchronous cooperation. RFCs provide a way to let people contribute without adding another meeting to a calendar, and they can help you become more clear about decisions.</description>
      <content:encoded><![CDATA[<p><em>This post pairs pretty well with &ldquo;<a href="/posts/2022-05-03-using-the-daci-framework/">Using the DACI Framework</a>&rdquo; -mph</em></p>
<p>A lot of organizations are settling into a hybrid-remote work cultures, which means that a lot of in-person means of getting things done, making decisions, and communicating ideas are under some strain. Finding ways to allow people to work asynchronously and outside of a lockstep meeting cadence will help with the transition.</p>
<p>A request for comment (RFC) is a way to propose an idea to a group of stakeholders that uses writing and dialog to help get your idea across, expose it to other ideas, and ensure that everybody is aligned and committed by the time the process is over. RFCs can also serve as &ldquo;case law&rdquo; for an organization, allowing people to review not only what you did, but why you did it.</p>
<p>You can use RFCs for a number of things:</p>
<ul>
<li>proposing a change to existing tools or processes</li>
<li>proposing a new tool, practice, or process</li>
<li>getting buy-in on a change to a team&rsquo;s work</li>
</ul>
<p>When you write an RFC, you are committing to:</p>
<ul>
<li>Seeing the RFC through from beginning to end.</li>
<li>Making sure you identify the right stakeholders (perhaps by using a DACI.</li>
<li>Holding others accountable for contributing through comments or proposed changes.</li>
<li>Holding yourself accountable to hear out all your contributors and make sure their questions or concerns are answered, even if they won&rsquo;t necessarily agree.</li>
<li>Communicating the results of the process.</li>
</ul>
<p>Here&rsquo;s how, step-by-step, to write an RFC and see it through.</p>
<h1 id="grab-an-rfc-template">Grab an RFC template</h1>
<p>Hashicorp <a href="https://works.hashicorp.com/articles/rfc-template">provides an excellent template</a>, or you can <a href="https://gist.github.com/pdxmph/cb47bd5acb68f7fb8080f56a83c497a2">use this simpler Markdown version</a>.</p>
<h1 id="figure-out-who-your-stakeholders-are-with-a-daci">Figure out who your stakeholders are with a DACI</h1>
<p>&ldquo;DACI&rdquo; is a framework for understanding peoples&rsquo; roles and responsibilities in a given decision-making situation. It stands for &ldquo;driver, approver, contributor/consulted, informed.&rdquo; In short:</p>
<ul>
<li><strong>Driver:</strong> Who is responsible for making sure this happens or that a decision is made?</li>
<li><strong>Approver:</strong> Who authorized this and/or is responsible for approving it?</li>
<li><strong>Contributor/Consulted:</strong> Who is expected to weigh in or contribute?</li>
<li><strong>Informed:</strong> Who needs to know about this?</li>
</ul>
<p>It&rsquo;s important to figure out your DACI, so it&rsquo;s worth spending some time thinking about it, and even taking time to talk things through with people to understand where they feel they should fit into it. A lot of the hard work of keeping people feeling like they&rsquo;re included and ultimately aligned involves making sure everyone&rsquo;s clear on their individual role in the RFC.</p>
<p><a href="/posts/2022-05-03-using-the-daci-framework/">Here&rsquo;s a quick guide to DACI</a>. Some highlights:</p>
<ul>
<li>It&rsquo;s okay to name groups as approvers. Sometimes the next level up in a decision-making situation is a group.</li>
<li>It&rsquo;s okay to circulate just the DACI to the people on it for a quick check that it makes sense to them, and that you&rsquo;ve been as inclusive as needed. Sometimes someone you thought just needed to be informed actually needs to be consulted. Sometimes people are happy just to know what the outcome is and don&rsquo;t care to consult.</li>
<li>It&rsquo;s a good idea, especially for something with cross-functional impact, to ask the approver for a review. They may have context about other departments or stakeholders that can help you craft a better, more inclusive DACI.</li>
</ul>
<h1 id="write-your-rfc">Write your RFC</h1>
<p>The two templates I linked to include explanatory text for each part of the RFC:</p>
<ul>
<li><strong>Summary:</strong> One or two sentences</li>
<li><strong>DACI:</strong> See above</li>
<li><strong>Deadline/timeframe:</strong> Make clear when feedback is expected by, and set a date for when all comments and questions will be resolved or closed.</li>
<li><strong>Background:</strong>  A few paragraphs to a page that provides links and context to explain why this change or proposal is necessary.</li>
<li><strong>Proposal:</strong> The meat of the RFC. What you want to do and how you want to do it.</li>
</ul>
<h1 id="share-and-set-contributor-expectations">Share and set contributor expectations</h1>
<p>Once you&rsquo;ve written your RFC, it&rsquo;s time to let your stakeholders know about it by sharing it with the approver and the people you&rsquo;re asking to contribute/consult.</p>
<p>You can choose to share in a couple of ways:</p>
<ul>
<li><strong>Everyone all at once.</strong> Generally this is the way to go.</li>
<li><strong>Bringing people in by function or where it will be most useful to them.</strong> For instance, it may make sense to bring an initial set of contributors in who can help provide shaping and direction through their early feedback before bringing in people who are better at looking down from 10,000 feet and seeing how the whole thing hangs together once more details are resolved. Just be aware that if there are trust issues or unease about roles/responsibilties, this approach could provoke those tensions.</li>
</ul>
<p>Either way, each time you share, make sure you communicate a few things:</p>
<ul>
<li><strong>What&rsquo;s the deadline for contributing?</strong> Make clear when you&rsquo;d like to see everyone &ldquo;pencils down&rdquo; with their initial contribution. This is meant to be an asynchronous document, so a minimum of a week is best to let people fit time for reflection and commentary into their already busy schedules.</li>
<li><strong>What&rsquo;s the deadline for closing out comments and questions?</strong> Make clear how long you are going to take to answer questions, resolve comments/concerns, etc. You may need to adjust this. Some groups can pull this off in a day or two, others need more time. Sometimes you realize that something was more complex than you thought and needs more time to work through.</li>
<li><strong>How can people best contribute?</strong> People have a lot of different styles, and Google Docs enables a few different approaches:
<ul>
<li><strong>Comment only:</strong> People can ask questions and propose changes as comments, but not change the document.</li>
<li><strong>Suggest changes:</strong> People can alter the text in &ldquo;suggest mode,&rdquo; meaning that the editor or owner has to approve changes. The advantage is that the proposed changes can help shape dialog. The drawback is that a document with a lot of this kind of markup is hard to parse, especially if you&rsquo;re working in waves.</li>
<li><strong>Just make changes:</strong> This can quickly take you off course if your RFC is strongly opinionated, but if you&rsquo;re doing authoring in waves and your first contributors/consultees are key to setting direction before sharing more widely and getting more input, this can work.</li>
</ul>
</li>
<li><strong>Will there be a meeting?</strong> Sometimes you can&rsquo;t work through everything asynchronously and your contributors will need to show up and talk out things that would take too long or be too complex to fit into comments. If there&rsquo;s a chance that your RFC will require some face-to-face to truly resolve all questions and concerns, say so.</li>
</ul>
<h1 id="gather-feedback-monitor-your-document">Gather feedback, monitor your document</h1>
<p>Once your contributors are participating, you should spend a few minutes a day answering questions or concerns as best you can. If your contributors identify other stakeholders who were left out of the initial DACI, add them to the DACI if you think that&rsquo;s appropriate. If you think someone else is better equipped to respond to a comment or question, +name them in the comments to pull them in.</p>
<p>You should remind your contributors of their deadlines mid-way through the process.</p>
<h1 id="close-out-comments-and-questions">Close out comments and questions</h1>
<p>Once everyone is pencils down, hopefully on the deadline you set, look for open questions and comments and resolve them. As the driver, this is a point where you may want to work with your approver to review the open items so you can get their support to make decisions on open items.</p>
<p>Part of work life is the simple fact that we sometimes have to disagree and commit. The approver may be useful for sussing out when you can simply close out a line of questioning, reject a proposed change, or make a decision where one needs to be made.</p>
<h2 id="meeting-or-not">Meeting or not?</h2>
<p>At some point during the close-out period, you&rsquo;ll probably have to decide whether or not to have a meeting. Some questions and concerns are too big to fit in a comment on a doc, or you need people to bring data to inform a decision, or you can just tell that you need to talk it through.</p>
<p>If that&rsquo;s the case, schedule it as quickly as possible, be clear about what&rsquo;s in scope for the meeting, and push through. Calendars can be hard, but try to keep your momentum. If someone can&rsquo;t make a meeting for whatever reason, try to spend a few minutes getting their input or concerns and do your best to advocate for their position or share their information; or see if they can send someone in their stead.</p>
<p>This is another case where pre-aligning with your approver will help you decide how important someone delivering feedback or commentary in person is. They can support your decision to exclude someone, bring in an alternate, etc. especially if, as sometimes happens, there&rsquo;s an attempt to derail the decision.</p>
<h1 id="finalize-it">Finalize it</h1>
<p>It&rsquo;s a best practice to not consider an RFC &ldquo;done&rdquo; until all comments, questions, and suggestions are closed out. At the top of this document, we said RFCs can serve as &ldquo;case law&rdquo; for an organization, so it&rsquo;s important to make sure loose ends are cleaned up.</p>
<p>Some things you may want to include in an outcomes section:</p>
<ul>
<li>Where the work the RFC proposed now lives (e.g. JIRA tickets, a strategic intiiative workstream, an OKR)</li>
<li>Issues you couldn&rsquo;t resolve, but that aren&rsquo;t so material you couldn&rsquo;t  decide to table for another RFC.</li>
<li>Circumstances under which the RFC shouldn&rsquo;t be applied. For instance, you may be addressing a one-time issue with a solution that won&rsquo;t work for similar situations.</li>
<li>Conversely, related circumstances under which the RFC should be applied. Sometimes RFCs result in general principles that apply to similar situations.</li>
</ul>
<p>The idea here is to do the work of collaborating and thinking through a common problem once, and making that thinking and collaboration available to others in a way that saves them doing that work all over again for this particular situation or things that are similar to it.</p>
<h1 id="post-somewhere">Post somewhere</h1>
<p>If your organization or team has some a documentation space, post the RFC there, share it with the &ldquo;informed&rdquo; parties with a mail pointing to where they can find it, and consider sharing a link in your departmental or organizational Slack if the RFC is of broad interest.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Supporting an Open Door Culture by Listening</title>
      <link>https://mike.puddingtime.org/posts/2022-05-03-supporting-an-open-door-culture-by-listening/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-03-supporting-an-open-door-culture-by-listening/</guid>
      <description>Leaders often help best when they accept that they don&amp;rsquo;t know all the answers.</description>
      <content:encoded><![CDATA[<p>I was once asked to give a talk on how men can support women in the tech industry. At first I was uncomfortable with the idea: My thoughts turned to images of me clicking through a deck and reading off bullets of things you shouldn&rsquo;t do that I probably did myself at some point before someone undertook the effort required to get me to stop. I hated the idea of standing at the front of a room and implying there&rsquo;s something I get that maybe the men I&rsquo;d be speaking to don&rsquo;t.</p>
<p>After a brief back and forth with one of the organizers, though, I proposed building a talk around a project I undertook a few years back to publish guides for a company open door policy. She was supportive of the idea, and that made me more comfortable. Even though I had designed and led the project, it was never &ldquo;mine:&rdquo; It happened at all because Luke Kanies, our CEO, had been listening to women who were telling him what they needed to feel more safe and heard at work, and I was just there to help make it happen. I learned a lot as the project evolved, and it felt better to me to talk about how I learned.</p>
<p>The initial brief for those guides was to make it easier to understand how to use our open door policy at all. I was asked to work with HR to deliver something  we could position within the open door policy itself, perhaps as a diagram or flowchart. I met with our VP of HR and one of our HR business partners, and we tried to whiteboard a basic &ldquo;open door process flow.&rdquo;</p>
<p>As an aside, that initial diagramming session was one of the best things that&rsquo;s ever happened to me. Up until then I had a pretty dim view of HR. I&rsquo;d worked in places where the HR org wasn&rsquo;t just &ldquo;there to serve the company&rsquo;s interests,&rdquo; but had become a sort of political center in its own right, controlling the path to promotion by gatekeeping mandatory training or obscuring promotion standards and practices. I&rsquo;d never spent a lot of time thinking about the nuances of the HR discipline.</p>
<p>By the time I was done working with that VP and business partner, I had a new appreciation for the complexities HR people deal with (and a huge amount of admiration for those two in particular, because they had an architect&rsquo;s perspective on some of the problems we were discussing but were as engaged with making the architecture amenable to people as I was).</p>
<p>I&rsquo;d also decided the idea of just making a diagram or flow chart was a terrible idea: It was too rife with edge cases, and no amount of detail at the &ldquo;step 1, step 2, step 3&rdquo; level suggested an awareness of how it actually feels to have a problem you can&rsquo;t fix for yourself that you have to go get help with. I took that idea away, digested it, talked to a few women around the company, and sent a note to Luke:</p>
<blockquote>
<p>&hellip; the issue is less &ldquo;what are the steps?&rdquo; and more &ldquo;how do we get everybody to an equal place in terms of their confidence that when they use the steps they&rsquo;ll get a good outcome?&rdquo;</p>
</blockquote>
<blockquote>
<p>Your public statements about non-retaliation a few months back are important, but there are things beyond retaliation that matter, too, and these came out in interviews:</p>
</blockquote>
<blockquote>
<ul>
<li>Will my manager place the burden on me to fix the problem once they hear me out?</li>
<li>Is my manager attuned to the idea of discriminatory behavior that flies below the radar of outright bigotry? (microaggressions, which are not universally understood to be &ldquo;real&rdquo;)
Is my manager attuned to the idea that bringing my concerns to them sometimes feels like I might be marking myself as a troublemaker/&ldquo;difficult,&rdquo; if not to them then others. (confidentiality as a cardinal component of the process)</li>
<li>How will I know what&rsquo;s going on with my issue once I bring it to someone?</li>
<li>How can I know I&rsquo;m not going to inadvertently bring a hammer down on someone?</li>
</ul>
</blockquote>
<blockquote>
<p>That&rsquo;s 20 percent &ldquo;process&rdquo; and 80 percent human factors.</p>
</blockquote>
<p>The next few months involved some document design, some writing, and a lot of listening. One of the people who worked for me had the misfortune of experiencing one of my people management failures, and I was incredibly lucky that we&rsquo;d reestablished enough trust that she thought it was worth her time to explain to me how I&rsquo;d messed up.</p>
<p>Another woman told me a deeply personal story about what it was like to be condescended and talked down to by a male colleague. We spent an hour talking about her experiences, and even then I was catching myself drifting toward thoughts about the ways in which her patronizing male colleague probably didn&rsquo;t mean any harm, or surely hadn&rsquo;t acted <strong>that</strong> poorly. We ended the meeting and went back to our desks. A few minutes later, I saw her at a nearby whiteboard with that colleague, so I stayed at my desk and listened to the interaction from afar, and it was worse than she described, which caused me to realize that even in a relatively safe context she was still protecting someone who had treated her terribly. I&rsquo;m glad I was able to see the dynamic playing out; I&rsquo;m sorry I felt the need to.</p>
<p>As the work progressed, I invited more and more people into the documents to help shape them. At one point I had three copies of each document so stronger voices wouldn&rsquo;t drown out quieter ones in the comments. When it was clear that the very idea of &ldquo;microaggressions&rdquo; was controversial, I asked women to help me list some examples: The documents don&rsquo;t have that word in them (even if they probably should), but they articulate the idea and provide examples from womens&rsquo; experience. </p>
<p>After a few months of work, either writing, listening, or reconciling the viewpoints we&rsquo;d brought into the project, the VP of HR signed off and we shipped them to the CEO. He said he liked them, and he named four women he wanted me to meet with to get final approval. I was a little chagrined because I&rsquo;d already talked to each person on his list as part of the work, but I invited them all to meet and discuss the finished docs, anyhow. They turned up a few more small things and we fixed them on the spot, which taught me it never hurts to listen for just a bit longer.</p>
<p>We ended up with two guides, meant to be used as a supplement to a generic open door policy of the sort you can just go download from the web: </p>
<p>The <a href="https://github.com/pdxmph/open_door_guides/blob/master/employees_guide.md">first guide</a> is for employees. It&rsquo;s written to strongly suggest our values around the process of escalation. The language is about &ldquo;expectations,&rdquo; and you could think of it as a bill of rights that compels certain behaviors from managers. The language is meant to be supportive and affirming. It&rsquo;s made clear that if those expectations aren&rsquo;t met,  the interaction is in trouble and the employee can bail on it, escalating to the next level.</p>
<p>The <a href="https://github.com/pdxmph/open_door_guides/blob/master/managers_guide.md">second guide</a> is for managers. Structurally, it closely parallels the employee guide. The language is less on the &ldquo;supportive and affirming&rdquo; end of the spectrum than it is quite imperative. </p>
<p>The employee guide references the manager guide a few times to accentuate things we&rsquo;re telling employees: &ldquo;We told you to expect this behavior, and <em>here</em> is where we&rsquo;re telling managers, in imperative language, to do exactly what we told you to expect. If you observe your manager not doing these things, you can see right there in the manual we wrote just for them that they&rsquo;re supposed to be doing those things.&rdquo;</p>
<p>When I&rsquo;m involved in a conversation with an employee about something sensitive, I will often share the link after telling them about their rights to confidentiality, and I&rsquo;ll make clear to them that the bedrock values of those docs include consent and confidentiality.</p>
<p>I don&rsquo;t have any way of measuring their success. Personally, I find them comforting: Even though I helped write them, I still find myself going to them to remind myself of my obligations to the people who work for me, and people have told me that they&rsquo;ve been glad to read them. </p>
<p>And they&rsquo;re also a valuable reminder to me of a few things:</p>
<p>First, the piece of work I&rsquo;m most proud of during my time at Puppet wasn&rsquo;t really my work at all: It was the result of deciding I didn&rsquo;t know everything I needed to know, that I didn&rsquo;t have all the answers, and that my reputation as someone who understood womens&rsquo; concerns and was a good manager in that regard wasn&rsquo;t something that I had—something that was part of my nature—but rather was the result of knowing to listen, and to remember that listening isn&rsquo;t about asking <em>whether</em> someone is right, but <em>how</em> they&rsquo;re right.</p>
<p>Second, that the thing I&rsquo;m most proud of as a manager came not from &ldquo;taking charge&rdquo; and leading, but from deciding the best use of my authority was to assert my right to be guided by others who hadn&rsquo;t been given that authority.</p>
<p>If you see some values in these guides, <a href="https://github.com/pdxmph/open_door_guides/">they&rsquo;re on GitHub</a>. The README has a few suggestions on how to use them that preclude simply downloading them and tossing them up. Instead, I&rsquo;d suggest you fork them and make them your own, preferably after talking to people in your organization and learning what would make such a guide more useful to them.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Thinking About Priorities</title>
      <link>https://mike.puddingtime.org/posts/2022-05-03-thinking-about-priorities/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-03-thinking-about-priorities/</guid>
      <description>Prioritization is hard, and it&amp;rsquo;s often at the root of team dysfunction and morale problems. You&amp;rsquo;ve got to grow beyond &amp;lsquo;just give me more heads to get all this stuff done!</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve had to think about prioritization a lot over the past few years. A few things make prioritization hard, even if you know you need to do it:</p>
<ul>
<li>
<p>If you&rsquo;re a manager in a busy place with a lot of customers or partners, you might have lost track of all the things you&rsquo;ve committed to. If you don&rsquo;t have a good practice of recording outcomes and next actions in meetings, you&rsquo;ll find things creeping around behind your back.</p>
</li>
<li>
<p>If you don&rsquo;t maintain boundaries with customers or partners, it&rsquo;s going to be an issue for you, too. If you&rsquo;re the type who&rsquo;s open to being grabbed in the hall and put up to something on the basis of a nodding agreement, or if you regularly let people outside your team head straight to people who report to you without checking in on the interaction later, you&rsquo;re not really maintaining boundaries.</p>
</li>
<li>
<p>If you and your manager or you and your team don&rsquo;t have a culture of requiring a conversation about priorities with each new commitment, prioritization will be difficult.</p>
</li>
</ul>
<p>If these patterns look familiar to you, you probably also know some of what comes next:</p>
<p>Your team will start to run hot as they struggle under the load of an undifferentiated (and possibly incomplete) list of their deliverables. That will take the form of stressed-out behavior and guilt over what&rsquo;s not being done. The folks with a workaholic streak will double down on their effort and become frustrated with people on the team who don&rsquo;t follow suit. The ones who aren&rsquo;t going to be pushed into working past reasonable hours will go into a defensive crouch.</p>
<p>Lacking a way to talk about your priorities with customers or partners, it&rsquo;ll become easier and easier to flip from a posture of relative openness and helpfulness to one where it&rsquo;s simpler to just say &ldquo;get back to me in six months&rdquo; (or never, if you&rsquo;re being honest).</p>
<p>You&rsquo;ll begin to focus on headcount as the cure to your problems: You know enough to know you&rsquo;ve got a ton on your plate, and that your team&rsquo;s morale is beginning to suffer, and that a few extra hands could at least take some of the pressure off.</p>
<p>Looking back, I don&rsquo;t think I&rsquo;ve ever worked anywhere that was doing a great job with prioritization, to the extent &ldquo;great&rdquo; would mean you&rsquo;d be able to get affirmative answers to all these questions:</p>
<ul>
<li>Do the managers have a list of everything they&rsquo;ve committed to?</li>
<li>Is that list prioritized to at least the level of high/medium/low/not, and is it shared with everyone on the team?</li>
<li>Do managers periodically reassess the list and clearly identify things that can fall down into the &ldquo;not a priority&rdquo; bucket?</li>
<li>Do people on the team feel empowered to ask about the relative priority of new things as they come in without being made to feel like that&rsquo;s an insubordinate or unfair/gotcha question?</li>
<li>Does everyone on the team treat those priorities as real?</li>
</ul>
<p>Consequently, just about everywhere I&rsquo;ve worked has shown some of the symptoms of poor prioritization, too. The ones that bother me the most are guilt and recrimination.</p>
<p>Guilt affects peoples&rsquo; ability to be open and honest about their work, and it erodes a team&rsquo;s ability to celebrate what it has accomplished. Guilt also eventually blocks people from being able to ask for what they need from others, because the person feeling the guilt worries that they&rsquo;ll be viewed as a hypocrite when they have their own impossible list of unfulfilled obligations.</p>
<p>Recrimination &ndash; anger turned on teammates for not doing enough &ndash; destroys trust, makes it hard to get people to pull together, and creates a toxic environment.</p>
<p>Taken together, guilt and recrimination from poor prioritization will grind a team down.</p>
<h3 id="a-prioritization-exercise">A Prioritization Exercise</h3>
<p>I don&rsquo;t think I&rsquo;ve ever felt the challenges around prioritization more acutely than at a startup, where there&rsquo;s a huge amount of energy, a massive appetite to solve big problems, and a desire to buckle down and become profitable (which means the &ldquo;toss a few more bodies on the problem&rdquo; solution to poor prioritization is losing its currency).</p>
<p>After some painful and frustrating conversations around the work my team was doing and the hands we had available to do it, I did an exercise that helped a lot.</p>
<p>The goal of the exercise is to get everything you&rsquo;ve got going into a list, figure out how important each of those things is to you, describe how much effort you&rsquo;re putting into it, and then start figuring out what really matters and what needs to come off.</p>
<p>The exercise uses a very simple model that helps you see the gaps between the priorities you think you have, and the work you&rsquo;re actually doing.</p>
<p>Once you&rsquo;ve completed the initial steps, you&rsquo;ll have something that can serve as the foundation of a conversation with your team and your manager, as well as a tool to build an ongoing practice of thinking about what&rsquo;s important and how what you&rsquo;re actually doing lines up with that.</p>
<p>There&rsquo;s no real magic here. The thing that strikes me about this process, however, is that when I describe it to people and show them the tools I use, it strikes a nerve. I think a lot of people are used to carrying their priorities in their heads, or expect their manager or some other leader to let them know what their priorities are (and steer them back when their actions don&rsquo;t line up with priorities). So I&rsquo;m writing about it in the hopes that people who are struggling with the stuff they have to do will see something they can use (or modify, or at least get some inspiration from).</p>
<p>This is also written from the perspective of someone managing one or more teams. If you don&rsquo;t manage anybody, you can still run through this exercise with the projects and tasks you&rsquo;ve been given.</p>
<p>I&rsquo;d recommend you do this using a spreadsheet: You&rsquo;ll want ways to sort the information you gather for the exercise. I wrote an app to help me with it, and I&rsquo;ll share a little about that in an upcoming entry.</p>
<h4 id="1-make-your-list">1. Make Your List</h4>
<p>If you&rsquo;ve ever tried to do the Getting Things Done approach to task management, you know that one of the first things you&rsquo;re supposed to do is get everything out of your head and into a list. That can go a long way to helping you feel less overwhelmed right away.</p>
<p>What goes onto the list is going to vary by the kind of work your team does. Since I manage services organizations, I tend to break the team&rsquo;s work down into these areas:</p>
<ul>
<li><strong>Customer commitments:</strong> The teams and projects we&rsquo;re supporting.</li>
<li><strong>Professional practices:</strong> The actions we layer on top of the basics. For a writing team, for instance, it might involve multi-stage editing. For a team of IT developers, you might want to focus on testing or change management.</li>
<li><strong>Team maintenance:</strong> Things the team does to maintain itself, e.g. professional development, maintaining and developing tools and processes, etc.</li>
</ul>
<p>You definitely want to include the things you&rsquo;re doing or have committed to do. You should also include the things you want to do but have no current plans for, and things you&rsquo;ve recently refused to do.</p>
<p>It might be helpful to add a column listing who on your team is working on what. Who you&rsquo;ve put on a given task is an implicit comment on its importance to you.</p>
<h4 id="2-prioritize-your-list">2. Prioritize Your List</h4>
<p>Once you&rsquo;ve got your list, prioritize it. That doesn&rsquo;t mean you need to force rank everything. Instead, use  a simple high/medium/low/not scale. Don&rsquo;t try to come up with some formula for how much of your list should be at a given priority: That&rsquo;s overthinking it, and you&rsquo;re going to address that soon enough, anyhow.</p>
<p>If you&rsquo;re using a spreadsheet, using numbers for your priorities is a good idea. I&rsquo;d recommend a 0 = none to 3 = high scale, because you can do math on this a little later on. For instance:</p>
<ul>
<li>0 = No priority at all. You know it&rsquo;s a thing but you don&rsquo;t have any plans to do anything about it any time soon.</li>
<li>1 = Low priority. This is something that would be nice to have some day, and that isn&rsquo;t at all necessary now.</li>
<li>2 = Medium priority. This is something that requires at least some maintenance on your part as a secondary duty for someone, even if it doesn&rsquo;t warrant your full attention. If it slips for a little while, it won&rsquo;t cause too much pain, if any.</li>
<li>3 = High priority. You have to actively work on this, either to build it or to maintain it to a high standard.</li>
</ul>
<h4 id="3-qualify-the-effort-youre-giving-each-priority">3. Qualify the Effort You&rsquo;re Giving Each Priority</h4>
<p>Once you have your prioritized list, you should take a look at each item and ask how much effort and attention you&rsquo;re giving it. I&rsquo;d recommend, once again, using a 0 = none to 3 = high scale.</p>
<p>There are a few ways to think about this number. Here&rsquo;s a scale to consider:</p>
<ul>
<li>0 = The item in question is getting no effort at all. Nobody&rsquo;s paying attention to it.</li>
<li>1 = The item is getting very little effort. Someone &ndash; maybe not the same person every time &ndash; checks in on it now and then, there&rsquo;s a long backlog of issues with it that are addressed irregularly. Quality may be relatively low.</li>
<li>2 = The item is getting some effort. It has a clear owner but it&rsquo;s not getting their full attention. Quality may be &ldquo;best effort&rdquo; as opposed to &ldquo;high.&rdquo;</li>
<li>3 = The item is getting full effort. The person or people working on it are expected to prioritize it above other things, it consumes a significant portion of their time, and it&rsquo;s being completed to a high degree of quality.</li>
</ul>
<h4 id="4-think-about-the-disconnect-between-priorities-and-effort">4. Think About the Disconnect Between Priorities and Effort</h4>
<p>At this point, if you&rsquo;ve got everything in your list prioritized and if you&rsquo;ve recorded how much effort you&rsquo;re putting into everything, you can do a little math that will help you think about the health of your priorities list.</p>
<p>You can assess the relative health of everything on your list by looking at the disconnect between your priorities and your actual effort. I call this &ldquo;risk,&rdquo; but &ldquo;health&rdquo; is fine, too. The main point is that you want to capture how wide the delta is between your stated priorities and the actual work you&rsquo;re putting toward them.</p>
<p>A quick formula in your spreadsheet will do it:</p>
<blockquote>
<p><code>item priority - item effort = risk</code></p>
</blockquote>
<ul>
<li>Risk &gt; 1: High Risk</li>
<li>Risk == 1: Medium Risk</li>
<li>Risk &lt;=0 : Low Risk</li>
</ul>
<h4 id="5-talk-about-it-with-your-teamh4">5. Talk About it With Your Team&lt;/h4&gt;</h4>
<p>At this point, you probably need to sit down with your team, put the spreadsheet up on the screen, and start talking through the work you&rsquo;ve done so far.</p>
<p>This conversation is going to require a baseline of trust between you and the people on your team. If you&rsquo;ve been having problems with poor prioritization, you&rsquo;ll probably find that there&rsquo;s a certain amount of guilt and defensiveness. Some people might be worried that you&rsquo;re doing this work to document blame.</p>
<p>You need to make clear that you&rsquo;re not using this exercise to place blame or judge people for what they&rsquo;ve been doing. Rather, if prioritization has been a challenge for you, you need to own your own leadership gaps in this area. Explain that you&rsquo;re looking for help to get a good picture of everything your team thinks it&rsquo;s supposed to be doing, and to make sure you understand where relative levels of effort are going.</p>
<p>If you&rsquo;ve got a few layers of management, you might want to keep this initial conversation to leads or managers, especially if you&rsquo;re dealing with a demoralized team or one with a poor performer. You don&rsquo;t want the &ldquo;effort&rdquo; question to devolve into one of individual performance. Rather, you want to have a clear idea of how much work is being done around a thing, good or bad.</p>
<p>For that reason, I&rsquo;ve taken a stab at modeling and then shied away from things that look like story points. They just make people nervous and it slows down the conversation.</p>
<p>Things to ask the team include:</p>
<ul>
<li>Is the list complete? Make sure you haven&rsquo;t missed something, or mistakenly lumped a few things in together in a way that hides effort or complexity.</li>
<li>Is the amount of effort you recorded accurate? Sometimes you find that someone on the team has been putting a lot more into something than you realized. Alternately, you may discover something has been allowed to slide for months. Note those, move on, and if they represent a performance issue deal with them in a 1:1.</li>
</ul>
<p>Once you&rsquo;re done with this, you&rsquo;ve got a snapshot of the team&rsquo;s state you can use to drive conversations with your own manager.</p>
<h4 id="6-take-it-to-your-manager">6. Take It To <strong>Your</strong> Manager</h4>
<p>Once your team has vetted your snapshot, it&rsquo;s time to take it to your own manager for review. If you&rsquo;ve got everything in a spreadsheet and have a little conditional formatting to help make it easier to scan, the conversation can go line-by-line:</p>
<ul>
<li>Describe the item in question.</li>
<li>Explain why it has the priority it does.</li>
<li>Explain why it&rsquo;s getting the level of effort it does.</li>
<li>Point to the calculated risk/health field and ask if it reflects an acceptable outcome for the item in question.</li>
</ul>
<p>Your manager probably won&rsquo;t agree with all your priorities, or the amount of work you&rsquo;re expending on a given item. That&rsquo;s great! You did all the work up to this point to make it easy to find those disconnects.</p>
<p>The thing you need to do, though, is think in terms of tradeoffs. If your manager wants to bump something up in priority or apply more effort to it, you should press them to explain which items you can back off on to shift capacity accordingly.</p>
<p>As you work through the list and make adjustments, take advantage of the spreadsheet: Sort by different columns to offer a picture of the things with the highest priority, or the things consuming the most time, or that are at most risk because of a disconnect between priorities and effort.</p>
<p>Once you&rsquo;ve worked through the list, give it a final sort by the risk/health field, and take a hard look at the things you see as high risk/poor health. The questions you and your manager need to be asking at this point are:</p>
<ul>
<li>Is this in an acceptable state right now?</li>
<li>Is there anything happening in the near term that might change this? (e.g. planned hiring that will provide more capacity)</li>
<li>Is this something we can drop to a lower priority, deprioritize altogether, or actually drop from the list?</li>
</ul>
<h4 id="7-take-it-back-to-your-team">7. Take It Back to Your Team</h4>
<p>Once you&rsquo;ve run through the list with your manager, identified misaligned priorities, made adjustments to priorities, and identified a plan to correct misalignments, make sure to close the loop with your team.</p>
<p>For each item that changed, talk about an action plan to make the needed adjustment. That might involve communicating with stakeholders, shifting work around on the team, or simply resolving to quit thinking about something for a while.</p>
<p>The main thing you want to do, though, is communicate a clear sense of permission for each thing that ends up getting less priority or effort. If you&rsquo;ve been having problems with prioritization and people on the team are dealing with guilt over what they haven&rsquo;t been able to do, let them know it&rsquo;s okay to put those things down, that you support them in doing so, and that you&rsquo;ll defend the team&rsquo;s priorities and effort to your manager and the rest of the company.</p>
<h4 id="8-support-and-maintain-your-priorities">8. Support and Maintain Your Priorities</h4>
<p>Once you&rsquo;ve been through this process, you have to support the work you did.</p>
<p>Review your list periodically: Once a month give it a look and think about each item. Once a quarter, pull your team back in and review. If things change and you need to reassess, bring it back up with your manager.</p>
<p>If you have some sort of progress/status reporting routine, ask everyone on the team to specifically report against the priorities on that list. They might not be doing everything on that list every week, but a section of their report should include things from that list. Work that wasn&rsquo;t done against any of your priorities needs to show up in its own area because you&rsquo;ll need to assess whether it was truly a one-off, or something that needs to go onto the list.</p>
<p>Make priorities part of your weekly 1:1s. You don&rsquo;t want 1:1s to devolve into tactical discussions or 30-minute readouts, but a snapshot of the week&rsquo;s priorities delivered in the first few minutes keeps everyone thinking in terms of what&rsquo;s important.</p>
<p>Build a healthy practice of discussing priorities both on your team and with your own manager. If a new piece of work turns up, talk about its relative priority, discuss how much work should go toward it, and add it to the list so you can assess it against everything else you&rsquo;re working on.</p>
<h3 id="in-practice">In Practice</h3>
<p>For myself, as a manager, the act of getting everything into a list is so clarifying. There are often other sources of truth for the work a team is doing, mostly in JIRA, but they&rsquo;re seldom as focused.</p>
<p>For the conversations I&rsquo;ve had with my managers, the exercise gives us  a way to interactively discuss our priorities and where the work is going. We often end up finding places where the team has been working to a higher standard than  required, and it helps managers give permission to offload some of that work to other teams. Some things come up in priority as a result of that shifted capacity, but that enriches staffing conversations. Sometimes you&rsquo;ll remind your manager of something they handed off to you and they don&rsquo;t need any longer.</p>
<p>For the team, it&rsquo;s helpful to see the results of that discussion. They can see that a constructive conversation is happening about their commitments.  It gives you an opportunity to express to them in very clear terms that the snapshot you&rsquo;ve described is a contract you&rsquo;ll honor.</p>
<p>I&rsquo;ve had  more senior people say that the hour or so that goes into the initial review of priorities and the ensuing followup are the most useful meetings they can be in, because they finally understand the things they can stop worrying about after years of having them on a mental list.</p>
<p>Services orgs get a lot of incoming tickets telling them what they &ldquo;should&rdquo; be doing, and the people filing those tickets aren&rsquo;t always mindful of the things they&rsquo;re piling onto someone else&rsquo;s plate. Having a prioritized list published somewhere that was easy to point to also made it a lot easier to educate people around the company about our work and priorities.</p>
<p>Finally, the exercise has been useful for having headcount conversations both up and down. Once, when I had to consider trading some eventual headcount away in favor of a big overhaul on an aging toolchain, we had a source of truth to turn to. In the absence of a new team member, we had some stuff that was in a state of marginal or poor health that might have to remain that way. Was it worth it? We had a way to validate our hunch that it probably would be, and even a way to see the ways in which some things in the &ldquo;no time soon&rdquo; backlog would probably be helped along more by better tools than more people.</p>
<h3 id="playing-with-priorities">Playing with priorities</h3>
<p>If you&rsquo;re interested in trying this approach to prioritization out, you&rsquo;re welcome to take a look at <a href="http://priorities.puddingbowl.org">an app I wrote</a> that makes it possible to record goals and projects, go through the Priority/Support/Effort scoring exercise, and get visual feedback on misalignment of your stated and actual priorities.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Using the DACI Framework</title>
      <link>https://mike.puddingtime.org/posts/2022-05-03-using-the-daci-framework/</link>
      <pubDate>Tue, 03 May 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-05-03-using-the-daci-framework/</guid>
      <description>As organizations scale, roles and responsibilities shift and often become less clear. While DACI and similar frameworks can be a little intimidating, you can keep it simple and bring clarity to your team.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ll never forget the first time I was introduced to decision-making frameworks.</p>
<p>A peer from another department called a meeting, began to draw a grid on the whiteboard, and casually said over his shoulder, &ldquo;this isn&rsquo;t a land grab, but we need to get clear on ownership.&rdquo;</p>
<p>Then he filled out the grid with who was in charge of what, who was responsible to do what, and who didn&rsquo;t really need to participate in the work but needed to know what was going on.</p>
<p>It <em>felt</em> like a land grab. I&rsquo;d been at that startup for a bit over a year, and had acclimated to the shift from a larger business where people &ldquo;just knew what to do&rdquo; and generally stuck to their remits, to a much smaller, more entrepreneurial business where people just grabbed stuff if it aroused their curiosity. In that more relaxed, less functionally siloed environment, it seemed a little rude for someone to come put us all in boxes in a grid.</p>
<p>I&rsquo;ve come to believe it was necessary, even if it was jarring.</p>
<p>In the early stages of an organization, certain roles and responsibilities can live in one function or team, then migrate to new ownership as the company grows. As these changes occur, roles and responsibilities can become muddled or unclear, and it&rsquo;s not uncommon for a group of people embarking on a new project to become confused about &ldquo;who owns what.&rdquo;</p>
<p>Setting aside the challenges of young organizations, as companies shift to hybrid-remote models it will become more and more important to develop practices that work well for people who work somewhat asynchronously. That includes writing things down and creating written records of decisions. </p>
<p>Decision-making frameworks, like the one my peer was using, can help clarify roles and responsibilities and chip away at the need for synchronous meetings by encouraging you to ask a few questions when you&rsquo;re designing a project, planning work, or making a decision:</p>
<ul>
<li>Who is responsible for making sure this work is happening?</li>
<li>Who authorized this work and is responsible for approving it?</li>
<li>Who is expected to weigh in or contribute to the project?</li>
<li>Who needs to know about this work?</li>
</ul>
<h2 id="raci-daci">RACI, DACI?</h2>
<p>There&rsquo;s a large number of decision-making frameworks out there. Many people are familiar with the <a href="https://en.wikipedia.org/wiki/Responsibility_assignment_matrix">RACI</a> model. Personally, I prefer the <a href="https://en.wikipedia.org/wiki/Responsibility_assignment_matrix#DACI">DACI</a> model to record roles and responsibilities for any work that requires more than one team or department.</p>
<p>I also find DACI&rsquo;s roles (driver, approver, contributor, informed) to be a little more intuitive to people new to these sorts of frameworks than RACI&rsquo;s (responsible, accountable, consulted, informed). &ldquo;Responsible&rdquo; and &ldquo;accountable&rdquo; are hard concepts for people to tease apart, whereas &ldquo;driver&rdquo; and &ldquo;approver&rdquo; are easier to understand and distinguish from each other.</p>
<p>It&rsquo;s important to note that this is not worth some sort of weird project governance nerd fight. The mere act of sitting down with a project plan and applying either of these frameworks will do some good, so if you&rsquo;re at the point where it would be helpful to have a tool that helps you think about roles and responsibilities, you should just pick one and muddle through. It can be awkward at first, and there&rsquo;ll be a lot of different preferences and understandings, but the immediate benefit is that you&rsquo;re talking openly and transparently about something that often makes people uncomfortable.</p>
<h2 id="what-is-daci">What is DACI?</h2>
<p>DACI stands for &ldquo;Driver, Approver, Contributor/Consulted, Informed&rdquo; and is used to describe the roles of people involved in a project, decision, or task. Here&rsquo;s each role in a little more detail:</p>
<ul>
<li><strong>Driver:</strong> A single driver of the overall project: the person steering the car. The Driver develops the DACI for the project, identifies the high-level work that needs to be done, and leads the project throughout its lifecycle.</li>
<li><strong>Approver(s):</strong> One or more people who make most project decisions, and are responsible if it fails.</li>
<li><strong>Contributors:</strong> The people responsible for deliverables; and with whom there is two-way communication. Some people also refer to this part of the DACI matrix as &ldquo;consulted&rdquo; to account for people who should probably be asked to weigh in even if they aren&rsquo;t delivering anything besides advice or context.</li>
<li><strong>Informed:</strong> The people who are impacted by the project and are provided status and informed of decisions; and with whom there is one-way communication.</li>
</ul>
<h2 id="how-do-you-make-a-daci">How do you make a DACI?</h2>
<p>At its very simplest, a DACI can be a list. Just write down the four roles and fill it in with the people who should occupy them. That&rsquo;s it. Some people like to make tables or forms, but it&rsquo;s not necessary and can add extra work if you&rsquo;re not proficient with using tables to organize information. Rather than wrestling with formatting, you should be spending your time thinking through roles and responsibilities.</p>
<h2 id="some-daci-practices">Some DACI practices</h2>
<p>It&rsquo;s a good practice to put a DACI at the top of your project documents and talk it through with people when you hold a kickoff meeting.</p>
<p>If a group you&rsquo;re working with hasn&rsquo;t used DACI themselves, sharing something like this guide or one of the articles I list below as a pre-read can go a long way to making it seem a little less strange. In organizations where there&rsquo;s a lack of trust or a lot of contentiousness, it can be strange and awkward to openly discuss this kind of thing.</p>
<p>For complex projects with a number of work streams, you may need to create a high-level DACI for the entire project, then DACIs for each work stream.</p>
<p>It&rsquo;s not out of line for the &ldquo;Approver&rdquo; in a DACI to be a group (e.g. a senior leadership team), in which case the &ldquo;Driver&rdquo; is accountable for wrangling consent and finalization from the team in the &ldquo;Approver&rdquo; role. This isn&rsquo;t an invitation to descend into consensus culture or require unanimity to make a decision: Sometimes people have to make the choice to &ldquo;disagree and commit.&rdquo; The Driver has the privilege of determining when productive conversation is exhausted and the work is ready for review by the Approver.</p>
<p>It&rsquo;s a best practice for the person in the Driver role to make the DACI available for review and comment.</p>
<p>While the Driver is the ultimate decider of roles and responsibilities, asking for comment and feedback can help settle the sometimes tricky question of who&rsquo;s consulted and who&rsquo;s informed by giving stakeholders a chance to think about and comment on how they&rsquo;re impacted by a project. That sort of review will often unearth somebody who might have gone missing otherwise. That can help ensure, when you get to the point you&rsquo;re pushing ahead with an RFC or project document, that you&rsquo;re not missing something.</p>
<p>If you&rsquo;re doing something with broad implications for an entire organization or multiple departments/teams, asking the Approver for a quick review of the DACI before sharing widely is a good idea. They may have context about other departments or stakeholders that can help you craft a better, more inclusive DACI. In contentious environments, they can do some diplomacy with their peers.</p>
<p>Finally, remember that a little goes a long way, especially at first. DACIs and RACIs provide a level of structure that can feel awkward and stilted. If one team is used to talking in terms of roles and responsibilities but another isn&rsquo;t there yet, a DACI can feel unusually assertive. So if you&rsquo;re bringing DACIs to people who are new to them, be patient and be as kind as you are clear about the boundaries these frameworks represent.</p>
<h2 id="more-reading-on-daci-and-decision-making-frameworks">More reading on DACI and decision-making frameworks</h2>
<ul>
<li><a href="https://www.projectmanager.com/blog/using-daci-framework-for-better-group-decisions">Using DACI Framework for Better Group Decisions</a> - a quick overview of DACI</li>
<li><a href="https://www.fool.com/the-blueprint/daci/">The DACI Decision-Making Framework Explained</a> - another overview and brisk walkthrough of how to build a DACI</li>
<li><a href="https://blog.trello.com/daci-method-for-better-project-decisions">Trello&rsquo;s take on DACI and another guide to how to build a DACI matrix</a>.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Finished reading: Old Man&#39;s War by John Scalzi 📚</title>
      <link>https://mike.puddingtime.org/2022-04-24-finished-reading-old/</link>
      <pubDate>Sun, 24 Apr 2022 19:47:38 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-04-24-finished-reading-old/</guid>
      <description>&lt;p&gt;Well, part of the point of re-reading this was to take a small break from more dense stuff, so I will keep this short:&lt;/p&gt;
&lt;p&gt;Scalzi acknowledges his debt to Robert Heinlein, and on this third read I still don&amp;rsquo;t know how deeply that acknowledgement is meant to go: As a collection of military SF tropes, yes, &lt;em&gt;Old Man&amp;rsquo;s War&lt;/em&gt; is Heinleinesque. As a matter of tone, yes, that too. As a matter of world view, it&amp;rsquo;s a little harder nut to crack.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Well, part of the point of re-reading this was to take a small break from more dense stuff, so I will keep this short:</p>
<p>Scalzi acknowledges his debt to Robert Heinlein, and on this third read I still don&rsquo;t know how deeply that acknowledgement is meant to go: As a collection of military SF tropes, yes, <em>Old Man&rsquo;s War</em> is Heinleinesque. As a matter of tone, yes, that too. As a matter of world view, it&rsquo;s a little harder nut to crack.</p>
<p>When I was serving, every soldier who read was probably reading Tom Clancy, a submarine nerd who glorified war without any apparent reflection. He probably helped me maintain a sort of moral equilibrium because he was so plainly deluded about the nature of the military and the people in it, or at least so thoroughly saw it as his mission to uphold the &ldquo;warriors&rdquo; he was depicting as moral paragons, that it was not possible to read any of his output without looking around the barracks at your actual everyday reality, snort, and keep reading to see how the story came out.</p>
<p>Scalzi is not Tom Clancy. He makes references to a &ldquo;bad war&rdquo; in his future history, and is careful to note that his main character was against that one, but <em>for</em> the nightmare Hobbesian struggle that is the war consuming the wider galaxy because it is an existential matter for humanity.</p>
<p>Tonally, <em>Old Man&rsquo;s War</em> is sort of the military SF equivalent of, say, <em>Zombieland</em>: When his colonial troopers go to war against a race of one-inch-tall people, tossing them into buildings and stepping on them; or when an invading race brings along celebrity chefs to televise the ways you can cook a Terran, you&rsquo;re sort of cued to relax a little: Scalzi&rsquo;s galaxy at war is a little absurd, even if he remains more reverent of his upstream material than <a href="https://www.imdb.com/title/tt0120201/">Paul Verhoeven was</a>.</p>
<p>There&rsquo;s a grabbag of other tropey classic and military SF stuff that might or might not work for people, but that are key to the military SF experience: battlefield promotions for gumption and smarts, humorless bureaucratic foils, the drill sergeant who softens up at the end, etc. etc. There&rsquo;s at least one scene where the subversive self-awareness that keeps <em>Old Man&rsquo;s War</em> on the right side of the moral scale yanked me out of the story.</p>
<p>So, basically the perfect &ldquo;cooldown&rdquo; book. There&rsquo;s a little food for thought and it&rsquo;s more than a slavish homage to what came before. Sometimes it spends more time than it should trying to distinguish itself from its upstreams. It doesn&rsquo;t really leap into the plot, but it understands that a lot of the appeal of SF to its biggest fans is in the world-building and EPCOT-like tour of the future, so it&rsquo;s not a huge ding that we spend some time gawking at the scenery.</p>
<p>Finished just in time for the weekend, and something more dense.</p>
<p><em><strong>Finished reading: <a href="https://micro.blog/books/9781429914710">Old Man&rsquo;s War</a> by John Scalzi 📚</strong></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Finished reading: Kill It with Fire by Marianne Bellotti 📚</title>
      <link>https://mike.puddingtime.org/2022-02-21-finished-reading-kill/</link>
      <pubDate>Mon, 21 Feb 2022 21:39:22 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-02-21-finished-reading-kill/</guid>
      <description>&lt;figure&gt;
&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://pdxmph.micro.blog/uploads/2022/53e68ea22e.jpg&#34; alt=&#34;Ride attendant&#34; title=&#34;DSCF2011.jpg&#34; border=&#34;0&#34; width=&#34;600&#34; height=&#34;400&#34; /&gt;
&lt;figcaption&gt;Ride Attendant, 2017&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I don&amp;rsquo;t know how many times I&amp;rsquo;ve said &amp;ldquo;the legacy stuff&amp;rdquo; at work in the past six months, but it&amp;rsquo;s a lot. I picked up &lt;em&gt;Kill It With Fire&lt;/em&gt;, which concerns itself with how to manage aging systems, because I&amp;rsquo;d been saying &amp;ldquo;the legacy stuff&amp;rdquo; a lot just as a colleague noticed the book.&lt;/p&gt;
&lt;p&gt;This was perhaps an aspirational purchase: I do have a few folks dealing with some creaking, legacy stuff, and I thought it wouldn&amp;rsquo;t hurt to get a few pointers that would take me beyond my usual, deliberative, incremental self as I work with them. I did get some pointers, and also some great insights that go beyond dealing with mere technology.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<figure>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://pdxmph.micro.blog/uploads/2022/53e68ea22e.jpg" alt="Ride attendant" title="DSCF2011.jpg" border="0" width="600" height="400" />
<figcaption>Ride Attendant, 2017</figcaption>
</figure>
<p>I don&rsquo;t know how many times I&rsquo;ve said &ldquo;the legacy stuff&rdquo; at work in the past six months, but it&rsquo;s a lot. I picked up <em>Kill It With Fire</em>, which concerns itself with how to manage aging systems, because I&rsquo;d been saying &ldquo;the legacy stuff&rdquo; a lot just as a colleague noticed the book.</p>
<p>This was perhaps an aspirational purchase: I do have a few folks dealing with some creaking, legacy stuff, and I thought it wouldn&rsquo;t hurt to get a few pointers that would take me beyond my usual, deliberative, incremental self as I work with them. I did get some pointers, and also some great insights that go beyond dealing with mere technology.</p>
<p>It&rsquo;d be a mistake to pass this book up because you don&rsquo;t have to deal with legacy systems. It has plenty of insight to share around the general endeavor of building and maintaining complex systems and, maybe more importantly, dealing with the humans keeping those systems running.</p>
<p>Highly recommended.</p>
<p><em><strong><a href="https://micro.blog/books/9781718501195">Kill It with Fire</a> by Marianne Bellotti 📚</strong></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Currently reading: How to Take Smart Notes by Sönke Ahrens 📚</title>
      <link>https://mike.puddingtime.org/posts/2022-02-13-currently-reading-how/</link>
      <pubDate>Sun, 13 Feb 2022 15:27:16 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-02-13-currently-reading-how/</guid>
      <description>In the process of doing my digital declutter, I came across this little book about a particular note-taking method that is really changing my thinking about how to behave with intentionality.</description>
      <content:encoded><![CDATA[<p>In the process of doing my digital declutter, I came across this little book about a particular note-taking method that is really changing my thinking about how to behave with intentionality.</p>
<figure>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://pdxmph.micro.blog/uploads/2022/6cddd3fff9.jpg" alt="Chalk in a jar in a window" title="DSCF9499.jpg" border="0" width="599" height="399" />
<figcaption>Chalk in a jar in a window</figcaption>
</figure>
<p>I usually save writeups about books until I&rsquo;m done with them, but this book made some wheels turn and took me off in another direction, so this is partly a mid-read writeup and partially documentation of some lightbulbs lighting up.</p>
<p>The opening chapters of <em>Smart Notes</em> describe Niklas Luhmann&rsquo;s &ldquo;Zettelkasten&rdquo; knowledge management system. In short, Luhmann kept a slipbox of notes, sequentially numbered and cross-referenced, each ideally written in an atomic manner about a single idea or concept. As Ahrens points out in the book, the underlying sensibility of the system is a sort of cousin to David Allen&rsquo;s <em>Getting Things Done</em>, except for ideas instead of work/actions. Also similar to GTD is the proliferation of documentation and implementation details you can go find on the &rsquo;net.</p>
<p>I came to this book because I recently adopted Obsidian for note-taking, and it includes a few plugins and affordances that make keeping a digital Zettelkasten simple. I read enough about the approach to spark my curiosity, and all roads seemed to point to this.</p>
<p>As it turns out, the real value is less the &ldquo;how to do a Zettelkasten&rdquo; chapters. There are plenty of web tutorials that explain the mechanics. Plenty of those same tutorials miss out on the &ldquo;why&rdquo; of using a Zettelkasten vs. any other note-taking or knowledge management approach you might use. Here are a few of those whys:</p>
<p>Top-down hierarchies of notes (e.g. carefully labeled folders) over-direct and stifle the interconnected nature of how we actually think and know by predetermining where an idea &ldquo;belongs.&rdquo; By writing notes atomically &ndash; that is, about the most narrow idea possible &ndash; and storing them in a flat sequence, ideas are left free to be connected and assembled, then reconnected and reassembled over and over.</p>
<p>By providing a trusted system, Zettelkastens allow you to relax about where your knowledge is. It&rsquo;s written down in brief notes that describe one concept well.</p>
<p>By keeping a collection of atomic notes &ndash; Luhmann&rsquo;s own Zettelkasten reportedly exceeded 90,000 such notes by the time of his death &ndash; you make it easier to develop your thinking on a matter by constantly cross-referencing and connecting, allowing your understanding to change over time as new ideas come in and you write them down.</p>
<p>By making yourself write an idea down in as contained and focused a manner as possible, you also ensure that you actually understand it. As a former editor I remember using the coherence of individual passages in a freelancer&rsquo;s submitted work as a guide to where I might want to fact-check or simply press the writer to rethink. If a passage didn&rsquo;t read quite right, and if I had been through enough assignments from that writer to know they were an organized thinker, bad mechanics, stoppers, and uneven flow told me they might not understand what they were writing.</p>
<p>On that last point, Ahrens is a firm believer in the idea that writing is thinking, and that sitting quietly and letting words play out in your head is not. I have know this for a long time, and can remember key moments in my professional development where I used writing to develop my thinking, sometimes realizing at the end of three or five thousand words that I had ended up somewhere quite different from where I began.</p>
<p>There are a number of other &ldquo;whys&rdquo; that make the system work, but these are the ones that most stand out to me at just over half way through.</p>
<p>Where this book caused a spark to jump a gap came in combination with my recent read of Cal Newport&rsquo;s <em><a href="/posts/2022-02-06-finished-reading-digital/">Digital Minimalism</a></em> and the ensuing <a href="/posts/2022-02-09-some-notes-on/">digital declutter</a> I have undertaken.</p>
<p>The point of that declutter is to become more intentional about how I use technology, asking myself things like &ldquo;What do you need to do to be intentional about this thing? Is that practical or useful?&rdquo; and &ldquo;When you adopted this thing, what aspirational idea did you have about it?&rdquo;</p>
<p>I was doing some very basic writing about these things, but not in an atomic way. Instead, I was either making checklists, which involve believing that you &ldquo;know&rdquo; a lot about the thing you are checklisting; or writing essays, which are fine if you just want to publish a blog post or essay. What I realized, though, was that I wasn&rsquo;t really thinking these things through deeply &ndash; I was plowing through a checklist of things to &ldquo;consider&rdquo; in a very superficial way. So I took a step back and tried a few things:</p>
<ul>
<li>I decided to treat my checklists as prompts to think more about each thing on them, instead of as a collection of things I already understood and just needed to act on. Each of those prompts will become its own note.</li>
<li>I took an essay I was developing on tools I use in photography and decomposed it into atomic notes, making sure to use tags for each note so I could pull it all back together later, or build an index within Obsidian.</li>
</ul>
<p>By taking the time to do that &ndash; to decompose my thinking about all the things I do around the topic of photography &ndash; I&rsquo;ve made it easier to do my digital declutter, because instead of simply encountering an app, tool, or service and having a thought in the form of talking to myself briefly about its value, I&rsquo;ve written about how I do photography, and why I have made the choices I have, the better to ask how that particular thing serves me.</p>
<p>Writing things down has also allowed me to anchor myself. I&rsquo;m something of a tools and practices magpie and I don&rsquo;t always slow down to think about how something is going to be in my life long-term. Sometimes I dart from practice to practice or tool to tool, leaving me with a hodgepodge of different approaches that take time to untangle or reconcile with each other. That means less time to do the thing I actually care about, and more time fussing with tools and processes. The act of writing things down, reasoning why I do things the way I do, gives me a grounding point to start from: &ldquo;The best way to do this thing is <em>this way</em> for <em>these reasons</em>. So just do it that way. It&rsquo;s better than the other ways you&rsquo;ve tried. Leave room to iterate, but make that part of your practice of intentionality as well.&rdquo;</p>
<p>On that last point, I&rsquo;m adding some stuff to my longer feedback loops (monthly and quarterly reviews) so that I know I can address little paper cuts along the way without being in a state of constant flux. It&rsquo;s been an interesting experience noting that something I do as a manager for teams I work with had to be rediscovered in my personal life.</p>
<p>So, great book so far, and I&rsquo;m so glad my curiosity led me to it because it has truly enhanced how I&rsquo;m coming at the overall theme of intentionality. It has had immediate applications for my digital declutter, and I&rsquo;m applying it to the other areas of my life where I want to spend more time creating and less time fussing or reinventing wheels.</p>
<p><em><strong><a href="https://micro.blog/books/9781542866507">How to Take Smart Notes: One Simple Technique to Boost Writing, Learning and Thinking – for Students, Academics and Nonfiction Book Writers</a> by Sönke Ahrens 📚</strong></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Notes on a digital declutter</title>
      <link>https://mike.puddingtime.org/posts/2022-02-09-some-notes-on/</link>
      <pubDate>Wed, 09 Feb 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-02-09-some-notes-on/</guid>
      <description>I put some thought into how to apply digital minimalism. This is due for a rewrite and update, but it might spark some thought for people considering how to take a step back and clean out their digital closets.</description>
      <content:encoded><![CDATA[<p>I gave myself a few days to think about <em><a href="https://mph.puddingbowl.org/2022/02/06/finished-reading-digital.html">Digital Minimalism</a></em>, wondering if a declutter might be a good idea. I found myself feeling so moved and have spent some time teeing it up.</p>
<p>Newport&rsquo;s take on how to do that starts from what I guess you could call a naive footing, dumping everything and then considering it without a lot of preconception. I think that is fine, but I&rsquo;d been giving a lot of this some thought already, have done a few declutters in the past, and had heard Newport talk before reading his book, so I colored outside the
lines and skipped a few steps with some parts, but kept a few things from his approach, too.</p>
<p>I have a few things in mind:</p>
<p>I want to radically pare back the number of tools hanging from my belt. I keep a lot of things hanging around for this edge case or that, this possible scenario or that. I decided to reduce as much as possible by getting rid of things that repeated each other. For instance, I like Ulysses well enough but it repeats other things and it has a subscription fee. So, yes, it can post to micro.blog and has a few other tricks, but none that I need. I&rsquo;ve also bounced back and forth between
RSS readers for whatever reason, but Feedly&rsquo;s native app works great for my workflow.</p>
<p>I&rsquo;ve also built up a lot of papercuts with the things I do use
regularly, such as:</p>
<ul>
<li>How do I block a site in Feedly so that I can keep a little
serendipity with a few eclectic sources without constantly bumping into the same site with a paywall I&rsquo;ll never click through?</li>
<li>How do I get something into an Obsidian inbox using a shortcut to keep me from pecking around inside Obsidian and ultimately forgetting the fleeting note I wanted to create?</li>
<li>Why does micro.blog pick the images it does to send when I crosspost to Twitter?</li>
<li>Can I get more folders in SaneBox without paying more? How much would  I have to pay to get more?</li>
<li>I&rsquo;ve got good automated note import into Obsidian, but am I linking  ideas and and concepts adequately? (<strong>A:</strong> No.) How can I fix that?</li>
</ul>
<p>And I want to do the sort of core thing, which is unplug my brain from all the social media inputs and stuff that doesn&rsquo;t feel nutritious.</p>
<p>The more I thought about it all, the more I realized there was a project there. Turns out that trying to be more intentional means doing stuff like writing it all down and prioritizing.</p>
<h2 id="fixing-todos">Fixing Todos</h2>
<p>So, realizing I needed to capture tasks, I started by cleaning up my todo situation. I&rsquo;ve been living in a few places over the past few years. I recently tried to retrench on Apple&rsquo;s Reminders because it has gotten pretty good, but it turns out not good enough. It&rsquo;s great that you can nest reminders under each other, it is terrible that when you painstakingly set up a morning routine with subtasks and then turn on recurrence, the only thing that actually reoccurs is the parent item.</p>
<p>I also gave Obsidian a shot, on the premise that it is pretty much org-mode except with Markdown, an actually good mobile app, and no dependency on Emacs. It is great, but it also has some challenges in terms of making quick entries, and the task management stuff that would take it to the next level has a lot of the same issues most plaintext todo systems have in terms of awkward and visually cluttery metadata. org-mode does a great job of hiding or restyling that stuff, but you&rsquo;re
still living in Emacs, and the power comes at the cost of a complex and sometimes brittle pile of configuration code and stability-threatening Emacs extensions.</p>
<p>What else? Omnifocus, Todoist, Remember the Milk, Trello, and Workflowy all suggested themselves. I won&rsquo;t go into why not for each, but it came down to &ldquo;want Apple-native, a good mobile experience, decent capture, subtasking, recurrence, decent in-task notes, and integration with my calendar.&rdquo;</p>
<p>So, I went with Things. I&rsquo;ve had a license for years, I&rsquo;ve always preferred it to Omnifocus for its relative visual calm.</p>
<p>I could have kept my old Things tasks around and cleared them all out, but I decided to just wipe and start over, and borrowed a page from Getting Things Done by doing an initial braindump into my new trusted system (for tasks, not ideas &hellip; that&rsquo;s Obsidian, but I&rsquo;ll get into that some day). A lot of the things I knew I&rsquo;d want to get to in my digital declutter came out during that dump. I made myself sit still, get  everything out in its simplest form without trying to schedule, label,
or organize.</p>
<p>Once I did the braindump I did start looking for organizing principles. Things has the whole &ldquo;Areas&rdquo; concept, so &ldquo;Personal&rdquo; and &ldquo;Work&rdquo; presented themselves as obvious candidates for top-level. I also added a &ldquo;Meta&rdquo; area, which I&rsquo;ll get to.</p>
<p>So I hucked everything into either &ldquo;Personal&rdquo; or &ldquo;Work&rdquo; then started sorting into projects, subtasks, and tags.</p>
<p>The &ldquo;Declutter&rdquo; project had a lot of items, so I took advantage of Things&rsquo; ability to create headings, and broke the project into:</p>
<ul>
<li>Tools</li>
<li>Services</li>
<li>Media Outlets</li>
<li>Practices</li>
<li>Social Media</li>
</ul>
<p>Into each I put all the things I use or have around, all the papercuts I&rsquo;ve thought about, and all the questions I wanted to answer:</p>
<ul>
<li>What do you need a break from?</li>
<li>What do you need to do to be intentional about this thing? Is that practical or useful?</li>
<li>When you adopted this thing, what aspirational idea did you have about it?</li>
</ul>
<h2 id="dailyweeklymonthly-routine">Daily/Weekly/Monthly Routine</h2>
<p>Recurrence in my todo tool is important to me because I want to codify a daily routine I&rsquo;ve had on and off over the years, starting back when I was stationed at Ft. Bragg and started and ended the day with a pen, a legal pad, and a list of tasks:</p>
<ul>
<li><strong>Morning:</strong> Write down deliverables. Start doing things.</li>
<li><strong>Evening:</strong> Make sure you crossed everything off you managed to get   done. Tear off the sheet, copy over the undone stuff to tomorrow&rsquo;s list and leave the pad front and center on your desk when you shut down for the day.</li>
</ul>
<p>Since then, I&rsquo;ve tended to move todos into a digital tool, but that list is just part of the daily page.</p>
<p>For starters, there are some prompts for morning and evening:</p>
<ul>
<li>What are the three most important things today?</li>
<li>What are you most concerned about right now?</li>
<li>What are you most happy about right now?</li>
<li>What happened today?</li>
<li>What went well today?</li>
<li>What could have been improved today?</li>
</ul>
<p>I also have tasks for each morning:</p>
<ul>
<li>Reviewing todos and blocking time in my calendar to get to them.</li>
<li>Reviewing places where a deliberate break will be a good idea.</li>
<li>Reviewing the day for manageability and pushing things out that aren&rsquo;t
time sensitive if I need some space.</li>
<li>Review my email inbox</li>
</ul>
<p>My weekly and monthly kickoffs are pretty similar in shape and intent: Try to predict where I&rsquo;ll need time or space and get ahead of the week or month.</p>
<p>To support this routine, I tweaked Sanebox to send me work email digests at the beginning and end of the day so I can quickly sweep through and bulk archive or flag things.</p>
<h2 id="writing-it-down">Writing it down</h2>
<p>Getting my todos straightened out and having a daily routine to stick to gave me a safe space to think in, so I turned to Obsidian and set up a few pages to write down everything I was thinking about.</p>
<p>I&rsquo;ve got a tentative <a href="https://zettelkasten.de/posts/overview/">Zettelkasten-like</a> folder and document
structure using a few plugins:</p>
<ul>
<li>Daily pages as a recipient of fleeting notes. Fleeting notes are meant to be ephemeral, so I could have gone with a lot of things, but I also added &hellip;</li>
<li>&hellip; the <a href="https://github.com/ryanjamurphy/lumberjack-obsidian">Lumberjack</a> plugin, which allows me to make Shortcut actions to do quick capture under a &ldquo;Fleeting Notes&rdquo; heading on my current daily page. The action lives as an icon on the dock of my iPad and iPhone, and I can get at it from the task bar on my Mac.</li>
<li>Zettelkasten numbering for permanent notes</li>
<li>Readwise to import highlights from Pocket, Kindle, and web clippings into a &ldquo;Literary Notes&rdquo; folder</li>
</ul>
<p>Thanks to Things and Obsidian having URL schemes, it&rsquo;s possible to link back and forth between the two apps, so my Things declutter project can
link back to the index page for the writing I&rsquo;m doing about that project
in Obsidian and vice versa.</p>
<h2 id="progress-so-far">Progress So Far</h2>
<p>That&rsquo;s a lot of table-setting, but I had some downtime today so I was
able to dig in on some of the actual tasks in the project: Unsubscribing
to media, deleting apps, asking questions on support forums or via help
forms to address papercuts, disconnecting auto-posting tools, paring
down follow lists, fixing papercuts as I was given answers or figured
things out for myself, comparing features on tools in the inventory.</p>
<p>Something I never used with Things before but now really appreciate is the Logbook area, where completed tasks go. I&rsquo;ve adopted the practice, when a task is about answering a question or learning something, to include the answer in the notes. I really like being able to end the day by going back to the Logbook and seeing everything I checked off.</p>
<h2 id="now-for-the-hard-but-nice-part">Now for the hard but nice part</h2>
<p>All of this was to get me into a place where I can unplug from social media for a month.</p>
<p>Things I&rsquo;ll stop doing:</p>
<ul>
<li>Looking in on social media.</li>
<li>Posting anything to social media, including automated stuff.</li>
<li>Adding any new digital tools, even just to play with them.</li>
<li>My nightly pre-bedtime YouTube binge.</li>
</ul>
<p>Things I&rsquo;ll keep doing:</p>
<ul>
<li>
<p>Reading and keeping notes</p>
</li>
<li>
<p>Writing and posting small entries about what I read</p>
</li>
<li>
<p>Taking pictures and posting them to my blog</p>
</li>
<li>
<p>Writing about my declutter:</p>
<ul>
<li>What do you need a break from?</li>
<li>What do you need to do to be intentional about this thing? Is that
practical or useful?</li>
<li>What aspirational ideas do you have about this thing?</li>
</ul>
</li>
<li>
<p>Keep in touch with people over email, texts, Signal, etc. Hopefully even more.</p>
</li>
<li>
<p>Reach out to people with whom social media is my only real contact and  make sure there&rsquo;s a way to stay in touch. I don&rsquo;t see a bright future  for Facebook in all this.</p>
</li>
</ul>
<p>Things I&rsquo;m adding:</p>
<ul>
<li>A daily journal practice.</li>
<li>A real effort to maintain a Zettelkasten for my reading and writing.
This feels intimidating for some reason. The system is easy, but I&rsquo;ve
only recently restarted my reading habits and I&rsquo;m curious about what
will emerge. I&rsquo;ll be sure to document whether I&rsquo;ve become an idiot.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>The outrage clown industrial complex</title>
      <link>https://mike.puddingtime.org/posts/2022-02-07-the-outrage-clown/</link>
      <pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-02-07-the-outrage-clown/</guid>
      <description>All of these &amp;lsquo;attack liberals from the left&amp;rsquo; outrage merchants are plainly trying to serve a market niche of some sort and seem to be doing okay at it.</description>
      <content:encoded><![CDATA[<p><a href="https://freddiedeboer.substack.com/p/to-popularize-a-movement-there-needs">Freddie deBoer</a> on socialist entertainers:</p>
<blockquote>
<p>&ldquo;&hellip; I often get asked about &lsquo;Breadtube,&rsquo; a loose constellation of
socialish vloggers and streamers, and about Contrapoints and Hasan
Piker in particular. For many, they offer an easy onramp for socialist
community. The trouble is that I don’t know what exactly I’m supposed
to react to. Breadtube and those in its orbit appear to be
entertainers first, and typical of entertainers they’re longer on
passion than on coherence. Which would be OK, if such coherence lay in
some larger socialist project. The problem is that there is no real
socialist movement in 21st-century American politics. All we have are
entertainers.&rdquo;</p>
</blockquote>
<p>The rest is an interesting, prickly read and branding exercise.</p>
<p>As I&rsquo;ve picked up my reading and listening I&rsquo;ve been worrying at a
related idea that&rsquo;s still not completely formed, so I&rsquo;ll keep this
brief:</p>
<p>As I&rsquo;ve tried to broaden my reading, listening, and viewing, I&rsquo;ve seen a
pretty healthy outraged left industrial complex. It has staked out
broadly pro-socialism, anti-Democratic Party, anti-liberal, anti-&ldquo;woke&rdquo;
territory. The thing that really strikes me about it is the way it
behaves mostly like any other political entertainment entity across the
political spectrum, stoking outrage and going after the center from the
left. One vlog I found tries to look sort of like a cable news talk
show, only with a copy of <em>Manufacturing Consent</em> stood up on a shelf
behind one of the hosts in a way that I can only describe as
&ldquo;anti-casual,&rdquo; and I think that might be because the Biden-bashing,
Covid-truther, pro-Rogan, anti-&ldquo;woke&rdquo; stuff might confuse someone
without a helpful indicator that no, the hosts think Chomsky is cool so
just go with it.</p>
<p>The content and format are pretty tedious unto themselves. Maybe the
more interesting thing about it is that all of these &ldquo;attack liberals
from the left&rdquo; outrage merchants are plainly trying to serve a market
niche of some sort and seem to be doing okay at it. Like, there&rsquo;s an
actual market for attacking liberals from the left that can be serviced
and people can make a living at it, and that says something interesting
about where political sentiment might be right now &hellip; something
interesting about what people are hungry for.</p>
<p>The <em>bad</em> part of it is that a lot of it recreates the stuff we used to
rightly condemn right-wing talk radio for: It cuts corners, resorts to
<em>ad hominem</em>, and appeals to feelings of disgust and anger. Its
interpretation of the mood in the market it is trying to serve is that
anger will sell just fine, and it doesn&rsquo;t care who is alienated as it
goes about serving that market.</p>
<p>The personal line I am walking comes from a place of opposition to a lot
of stuff going on &ldquo;out there&rdquo; that has abandoned any attempt to bring
people along, or call them in, so the left outrage merchants are as
odious to me as the right-wing ones you can find on Fox or wherever.</p>
<p>So, I&rsquo;m all paid up on my subscription to Jacobin, with its very square,
not particularly outraged socialist nerds. I enjoy Catherine Liu and
Thomas Frank. When I see Adolph Reed get attention in <em>The New Yorker</em>,
I feel the same way I felt when someone from my home town made it big on
Star Search.</p>
<p>Very wholesome. Not super angry.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Finished reading: Digital Minimalism by Cal Newport 📚</title>
      <link>https://mike.puddingtime.org/posts/2022-02-06-finished-reading-digital/</link>
      <pubDate>Sun, 06 Feb 2022 15:21:36 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-02-06-finished-reading-digital/</guid>
      <description>Definitely recommended for its low-key vibe, and its emphasis on deliberation and care over simple prescriptions or tech abstemiousness. I&amp;rsquo;m going to give some of its ideas a try.</description>
      <content:encoded><![CDATA[<figure>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://pdxmph.micro.blog/uploads/2022/53ed4caee1.jpg" alt="Person reading alone on a rooftop patio" title="DSCF2989.jpg" border="0" width="599" height="399" />
<figcaption>Person reading alone on a rooftop patio, January 2022</figcaption>
</figure>
<p>A few years ago, pre-Trump, I quit social media and most news apps cold turkey. I was bothered by the effect social media dynamics had on my photography, and I was bothered by the engagement-driven nature of news apps. I wanted to listen to just myself on a creative level, and I hated the way news apps worked.</p>
<p>Over time I reestablished social media presences and spent some time tuning up how I read news. When I compare where I am today to where I was when I felt like I&rsquo;d just had enough of all of it, I feel generally healthier. At the same time, I still catch myself exhausting the well of things to read or catch up on, and I find myself swiping down the screen in a motion Cal Newport describes as pulling the arm of a slot machine that is eating my useful minutes.</p>
<p>Newport&rsquo;s definition of &ldquo;digital minimalism&rdquo; is:</p>
<blockquote>
<p>&ldquo;A philosophy of technology use in which you focus your online time on a small number of carefully selected and optimized activities that strongly support things you value, and then happily miss out on everything else.&rdquo;</p>
</blockquote>
<p>He cites three principles of digital minimalism:</p>
<blockquote>
<p><strong>Principle #1:</strong> Clutter is costly. Digital minimalists recognize that cluttering their time and attention with too many devices, apps, and services creates an overall negative cost that can swamp the small benefits that each individual item provides in isolation.</p>
</blockquote>
<blockquote>
<p><strong>Principle #2:</strong> Optimization is important. Digital minimalists believe that deciding a particular technology supports something they value is only the first step. To truly extract its full potential benefit, it’s necessary to think carefully about how they’ll use the technology.</p>
</blockquote>
<blockquote>
<p><strong>Principle #3:</strong> Intentionality is satisfying. Digital minimalists derive significant satisfaction from their general commitment to being more intentional about how they engage with new technologies. This source of satisfaction is independent of the specific decisions they make and is one of the biggest reasons that minimalism tends to be immensely meaningful to its practitioners.</p>
</blockquote>
<p>I&rsquo;ve known a few people in whom I can see those principles at work, and I&rsquo;ve always admired the deliberation with which they approach new technology. It has often read to me like a particular kind of self-care. I&rsquo;m more of a magpie when it comes to new things and have thought that kind of self-care might be a good thing to adopt.</p>
<p>There are a few tics in the style that I suppose are just part of what is normal for this kind of book. The phrase &ldquo;it turns out&rdquo; pops up a few times. The phrase &ldquo;we&rsquo;re wired to &hellip;&rdquo; pops up a few more. But rather than being a Jonah-Lehrer-like recitation of a bunch of studies (though a few are cited) this book is a little more quiet and less breathless. I was left feeling relieved that Newport has a full-time job he likes, because there&rsquo;s a moment where it feels like the book could have tipped over into the sort of cloying pseudo-movement merchandising play but ultimately did not.</p>
<p>What is most compelling to me about it is less its identification of everything that is wrong with digital technology &ndash; the attention-mining, the emotional toll, the wasted time &ndash; and more its temperate prescriptions.</p>
<p>Yes, it does discuss a 30-day &ldquo;digital declutter,&rdquo; but less as a cold-turkey feat of will and more as a call to fill that time in other ways and see what you get before gradually letting things back in as you determine the ways in which they can serve you.</p>
<p>There is a mild fixation on doing all this &ldquo;to live a more remarkable life,&rdquo; and that stirs in me a peevish resistance, but it&rsquo;s tempered by noting that it is okay and life-enhancing to simply do things for their own sake, or because they bring you pleasure or make your life better, and not because you should be out there crushing it in all things. It does argue in favor of more vigorous, mindful leisure, but not so much because it&rsquo;s important to be constantly &ldquo;productive&rdquo; as much as it is because it will probably make you feel better than social-media-enabled &ldquo;doing nothing.&rdquo;</p>
<p>Published in 2019, one poignant, melancholy aspect of this book is that it spends a lot of time on the value of unmediated human connection. Its prescriptions include avoidance of assorted &ldquo;like&rdquo; and other reaction affordances in favor of spending time talking to people. There are a few examples that are about being with others in gyms, exercise groups, etc. that are almost jarring as we close in on two years of pandemic life. It helpfully suggests that Facetime is a great technology for keeping personal connections over distances, but cannot anticipate the dull, suffocating exhaustion of contemplating yet another video meeting for people who have spent the past two years staring into screens full of flattened, grainy faces staring back.</p>
<p>Finally, it was kind of interesting to see the ways in which, over the past three years since the book was published, at least Apple has begun to help implement some of the attention-preserving, deliberate living practices Newport advocates. The Screentime tool provides a way to understand how you use your phone and where your time goes. The Focus tool makes it possible to filter out notifications or tailor the interruptions you&rsquo;re willing to indulge.</p>
<p>So, definitely recommended for its low-key vibe, and its emphasis on deliberation and care over simple prescriptions or tech abstemiousness. I&rsquo;m going to give some of its ideas a try.</p>
<p><em><strong><a href="https://micro.blog/books/9780525536512">Digital Minimalism</a> by Cal Newport 📚</strong></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>After 10 minutes with the Fujifilm mini Evo Instax camera</title>
      <link>https://mike.puddingtime.org/posts/2022-02-03-after-minutes-with/</link>
      <pubDate>Thu, 03 Feb 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2022-02-03-after-minutes-with/</guid>
      <description>&lt;p&gt;I bought the very first Fujifilm Instax hybrid camera they came out with
a few years ago and I did not get it. I didn&#39;t really quite understand
what the &amp;quot;hybrid&amp;quot; part meant, and the object itself was sort of
joyless: Clunky, blobby, fussy. If I wanted to take images that were not
as good as I could take with a nicer camera, and if all I was doing was
printing images taken with an inferior digital camera, I could have just
used my phone along with the Instax printer I already owned.
{: .dropcap}&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I bought the very first Fujifilm Instax hybrid camera they came out with
a few years ago and I did not get it. I didn't really quite understand
what the &quot;hybrid&quot; part meant, and the object itself was sort of
joyless: Clunky, blobby, fussy. If I wanted to take images that were not
as good as I could take with a nicer camera, and if all I was doing was
printing images taken with an inferior digital camera, I could have just
used my phone along with the Instax printer I already owned.
{: .dropcap}</p>
<p>When their next hybrid camera came along I just avoided it. Didn&rsquo;t care
for the aesthetics (more verve than the original hybrid for sure, but
not my thing), and the hybrid thing still didn&rsquo;t make a ton of sense to
me.</p>
<p>When Fujifilm announced the <a href="https://instax.com/mini_evo/en/">Instax mini Evo</a> I hesitated for a
second, but found the whole riff on the industrial design of their
X-series cameras (which are themselves a riff on a hodgepodge of old
film cameras of varying sorts) charming. So I preordered it, thinking
maybe handling would make the difference and if it didn&rsquo;t, well, B&amp;H
has a return policy.</p>
<p>I waited a few months for it to arrive, waffling back and forth on
whether or not to just cancel the order before it could even ship, but a
few things happened along the way. I had a lot of fun with a weird
little toy lens on a regular camera, and I realized that with Omicron
came a reduction in my wandering radius, which meant photography was
feeling a little stale to me again.</p>
<p>Now that it is here and I&rsquo;ve taken the obligatory first selfie,
recreated another recent image, and captured a brass monkey on a shelf,
I can say a few things about it right away:</p>
<ol>
<li>
<p>Handling really does make a difference. The faux-analog control
rings are sort of fun and help you bypass menus. I&rsquo;d love an
exposure compensation knob, which does live in a menu, but maybe
next time.</p>
</li>
<li>
<p>The in-camera effects and simulated &ldquo;lenses&rdquo; can be used to make
interesting images. I&rsquo;m looking forward to the double exposure mode
and see a few other interesting effects I can imagine uses for.</p>
</li>
<li>
<p>It feels a little better in the hand than the earlier hybrid sitting
on the shelf. Less blobby and clunky, and it takes up about the same
volume as my Fujifilm X100V. It&rsquo;s still made of plastic, but has a
nubbly faux-leather texture and a nice release button. I&rsquo;m going to
pop a few Peak Design anchor points on it and use it with a thin
strap for walking around.</p>
</li>
<li>
<p>It does take fine pictures for being super low resolution. There was
a boom in small-sensor, hyper-portable cameras in the early aughts.
They were shaped like a chunky thumb drive and could hang from a
lanyard. This outperforms those by quite a bit, but evokes a similar
aesthetic. I&rsquo;m looking forward to bright days and contrasty shadows,
and appreciate that there&rsquo;s a crop option, so if the relatively wide
28mm lens is hard to fill, you can just tap a few buttons to fix it
in-camera.</p>
</li>
<li>
<p>Face detection for autofocus, exposure adjustment, and a macro mode
&hellip; okay!</p>
</li>
<li>
<p>You can print to it from a phone or Fujifilm camera, which is pretty
neat.</p>
</li>
<li>
<p>It has enough onboard storage to hold a bunch of images, and you can
add a microSD card for more storage (and easier bulk import into a
computer or tablet).</p>
</li>
</ol>
<p>The one genuine annoyance I feel toward it (actually Fujifilm, Inc.) is
that you cannot transfer unprinted images to your phone via the
accompanying app. It&rsquo;s not like you can&rsquo;t get at them other ways, but it
adds some resistance to the process that Fujifilm will happily collect
~$0.60 per exposure to remove. I kinda feel like if you&rsquo;re the sort of
person to see the point in an underpowered digital camera printing
Instax film, you&rsquo;re likely to want to fiddle with the image in-app, then
round-trip it back out to the camera for a print. Not holding my breath
they&rsquo;ll &ldquo;fix&rdquo; this in an update, because some MBA somewhere in the
bowels of Fujifilm, Inc. most definitely does not consider this
arrangement &ldquo;broken.&rdquo;</p>
<p>I also wish the battery were removable. You can charge it up via a
micro-USB port, so it&rsquo;s no big thing to have a pocket charger along on a
trip, but it&rsquo;d be better yet to be able to buy a few replacement
batteries and keep them in your pocket. The mini Classic 90 has a
replaceable battery. A built-in battery means the camera itself is on a
planned obsolescence timer it really did not need to be on.</p>
<p>Al and I had a recent conversation after I brought home a film camera
from <a href="https://bluemooncamera.com">Blue Moon</a>. I was a little sheepish about it &ndash; the camera
count is sort of high around here &ndash; and she said &ldquo;you know, what&rsquo;s the
one thing you&rsquo;ve been doing for years, that you always come back to, and
that always brings you joy? I think this is okay.&rdquo;</p>
<p>This one seems like a pretty fun addition to the collection, so I&rsquo;m
happy to apply that principle.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Finished reading: A Lesser Photographer by C. J. Chilvers 📚</title>
      <link>https://mike.puddingtime.org/2022/01/29/finished-reading-a.html</link>
      <pubDate>Sat, 29 Jan 2022 15:50:00 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022/01/29/finished-reading-a.html</guid>
      <description>&lt;!--excerpt--&gt;A lot of advice and writing on photography is caught up in the difficulties professional photographers face, and is grounded in an assumption that you&#39;re taking pictures for commercial purposes. &lt;em&gt;A Lesser Photographer&lt;/em&gt; is a good remedy.</description>
      <content:encoded><![CDATA[<!--excerpt-->A lot of advice and writing on photography is caught up in the difficulties professional photographers face, and is grounded in an assumption that you're taking pictures for commercial purposes. <em>A Lesser Photographer</em> is a good remedy. 
<figure>
<img style="display:block; margin-left:auto; margin-right:auto;" src="https://pdxmph.micro.blog/uploads/2022/81f2cbc336.jpg" alt="A wall clock in strong shadows" title="DSCF3258-2.jpg" border="0" width="599" height="337" />
<figcaption>"Office Day," Portland, OR</figcaption>
</figure>
<p class="dropcap">I have been struggling a little with photography writing lately. When I rejiggered how I read I pulled in a few suggestions from Feedly to seed my photography reading, and I have found the experience grim.</p> 
<p>I know someone who is a very good, highly trained photographer. They&rsquo;re just the right age to have received their formal training in film photography, and they made the shift to digital just fine, but their career didn&rsquo;t really make the same shift: Their clients realized they could get &ldquo;good enough&rdquo; with a cheap light tent and a nice phone camera. They could point out a host of technical mistakes their former clients were making, but it just didn&rsquo;t matter, because a 300x300, 72dpi image on a product page, shot with an iPhone, was good enough.</p>
<p>Lots of professional photographers are feeling this pinch, and it comes out in a lot of writing about photography on the web, which is &ndash; compared to other enthusiast niches &ndash; very negative, even when it claims to be helpful. A lot of posts are about how to &ldquo;not look like a newbie,&rdquo; &ldquo;quit making these mistakes,&rdquo; etc. etc. There&rsquo;s a whole subgenre devoted to the menace of nephew wedding photographers. I recently read an article that suggested no photographer should post anything publicly without charging because it was devaluing photography.</p>
<p>So, a lot of photography writing feels like it is coming from frustrated professionals or pessimistic wannabes who don&rsquo;t actually want to share the joy of photography so much as they want to scare off the interlopers who just got back from Best Buy with a low-end mirrorless camera and a kit lens, and are now quietly interdicting formerly lucrative wedding, baptism party, and graduation photo gigs. Reading about art from the perspective of people whose primary ambition is to commercialize it is probably a bad bet anyhow, but it gets worse when their revenue stream is threatened.</p>
<p>Which brings me to <em>A Lesser Photographer</em>, a very small book you can read in under an hour that does a lot to help you get your head on straight if you&rsquo;ve been cowed by gatekeepers who want to make you doubt yourself. It does this in the early going by acknowledging that advances in technology are allowing people to make &ldquo;good enough&rdquo; photos, and urging photographers to look at this as an opportunity:</p>
<blockquote>
<p>&ldquo;Is Total Automation the Future of Photography? Yes, and that may serve artists particularly well. Even though anyone can microwave a frozen dinner, what we really want (and pay good money for) is a dinner prepared by someone who knows what they’re doing, has a vision, and doesn’t take shortcuts. Automation in gear will always sell better than the prospect of having to work with a creative problem. Welcome this with open arms. There’s no better way to differentiate your work from the masses than to wrestle with a problem everyone else is avoiding—and win.&rdquo;</p>
</blockquote>
<p>Sometimes the tone gets a little sharp, but one thing I appreciated about it is that it always comes around to something constructive. Consider this bit about cliché subjects:</p>
<blockquote>
<p>&ldquo;There’s a reason articles abound on how to take photos of waterfalls and fireworks. It’s because everyone does it. It’s not unique. There are times when it makes sense to put down the camera and take in the world around you. You’ll often find a scene no other photographer is covering. One of my photography professors, Monte Gerlach, put it this way: whenever there is a sunset in front of you, turn around and start shooting what’s behind you.</p>
</blockquote>
<blockquote>
<p>&ldquo;If you can find it on a postcard, it’s already been covered pretty well and by better photographers than you. It’s probably time to move on to a more unique scene. The throngs of budding photographers, reading how-to articles, will take care of the dew-covered flower close-ups for you. Create something you care about, and it will rarely be a cliche.&rdquo;</p>
</blockquote>
<p>There are a lot of photoblog posts that content themselves to tell you not to take pictures of certain things (umbrellas, waterfalls, fireworks, sunsets, etc. etc. They don&rsquo;t often muster the generosity to suggest even that simple prompt to &ldquo;turn around and start shooting what&rsquo;s behind you.&rdquo;</p>
<p>As someone who tries to follow the advice &ldquo;be the photographer who goes back,&rdquo; I appreciated this advice about creating photos that last:</p>
<blockquote>
<p>&ldquo;The longevity of an interesting photograph is inversely proportional to the lack of longevity in the subject. I’ve spent half of my almost thirty years in photography on landscape photography. Now, as I digitize and archive that collection, I realize most of the subjects I captured appear exactly the same today as the day I took the original photo. Plus, the number of photographers traveling those same back trails has increased exponentially. This means, even if I were a modern-day Ansel Adams, my best photos from those years have probably been duplicated by dozens of like-minded photographers. So, what about photography subjects is still scarce? Scarcity must be sought in subjects that won’t be the same in 10 years or even 10 seconds—in the fleeting moments. For those who take naturally to people-based photography, this theory is nothing new, and it’s easy to implement. But for those of us who tell stories with and without people, including landscape, architecture, and abstract photographers, the search must begin for fleeting moments within our favorite subjects.&rdquo;</p>
</blockquote>
<p>So, I appreciated this book a lot. It is written in a spirit I aspire to when I am sharing what I know about my two great creative outlets &ndash; writing and photography &ndash; and it sort of &ldquo;helped the helper&rdquo; to the extent it gave me a small lift I didn&rsquo;t know I needed as too much photo blogging was dragging my spirits down.</p>
<p>The last note I copied before finishing it is something I may just have to turn into phone wallpaper or something:</p>
<blockquote class="epigraph">
"Few people follow your work. Even fewer care. What are you doing with that freedom?"
</blockquote> 
<p><em><strong><a href="https://micro.blog/books/9781718038653">A Lesser Photographer</a> by C. J. Chilvers 📚</strong></em></p>]]></content:encoded>
    </item>
    <item>
      <title>Finished reading: A Libertarian Walks Into a Bear: The Utopian Plot to Liberate an American Town (And Some Bears) by Matthew Hongoltz-Hetling 📚 </title>
      <link>https://mike.puddingtime.org/2022-01-25-finished-reading-a-libertarian-walks/</link>
      <pubDate>Tue, 25 Jan 2022 22:23:40 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-01-25-finished-reading-a-libertarian-walks/</guid>
      <description>&lt;figure&gt; 
&lt;div style=&#34;text-align:center;&#34;&gt;&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/0712717d72.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;wooden bear carving at Camp 18, Oregon&#34; /&gt;&lt;/div&gt;
&lt;figcaption&gt;Camp 18, Elsie, Oregon&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p class=&#34;dropcap&#34;&gt;In 2004, a group of Libertarians realized the dream of the Free Town Project by moving en masse to Grafton, New Hampshire, where they intended to overwhelm the locals and reshape the town according to their Libertarian principles.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;bear&amp;rdquo; of the title is more or less New Hampshire&amp;rsquo;s entire bear population, which found a libertarian paradise amenable for its own reasons: Unregulated living (and waste disposal) coupled with residents who just enjoyed watching the bears and fed them to come around led to an explosion in the local bear population, some attacks, and a covert bear hunt.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<figure> 
<div style="text-align:center;"><img src="https://its.puddingtime.org/uploads/2022/0712717d72.jpg" width="600" height="400" alt="wooden bear carving at Camp 18, Oregon" /></div>
<figcaption>Camp 18, Elsie, Oregon</figcaption>
</figure>
<p class="dropcap">In 2004, a group of Libertarians realized the dream of the Free Town Project by moving en masse to Grafton, New Hampshire, where they intended to overwhelm the locals and reshape the town according to their Libertarian principles.</p>
<p>The &ldquo;bear&rdquo; of the title is more or less New Hampshire&rsquo;s entire bear population, which found a libertarian paradise amenable for its own reasons: Unregulated living (and waste disposal) coupled with residents who just enjoyed watching the bears and fed them to come around led to an explosion in the local bear population, some attacks, and a covert bear hunt.</p>
<p>The bears are also not really the point, but they serve to help make it. The libertarians are also not entirely the point.</p>
<p>I picked this book up after listening to a few podcasts the author did on his promotional tour, and was expecting to read a narrow narrative along the lines of &ldquo;Libertarians take over a town, they&rsquo;re betrayed by their idealism, bears ensue,&rdquo; but there&rsquo;s more in here, including a tour of New Hampshire history from the colonial era to present, focusing on both the history of bear and human interactions and New Hampshire&rsquo;s deeply ingrained hatred of taxes and regulation.</p>
<p>Libertarians maintain a pretty big tent. The earliest ones I knew were debate club nerds who happened to be 2nd Amendment absolutists and enjoyed wearing suits. Over time, I&rsquo;ve come to know a few other types who range from anarchocommunist to anarchocapitalist, with a blend of cultural characteristics. Some just look like Republicans, some are hippies. The Libertarians I&rsquo;ve known well are all pretty much fine people. They get intense over financial aid and have more of a propensity for &ldquo;person with a SNAP card bought cigarettes and a nice steak right in front of me&rdquo; stories than my other friends, but they&rsquo;re like most other utopians I know, too. They think society has gotten a bit over-leveraged, and that a lot of state interventions wouldn&rsquo;t be necessary if there weren&rsquo;t so many state interventions. Pressed for details, most of the ones I&rsquo;ve known would probably not abolish the EPA or FDA.</p>
<p>The Libertarians in Grafton were not all like the Libertarians I&rsquo;ve known, and they sort of ruined the town during their experiment. Or at least made it worse. One thing that makes this book thought-provoking and not a simple exercise in Libertarian-punching is that it returns a few times to the fact that Grafton was already a pretty tax-averse place. Between 1940 and 1950,  for instance, 20 percent of their homes burned down due to a refusal to fund fire fighters. Over the course of the book we learn that their roads began to fail, they stopped lighting street lights, their police cruiser was more often in the shop than on patrol, and for a portion of the winter roads would go unplowed because the  plowing budget had been exhausted.</p>
<p>Hongoltz-Hetling compares all this to the nearby town of Canaan, which enjoyed much better services than Grafton:</p>
<blockquote>
<p><em>&ldquo;I assumed that, after all those years of resistance, Grafton’s tax rate would be a fraction of Canaan’s, but I learned that the difference is actually quite modest. Because it has managed to maintain larger populations over the decades, Canaan can spend much more on public goods, while keeping tax rates in check. In 2010, the tax rate in Grafton was $4.49 per $1,000 of valuation, as compared to $6.20 in Canaan. That means the owner of a $150,000 home would get an annual municipal tax bill of $673.50 in Grafton, and $930 in Canaan. In other words, Grafton taxpayers have traded away all of the advantages enjoyed by Canaan residents to keep about 70 cents a day in their pockets.&rdquo;</em></p>
</blockquote>
<p>&hellip; which pretty neatly makes the point that the issue was less the amount spent on taxes than the mere existence of taxes at all.</p>
<p>The book also treats its subjects respectfully. You&rsquo;re left with no doubt that some of these people are dingbats, but there are some genuinely empathetic portraits within, as well.</p>
<p>And, you know, why spend time attacking the people when you can just report the results?</p>
<blockquote>
<p><em>&ldquo;In a move that seemed strangely reminiscent of Donald Trump’s efforts along the southern border of the United States, the anarcho-communists of Tent City decided to build a big, beautiful barrier to keep the bears at bay. They scrounged some chain-link fencing, pallets, and other scraps of building materials and got to work. Looking past the scarecrow sentries and down the embankment, I could see the fruits of their labor in the woods. The cabins at the heart of Tent City were all joined together by a stockade that could, in theory, block bears from accessing the humans inside. Sections of chain fence were topped by soda cans filled with BBs, designed to rattle loudly if the bears tried to breach the walls in the night. Here, I thought, was another irony, in that those who had come to this patch of woods seeking the ultimate freedom were instead barricading themselves into a rudimentary fortress to attain some level of security that was not being provided by the government.&rdquo;</em></p>
</blockquote>
<p>Yes, recommended.</p>
<p><em><strong><a href="https://micro.blog/books/9781541788480">A Libertarian Walks Into a Bear: The Utopian Plot to Liberate an American Town (And Some Bears)</a> by Matthew Hongoltz-Hetling 📚</strong></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Elsewhere</title>
      <link>https://mike.puddingtime.org/elsewhere/</link>
      <pubDate>Tue, 25 Jan 2022 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/elsewhere/</guid>
      <description>&lt;div class=&#34;social-list&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://social.lol/@mph&#34;&gt;&lt;i class=&#34;social fa-brands fa-mastodon&#34;&gt;&lt;/i&gt;Find me socializing here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pix.puddingtime.org&#34;&gt;&lt;i class=&#34;social fa-duotone fa-camera-retro&#34;&gt;&lt;/i&gt;Find some of my photography here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/in/michaelhallpdx/&#34;&gt;&lt;i class=&#34;social fa-brands fa-linkedin&#34;&gt;&lt;/i&gt;Find my career and work details here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/pdxmph&#34;&gt;&lt;i class=&#34;social fa-brands fa-github&#34;&gt;&lt;/i&gt;Find my code here.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <content:encoded><![CDATA[<div class="social-list">
<p><a href="https://social.lol/@mph"><i class="social fa-brands fa-mastodon"></i>Find me socializing here.</a></p>
<p><a href="https://pix.puddingtime.org"><i class="social fa-duotone fa-camera-retro"></i>Find some of my photography here.</a></p>
<p><a href="https://www.linkedin.com/in/michaelhallpdx/"><i class="social fa-brands fa-linkedin"></i>Find my career and work details here.</a></p>
<p><a href="https://github.com/pdxmph"><i class="social fa-brands fa-github"></i>Find my code here.</a></p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Finished reading: Wabi-Sabi - Photo School by Jana Mänz 📚📷</title>
      <link>https://mike.puddingtime.org/2022-01-16-finished-reading-wabisabi/</link>
      <pubDate>Sun, 16 Jan 2022 18:12:28 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-01-16-finished-reading-wabisabi/</guid>
      <description>&lt;img style=&#34;display:block; margin-left:auto; margin-right:auto;&#34; src=&#34;https://pdxmph.micro.blog/uploads/2022/9e98534c27.jpg&#34; alt=&#34;Dried flowers and shadows&#34; title=&#34;DSCF3072.jpg&#34; border=&#34;0&#34; width=&#34;598&#34; height=&#34;399&#34; /&gt;
&lt;p&gt;One to review advisedly, added to the reading list to give my brain a little time to cool off from &lt;a href=&#34;https://mph.puddingbowl.org/2022/01/15/finished-reading-racecraft.html&#34;&gt;Racecraft&lt;/a&gt;, but also because &lt;a href=&#34;https://mph.puddingbowl.org/2021/12/31/walk-to-a.html&#34;&gt;a recent photo walk&lt;/a&gt; came to mind as I was standing in a shop downtown and caught a glimpse of a related book on the concept of Wabi-Sabi as it relates to writing.&lt;/p&gt;
&lt;p&gt;So, what&amp;rsquo;s Wabi-Sabi?&lt;/p&gt;
&lt;p&gt;I dunno. Try this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Wabi-Sabi is the aesthetics of modesty. The aesthetics of the transient and the final. Wabi-Sabi is an aesthetics, which does not turn away from nature but includes it. Wabi-Sabi also is the small, the ugly, the unnoticed. The plain, the simple. The broken, the perforated, the rusty. Wabi-Sabi is reduction, the admiration of the small, hidden things in life. All this is not just accepted but integrated consciously into the art-work.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<img style="display:block; margin-left:auto; margin-right:auto;" src="https://pdxmph.micro.blog/uploads/2022/9e98534c27.jpg" alt="Dried flowers and shadows" title="DSCF3072.jpg" border="0" width="598" height="399" />
<p>One to review advisedly, added to the reading list to give my brain a little time to cool off from <a href="https://mph.puddingbowl.org/2022/01/15/finished-reading-racecraft.html">Racecraft</a>, but also because <a href="https://mph.puddingbowl.org/2021/12/31/walk-to-a.html">a recent photo walk</a> came to mind as I was standing in a shop downtown and caught a glimpse of a related book on the concept of Wabi-Sabi as it relates to writing.</p>
<p>So, what&rsquo;s Wabi-Sabi?</p>
<p>I dunno. Try this:</p>
<blockquote>
<p><em>&ldquo;Wabi-Sabi is the aesthetics of modesty. The aesthetics of the transient and the final. Wabi-Sabi is an aesthetics, which does not turn away from nature but includes it. Wabi-Sabi also is the small, the ugly, the unnoticed. The plain, the simple. The broken, the perforated, the rusty. Wabi-Sabi is reduction, the admiration of the small, hidden things in life. All this is not just accepted but integrated consciously into the art-work.&rdquo;</em></p>
</blockquote>
<p>The reason I was reminded of that recent photo walk was not the final product of the walk, but the process of the walk. I have a tiny little &ldquo;lenscap&rdquo; lens. It&rsquo;s 18mm wide (~28mm in 35mm terms), fixed-focus (not fixed focal length, which Google seems to think is the same as fixed focus), and fixed aperture (f8). It crushes shadows, blows out highlights, and has vignette that counts as &ldquo;bad&rdquo; if you think vignette is bad. When you shoot with it, you are thinking about composition and little else. In fact, when I take this lens out, I automate away the remaining &ldquo;else&rdquo;: I use my most generous auto ISO setting and count on IBIS to save me from whatever margin I haven&rsquo;t accounted for.</p>
<p>Now, right away, I am already butting heads with this notion from the book:</p>
<blockquote>
<p>&ldquo;In the long run the pressure for flawless perfection will restrict us. Eventually we will not dare to do anything that differs from the norm. Is it not the slightly blurry picture of our child, with its laugh reminding us of a wonderful childhood that is a thousand times more valuable than a perfect arranged portrait? Since Wabi-Sabi does not expect perfection, we have freedom for our creativity and ourselves.&rdquo;</p>
</blockquote>
<p>&hellip; because when I take that little lens out and count on IBIS and auto ISO to blunt the difficulties a toy lens poses, I&rsquo;m trying to keep a level of control and &ldquo;cleanness&rdquo; that feels like a violation of the notion, at least as much as I can understand it with a single reading of a single book. (A single book translated from German, with a few translation errors or odd choices in the mix.)</p>
<p>Anyhow, when I take that little lens out, I&rsquo;m accepting a few things about it, controlling a few things more, but also appreciating that it is good for making pictures about things that are &ldquo;broken, perforated and rusty.&rdquo;</p>
<p>The book contains little exercises:</p>
<blockquote>
<p><em>&ldquo;Reduce your photographs. Try to let them take effect by reduction, not by overloading them with colors and forms. Maybe by not taking the complete scene but just a section? Or by creating a rather dark or monochrome picture? Or your blur your motive? Concentrate on only one element and try to intensify it by erasing all “background noises”. You should also try to find a modest motive, one which you would usually not even notice: a spider web on the side of the road, a broken pot in the garden, bark, moss, grass, reflections &hellip;&rdquo;</em></p>
</blockquote>
<p>&hellip; and insights into the Wabi-Sabi aesthetic:</p>
<blockquote>
<p><em>&ldquo;Irregular forms are not only more interesting because they offer more to the eye but they also communicate with our human nature. Nowadays we are surrounded by objects that often are only chosen for their usability and which do not allow aging, wearing off and signs of usage due to their material structure. We use materials such as plastic, which is produced without soul, by machines. Their symmetric, even surface does not offer any more stimulation to our eyes.&rdquo;</em></p>
</blockquote>
<p>&hellip;and includes a very brief chapter on digital editing:</p>
<blockquote>
<p><em>&ldquo;Remember, if you edit your pictures according to Wabi-Sabi, reduce the colorfulness and the brightness of your image. Work with monochrome colors. Reduce the saturation and add minor color shades with split-toning for lights and shadows. Change the photographic cuts and add dark vignette.&rdquo;</em></p>
</blockquote>
<p>I tensed up a little when I saw that chapter in the ToC, because many people who write about photography through a lens of minimal or muted aesthetics start from a place of non-intervention between camera and reproduction, and because I am on the record as being pretty pro-intervention. Defiantly so. I expected to be scolded, but the author not only encourages intervention, she notes &ldquo;nostalgia filters&rdquo; with approval and suggests their use. It was nice to feel some alignment on that score, but when I look back over my entire catalog I can see that I&rsquo;ve become more interested in color &ndash; bright, vibrant color &ndash; in the past little while. My choices used to be more in line with lowered saturation and muted tones. I&rsquo;m not keeping score and don&rsquo;t really privilege one aesthetic over the other &ndash; the nice part about digital editing is that you can come back years later, relook, and rechoose, and I frequently do. The point of reading this book was less to &ldquo;learn how to do Wabi-Sabi photography,&rdquo; and more to explore the ways in which my style approaches and departs from the aesthetic. I&rsquo;m content to put it down, satisfied that I learned something.</p>
<p>Recommended: Sure, as far as it goes. It&rsquo;s a slim book.  It described an aesthetic I observed and provided an accounting of the motives behind that aesthetic. It could be a very bad accounting of a completely different aesthetic.</p>
<p><em><strong><a href="https://micro.blog/books/9783959265492">Wabi-Sabi - Photo School</a> by Jana Mänz 📚</strong></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Finished reading: Attack of the 50 Foot Blockchain by David Gerard 📚</title>
      <link>https://mike.puddingtime.org/2022-01-02-finished-reading-attack/</link>
      <pubDate>Sun, 02 Jan 2022 13:28:00 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-01-02-finished-reading-attack/</guid>
      <description>&lt;div style=&#34;text-align:center;&#34;&gt;
&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/0a216a17c3.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;Mini-Mart&#34; /&gt;
&lt;/div&gt;
&lt;p&gt;This is a breezy read characterizable more by how fun its barbed skepticism is than any technical insight you&amp;rsquo;re going to gain, but I enjoyed the early overview of the cultural confluence  embodied by cryptocurrency. In a late chapter, where Gerard provides a survey of current (ca. 2017) blockchain implementations, I was reminded of how timeless tech hype is. If you&amp;rsquo;re very familiar with the blockchain and the hype surrounding it, then in some ways this is a good book for using your familiarity to sharpen your ability to detect tech hype elsehwere.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<div style="text-align:center;">
<img src="https://its.puddingtime.org/uploads/2022/0a216a17c3.jpg" width="600" height="400" alt="Mini-Mart" />
</div>
<p>This is a breezy read characterizable more by how fun its barbed skepticism is than any technical insight you&rsquo;re going to gain, but I enjoyed the early overview of the cultural confluence  embodied by cryptocurrency. In a late chapter, where Gerard provides a survey of current (ca. 2017) blockchain implementations, I was reminded of how timeless tech hype is. If you&rsquo;re very familiar with the blockchain and the hype surrounding it, then in some ways this is a good book for using your familiarity to sharpen your ability to detect tech hype elsehwere.</p>
<p>And if you&rsquo;re the sort who has to periodically take a deep breath and tuck down a particular kind of feeling with a particular kind of tech person, you&rsquo;ll feel like you&rsquo;ve made a new friend:</p>
<blockquote>
<p>Computer programmers are highly susceptible to the just world fallacy (that their economic good fortune is the product of virtue rather than circumstance) and the fallacy of transferable expertise (that being competent in one field means they’re competent in others). Silicon Valley has always been a cross of the hippie counterculture and Ayn Rand-based libertarianism (this cross being termed the “Californian ideology”).</p>
</blockquote>
<blockquote>
<p>“Cyberlibertarianism” is the academic term for the early Internet strain of this ideology. Technological expertise is presumed to trump all other forms of expertise, e.g., economics or finance, let alone softer sciences. “I don’t understand it, but it must be simple” is the order of the day.</p>
</blockquote>
<p>The book&rsquo;s skepticism ends up being a strength and a weakness.</p>
<p>It&rsquo;s a strength, because the technology is old enough that the world seems divided into the people you&rsquo;d trust to explain it to you (who have moved on from explaining why you should avoid it), the people you should not trust to explain it to you (because they may well be stuck with a metaphorical garage full of Amway crates), and the people who cannot explain it to you but heard that you can get a lot of money for a picture of a monkey.</p>
<p>It&rsquo;s a weakness, because it&rsquo;s a relatively old book as these things go; so while the cultural skepticism aimed at gold bugs and crank economics in general may be timeless, the implementation survey is not. It&rsquo;s hard to generalize claims made against specific use cases in 2017 to analyze whatever is going on in 2022 (though it was funny to put the book down, turn to Twitter, and see that the first tweet in my timeline was about <a href="https://twitter.com/cat5749/status/1476813266462539779">a bunch of people being scammed in the sort of manner the book warns about</a>).</p>
<p>My gut tells me this is a good first read, the same way an article about the dangers of ARMs would have been a good read before buying your first house ca. 2006, but probably should not be your only read.</p>
<p><em><strong><a href="https://micro.blog/books/9781974000067">Attack of the 50 Foot Blockchain</a> by David Gerard 📚</strong></em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Everything, All the Time, Everywhere by Stuart Jeffries 📚 (Finished)</title>
      <link>https://mike.puddingtime.org/2022-01-01-everything-all-the-time-everywhere/</link>
      <pubDate>Sat, 01 Jan 2022 18:32:32 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/2022-01-01-everything-all-the-time-everywhere/</guid>
      <description>&lt;div style=&#34;text-align:center;&#34;&gt;
&lt;img src=&#34;https://its.puddingtime.org/uploads/2022/18a92c1d0d.jpg&#34; width=&#34;600&#34; height=&#34;400&#34; alt=&#34;Statuary in the side yard&#34; /&gt;
&lt;/div&gt;
&lt;p&gt;I read Helen Pluckrose&amp;rsquo;s &lt;em&gt;Cynical Theories&lt;/em&gt; over the summer and it was a useful primer on the confluence of social justice politics and postmodernism. Pluckrose herself describes herself as a liberal (in the classical sense, not the Democrat sense), and was one of the perpetrators of the &lt;a href=&#34;https://www.vox.com/2018/10/15/17951492/grievance-studies-sokal-squared-hoax&#34;&gt;Sokol Squared hoax&lt;/a&gt;/study/&amp;ldquo;human experiment,&amp;rdquo; but the book was earnest and seemed fair. It was also dry, a little repetitive, and was more a survey of postmodern thinking than it was a survey of postmodern &amp;hellip; practice?&lt;/p&gt;</description>
      <content:encoded><![CDATA[<div style="text-align:center;">
<img src="https://its.puddingtime.org/uploads/2022/18a92c1d0d.jpg" width="600" height="400" alt="Statuary in the side yard" />
</div>
<p>I read Helen Pluckrose&rsquo;s <em>Cynical Theories</em> over the summer and it was a useful primer on the confluence of social justice politics and postmodernism. Pluckrose herself describes herself as a liberal (in the classical sense, not the Democrat sense), and was one of the perpetrators of the <a href="https://www.vox.com/2018/10/15/17951492/grievance-studies-sokal-squared-hoax">Sokol Squared hoax</a>/study/&ldquo;human experiment,&rdquo; but the book was earnest and seemed fair. It was also dry, a little repetitive, and was more a survey of postmodern thinking than it was a survey of postmodern &hellip; practice?</p>
<p><em>Everything, All the Time, Everywhere</em> is more about what I guess you could call &ldquo;applied postmodernism.&rdquo; It&rsquo;s also fair, but to the extent Jeffries considers postmodernism and neoliberalism complementary you end up reading on a few tracks, by Jeffries&rsquo; own design. Each chapter is anchored in a trio of anecdotes: Something political, something pop cultural, and something artistic (broadly &ndash; photography, written word, and architecture all figure).</p>
<p>The intersection of neoliberalism and postmodernism are the most obviously disturbing to him. The book traces this confluence starting with the collapse of the Bretton Woods system in 1971 and ending with rise of private equity capitalism (the afterword touches on cryptocurrency, which strangely didn&rsquo;t really turn up much in the first chapter, where examining it as a late reaction to going off the gold standard might have been interesting, but wouldn&rsquo;t have fit in the chronological structure of the book).</p>
<p>He&rsquo;s more tolerant of postmodern art across the range of examples he provides, identifying a certain playfulness with warmth. His takes on pop culture &ndash; the melding of commerce and art &ndash; are a little more despairing, and reflective of a frustration with the dead-end of postmodern &ldquo;knowing&rdquo; and ironic detachment.</p>
<p>The portions on art and pop culture were fun to read, if unsurprising. The political portions were edifying to the extent they drew connections between poltiics and postmodernism I hadn&rsquo;t made.</p>
<p>Recommended if you&rsquo;re into this sort of thing and would like an accessible but thoughtful survey that connects a lot of pieces.</p>
<p><em><strong><a href="https://micro.blog/books/9781788738255">Everything, All the Time, Everywhere</a> by Stuart Jeffries</strong></em> 📚</p>
]]></content:encoded>
    </item>
    <item>
      <title>Quick review: Cobalt Image for normalizing raw across cameras</title>
      <link>https://mike.puddingtime.org/posts/2021-12-29-i-think-cobalt/</link>
      <pubDate>Wed, 29 Dec 2021 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2021-12-29-i-think-cobalt/</guid>
      <description>&lt;p&gt;I think &lt;a href=&#34;https://www.cobalt-image.com&#34;&gt;Cobalt Image&lt;/a&gt; may have taken away my last excuse for working
on a collection of the last few years&amp;rsquo; work. DNGs I shot with the Q2 and
RAFs from the X-Pro3, X100V, and X-T4 all fit with each other now.&lt;/p&gt;
&lt;p&gt;I went on a brief &amp;ldquo;use it for everything!&amp;rdquo; over the past day, trying it
out on a little of everything from the past few years. This afternoon I
took a step back and realized I want to preserve a record of what I&amp;rsquo;ve
been up to with my edits as much as my subjects, so I&amp;rsquo;m grateful
Lightroom has a &lt;a href=&#34;https://lightroomkillertips.com/using-versions-in-lightroom-cloud/&#34;&gt;versions&lt;/a&gt; feature: As I pick things for the
collection, I can save a snapshot of my favorite edit up to now, then
make a new proof for a collection using Cobalt.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I think <a href="https://www.cobalt-image.com">Cobalt Image</a> may have taken away my last excuse for working
on a collection of the last few years&rsquo; work. DNGs I shot with the Q2 and
RAFs from the X-Pro3, X100V, and X-T4 all fit with each other now.</p>
<p>I went on a brief &ldquo;use it for everything!&rdquo; over the past day, trying it
out on a little of everything from the past few years. This afternoon I
took a step back and realized I want to preserve a record of what I&rsquo;ve
been up to with my edits as much as my subjects, so I&rsquo;m grateful
Lightroom has a <a href="https://lightroomkillertips.com/using-versions-in-lightroom-cloud/">versions</a> feature: As I pick things for the
collection, I can save a snapshot of my favorite edit up to now, then
make a new proof for a collection using Cobalt.</p>
<p>I also sat down with my cameras and got them all into a state of rough
similarity with each other on a &ldquo;walking around&rdquo; preset. It doesn&rsquo;t
matter so much with a RAW workflow, but by being close to what will come
out the other side of a Lightroom session I can pay attention to dynamic
range and exposure choices.</p>
<p>Aside from its value as a normalizer, I really like Cobalt&rsquo;s presets.
When I think about how my use of presets has evolved, there&rsquo;s always
been this tension between natural and treated. I think Cobalt
understands how much work color alone is doing, and does less to lean
into &ldquo;vintage-y.&rdquo; It&rsquo;s the difference between looking through old photo
albums, shot with 35mm consumer stock indifferently processed&ndash;or the
output of a Kodak with a 126 film cartridge processed at the
pharmacy&ndash;and leafing through mint condition National Geographics from
1972.</p>
<p>When I was working on my own presets (and trying to get something that
normalized well across my cameras) I picked one of Adobe&rsquo;s &ldquo;Modern&rdquo;
profiles as a base because I didn&rsquo;t want to make artificial vintage
photos &ndash; I just knew there was something in the reds and cyans of old
film stock I liked, but was not interested in throwing away dynamic
range, sharpness, or definition to get it. Starting from something that
didn&rsquo;t throw anything away, then building up the things I wanted to
stand out, worked better for me.</p>
<p>Cobalt&rsquo;s classic film presets preserve the dynamic range my cameras can
provide while reproducing the color bias. Fujifilm cameras come super
close to what I&rsquo;m after with the Classic Negative film simulation + the
color chrome and blue chrome settings, but miss a little for me because
it turns out I was raised on Kodak.</p>
<p>Somewhat relatedly, I&rsquo;ve been reading <cite><a href="https://www.versobooks.com/books/3875-everything-all-the-time-everywhere">Everything, All the Time,
Everywhere</a></cite> and it&rsquo;s a little interesting to be bouncing
between a political headspace, where I feel impatient with
postmodernism, and an aesthetic headspace, where color scientists are
busy selling back the shade &ldquo;Kodak yellow&rdquo; and Fujifilm&rsquo;s included film
simulations all lean toward the vintage, all of which suits me.</p>
<p><img src="/images/2021/cacc823387.jpg" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>On iPhoneography these days</title>
      <link>https://mike.puddingtime.org/posts/2021-11-21-i-took-my/</link>
      <pubDate>Sun, 21 Nov 2021 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2021-11-21-i-took-my/</guid>
      <description>&lt;p&gt;I took my iPhone 13 Pro along as my sole camera for a quick camping trip
to Vernonia. I&amp;rsquo;ve only had the phone for a week and was pretty excited
about its new RAW format.&lt;/p&gt;
&lt;p&gt;I like the images I get out of it, but in a qualified sort of way that
I&amp;rsquo;ve felt about iPhone photos for a little while now:&lt;/p&gt;
&lt;p&gt;Computational photography is a wonder that can do some amazing things. I
have to do a lot less work to get a nice image out of an iPhone in weird
lighting conditions than I do with one of my Fujifilm cameras,
especially when dynamic range is challenging.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I took my iPhone 13 Pro along as my sole camera for a quick camping trip
to Vernonia. I&rsquo;ve only had the phone for a week and was pretty excited
about its new RAW format.</p>
<p>I like the images I get out of it, but in a qualified sort of way that
I&rsquo;ve felt about iPhone photos for a little while now:</p>
<p>Computational photography is a wonder that can do some amazing things. I
have to do a lot less work to get a nice image out of an iPhone in weird
lighting conditions than I do with one of my Fujifilm cameras,
especially when dynamic range is challenging.</p>
<p>A lot of the apparent magic makes sense when you consider that Apple&rsquo;s
engineers bias for one general display use case (screens)
and probably
put their thumb on the scales for tablets and phones. If I take one RAW
photo with a Fujifilm (or some other &ldquo;regular&rdquo;)
camera, and one with an
iPhone, the iPhone photo will be more immediately useful for mobile
sharing.</p>
<p>But I&rsquo;ve held that iPhone pictures tend to fall apart when you try to
work with them much. Fujifilm cameras also do some computational
photography: The dynamic range settings on an X-series camera are all
about applying variable ISO to different parts of the image to cajole
blown highlights and crushed shadows into usefulness. But the effect is
less noisy and messy than what you get on an iPhone when you take a
closer look. For display on small screens, you know, whatever: By the
time Instagram, Facebook, or Twitter are done forcing your images
through compression, there&rsquo;s probably not much difference (though I&rsquo;ve
been surprised when people pick out my Leica/full-crop images from a
Facebook album).</p>
<p>But I do notice that iPhone images come out a little &ldquo;crispier&rdquo; on the
edges from sharpening that doesn&rsquo;t always work that well, and when the
dynamic range is challenging there&rsquo;s more mush and noise.</p>
<p>I should probably burn the ink and paper to make a few 13x19
enlargements from this batch to see what I get. Maybe I won&rsquo;t notice any
meaningful difference, but some chunk of my photographs are destined to
be prints so it&rsquo;s a real use case for me.</p>
<p>I also think that from a &ldquo;most people&rdquo; point of view, I&rsquo;m not sure how
it is that there&rsquo;s a low- or medium-tier fixed lens camera market
anymore. Like, anything south of a Canon PowerShot G-series just doesn&rsquo;t
seem to make a lot of sense unless it&rsquo;s one of those super-zooms. The
iPhone seems to be plenty.</p>
<p>That said, I think there&rsquo;s a level of mobile photography triumphalism
that remains misplaced. I like the pictures I got this morning, but not
so much that I&rsquo;ll hand my travel photography over to a phone. My
Fujifilm cameras are purpose- made picture taking machines with a vastly
deeper amount of control and much more versatile output.</p>
<p><img src="/images/2021/89bad9a598.jpg" alt="">
<img src="/images/2021/45d278f63e.jpg" alt="">
<img src="/images/2021/9e84b98bf4.jpg" alt="">
<img src="/images/2021/ee516456c1.jpg" alt="">
<img src="/images/2021/38cc1b75de.jpg" alt="">
<img src="/images/2021/527526bbe5.jpg" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>Two Gandalfs</title>
      <link>https://mike.puddingtime.org/posts/2021-10-24-two-gandalfs/</link>
      <pubDate>Sun, 24 Oct 2021 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2021-10-24-two-gandalfs/</guid>
      <description>I think we just have to know what we know for ourselves, and not because we need people to agree with us. And we need do the best we can to provide a little bit of light for the people right around us.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve never particularly identified with Gandalf. I took some &ldquo;Which
Middle Earth person are you?&rdquo; quiz once, and got Gandalf, and that
bothered me a little, because my self image does not involve any belief
that I am an ages-old demigod sent from the beyond to &hellip; do things.</p>
<p>The closest anyone has ever come to likening me to Gandalf is probably a
friend at work who took to calling me &ldquo;The Bhagwan&rdquo; for a period, and I
get that on the merits of my beard alone, though I was told there was
also some sort of &ldquo;calming and warm presence&rdquo; component that would have
served me well as a spiritual leader.</p>
<p>Anyhow, I&rsquo;m going to play along with the idea that I&rsquo;ve been quietly
*trying * to be like Gandalf all these years, because I was talking to
Al about The Current State of Affairs in the World while we were out for
a walk, and I realized I don&rsquo;t feel very hopeful at this moment, but for
reasons people might not identify with much. I haven&rsquo;t felt this way
since Obama was in office, and then Clinton before him, because when
people from &ldquo;my side&rdquo; are in power, it always feels like you can see the
hard limits of our society and culture; how much we&rsquo;re willing to change
or flex or bend or improve, and I would like more of those things than
we seem to be capable of.</p>
<p>So, we went down the rabbit hole of &ldquo;what on earth are we even supposed
to do about this?&rdquo; and that took us a few places, including the idea
that things feel so profoundly polarized right now that it is very hard
to engage with much of anybody. There are so many presumptions of bad
faith and so much eighth-dimensional chess going on. There&rsquo;s a huge
amount of energy for change, but right now it is a very wild energy, and
people believe all sorts of contradictory things that they apply to
other humans in a destructive, reductionist way that will leave us
poorer when this moment has swept through.</p>
<p>Basically, it&rsquo;s a good time to ask yourself what you know about Gandalf.
I have identified two Gandalfs.</p>
<p>There&rsquo;s the one with the wizard staff that lightens the shadows a
little, bringing comfort to the people right around him. We&rsquo;ll call him
&ldquo;the little light in the dark Gandalf.&rdquo; This one:</p>
<p><img src="/images/2021/63c5eebaf4.jpg" alt=""></p>
<p>The Little Light in the Dark Gandalf provides that little light not
because it will solve the biggest problems or strike down the worst
evils, but because the dark itself is oppressive enough, and it is
comforting to gather in some pale patch of light.</p>
<p>Then there&rsquo;s the one with the staff and the sword who is going to fight
the Balrog, even though he&rsquo;s pretty sure he&rsquo;s fucked. We&rsquo;ll call him
&ldquo;the Balrog-fighting Gandalf&rdquo;:</p>
<p><img src="/images/2021/0f611302a2.jpg" alt=""></p>
<p>I am guessing that most people would prefer a Balrog-Fighting Gandalf
action figure over a Little Light in the Dark Gandalf action figure.
He&rsquo;s just sort of getting down to business with the biggest problems.
He&rsquo;s all righteousness. If he has a tagline, it is &ldquo;there is nothing
wrong with punching Balrogs.&rdquo;</p>
<p>I remember a long while back, when I took it upon myself to be a
Balrog-fighting Gandalf. It felt pretty good to be the righteous one
with the sword, and it felt even better when I &ldquo;won&rdquo; against a person
who was being bad. I felt very clear about my rightness, and dead
certain about their wrongness. Looking back, through a lens of whether
the way I was behaving was sustainable &ndash; that is to say, behaving in a
way I&rsquo;d feel comfortable behaving every day &ndash; I&rsquo;d say I wasn&rsquo;t. Right
side of history, wrong side of my moral compass, I guess you could say.</p>
<p>Some years I can overlook that more easily than I can others. Other
years, the things that are going around me, and the way people are
behaving in response to them, cause me to say, &ldquo;I don&rsquo;t think I&rsquo;m okay
ignoring the voice I&rsquo;m hearing inside myself. I can see there&rsquo;s
something going on over there, and I&rsquo;m sort of attracted to the heat and
light it is generating, but most of the people I agree with on what to
make of that thing are behaving in a way I&rsquo;m not okay with. I can run
over and join anyhow, and ignore what I&rsquo;m hearing from myself, or I can
figure out another way to be useful somewhere else, in some other way.&rdquo;</p>
<p>None of this is simple, and I try to maintain a measure of humility when
I do judge. I am pretty sure that the person who pushed this journalist
to the ground, maced her, and called her a &ldquo;slut&rdquo; thinks he was being
Balrog-fighting Gandalf:</p>
<p><img src="/images/2021/5350180444.jpg" alt=""></p>
<p>I bet I agree with the person who did that on a few particulars, to the
extent we probably both hate fascists, both want to live in a society
that is committed to the end of domination, and want to live in a
community that is free of people coming in from the outside to
intimidate and antagonize us.</p>
<p>But I&rsquo;m not okay with what he did at all. He pulled on a thread that
unravels a lot of the things he would probably claim to be defending or
protecting, and he&rsquo;d probably cite <a href="https://en.wikipedia.org/wiki/Paradox_of_tolerance">Karl Popper</a> while pulling on it.
Maybe more importantly to me than the fact that he did that is the way
in which attempts to bring it up with friends, and to ask if assaulting
journalists is really good praxis, was met with uncomfortable silence.
I&rsquo;m relieved nobody I know very well tried to <em>defend</em> the assault, but
I&rsquo;m bothered that beating up a journalist wasn&rsquo;t something worth noting
and condemning beyond reliable &ldquo;both-sides!&rdquo; voices and right-wing goons
who had already tried to bear-spray her but took advantage of the
opportunity to condemn &ldquo;the left.&rdquo;</p>
<p>That&rsquo;s just a meatspace example of the mounting discomfort I feel with
the way people I&rsquo;d ordinarily consider ideological <em>confrères</em> &ndash; or at
least second cousins &ndash; are behaving.</p>
<p>For the past couple of years, I&rsquo;ve carried around my sense of growing
difference with others I once considered to be like me a little
guiltily, because I stopped doing things I used to do as part of my
political and philosophical identity and wondered if I had finally hit
some cultural tipping point and had changed without realizing it. I
wondered if other people could see it in me. I felt some measure of
despair, because some of that political and philosophical identify was
wrapped up in being Balrog-fighting Gandalf, and if I wasn&rsquo;t on some
crusade, waving a sword around and punching Balrogs, what was I?</p>
<p>Then a few days ago, I got a Slack message from someone who told me that
when they worked with me they felt included and safe. Beyond any
ideology, politics, or programs, they simply felt included and safe.</p>
<p>They feel the things a million HR trainings, best-sellers, and tweet
storms are ostensibly aiming for. Maybe they&rsquo;re even hitting the mark.
It&rsquo;s hard to say. One idea I find very bleak is that our institutions
are too corrupt to save, and that rights are best secured when
corporations have deemed them beneficial to the bottom line. Any sense
of &ldquo;progress&rdquo; you might measure that comes from a milieu where entities
with a fiduciary responsibility are adjudicating matters of human
dignity and freedom has to be qualified at least a little.</p>
<p>My takeaway from that Slack message was that someone who doesn&rsquo;t always
feel safe or included does so around me in part because of things I do
that aren&rsquo;t particularly as noteworthy or as fun as, say,
Balrog-punching.</p>
<p>The thing I said to Al as we walked along the Springwater in the dark
was, &ldquo;I think we just have to know what we know for ourselves, and not
because we need people to agree with us. And we need do the best we can
to provide a little bit of light for the people right around us.&rdquo;</p>
<p>I am going to leave the Balrog-punching to someone else for a while.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Picking up the Outfitter 1</title>
      <link>https://mike.puddingtime.org/posts/2021-08-29-picking-up-the/</link>
      <pubDate>Sun, 29 Aug 2021 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2021-08-29-picking-up-the/</guid>
      <description>On our trip to go pick up our new camper in Eastern Oregon, where we made a new friend and had some good pie.</description>
      <content:encoded><![CDATA[<p>Al and I spent the weekend driving out to LaGrande to pick up our new
trailer from Mel Sandland at Three Feathers Mfg.</p>
<p>As the camping season started this year, we were enjoying our Livin Lite
Quicksilver, but found ourselves wanting something a little simpler. We
researched a bunch of different trailers, trying to stick within a
1500-pound weight limit so we wouldn&rsquo;t have to trade in our car, and
aiming for something that might give us a fourth season of camping. We
looked at Scamps, Backpackers, and Meerkats, but they were all very
backordered or a little outside our price range by the time we got done
building up from the bare-bones &ldquo;as low as&rdquo; price.</p>
<p>The main issues we ran into were weight and space. Traditional campers
with room to stand up, an indoor galley and some sort of seating/bedding
tend to run a little heavier than we wanted to deal with. The few we
found that seemed close involved pretty close quarters, and the cost
tended to be a little high for us. We were slowly deciding that some
sort of teardrop or other small form factor would probably make more
sense for us, and we were coming around to deciding on a long wait for a
Backpacker.</p>
<p>While we were camping near Detroit Lake in May, a couple pulled up along
side us in a teardrop trailer. We really liked the galley in the back,
behind a fold up door, and the general look of the trailer, and we got
to see how the owners worked with the size constraints. Unlike all the
extra space and hangout room of our Quicksilver, the teardrop
form-factor pushes people outside. Our neighbors dealt with that by
bringing along a quick-deploy canopy, where they spent their time
hanging out. The trailer was just for sleeping and changing.</p>
<p>I snapped a picture of the logo (&ldquo;The Pinecone&rdquo;) and the manufacturer
(Three Feathers) and looked it up once we got home.</p>
<h2 id="ordering-from-three-feathers">Ordering from Three Feathers</h2>
<p>Three Feathers Mfg. is located in LaGrande, OR. It has a pretty
barebones website, but I was able to look up the Pinecone and browse a
few other models. The designs tend toward a more rugged, utilitarian
look, like the sort of thing you might take on a hunting or fishing trip
that involved a few fire roads. They remind me of old-school camping
trailers, but where camping trailers tend to have canvas tops, Three
Feathers models have hard sides and diamond plate, and the interiors get
a few more affordances.</p>
<p>The other sticking point this whole summer has been finding anything in
stock any time soon, so I filled out the contact form and asked how far
out they were. I got a note back from Mel Sandland, the owner of Three
Feathers, telling me he was pushing people away from the Pinecone, with
its trendier teardrop shape, and more toward the Outfitter 1, which is
more boxy and offers more interior space for about the same weight and
outer dimensions. It doesn&rsquo;t have the same galley the Pinecone does as a
standard feature &ndash; just a storage area &ndash; but Mel offered to customize
a build to include cabinets, a counter, sink, a water tank. He also told
me he could have it done by early July, but wouldn&rsquo;t take any deposit
money until he had a chassis up on the assembly line.</p>
<p>We had to wait a bit longer in the end. Mel was good about communicating
with us about supply problems, and for a while our camper was just
sitting there waiting for doors to come in. He called a couple of times
and offered Facetime tours of our camper as it progressed. &ldquo;You&rsquo;re
really gonna like it when you get to touch it, though,&rdquo; he told us.</p>
<p>He finally wrapped it up this past Wednesday and called us up so we
could come get it.</p>
<h2 id="meeting-mel">Meeting Mel</h2>
<p>Three Feathers is a small business working out of a small factory space
by the LaGrande airport. I think Mel has about five people working for
him, and from conversations with him over the weeks we waited I gathered
that they tend to work on two trailers at a time and take about two
weeks to complete a unit (when all the components are in supply).</p>
<p>We drove out to Pendleton on Thursday night and spent the night in a
hotel. After breakfast on Friday morning we drove the last 40 miles from
Pendleton to LaGrande.</p>
<p>When we arrived, Mel came out and greeted us and took us for a walk
around our new trailer. Mel&rsquo;s going to be 81 in October, and over the
course of the day we learned that he came to LaGrande from Los Angeles,
where he grew up, and that he managed RV plants in the area for a lot of
years. Three Feathers has been a way for him to keep doing what he
loves.</p>
<p>Among the jobs I can claim, I spent one summer working in an RV factory.
I did undercoating, installed air conditioners and top vents, assembled
and laminated cab walls, and built step well covers. I didn&rsquo;t leave the
job a master craftsman, but did learn how to make things without the
benefit of machine tooling that still had nice fit and finish. As I
walked around the trailer, I could see a few little things you learn to
spot: A slight dimple where a screw went in too tight, or a faint zigzag
where a power screwdriver slipped off and the bit slid across the
aluminum. All in all, though, it is tight and well assembled, erring on
the side of sturdy, built-up, and generous. Poking my head into the
cabin it smelled of plywood and laminate glue.</p>
<p>We both fell in love with it there on the shop floor. Our July vacation
took us into Bureau of Land Management land in the painted hills, and
while our Quicksilver held up, we would have loved the higher clearance,
better tires, and more rugged axle/suspension of the Outfitter, not to
mention the doubled water capacity of the built-in tank, seven-pin
charging connector, electric brakes, and 360 LED porch lights.</p>
<p>One of Mel&rsquo;s folks &ndash; I&rsquo;ll call him Brad &ndash; gave us a rundown of how to
work everything, from the brake breakaway connector, to the electrics,
to the galley and sink, to the awning.</p>
<p>The last detail we had to deal with was picking up a hitch connector.
The Outfitter hitch sits about 22&quot; off the ground, and our Subaru&rsquo;s
hitch receiver sits closer to 12&quot;.</p>
<p>&ldquo;Well,&rdquo; Mel said, &ldquo;have ya had lunch? You hungry?&rdquo;</p>
<p>We hadn&rsquo;t, so we piled into his pickup and he took us to Kauffman&rsquo;s
Market outside LaGrande. Besides groceries and produce, it sells
sandwiches, clam chowder, and pie. Mel introduced us to the folks behind
the counter as friends of his and bought us lunch: Roast beef sandwiches
with a cup of chowder and Marionberry cream pie. Everyone knew him by
name, and he stopped folks who worked there as they walked by the table
to ask how things were going with their family farm.</p>
<p>Kauffman&rsquo;s is owned by a Mennonite family. Mel initially called them
Amish, but when Alison asked him if they drove cars he said &ldquo;oh, no, not
that kind of Amish &hellip; Mennonites.&rdquo; I mentioned that my dad was a
minister in the Church of the Brethren, and he lit up. He knew Brethren
folks, understood the kinship with Mennonites and other Anabaptist
sects, and was pretty delighted to talk about his own church life and
faith.</p>
<p>It was good to feel a small barrier fall away. It wasn&rsquo;t like we were
struggling to relate to Mel, but it felt good to see him extend us a
little more trust and talk to us about something personal to him.</p>
<p>He also told us he has sold trailers to people in Korea, and described
pictures of packed campgrounds. I mentioned I&rsquo;d been stationed there,
and another barrier seemed to fall away. The conversation turned to
Afghanistan ever so briefly. Nothing heavy, and I didn&rsquo;t so much try to
downplay disagreement as simply route around it, sticking to commonly
accepted facts and my own observation that the pace of events has a way
of accelerating we seldom anticipate.</p>
<p>After lunch, we piled back into his pickup and drove to a farm supply
place where I picked up a hitch connector to give us a little more rise.</p>
<p>Back at the factory, Mel took our connector to Brad to have him attach
the ball. Brad came out while we were taking our second look at
everything.</p>
<p>&ldquo;Heard you were airborne.&rdquo;</p>
<p>&ldquo;Yep.&rdquo;</p>
<p>&ldquo;That&rsquo;s cool, man.&rdquo;</p>
<p>A little piece of me shifted inside. I&rsquo;ve been out of uniform for 24
years, and outside a few perfunctory &ldquo;thank you for your service,&rdquo;
nobody&rsquo;s ever said anything like that to me. Most places I&rsquo;ve lived and
worked, it was more a thing to get out in front of than to be admired.</p>
<p>We brought the car back to the trailer and Jason walked us through how
to hook everything up, then we walked into Mel&rsquo;s office, wrote the check
and signed the paperwork. There&rsquo;s a cork board in his office with
pictures of him and his family. Down in the corner was a photocopy of an
Umatilla County jail booking photo featuring Brad.</p>
<p>Mel caught me looking at it.</p>
<p>&ldquo;He asked me to pin it up there because he said I&rsquo;m like a dad to him. I
said &lsquo;you&rsquo;re not my kid, but okay put it up there.&rsquo;&rdquo;</p>
<p>Mel saw us out to the trailer to see us off. He gave Al a hug and said
&ldquo;You turned out to be good people.&rdquo; Then he gave me a hug and said &ldquo;you
remember what your dad does and keep being good.&rdquo;</p>
<h2 id="bringing-it-back">Bringing it back</h2>
<p>On Friday afternoon we drove up over the Columbia and stayed in the
Plymouth Park campground. It&rsquo;s a small Army Corps of Engineers
recreation site with hookups and pull through parking at each site.</p>
<p>The awning was a little fussy to figure out, but everything else was
just what we hoped for. Before we left Portland we grabbed all the
storage containers we kept in the Quicksilver with first aid stuff,
tools, fire starters, and other sundries along with our camping pots,
pans, and dishes. At Plymouth Park we moved it all over from the Subaru
to the Outfitter and got settled in.</p>
<p>The next morning we drove from Plymouth, WA to the Rock Creek Reservoir
camp ground in the Mt. Hood forest and spent the night there.</p>
<p>Once home, we tucked it into a secure parking space we&rsquo;ve rented because
I&rsquo;ve read about a few RV thefts recently, and neighbors have told us
people have prowled our driveway a few times looking at our other
trailer, which is not obviously a camper under its cover. I&rsquo;ve gone out
and found the tonneau snaps unsnapped and the door opened. I prefer to
pay a few bucks, stick a hitch lock and wheel claw on it, and drive five
minutes to the lot to hook it up and head out.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A tree on the floodplain</title>
      <link>https://mike.puddingtime.org/posts/2021-01-18-the-foster-floodplain/</link>
      <pubDate>Mon, 18 Jan 2021 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2021-01-18-the-foster-floodplain/</guid>
      <description>Once we recognize that all things are impermanent, we have no problem enjoying them.</description>
      <content:encoded><![CDATA[<p>The Foster Floodplain, until the recent heavy rains, had a tree I liked
a lot. Every time I&rsquo;d go out there with a camera I&rsquo;d take a picture,
trying to sort of &hellip; solve it, I guess. I could see a picture, but I
couldn&rsquo;t get the conditions I needed to get the picture. Too much
foliage, light wasn&rsquo;t right, couldn&rsquo;t separate it from the background.
Just about two years ago I got my best picture of it on a foggy morning.
It still wasn&rsquo;t quite right, and I kept looking for the moment. A few
weeks ago, I kind of got close a second time.</p>
<p>This week, after heavy floods, I went back to the floodplain and the
tree was gone. I guess it finally toppled in the flooded ground. I don&rsquo;t
think I ever solved it, but I did love it very much.</p>
<p>&ldquo;Once we recognize that all things are impermanent, we have no problem
enjoying them.&rdquo; — Thich Nhat Hanh</p>
<p><img src="/images/2021/35278fd900.jpg" alt="Monochrome. A dead tree against a misty background. ">
<img src="/images/2021/a24d3c707d.jpg" alt="Color. A dead tree against a misty background. "></p>
]]></content:encoded>
    </item>
    <item>
      <title>&#39;Toxic Positivity&#39;</title>
      <link>https://mike.puddingtime.org/posts/2020-12-16-toxic-positivity/</link>
      <pubDate>Wed, 16 Dec 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-12-16-toxic-positivity/</guid>
      <description>Resilience isn&amp;rsquo;t denial. Resilience is acceptance.</description>
      <content:encoded><![CDATA[<p><a href="https://www.elle.com/beauty/a34922748/toxic-positivity/">Toxic Positivity Is on the Rise. Are You Guilty of Spreading It?</a></p>
<blockquote>
<p>&ldquo;Research has shown that accepting negative emotions, rather than
dismissing them, may be more beneficial for a person&rsquo;s mental health
in the long run. As Zuckerman says, &lsquo;Feel your feelings. Sit with
them. Do not avoid them. Avoiding discomfort only prolongs its
existence.&rsquo;&rdquo;</p>
</blockquote>
<p>I was taught a pretty curdled kind of resilience as a kid, then a very
animal kind of resilience in a more institutional setting. I learned a
thoroughly different kind of resilience late in life from someone dear,
and it involved feeling things all the way through.</p>
<p>On the other side of learning from their example, I know that sometimes
the very best thing you can do is say, &ldquo;wow, that sucks. I&rsquo;m so sorry.&rdquo;</p>
<p>Goes double for leaders. People always think a veteran will sympathize
with the false rigor of hard-ass tough talk. Those were the leaders I
trusted the least. The ones I would have picked up and carried up the
hill acknowledged when they were hurting, and honored it when I was
hurting.</p>
<p>Resilience isn&rsquo;t denial. Resilience is acceptance.</p>
]]></content:encoded>
    </item>
    <item>
      <title>On the Leica Q2 and Fujifilm X100V</title>
      <link>https://mike.puddingtime.org/posts/2020-12-03-on-the-leica/</link>
      <pubDate>Thu, 03 Dec 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-12-03-on-the-leica/</guid>
      <description>&lt;p&gt;Somewhere mid-summer I decided to take a break and head for the coast. I
found a room with a small kitchen close to the beach in Manzanita and I
set out to do nothing but walk the beaches in the area and take pictures
at my own pace. As COVID-era vacations go, it was just right. I also
pulled the trigger on a Q2, Leica&amp;rsquo;s compact, fixed-lens, full-frame
camera. I wanted to start this sentence with &amp;ldquo;Reasoning that a great
vacation deserved a great camera,&amp;rdquo; but I have not, five months later,
convinced myself that reason was involved.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Somewhere mid-summer I decided to take a break and head for the coast. I
found a room with a small kitchen close to the beach in Manzanita and I
set out to do nothing but walk the beaches in the area and take pictures
at my own pace. As COVID-era vacations go, it was just right. I also
pulled the trigger on a Q2, Leica&rsquo;s compact, fixed-lens, full-frame
camera. I wanted to start this sentence with &ldquo;Reasoning that a great
vacation deserved a great camera,&rdquo; but I have not, five months later,
convinced myself that reason was involved.</p>
<p>For the past six years or so I have been shooting exclusively with
Fujifilm cameras. An X100S got me into the X-series, an X-T2 was my
entry point into their interchangeable lens bodies, and I have since had
an X100F, X-Pro3, X-T4, and X100V. The X100 series is a wonderful &ldquo;throw
in your bag&rdquo; camera: A versatile lens, and most of the capabilities of
the interchangeable lens cameras in Fujifilm&rsquo;s lineup. X100s have always
been what I&rsquo;ve reached for on family trips and business travel.</p>
<p>Someone asked me how the Q2 compared to its nearest analog in the
Fujifilm lineup: the X100V. I got the question at bedtime over a Google
Hangouts chat on my phone, pecked in an answer that I had to edit to fit
in the message length limitations, and went to sleep. This is something
a little more long form. If you want truly exhaustive reviews of these
two cameras, go to <a href="http://dpreview.com">Digital Photography Review</a>, where you&rsquo;ll get
much more detail than I know to offer. (Spoiler alert: Both cameras get
the &ldquo;gold&rdquo; award, and are within two points of each other in overall
scores.)</p>
<p><img src="/images/2020/27795f08ea.jpg" alt="2020112911585096 3309954855980953 L1000385">{:
style=&ldquo;display:block; margin-left:auto; margin-right:auto;&rdquo; border=&ldquo;0&rdquo;
width=&ldquo;100%&rdquo;}</p>
<p>What you&rsquo;re getting from me is a comparison of the things I care most
about and can meaningfully differentiate, so I can&rsquo;t tell you much about
video&ndash;something Fujifilm cares about and which Leica only cursorily
addresses in the Q2, which is a stills camera with some video
capabilities. The other thing you&rsquo;re getting from me is a studious
avoidance of the more subjective end of the subjectivity range. I can
tell you what I like about these cameras in terms of relative
inarguability: It is both true that the X100V has a few more dedicated,
physical controls and that I prefer that. I do not know if it&rsquo;s true
that Leica optics are &ldquo;magical,&rdquo; so I am not going to make any
representations about said magic.</p>
<p>If you want to just get to my basic conclusion: The Q2 is a less
flexible camera in terms of in-camera control, and I don&rsquo;t like its
handling quite as much as I like the X100V&rsquo;s, but it produces better
images, has a better lens, and its optical stabilization and better
dynamic range make it a more flexible camera for <em>my</em> purposes, which
involve a lot of night shooting.</p>
<p>I don&rsquo;t think the Q2 is four times the camera an X100V is, and I can&rsquo;t
think of anyone I&rsquo;d be in the position of recommending a camera to for
whom I&rsquo;d recommend it as the better choice: Dollar for dollar, the X100V
is a much better camera for almost everybody interested in a premium
compact camera. At the same time, now that I own the Q2 and have not
returned it or sold it in a fit of guilt, I wouldn&rsquo;t easily part with
it: I love shooting with it, love what I get out of it, and expect to
keep it for a long time. The only reason it is not my only camera comes
down to its fixed, very wide lens, which makes portraits and some
outdoor photography a relative challenge.</p>
<p>So, some comparisons:</p>
<h1 id="physical-design">Physical design</h1>
<p>Both are weather resistant, meaning they can withstand some moisture and
dust. The Q2 is that way out of the box while the X100V requires you to
buy a filter and adapter ring. Living in Portland, I won&rsquo;t buy a camera
that is not weather resistant, and a lens needs to be pretty special
before I&rsquo;ll consider a non-WR one.</p>
<p><img src="/images/2020/d94d07ec45.jpg" alt="2020112911563909 7238181687100242342 L1000363">{:
style=&ldquo;display:block; margin-left:auto; margin-right:auto;&rdquo; border=&ldquo;0&rdquo;
width=&ldquo;100%&rdquo;}</p>
<p>Both feel pretty solid in the hand. The bodies have similar dimensions,
but the Q2&rsquo;s lens is much bigger and surely contributes to its
half-pound greater heft.</p>
<p>The X100V wants to look a little more vintage, so its rubbery body
covering is textured to look like leather, while the Q2 opts for a
crosshatched pattern.</p>
<p>The X100V offers a small handgrip, while the Q2 has a rear indentation
for your thumb to ease clamping on to it.</p>
<p>The X100V stores battery and SD card in the same compartment, underneath
a little hatch with a rubber seal. The Q2 keeps these separate, and the
battery itself has a seal because its &ldquo;compartment&rdquo; is open: You slide
the battery into its opening similar to a clip on a gun, and release it
by pulling a lever and giving the battery a slight upward push to cause
it to drop out of the body and into your hand.</p>
<p><img src="/images/2020/8012fac3ed.jpg" alt="DSCF0950"></p>
<p>The X100V has a built-in flash that works just fine. The Q2 has none:
Just a hot shoe.</p>
<p>The X100V has a number of ports including a mic port, a USB-C port that
allows for charging via a cable, and a micro HDMI port. The Q2 doesn&rsquo;t
have any ports, at all, so batteries have to be charged with a dedicated
charger and photos have to be downloaded either via the WiFi interface
or with an SD card reader.</p>
<h1 id="lenses-and-sensors">Lenses and sensors</h1>
<p>In terms of raw lens and sensor specs:</p>
<ul>
<li>The Q2 has a 47mm, full-frame sensor; the X100V has a 26.1MP APS-C
sensor.</li>
<li>The Q2 has an f1.7, 28mm lens; the X100V has an f2, 23mm lens (making
it roughly equivalent to a 35mm lens after sensor crop is taken into
account). Since I&rsquo;ve lived most of my (digital photography) life with
APS-C sensors, it&rsquo;s a little easier for me to think of the Q2&rsquo;s lens
as being roughly equivalent to an 18mm lens on one of my Fujifilm
bodies.</li>
</ul>
<p>I won&rsquo;t go into sensor comparisons. Having not shot with a standard CMOS
sensor in a long time, I will say that a few times I&rsquo;ve run into the
kind of moire with the Q2 that I&rsquo;ve never had to deal with in a Fujifilm
camera&rsquo;s X-Trans sensors. It has been rare. The Q2 produces more subtle
output, overall, and I&rsquo;m always pleased with how much flexibility its
DNGs provide: I try not to get too comfortable with that, but I&rsquo;ve
rescued a few images in Lightroom that would have been goners coming
from another camera. I&rsquo;d have said the same thing about the X100V&rsquo;s RAW
files not that long ago, too.</p>
<h1 id="comparing-viewfinders-and-screens">Comparing viewfinders and screens</h1>
<p>The X100V&rsquo;s hybrid electronic/optical viewfinder is one of its standout
features. You can toggle between the two, and there&rsquo;s something pretty
cool about the overlay of shooting data on a non-electronic view. That
said, I&rsquo;ve become pretty spoiled by the accurate previews an electronic
viewfinder presents, don&rsquo;t like always wondering about parallax error,
and sometimes shoot in monochrome mode as a compositional aid, so I
almost never use the OVF. The Q2&rsquo;s EVF is larger and clearer.</p>
<p><img src="/images/2020/6bbdb26b34.jpg" alt="DSCF0388"></p>
<p>The X100V has a flip-out LCD that&rsquo;s great for shooting at waist-level.
The Q2 has a fixed LCD. I vastly prefer the flexibility of the X100V for
street photography, where stealth helps, and for getting down close to
subjects.</p>
<p>Both have touch controls, and I seldom use them on either. I never
warmed up to the implementation on Fujifilm cameras, finding it a little
cranky and preferring to look through the viewfinder to shoot; I simply
haven&rsquo;t experimented on the Q2, outside of using a double-tap center
screen to recenter the AF point. I&rsquo;m glad the emphasis on touch control
is still apparently just an accommodation to phone photographers who are
used to tapping a screen to focus, etc. and not core to the control
experience.</p>
<h1 id="comparing-lenses">Comparing Lenses</h1>
<p>The X100V&rsquo;s lens is comparable to the &ldquo;Fujicron&rdquo; 23mm/f2 on their
interchangeable lens cameras, and I&rsquo;ve come to think of 23mm as my
&ldquo;home&rdquo; focal length on crop sensors: Great for capturing context on the
street, able to do tourist landscapes, wide enough to provide some
subject separation. It&rsquo;s sharp and fast enough most of the time for
night-time street shooting.</p>
<p><img src="/images/2020/ecf2e053c3.jpg" alt="L1030143"></p>
<p>The Q2&rsquo;s lens, at 28mm/f1.7, reminds me most of the 16mm/f1.4 on a Fuji
body. Not quite as wide, but close enough to be noticeably different
from the 23mm on the X100V. It is not, frankly, as comfortable a focal
length for me. I&rsquo;ve taken my 16mm lens on street shoots before, but it&rsquo;s
a hair wide for comfort. I do like taking it on hikes as my sole lens,
because the wide aperture allows for some lovely bokeh in closeups of
plant life or other details, but it&rsquo;s plenty wide and sharp to capture a
waterfall or landscape.</p>
<p>The Q2&rsquo;s lens comes with a macro setting. Shot wide open and close up,
you get amazing bokeh and detail. The depth of field is shallow enough
that a slight breeze can upset the image.</p>
<p>The two lenses live on either side of a divide where portraits are
concerned. With a little care, you can overcome the worst of the
&ldquo;hatchet face&rdquo; effect on the X100V. On the Q2, the distortion of the
28mm lens is a little too much; or I have not figured out how to
overcome it yet. It&rsquo;s great for environmental portraits.</p>
<p>They also live on two sides of a metering divide: The Q2&rsquo;s wide, 28mm
lens can pull in a lot of sky and skew underexposed. The X100V&rsquo;s (again,
cropped) 23mm tends to cause less of that.</p>
<p>This is probably also a good point at which to note that both cameras
have an optional digital crop/zoom, allowing them to simulate closer
focal lengths: The Q2 allows for digital cropping to 35mm, 50mm, and
75mm. The X100V has 35mm and 50mm crops.</p>
<p>As I understand it, the Q2 is simply cropping, which makes the feature
more of a compositional aid; and it works with both the DNGs and JPEGs
the camera produces (the JPEGs are truly cropped, the RAWs keep all the
data from the sensor but show up in Lightroom pre-cropped and restorable
to the full image dimensions). When shooting DNGs, the viewfinder
presents crop marks during composition. On review in the camera, it
shows the cropmarks. When shooting DNG/JPEG or just JPEG, the viewfinder
presents crop marks during composition, but shows the cropped image
during review in the camera.</p>
<p>The X100V does a little more, applying some sort of digital upscale to
improve over standard digital zooms. The X100V also limits the
availability of the feature to JPEG shooting only. The feature isn&rsquo;t
available when capturing RAW/JPEG, either. In terms of UI, the feature
works like a digital zoom: Using the EVF, it provides a zoomed image;
while using the optical viewfinder it provides crop marks. The zoomed
image in the EVF is pretty poor quality (perhaps to maintain the
framerate of the display) and can put you off the feature pretty quickly
until you see the actual images it produces, which aren&rsquo;t bad at all,
and stand up to all but determined pixel-peeping.</p>
<p>With both cameras, you aren&rsquo;t getting the actual optical characteristics
of the closer focal lengths &hellip; it&rsquo;s still just a cropped image, so
you&rsquo;re not going to magically turn either camera into a portrait
machine. Given you have a lot more pixels to work with on the Q2, the
35mm crop is still pretty good, providing a 30MP image &ndash; still higher
resolution than the X100V at full resolution.</p>
<p>In either case, I&rsquo;ve got a completely RAW workflow at this point, so the
X100V&rsquo;s digital crop isn&rsquo;t available to me. On the Q2, it&rsquo;s a useful
compositional aid that I welcome given that the 28mm lens is wide for my
tastes.</p>
<p>I suppose this is also the place to note that the Q2&rsquo;s lens is
stabilized (Leica says it&rsquo;s good for 6 stops), while the X100V&rsquo;s is not.
Given that my primary shooting environment is Portland and most of my
shooting is in the late afternoon or evening, the Q2 becomes enormously
more flexible: I can easily hand-hold down to 1/8 at night and still get
sharp, low-noise images. I wonder if IBIS is the next frontier for the
X100 series: Having had it on the X-T4, and given the X100V has a newly
redesigned lens, maybe it&rsquo;s a feature they were holding back this time
around, having previously claimed it was impossible on the X-Trans
sensors. That doesn&rsquo;t matter for this comparison: The X100V doesn&rsquo;t have
a stabilized lens so it necessarily produces noisier images at night
when handheld.</p>
<h1 id="control-and-handling">Control and Handling</h1>
<p>Both cameras emphasize physical controls, the X100V a little more
full-throatedly. Both have actual aperture rings and shutter dials. The
X100V has a dedicated exposure comp dial, while the Q2 has an unmarked
dial in the same place that behaves like one by default. I prefer the
X100V&rsquo;s dedicated, marked dial because it&rsquo;s easier to get it back to &ldquo;0&rdquo;
without using a screen, which is great for street shooting, where I want
to minimize the time I spend with the camera to my face or looking into
its screen.</p>
<p>The X100V also has an ISO dial married to the shutter dial. The Q2
&ldquo;exposure dial&rdquo; has a button on top that turns it into an ISO dial, so
ergonomically it&rsquo;s close to a wash: I will always prefer a marked
control, but this one in particular isn&rsquo;t one I use much.</p>
<p>The X100V can switch between manual, automatic, and automatic/continuous
focus modes with a dedicated switch. The Q2 has a thumb control on the
lens barrel to do the same thing for manual and autofocus, but you have
to go into a menu to turn on continuous tracking.</p>
<p>For moving the autofocus point around, the X100V has a little joystick
nub/button, while the Q2 has a d-pad. One thing I love about the X100V
is that you can return the AF point to center by clicking the joystick.
On the Q2, the same thing happens with a doubletap in the center of the
back LCD, which isn&rsquo;t as easily done when you&rsquo;re holding the camera to
your face and trying to quickly get your AF point somewhere useful.</p>
<p>Both cameras also offer a lot of flexibility in how their buttons work.
The X100V is a little more flexible and has more buttons on the body
overall. The Q2 uses long-presses to make some of its buttons
multi-function. The &ldquo;fn&rdquo; button, for instance, lets you set what option
it will control with a longpress, then make that option available from a
short-press. The right-wheel button behaves similarly. In both cases,
you can customize which options live under each button, providing quick
access to 16 functions.</p>
<p>Both also offer a rear LCD menu. Fujifilm calls this the &ldquo;Q menu&rdquo; across
all its X-series cameras. On the Q2 you get a fixed menu of options that
are pretty common sense choices. The X100V offers much more control of
its equivalent Q menu: You can adjust the number of available options,
and mix and match many, many settings. I prefer it much more, but I&rsquo;m
about to get into a difference in philosophy between these two cameras
that renders the difference close to moot.</p>
<p>In terms of saving settings presets, the X100V offers seven slots where
you can save film simulation, shadow/highlight tone, saturation, etc.
and then name each one. When I had a more JPEG-heavy workflow, I saved
several combinations of shadow and highlight tone at various extremes,
and a few more neutral variations, then tied switching film simulations
to a button I could get at easily. The net result was easy access to
seven sets of custom settings times however many film simulations I
cared to use. It&rsquo;s a good system that allows for a lot of
experimentation. The missing next step for the system is to allow use of
those custom settings when exporting a JPEG in-camera: Today, that
operation requires you to hand-select every setting you want to change
before preview and save. Even better would be &ldquo;preset bracketing.&rdquo; Today
you can do film simulation bracketing, which is nice but not all the way
there.</p>
<p>The Q2 has user profiles, which do some of the same thing and can also
be renamed. Because of the direction Leica has gone with settings
overall, these feel less useful as a creative exploration tool and more
as a way to specify profiles by shooting conditions and environments
(e.g. night, day, indoor, outdoor, etc.)</p>
<p>I tend to prefer Fujifilm&rsquo;s approach to controls and like the
flexibility of the Q menu. I find the Q2&rsquo;s menu system cleaner and less
bewildering/tedious. It is also exposing much less to control.</p>
<p>One other area where I prefer the X100V is in changing settings on the Q
menu: You can use the joystick to move to a setting, then use the
thumbwheel to cycle through options. On the Q2&rsquo;s comparable menu, you
have to click into the option to change it. It&rsquo;s a bit slower and less
efficient.</p>
<p>Ultimately, the X100V feels more customizable and tunable for individual
use cases because it offers a few more buttons and switches you can
remap to taste. The Q2 is a bit more opinionated in that regard and has
fewer physical controls to remap. While it is pretty flexible, it is
still less so than the X100V.</p>
<h1 id="the-mobile-experience">The mobile experience</h1>
<p>I should probably note the great tragedy of Fujifilm&rsquo;s X system, which
is its mobile app. For a camera devoted to producing publication-ready
images, the Fujifilm mobile app is a catastrophe: Cranky, unreliable,
slow. I hate it and won&rsquo;t use it, preferring instead to carry an SD card
reader around for direct import to phone or tablet, and using a
dedicated device for remote capture.</p>
<p>Leica&rsquo;s FOTOS app is far more reliable and simple to use, but
downloading full resolution DNGs or JPEGs from a full-frame camera is
time- and battery-consuming, and with my workflow they need to go
through Lightroom anyhow. Fujifilm should poach whatever team is working
on FOTOS: Q2 shooters won&rsquo;t miss them, and Fujifilm&rsquo;s CSAT scores will
surely triple overnight.</p>
<p>If you absolutely must download images from the X100V instead of using a
card reader, there&rsquo;s an option to reduce the size of the downloaded
images to 3MB, which shortens download times and increases your chances
of completing a download before the inevitable disconnect.</p>
<p>Some people say they have a lot of luck with the app, by the way. I
happen to have found it uniformly bad over three generations of Fujifilm
cameras. Even if it were amazingly reliable, it would still be slower
than a USB-C SD card reader connected directly to my iPad.</p>
<p>So let&rsquo;s get to that philosophical stuff:</p>
<h1 id="comparing-philosophies">Comparing philosophies</h1>
<p>The two cameras occupy a similar niche, to the extent they are
fixed-lens, compact, weather-resistant, &ldquo;take with you everywhere&rdquo;
devices. While their lenses are a bit different, they&rsquo;re still just two
opinions on the same question, which is how to provide maximum
versatility: Just wide enough to capture a sweeping vista, and teetering
on the edge (but just missing, IMHO) of being close enough to capture an
intimate portrait. The Q2 requires you to be a little more brave in your
street photography if you want tighter framing; the X100V will sometimes
make you leave a little out of that landscape.</p>
<p>On the inside, though, they diverge more profoundly.</p>
<p>The X100V presents more like an old-school rangefinder on the outside,
with maximum physical control, but provides a software feature set that
is much more interested in providing more heavily processed images
straight out of the camera.</p>
<p>The Q2 presents a more modern, streamlined face, and is much less
interested in producing processed images. In fact, its JPEGs are so &hellip;
just fine &hellip; that it effectively directs you toward a RAW workflow.</p>
<p>Let&rsquo;s start with the two cameras&rsquo; approaches to basic image styling:</p>
<p>The fundamental building block of the X100V&rsquo;s notions around image style
is its collection of &ldquo;film simulations,&rdquo; most of which are designed to
emulate the basic characteristics of Fujifilm&rsquo;s film stocks: Vivid
Velvia, soft Astia, cinema-like Eterna, and moody, monochrome Acros
(along with several filter options to go with to effect contrast). There
are a few more, including a pair of very neutral options and &ldquo;Classic
Chrome.&rdquo;</p>
<p>The Q2 is way more staid: It offers &ldquo;standard,&rdquo; &ldquo;vivid,&rdquo; &ldquo;natural,&rdquo;
&ldquo;natural black and white&rdquo; and &ldquo;high contrast black and white&rdquo; settings
it refers to as &ldquo;film styles.&rdquo; You can affect a few variables within
each preset to your taste: contrast, sharpness, and (for the color
styles) saturation. Those options travel along with each film style, and
it takes a little menu delving to change them.</p>
<p>Fujifilm breaks out those basic options (and more), allowing for a much
more flexible approach to in-camera image styling: In addition to
saturation and sharpness, you get tone control for shadows and
highlights, plus the vintage-y &ldquo;color chrome&rdquo; &amp; &ldquo;chrome blue&rdquo;
settings, grain, clarity (midtone contrast) and more.</p>
<p>Given a little up-front work with an X100V, you can produce very
distinctively styled images right in the camera, bending whatever line
you care to imagine exists between plain old digital darkroom work and
the more tasteful end of VSCO&rsquo;s filter selection. You can also
re-process RAW images in-camera to apply new settings and save a new
JPEG to your memory card.</p>
<p>The Q2 offers little of this flexibility: To get the most out of your
images, you&rsquo;re going to be headed to Lightroom or whatever your
preferred darkroom tool is.</p>
<p>I don&rsquo;t think one philosophy is better or worse. Both cameras, at their
core, make beautiful images.</p>
<p>Fujifilm is doing some interesting things with its cameras and software
across its product line. The XPro-3, for instance, was a pretty
polarizing camera thanks to its hidden rear LCD and implicit stance
against reviewing your images right after taking them (aka &ldquo;chimping&rdquo;).
People made all sorts of claims about the value of this approach,
choosing to ignore that you can choose not to chimp, can often simply
turn off the rear LCD, and can even just flip it closed in a lot of
cases. That Fujifilm did this while also making the previously marquee
feature hybrid viewfinder less useful and functional compared to
previous versions suggested that perhaps the camera was becoming less
about perfecting the device and more about perfecting the mood it is
meant to evoke.</p>
<p><img src="/images/2020/d12679aaff.jpg" alt="DSCF1523"></p>
<p>So, too, does it go with the X100V&rsquo;s film simulations and the choices
Fujifilm is making about which creative settings are going in: The color
chrome and chrome blue settings, for instance, are meant to further
augment the throwback vibe of the Classic Chrome film simulation.</p>
<p>Taken together, you get the feeling Fujifilm is looking to stake some
ground as a lifestyle brand through its industrial design and creative
control choices. Years ago, when I sold my X100S to a friend to fund my
next camera purchase, his wife, on seeing the camera, dryly noted that
&ldquo;I didn&rsquo;t know Mike was a hipster.&rdquo; At the same time, Fujifilm&rsquo;s
cameras, the X100V included, aren&rsquo;t losing integrity as picture-taking
machines. You don&rsquo;t have to use any of the creative control stuff, and
having lots of physical controls <em>can</em> be an aesthetic choice but is
also a very practical one: I owned a Sony mirrorless camera for about 18
hours four years ago, and took it back because I simply preferred
Fujifilm&rsquo;s approach to controls and interfaces for utilitarian reasons.</p>
<p>I want to make clear, though, that Fujifilm&rsquo;s efforts to evoke a
particular mood don&rsquo;t really limit your choices: There is so much
flexibility in the interface and the Q menu is so customizable that you
can pretty much recreate, for instance, the much less flexible LCD
control panel on a Q2 (or any other digital camera). You can leave the
vintage effects on the table, never seeing or using them. As much as
Fujifilm is making it easy for you to take your photos in a sort of
vintage-y direction, it is not making one-note novelty toys.</p>
<p><img src="/images/2020/a91f490156.jpg" alt="L1000176"></p>
<p>The Q2 feels less interested in evoking a particular mood, does not
provide creative controls that are meant to remind you of vintage film
or its visual characteristics, and is content to let the Leica marketing
department handle all the heavy lifting of making it less about &ldquo;retro&rdquo;
and more about participating in a brand&rsquo;s lineage.</p>
<p>Philosophically, then, the Q2 seems to assume you either want to produce
images within a pretty narrow baseline of output, or intend to do your
creative processing in post production.</p>
<p>If you&rsquo;re the type to simply compare feature lists, you sort of have to
give the nod to the X100V: It packs more options into the camera itself
and provides more in-camera creative tools. For a certain kind of
shooter, it is the more efficient choice because for that shooter it
might remove the need for all but the most cursory work in post.</p>
<p>Maybe that&rsquo;s worth a digression, even:</p>
<p>For the past while, we&rsquo;ve watched the camera industry go into a slump:
The low end point-and-shoot market has been eaten alive by capable
smartphone cameras, which are offsetting their smaller sensors and
lenses with amazing computational photography leveraged by very capable
AI-driven processing engines. There are cases where my newish iPhone
outperformed my Fujifilm cameras in tricky lighting situations in terms
relative to their respective use cases; meaning that the iPhone output
looked much better in its target media (phone, tablet, laptop screens)
than the Fujifilm output would without significant post production work.</p>
<p>Traditional camera makers are eyeing this trend with some nervousness. A
Sony executive, in the process of defending the viability of their
interchangeable lens product line, came out and identified the divide as
one between &ldquo;glass&rdquo; &ndash; big lenses and big sensors &ndash; and
&ldquo;computational,&rdquo; or small lenses and sensors augmented with AI-driven
image processing.</p>
<p>On the spectrum of premium fixed lens shooting experiences &ndash; the latest
iPhone, the latest X100-series, and the latest Q-series &ndash; the X100V
represents a dipping of the toes into solving hardware limitations
(Fujifilm has staked turf on the idea that APS-C is enough for just
about anybody) with computation. Its digital zoom feature isn&rsquo;t as
passive as the feature has been in past generations, and it offers more
tools you&rsquo;d once expect to handle in post. That has created some
experience gaps, too: Turning the clarity setting on involves a 1-2
second delay as the image is processed and saved. The Q2 is still pretty
committed to a more traditional workflow: You point your expensive glass
and sensor at the subject, release the shutter, and wait to do anything
significant in post. There&rsquo;s an HDR mode, but it&rsquo;s nowhere as flexible
as Fujifilm&rsquo;s.</p>
<p>If you&rsquo;re a JPEG shooter, the Fujifilm approach is probably more
appealing: Once you lock in a preferred look and save it to one of seven
memory slots, your photos can go direct to wherever you prefer to
publish without any post-processing and a high degree of individual
style. The Q2&rsquo;s JPEGs are pretty neutral in affect, even after a recent
update meant to address complaints about them, and I imagine many people
will want to punch them up in post at least a little.</p>
<p>If you&rsquo;re a RAW shooter, it&rsquo;s a little more (and less) complicated:
Lightroom users (of which I am one) will be aware that not much
in-camera customization comes over on import: Fujifilm RAW images can
include the film simulation, but few of the other settings. The Q2 is in
an even less sophisticated boat: Lightroom imports the RAW and applies
little of the in-camera processing at all that I can discern.</p>
<p>The net effect of all this for me, as a RAW shooter, is that I&rsquo;ve
written a few Lightroom presets that I use at import for my Fujifilm and
Q2 images alike. Since the Fujifilm film simulations are only available
for images from the X100V, those presets tend to use Adobe&rsquo;s RAW
presets, which are fine starting points. I will use in-camera settings
as visualization aids, but my Lightroom import presets determine where I
start my digital darkroom work.</p>
<h1 id="conclusion-ish">Conclusion(ish)</h1>
<p>I love both these cameras, and would ultimately love some fusion of the
two: The Q2&rsquo;s sensor and lens specs are better and it is the more
flexible camera for my use cases as a result, but I do love the X100V&rsquo;s
more generous physical controls and flexible UI: The Q2 is a small but
livable step back in that regard. Because I have a very
post-production-oriented workflow, most of the X100V&rsquo;s in-camera
creative options are lost on me, as much as I like the aesthetic and
have a few personal Lightroom presets that can nudge my images in that
direction on import.</p>
<p>I never choose the X100V over the Q2 when I&rsquo;m headed out the door: the
one &ldquo;advantage&rdquo; it would have for my purposes is a slightly more
comfortable focal length, which the Q2&rsquo;s crop function effectively
removes while still providing more pixels to work with. I sometimes
choose my X-T4 because it has the flexibility of interchangeable lenses
and excellent image stabilization, or because I am in a particular mood
and have a small collection of Lensbaby and novelty lenses that pair
well with the camera&rsquo;s creative options. I&rsquo;ll probably sell the X100V
soon enough, because it doesn&rsquo;t really have a place in the lineup, but I
have a lot of affection for the X100 series and Fujifilm cameras in
general; the Q2 is simply a few steps up (but probably not four steps
up) from the X100V.</p>
<h2 id="some-links">Some links</h2>
<ul>
<li><a href="https://pix.puddingbowl.org/Q2-Photos/">A gallery of Q2 images in varying states of edit</a>: I just filtered
Lightroom for images I flagged as keepers, so you can see a range of
styles and some half-finished ideas.</li>
<li><a href="https://pix.puddingbowl.org/Fujifilm-X100V-Photos/">A gallery of X100V images</a> in a similar state of curation.</li>
<li><a href="https://www.dpreview.com/products/compare/side-by-side?products=leica_q2&amp;products=fujifilm_x100v">DPReview&rsquo;s side-by-side comparison tool</a>, where you can see a
number of specs side-by-side. It really drives home how feature-rich
the X100V is.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Goodbye, Elsa</title>
      <link>https://mike.puddingtime.org/posts/2020-10-18-goodbye-elsa/</link>
      <pubDate>Sun, 18 Oct 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-10-18-goodbye-elsa/</guid>
      <description>Today our family said goodbye to Elsa.</description>
      <content:encoded><![CDATA[<p>Today our family said goodbye to Elsa. It went the best we could hope
for: The initial sedative worked quickly, and it was a relief to see her
truly relaxed for the first time in a while. We sat around her on the
floor, petting her, saying goodbye, and remembering her, then asked the
vet in to finish. She required a second injection of the euthanasia
drug, but passed quietly.</p>
<p>Elsa had arthritis in her back legs, and it had made a lot of things
very hard for her. She wanted to be with us wherever we were in the
house, but getting up and down the stairs was harder and harder on her.
She began to fall every now and then, and would sometimes cry out from
the pain when trying to climb the stairs. We ended up putting up a gate
to keep her downstairs, and that was pretty tough: She slept in a
bedroom for as long as she was part of our family, and it was hard to
leave her downstairs at night.</p>
<p>We adopted Elsa from a shelter ten years ago. We didn&rsquo;t know much about
her history except that she had been brought up from California, and had
been found outdoors with two puppies.</p>
<p>She was often a challenge. We don&rsquo;t know what kind of trauma she endured
before she came to our home. Loud noises and sudden movement were hard
on her, and she once smashed through a wooden fence when a car backfired
and she got off her leash in a panic. She hated being outdoors or out of
sight of the house. She was usually content to just be with us wherever
we were in the house. We took it as a sign that she re-found some sense
of spirit when she started barking at strangers just two or so years
ago.</p>
<p>She was a sweet dog and we&rsquo;re going to miss her. I&rsquo;m so glad her
suffering is over.</p>
<p><img src="/images/2020/5b6291fc51.jpg" alt="">
<img src="/images/2020/bcc9eb6cb9.jpg" alt="">
<img src="/images/2020/ee3e452ec9.jpg" alt="">
<img src="/images/2020/fce8fc4e56.jpg" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>Cool Alone</title>
      <link>https://mike.puddingtime.org/posts/2020-10-05-cool-alone/</link>
      <pubDate>Mon, 05 Oct 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-10-05-cool-alone/</guid>
      <description>&amp;lsquo;We don’t deserve resolution; we deserve something better than that. We deserve our birthright, which is the middle way, an open state of mind that can relax with paradox and ambiguity.&amp;rsquo;</description>
      <content:encoded><![CDATA[<p>I just finished reading Pema Chödrön&rsquo;s _<a href="https://www.goodreads.com/book/show/687278.When_Things_Fall_Apart">When Things Fall Apart</a>_
and recommend it to people who think about mindful acceptance.</p>
<p>I love this sentiment, which echoes a book about Enneagram I&rsquo;ve been
working through that talks a lot about the personality as an overlay on
our essential self:</p>
<blockquote>
<p>As human beings, not only do we seek resolution, but we also feel that
we deserve resolution. However, not only do we not deserve resolution,
we suffer from resolution. We don’t deserve resolution; we deserve
something better than that. We deserve our birthright, which is the
middle way, an open state of mind that can relax with paradox and
ambiguity. To the degree that we’ve been avoiding uncertainty, we’re
naturally going to have withdrawal symptoms—withdrawal from always
thinking that there’s a problem and that someone, somewhere, needs to
fix it.</p>
</blockquote>
<p>One of the core ideas of <em>When Things Fall Apart</em> is that of how to be
alone. She talks about <a href="https://www.lionsroar.com/six-kinds-of-loneliness/">&ldquo;cool&rdquo; and &ldquo;hot&rdquo; loneliness</a> in this excerpt:</p>
<blockquote>
<p>Usually we regard loneliness as an enemy. Heartache is not something
we choose to invite in. It’s restless and pregnant and hot with the
desire to escape and find something or someone to keep us company.
When we can rest in the middle, we begin to have a nonthreatening
relationship with loneliness, a relaxing and cooling loneliness that
completely turns our usual fearful patterns upside down.</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>Be here now</title>
      <link>https://mike.puddingtime.org/posts/2020-07-14-if-my-happiness/</link>
      <pubDate>Tue, 14 Jul 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-07-14-if-my-happiness/</guid>
      <description>Longing for a remembered state of perfect presence is to not be present with this imperfection.</description>
      <content:encoded><![CDATA[<blockquote>
<p>“If my happiness at this moment consists largely in reviewing happy
memories and expectations I am but dimly aware of this present.” —
Alan Watts, <em>The Wisdom of Insecurity</em></p>
</blockquote>
<p>Sitting in this well-lit room with the sound of the surf coming in from
the balcony, it is easy to be here now.</p>
<p>One thing I miss about paratrooping: The moments where I had no choice
but to be right where I was in time and space. The five seconds between
stepping out the door and feeling the yank of the static line. The few
moments I had to do the right thing when something went wrong. The
exhilaration of running 75 pounds of gear and silk off the drop zone,
wholly inside the animal. No thought about the choices that put me
there, no next meal, no beer at the picnic table in the barracks. Just
there.</p>
<p>Nostalgia for that is its own kind of dislocation. It&rsquo;s a longing for
the quiet up there in the sky between handing off the static line and
stepping out the door and the five seconds before the next useful input
about the situation at hand. It&rsquo;s resistance to how things are here and
now: The twisted risers, the feet of another jumper scrambling across
your canopy, being put out over the trees. A faster fall because it&rsquo;s
raining and the silk got wet. Landing, but being taken aloft again by a
strong gust, helpless just above the ground for a moment before being
dropped, hard, seeing stars and tasting blood. Being dragged along rocks
and dirt, holding wrist in hand to pull the canopy releases in case you
broke something and haven&rsquo;t felt it yet. Disorientation on a moonlit DZ.</p>
<p>Longing for a remembered state of perfect presence is to not be present
with this imperfection.</p>
<p>Nothing to do but make another cup of tea, follow the sun out to the
balcony. Turn back to my book. Be here, now.</p>
<p><img src="/images/2020/67db69149c.jpg" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>a pause for appreciation </title>
      <link>https://mike.puddingtime.org/posts/2020-04-23-a-pause-for/</link>
      <pubDate>Thu, 23 Apr 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-04-23-a-pause-for/</guid>
      <description>An early pandemic moment of gratitude.</description>
      <content:encoded><![CDATA[<p>Some things from this period I am appreciating:</p>
<ol>
<li>
<p>I started an early rise routine a few months ago, mostly to make the
commutes for the occasional 7 a.m. meeting feel less onerous. I have
mostly kept the routine but without the 45-minute commute. I have so
much time in the morning before work, now.</p>
</li>
<li>
<p>That time often goes to making good breakfasts for Ben. Play a
podcast, make the pancakes or biscuits and gravy, drink tea.</p>
</li>
<li>
<p>I love my office. I’m surrounded by my pictures, I have the lighting
dialed in. It’s bright and welcoming. There&rsquo;s decent sound. My mood
improves when I walk in first thing. At the end of the day, I sit in
the lounge chair in the corner with the lights low and think about
nothing.</p>
</li>
<li>
<p>We have a lot of discrete spaces now that the weather is turning:
bedroom balcony/porch, front porch, little back patio with sun sail,
our offices, and the living room. It’s great to just go out and sit
on the balcony in between meetings and get a little sun and breeze.</p>
</li>
<li>
<p>Our patterns throughout the day take us in and out of offices/rooms.
Sometimes we all end up in the living room; Ben sewing or playing a
game, Alison and me working. It’s companionable. After a while a
phone call or whatever breaks up the moment and we drift away.</p>
</li>
<li>
<p>It is easier to consider what&rsquo;s next during the day. At first home
is a distraction, but after a while it&rsquo;s back to deeply familiar and
comfortable. Grab a glass of water, sit on the porch for ten minutes
and think about what&rsquo;s important for that next meeting or work
sprint.</p>
</li>
<li>
<p>It&rsquo;s so quiet now. You can see more stars at night.</p>
</li>
<li>
<p>People are masked and all skirting wide, but the friendly little
wave&ndash;a sort of manual curtsy&ndash;is back in vogue. I was a friendly
little waver when we moved here 20 years ago, but the move to the
sorta WASPy, chilly northeast Portland beat it out of me, and Lents
people are more about the uptilted &ldquo;sup?&rdquo; chin, which is less a
greeting and more a fleeting nonaggression pact.</p>
</li>
<li>
<p>I see more of Ben and he wants to talk more.</p>
</li>
<li>
<p>In the quiet and relative calm I&rsquo;ve carved out around me, I have
space to remember people are not at their best. Sometimes people
aren&rsquo;t at their best sort of <em>at</em> me, and it has become easier over
the past few weeks to return to center afterward. We&rsquo;re all sort of
alone with our egos right now. People succumb. They need
understanding and patience, and a sincere belief on my part that
there is nothing to forgive.</p>
</li>
<li>
<p>No commute home at night. Just that last email or Slack, a quick
check for invoices or purchase orders or expense reports, then
gather up the mug or glass, lights out, and head downstairs.</p>
</li>
<li>
<p>People reaching out and being closer in the isolation.</p>
</li>
<li>
<p>Space to sit in the dark and grieve, or feel shitty, or cry, or
worry.</p>
</li>
<li>
<p>Writing more feels like an adaptive behavior, at the slight cost of
coming to believe meetings are best for the truly novel, but not
being sure how to address that.</p>
</li>
<li>
<p>I have finally found the sweet spot between keeping handwritten
notes and capturing actions reliably. It&rsquo;s simple: Take notes,
annotate actions with &ldquo;!!!&rdquo; and then sweep that into Things at the
end of the meeting, which is easier when you&rsquo;re not rushing down a
floor and across the building to get to the next thing.</p>
</li>
<li>
<p>Ben&rsquo;s room is a marvel to me. He understands comfort and coziness in
a way I was incapable of at his age. Throw pillows, big blankets,
fairy lights, candles. I poke my head in and my heart melts. He
learned how to figure out what he loves and he surrounds himself
with it. It took me forever&ndash;well into my forties&ndash; to stop being
angry and hard on myself, and to learn how to find things that
brought joy or comfort. I&rsquo;m really proud that he just has that.</p>
</li>
</ol>
<p>This is a hard time. Sometimes I think it could swallow me. I worry for
people I care about, and people I don&rsquo;t even know. I sense inside me a
resistance to listening to angry people because they are a demand on my
reserves, so I worry that I might starve my own pet anger and begin to
forget important things.</p>
<p>So this wasn&rsquo;t an act of &ldquo;it&rsquo;s all fine!&rdquo; It was an enumeration of
things that are good because of so much that is bad. It is a reminder of
how much I have. I&rsquo;m grateful for it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The picture habit: On 37,000 pictures in three years after a week of bad pictures</title>
      <link>https://mike.puddingtime.org/posts/2020-02-14-the-picture-habit/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-02-14-the-picture-habit/</guid>
      <description>&lt;p&gt;This week was packed and long in a way I haven&amp;rsquo;t had to deal with in a
while. One day started at 7a and went to 10p, schedule filled the entire
time. Another went from 8a to 11p, with a 20 minute break that went to
someone else&amp;rsquo;s problem. Yesterday was a mere &amp;ldquo;start at 8:00, go to 5:30&amp;rdquo;
day, but the cumulative sleep loss and churn of the week made it a day
to be gotten through, not won, punctuated by doubling back on things
that should have been handled but simply had not been.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This week was packed and long in a way I haven&rsquo;t had to deal with in a
while. One day started at 7a and went to 10p, schedule filled the entire
time. Another went from 8a to 11p, with a 20 minute break that went to
someone else&rsquo;s problem. Yesterday was a mere &ldquo;start at 8:00, go to 5:30&rdquo;
day, but the cumulative sleep loss and churn of the week made it a day
to be gotten through, not won, punctuated by doubling back on things
that should have been handled but simply had not been.</p>
<p>I have been trying to re-cultivate the habit of having a camera with me
and looking for opportunities to take pictures, but when I finally got
to take a look at the haul from the past three days I could see the slow
leak of energy and remembered how I was settling on things to shoot
because the few minutes I could scrape together to do that didn&rsquo;t
involve giving myself the time to sink into the shooting groove.</p>
<p>So it was sort of hard to sit there last night with the iPad and swipe
through the pictures I did get, taking a stab at making something out of
them and realizing there just wasn&rsquo;t anything there. Ideas I sort of
knew were not a great idea were glaringly not great ideas. Fatigue and
being hurried meant I hadn&rsquo;t paid attention to the technical merits, so
no amount of cropping or reconsidering could make images I was happy
with.</p>
<p>At the same time, I had that recent experience of going back and
counting how many pictures I&rsquo;ve taken since my interest in photography
was rekindled several years back&ndash;37,000 images give or take in about
three years. And then I look at the places where I keep the pictures I
like and see a few hundred and consider all their siblings: The
almost-but-not-quites, the ones I thought were the good ones that turned
out not to be, the bad ideas, the good ideas poorly executed. Then I see
the other pattern: The places I go back to over and over, either because
something didn&rsquo;t work the first time but I knew there had to be
something in there, or because something finally worked after not
working and I wanted to go back and figure out what. Every place has a
combination of time and perspective that elevate it. If I were great at
taking pictures, maybe I&rsquo;d be able to see those things without being in
the right place at the right time, but as it is I have just taken to
following the advice &ldquo;be the person who goes back.&rdquo;</p>
<p>Anyhow, 37,000 images, most of which I don&rsquo;t like at all. Just me trying
to figure things out, either as a matter of technical skill, mastering
the device that&rsquo;s taking the picture;or vision, being in the right place
at the right time and seeing the right things; or craft, taking
something that wasn&rsquo;t very well thought out and drawing a good image out
of it. It&rsquo;s all just practice.</p>
<p>Sometimes the practice is capturing the right thing at the right time.
Sometimes the practice is finding the right thing out of the wrong
thing. Sometimes the practice is just making myself sit with the things
that can&rsquo;t ever be the right thing and letting them teach me as much as
they can before I set them aside.</p>
]]></content:encoded>
    </item>
    <item>
      <title>More on the X-Pro3, which has done as it should and largely disappeared </title>
      <link>https://mike.puddingtime.org/posts/2020-01-31-more-on-the/</link>
      <pubDate>Fri, 31 Jan 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-01-31-more-on-the/</guid>
      <description>&lt;p&gt;When I first got the X-Pro3, I wondered if I was going to have that
nagging &amp;ldquo;oh, this wasn&amp;rsquo;t the right thing&amp;rdquo; feeling I&amp;rsquo;ve had over the
years when a camera doesn&amp;rsquo;t quite click with me.&lt;/p&gt;
&lt;p&gt;Back in my point-and-shoot days, it was with Canon&amp;rsquo;s followup to one of
the Powershot S-series. In my early dSLR days, it was Pentax&amp;rsquo;s followup
to the K10D, and then the Nikon 5000. Back on the point-and-shoot side,
it took about a week to decide the Fuji XF10 was largely a dud.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>When I first got the X-Pro3, I wondered if I was going to have that
nagging &ldquo;oh, this wasn&rsquo;t the right thing&rdquo; feeling I&rsquo;ve had over the
years when a camera doesn&rsquo;t quite click with me.</p>
<p>Back in my point-and-shoot days, it was with Canon&rsquo;s followup to one of
the Powershot S-series. In my early dSLR days, it was Pentax&rsquo;s followup
to the K10D, and then the Nikon 5000. Back on the point-and-shoot side,
it took about a week to decide the Fuji XF10 was largely a dud.</p>
<p>I had some grist for that potential mill: I was bothered by the precious
&ldquo;distraction-free&rdquo; marketing. I was bothered by the reviews from the
gate-keepery &ldquo;at last, a remedy for those chimpers&rdquo; people. I honestly
didn&rsquo;t know whether that hidden rear display would prove to feel like an
impediment. And, I guess, for as much as I love the compact rangefinder
form factor of the Fujifilm X100 series, I wasn&rsquo;t sure if I&rsquo;d love it as
much on a larger camera with interchangeable lenses.</p>
<p>It was a new camera, though, so I spent a few minutes getting my <a href="https://www.peakdesign.com/products/everyday-messenger/">Peak
Design messenger bag</a> into shape as a daily commuter, and I have been
carrying the X-Pro3 into work every single day in January. I&rsquo;ve also
made sure to grab it on the way out the door for a lot of neighborhood
walks and errands.</p>
<p>The camera has, after a month of regular use and closing in on 1200
exposures, largely disappeared, which is exactly what it&rsquo;s supposed to
do.</p>
<h2 id="disappearance-in-practice">Disappearance in practice</h2>
<p>With my X-T2, I had already gone down the path of reviewing shots
through the electronic viewfinder (EVF). After releasing the shutter, I
get a .5 second full-screen preview of the image and that&rsquo;s enough to
make sure a car that may have passed between me and the subject didn&rsquo;t
make it into the frame. Since I don&rsquo;t review on the rear screen, the
idea of it being hidden was already half okay.</p>
<p>On the settings side, which is the other reason people might want easier
access to the rear screen, it has been a slightly more gradual
adjustment. I didn&rsquo;t realize how much I tended to fiddle with settings
in the field until it took a more conscious action to get at them. The
act of experimenting with a new camera, though, sort of pointed the way
to a change of habit, anyhow.</p>
<p>Part of taking the camera to work every day included taking a lot of
opportunities to take the long way to the Max stop, or getting out at
lunch and using the hour to shoot in the neighborhood around work.
Because I was trying to get to know how the new features worked and what
the new settings meant, I&rsquo;d usually take a moment to set the camera up
before heading out, and I&rsquo;d largely stick with those settings over the
course of a session because I wanted a varied set of images using a new
feature.</p>
<p>I also recently decided that I prefer to shoot RAW/JPEG, capturing both
a JPEG image that will have all the in-camera settings applied, and a
RAW image I can work with more easily in Lightroom later. So some
experimentation is just as easily done in post as it is out in the
field, especially since Lightroom can apply all of Fujifilm&rsquo;s film
simulations. A dual workflow like that creates a small management
challenge, but over the years I&rsquo;ve come to appreciate it when past me
decided to shoot RAW and left me with a digital negative to work with.</p>
<p>Finally, I use all seven preset slots in the camera. Most of my presets
center around basic variations on shadow and highlight tone, plus a pair
I can go to for either vivid, high-&ldquo;pop&rdquo; images, or more muted and even
neutral ones that offer more malleable images. Knowing I have a RAW
exposure as a fallback makes it easier to do that.</p>
<p>So, abetted by the workflow I&rsquo;ve landed on and up-front camera
configuration, I do think the hidden rear screen has had a subtle
shaping effect on my behavior. I go into settings less when out
shooting, and when I do I tend to just cycle between my presets through
the EVF instead of fiddling with detailed settings.</p>
<p>One area where the camera has not completely disappeared has been moving
between modes. I still don&rsquo;t know where the &ldquo;drive&rdquo; button is by touch,
so I have to flip open the display and find the drive button to cycle
between the single exposure and HDR modes, for instance. That&rsquo;s not too
bad: Drive is the last setting I tend to use or need to change
mid-session.</p>
<h2 id="the-front-loaded-workflow-experience">The front-loaded workflow experience</h2>
<p>An observation I and others made about some of the new settings in the
X-Pro3 (Chrome Blue, clarity, HDR, white balance shifts included in
presets) was that Fujifilm has moved a few things people often do in
post into the camera. The in-camera clarity and chrome blue settings, in
particular, are things I&rsquo;d typically apply in Lightroom. Now that
they&rsquo;re in-camera, I&rsquo;ve managed to get rid of a few presets I used to
use in post.</p>
<p>That&rsquo;s had a good effect on the images I &ldquo;finish,&rdquo; because Fujifilm&rsquo;s
output is more subtle than I tend to come up with for myself when I&rsquo;m on
the train home and working on an image in mobile Lightroom. The
combination of the chrome blue setting with the Classic Chrome film
simulation, for instance, gives me a more pleasing, even image than a
preset I had been using for years. I still like to experiment in
Lightroom, but it has been interesting to go back to images a few days
after I&rsquo;ve shared them and realize that I&rsquo;m largely toning down changes
I made on a small screen, and bringing the image closer to what the
camera gave me in the first place.</p>
<p>It has been a little interesting to go through that shift, because I&rsquo;ve
felt very protective of people who are fine with presets in general.
Instagram made the practice common, and I still sometimes swipe through
the Instagram presets before I post an image, simply to see if much has
changed. For a long while, I was also using a range of VSCO&rsquo;s presets,
which are usually a bit more subtle than Instagram&rsquo;s.</p>
<p>When I read gatekeepers complaining about that kind of thing, I brushed
it off: People sneer at &ldquo;photoshopping&rdquo; or filters, but I think
sometimes that&rsquo;s because those things result in a garish, distracting
image that&rsquo;s easily spotted as having been worked a little too hard, or
made a little too maudlin. But photographers and photo editors have
always intervened somewhere between the film and the print. No darkroom
is complete without filters and paddles to shape the tones and exposure
of the image as the paper sits under the light. Going closer to the
moment of capture, there are many, many film stocks that all have
effects subtle and profound on the final image, and there are ways to
work with those individual film stocks that change their behavior. And
at the moment of capture the photographer has weighed in on &ldquo;reality&rdquo;
with aperture and shutter speed, or choosing where to stand in
relationship to the subject, or choosing where the subject lies in the
frame. Shooting with a zoom, or zooming with your feet, a human captured
in an image can become the emotional center of a story playing out in
1/125 of a second, or they can become a prop offered for scale in a
picture of a tourist landmark.</p>
<p>And today, with smartphones making pretty good cameras accessible to
more people, some people want to capture images that reflect a consensus
view of what is pretty, profound, or beautiful. Other people are simply
documenting their lives and trying to communicate something about the
meaning of the images they&rsquo;re capturing. When I see a heavily applied
preset meant to suggest a faded Polaroid snapshot, I am more inclined
these days to think, &ldquo;this preset means &rsquo;timeless&rsquo; and &rsquo;nostalgic,&rsquo; and
that&rsquo;s what they want me to know about this moment,&rdquo; than I am to think
&ldquo;this filter crushed the shadows.&rdquo;</p>
<p>I&rsquo;m saying all that because while I feel protective of people who use a
lot of filters, or sort of clunky HDR tools, or more obvious preset
modes, and believe we should simply respect them as artists in their own
right, who are making their own choices about their creative output. At
the same time, as a matter of efficiency and my own changing taste, I
appreciate that the X-Pro3 has been nudging me toward spending less time
swiping through filters or playing around with presets. I&rsquo;ve discovered
a few in Lightroom that pair nicely with certain Fujifilm simulations,
and I have one preset that simply does the first three things I do to
any image. I have a lot of presets and simulations I&rsquo;ve picked up over
the years that I may now remove from Lightroom so that I have less
visual clutter when I want to get to my one &ldquo;punch this up&rdquo; preset,
which I sometimes reconsider and undo after the initial share for
small-screen media is past.</p>
<p>Another interesting part of having all that stuff in the camera is the
way it creates a sort of augmented reality experience when shooting with
the EVF. I put on a pair of AirPods, set them to Transparency mode so I
can hear environmental sounds, put on some downtempo, and for the
duration of the session I&rsquo;m half in consensus reality, with its
particular tones and shades, and half in the reality of the images I&rsquo;m
making, and their particular slant on what I saw. Those things have
turned my sessions into a pretty special time of day that&rsquo;s just mine:
No demands for my attention or emotional energy, and just a few minutes
a day where I can operate under a set of rules that demand not much more
than simple human decency.</p>
<p>As I type that out, and think about why I started typing—to share my
experiences and impressions about a camera—I realize I could be saying
this about any camera provided it has done its job and largely faded
from my consciousness except as a constrained set of controls to
manipulate. The XPro-3 has done that, and it has also made it easier to
think less about the images at all—or to make fewer choices about them
after capture, anyhow. So while I could be writing all this about any
number of cameras I have never used, or cameras I have used and loved in
the past, I am definitely writing this about the XPro-3.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Very early thoughts on the Fujifilm X-Pro3</title>
      <link>https://mike.puddingtime.org/posts/2020-01-09-very-early-thoughts/</link>
      <pubDate>Thu, 09 Jan 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-01-09-very-early-thoughts/</guid>
      <description>&lt;p&gt;When I was in the market for a better-than-high-end-of-the-low-end
camera a few years ago, I glanced briefly at the Fujifilm X-Pro2. I’d
been shooting with the X100S for a few years and had come to really
enjoy the rangefinder feel and I appreciated the hybrid
optical/electronic viewfinder. I ended up with an X-T2 instead, and the
decider was pretty much the tilting LCD: The X-Pro2 didn’t have one, and
I appreciate being able to get down kind of low to photograph a subject,
or shoot from the hip on the street.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>When I was in the market for a better-than-high-end-of-the-low-end
camera a few years ago, I glanced briefly at the Fujifilm X-Pro2. I’d
been shooting with the X100S for a few years and had come to really
enjoy the rangefinder feel and I appreciated the hybrid
optical/electronic viewfinder. I ended up with an X-T2 instead, and the
decider was pretty much the tilting LCD: The X-Pro2 didn’t have one, and
I appreciate being able to get down kind of low to photograph a subject,
or shoot from the hip on the street.</p>
<p>When the X-T3 came out, I briefly considered it, but most of the reviews
said it didn’t really exceed the X-T2 that much, unless you were in it
for video, so I sat that one out, curious about what the X-Pro3, were
there one, would look like.</p>
<p>When it did arrive, I felt a little put off by the rear screen, which is
hidden except when flipped down. Rather, I was put off by the marketing
and noise <em>around</em> the rear screen, which was all about making sure we
understood that it was meant to be a “slap in the face” of
<a href="https://en.wikipedia.org/wiki/Chimping?wprov=sfti1">chimping</a>. The only thing more likely to irritate me than toxic
photography shibboleths is probably the phrase “distraction-free,” and
that also found its way into a number of reviews.</p>
<p>Fujifilm’s own marketing material is slightly more sedate than reviews
from the more dyspeptic gatekeepers of the photography world, but the
point was driven home all the same.</p>
<p>Fujifilm’s top-tier cameras have always been a little willfully obscure.
No program button: “P” is if you set all the controls to “Auto.” Instead
of “looks” or “presets” they offer “film simulations” named after their
classic film stock.The controls are for people who miss having knobs
(like me &hellip; I learned on film cameras with knobs).</p>
<p><img src="https://photos.smugmug.com/Out-and-around/i-CNNPmfh/0/ba4e3c45/M/2020010921534541-234727895110445118-DSCF0713-M.jpg" alt=""></p>
<p>The X-Pro3, though—with its hidden rear LCD <em>and</em> knobs <em>and</em>
rangefinder form factor—moved out of the territory of “quaint,”
“classic,” or “old-school” and closer to the neighborhood of
“reactionary.”</p>
<p>I know: None of this is about the camera, it’s about the camera’s
marketing. It matters to the story, though, because wow I came close to
not wanting anything to do with it by the time I was done reading the
reviews.</p>
<p>What changed my mind?</p>
<p>I read a few reviews and learned that it included:</p>
<ul>
<li>Curves adjustments</li>
<li>A “blue chrome” setting</li>
<li>A clarity setting</li>
<li>An <a href="https://en.wikipedia.org/wiki/High-dynamic-range_imaging?wprov=sfti1">HDR</a> mode</li>
</ul>
<p>In other words, it had added features that I spend most of my time doing
in post with presets or noodling around in Lightroom. Having had it
since just before the holidays, I’ve found myself spending much less
time in Lightroom, generally working with straight-from-the-camera
JPEGs. The stuff I’ve been getting out of it is perhaps more
naturalistic than what I used to come up with when I was depending on
Lightroom more, but that’s good. I always felt like Lightroom could be a
little overpowering if I got too far into my own head during an edit.</p>
<p><img src="https://photos.smugmug.com/Out-and-around/i-jFsSJ6n/0/9cb0f569/M/2020010921591753-74868642990203-DSCF0446-2-M.jpg" alt=""></p>
<p>What about the screen?</p>
<p>Eh.</p>
<p>The anti-chimp thing didn’t resonate with me because I actually “chimp”
through the EVF when I’m shooting. The X-series has a setting that lets
you preview the image you just shot through the electronic viewfinder.
It’s not up for long—I have it set to half a second—but it’s usually
enough to give me confidence I got what I’m after, that I didn’t
inadvertently change a control that ruined the shot, etc. So the only
time I tend to be in the rear screen is when I’m changing settings. I’m
used to being able to tip the camera down, review/change the settings,
and tip the camera back up to start shooting again. That is definitely
harder, but it has meant I just look through the viewfinder to change
settings (unless I’m on the street, which maximizes the time I appear to
be taking a picture/drawing attention to myself).</p>
<p>So, this just feels like an anticlimactic review:</p>
<ul>
<li>I like the rangefinder form factor and I get that with this camera.</li>
<li>I like the new in-camera settings that allow me to do more without
using Lightroom or messing with presets.</li>
<li>It’s nice having USB-C for charging/data.</li>
<li>The flip-down screen doesn’t really register with me one way or the
other. It works the way I like it to work for shooting at waist level
or getting down low with a subject.</li>
<li>I like the new Classic Negative film preset.</li>
<li>I appreciate the very simple, vintage look of the camera. With a
relatively small “Fujicron” lens like the 23mm/f2 or either of the
35s, it’s unobtrusive. I don’t mind walking around with it downtown.
I’ve had one bystander say “oh, wow, a FILM camera!”</li>
</ul>
<p>Oh &hellip; one thing I do not like at all:</p>
<p>The clarity setting makes the camera spend about two seconds saving each
image. I can’t believe reviewers have missed this, especially since
they’re usually rhapsodizing about how they’re finally free to just
shoot without thinking about their tool. With clarity turned on, every.
shot. takes. two. seconds. to. save. You lose the viewfinder, the camera
is locked up, and you’re just waiting. It’s very poor. I hope they fix
that soon.</p>
<p>Otherwise, you know &hellip;. it’s a good camera. I like it. It’s a little
switch from the X-T2, and it feels a lot like my X100F, except chunkier,
and with interchangeable lenses, and with weather-proofing. I’ve been
taking it out with me every day.</p>
<p>At the same time, I wouldn’t recommend it to many people. Like I said,
it’s sort of reactionary and it likes behaving like a throwback. Most of
the high-end Fujis are like that, but it’s extra like that. I’d fit it
into the matrix thus:</p>
<ul>
<li>Learned on manual cameras/rangefinders, miss the feel of that or just
like having your controls visible at a glance: X-Pro3</li>
<li>Learned on SLRs/DSLRs, prefer more manual control, want to be able to
easily preview images or look at settings, advanced photographer: X-T3</li>
<li>Interested in taking nice pictures, want to be able to pick up and
shoot or hand the camera to a less advanced photographer, prefer a
little more automation: X-T30, X-E3</li>
<li>Learned on manual/rangefinder cameras, like the rangefinder feel,
don’t mind a fixed lens: X100F</li>
</ul>
<p>Personally, I’d probably consider the X-T30 or X-E3, and actually think
those are more appropriate for my skill level, but they’re not weather
resistant and that’s sort of important in Portland in the winter. I am
willing to sit in the rain to get a good picture, and my camera has to
be able to do that with me.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Early riser tips skimmed from a collection of articles </title>
      <link>https://mike.puddingtime.org/posts/2020-01-06-early-riser-tips/</link>
      <pubDate>Mon, 06 Jan 2020 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2020-01-06-early-riser-tips/</guid>
      <description>The tips that actually seem to help if you&amp;rsquo;re trying to adopt an early riser habit.</description>
      <content:encoded><![CDATA[<ol>
<li>Consistent rising time is more important than consistent bedtime,
which sorts itself out.</li>
<li>More protein, fewer carbs for breakfast.</li>
<li>Bright lights right away.</li>
<li>Build in time doing something you want to do right away in the
morning.</li>
<li>Naps kill.</li>
<li>Smart alarm apps like <a href="https://apps.apple.com/us/app/sleep-cycle-smart-alarm-clock/id320606217">Sleep Cycle</a> work better than snooze
buttons.</li>
<li>Consider changing your rising time in 15 minute increments.</li>
</ol>
<p>Anyone else have favorite techniques?</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Mid-Life Longboard Purchase and Use Lifecycle A Selection of Advice</title>
      <link>https://mike.puddingtime.org/posts/2018-10-20-the-midlife-longboard/</link>
      <pubDate>Sat, 20 Oct 2018 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2018-10-20-the-midlife-longboard/</guid>
      <description>One of the nice things about wisdom is that it includes learning about your limits. Just get out there, give it a shot, see how it feels, and quit if/when it stops being fun. If it never becomes fun in the first place, put the board up on Craigslist for $25 off retail.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve bought a few longboards over the past couple of months. Some for
me, some for the rest of the family. In the process of doing that, I&rsquo;ve
read dozens of pages and watched plenty of videos trying to figure out
how to buy longboards well.</p>
<p>I&rsquo;ve also let pass a few oblique references to mid-life crises. If
you&rsquo;re reading this because you have made it out of your teens, have
moved on past the vast and ever-extending frontier of late adolescence,
and are now enjoying the years where it has become slightly bewildering
that people your age look much older than the Bitmojis you and your
partner made together one Saturday morning while the 14-year-old was out
doing whatever but it involved some friend you haven&rsquo;t met, public
transit, and a promise to be home before curfew, welcome. My main advice
to you about whatever side-eye your inner monologue is giving you about
taking up this hobby is to ignore it: One of the nice things about
wisdom is that it includes learning about your limits. Just get out
there, give it a shot, see how it feels, and quit if/when it stops being
fun. If it never becomes fun in the first place, put the board up on
Craigslist for $25 off retail. Someone will grab it then ask
<a href="http://reddit.com/r/longboarding">/r/longboarding</a> if it was a good deal, but by then it&rsquo;ll be too
late.</p>
<p>Finally, this guide is written for people who just want to learn how to
cruise around safely and comfortably, and have not developed a
particular interest in one discipline or another, whether that&rsquo;s
downhill, dancing, or freestyle. A lot of the advice out there tends to
assume you&rsquo;re interested in a particular discipline, and that&rsquo;s going to
take you places you might not need to go right away if all you&rsquo;re trying
to do is figure out if longboarding is even something you want to stick
to.</p>
<p>Unfortunately, like any hobby that involves buying gear, a lot of
longboard review sites are nothing more than poorly-written, dubiously
researched Amazon affiliate plays. At some point I will add a few links
to topics where I&rsquo;ve gone back and found a decent resource I&rsquo;d
recommend. In the mean time, just know that YouTube is a pretty good
resource, and that most longboard reviews are either written by the
retailers themselves or garbage designed to get clicks on the affiliate
links.</p>
<h2 id="a-quick-cultural-note">A Quick Cultural Note</h2>
<p>Though longboards are pretty much &ldquo;long skateboards with big wheels,&rdquo;
neither longboarders nor skateboarders think much of that sort of
reductionism, and they represent two distinct tribes.</p>
<p>It&rsquo;s important to understand this distinction because each group will
have very different advice to offer you as you go out onto the &rsquo;net to
learn more about your new hobby. I strongly recommend you read <a href="https://www.wired.com/2015/02/silicon-valley-thinks-can-learn-skater-culture-terrible-idea/">this
essay by Kathy Sierra</a> (yes, that Kathy Sierra) to get an idea of the
roots of this cultural divide and how it plays out today. It is my
observation that skateboarding is dominated by and marketed for boys and
young men, while longboarding has provided a more welcoming space for
girls, women, and older folks; including older skateboarders who are
looking for a gentler way to remain on four wheels a bit longer than the
halfpipe and swimming pool will allow.</p>
<h1 id="1-buying-your-first-longboard">1. Buying your first longboard</h1>
<p>Here&rsquo;s what I did first: I picked one from Amazon that looked nice and
cost under $75. It was not great, but I didn&rsquo;t know that and it was
perfect for the three-week crash course I embarked on at a nearby
playground.</p>
<p>That wasn&rsquo;t the best way to do it, but I wasn&rsquo;t up to going into an
independent shop and I&rsquo;d had a bad experience buying Ben a skateboard at
a Zumiez.</p>
<p>On the bright side, Amazon reviews let me find my people: Older folks
who had never been on a longboard before, or who had been skaters as
teens but had not done it in a while. The former could speak
convincingly about their experiences as newbies and how they did on the
board; the latter could probably comment on where the board fell short
and offer advice on easy fixes.</p>
<p>Here are some characteristics to look for:</p>
<ul>
<li>Long &ndash; For stability and smoothness. Definitely look for something
longer than 36&quot;. Any shorter, and you&rsquo;ll gain maneuverability but lose
both stability and tolerance for poor foot placement. At the same
time, keep it under 48&quot; or so unless you&rsquo;ve had past experience
navigating barges, commuter ferries, or oil tankers.</li>
<li>Wide &ndash; So your feet fit comfortably. Look for something around 9&quot; or
more.</li>
<li>Low &ndash; So your center of gravity is lower and your balance is better.
Look for &ldquo;dropthrough&rdquo; or &ldquo;dropdown&rdquo; boards: They&rsquo;re built in such a
way that the board itself is lower to the ground. That makes for
better balance and easier pushing.</li>
<li>Stiff &ndash; To remove a little variability while you master being on a
board with wheels. Avoid plastic and look for hardwoods.</li>
</ul>
<p>Slightly longer-term, I&rsquo;d prioritize width and height over flex and
length if I had to settle on my first board being my last for a while,
and if cruising were what I was going to be into. The board I eventually
bought as my &ldquo;real&rdquo; board is much flexier than my first, which has its
pleasures, but I appreciate the fact that it&rsquo;s much lower even more.</p>
<p>Definitely buy a skate tool before you check out. They&rsquo;re a three-way
socket tool with a little screwdriver insert. The sockets allow you to
do a number of things when you get your longboard:</p>
<ul>
<li>Tighten the kingpin/trucks.</li>
<li>Tighten/loosen the wheel nuts.</li>
<li>Tighten the hardware that mounts the trucks to the board.</li>
</ul>
<p>You&rsquo;ll have to do these things, or at least have a tool that allows you
to do them, before you can ride, and paying the $8 for this tool beats
rummaging around in the toolbox. You can also stick it in your back
pocket when you head out for a session so it&rsquo;s easy to do some initial
tuning as you learn. Long term, you&rsquo;ll have to be able to work with your
trucks, wheel nuts and hardware to keep your board in good working
order.</p>
<p>Also, buy some protective gear:</p>
<ul>
<li>Knee guards</li>
<li>Wrist guards</li>
<li>Elbow pads</li>
<li>Helmet, though you can use a bicycling helmet if you have one</li>
</ul>
<p>Over time, you&rsquo;ll probably drop the knee guards first. Of the several
spills I&rsquo;ve had, they haven&rsquo;t been essential. I&rsquo;ve been very grateful
for the rest. I won&rsquo;t go out without wristguards and helmet, and I
recently began to take my elbow pads along again if I&rsquo;m going to be
navigating sidewalks or sketchy terrain because I got tired of opening
my elbow back up even when wearing long sleeves.</p>
<p>Finally, shoes are a consideration: I bought some Vans because they&rsquo;re
easy to find, fit my wide feet pretty well, and offer a large, flat sole
with plenty of grip. You can probably get away with any rubber-soled
sneaker if all you do is cruise. Sometimes I wear retired running shoes,
but I prefer my Vans Sk8-Hi Pros for the ankle support. Just remember
that you&rsquo;re going to be making a lot of hard, repetitive contact with
the pavement when you push, and you&rsquo;re going to be shifting your weight
around a lot on the foot you keep planted on the board: You&rsquo;ll want some
cushion. Vans offer that, cheap Chuck Taylors do not.</p>
<h1 id="2-receiving-your-longboard">2. Receiving Your Longboard</h1>
<p>When your longboard arrives, take it out of the package and give it a
good look. Having ordered a few cheap boards and one less cheap board
online, I&rsquo;ve been surprised at how variable assembly seems to be, so
take the time to do this little pre-ride inspection:</p>
<ul>
<li>
<p>Grab each wheel and give it a spin. Each should spin freely. People
get hung up on whether the wheel can spin for more than a minute.
Don&rsquo;t bother. If it spins freely for 10 seconds or so, it&rsquo;s fine. If
it doesn&rsquo;t, use the skate tool to loosen the nuts a little bit, but
not too much:</p>
</li>
<li>
<p>Give each wheel a wiggle to see how tightly it&rsquo;s on the axle. If
there&rsquo;s much play at all, tighten it down to minimize that as much as
possible while still letting it spin freely. You can improve this with
&ldquo;speed rings&rdquo; (washers that go between the nut and the wheel) and
&ldquo;spacers&rdquo; (metal sleeves that go on the axle inside the wheel) but for
now don&rsquo;t bother.</p>
</li>
<li>
<p>Check the hardware that mounts the trucks to the deck. You&rsquo;ll see four
small nuts and bolts on each truck. Use the smallest socket on the
skate tool along with a screwdriver to make sure all these are tight.
If they&rsquo;re loose, it&rsquo;ll affect your ride and it&rsquo;ll make annoying
buzzing or rattling sounds.</p>
</li>
<li>
<p>Give the trucks/wheels a wiggle. They should move easily and return to
center. If they don&rsquo;t return to center or flop around, look for the
kingpin—a nut and bolt pair that hold the axle to the hardware mounted
under the board—and tighten it. The best advice I can give on this is
to tighten it until the washer underneath the bolt doesn&rsquo;t turn
freely, then consider another half-turn of tightness, at least when
you&rsquo;re starting out.</p>
</li>
</ul>
<p>Something to remember about the advice you&rsquo;ll read about truck
tightness: In your first few weeks, you will probably not be putting
yourself in positions where you need to&ndash;or could safely&ndash;make a sudden
maneuver. People advocating for loose trucks are more experienced and
put themselves in different situations from someone trying to learn how
to push around a parking lot or playground.</p>
<h1 id="3-picking-where-to-ride">3. Picking Where to Ride</h1>
<p>If you can, go find an empty parking lot or playground with blacktop. If
there&rsquo;s a slope, make sure it&rsquo;s gentle. Watch out for:</p>
<ul>
<li>Even small pebbles and twigs</li>
<li>Cracks</li>
<li>Weeds growing out of cracks</li>
</ul>
<p>&hellip; all those things will send you flying, especially if you haven&rsquo;t
mastered how to distribute your weight or are still moving slowly.</p>
<p>Park-n-ride lots are ideal on weekends: Pretty empty and unused.</p>
<p>At first, you should probably avoid:</p>
<ul>
<li>Streets. Motorists can be unforgiving and they&rsquo;ll ride right up on you
then blare their horns. In Portland, you&rsquo;re allowed to be on the
street, but you don&rsquo;t need to be looking over your shoulder or taking
a spill in traffic.</li>
<li>Sidewalks. Lots of cracks, pebbles, and twigs that aren&rsquo;t great under
normal circumstances, and will stop you dead and make you fall off
when you&rsquo;re going slow.</li>
<li>Multi-use paths. Like streets, you&rsquo;re <em>allowed</em> to be on them, but
you&rsquo;ll have fast-moving bicyclists, dogs, other pedestrians, etc. to
deal with. And think of other people: Usually when you spill it means
your board flies off straight behind or in front of you. Even a
bicyclist being careful around you shouldn&rsquo;t have to dodge your board
(or your body).</li>
</ul>
<h1 id="4-early-riding">4. Early riding</h1>
<p>I am not going to write about how to actually start moving around on a
board. There are tons of tutorials that all repeat the basic advice of
&ldquo;figure out which foot you balance on, stand on the board with that
foot, push with the other, bend your knees slightly&rdquo; etc. I&rsquo;d recommend
searching YouTube, and if I ever get around to putting together a
bibliography, I&rsquo;ll pick a few for you.</p>
<p>I will suggest a few things you should do as early exercises, and
consider doing just one thing at a time:</p>
<ul>
<li>Push so that you go in a straight line. That takes some fine-tuning of
your balance, so once you&rsquo;re able to move on the board at all, make
&ldquo;going straight&rdquo; your first goal.</li>
<li>After you push, pay attention to how gently you put your pushing foot
back up on the board. If you plant back on the board hard, it
destabilizes you.</li>
<li>Lean gently to steer inside a narrow path. Rather than taking on
curves and turns right away, learn how to weave and drift. My local
playground had handy running lanes for the 50m dash, so I picked the
two lanes I wanted to stay inside and learned to weave around within
them.</li>
<li>Learn to gently drag your foot to stop. It&rsquo;s another balance and
muscle control challenge to drag your foot enough to slow you down
without planting it and falling off. It&rsquo;s okay to just hop off, but
you won&rsquo;t be able to control your board as well and it&rsquo;s sorta hell on
your joints.</li>
</ul>
<p>Also remember that a little speed is actually your friend: If you go too
slow, the stopping power of a twig or pebble increases quite a bit. If
you&rsquo;re going faster, you tend to roll over them.</p>
<p>Finally, consider tightening your trucks down when you&rsquo;re first learning
to just go in a straight line. The board won&rsquo;t be as responsive to
leaning to steer, but it&rsquo;ll also feel more stable. As you get more
comfortable, loosen the trucks a half turn at a time. One way I learned
to judge how to tighten my trucks was foot pain: the board felt wobbly
underneath, and my feet hurt because I was &ldquo;monkey-toeing&rdquo; the board.
Tightening the trucks helped give me a sense of stability, my feet
relaxed, and things felt better. I eventually loosened back up as I got
more comfortable.</p>
<p>Oh &hellip; one more thing:</p>
<p>Rest!</p>
<p>I went out and rode for an hour or two every single day for a couple of
weeks. I got sore and tired, and stopped progressing. After taking a
forced week off so my knee could stop throbbing, it got easier again.
 Since then, if I do a long session one day, I&rsquo;ll try to take the next
day off. That makes my next session feel pretty good, and I can tell
some muscle memory consolidation has gone on during the break.</p>
<h1 id="5-after-market-improvements">5. After-market improvements</h1>
<p>People eventually come to have opinions about every single component of
their board. I&rsquo;m going to propose a few high-priority things for the
beginning rider that are easy to replace or experiment with that will
make a difference, in priority order:</p>
<p>First off, <strong>bushings</strong>: These are the barrel- or coned-shape bits of
polyurethane that sit in the trucks. They come in a variety of
hardnesses (&ldquo;durometers&rdquo;). If you&rsquo;re a heavier person, you want harder
bushings. Remember that in the youth-dominated world of skateboarding
and longboarding, the definition of &ldquo;heavier&rdquo; shifts to the left a bit.
I&rsquo;d recommend either &ldquo;barrel&rdquo; or &ldquo;standard&rdquo; bushings.</p>
<p>When I took my board into a local shop and asked for advice on how to
improve the ride, the first thing they did was grab some harder standard
bushings and pop them in for me. The ride improved immensely: I was able
to loosen my trucks while keeping a feeling of stability underfoot, so
the ride got more comfortable and I had more maneuverability.</p>
<p>If you don&rsquo;t weight more than 170 or so pounds, you can probably leave
your bushings alone, though anyone over 140 or so will probably benefit
from consulting that intro and picking something of medium hardness.</p>
<p>Next up, <strong>wheels</strong>: These are sorted by hardness (&ldquo;durometer&rdquo;) and size
(in millimeters). From what I&rsquo;ve seen, most retailers will sell complete
boards with a 70mm wheel of soft durometer (78a). That&rsquo;s a good,
general-purpose choice.</p>
<p>If you&rsquo;re just interested in cruising around, I&rsquo;d recommend looking at a
larger wheel. If you&rsquo;re a heavier rider, I&rsquo;d recommend looking at a
harder durometer.</p>
<p>This is a good time to take the plunge and visit a local longboarding
specialist, along with your board, because they can help you make a good
choice and avoid some problems.</p>
<p>Larger wheels make it easier to roll over rocks, twigs, and cracks. They
accelerate more poorly, but they hold a higher speed and roll longer. If
70mm is &ldquo;normal,&rdquo; 80-85mm is on the larger end. If 78a is &ldquo;softer,&rdquo; 86a
is at the hard end for a longboard. 75-80mm/83a is a good cruising wheel
for a larger person.</p>
<p>You should go in and ask at a shop, though, because if your wheels are
too large, you risk the board coming in contact with the wheels in turns
(&ldquo;wheel bite&rdquo;) and that can dump you off your board. Your board
manufacturer may have a recommended setup on their website, but they
tend to be conservative. Your local shop may know, and if they don&rsquo;t
they can take the time to help you figure it out.</p>
<p>Next, <strong>bearings</strong> are worth a look. Amazon decks probably have cheap
bearings that don&rsquo;t spin very well. Bearings are rated with an &ldquo;ABEC&rdquo;
number, the higher the better. Most boards ship with ABEC 5 or 7
bearings, ABEC 9 is the highest rating. &ldquo;ABEC 11,&rdquo; btw, is a brand name
designed to confuse you, so don&rsquo;t humor them.</p>
<p>I&rsquo;ll offer some very specific brand advice here. If it&rsquo;s spring or
summer and you have months of dry riding ahead of you, just buy Bones
Reds: They&rsquo;re great. If you&rsquo;re headed into wet weather, or live
somewhere that&rsquo;s wet a lot of the time, consider Zealous bearings: They
have built in spacers and speedrings, with a thicker lubricant that
resists washout in wet riding. Zealous bearings have a slightly longer
break-in period, but people who ride in all weather swear by them
because they don&rsquo;t require as much cleaning and lubrication.</p>
<p>Finally, you&rsquo;ll read some advice about speed rings and spacers. While
they do allow you to tighten down your wheels (which makes them more
stable) they aren&rsquo;t absolutely necessary. Spacers in particular, if they
aren&rsquo;t built in to your bearings, can sometimes rattle or buzz and they
don&rsquo;t do much for novice riders or cruisers. For just cruising around,
you probably don&rsquo;t need to bother with them, and not having them makes
changing your wheels or bearings easier and faster.</p>
<p>That&rsquo;s a great springboard into the next section, which is &hellip;</p>
<h1 id="6-learning-to-shop-retailers">6. Learning to shop retailers</h1>
<p>I mentioned just going to Amazon for your first board because I assumed
you&rsquo;re as shy as me, and are possibly wanting to avoid a big commitment
if you&rsquo;re not even sure you want to do this. I don&rsquo;t feel 100 percent
comfortable with that advice, so I&rsquo;m going to make up for it by
recommending that you engage with a local, independent retailer early
on, even if you hate dealing with specialist retail. There aren&rsquo;t any
secrets to doing this, really, so think of this as a way to set
expectations and judge whether your local retailer deserves your money:</p>
<p>First, just avoid Zumiez if there&rsquo;s one near you. If you go in to buy a
custom board and mostly know what you want, you&rsquo;ll probably do okay:
I&rsquo;ve watched the folks at the one down the road build boards and they
seem competent, but those folks aren&rsquo;t always around and they will try
to upsell you when they are. I stopped through to buy bearings once, and
they &ldquo;strongly recommended&rdquo; $75 Bones Swiss. I said &ldquo;no thanks, just the
Reds&rdquo; and got a little smirk and a &ldquo;had to try&rdquo; shrug. When we got Ben
his first skateboard, they kept pushing premium stuff in the name of
&ldquo;your board being unique to you.&rdquo;</p>
<p>Worse, you might get a clerk who doesn&rsquo;t even skate. I hung back and
watched Ben get interrogated at length about his riding, only to be
told, &ldquo;I don&rsquo;t skate &hellip; I just like the clothing culture.&rdquo; And another,
when asked if he had any risers in stock, tried to sell me bushings.</p>
<p>I feel sort of bad writing this because there&rsquo;s a middle-aged store
manager at our local one who is friendly, non-aggressive, a little
flirty, and definitely skates, but she&rsquo;s the outlier. Sorry if you&rsquo;re
reading this!</p>
<p>If you do have a local, independent shop, give them a shot. In Portland,
we&rsquo;ve got [Daddies], and they&rsquo;re great: The shop itself is well
stocked with boards, and they&rsquo;re a large online retailer so there&rsquo;s a
ton of stuff in the warehouse even if it&rsquo;s not right there on the retail
floor.</p>
<p>They set the standard for retail: They help you stand on several
different kinds of board to figure out what&rsquo;s comfortable. If they&rsquo;re
building one for you, they talk you through the options based on what
you want to do with the board, starting from a reasonable baseline of
good but inexpensive components. They&rsquo;re happy to assemble it for you,
and will talk you through why they&rsquo;re doing what they&rsquo;re doing. When I
walked in unhappy with the way my board was handling, they knew to swap
out the bushings right away, and installed them for me, too.</p>
<p>If you can&rsquo;t get that kind of treatment, I&rsquo;ll note that none of the
routine stuff about a longboard is hard once you do it a few times:</p>
<ul>
<li>Picking and changing wheels</li>
<li>Changing or cleaning bearings</li>
<li>Tightening the kingpin on your trucks</li>
<li>Changing out your bushings</li>
</ul>
<p>All of that stuff is easy. There&rsquo;s a ton of information online, and if
you don&rsquo;t care to use Amazon on principle, there are several online
retailers who will ship stuff for free.</p>
<p>The best piece of advice I can give you if you choose to do any of the
routine stuff on your own is to just change one thing at a time. For
instance, most retailers don&rsquo;t offer to customize bushings when you
order from them, so you&rsquo;ll have to do that for yourself. Disassemble
just one truck so you can model from the other one and make sure you&rsquo;ve
put it back together correctly.</p>
]]></content:encoded>
    </item>
    <item>
      <title>&#39;shopped</title>
      <link>https://mike.puddingtime.org/posts/2018-01-21-shopped/</link>
      <pubDate>Sun, 21 Jan 2018 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2018-01-21-shopped/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I still hear people skeptically asking &amp;ldquo;did you have to touch it up in
Photoshop?&amp;rdquo; as if the purity of the image has somehow been diluted. As
someone who came up in film, the question never made sense to me. This
is what people did before there was Photoshop.
&lt;a href=&#34;https://t.co/Uz7avrBQmk&#34;&gt;https://t.co/Uz7avrBQmk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;mdash; Mike Hall (@pdxmph) &lt;a href=&#34;https://twitter.com/pdxmph/status/954428064007577600?ref_src=twsrc%5Etfw&#34;&gt;January 19, 2018&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;script async=&#34;&#34; src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;
&lt;p&gt;Maybe that was a little disingenuous, because I do understand the
question. As someone replied to me, there&amp;rsquo;s Photoshop and then there&amp;rsquo;s
Photoshop. There&amp;rsquo;s a picture that starts from a good place and ends up,
with some digital darkroom work, in a much better place; and then there
are pictures that start from all kinds of places and end up in a really
bad place. And some people just don&amp;rsquo;t like photographs to not be &amp;ldquo;real,&amp;rdquo;
for a definition of real I would be able to understand, even if I didn&amp;rsquo;t
agree with it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>I still hear people skeptically asking &ldquo;did you have to touch it up in
Photoshop?&rdquo; as if the purity of the image has somehow been diluted. As
someone who came up in film, the question never made sense to me. This
is what people did before there was Photoshop.
<a href="https://t.co/Uz7avrBQmk">https://t.co/Uz7avrBQmk</a></p>
<p>&mdash; Mike Hall (@pdxmph) <a href="https://twitter.com/pdxmph/status/954428064007577600?ref_src=twsrc%5Etfw">January 19, 2018</a></p>
</blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Maybe that was a little disingenuous, because I do understand the
question. As someone replied to me, there&rsquo;s Photoshop and then there&rsquo;s
Photoshop. There&rsquo;s a picture that starts from a good place and ends up,
with some digital darkroom work, in a much better place; and then there
are pictures that start from all kinds of places and end up in a really
bad place. And some people just don&rsquo;t like photographs to not be &ldquo;real,&rdquo;
for a definition of real I would be able to understand, even if I didn&rsquo;t
agree with it.</p>
<p>A coworker and I recently agreed, for instance, that <a href="https://g.co/kgs/F7roVK">HDR</a>
photography seems to go wrong more often than it goes right. And there
was recently <a href="https://www.metafilter.com/171042/You-dont-take-a-photograph-You-ask-quietly-to-borrow-it">a thread on Metafilter</a> about flickr&rsquo;s most popular
photos of 2017 where one person said, &ldquo;they&rsquo;re all just so processed and
sterile and mostly without any kind of narrative to make you care why
they were taken,&rdquo; and another said, &ldquo;this is some Thomas Kinkade-level
kitsch.&rdquo;</p>
<p>I suppose it depends on what you&rsquo;re trying to do with your photography.</p>
<p>I&rsquo;ve read some compelling cases for why photographers should try to get
their initial exposure as close to what they&rsquo;ve pre-visualized as they
can. I agree with them, to the extent it will make your darkroom work
easier. It&rsquo;s the same reason I usually shoot with my camera&rsquo;s RAW+JPEG
mode: I get one JPEG using presets (maybe a monochrome film simulation,
bumped up sharpness, stronger shadow tones; or a bleached out chrome
look with muted shadows and harder highlights) and I get a RAW file. If
the JPEG doesn&rsquo;t work, perhaps because I didn&rsquo;t check the highlights
closely enough or let the shadows get swallowed up, I&rsquo;ve got a RAW file
to work with (and a reference JPEG to help me find my way back to what I
was thinking in the moment, since RAWs start from a pretty flattened out
place).</p>
<p>But I also like to get a RAW because months later I come back to
something I shot in a much different place and see things in it that I
didn&rsquo;t when I shot it. So I&rsquo;m grateful to have as much information as
possible to take the image in a different direction.</p>
<p>I used to feel a little uncertain about that. I had no issue sharpening,
dodging, burning, adjusting contrast or exposure. I did tend to stop at
the edge of something of what I guess you&rsquo;d call &ldquo;mood.&rdquo; I suppose I
felt like a picture is a moment, and that a moment had a mood, so it
felt dishonest. I was never averse to tuning pictures, or curating a
collection to include the ones saying what I wanted to say, but I always
tried to keep them anchored in the moment. Especially pictures of
people. I&rsquo;m not sure when that changed, but I&rsquo;m positive Instagram,
VSCO, Camera+ and other camera apps that provided a lot of filters
probably helped with that.</p>
<p>I was a little resistant to the &ldquo;get that vintage look!&rdquo; thing when it
started. Like, granting a picture taken yesterday the characteristics of
an artifact created 25 years ago felt unearned. But the more I scrolled
through my Instagram feed or poked around Flickr—and the more I just
opened myself up to how those pictures made me feel instead of wondering
what I thought about them—the more I began to appreciate them. Were some
of the filters kind of crummy and over the top? Yeah. Definitely. I way
prefer later apps that came along. VSCO, for instance, has done a nicer
and more refined job than Instagram. But despite the occasional
garishness, it occurred to me that these tools were allowing people to
play with mood and tone, opening up a kind of expression that hadn&rsquo;t
previously been available to people who weren&rsquo;t seriously invested in
the craft of photography.</p>
<p>So I came down on a side, I guess. I&rsquo;m more willing to play around with
mood and tone. I&rsquo;m more okay with revisiting a picture and seeing if
there are other stories it could tell or feelings it could evoke and
then seeing if I can get them to come out. I especially love playing
around with things I take with my <a href="https://lensbaby.com">Lensbabys</a> because they&rsquo;re already
not at all what I saw before I put camera to eye. Some days I like to
just put on the headphones and hunker down in front of Lightroom,
looking for images that could suit the music I&rsquo;m listening to, then
working to blend their tone with the music. For instance, I spent a
lovely evening working on coast and skyline photos to this album:</p>
<div style="text-align:center;">
<iframe src="https://open.spotify.com/embed/album/1EOj1hKGKHhsmXRQAZAbZT" width="300" height="380" frameborder="0" allowtransparency="true"></iframe>
</div>
<p>And that, in the end, is what I was trying to get at with that tweet.
Photographs have never really been &ldquo;pure&rdquo; in the sense that they&rsquo;ve been
subject to post-exposure manipulation for about as long as they&rsquo;ve been
around. And I&rsquo;ve never been too fussed about doing that with a computer
instead of an enlarger, a dodging paddle, and a handful of color
filters. I believe that a photographer trying to imbue an image with a
particular mood or emotive truth is no different from a poet or painter
trying to do the same thing in their own medium. I&rsquo;m okay with that
happening at the moment of capture, or beyond.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Tools for Playing with Fujifilm Film Presets</title>
      <link>https://mike.puddingtime.org/posts/2018-01-15-tools-for-playing-with-fujifilm-presets/</link>
      <pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2018-01-15-tools-for-playing-with-fujifilm-presets/</guid>
      <description>&lt;p&gt;A while back I found a really interesting blog post by Peter Evans on
&lt;a href=&#34;http://petetakespictures.com/blog/filmandvision&#34;&gt;using Fujifilm film simulations to emulate the look of famous
photographers&lt;/a&gt;. It was interesting as a study in using digital
technology to reconstruct some of the elements of each photographer&amp;rsquo;s
style, but also because it helped my understanding of the highlight and
shadow tone settings gel.&lt;/p&gt;
&lt;p&gt;The film simulations are one of my favorite parts of shooting with my
Fujifilm cameras, and I love the way the highlight and shadow tone
settings can dramatically affect the mood of a photo without needing to
do much in Lightroom.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A while back I found a really interesting blog post by Peter Evans on
<a href="http://petetakespictures.com/blog/filmandvision">using Fujifilm film simulations to emulate the look of famous
photographers</a>. It was interesting as a study in using digital
technology to reconstruct some of the elements of each photographer&rsquo;s
style, but also because it helped my understanding of the highlight and
shadow tone settings gel.</p>
<p>The film simulations are one of my favorite parts of shooting with my
Fujifilm cameras, and I love the way the highlight and shadow tone
settings can dramatically affect the mood of a photo without needing to
do much in Lightroom.</p>
<p>The one frustration I&rsquo;ve had has been that it&rsquo;s hard to reconstruct the
JPEG output of the X-T2 or X100F when working in Lightroom: You can set
the film simulation for a RAW image, but the shadow and highlight tone
settings don&rsquo;t really have direct analogs. You also have to manually set
the film simulation. It doesn&rsquo;t show up in the import. Instead, you get
the usual flat, sorta lifeless RAW output to begin with. I&rsquo;ve found two
things to help with that:</p>
<ul>
<li>Exploring Exposure has <a href="https://exploringexposure.com/fujifilm/">a free Fujifilm presets download</a> that
includes shadow and highlight tone bumps. If nothing else, it's a
point from which you can start exploring.</p></li>
<li>Lightroom Solutions has <a href="http://lightroomsolutions.com/jb-xlr/">X-LR</a>, which applies the film simulation
you were using when you shot an image to the image in Lightroom
automatically. It's a good way to bulk change your images at the top
of your workflow.</p></li>
</ul>
<h2 id="learning-how-the-settings-work">Learning How the Settings Work</h2>
<p>You can always experiment with the different simulations and settings,
but that means fiddling around in the field and relying on a tiny
display to preview the effect your settings have.</p>
<p>Fujifilm&rsquo;s <a href="http://www.fujifilm.com/support/digital_cameras/software/x_raw_studio/mac/">RAW Studio</a> software makes it possible to experiment on
a
big screen by processing images on a hard drive using a tethered X-T2 or
X100F: You can load a RAW from the hard drive, tweak the settings you
have access to in the camera, then save a JPEG using the camera&rsquo;s
processor. It&rsquo;s not that different from using the camera&rsquo;s own built-in
JPEG conversion functions (press the &ldquo;Q&rdquo; button while viewing an image),
but you have the benefit of being able to do it on a large screen to get
a better sense of how film simulation, sharpness, noise reduction, and
highlight/shadow tone work with each other.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Journals Against Stories</title>
      <link>https://mike.puddingtime.org/posts/2017-06-26-journals-against-stories/</link>
      <pubDate>Mon, 26 Jun 2017 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2017-06-26-journals-against-stories/</guid>
      <description>&lt;p&gt;This is about a supplemental habit I&amp;rsquo;ve picked up to go along with my
recent &lt;a href=&#34;http://mph.puddingbowl.org/2017/06/that-didnt-happen/&#34;&gt;anti-story practice&lt;/a&gt;, and it&amp;rsquo;s also a mini-review of the
DayOne app.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve known for a while that it&amp;rsquo;s good for me to have some sort of
journaling to help deal with &lt;a href=&#34;http://mph.puddingbowl.org/2009/01/predominantly-inattentive/&#34;&gt;ADHD&lt;/a&gt;. I slip in and out of it, and use
a variety of means to journal, including this blog, plain text files,
and physical notebooks .&lt;/p&gt;
&lt;p&gt;For a while, my practice involved &lt;a href=&#34;http://ask.metafilter.com/126694/Measuring-improvement-in-ADHD-symptoms#1809977&#34;&gt;a pair of daily entries&lt;/a&gt; meant to
help me figure out the day ahead, then retrospect. It evolved from
something I learned from one of my commanders at Fort Bragg, who started
and ended each day with a sheet of legal paper she kept by her keyboard.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This is about a supplemental habit I&rsquo;ve picked up to go along with my
recent <a href="http://mph.puddingbowl.org/2017/06/that-didnt-happen/">anti-story practice</a>, and it&rsquo;s also a mini-review of the
DayOne app.</p>
<p>I&rsquo;ve known for a while that it&rsquo;s good for me to have some sort of
journaling to help deal with <a href="http://mph.puddingbowl.org/2009/01/predominantly-inattentive/">ADHD</a>. I slip in and out of it, and use
a variety of means to journal, including this blog, plain text files,
and physical notebooks .</p>
<p>For a while, my practice involved <a href="http://ask.metafilter.com/126694/Measuring-improvement-in-ADHD-symptoms#1809977">a pair of daily entries</a> meant to
help me figure out the day ahead, then retrospect. It evolved from
something I learned from one of my commanders at Fort Bragg, who started
and ended each day with a sheet of legal paper she kept by her keyboard.</p>
<p>Over the past month, though, I&rsquo;ve come to use journaling as a way to
capture thoughts and feelings quickly and as on the spot as I can
manage. I&rsquo;ve adopted an informal template, making sure to capture most
of the classic five W&rsquo;s. My journaling tool supports hashtags, so I have
a loose taxonomy to connect related entries. Sometimes I&rsquo;ll make an
explicit link between entries, too, if time allows or if an entry is so
fragmentary that I want to make sure to connect it to one with context.</p>
<p>An entry usually involves what I was thinking about, how I felt about
that (the emotional truth), what I think about that (the considered
response), and what I want from all of it, either as an
outcome/resolution, or a next step. I try not to self-censor if I can
help it, avoiding the quiet temptation to record my best self in these
entries.</p>
<p>I guess there are a few kinds of value to be gleaned:</p>
<p>First, I can see the ways in which the inner story-teller is always
trying to impose a narrative, even in a moment of relative remove.</p>
<p>Second, I can see the ways in which thoughts and feelings are always
changing. It&rsquo;s a &ldquo;two steps forward, one step back&rdquo; sort of thing.
Sometimes they refine and improve, sometimes they&rsquo;re not super worthy.
Getting that—understanding and embracing that variability, acknowledging
my own messiness—makes it easier to engage a more objective self. I know
about the messiness and imperfection of other people. Stepping back from
myself long enough to see my own messiness—the messiness I forgive other
people for all the time—makes it easier to cut to the ethical heart of
hard things. I&rsquo;m just another human. What would I tell another human if
they asked me about this problem? What things would I remind them of?
How would I counsel them to act?</p>
<p>It has helped me a few times so far in the past month. It has created a
book-ending joy to go with the joy of those moments where I catch myself
making up a story in my head and manage to stop doing it.</p>
<h2 id="journal-for-the-mission">Journal for the Mission</h2>
<p>I&rsquo;m more kind to others than I am to myself, but my inner- and
outer-directed kindness are never too far away from each other. My
ability to be kind to others seems to have a ceiling set by how kind I
can be to myself. The connection between those two capacities for
kindness can be a liability, or it can be leveraged.</p>
<p>When I&rsquo;m not objective about myself—when I allow uncomfortable or messy
truths about myself to go unconsidered and unforgiven—I&rsquo;m harder on
others. I guess the ego casts about outside itself when it&rsquo;s not
comfortable with what it sees in itself. It distracts and comforts
itself with the failings of others.</p>
<p>When I think about that small gap between my inner- and outer-directed
kindness and try to apply the forgiveness I can muster for others to
myself, then the ceiling on my kindness to others goes up that much more
the next time around.</p>
<p>That&rsquo;s important.</p>
<p>When I was pretty young, my dad took me to our church&rsquo;s annual
conference. I don&rsquo;t embrace that church or its kind of spirituality any
longer, but the mission statement for the conference that year has
stayed with me:</p>
<blockquote>
<p>Do justice. Love tenderly. Walk humbly.</p>
</blockquote>
<p>It&rsquo;s a paraphrase of a verse in Micah, and it has become a sort of
meditational anchor over the years. I think a lot about the ways those
three directives depend on each other:</p>
<p>Justice without kindness or humility is cruel.</p>
<p>Love depends on fairness and humility, or it becomes mere neediness.</p>
<p>We must temper humility with fairness and kindness to ourselves. We must
understand the ways in which unconsidered self-effacement can be deeply
unfair and ultimately cruel to others.</p>
<p>It seems to me that the more I can participate in a cycle of reciprocal
kindness, to others and to myself, the more readily I can accomplish
that mission.</p>
<h2 id="a-few-notes-on-day-one">A Few Notes on Day One</h2>
<p><a href="http://dayoneapp.com">DayOne</a> is a journaling app available for both MacOS and iOS. It
offers a few key features that have made it great for this practice:</p>
<ul>
<li>The ability to make quick entries, with a keyboard shortcut from the
Mac desktop, or with a long press on the iOS icon</li>
<li>Fast, transparent cloud sync between devices/computers</li>
<li>Passcode/Touch ID security, end-to-end encryption</li>
<li>Hashtags</li>
<li>Inter-entry linking</li>
</ul>
<p>It also understands Markdown, and automatically records location and
weather in each entry.</p>
<p>I love being able to make a quick entry anywhere, from whatever device
I&rsquo;m using: Quick, thumbed entries on my phone, or longer and more
considered entries with a real keyboard on my iPad or desktop machine.</p>
<p>I like knowing the security is pretty strong. If I switch away from the
app on iOS, I can set it to require a thumbprint right away. If I sleep
my computer, it&rsquo;ll require a password before opening. That&rsquo;s all less
about security and more about having a strong sense of privacy: I record
a lot of stuff in there. If you picked a random entry to read, who knows
what you&rsquo;d get.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Some Notes on My Fujifilm Lens Collection</title>
      <link>https://mike.puddingtime.org/posts/2017-06-10-015208/</link>
      <pubDate>Sat, 10 Jun 2017 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2017-06-10-015208/</guid>
      <description>&lt;p&gt;I promised an email to a friend about my Fujifilm X-mount lenses, but
figured I might as well blog about them and include a few samples.&lt;/p&gt;
&lt;p&gt;Prior to buying an X-T2, I usually had a general-purpose zoom of some
kind (18-200mm) plus a prime or two (35 or 50mm) .&lt;/p&gt;
&lt;p&gt;My couple of years with a Fujifilm X100S got me back in a prime lens
mood, and most days when I&amp;rsquo;m picking something to walk around with, I&amp;rsquo;ll
go with a prime. I have a single zoom, and when I&amp;rsquo;m carrying a bag with
a few lenses in it, it&amp;rsquo;s usually one of them.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I promised an email to a friend about my Fujifilm X-mount lenses, but
figured I might as well blog about them and include a few samples.</p>
<p>Prior to buying an X-T2, I usually had a general-purpose zoom of some
kind (18-200mm) plus a prime or two (35 or 50mm) .</p>
<p>My couple of years with a Fujifilm X100S got me back in a prime lens
mood, and most days when I&rsquo;m picking something to walk around with, I&rsquo;ll
go with a prime. I have a single zoom, and when I&rsquo;m carrying a bag with
a few lenses in it, it&rsquo;s usually one of them.</p>
<p>When I bought my X-T2, I started collecting lenses in earnest. I think I
might sell a few of these now that I understand them all better, so
there&rsquo;s some overlap in the collection.</p>
<p>I&rsquo;m not going to talk a lot about the technical characteristics of these
lenses. To my eyes, they&rsquo;re all pretty sharp and nice. Whether they&rsquo;re
weather resistant matters to me because I live in Portland, and then
it&rsquo;s down to how well my brain works with a given focal length. As a
somewhat shy shooter, I don&rsquo;t start feeling comfortable with walking
around lenses until 35mm or so.</p>
<p>If I had to name a favorite out of the bunch &hellip; a desert island lens, I
guess &hellip; I&rsquo;d probably go with the 35mm/f2. It&rsquo;s sharp, weather
resistant, small, and versatile. I&rsquo;ve used it for street, portraits, and
landscapes. It&rsquo;s not as hard to fill as the wider lenses, and the only
thing I&rsquo;ve got that&rsquo;s tighter is the 56mm portrait lens, which isn&rsquo;t
versatile and isn&rsquo;t weather resistant.</p>
<p>I guess I&rsquo;ll do this wide to close.</p>
<h2 id="rokinon-12mmf2">Rokinon 12mm/f2</h2>
<p>I love this lens. It produces really sharp images and it&rsquo;s fairly small
and light. It&rsquo;s a manual focus lens. On the X-T2 I use focus peaking,
which outlines the in-focus parts of the image in red.</p>
<p>My one hangup about this lens is that it&rsquo;s not weather resistant, so it
doesn&rsquo;t come outdoors much during the winter or in rainy weather.</p>
<p><a href="https://www.flickr.com/photos/michaelhall/32645922290/in/album-72157677655534822/" title="Camp 18"><img src="/images/2020/1b94571495.jpg" alt="Camp 18"></a><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<h2 id="fujifilm-16mmf14-wr">Fujifilm 16mm/f1.4 WR</h2>
<p>Kind of love-hate with this lens. It&rsquo;s very fast and sharp, but it sits
in a weird spot for me. Since it&rsquo;s weather resistant I&rsquo;ve carried it
around more readily in the winter than the Rokinon, but it&rsquo;s awfully
close to my 18-135 zoom, or 23mm/f2, which are also weather resistant.</p>
<p><img src="/images/2020/57c5d0ecf6.jpg" alt="Sunset at the Steel Bridge"><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p>A quick search tells me I&rsquo;ve put about 900 shots through it, and I can
see where I&rsquo;m still trying to figure it out. It&rsquo;s so close to the
Rokinon on one side, and so close to the 18-135mm zoom on the other that
I&rsquo;m not sure what to do with it. I&rsquo;ve got a few landscape ideas I&rsquo;d like
to try out, but I get the feeling I&rsquo;m going to sell it.</p>
<p><a href="https://www.flickr.com/photos/michaelhall/33765068552/in/album-72157677655534822/" title="DSCF9751.jpg"><img src="/images/2020/ca2452d314.jpg" alt="DSCF9751.jpg"></a><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<h2 id="fujifilm-23mmf2-wr">Fujifilm 23mm/f2 WR</h2>
<p>As a 35mm full-frame equivalent, I suppose this is the classic street
photography focal length. I like that it&rsquo;s small, light, unobtrusive,
and weather resistant. I struggle a little with filling the frame with
it because I&rsquo;m not fond of getting up on subjects. On the other hand,
the 24MP sensor on the X-T2 means I&rsquo;ve got plenty of room to crop.</p>
<p><a href="https://www.flickr.com/photos/michaelhall/33880755356/in/album-72157677655534822/" title="DSCF9893.jpg"><img src="/images/2020/bea10f9f60.jpg" alt="DSCF9893.jpg"></a><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p>This is the same focal length as the lense on the X100 series.
Curiously, I&rsquo;m pretty happy with 23mm on those cameras because it&rsquo;s
versatile: Landscapes, environmental portraits, general purpose street
stuff, etc. But when I&rsquo;m shooting with an X100 I&rsquo;m in a different frame
of mind, too: It&rsquo;s a small camera for snapshots. I&rsquo;m in a pretty
informal frame of mind when I&rsquo;m shooting with it. When I have the X-T2
along, I&rsquo;m thinking differently and I&rsquo;m probably carrying a bag with a
few other lenses along.</p>
<h2 id="fujifilm-35mmf2-wr">Fujifilm 35mm/f2 WR</h2>
<p>Next up from the 23mm, another small, weather resistant lens at the
classic 50mm (&ldquo;nifty fifty&rdquo;) full-frame equivalent focal length. I think
this is my favorite walking around lens. It does a little bit of
everything, and I love just carrying it around.</p>
<p><img src="/images/hawthorne-bridge.jpg" alt="Portland Women's March at the Hawthorne Bridge"><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p><img src="/images/2020/888221e6ed.jpg" alt="Untitled"><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p><img src="/images/2020/ed44a7b1f4.jpg" alt="Untitled"><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p><img src="/images/2020/cfc4cc8dc6.jpg" alt="DSCF0726.jpg"><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<h2 id="fujifilm-56mmf12">Fujifilm 56mm/f1.2</h2>
<p>Hm. I bought this for portraits, and I&rsquo;ve used it for portraits. I
haven&rsquo;t taken many portraits. It&rsquo;s fast and sharp. I&rsquo;ve read people who
use it for street photography, but it&rsquo;s a pretty big lens and I&rsquo;m averse
to taking things onto the street that will read as &ldquo;fancy and big, it
must be serious&rdquo; vs. &ldquo;little camera that isn&rsquo;t serious.&rdquo;</p>
<p><img src="/images/2020/55720c8467.jpg" alt="DSCF0243.jpg"><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p><img src="/images/2020/b60f109231.jpg" alt="Ben"><script
async="" src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p>Anyhow, I&rsquo;m glad I&rsquo;ve got it even if it doesn&rsquo;t see a ton of use. It&rsquo;s a
niche lens for a niche purpose. Once I get around to shooting more
people, it&rsquo;ll see more use.</p>
<h2 id="fujifilm-18-135mmf35-56-wr-ois">Fujifilm 18-135mm/f3.5-56 WR OIS</h2>
<p>My sole zoom. I usually have it along when I&rsquo;m carrying more than one
lens, and I like to have it for travel in situations where I don&rsquo;t care
to swap lenses around. Since it&rsquo;s weather resistant, I don&rsquo;t mind taking
it all sorts of places.</p>
<p><a href="https://www.flickr.com/photos/michaelhall/34284684014/in/album-72157684624765276/" title="Untitled"><img src="/images/2020/9da9835126.jpg" alt="Untitled"></a><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p>Since it&rsquo;s image stabilized, it&rsquo;s good for indoor shooting despite being
relatively slow.</p>
<p><img src="/images/2020/136b9fc5cc.jpg" alt="DSCF7879.jpg"><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p><a href="https://www.flickr.com/photos/michaelhall/33281495230/in/album-72157681767950456/" title="DSCF9498-4.jpg"><img src="/images/2020/26cb1aeaa1.jpg" alt="DSCF9498-4.jpg"></a><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p>The image stabilization is pretty nice. This was shot at pretty high ISO
(6400) and very low shutter speed (1/20):</p>
<p><a href="https://www.flickr.com/photos/michaelhall/30725688225/in/datetaken-public/" title="DSCF0917.jpg"><img src="/images/2020/e82d8d4cfb.jpg" alt="DSCF0917.jpg"></a><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
<p>Not tack sharp, but pretty usable. When I think back to ISO 1600 on my
old Pentax K100d, which had in-body stabilization, I&rsquo;m pretty happy with
the results.</p>
<p>I thought 135mm would feel like a compromise, because I had a 200mm zoom
for my Nikon D5000. So far, though, I&rsquo;ve been pretty happy. I haven&rsquo;t
felt limited or frustrated, and when I review what I shot with the 200mm
zoom on my Nikon, fewer than a fifth of my shots ever exceeded 135mm.
The majority were shot somewhere between 50mm and 135mm.</p>
<p>I had a 50-200mm zoom for my Pentax K100D, and a lot more of my shots
were taken at 200mm, but that includes a wedding where I used the long
focal length to keep way out of the reception and shoot from the edges.
That was the first time I&rsquo;d ever shot a lot of people, and I was very
uncomfortable with the experience. Since then, I&rsquo;ve loosened up a
little: If I&rsquo;ve been invited to take people pictures, I don&rsquo;t hang back
as much. I also tend to give the subjects a little more room in the
frame for a more environmental portrait sort of effect.</p>
<h2 id="oh-the-lensbabys-sweet-35-sweet-50-edge-50">Oh, the Lensbabys: Sweet 35, Sweet 50, Edge 50</h2>
<p>I bought a Lensbaby Optical Composer plus some lens elements for it.
It&rsquo;s pretty fun to shoot with now and then. They&rsquo;re all manual, and
Lensbaby is a weird shooting experience in general, and it&rsquo;s not weather
resistant, so I don&rsquo;t play with it much anymore. At the same time, it&rsquo;s
a fun creative toy so I&rsquo;m keeping it around.</p>
<p><a href="https://www.flickr.com/gp/michaelhall/4D8t98" title="Lensbaby"><img src="/images/2020/f7d60809cf.jpg" alt="Lensbaby"></a><script async=""
src="//embedr.flickr.com/assets/client-code.js"
charset="utf-8"></script></p>
]]></content:encoded>
    </item>
    <item>
      <title>Please be considerate of my neighbors</title>
      <link>https://mike.puddingtime.org/posts/2016-04-17-please-be-considerate-of-my-neighbors/</link>
      <pubDate>Sun, 17 Apr 2016 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2016-04-17-please-be-considerate-of-my-neighbors/</guid>
      <description>Thoughts on the way people treat my neighbors down on the Springwater.</description>
      <content:encoded><![CDATA[<p>So, here&rsquo;s a scenario to try on:</p>
<p>You&rsquo;ve just woken up in your tent down on the Springwater Trail.</p>
<p>You climbed into a sleeping bag the night before. The temperature was
headed down to the low 40s. You&rsquo;re sleeping in a tent among dozens of
others in a similar situation. The small ad hoc community around you has
all sorts, including  people who seem angry all the time, and young men
who are dressed much more nicely than everyone around them. They don&rsquo;t
spend the night: They just make a few deals and then head home for the
evening.  If you&rsquo;re a woman, there&rsquo;s a better than even chance you were
assaulted within 72 hours of beginning your life outdoors. Since it&rsquo;s
April in Portland, it&rsquo;s muddy and wet. You might have gone to sleep to
the sounds of people fighting or yelling at each other. You probably
woke up because it&rsquo;s really goddamn cold, or because your children woke
up with the light, the way little kids do. </p>
<p>So, about the time you&rsquo;re unzipping your tent, grateful that nothing
happened to it or you or maybe your family the night before, a pair of
people on expensive bicycles, all kitted out, ride by. They look around
at all the tents, and one looks to the other and says &ldquo;Jesus Christ,
this is fucking disgusting.  Who the fuck are these people?&rdquo;</p>
<p>Well, friend, they&rsquo;re my neighbors. I ride by them every morning on my
way to work, and again on my way home each evening. I&rsquo;ve got a pretty
simple protocol for making my way through the little community that has
sprung up on the Springwater near 82nd. I&rsquo;ll list some of its key
elements:</p>
<ul>
<li><strong>I slow down.</strong> There are a lot of people down there, including
families with small children. Nowhere I need to be is more important
than any of those people. </li>
<li><b>I don't gawk or comment if I'm with someone. </b>I wouldn't want
to be gawked at if I had to live in a tent along a trail. I wouldn't
want someone to loudly wonder &quot;who the fuck&quot; I was, or comment on my
&quot;fucking shithole&quot; accomodations. </li>
<li><strong>I say &quot;good morning&quot; or &quot;good afternoon&quot; to the people I do make
eye contact with.</strong>  That's my practice with just about everyone I
pass on the trail. </li>
</ul>
<p>I&rsquo;d really like to believe that the &ldquo;Jesus Christs&rdquo; and &ldquo;who the fuck
are these peoples&rdquo; are coming from a sense of deep moral outrage that we
live in a country where families with little children, the working poor
or anyone else for that matter has to live in a tent in the mud along a
trail on the edge of town. Because I read nextdoor.com and the Facebook
groups for my neighborhood, I know that&rsquo;s not always the case. At least
sometimes they&rsquo;re also coming from a place of deep revulsion with the
people in those circumstances themselves, and from a deep desire to
erase them from awareness &hellip; to push them out of view with no regard
for where that might be or what it might mean for them. It comes from a
place of rationalizing the existence of that kind of misery that comes
from ones own precarity (though maybe that&rsquo;s not so true of the people
on the nice bikes out for a pre-work ride). </p>
<p>Wherever it&rsquo;s coming from, I&rsquo;d really appreciate it if you&rsquo;d keep it to
yourself next time. Those people are my neighbors and I want you to be
kind to them. </p>
]]></content:encoded>
    </item>
    <item>
      <title>You can&#39;t say what you are, but you should try anyhow.</title>
      <link>https://mike.puddingtime.org/posts/2015-07-05-you-cant-say-what-you-are/</link>
      <pubDate>Sun, 05 Jul 2015 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2015-07-05-you-cant-say-what-you-are/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I say &#39;I consider myself a feminist,&#39; because I really do. But I
always feel like I&#39;m taking a big risk when I say &#39;I AM a
feminist,&#39; because there is always, always some other feminist out
there who will show you that you&#39;re wrong. Usually they&#39;ll also show
you that you&#39;re awful for it. — Someone somewhere I visit regularly&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another feminist here. That&amp;rsquo;s an understandable sentiment.&lt;/p&gt;
&lt;p&gt;Personally, I hate calling myself anything at all, ever. I spent four
years trying to reconcile what I thought I was, what I wanted to say to
people I was, what I wanted people to think I was underneath, and what I
wanted to be with what I was being every single day by just waking up
where I was waking up and doing what I was doing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>I say 'I consider myself a feminist,' because I really do. But I
always feel like I'm taking a big risk when I say 'I AM a
feminist,' because there is always, always some other feminist out
there who will show you that you're wrong. Usually they'll also show
you that you're awful for it. — Someone somewhere I visit regularly</p>
</blockquote>
<p>Another feminist here. That&rsquo;s an understandable sentiment.</p>
<p>Personally, I hate calling myself anything at all, ever. I spent four
years trying to reconcile what I thought I was, what I wanted to say to
people I was, what I wanted people to think I was underneath, and what I
wanted to be with what I was being every single day by just waking up
where I was waking up and doing what I was doing.</p>
<p>I spent even more years after that trying to work through whether I&rsquo;d
ever known or could ever know what I was: Maybe I&rsquo;d stopped listening to
my better angels. Maybe the better angels had never been real. Gandhi
had suggested that nonviolent behavior could be motivated (and tainted)
by cowardice, so I wondered to myself if what I&rsquo;d thought had been a
nonviolent worldview hadn&rsquo;t actually been a sort of cowardice, and that
by enlisting maybe I&rsquo;d just embraced what I&rsquo;d always been.</p>
<p>Some understandings about myself and the world around me crystallized,
some things just got more complicated:</p>
<p>Could I jump out of an airplane at night? Yes. And for the last year I
was jumping out of airplanes, it&rsquo;s fair to say I was frightened every
time. By the time I got to that point, I&rsquo;d healed up a lot. I wasn&rsquo;t who
I&rsquo;d been when I walked into the recruiter&rsquo;s office: If the controlled
environment of the army had been a splint or a cast, it ended up setting
my bones into shapes they hadn&rsquo;t been before I enlisted. So I gained
some understanding of what it is to be deeply afraid and yet still do
the thing you set out to do. For a period, living that pattern allowed
me to say to myself that I wasn&rsquo;t a coward, that I had a core I could
depend on. So I started looking beyond where I was, and having thoughts
about what could be next, and wanting it. I didn&rsquo;t want to give up and
disappear into the army.</p>
<p>Then I was out, and rather than going back to be near the people who had
cared about me and supported me while I was in, I chose somewhere else.
I couldn&rsquo;t just go back to where I had been, among people who might have
been tempted to say, &ldquo;well, that&rsquo;s all over now and you&rsquo;re back.&rdquo;</p>
<p>I was loved and cared for, but not a lot of people knew me. They just
had the biography, and that question of cowardice was still very real,
and was suddenly unresolved again because I figured out that physical
courage isn&rsquo;t moral courage. So, I wanted the new people in my life to
know something more about me than where I&rsquo;d been, but I was still
struggling with what it was I&rsquo;d want them to know, and if it was
possible for there to be anything more <em>to</em> know. After all, there was
what I thought I was, what I wanted to say to people I was, what I
wanted people to think I was underneath, and what I wanted to be, but
there was what I had been every single day for four years by just waking
up where I was waking up and doing what I was doing:</p>
<p>I&rsquo;d been the guy who got sent to the chaplain because he wouldn&rsquo;t sing
the baby-killing cadences, and then invited to declare himself a
conscientious objector. Didn&rsquo;t do it, though, because I wasn&rsquo;t. I just
didn&rsquo;t like baby-killing cadences.</p>
<p>I&rsquo;d been the guy whose boss told him he should seriously consider taking
a subordinate into the woods to beat him up, and briefly wondered if it
would need to come to that, then learned how to make anger and its
energy palpable; maybe to help avoid taking that step and maybe to make
it easier if I had to.</p>
<p>I&rsquo;d been the guy who told a barracks bully that I&rsquo;d take an eye or an
ear, and needed to believe it.</p>
<p>I&rsquo;d been everything that environment demanded of me, and I chose to stay
in it.</p>
<p>I nearly started typing, &ldquo;but in the end,&rdquo; because that would allow this
to be narrativized and resolved. But there&rsquo;s no end because I&rsquo;m still
sitting here typing. There&rsquo;s an ever-unfolding now that I needed to
learn about.</p>
<p>There were all the moments where I looked back on some of the things I
said and did and hated them. When I&rsquo;d tell stories about things I&rsquo;d seen
or done and I&rsquo;d realize people were repelled by the mere fact that I&rsquo;d
been there to see them. There was the year where I needed to get help
because I&rsquo;d see a picture of a maimed child in an Iraqi marketplace
bombing, or read about a murder-suicide on an army post from some
solider who&rsquo;d come back from the wars changed, and I&rsquo;d think about how
I&rsquo;d wanted to be some part of that, and that&rsquo;d be it for the day,
stopped by anger and grief. I&rsquo;m so glad I worked at home: I don&rsquo;t know
what I would have done with people around when those moments came. Maybe
I would have just swallowed it whole instead of composing some polite
fiction of a status message and going to sit in my room.</p>
<p>Then there was just more life, and a slowly growing recognition that I
couldn&rsquo;t ever un-be those things. When he was little, Ben thought I&rsquo;d
once been a knight. It was heartbreaking to explain that I hadn&rsquo;t been.
But it was strengthening to realize that the more truthful I could make
myself be with him, the better a parent I could be to him.</p>
<p>I figured out that I had to start being the person I wanted to be in
that ever-unfolding now. I had to accept that some people would see the
biography and think things they&rsquo;d be justified to think, and that I had
to set that aside: There&rsquo;s no erasing it, and to erase it would be to
erase me. Instead, I had to learn how to be open to the things that I
can hear and feel are right, and accept that they might be incongruous
with what I&rsquo;ve been.</p>
<p>Because of all that, because I once set aside everything I <em>said</em> I was
and became something else, and because I then spent years trying to make
all of that make sense, I&rsquo;ve got a deep aversion to saying I&rsquo;m anything
at all. To the extent it&rsquo;s any of my business how people talk about
themselves or what they are &ndash; and it almost never is &ndash; I wish there&rsquo;d
be less &ldquo;speaking as a &hellip;&rdquo; and more &ldquo;because I live my life thus.&rdquo;</p>
<p>At the same time, self-identification helps people, right? It helps us
hold each other &ndash; and ourselves &ndash; accountable.</p>
<p>I read bell hooks&rsquo; <em><a href="http://www.amazon.com/Feminism-Everybody-bell-hooks/dp/0745317332">Feminism is for Everybody</a></em> where she writes
&ldquo;the soul of our politics is the commitment to ending domination,&rdquo; and I
thought to myself &ldquo;yes, that&rsquo;s right, I want to live that and teach my
son that.&rdquo; I put down the book and thought &ldquo;I agree with her, and other
people who call themselves feminists,&rdquo; and then I felt okay saying &ldquo;I&rsquo;m
a feminist.&rdquo;</p>
<p>Despite my aversion to saying &ldquo;I&rsquo;m this&rdquo; or &ldquo;I&rsquo;m that,&rdquo; I think &ldquo;I&rsquo;m a
feminist&rdquo; is a thing worth saying.</p>
<p>Because I&rsquo;m a man, steeped in this culture and taught habits of thought
that are anti-feminist, I&rsquo;ll sometimes do things that aren&rsquo;t feminist
things to do. I&rsquo;ve been lucky to have people in my life who have been
gentle and patient with me when I&rsquo;ve done this. Some day I&rsquo;ll meet
someone who won&rsquo;t be as kind, or who will want to prove that I&rsquo;m not a
feminist at all. Depending on who that comes from, that could be
upsetting or embarrassing.</p>
<p>The alternative, my heart tells me, is to be less supportive than I
could be; to be an &ldquo;ally&rdquo; who can still maybe slip back and forth, maybe
never having to own being wrong or hypocritical ever again because I
remember how hard it was to put a sense of self together again after
being something besides what I wanted to be.</p>
<p>All we can do is be what we are in the ever-unfolding now. We can open
ourselves to hearing what&rsquo;s right, and we can try to choose what&rsquo;s
right, or at least choose what&rsquo;s less wrong. We can accept that we&rsquo;ll
sometimes fail at that. We can allow ourselves to be held accountable.
We can try again.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Breakfast at Oliver&#39;s</title>
      <link>https://mike.puddingtime.org/posts/2014-12-01-breakfast-at-olivers/</link>
      <pubDate>Mon, 01 Dec 2014 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2014-12-01-breakfast-at-olivers/</guid>
      <description>Notes on a neighborhood cafe, and the comforts of getting to have &amp;rsquo;the usual.&#39;</description>
      <content:encoded><![CDATA[<p>I appear to have eaten at <a href="http://www.oliverscafepdx.com">Oliver&rsquo;s Cafe</a> about 90 times since March,
2012 (can&rsquo;t account for a few cash transactions). I ran the Quicken
report that told me that through a quick script to count how many of
those visits were on a Sunday (&ldquo;Dad and Ben breakfast day&rdquo;): Harder to
know that because the date of the transaction going through varies from
the date the transaction happened, but it must be about 70.</p>
<p>Ben&rsquo;s got a usual: 2 scrambled eggs, a sausage patty, a cinnamon roll
and a cup of decaf. He settled on that after a streak where he was all
about the bacon pancakes, which are incredible but also torpor inducing.
Lately I&rsquo;m all over the place. The coffee is a constant, but it&rsquo;s hard
to choose between all the scrambles and omelettes, plus the occasional
bacon pancakes or plain old hotcakes.</p>
<p>When we first moved here, the space Oliver&rsquo;s is in was occupied by Le
Sorelle Café. You could get coffee and pastry and panini there. We&rsquo;d
stop in on Sundays after going to the farmers market. Le Sorelle didn&rsquo;t
last. Coffee in Lents, in general, does not last unless it&rsquo;s being
served out of an espresso hut. That&rsquo;s a shame, because until the
neighborhood is ultimately overrun by people like me, it&rsquo;d be nice to
have a slow but steady coffee place to go work at now and then. We had
that in the form of Lents Commons, but it fell apart pretty quickly
because it was never meant to be a coffee place: The owners wanted it to
be a performance space.</p>
<p>Oliver&rsquo;s has been at it for a couple of years now, and I hope they&rsquo;ve
cracked the code for remaining viable in Lents: They&rsquo;re only open until
2 each day. They&rsquo;re not even attempting dinner service.</p>
<p>Anyhow, this isn&rsquo;t <a href="http://www.yelp.com/biz/olivers-cafe-portland">its Yelp page</a>, where it is mostly appropriately
revered by the neighborhood.</p>
<p>Ben and I have been walking down there most Sunday mornings for a while.
It&rsquo;s about 10 minutes from our house, so we&rsquo;ll go all but the worst
days, unless we&rsquo;re feeling lazy and don&rsquo;t want to get out of our
pajamas.</p>
<p>Some days, we don&rsquo;t say much. Other days, Ben wants to talk about World
of Warcraft or something he saw on YouTube. This last Sunday, he was
curious about elections and what it would be like if we had more than
two major parties. &ldquo;Winner takes all&rdquo; was pretty easy to explain.
Proportional representation was helped along by our recent <a href="http://www.worldofmunchkin.com/munchkincthulhu/">Munchkin
Cthulhu</a> binge, because forming a coalition government in parliament
is <em>exactly like</em> agreeing to gang up on a level 16 eldritch horror in
exchange for a cut of the treasure.</p>
<p>When we get there, we&rsquo;ve got a few preferred booths over on the east
side of the restaurant, where it&rsquo;s more isolated. Our waitress this past
week is new &ndash; or new to Sundays &ndash; and she&rsquo;s only seen us four or five
times. She was visibly disoriented when we had to sit over on the west
side in straight-backed chairs like a pair of chumps, though.</p>
<p>So, most of the wait-folks there know us pretty well by now. Ben still
delivers his order each week like it&rsquo;s going to be news to the
waitresses. I&rsquo;ve made more of an effort to mix it up ever since I caught
a waitress starting to write my order down before I spoke it. The next
week I deliberately broke my rut and there was an expression of polite
surprise that I wasn&rsquo;t having the omelette.</p>
<p>After I left the newspaper &ndash; my first job after college &ndash; I ended up
in a burger joint for a while. On the days I had the lunch shift, there
was a group of three mailmen who&rsquo;d come in every day. They ordered the
same thing every time, and one of them brought exact change every time.
The first time I served him his burger I forgot to apply some discount
the owner had made up for mailmen and there was a diplomatic incident. I
never got the comfort of that routine because the three of them were
pretty sour-faced guys. I just saw them sitting there eating their
burgers in silence, maybe tipping a curt nod at the counter person on
the way out, back to their routes.</p>
<p>I&rsquo;ve certainly had routines since. Al &amp; I were regulars at the
Barracks Road Mister Donut in Charlottesville, VA on Sundays: chocolate
angels to go with the Sunday Times for a long while. The fall and winter
she was pregnant with Ben it was me going over to Jae&rsquo;s Low Beer Price
on Belmont for ice cream sandwiches, Diet 7-Up and the big box of Dots
(which were fresh maybe one time out of ten, which always provoked
pleased exclamations).</p>
<p>But I&rsquo;ve got a weird thing about my routines being picked up on, too. It
can feel strange and intimate, and I think about those mailmen and how
little I knew about whatever they did besides eat burgers at the College
Mall Road G.D. Ritzy&rsquo;s in Bloomington, IN and (I hope) deliver mail, and
how flattened out they seemed to me.</p>
<p>Sounds a little neurotic when I see it there in black and white, but
there it is. Most major demons and powerful wizards are similarly
particular about people knowing their true names, let alone their
preferred breakfasts.</p>
<p>But with the exception of adjusting my ordering habits now and then to
appropriately reset expectations with the wait staff at Oliver&rsquo;s, I
don&rsquo;t mind being a regular there so much because the other half of
things I think about in the process of regularing there is my childhood:</p>
<p>Several moves around town before I was five, a big move from Texas to
Pennsylvania before kindergarten, cross-town moves and a few elementary
schools, a move to Chicago, then back to Pennsylvania (way down the road
from where we&rsquo;d been before), then Indiana in the middle of eighth
grade.</p>
<p>I recently did the math, and realized that this time in Oregon &ndash; since
July 6, 2001 &ndash; is the longest I&rsquo;ve lived in any state my entire life by
a couple of years. We&rsquo;ve been in this house just a few weeks over 5.5
years, and that&rsquo;s the longest I&rsquo;ve ever lived in a single house.</p>
<p>I&rsquo;m not going to say moving around a lot was bad for me. I got a lot
from it, especially because it was all so varied: suburban Chicago,
dairy country in Pennsylvania, small-town Indiana, Texas, suburban
Pittsburg. Lots of experiences &ndash; jumping up from dinner to help our
host birth a calf out back in the barn! &ndash; and lots of people of all
kinds.</p>
<p>But it was also kind of lonely. The Pennsylvania farm kids hated the
accent I picked up in Chicago. The small-town Indiana kids didn&rsquo;t really
care about hunting much, and my hunter&rsquo;s ed certification badge wasn&rsquo;t
really a mark of achievement to them. The Chicago kids &ndash; I guess they
all went on to become John Hughes characters, but I don&rsquo;t know because I
only knew them for this little slice of their grade school lives. I had
friends but they didn&rsquo;t last, and I didn&rsquo;t ever learn to expect them to.</p>
<p>So when Ben was getting ready to start kindergarten, we decided to make
up our minds about where we&rsquo;d be living, and we picked our house partly
because we could see the elementary school he&rsquo;d be going to from the
front porch. I was pretty set on the idea that we&rsquo;d be looking from that
porch to that school every morning until middle school. That on Ben&rsquo;s
first day at middle school, he&rsquo;ll be in a new place with friends from
that school. And that when he starts high school, there&rsquo;ll be familiar
faces in the halls that first day &ndash; faces he&rsquo;s known for almost as long
as he can usefully remember anything.</p>
<p>Ben went on this Lady Gaga kick a couple of years ago. He loved her
makeup and costumes, and &ldquo;Born This Way&rdquo; just sort of resonated with
him. He got marked as a weirdo for it, and there was some trouble at
school briefly. A group of mean girls started a playground &ldquo;Ben&rsquo;s a fag&rdquo;
campaign and he got pushed around. We briefly freaked out &ndash; I took six
months of that kind of abuse from a bunch of farm kids in Pennsylvania
in eighth grade &ndash; just five or six punches on the arm or in the gut
every morning before gym for six months straight &ndash; and it sucked. We&rsquo;d
managed to &ldquo;win&rdquo; the elementary school lottery, though, so we could have
picked another school to transfer him to the next year. But the thing we
learned from the teacher when we talked to her about it was that Ben&rsquo;s
friends had all stuck up for him, and even if there was some stuff going
on from a few shitty little kids, after the first shoving incident his
friends had all just surrounded him and kept him safe. I thought about
it some and realized transferring him to another school would just mean
starting over, and maybe not making those friends he&rsquo;d need before a
mean girl clique over there decided he was a weirdo, too.</p>
<p>All of which is to say, that&rsquo;s part of what we bought &ndash; that sense that
the best school is the one his friends are at. I have to randomize my
breakfast orders to keep from &ndash; whatever would happen if I let myself
be known that way &ndash; but Ben gets to walk into a place where sometimes
we hear the waitress behind the counter say &ldquo;the guys are here,&rdquo; and he
can have his usual.</p>
]]></content:encoded>
    </item>
    <item>
      <title>#yesallwomen</title>
      <link>https://mike.puddingtime.org/posts/2014-05-25-yes-all-women/</link>
      <pubDate>Sun, 25 May 2014 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2014-05-25-yes-all-women/</guid>
      <description>&lt;p&gt;This is a story of getting things wrong, and perhaps continuing to get
things wrong, but not knowing exactly what to do besides what I&amp;rsquo;ve come
up with.&lt;/p&gt;
&lt;h3 id=&#34;prologue&#34;&gt;prologue&lt;/h3&gt;
&lt;p&gt;When I lived in Bloomington, IN, some guy spent a week in one of the
student neighborhoods attacking women. The one account I read from a
victim was that he walked up to her with keys sticking out from between
the fingers of his balled fist, slashed her cheek open, and said, &amp;ldquo;not
so pretty now&amp;rdquo; before running off.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This is a story of getting things wrong, and perhaps continuing to get
things wrong, but not knowing exactly what to do besides what I&rsquo;ve come
up with.</p>
<h3 id="prologue">prologue</h3>
<p>When I lived in Bloomington, IN, some guy spent a week in one of the
student neighborhoods attacking women. The one account I read from a
victim was that he walked up to her with keys sticking out from between
the fingers of his balled fist, slashed her cheek open, and said, &ldquo;not
so pretty now&rdquo; before running off.</p>
<h3 id="i">i.</h3>
<blockquote>
<p><a href="https://twitter.com/search?q=%23YesAllWomen&amp;src=hash">#YesAllWomen</a> BC on campuses all over the US women are leaving
their schools because their confirmed rapists are not expelled. —
Soraya Chemaly (@schemaly) <a href="https://twitter.com/schemaly/statuses/470564506993958912">May 25, 2014</a></p>
</blockquote>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>A while back, before Ben was born, I took a few night classes. A few of
us getting out of class together had to walk four or five blocks down a
quiet side street to get back to a common parking area.</p>
<p>So, class would let out and we&rsquo;d make our way down to the street. Throw
in some random travel variables — like getting backpacks repacked or
chatting with classmates on the way out the door or whatever — and you&rsquo;d
end up with four or five of us spread out over two blocks headed the
same way down a side street after dark.</p>
<p>Most nights, there wasn&rsquo;t much to think about: Out the door, down the
street, into the car, home.</p>
<p>One night, I ended up falling in behind a woman from my class. She was
about half a block ahead. I don&rsquo;t think she noticed me at first, but I
stepped onto a loose metal plate and it made a big noise. She glanced
over her shoulder and appeared to notice me for the first time, and I
think the next several blocks were very frightening for her.</p>
<p>Within a block, everybody else had headed down another street. It was
just the two of us. She kept glancing over her shoulder, and I could
tell I was making her anxious. There was no way it made any sense to
pick up the pace to just get past her — I was engaged enough to realize
that — but there was a smaller, stupider part of me that was pretty
fixated on just getting to my car and going home. That part wasn&rsquo;t doing
much problem-solving that didn&rsquo;t involve getting to go the direction I
wanted to go as quickly as possible.</p>
<p>Well, let&rsquo;s not dissociate.</p>
<p><em><strong>I</strong></em> wasn&rsquo;t doing much problem-solving that didn&rsquo;t involve getting to
go the direction I wanted to go as quickly as possible.</p>
<p>In the end, she ended up picking up the pace, she got to her car a block
ahead of me, and it finally occurred to me that if I slowed down just a
bit she&rsquo;d be able to get into her car without feeling quite so much like
she was racing me to get something between us but distance on a dark
sidewalk.</p>
<p>So I slowed down and she got into her car and she drove away and I
quietly congratulated myself for the five percent of our separate but
shared walks where I had really thought about her and what she might be
going through.</p>
<h3 id="ii">ii.</h3>
<blockquote>
<p>Every time I get in a cab I send the cab number, and cab drivers name
to someone, just in case <a href="https://twitter.com/search?q=%23YesAllWomen&amp;src=hash">#YesAllWomen</a> — expert subtweeter
(@meaganewaller) <a href="https://twitter.com/meaganewaller/statuses/470576253578522625">May 25, 2014</a></p>
</blockquote>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>The next week, class let out and I went out the door with another woman
in the class who&rsquo;d been in my workshop group. We&rsquo;d enjoyed each others'
work and we were talking about it. We walked out onto the sidewalk and I
noticed we were headed the same direction. I didn&rsquo;t want the
conversation to end quite yet, so I pointed the way she seemed to be
headed and said to her, &ldquo;are you headed this way, too? I&rsquo;ll walk with
you.&rdquo;</p>
<p>Her face tightened for a moment, but then she agreed. We walked a few
blocks, she got to her car before I got to mine, and I had yet another
belated realization that she&rsquo;d been nervous the whole time. She couldn&rsquo;t
say goodbye fast enough.</p>
<h3 id="iii">iii.</h3>
<blockquote>
<p>Because &quot;Text me and let me know you got home safe&quot; is standard,
necessary and normal. <a href="https://twitter.com/search?q=%23YesAllWomen&amp;src=hash">#YesAllWomen</a> — pleasedonteatjo
(@pleasedonteatjo) <a href="https://twitter.com/pleasedonteatjo/statuses/470482464067305472">May 25, 2014</a></p>
</blockquote>
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>So, when class let out on the third week it was back down onto the
sidewalk and assorted variables came together to put me about half a
block behind the classmate I&rsquo;d walked with the week prior, just the two
of us on the quiet and dark sidewalk. And — just like two weeks prior
— she didn&rsquo;t notice me until I made a sound. Then we spent a block with
her looking over her shoulder at me, noticeably picking up the pace.</p>
<p>So I stopped and put my backpack down on the sidewalk to get my keys out
of it, which helped her put a block between us. Then I crossed the
street so I&rsquo;d be on the opposite side from her, and slowed way down
until she made it to her car.</p>
<h3 id="iv">iv.</h3>
<p>I&rsquo;ve done pretty much the same in similar situations ever since: If I
end up behind a woman on a quiet sidewalk, I just go across the street.
If I see that she&rsquo;s noticed me behind her before I can do that and seems
to be watching me, I&rsquo;ll backtrack to the last intersection to do so.</p>
<p>It&rsquo;s the smallest, saddest thing.</p>
<p><a href="https://twitter.com/hashtag/YesAllWomen?src=hash">#YesAllWomen</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>9, 23, 25, 26, 29, 33, 35, 39 and 46</title>
      <link>https://mike.puddingtime.org/posts/2014-04-05-09-23-25-26-29-33-35-39-46/</link>
      <pubDate>Sat, 05 Apr 2014 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2014-04-05-09-23-25-26-29-33-35-39-46/</guid>
      <description>Thoughts on my 46th birthday.</description>
      <content:encoded><![CDATA[<blockquote>
<p>The days of our years are threescore years and ten; and if by reason
of strength they be fourscore years, yet is their strength labour and
sorrow; for it is soon cut off, and we fly away. — Psalm 90:10</p>
</blockquote>
<blockquote>
<p>There is no safety in the threefold world; it is like a burning house,
replete with a multitude of sufferings, truly to be feared, constantly
beset with the griefs and pains of birth, old age, sickness and death,
which are like fires raging fiercely and without cease. — The Lotus
Sutra</p>
</blockquote>
<h2 id="9">9</h2>
<p>When I was nine years old, I borrowed a <a href="http://memory-beta.wikia.com/wiki/Star_Trek:_The_New_Voyages">collection of Star Trek
stories</a> from my dad. It included <a href="http://members.optusnet.com.au/virgothomas/space/trek/weirdplanet.html">this one</a>, wherein William
Shatner, Leonard Nimoy and DeForest Kelly all end up in the 23rd century
owing to some sort of freak transporter accident.</p>
<p>That was a pretty exciting premise to me. Since I knew that I was living
in the 20th century and that <em>Star Trek</em> was happening in the 23rd
century, I could do the math to figure out how long I had to wait to see
it all for myself.</p>
<p>23rd century - 20th century = 3 centuries, pretty much.</p>
<p>So if it was 1977, then I was looking at having to wait around until
2277. I grabbed dad&rsquo;s Commodore calculator (<a href="http://www.commodore.ca/history/company/mos/commodore_calculator_796m.gif">it looked like this</a>) to
help with the next part:</p>
<p>2277 - 1968 = 309 years.</p>
<p>So, dad being in seminary at the time and our family being church-going
anyhow, I had some idea that some people lasted a pretty long time.
Methuselah had a pretty good run. Hadn&rsquo;t Noah made it to 900? Needed to
check with mom, though.</p>
<p>Yes, she explained, people in the Bible lived a long time, &ldquo;but we get
threescore and ten years now.&rdquo;</p>
<p>I knew how much a score was because Abraham Lincoln was my hero.</p>
<p>So &hellip;</p>
<p>1968 + (20 * 3) + 10 = 2038</p>
<p>and 2277 - 2038 = not even close, really.</p>
<p>Further away from now than last year&rsquo;s bicentennial had been from the
first Independence Day.</p>
<p>I just wasn&rsquo;t going to make it.</p>
<h2 id="21">21</h2>
<p>My favorite grandfather is dying of a brain tumor. Mom goes down to
Texas, hoping to make things right, but all she does is get in the way
of the t.v.</p>
<h2 id="23">23</h2>
<p>I don&rsquo;t think what I experienced was a &ldquo;death trip,&rdquo; exactly. I just
remember that things got pretty morbid some time around dawn. I was in
the tv room at the house in Indianapolis, looking out at the parking lot
behind the back yard. Cody and Kevin and Bill were riding bikes in the
morning fog, gliding in and out of view.</p>
<h2 id="24">24</h2>
<p>Hudson was so stupid and inept. They made him my buddy and told me if he
didn&rsquo;t make it out of basic, it&rsquo;d be my fault.</p>
<p>The last week, we were out in the field under a tree. It was raining and
Hudson had fucked something up and all he could do was cry. All I could
do was put my arm around him and tell him it&rsquo;d be fine.</p>
<h2 id="25">25</h2>
<p>Jump school seemed like a good idea. It never really occurred to me to
feel frightened during the day, but every night I dreamed of falling and
falling with no parachute. My subconscious mixed it up by letting me
ride a mattress into the dirt one night.</p>
<h2 id="26">26</h2>
<p>The team&rsquo;s up on the Richmond site outside of Taejon. It&rsquo;s an old
building behind a gate. We&rsquo;ve put up the mast and we&rsquo;re on the network.
The team chief asks us what we&rsquo;d do if the balloon went up. Oh &hellip; I
know this one:</p>
<p>&ldquo;We take our defensive positions and the one on radio watch burns the
SOI and takes an axe to the COMSEC gear, then we all defend the site.&rdquo;</p>
<p>The team chief says, &ldquo;you do that. I&rsquo;m gonna run my ass down the hill
before it gets shot off. They won&rsquo;t bother with soldiers anyhow. They&rsquo;ll
just dial us in and light us up.&rdquo;</p>
<p>and</p>
<p>I arrive at Ft. Bragg the week a major in my brigade had a bad landing,
broke his leg and the bone severed an artery. He bled out on the drop
zone before anyone could find him and help him. I don&rsquo;t know if he knew
what was happening.</p>
<h2 id="29">29</h2>
<p>That last nine months I was on jump status, I was pretty sure <a href="https://mike.puddingtime.org/posts/2012-09-27-one-jumper-to/">each
jump</a> was going to kill me. If you could be on jump status, though,
you were supposed to be on jump status. That&rsquo;s how it was. The sergeant
major would cut your wings off your chest in front of everybody
otherwise.</p>
<h2 id="33">33</h2>
<p>They aspirated a lump in my throat on a Wednesday, the doctor fucked off
on vacation before the labs came back on Thursday, and nobody would tell
me anything until the next Tuesday.</p>
<p>It was fine.</p>
<h2 id="35">35</h2>
<p>Ben. He stirs some things up.</p>
<h2 id="39">39</h2>
<p>&ldquo;I mean,&rdquo; says my friend, &ldquo;FORTY. Aren&rsquo;t you freaking out?&rdquo;</p>
<p>&ldquo;I just don&rsquo;t, I guess.&rdquo;</p>
<p>It wasn&rsquo;t a question for <em>me</em> though, was it? In retrospect, I regret
the answer.</p>
<h2 id="46">46</h2>
<p>Here we are.</p>
<p>I still don&rsquo;t.</p>
<p>Some days, I feel naive or clueless and I think to myself that I might
be wrong, and that I might be giving the wrong answer on a cosmic test.</p>
<p>Some days I think, &ldquo;you&rsquo;ve taken advantage of a number of opportunities
to consider it.&rdquo;</p>
<p>Mostly I think we&rsquo;re born in a house that&rsquo;s on fire, and there&rsquo;ll be a
moment between flame and ash.</p>
<p>We&rsquo;ll need to have been kind.</p>
]]></content:encoded>
    </item>
    <item>
      <title>One jumper to the left door</title>
      <link>https://mike.puddingtime.org/posts/2012-09-27-one-jumper-to/</link>
      <pubDate>Thu, 27 Sep 2012 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2012-09-27-one-jumper-to/</guid>
      <description>Joining Puppet was a huge change for me. I wrote this the day I accepted their offer.</description>
      <content:encoded><![CDATA[<p>[<img src="http://farm4.staticflickr.com/3106/2820145992_274a27bcfe.jpg" alt="ZG187_079"></p>
<blockquote>
<p>This aircraft is used to train astronauts in zero maneuvers, giving
them about 25 seconds of weightlessness out of 65 seconds of flight in
each parabola. During such training the airplane typically flies
between 40-60 parabolic maneuvers. In about two thirds of these
flights, this motion produces nausea due to airsickness, especially in
novices, giving the plane its nickname. — Wikipedia entry on <a href="http://en.wikipedia.org/wiki/Reduced_gravity_aircraft">reduced
gravity aircraft</a>, a.k.a. &quot;The Vomit Comet&quot;, <a href="http://www.flickr.com/photos/kwc/">photo courtesy kwc
under a Creative Commons License</a></p>
</blockquote>
<p>So there&rsquo;s this moment where you&rsquo;re just hovering, unmoored, between a
state of going up or going down. Just there. You came from the ground,
you&rsquo;re going back to the ground. For that moment, though, maybe it seems
like you could be going nowhere; or perhaps you&rsquo;re in danger of going
practically anywhere.</p>
<p>When you search for &ldquo;vomit comet&rdquo; photos you see a lot of expressions.
Some people are smiling, some look very still and maybe afraid, some
look determined &hellip; just 25 seconds to be in that state and learn the
ropes of being that way before it&rsquo;s back to normal.</p>
<p>I&rsquo;ve never been in an airplane like that. I remember my first drop in
jump school, though; the way it was so loud in the plane from the engine
noise and the jump master&rsquo;s shouting and the rush of the wind. Going out
the door felt like what it might feel to walk in high gravity, not
because of any of the physics involved but because it&rsquo;s taking hours to
walk five or six feet to the jump master who&rsquo;s waiting to grab your
static line, then more hours still to pivot and walk for the door. Maybe
other people thought it was the same as walking out the front door in
the morning, but to me it felt like walking into a wall of ballistic
gel.</p>
<p>The door isn&rsquo;t wider than one in your house, but between turning toward
it and going out of it, it becomes as big as a drive-in movie screen
showing nothing but horizon. Then out the door and the horizon flips and
turns and spins. You&rsquo;re not falling, you&rsquo;re not flying, you&rsquo;re not
hanging. It&rsquo;s just you and blue sky and green fields, and by the time
you feel the snap of the static line telling you that one more thing has
probably not gone too badly wrong, you&rsquo;re in the middle of quiet like
you haven&rsquo;t heard in hours. You feel like you&rsquo;re just hanging around up
there, not going up, doesn&rsquo;t feel like you&rsquo;re going down. By the time
you pull even with the tree line, though, you can tell Earth wants you
back.</p>
<p>You land. Gravity works again. There&rsquo;s noise, too, even if it&rsquo;s just the
Black Hats yelling at you to get off their goddamn drop zone, but
sometimes because somebody lost a piece of gear up there and it lands
right next to you with a whiz and a smack, kicking up sand. You look
around, look up, orient and get used to being back down again. You start
gathering your chute, bundling up silk and risers, stuffing it in a
sack, and you run off the drop zone. You didn&rsquo;t die, and for a few
minutes maybe you&rsquo;re that much more alive, but you&rsquo;re not between
anything anymore. Sky&rsquo;s up there. Ground&rsquo;s down here.</p>
]]></content:encoded>
    </item>
    <item>
      <title>org-mode In Your Pocket Is a GNU-Shaped Devil</title>
      <link>https://mike.puddingtime.org/posts/2010-02-03-orgmode-in-your/</link>
      <pubDate>Wed, 03 Feb 2010 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2010-02-03-orgmode-in-your/</guid>
      <description>&lt;p&gt;If the iPhone has helped me accomplish one thing, it has probably been
to make it easier for me to stay away from Emacs.&lt;/p&gt;
&lt;p&gt;It works like this:&lt;/p&gt;
&lt;p&gt;It is not controversial to assert that Emacs is an environment all its
own. You can find libraries and packages that allow Emacs to acknowledge
and talk to outside environments, so it&amp;rsquo;s not a &lt;em&gt;closed&lt;/em&gt; environment,
but it&amp;rsquo;s different enough that there&amp;rsquo;s some fiddling involved to get it
chatting with the outside world.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>If the iPhone has helped me accomplish one thing, it has probably been
to make it easier for me to stay away from Emacs.</p>
<p>It works like this:</p>
<p>It is not controversial to assert that Emacs is an environment all its
own. You can find libraries and packages that allow Emacs to acknowledge
and talk to outside environments, so it&rsquo;s not a <em>closed</em> environment,
but it&rsquo;s different enough that there&rsquo;s some fiddling involved to get it
chatting with the outside world.</p>
<p>The iPhone could also be considered an environment all its own, but it&rsquo;s
an environment built with an eye on a broader context. iPhones have a
pretty easy time doing things like talking to iCal or Outlook with a few
button clicks, for instance. Now, unlike Emacs, there&rsquo;s a point with the
iPhone where no amount of grunting or straining will matter, and if you
want it to talk to something else nobody else has bothered to make it
talk to, there&rsquo;s an SDK you can download.</p>
<p>All that said, when Emacs and iPhone can both respond to a particular requirement with &ldquo;there&rsquo;s an [app | elisp package] for that,&rdquo; the iPhone variation will usually involve a quick download and three or four fields in a configuration screen, tops.</p>
<p>When I got an iPhone, I was a pretty heavy Emacs <a href="http://orgmode.org/">org mode</a> user. The
smartphone I had prior to the iPhone was a BlackBerry, and the
BlackBerry never really talked to my Mac on any useful level: lost
contacts, extra contacts, a new contact for every phone number I had
listed for what had once been a single contact, crummy calendar syncing,
forget about bookmarks syncing, etc. etc. etc. Because the BlackBerry
sucked for me as a Mac user, and because iCal was anemic when it came to
todos, org mode was able to fend off everything.</p>
<p>I won&rsquo;t go into a lot of detail about org mode except to say that it&rsquo;s
neat. You just open a &ldquo;.org&rdquo; file in Emacs and start typing using a
pretty simple notation. For instance &hellip;</p>
<pre><code>* PracNet

** TODO Look at reviews: can we get user information to the front page? (ASP)

   DEADLINE:

** TODO Look at inside pages: make a toolkit for callouts that can fit into the CSS

   DEADLINE:
</code></pre>
<p>When that text appears in an Emacs buffer in org mode, it&rsquo;s nicely color
coded. A few keystrokes make it easy to cycle between &ldquo;TODO&rdquo; and &ldquo;DONE&rdquo;
or some other status.</p>
<p>As with all things Emacs, it&rsquo;s very customizable.</p>
<p>Then the iPhone came along and promised me that if I would accept a few
small tradeoffs, it would sync up with a lot more of my stuff:
bookmarks, addresses, e-mail, etc. etc. etc. I&rsquo;d have all that stuff in
my pocket, and when I returned home my Mac would automagically commune
with it to learn what had changed in my absence.</p>
<p>org mode fell by the wayside, and the little ecosystem I&rsquo;d created
within Emacs crumbled because it was no longer a place to live &hellip; just
a place to visit when I needed to push text around.</p>
<p>So <a href="http://mobileorg.ncogni.to/">MobileOrg</a> strikes me as fascinating and horrifying at the same
time. All it does is this:</p>
<p>You save your Emacs org mode files on a WebDAV server, load MobileOrg
onto your iPhone, and you&rsquo;ll have org mode on your iPhone and it&rsquo;ll all
sync up, just like Remember the Milk or ToodleDo or any of the other
todo services that have &ldquo;an app for that.&rdquo;</p>
<p>&ldquo;If you are a MobileMe user, you already have access to a WebDAV server:
iDisk,&rdquo; says the MobileOrg site in a manner I cannot help but read as
<em>insinuating.</em></p>
<p>&ldquo;Sucker &hellip; walked away from Emacs and even took the extra step of
slurping the MobileMe kool-aid thinking it&rsquo;d harden your resolve against
ever returning. Well &hellip; fine &hellip; <em>keep</em> your precious iDisk &hellip; it will
become the tool of your re-liberation.&rdquo;</p>
<p>Less than two years ago, when I was venturing forth from org mode and
getting to know the iPhone as a way to keep all my Stuff in sync,
MobileOrg would have had me at hello. Now it just gives me the shaking
fits.</p>
<p>With Emacs, you don&rsquo;t just go &ldquo;la la la &hellip; I&rsquo;m gonna add org mode back
and call it a day!&rdquo; You think to yourself, &ldquo;I love org mode. I wish
there was an easy way to turn an e-mail message into a todo &hellip;&rdquo; and the
next thing you know you&rsquo;re dealing with how to configure <a href="http://gnus.org/">GNUS</a>.</p>
<p>Then you think &ldquo;All my calendar stuff is in Google calendar &hellip; how can
I get it into my org mode agenda?&rdquo; and that means you&rsquo;re off reading
<a href="http://bc.tech.coop/blog/070306.html">this guy&rsquo;s page</a> and just getting angrier and angrier.</p>
<p>Then you go in the kitchen and make a drink, and while you&rsquo;re making it
and calming down you think to yourself, if I&rsquo;m doing all this stuff in
Emacs anyhow, what would it hurt to <a href="http://www.instantmessagingplanet.com/public/article.php/3742411">follow Twitter in Emacs</a>?</p>
<p>Now you&rsquo;re not drinking because you&rsquo;re angry &hellip; you&rsquo;re drinking because
you wonder what happened to you and it makes you sad. But you&rsquo;re drunk,
so it seems like a perfectly good idea to <a href="http://mwolson.org/projects/EmacsMuse.html">build an entire Web site
using nothing but Emacs because then you can get a LaTeX version of it
for if the asteroids hit and their radiation destroys all HTML</a>. And
having decided to do that, part of you thinks about how glad you are you
have org mode, so you can organize the lengthy process of making sure
you never have to leave Emacs again.</p>
<p>It&rsquo;s knowing what&rsquo;s in store for me as I sit here with MobileOrg on my
iPhone and the necessary WebDAV share all set up that makes me read this
and just want to spit nails:</p>
<blockquote>
<p>At its core, Org-mode is a simple outliner for note-taking and list
management. You can learn the basics for using it in five minutes. This
may be all you need, and Org-mode will not impose more complex features
on you.</p>
</blockquote>
<p>That&rsquo;s right &hellip; because org-mode is just a collection of lisp running
in an editor. It <em>cannot</em> impose more complex features on you. The
genius of org-mode is that you will eventually impose more complex
features on yourself.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Predominantly Inattentive</title>
      <link>https://mike.puddingtime.org/posts/2009-01-13-predominantly-inattentive/</link>
      <pubDate>Tue, 13 Jan 2009 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2009-01-13-predominantly-inattentive/</guid>
      <description>&lt;p&gt;&lt;em&gt;I meant to start with as clean a slate as possible when I moved this
site over and left a bunch of entries behind. At the same time, I wasn&amp;rsquo;t
sure how &amp;ldquo;clean&amp;rdquo; clean needed to be. An entry I decided to keep linked
to this one, which I hadn&amp;rsquo;t considered keeping, so I&amp;rsquo;m bringing it over
with light edits.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;ve got ADHD. Before going much further, and so the terms are
established, when I say &amp;ldquo;ADHD&amp;rdquo; I&amp;rsquo;m going by the &lt;a href=&#34;http://www.cdc.gov/ncbddd/adhd/symptom.htm&#34;&gt;DSM-IV&amp;rsquo;s
definition&lt;/a&gt;, which does not distinguish between &amp;ldquo;ADHD,&amp;rdquo; &amp;ldquo;ADD,&amp;rdquo; and
&amp;ldquo;Adult ADD,&amp;rdquo; but rather puts everything under &amp;ldquo;ADHD&amp;rdquo; then breaks that
down into three classes:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><em>I meant to start with as clean a slate as possible when I moved this
site over and left a bunch of entries behind. At the same time, I wasn&rsquo;t
sure how &ldquo;clean&rdquo; clean needed to be. An entry I decided to keep linked
to this one, which I hadn&rsquo;t considered keeping, so I&rsquo;m bringing it over
with light edits.</em></p>
<p>So, I&rsquo;ve got ADHD. Before going much further, and so the terms are
established, when I say &ldquo;ADHD&rdquo; I&rsquo;m going by the <a href="http://www.cdc.gov/ncbddd/adhd/symptom.htm">DSM-IV&rsquo;s
definition</a>, which does not distinguish between &ldquo;ADHD,&rdquo; &ldquo;ADD,&rdquo; and
&ldquo;Adult ADD,&rdquo; but rather puts everything under &ldquo;ADHD&rdquo; then breaks that
down into three classes:</p>
<ol>
<li>Combined Type: symptoms related to both inattention and impulsivity
are present</li>
<li>Predominantly Inattentive Type</li>
<li>Predominantly Hyperactive-Impulsive Type</li>
</ol>
<p>I&rsquo;ve never manifested symptoms of hyperactivity, I&rsquo;ve periodically
manifested impulsivity, and I&rsquo;ve always&ndash;for as long as I can
remember&ndash;consistently displayed most of the nine symptoms of
inattentiveness. I&rsquo;m clarifying terms because people have conflicting
ideas about ADHD, who can have it and what people who have ADHD act
like. It&rsquo;s entirely possible to be externally placid and have ADHD. It&rsquo;s
also entirely possible to demonstrate a capacity for extended periods of
intense concentration and have ADHD. I also think it&rsquo;s worth noting that
I don&rsquo;t look at ADHD as some sort of sickness I need to &ldquo;cure.&rdquo; It does
create its share of issues which have to be addressed, but it also
confers some advantages I wouldn&rsquo;t trade away. My experiences with ADHD
medication helped me realize the ways in which I&rsquo;ve benefitted from
being out on my end of the attentional spectrum.</p>
<p>That&rsquo;s my way of hinting that I don&rsquo;t need to be encouraged or
reassured, thanks.</p>
<h2 id="adaptation">Adaptation</h2>
<p>People with ADHD learn all sorts of ways to cope with their
inattentiveness or impulsivity.</p>
<p>Depending on the type of impulsivity you&rsquo;re talking about, I&rsquo;ve been
pretty successful in cultivating habits to curb that. They aren&rsquo;t always
the most socially adaptive, because they involve a sort of delaying
check loop that can come off as reticence. They can also be sort of
off-putting, because I tend to hold my fire in impersonal
communications&ndash;e-mail, IM, bulletin boards, talkbacks&ndash;until I feel
like I&rsquo;ve checked my initial assumptions adequately. That can result in
a barrage of fact-checked data out of proportion to the rest of the
conversation. <a href="http://www.nerdmeyr.com/blog/">nerdmeyr</a> once referred to me fixing my &ldquo;Sauron-like
gaze&rdquo; on problems I&rsquo;m out to solve, and I think she was picking up on a
combination of that check loop and hyperfocus&ndash;another adaptation people
with ADHD tend to come up with. An imperative to make sure I&rsquo;m about to
say or do the right thing in combination with a need to turn off big
chunks of my external awareness to get through the process of thinking
something through can make for some seemingly monomaniacal excess
sometimes.</p>
<p>Another way to cope is, of course, medication, which I tried for a
while. The meds I was on were spiking my blood pressure, ruining my
sleep and making me feel depressed. I don&rsquo;t want better focus because
it&rsquo;ll make me a better worker &hellip; I want better focus because the
quality of what happens in my head matters to me, and I want it to
continue to matter to me until I&rsquo;m dead. I do not, however, want to drag
a hand-written prescription down to the pharmacist once a month until I
am dead, and I suspect that something that pushes my systolic blood
pressure from its unmedicated 95-100 up to 135-140 will probably make me
dead that much faster. (If you&rsquo;re curious, the medication in question
was <a href="http://en.wikipedia.org/wiki/Adderall">Adderall</a>, which is tightly regulated because it&rsquo;s a
time-release amphetamine.)</p>
<p>The thing is, if I&rsquo;ve cultivated habits of thought and behavior that
have helped me curb the impulsive elements of ADHD, it stands to reason
that I can curb the inattentive elements, too. In the absence of
medication, personal research and professional opinion suggest a few
categories I can improve on to rein in my brain:</p>
<ul>
<li>
<p><strong>Diet</strong>: Studies have shown improvement in people with ADHD who avoid
carbohyrdates and take in more protein.</p></p>
</li>
<li>
<p><strong>Supplements</strong>: Fish oil and iron are supposed to help. There are a
number of other recommended vitamin supplements, depending on the type
of ADHD one has.</p></p>
</li>
<li>
<p><strong>Sleep</strong>: Consistent and adequate</p>
</li>
<li>
<p><strong>Exercise:</strong> Vigorous and often</p>
</li>
</ul>
<p>Life coaches who work with people who have ADHD also recommend
establishing a routine for all sorts of things, ranging from when the
work day starts and stops to where keys, watch and wallet are deposited
at the end of the day. But because I&rsquo;ve spent years approaching most
activity as a matter of spontaneous interest, the focus on diet,
exercise and routine changes the way time works.</p>
<h1 id="time-is-different-in-here">Time Is Different in Here</h1>
<p>ADHD can manifest as serious procrastination&ndash;islands of intense
activity in a sea of unstructured, unmarked time. Procrastination is
o.k. in some contexts and for some people, but it becomes less adaptive
as complexity is introduced. If all you do is get up at the last minute,
rush through the morning, sprint off to work then sit around reading
MetaFilter until 3 p.m. then guiltily sprint through work before calling
it quits and going home to do whatever seems shiniest until you&rsquo;re too
tired to stay awake, procrastination works. Add exercise first thing in
the morning, adequate time to prepare good meals, planning to get the
groceries and supplements, care to go to bed early enough to rest well
before getting up in time to exercise, and procrastination becomes
problematic. Especially if you&rsquo;re inattentive enough to miss details as
you rush through whatever.</p>
<p>To people who do not have ADHD, all of that must seem like the
commonest
of common sense, but to someone used to living in a kind of time flow
that&rsquo;s not reflective or regulated&ndash;where there&rsquo;s a seemingly limitless
pool of unstructured time&ndash;it requires some shifts in thinking and
behavior. Time has to become finite and each activity has to evaluated
in the context of a matrix of activities. These patterns of thinking
have to be learned by everybody, but some people are cognitively
equipped to learn them passively, while some of us have to learn them
actively, and maybe after years of frustration that we don&rsquo;t share some
common understanding other people have.</p>
<p>The process of evaluating how time gets spent looms large in a lot of
ADHD literature. ADHD coaches encourage their charges to make sure they
keep lists, engage in daily planning sessions, be more mindful of the
passage of time and find ways to break out of extended periods of
hyperfocus before a single task consumes all their time. Having dabbled
with self-hypnosis and having been through a course of <a href="http://en.wikipedia.org/wiki/Cognitive_behavioral_therapy">cognitive
behavioral therapy</a>, I perceive two levels of purpose with all that
time tracking and focus marshaling:</p>
<ol>
<li>People with ADHD need the help timers, lists and reminders provide
on a practical level.</li>
<li>There's value in constant, syllogistic repetition of a goal.</li>
</ol>
<p>My experience with ADHD medication showed me that the issue isn&rsquo;t one
of
a &ldquo;medicine&rdquo; somehow &ldquo;curing&rdquo; a condition. What it did do was provide a
way to hold a thought just a bit longer. When my thoughts centered
around ways to self-organize, the medication was beneficial. When they
didn&rsquo;t, the medication generally seemed to intensify the sort of
hyperfocus ADHD people cultivate. So a big part of dealing with ADHD&rsquo;s
harmful symptoms involves cultivation of a second, persistent level of
awareness; a soundtrack that more or less continuously says things like
&ldquo;I&rsquo;m putting this off because I want to move on to something else, but
that&rsquo;s something I do because I have ADHD. I should stop putting it off
or I won&rsquo;t have time to do it well,&rdquo; or &ldquo;I know I promised to do that
chore, but I&rsquo;m rationalizing not doing it for a while longer. I know I
don&rsquo;t often make very realistic estimates of how I use my time, so I
should stop and reassess my estimate in this case,&rdquo; and on and on.</p>
<p>I don&rsquo;t think about this stuff because I&rsquo;m desperate to fit in with all
the <a href="http://www.harley.com/writing/time-sense.html">monochrons</a>, but because there are only so many hours in the
day, and unwise use of them leads to lots of things being done poorly
instead of perhaps fewer things being done well. As I noted earlier,
this isn&rsquo;t just about housework or chores. It&rsquo;s about sustaining all
sorts of endeavors &ndash; creative, interpersonal, cognitive, physical and
spiritual endeavors.</p>
<h2 id="self-coaching">Self-Coaching</h2>
<p>On the workaday level, I&rsquo;ve used a small inventory of things to help me
rein in my attention:</p>
<h3 id="timers">Timers</h3>
<p>I have a digital egg timer, but I&rsquo;ve been using the Mac application
<a href="http://perso.orange.fr/philippe.galmel/index_mac.html">Minuteur</a> for several years. It used to be free, but it now costs
8€, Its advantage over an egg timer is that it can be set to blank the
display when it goes off, providing +5 or +10 snooze buttons. It can
also save a list of common time periods, so it&rsquo;s easy to set up labeled
time lists.</p>
<p>Another timer app I own and use sporadically is Red Sweater&rsquo;s
<a href="http://www.red-sweater.com/flextime/">FlexTime</a>, which makes it easy to create timed routines. Each block
of a routine can start or end by playing a sound, displaying a message
on screen or running a script. I&rsquo;ve set up routines for things like &ldquo;an
hour of work,&rdquo; so I can get prompts to do ten or fifteen minute bursts
before cooling down for a few minutes. My initial temptation was to
program my entire workday routine, but that sort of rigidity makes it
hard to get back on track when the inevitable disruption comes along,
and then the whole thing falls apart.</p>
<p>I use timers for a few things:</p>
<ul>
<li>to break up time during the work day. It's easier to stop
procrastination when work is broken up into chunks then interrupted by
design for small periods of time.</li>
<li>if I absolutely cannot abide the thought of keeping at what I'm
doing, a timer helps me put limits on off-task time.</li>
<li>to remind me of things I'd otherwise forget about: stuff like the
time my tea has been steeping or my coffee has been sitting in the
french press. I also set timers for the tea pot, even though my tea
pot whistles. Sometimes its whistle doesn't get through the
perceptual wall.</li>
</ul>
<p>Right now my most used fixed time alarm is one I&rsquo;ve set for 10:15 each
night. It reminds me to wrap up what I&rsquo;m doing and start winding down. I
use my iPhone for alarms, since it allows me to save alarms for repeat
use.</p>
<h3 id="note-cards--sticky-notes-lists">Note Cards &amp; Sticky Notes, Lists</h3>
<p>Keeping a pad of these handy helps me deal with external interruptions.
Stuff that happens when I&rsquo;m absorbed in a task is easy to forget despite
my best intentions. I&rsquo;ve found myself using the Mac&rsquo;s &ldquo;Stickies&rdquo; app the
most, just because it&rsquo;s right there and it&rsquo;s persistent between
restarts. Paper often disappears in the clutter or stacks up.</p>
<p>I also keep beginning- and end-of-the-day inventories: Keeping a simple
log or journal that&rsquo;s distinct from my calendar or main to-do list helps
me reinforce what I hope to accomplish or need to remember for the day.</p>
<h3 id="observation-and-reflection">Observation and Reflection</h3>
<p>Which brings me partially back to the matter of charting what I&rsquo;m
reading.</p>
<p>Before I started reflecting on what it meant to have ADHD, my feed
reader was pretty busy. At the peak of things, I was tracking close to
200 feeds along with a few mailing lists, whatever books I was reading
at the moment and a pretty healthy movie-watching jones. A lot of
factors combined to slow me down&ndash;having a kid makes for less
ambivalence about holding a job, or willingness to suck at it. I still
wasn&rsquo;t being very selective. I had a giant pool of inputs, and even if I
couldn&rsquo;t absorb quite as much of it I was still approaching it as an
undifferentiated mass of interesting things.</p>
<p>Medicated, I still didn&rsquo;t do much thinking about what I was taking in.
My thinking wasn&rsquo;t really centered on behavioral optimization so much as
it was about doing everything I was supposed to then luxuriating in
unstructured time as I earned it.</p>
<p>A few months ago I made it a point to drastically scale back
commitments
so I could free up the space to contemplate what I was doing and why I
was doing it. The whole <a href="http://mph.puddingbowl.org/2008/10/the-day-of-the-apple/">apple run-in</a> was sort of helpful, because
it further wrecked my routine and caused me to forget about my
medication for a few days, which is how I learned just how high my blood
pressure was running.</p>
<p>I was pretty nervous going into the holidays. All the things that must
be done combined with a lot of socializing makes for a pretty enervating
time of year. I dropped the medication, though, and decided to see what
happened.</p>
<p>Curiously, my mood got a lot better. I was half-fearing some sort of
<em>Flowers for Algernon</em>-like descent into fog, but that isn&rsquo;t the first
thing I noticed. Rather, I noticed it was easier to get to sleep at
night and I felt a lot more loose in social contexts. It was noticing
that the medication had seemingly buttoned me down further than I was
comfortable with that encouraged me to think about adaptive behaviors
I&rsquo;d already cultivated before medication, and how if I had
self-corrected issues of impulsivity, it was probably in my power to
self-correct issues of inattentiveness.</p>
]]></content:encoded>
    </item>
    <item>
      <title></title>
      <link>https://mike.puddingtime.org/drafts/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/drafts/</guid>
      <description>&lt;h2 id=&#34;grace&#34;&gt;Grace&lt;/h2&gt;
&lt;p&gt;Years ago, as a baby manager, I pitched a fit because I had to deal with a situation the previous manager had left behind. I felt very self-assured in my position on the matter, which was that a good manager wouldn&amp;rsquo;t leave a problem unaddressed. In fact, it made no sense to me that people were saying they missed the previous manager. How could they? These problems had been left behind.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="grace">Grace</h2>
<p>Years ago, as a baby manager, I pitched a fit because I had to deal with a situation the previous manager had left behind. I felt very self-assured in my position on the matter, which was that a good manager wouldn&rsquo;t leave a problem unaddressed. In fact, it made no sense to me that people were saying they missed the previous manager. How could they? These problems had been left behind.</p>
<p>Then I became someone my boss was willing to toss into situations where things weren&rsquo;t great and just needed some attention. And then someone who had enough of a profile that I&rsquo;d sometimes stick around somewhere long enough to stabilize things then have another opportunity to move on to. Some things ended up being left undone. I&rsquo;d done my best, it often felt like there wasn&rsquo;t a ton of appreciation for what I&rsquo;d managed to accomplish, but things were left undone.</p>
<p>Managers have a lot of privilege and a lot of power, so I&rsquo;m not here to be all &ldquo;misery me for the poor managers.&rdquo;</p>
<p>I just had a moment today where it was my turn to take the baton on some unfinished business and I realized it&rsquo;s the first time in a while that I&rsquo;ve had the privilege of being the stranger riding into town, and into the middle of whatever story has been playing out. And I also realized my first reaction this time &mdash; years and years after indulging in some very judgey, less than gracious umbrage &mdash; was one of understanding. Yay growth.</p>
<p>Everyone only has so much new leader energy they can bring to a new thing. The experienced ones keep some back, the not-so-great ones sort of punch themselves out in the early rounds. As you get comfortable with a team and get things into the right place, you get comfortable with your own tradeoffs. Things get out of true and drift a little, but not every worn bearing needs to be replaced right away.</p>
<h2 id="because-you-can">Because you can</h2>
<p>I had an item for today&rsquo;s post I decided wasn&rsquo;t quite ready. Using org-mode to blog, I would have done a quick <code>org-refile</code> to move the heading into a drafts section where I can work on it later. But I&rsquo;m writing in Markdown so that was off the table. I just made a file called <code>drafts.md</code> and committed it, then added the heading to it for later with good ol&rsquo; fashioned kill/yank.</p>
<p>But I did briefly think &ldquo;oh, see &hellip; good reason to go back to org-mode for blogging.&rdquo;</p>
<p>Except it&rsquo;s not. It&rsquo;s a terrible reason.</p>
]]></content:encoded>
    </item>
    <item>
      <title></title>
      <link>https://mike.puddingtime.org/posts/2024-03-14-daily-notes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-03-14-daily-notes/</guid>
      <description>&lt;h1 id=&#34;a-minor-difference-in-theoretical-foundations&#34;&gt;A minor difference in theoretical foundations&lt;/h1&gt;
&lt;p&gt;One thing I like about IT is that it is a place where I don&amp;rsquo;t feel free to pull the sort of nonsense I will regularly do at home.&lt;/p&gt;
&lt;p&gt;I was talking to my ops person this afternoon and we were mulling what I&amp;rsquo;ll just refer to as a &lt;em&gt;situation&lt;/em&gt; with some automation and I said &amp;ldquo;I have made no decisions here &amp;hellip; so let&amp;rsquo;s be clear &amp;hellip; but I think we are a little over-automated in this particular area &amp;hellip;&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="a-minor-difference-in-theoretical-foundations">A minor difference in theoretical foundations</h1>
<p>One thing I like about IT is that it is a place where I don&rsquo;t feel free to pull the sort of nonsense I will regularly do at home.</p>
<p>I was talking to my ops person this afternoon and we were mulling what I&rsquo;ll just refer to as a <em>situation</em> with some automation and I said &ldquo;I have made no decisions here &hellip; so let&rsquo;s be clear &hellip; but I think we are a little over-automated in this particular area &hellip;&rdquo;</p>
<p>I was doing my rhetorical gambit for when I&rsquo;m expecting a tussle.</p>
<p>They cut me off with a &ldquo;hard agree, but I was told &lsquo;better to be over-automated than under-automated.&rsquo;&rdquo;</p>
<p>Oh no.</p>
<p>There&rsquo;s kind of a funny dynamic here because I think there are people who look at someone like me and think &ldquo;he says things like &rsquo;let&rsquo;s not over-automate&rsquo; because he&rsquo;s <em>old</em>&rdquo;</p>
<p>Well, sure. And they <em>don&rsquo;t</em> say it because they&rsquo;re <em>not</em>.</p>
<p>They just haven&rsquo;t lived through enough inverse <a href="https://xkcd.com/1205/">XKCD-is-it-worth-the-time</a> foot-guns yet.</p>
<h1 id="the-year-of-screaming-at-a-desktop">The year of screaming at a desktop</h1>
<p>Some Linux guy hard-locks Emacs and loses some work when he kills it.</p>
<p>He investigates.</p>
<p>It&rsquo;s because a project management package ran hog wild in his home directory when he left a <code>Makefile</code> there, which the project management package took as a license to run hog wild and index his whole <code>~/</code>.</p>
<p>His response?</p>
<p>&ldquo;It was dumb to leave a Makefile in my home directory.&rdquo;</p>
<p>I think I have more time for Linux people than Mac people in the same way I have a soft spot for anyone with Stockholm Syndrome.</p>
<p>I checked. You can do this on a Mac, too. I just think a Mac person wouldn&rsquo;t think to blame themselves.</p>
<h1 id="the-log">The log</h1>
<p>I continue to keep my daily log. I&rsquo;m not going to say how, or what with. I just keep it.</p>
<p>If I get going to fast to keep it <em>well</em>, I do a periodic catchup entry where I make bullet points of what happened since the last thorough entry and get on with my day.</p>
<p>I use it for general notes sometimes, but when an entry gets long because the notes got involved, I copy the long part to a new file and save it when I&rsquo;m done because it&rsquo;s supposed to be a log, not a journal, exactly.</p>
<p>Because you&rsquo;re not me and I have no idea how your brain works, I have no idea if a log would be useful for you. For me it does these things:</p>
<ul>
<li>Helps me remember things to come back to when I have the brain space to switch contexts into task creation.</li>
<li>Helps me remember what happened today.</li>
<li>Helps me feel better because holy crap, I do a lot in a day. Especially this week. But like many managers, especially managers who don&rsquo;t really like managers, it&rsquo;s easy to forget that deciding is work.</li>
</ul>
<p>I do go back now and then and look at entries more than a day old, but not often. If I&rsquo;m using the log correctly, anything that matters is probably an action in another place built for recording and describing actions.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Admin Mode</title>
      <link>https://mike.puddingtime.org/admin/disable/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/admin/disable/</guid>
      <description></description>
      <content:encoded><![CDATA[]]></content:encoded>
    </item>
    <item>
      <title>Admin Mode</title>
      <link>https://mike.puddingtime.org/admin/enable/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/admin/enable/</guid>
      <description></description>
      <content:encoded><![CDATA[]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-04-11</title>
      <link>https://mike.puddingtime.org/posts/2023-04-11-daily-notes-for-2023-04-11/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-11-daily-notes-for-2023-04-11/</guid>
      <description>pinboard/Emacs integration, hoping Yellowjackets doesn&amp;rsquo;t disappoint, blogging with ox-hugo.</description>
      <content:encoded><![CDATA[<h2 id="bookmarks-and-org">Bookmarks and org</h2>
<p>I&rsquo;ve been back and forth on bookmarking. For a period there was some noise about pinboard.in appearing moribund. The obvious explanation for some of the noise generally was that Maciej Cegłowski&rsquo;s smartest guy in the room schtick had finally run afoul of peoples&rsquo; sensibilities. The one supporting piece of evidence I had in my own experience was an unanswered bug report about broken feed functionality.</p>
<p>So I tried raindrop.io (didn&rsquo;t really take), and then just stopped bookmarking stuff because I wasn&rsquo;t sure where to put it, and then started playing around with beorg to capture bookmarks on mobile, which worked fine but I hadn&rsquo;t yet figured out a way to make the practice scale.</p>
<p>Well, the bug I reported about pinboard got fixed, Maciej seems to be active online again, and pinboard is my favorite service, so I&rsquo;m using it. For mobile I like the <a href="https://get-pins.app">Pins app</a> a lot. It&rsquo;s just clean and simple, and it&rsquo;s a universal app so its share extension works on my Macs in apps like Reeder.</p>
<p>Since I&rsquo;ve moved blogging into Emacs, it&rsquo;d be nice to be able to get links I save out of pinboard and into a buffer, and it looks like <a href="https://github.com/davep/pinboard.el">Dave Pearson&rsquo;s pinboard.el</a> will suffice. It provides a pinboard client in Emacs: invoke it, get a list of your bookmarks, do things with them. Konrad Hensen wrote a function that can <a href="https://gist.github.com/khinsen/7ed357eed9b27f142e4fa6f5c4ad45dd">store a pinboard.el link as an org link</a>.</p>
<h2 id="blogging-and-org">Blogging and org</h2>
<p>I added <a href="https://ox-hugo.scripter.co">ox-hugo</a> to my blogging toolkit as an experiment in blogging with org-mode. You just add a section to a monolithic file, compose with org markup, and save. ox-hugo exports the content to a well-formed Hugo Markdown file. Used in conjunction with Hugo server&rsquo;s <code>--navigateToChanged</code> switch, realtime feedback is easy.</p>
<p>Some things I like about it:</p>
<ul>
<li>Adding <code>TODO</code> to the front of the heading makes the post a draft.</li>
<li>Normal org tags at the end of the heading, e.g. <code>:emacs:gtd:blogging:</code> become tags for the post.</li>
<li>Participation in the org ecosystem, e.g. being able to use <code>org-refile</code> on stuff that&rsquo;s not quite ready for today&rsquo;s edition.</li>
</ul>
<p>I&rsquo;m not so sure about it as a longterm document pipeline. This isn&rsquo;t a workflow amenable to anything other than a normal computer that can properly run Emacs. That&rsquo;s not a big deal right now: My iPad is pretty strictly for content consumption these days. But when I think about camping season arriving and how much better suited to that an iPad is, I have qualms. I have no problem imagining an iPad-centric Hugo workflow using any of a number of tools, especially given my publishing pipeline. I don&rsquo;t like the idea of dragging a laptop along.</p>
<p>I get the feeling this is going to land in the &ldquo;fun but not for me&rdquo; pile.</p>
<p>On the other hand, I&rsquo;ve got Tailscale running and there&rsquo;s Blink. I can always get to something that can run Emacs that way. If I&rsquo;m on the grid enough to blog, I&rsquo;m on the grid enough to <code>mosh</code> into something and push out a post.</p>
<p>It&rsquo;s worth a little thinking because the more I do with org mode the more I realize it&rsquo;s how I&rsquo;d prefer to author stuff of any complexity, or stuff that could become part of something more complex at some point.</p>
<h2 id="hoping-yellowjackets-won-t-disappoint">Hoping Yellowjackets won&rsquo;t disappoint</h2>
<p>Al and I have been watching the first season. We&rsquo;ve arrived in the traditional part of a ten-episode season, where things begin to bog down a little and I&rsquo;m hoping it will get a little more sprightly again. And I&rsquo;m going through my usual qualms about shows that look and act like this one: I don&rsquo;t mind some mystery, but I have lost my tolerance for series that won&rsquo;t resolve anything. If it looks like it&rsquo;s going to be an endless puzzlebox, it&rsquo;s not going to get my time.</p>
<p>The ten episode thing: I wish I knew some television writers who could walk me through the realities of doing an eight-, ten-, twelve-, or twenty-episode season.</p>
<p><em>Sharp Objects</em>, <em>Mare of Easttown</em> and <em>Severance</em> all came in at seven or eight episodes, and they felt just right to me. Things stayed tight and they kept moving. <em>For All Mankind</em> comes in at ten per season, and sometimes it drags. <em>The Wire</em> ran 12 or 13 episodes per season (except the last), and I&rsquo;d say it could have tightened down, too.</p>
<p>You just hit those moments, I suppose, where all the setup is done, the Big Problem for the season is established, and &hellip; wham, into a bottle episode or a dream episode that feels loosely connected &ndash; or a subplot goes on unresolved for a few episodes &ndash; and you feel the momentum seeping out.</p>
<p>I suppose there are some economics around the first run and eventual syndication, and probably increasingly good metrics around what audiences will stick with in what numbers. I just wonder what about the structure (at the episode level and the season level) makes things seem to get a little pokey at ten episodes. I took a writing for film class years ago where the person who did the screenplay for <em>Erin Brokovich</em> sat with the class and walked us through the structure, and I&rsquo;ve read since that these things follow predictable patterns you mainly notice when they&rsquo;re broken. I can see how perhaps writers learn a certain tempo within a certain framework and end up with more time than they know what to do with.</p>
<p>And maybe it&rsquo;s just me being affected by streaming and binge-watching. I&rsquo;m still generally on team &ldquo;3 hours for a movie? Sounds like a good deal!&rdquo; so I don&rsquo;t think my attention span has been completely ruined, but there&rsquo;s just so much out there &ndash; maybe I&rsquo;ve been conditioned by the bounty that is Peak Television to look ahead to the next thing in a way I have not by movies.</p>
<p>Anyhow: We are enjoying it for now. The cast is solid, the timeline switching keeps things moving, and showing us the fate of one of the main characters in the first scene of the first episode seems to have worked, though I get the feeling something will happen along the way to complicate that.</p>
]]></content:encoded>
    </item>
    <item>
      <title>mutt to org-contacts</title>
      <link>https://mike.puddingtime.org/posts/2023-04-15-mutt-to-org-contacts/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-15-mutt-to-org-contacts/</guid>
      <description>A little script to copy address information from mutt messages into an org-contacts file.</description>
      <content:encoded><![CDATA[<p>Part of making the whole <a href="https://mike.puddingtime.org/posts/20230413-making-a-plaintext-personal-crm-with-org-contacts/">plaintext CRM</a>  thing work involves capture: Getting contact information into the database. I made a capture template for <a href="https://beorgapp.com/">beorg</a> to make it easier to capture a contact on mobile, but I have a bunch of recent email contacts I&rsquo;ve wanted to add, too, and no easy way to get them out of mutt.</p>
<p>For all of its talents, mutt doesn&rsquo;t choose to expose any message variables to its macro functionality. If you want to extract a sender&rsquo;s name or email address or whatever, the message has to be piped. I put something like that together to <a href="https://mike.puddingtime.org/posts/2023-04-09-macros-to-score-mail-in-mutt/">add senders to a mutt score file</a>, and there are a few other things out there in the mutt ecosystem, like lbdb, that capture email addresses. lbdb could have been great for this, but its whole point is capture to a database of its own.</p>
<p>I&rsquo;ve been poking around with getting ChatGPT to write little utilities for me, so I put this problem to it, asking for a Ruby script that could pipe a message through formail to extract the needed name and email address.</p>
<p>It took a second prompt &ndash; initially it just wrote the code to process the input without specifying the input &ndash; but it produced something workable to get the two pieces of data out, and I added an org-contacts template as a <code>HERE</code> doc the script writes into a <code>mutt_contacts.org</code> file. I could have sent it straight to <code>contacts.org</code> but prefer to automate into buffer files to keep the chance of conflicts, sync or otherwise, to a minimum.</p>
<p>The accompanying mutt macro looks like this:</p>
<p><code>macro index,pager .oc &quot;|~/.mutt/org_contact.rb\n&quot;</code></p>
<p>I tap <code>.oc</code> when positioned on a message and it pipes into the script.</p>
<p>I&rsquo;d like to extend the macro to include a quick note, but for now it just adds the <code>NOTES</code> todo state and schedules the entry a day out to remind me to put something in there soon: The new entries turn up in my org-mode agenda for processing and re-filing into my <code>contacts.org</code> file.</p>
<p>And it worked well enough: Once I set it up I was able to run through and add nine or ten new contacts in a few seconds, then visit them in org-mode and refile them all.</p>
<p>And yeah &hellip;still holding the line against adding an MUA to Emacs proper. I just don&rsquo;t want to do the whole OfflineIMAP thing or similar, and I am still keeping things relatively simple. Adding <code>org-caldav</code> today was a small step in the wrong direction, but I like having calendar entries in my org agenda, it syncs relatively quickly once it does the initial download, and it has no system dependencies.</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env ruby</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;open3&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nb">require</span> <span class="s1">&#39;date&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">contacts_file</span> <span class="o">=</span> <span class="s2">&#34;~/org/mutt_contacts.org&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">message_contents</span> <span class="o">=</span> <span class="vg">$stdin</span><span class="o">.</span><span class="n">read</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Define the command to extract headers with formail</span>
</span></span><span class="line"><span class="cl"><span class="n">command</span> <span class="o">=</span> <span class="s1">&#39;formail -X From: -X Sender: -X Reply-To: -x To: -x Cc: -x Bcc:&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Execute the command and capture the output</span>
</span></span><span class="line"><span class="cl"><span class="n">output</span><span class="p">,</span> <span class="n">status</span> <span class="o">=</span> <span class="no">Open3</span><span class="o">.</span><span class="n">capture2</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="ss">stdin_data</span><span class="p">:</span> <span class="n">message_contents</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="n">status</span><span class="o">.</span><span class="n">success?</span>
</span></span><span class="line"><span class="cl">  <span class="n">email</span> <span class="o">=</span> <span class="kp">nil</span>
</span></span><span class="line"><span class="cl">  <span class="nb">name</span> <span class="o">=</span> <span class="kp">nil</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># Parse the output and extract the email and name from the From, Sender, and Reply-To headers</span>
</span></span><span class="line"><span class="cl">  <span class="n">output</span><span class="o">.</span><span class="n">lines</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">line</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="k">case</span> <span class="n">line</span>
</span></span><span class="line"><span class="cl">    <span class="k">when</span> <span class="sr">/^From:\s*(.*)$/i</span><span class="p">,</span> <span class="sr">/^Sender:\s*(.*)$/i</span><span class="p">,</span> <span class="sr">/^Reply-To:\s*(.*)$/i</span>
</span></span><span class="line"><span class="cl">      <span class="n">from</span> <span class="o">=</span> <span class="vg">$1</span><span class="o">.</span><span class="n">strip</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="c1"># Extract the email and name from the From, Sender, or Reply-To header</span>
</span></span><span class="line"><span class="cl">      <span class="k">if</span> <span class="n">from</span> <span class="o">=~</span> <span class="sr">/(.+?)\s*&lt;(.+?)&gt;/</span>
</span></span><span class="line"><span class="cl">        <span class="n">email</span> <span class="o">=</span> <span class="vg">$2</span>
</span></span><span class="line"><span class="cl">        <span class="nb">name</span> <span class="o">=</span> <span class="vg">$1</span><span class="o">.</span><span class="n">strip</span>
</span></span><span class="line"><span class="cl">      <span class="k">else</span>
</span></span><span class="line"><span class="cl">        <span class="n">email</span> <span class="o">=</span> <span class="n">from</span>
</span></span><span class="line"><span class="cl">        <span class="nb">name</span> <span class="o">=</span> <span class="s2">&#34;No Name Found&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="c1"># Found the email and name, so break the loop</span>
</span></span><span class="line"><span class="cl">      <span class="k">break</span>
</span></span><span class="line"><span class="cl">    <span class="k">end</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">org_template</span> <span class="o">=</span> <span class="o">&lt;&lt;~</span><span class="no">TEMPLATE</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="o">**</span> <span class="no">NOTES</span> <span class="c1">#{name} :mutt:</span>
</span></span><span class="line"><span class="cl">  <span class="ss">SCHEDULED</span><span class="p">:</span> <span class="c1">#{(Date.today + 1).strftime(&#34;%Y-%m-%d&#34;)}</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:PROPERTIES</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:EMAIL</span><span class="p">:</span> <span class="c1">#{email}</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:PHONE</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:BIRTHDAY</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:CONTACTED</span><span class="p">:</span> <span class="c1">#{Date.today.strftime(&#34;%Y-%m-%d&#34;)}</span>
</span></span><span class="line"><span class="cl">  <span class="ss">:END</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">TEMPLATE</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">contacts_file</span><span class="p">,</span> <span class="s2">&#34;a&#34;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span> <span class="n">org_template</span><span class="p">}</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Search</title>
      <link>https://mike.puddingtime.org/search/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/search/</guid>
      <description>search</description>
      <content:encoded><![CDATA[]]></content:encoded>
    </item>
  </channel>
</rss>
