<?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/tags/daily/</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>Sat, 19 Apr 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mike.puddingtime.org/tags/daily/index.xml" rel="self" type="application/rss+xml" />
    <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>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>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-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-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>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>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 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-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>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>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>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>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>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>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>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>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>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>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>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>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>
  </channel>
</rss>
