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






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

]]></content:encoded>
    </item>
    <item>
      <title>For I have no screen and I must scream</title>
      <link>https://mike.puddingtime.org/posts/2024-01-13-for-i-have-no-screen/</link>
      <pubDate>Sat, 13 Jan 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-13-for-i-have-no-screen/</guid>
      <description>An accidentally long remembrance of my time among the Linux reactionaries.</description>
      <content:encoded><![CDATA[<p>I went back and forth on this title because the first thing I thought this morning after I thought &ldquo;I wonder how much snow there is out there&rdquo; was &ldquo;to use Xorg is to be entombed in the flesh of a living corpse,&rdquo; and that could have been a fine heading, too. But then a thing broke in my stack as I sat down to write and I spent a few more early moments of the day working through the Discourse of a package maintainer I depend on but who is so pedantic, prickly, and bitchy to his users that by the time I was figuring out how to apply his predictably obtuse and passive aggressive advice I couldn&rsquo;t help but imagine getting into a slap fight with him about that potential heading.</p>
<p>So here we are. This will not attract that kind of attention.</p>
<p>But it is. To be entombed in the flesh of a living corpse, that is.</p>
<p>Anyhow, why would I say that? And what does it have to do with screens?</p>
<p>Okay.</p>
<p>So, over years of Mac use I came to depend on this little haxie called <a href="https://choosy.app/">Choosy</a>, which does one thing: When you click a link that is in an app that is not a browser, it pops up a menu of all your installed browsers and lets you pick the one to open the link in. It has gotten a lot smarter over the years: You can add browser profiles to the list, you can set up very basic rules (&ldquo;always use the first browser on this list that is open in this order,&rdquo; for instance) and more advanced rules (&ldquo;use this browser for this domain.&rdquo;)</p>
<p>It&rsquo;s great for stuff like &ldquo;clicked a link in my work Slack and I want that to open in Chrome to my work profile&rdquo; vs. &ldquo;clicked a link in a personal Slack for complaining about Metafilter&rdquo; that I want to open in Firefox.</p>
<p>There are a few things like that Linux-land: <a href="https://browsers.software/">Browsers</a> is one, and <a href="https://github.com/sonnyp/Junction">Junction</a> is another. They aren&rsquo;t as complete as Choosy, but they meet the basic use case, which is &ldquo;work links open in this, personal links open in that.&rdquo; Both run inconsistently across my several machines, despite them all having pretty closely sycned configs and all running on the same distro and desktop.</p>
<p>Sometimes Junction just won&rsquo;t open a link. Sometimes Browsers appears below every other window and just sits there, unseeable and unclickable until I move all the other windows out of the way to get at it, because it does something to hide from the task switcher and I have to just hope that it appears at a random spot on the desktop that is not underneath something else.</p>
<p>So last night it finally got to that point where I couldn&rsquo;t deal with it any longer. After a bunch of troubleshooting, installing from source, etc. etc. I thought &ldquo;I wonder if this is an Xorg thing.&rdquo;</p>
<p>I&rsquo;ve been using Xorg on my machines because screen sharing in Zoom is weird in Wayland.</p>
<p>I <em>thought</em> it was unable to share individual windows on a call because by default when you share screen in Zoom on Wayland your choices include &ldquo;the whole screen&rdquo; and &ldquo;a region of the screen you have to draw with the most ungodly and clumsy UI.&rdquo; There is no tidy &ldquo;just share this one window&rdquo; option, which is a feature you depend on if you need to share the screen but don&rsquo;t want everyone to see all your notifications or other windows, and hence why I was using Xorg for work instead of Wayland, which has done nothing else at all to bother me.</p>
<p><em>Unless!</em></p>
<p>Unless you go into Zoom&rsquo;s screen sharing preferences, pick the advanced options, and tell it that under Wayland it is to use Pipewire. Then the sharing options change and you get &ldquo;use system desktop capture&rdquo; and &ldquo;use system window capture&rdquo; when sharing. That pops up a little transient window that lets you pick the right window.</p>
<p>So once I learned that, I just set my default desktop session back to Wayland and checked to see if that would also solve my Browsers/Junction problem. Yup. Both started working fine.</p>
<p>Which more or less gets us to the heading, which was written to not attract the attention of a certain kind of person.</p>
<p>But it is!</p>
<p>To be trapped in the flesh of a living corpse, that is.</p>
<p>The whole time I was trying to debug this thing, I kept thinking &ldquo;I know all these people are salty about it, but what the fuck did Wayland ever do to me?&rdquo; and the only answer I could come up with was &ldquo;not let Zoom do screen sharing the right way.&rdquo; But because empathy is something that separates us from the lower orders, I was able to <em>generalize</em> from that insight and realize that my papercut is surely just one of hundreds, and even though it may be the one papercut I could attribute to Wayland, there were surely people with two or three or eight papercuts.</p>
<p>But in addition to <em>empathy</em> I also have <em>experience.</em></p>
<p>In The Linux People, that is. Because before I was a director of IT, a director of business operations, a director of engineering, or a director of tech pubs, I was a writer with the very distinct niche of &ldquo;knows how to use Linux, arrived there by way of an old school *nix, but is more from what we might call <a href="https://web.archive.org/web/20180218045352/http://www.cryptonomicon.com/beginning.html">the Neal Stephenson wing</a> of the Linux party and is more enamored with <a href="https://web.archive.org/web/20000529125023/http://www.wenet.net/~scoville/PCarticle.html">UNIX as literature</a> than UNIX as the bestest.&rdquo;</p>
<p>So over years of writing books and bits of books and articles and reviews about Linux, moderating Linux forums, getting berated by a squad of eight IBM marketing executives for giving too much credit to Oracle for legitimizing Linux as an enterprise platform, and getting cornered by esr in the back hall of a Linux expo so he could twist my arm to write an editorial demanding Linus host the Linux kernel project on Sourceforge (I didn&rsquo;t do it, and that&rsquo;s why you all owe me for the creation of git in some small way), I was working from a certain anthropological remove.</p>
<p>One of the earliest things my observations taught me was that Linux as an idea had a weird messaging problem: Was it about the underlying technology &ndash; its <em><a href="https://en.wikipedia.org/wiki/POSIX">POSIX adjacency</a></em> I guess you could say &ndash; or was it about the means of production/distribution &ndash; its <em>openness</em>?</p>
<p>Because Linux was &ldquo;new,&rdquo; arriving after a pretty solid decade of Microsoft hegemony, it attracted the language of novelty, challenge to the status quo, and perhaps revolution.</p>
<p>I certainly came across a lot of actual &ldquo;computing progressives&rdquo; in the Linux world. But after a few years of managing the forums and the letters to the editor and the comment sections, I came to realize that the most vocal and opinionated segments of users were the smallish crew of actual old-school for-real UNIX old-timers and a much larger segment of people who were still mad about <a href="https://en.wikipedia.org/wiki/OS/2">OS/2 Warp</a>, complete with a <em>Dolchstoßlegende</em> about Microsoft and the loss of what should have been the Thousand Year Reign of &hellip; fucking IBM?</p>
<p>That latter crew?</p>
<p>They were barely manageable as community members before 9/11 &ndash; weird uncles, Robert Bork stans, and Whitewater investigation enthusiasts who had made a hobby of fine-tuning X11 font rendering and custom compiling printer drivers &ndash; who then descended into a very peculiar paranoia <em>post</em>-9/11 that included bizarre connections between Bill Gates and &ldquo;Islamofascism&rdquo; and dashing off the occasional anonymous death threat to me at three in the morning when one of my Linux sites did a run-of-network ad for Microsoft Office.</p>
<p>Over time I learned that anyone whose profile placed them in Texas or North Carolina but who insisted on Commonwealth &ldquo;s&rdquo; instead of American &ldquo;z&rdquo; probably had the reactionary Linux goon gene. Day-to-day conversation also revealed them to have day jobs as insurance adjusters and general contractors who nevertheless referred to the HP All-In-One on a sagging particle board desk in the living room as &ldquo;one of my boxes,&rdquo; and their favorite anecdotes involved refusing to help people with computers unless they agreed to install SuSE.</p>
<p>They suffered from deep confusion over whether a proliferation of desktop standards was good because <em>vague handwaving about genetic diversity and possibly allusions to God Emperor Leto II</em> or terrible because <em>angry, tearful remembrances of our failure to will OS/2 into dominance in the face of Microsoft&rsquo;s Sauron-like corruption of all that is clean and pure about computing</em>. And a deep hatred of change. They had that, too.</p>
<p>Some of that was social and/or temperamental. Some of it was a curdled kind of aspiration: They liked fucking around with computers, admired &ldquo;technical&rdquo; people, and responded very well to opinionated screeds about the right/most secure way to do a computer thing (dude &ndash; just leave the NFS mount open, I promise nobody wants to steal your LaTeX notes on printer drivers and you&rsquo;re going to make yourself sick if you keep this up) but couldn&rsquo;t invest so much time in their BOfH cosplay that change was easy for them.</p>
<p>Anyhow, I am sure many of those people are facing federal charges for their participation in January 6 and I wonder if the Gentoo build they started before piling into their PT Cruisers to storm the capitol finished by the time they made bail.</p>
<p>Which is all to say, it was easy to get things all twisted about what Linux is to everyone in its orbit. Yes, there are starry eyed revolutionaries, neophiles, Stallmanites, and aethetes, but there are also angry reactionaries, luddites, traditionalists, and Microsoft conspiracy theorists (who can step you all the way from OS/2 Warp to the Gates Foundation&rsquo;s work to stop malaria) who aren&rsquo;t going to like anything different.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-01-09 (mutt noodling edition)</title>
      <link>https://mike.puddingtime.org/posts/2024-01-09-daily-notes/</link>
      <pubDate>Tue, 09 Jan 2024 10:41:05 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-09-daily-notes/</guid>
      <description>Multi-account, GPG-secure mutt configs. Mutt message scoring with Ruby, and score color-coding.</description>
      <content:encoded><![CDATA[<h2 id="multi-account-gpg-secured-mutt-config">Multi-account, GPG-secured mutt config</h2>
<p>I keep having to reinvent this every few years, and I always stitch it together from assorted sources, mostly because Google sort of shifts around now and then. So:</p>
<ul>
<li>Given a Gmail account with IMAP access turned on</li>
<li>Given a Fastmail account using IMAP</li>
<li>Given mutt, with your configuration in <code>~/.mutt</code> and with <code>muttrc</code> and <code>macros</code> files.</li>
<li>Given a working gpg config you can use to encrypt/decrypt</li>
</ul>
<p>There are all sorts of ways to handle mutt config for assorted providers. The examples here are working right now, in early 2024. They probably have bits of cruft and lint because my config has been a work in progress since some time in the late 20th century.</p>
<h3 id="overview">Overview</h3>
<p>You&rsquo;re making profiles to do this: One for each of your accounts that will hold account specific config information. If you currently have a monolith config in mutt, you can lift a lot of stuff out of it and move it into a profile, then source the profile in your main <code>muttrc</code>.</p>
<p>You&rsquo;re also going to make and encrypt a credential file for each account. Some people do this all in one file and use account hooks to make sure <code>imap_user</code>, <code>imap_password</code> and <code>smtp_password</code> are set correcctly depending on the account you&rsquo;re operating in. I chose to make a file for each account.</p>
<p>You&rsquo;re going to make macros that source the profiles when you want to switch between them.</p>
<h3 id="0-pre-config-with-gmail-and-fastmail">0. Pre-config with Gmail and Fastmail</h3>
<p>I&rsquo;m not going to go into a ton of detail here:</p>
<ul>
<li>Gmail needs to have less secure app access turned on. Find it in your account settings. If you&rsquo;re doing this for a work account, it may be your admin hasn&rsquo;t enabled this. Have fun fighting city hall, in that case.</li>
<li>If you have a GSuite admin, they need to have enabled all IMAP clients, not just OAuth ones.</li>
<li>If you have 2FA turned on with Google, you will need to enable an application password.</li>
</ul>
<p>For Fastmail:</p>
<ul>
<li>You need to have an app password set up for mutt. <code>Settings -&gt; Privacy and Security -&gt; Integrations -&gt; App passwords</code></li>
</ul>
<h3 id="1-the-profile-files">1. The profile files</h3>
<p>Make profile files for each of your accounts. I name them <code>workplace.profile</code>, <code>fastmail.profile</code>, etc. It doesn&rsquo;t matter there&rsquo;s no required convention. It&rsquo;s a good idea to use the first one as the template for the second one.</p>
<p>This is an example of my Fastmail profile. Note line 6:</p>
<p><code>source &quot;gpg -d ~/.mutt/passwords.gpg |&quot;</code></p>
<p>That&rsquo;s where your credentials will come from. I&rsquo;ll show that file next.</p>






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






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






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






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






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






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






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Date-based scoring penalties -- older things fall down</span>
</span></span><span class="line"><span class="cl">score ~d&gt;3d -1
</span></span><span class="line"><span class="cl">score ~d&gt;7d -3
</span></span><span class="line"><span class="cl">score ~d&gt;14d -10
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;~O&#34;</span> +10 <span class="c1"># old = +10 so I don&#39;t miss it</span>
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;~F&#34;</span> +20 <span class="c1"># flagged = +20 so it stays in the interesting view for a while, even if old</span>
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;!~p ~d&gt;7d&#34;</span> -10 <span class="c1"># not for me directly, getting old, let it fade away</span>
</span></span><span class="line"><span class="cl">score <span class="s2">&#34;!~l&#34;</span> +2 <span class="c1"># to a known list, give it a bump</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2024-01-03</title>
      <link>https://mike.puddingtime.org/posts/2024-01-03-daily-notes/</link>
      <pubDate>Wed, 03 Jan 2024 16:04:07 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-01-03-daily-notes/</guid>
      <description>More a/v messing around. Zellij: A tmux alternative.</description>
      <content:encoded><![CDATA[<h2 id="more-av-messing-around">More a/v messing around</h2>
<p>I got a boom for my USB shotgun mic (a Rode VideoMic GO). It mounts on the back of my desk and swings in and out of place between calls. It sits about eight inches away from my face, but just off camera (yay relatively tight 23mm crop) and the sound quality is sooo much better than when I had it mounted in my X-T2&rsquo;s hot shoe. Much more presence and bass, much less reverb.  Okay. Time to start a podcast. I can feel it.</p>
<h2 id="tmux-alternative">tmux alternative</h2>
<p><a href="https://zellij.dev/">Zellij</a> is a terminal multiplexer <em>ala</em> screen or tmux, but it&rsquo;s got a nicer onboarding ramp than either thanks to a decent menu that exposes most of what you need and out-of-the-box UX touches.</p>
<p><img src="https://photos.smugmug.com/photos/i-vcsZGfh/0/5ae23ff4/XL/i-vcsZGfh-XL.jpg" alt="Screenshot of Zellij, a terminal multiplexer showing multiple panes and a helpful menu"></p>
<h2 id="through-the-holidays">Through the holidays</h2>
<p>We had a pretty good holiday season this year. Ben was home from his first term at UofO, and we had a quiet couple of weeks with few obligations. Work was pretty quiet, too: We had a major system change slated for the interim week, then the vendor backed out, so there was a little bit of &ldquo;shrug, I guess there&rsquo;s this paperwork to catch up on,&rdquo; which is a fine way to spend that week.</p>
<p>It&rsquo;s good to be almost on the other side: We have a balance day off this Friday, so this will be a three-day week, then back to normal next week.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-28</title>
      <link>https://mike.puddingtime.org/posts/2023-12-28-daily-notes/</link>
      <pubDate>Thu, 28 Dec 2023 11:30:38 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-28-daily-notes/</guid>
      <description>A CLI for Remember the Milk. Vampire Survivors. A little on Substack.</description>
      <content:encoded><![CDATA[<h2 id="a-cli-for-rtm">A CLI for rtm</h2>
<p>Just as good as Todoist for my purposes, and with a little more personal affection toward it, is definitely <a href="https://www.rememberthemilk.com/app/">Remember the Milk</a>. It also <a href="https://github.com/dwaring87/rtm-cli">has a CLI</a> that allows for task manipulation, etc. It also uses RTM&rsquo;s advanced search syntax, so you don&rsquo;t have to have a preexisting filter, as you would in Todoist, to query upcoming todos with due dates only:</p>
<p><code>rtm lsd -d 4 NOT due:never</code></p>
<p>(<em>List due items no more than 4 days out, exclude things without due dates</em>)</p>
<p>Its output also includes index numbers, so once I invoke my near-term todos, I can act on them from the command line, e.g.</p>
<p><code>rtm due 07 tomorrow</code></p>
<p>&hellip; which changes the due date of item 7 from the list to tomorrow.</p>
<p>I think this may have put to bed my interest in exploring <a href="https://xwmx.github.io/nb/">nb</a>. I spent some time poking at it, but the question, as always, comes down to &ldquo;how does this thing handle mobile use cases?&rdquo; For todos, I need a little more than the sort of <a href="https://gist.github.com/pdxmph/1d17833f910dbfd86068d94cfac585f9">web publishing lashup I made for my Denote notes</a>.</p>
<h2 id="vampire-survivors">Vampire Survivors</h2>
<p>I am not sure what compelled me besides maybe the sale price, but I gave Vampire Survivors a go and I&rsquo;m hooked. It&rsquo;s a rogue-like bullet hell thing where you&rsquo;re running around being chased by hordes of undead, slowly acquiring weapons and powerups that eventually turn you into a killing machine.</p>
<p>It was disorienting at first, because you don&rsquo;t do anything besides move around. All your weapons fire or deploy themselves, and your only real input into the process is the direction you face the character. Live long enough and you&rsquo;re eventually emitting magical energies or deploying roaming weapons of mass destruction, killing the oncoming demonic hordes by the score. Sometimes there&rsquo;s a turkey you can eat to get life back.</p>
<p>It&rsquo;s an intense game, but it&rsquo;s not really fast. I think that&rsquo;s what I like about it. Your character doesn&rsquo;t move at a very high speed. You just sort of walk around, trying not to be touched by the monsters. If you&rsquo;re lucky you happen across one of the aura weapons that just passively kill anything that gets close. When you die, you can spend your gold on incremental improvements to your character that allow you move a little faster, regenerate health, widen the radius of your weapons, do more damage, etc.</p>
<p>It&rsquo;s very simple to play and very easy to put down and pick back up.</p>
<h2 id="substack">Substack</h2>
<p>I wish people that I appreciate and who are not Nazis, or interested in helping Nazis, and who are also on Substack, would get off of it. The company did itself a favor paying the advances it did at its founding, because I know of a few writers who have been very transparent about how much space that gave them to branch out on their own, establish or rebuild writing careers, and find an audience.</p>
<p>I always wondered how long it would take for attention to turn to it, and what it would take. Honestly, I think it is a refutation of the Woke Apocalypse Doomsaying Community that it took this long and such an odious provocation to finally generate that kind of awareness. There has always been complaining, because left libs were never going to be okay with a platform that provided a home for the likes of Bari Weiss, Matt Taibi, and assorted other &ldquo;heterodox&rdquo; types, but it took honest-to-God Nazis &ndash; and the fact that Substack has decided their money spends just fine &ndash; to draw prolonged attention.</p>
<p>A while back, fresh out of years and years doing online content, I gave a thought to providing something Substack-like: I had the technical know-how for a lot of it, had done some time putting together newsletters and turnkey premium content, and had a good idea of what would work for content types. I didn&rsquo;t have any idea how to scale it all, or how to draw the line between &ldquo;good enough&rdquo; and &ldquo;feature rich&rdquo; in a way that would make much money. I&rsquo;m just noting that because the quandary facing people who signed up and are now making a living from their work on Substack is real. There are parts and pieces laying around that they could pick up and use to cobble together a similar suite of blog, newsletter, and podcast tools; but the discovery part &ndash; the marketing problem, especially given the current realignment going on with social media &ndash; is going to be fraught even if one does have the wherewithal to rummage around in the parts bin of publishing platforms, payment processing, etc.</p>
<p>This is a tougher situation than, I dunno, a well-off tech worker who just can&rsquo;t kick their X habit. It is hard to make a go of it as a writer. It would be hard to pull up stakes and move on.</p>
<p>I wouldn&rsquo;t mind being a little more current and capable than I am today, because there would be some social utility and satisfaction in helping people get out of this situation.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-27</title>
      <link>https://mike.puddingtime.org/posts/2023-12-27-daily-notes/</link>
      <pubDate>Wed, 27 Dec 2023 17:13:08 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-27-daily-notes/</guid>
      <description>Todos and agenda with kitty. Better Zoom audio. Roy Clark, guitar god.</description>
      <content:encoded><![CDATA[<h2 id="todos-and-agenda-with-kitty">Todos and agenda with kitty</h2>
<p>I&rsquo;ve been using Todoist to stick stuff that I have to keep track of in a list: It&rsquo;s got a decent web interface, you can do a card view, and it has clients for pretty much everything. It could be any of several online todo apps. I don&rsquo;t care. I don&rsquo;t love it, I am not passionate about it, it&rsquo;s just there and it makes lists which means my preference for hand-written meeting notes doesn&rsquo;t have to get in the way of keeping track of tasks.</p>
<p>I was happy to learn about <a href="https://github.com/alanvardy/tod">this Rust-based CLI tool for Todoist called &ldquo;tod&rdquo;</a>, which makes it easy to pull lists of todos, process todos, etc. all from the command line. I don&rsquo;t mean to use it to process things, but I was looking for a way to print a list of today&rsquo;s todos, and it can do that.</p>
<p>I was also happy to learn about <a href="https://github.com/insanum/gcalcli">gcalcli</a>, which can pull your Google Calendar down from the command line, as well.</p>
<p>I made a couple of launch actions in kitty:</p>






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






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






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






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="cp">&lt;?xml version=&#34;1.0&#34;?&gt;</span>
</span></span><span class="line"><span class="cl"><span class="cp">&lt;!DOCTYPE fontconfig SYSTEM &#34;fonts.dtd&#34;&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;fontconfig&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;match</span> <span class="na">target=</span><span class="s">&#34;scan&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;test</span> <span class="na">name=</span><span class="s">&#34;family&#34;</span> <span class="na">compare=</span><span class="s">&#34;contains&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&lt;string&gt;</span>Monaspace<span class="nt">&lt;/string&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;/test&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;edit</span> <span class="na">name=</span><span class="s">&#34;spacing&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&lt;const&gt;</span>dual<span class="nt">&lt;/const&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;/edit&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;/match&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;/fontconfig&gt;</span></span></span></code></pre></div>
<p>Seemed to fix it.</p>
<p>Anyhow, what do I like about kitty?</p>
<ul>
<li>Quick access to launching URLs from a keyboard shortcut.</li>
<li>The whole &ldquo;kitten&rdquo; extension system, which includes some good ones for theme selection, file transfers, and <a href="https://sw.kovidgoyal.net/kitty/kittens/hyperlinked_grep/">hyperlinked grep</a></li>
<li>Its pared-down, simple vibe sitting on top of all the customization.</li>
</ul>
<h2 id="my-first-game-of-cards-against-humanity">My first game of Cards Against Humanity</h2>
<p>&hellip; was this weekend, with a room full of people I don&rsquo;t know very well. How to approach this?</p>
<p>I guess I&rsquo;ll say this:</p>
<p>I&rsquo;ve got a particular sense of humor and I am okay with it, but it is not for everyone. Given what looked like a big box full of thousands of Cards Against Himanity cards, it is entirely reasonable to me that there would be something in there that would exceed my own capacity to shock or to be shocked. There were a few &ldquo;ick&rdquo; moments, and a few &ldquo;lol&rdquo; moments, but many, many more &ldquo;I&rsquo;d have to think this is funny for this to be funny&rdquo; moments, but not because I found those things <em>offensive</em> so much as just &hellip; not funny?</p>
<p>The whole exercise was a little lost on me because there is a difference between &ldquo;I am wound super tight and this is a transgressive thrill that allows me to occupy a space I do not ordinarily permit myself or permit for others&rdquo; and &ldquo;I find all sorts of shit funny and understand not everyone else does, so I am not going to communicate some of those things in some contexts.&rdquo;</p>
<p>So I didn&rsquo;t find the whole thing liberating or freeing or transgressive. It reminded me a lot of what David Graeber had to say about &ldquo;play&rdquo; vs. &ldquo;games&rdquo;:</p>
<blockquote>
<p>&ldquo;Freedom has to be in tension with something, or it’s just randomness. This suggests that the absolute pure form of play, one that really is absolutely untrammeled by rules of any sort (other than those it itself generates and can set aside at any instance) itself can exist only in our imagination, as an aspect of those divine powers that generate the cosmos. Here’s a quote from Indian philosopher of science Shiv Visvanathan:</p>
</blockquote>
<blockquote>
<p>&ldquo;&rsquo;<em>A game is a bounded, specific way of problem solving. Play is more cosmic and open-ended. Gods play, but man unfortunately is a gaming individual. A game has a predictable resolution, play may not. Play allows for emergence, novelty, surprise.</em>'</p>
</blockquote>
<blockquote>
<p>&ldquo;All true. But there is also something potentially terrifying about play for just this reason. Because this open-ended creativity is also what allows it to be randomly destructive. Cats play with mice. Pulling the wings off flies is also a form of play. Playful gods are rarely ones any sane person would desire to encounter. Let me put forth a suggestion, then. What ultimately lies behind the appeal of bureaucracy is fear of play.&rdquo;</p>
</blockquote>
<p>Cards Against Humanity is definitely a game. And it is not, as Dungeons and Dragons can be, a kind of game that allows you to poke at the edges of play very much.</p>
<h2 id="launching-emacs-from-systemd">Launching Emacs from systemd</h2>
<p>It happened a few versions ago, when I was busy running it on a Mac, but Emacs ships with a systemd unit, so you can fire it up like a service and use it with emacsclient. That simplifies a few things. <a href="https://emacsredux.com/blog/2020/07/16/running-emacs-with-systemd/">Bozhidar Batsov on how it all works.</a> I came across this while I was busy trying to make my Hugo posting script work across Linux and macOS machines, and cursing the whole daemonized Emacs situation. His whole blog is a treasure trove.</p>
<p>I&rsquo;m wondering, given the way I use Emacs these days, why I insist on running the GUI version. I should try not for a few days and see what comes up.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-23</title>
      <link>https://mike.puddingtime.org/posts/2023-12-23-daily-notes/</link>
      <pubDate>Sat, 23 Dec 2023 10:57:59 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-23-daily-notes/</guid>
      <description>Customizing trackpad stuff outside desktop environments. I&amp;rsquo;m over realism. Cozymas.</description>
      <content:encoded><![CDATA[<h2 id="enable-tap-to-click-in-i3-wm">Enable tap to click in i3 WM</h2>
<p>I fiddled around with i3 WM last night because why not, and because if you&rsquo;re going to crow about how far along Linux is you owe it to yourself to go, if not completely off-road, at least onto the side and back roads of the Linux desktop experience.</p>
<p>It was sort of interesting. Some stuff about it feels a little over-committed to the tiling window manager bit, and maybe some of it is the sort of stuff you just eventually figure out how to deal with, but on some level, even after an hour of learning it by trying to solve configuration problems with it, I was in a small groove.</p>
<p>But wow is it a throwback experience.  You just sorta get hucked into this environment that doesn&rsquo;t care to tell you much and doesn&rsquo;t do the things you may have come to expect from other environments and you start figuring it out.</p>
<p>Beyond the basic questions, like &ldquo;how do I launch a browser&rdquo; or &ldquo;how do I change my wallpaper,&rdquo; there are the things that desktop environments like GNOME, KDE, Cinnamon, or XFCE have taken as part of their remit, such as exposing friendly interfaces to UI and font scaling for HiDPI displays, setting up natural scrolling or tap-to-click on trackpads, and wiring up your keyboard&rsquo;s media keys.</p>
<p>i3 is <em>so</em> passionately disinterested in that stuff that I&rsquo;m going to confess to feeling a certain guilty feeling even thinking about wallpaper or a graphical web browser.</p>
<p>Anyhow, in the process of playing around and trying to figure out how to get natural scrolling and tap-to-click, I found a bunch of &ldquo;just run <code>xinput and do archaeology</code>&rdquo; advice before coming across how to do it with <code>xorg.conf.d</code>, <a href="https://cravencode.com/post/essentials/enable-tap-to-click-in-i3wm/">in case you&rsquo;re curious</a>.</p>
<h2 id="the-realistic-response">The realistic response</h2>
<p>A thing I want to work on:</p>
<p>Understanding when my reaction to something is coming from a place of determining what the &ldquo;realistic&rdquo; response is vs. a response informed by a sense of what&rsquo;s right.</p>
<p>The <a href="https://www.theverge.com/23998294/beeper-imessage-apple-app-security">Beeper vs. Apple saga</a>, of all things, is a vein to mine here.</p>
<p>On the one hand, nothing I&rsquo;ve read from the Beeper side has caused me to take the&rsquo;m very seriously. Like, what they&rsquo;re up to sounds like a sloppy hack I wouldn&rsquo;t bother with if I&rsquo;d taken my own time to devise it. Maybe an interesting problem to solve, but I&rsquo;d expect it to work for a z release or two before some breaking change. I wouldn&rsquo;t sell it to <em>myself</em> for free, I guess is what I&rsquo;m saying, let alone $2/month from strangers. And I say that as a relatively happy <a href="https://bluebubbles.app/">BlueBubbles</a> user who will stop using BlueBubbles the day I decide to stop using iPhones (which may never happen, but it is not in my mental model of things I want to &ldquo;just work&rdquo; to continue to exist in some phantom state of legitimacy on Apple&rsquo;s platform).</p>
<p>Along those same lines, forget about &ldquo;some API changes without any particular intention to kill this thing end up killing it,&rdquo; who in their right mind would expect Apple to <em>not</em> deliberately break this particular hack the second they were made aware of it?</p>
<p>So &hellip; there&rsquo;s the <em>realistic</em> response: &ldquo;I find this to be of dubious utility, I&rsquo;d never hang my hat on it, and it is doomed because Apple will crush it with as little thought given to the matter as I give to drawing my next breath.&rdquo;</p>
<p>But there&rsquo;s the part of me that is just sort of over &ldquo;realism&rdquo; because I&rsquo;ve been at this a while and do not see in Apple anything I have not seen in every other situation like this that has occurred over the past several decades, same as when AOL did its crackdown on 3rd party AIM clients decades ago, or when Reddit made its own API unaffordable to indy developers in the past year.</p>
<p>The &ldquo;realistic&rdquo; response is to say &ldquo;their platform, their rules,&rdquo; because that&rsquo;s the <a href="https://en.wikipedia.org/wiki/Capitalist_Realism">capitalist realist</a> response. But when I&rsquo;ve encountered the capitalist realist answer elsewhere I have found it profoundly unsatisfying: I never expected better of conservative types, but it has been pretty disappointing to see, over the past several decades, how comfortable liberal/progressive types have become with the privatization of everything and their quiet acceptance of market dynamics as a way to settle issues of human freedom and equity.</p>
<p>So, the thing I want to work on, I guess, is being a little less &ldquo;realistic&rdquo; in my reflexive responses. It&rsquo;s simply not my job to care about Apple&rsquo;s corporate prerogatives, and it&rsquo;s not my job to do ideological contortions to rationalize their walled garden, or anyone else&rsquo;s for that matter.</p>
<h2 id="cozymas">Cozymas</h2>
<p>Al and I call this time of year &ldquo;Cozymas.&rdquo; From the outside, it will look like Christmas: There&rsquo;s a tree, there are presents. We try to keep the present count down, and we prefer to think of it as a time of year when we take joy being in a warm house and rediscovering small things that feel good.</p>
<p>We landed on this because one of Ben&rsquo;s early Christmases didn&rsquo;t go so well: It was overstimulating and plainly too much for him, and it was hard to see that given how much work we&rsquo;d put in to making it all just so.  So we adopted a deliberately low-key take after that. Low-key enough that he complains about our disinterest in doing things up too much.</p>
<p>I&rsquo;m glad we&rsquo;re like that, though, because &mdash; and it took me years to isolate the feeling &mdash; I&rsquo;m just not a fan of the holiday. I&rsquo;ll probably never talk in as public a forum as this blog about all the reasons why, but I have them. Even in our insistence that this time of year involve little rushing or stress or concern about perfection, I feel uneasy and out of sync with the world around me. My contribution to post-holiday, back-to-work small talk is usually, &ldquo;it was quiet, which is how we like it.&rdquo;</p>
<p>I don&rsquo;t begrudge anyone their enjoyment of the season however they choose to observe it, but sometimes there are things that we don&rsquo;t so much get over as much as we learn to live with them, and this time of year is one of those things for me.</p>
<p>I feel lucky to have my home and family, and space to be however I&rsquo;m going to be about this time of year. I hope you have that space, too.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-19</title>
      <link>https://mike.puddingtime.org/posts/2023-12-19-daily-notes/</link>
      <pubDate>Tue, 19 Dec 2023 21:07:32 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-19-daily-notes/</guid>
      <description>Better Wayland taskbar icons in GNOME. Assigning MIME types to xdg-open.</description>
      <content:encoded><![CDATA[<h2 id="better-wayland-taskbar-icons-in-gnome">Better Wayland taskbar icons in GNOME</h2>
<p>I don&rsquo;t want a ton of taskbar icons, but there are a few I wouldn&rsquo;t mind, like for 1Password, my clipboard manager, and a TailScale monitor. GNOME has <a href="https://blogs.gnome.org/aday/2017/08/31/status-icons-and-gnome/">an unfavorable opinion about that</a>, so it&rsquo;s on extension developers to restore the lost functionality. <a href="https://gitlab.com/AndrewZaech/aztaskbar">App Icons Taskbar</a> is the best one I&rsquo;ve found so far under Wayland. A few observations about it:</p>
<p>Out of the box, the icons are huge and on the left of the taskbar. You can fix that in the preferences. I turned off the panel height setting  and set the icon height to 15 and it looks pretty normal. It does show running apps as well as iconified ones, and there&rsquo;s an &ldquo;unpin&rdquo; option in the context menu for each if you don&rsquo;t like that, but it doesn&rsquo;t work predictably.</p>
<h2 id="assigning-mime-types-to-xdg-open">Assigning MIME types to xdg-open</h2>
<p>macOS has the <code>open</code> command, and Linux has <code>xdg-open</code>. They do pretty much the same thing, which is open files from the command line. My Hugo posting script, for instance, runs <code>open</code> at the end to plop the Markdown it just generated into an editor.</p>
<p>With a Mac and <code>open</code> it&rsquo;s pretty easy to manage file associations: You just right-click the icon of a file you want to associate with an app and pick the app you want to open that file type.</p>
<p>With Linux, it&rsquo;s a little more fraught. GNOME offers a Default Apps setting, but it only offers a few options: web, mail, calendar, music, video, and photos. What about Markdown, YAML, ruby, etc.? For that, you want the <code>xdg-mime</code> command:</p>
<p><code>xdg-mime default sublime_text.desktop text/markdown</code></p>
<p>The <code>sublime_text.desktop</code> part (or whatever you want to use) may take a little finding. I used <code>locate</code> to figure out what the file was called on my system.</p>
<p>Once you&rsquo;ve run it, you can find it configured in <code>~/.config/mimeapps.list</code>.</p>
<p>Once assigned, <code>xdg-open foo.md</code> will open the file in the correct app.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily notes for 2023-12-16</title>
      <link>https://mike.puddingtime.org/posts/2023-12-16-daily-notes/</link>
      <pubDate>Sat, 16 Dec 2023 14:42:04 -0800</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-12-16-daily-notes/</guid>
      <description>A soft KVM switcher for Dell monitors and Linux. Photo housekeeping.</description>
      <content:encoded><![CDATA[<h2 id="a-little-bit-of-c-for-a-dell-kvm-switcher-in-linux">A little bit of C for a Dell KVM switcher in Linux</h2>
<p>My Dell monitor has a built-in KVM, which is great. The included Mac software allows you to bind a hotkey to flip between machines. There&rsquo;s no such thing for Linux, but I found <a href="https://www.dell.com/community/en/conversations/monitors/u2723qe-kvm-using-a-keyboard-shortcut-to-switch-in-linux/647fa06af4ccf8a8de56ccc8">this post on the Dell support forums</a> that explains how to use <code>ddcutil</code> to trigger a switch.</p>
<p>The posted C to make it a little executable was victimized by Dell&rsquo;s HTML sanitization, so here it is with the needed includes:</p>






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






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






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






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lisp" data-lang="lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-start-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Run Hugo server with live reloading.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">root</span> <span class="p">(</span><span class="nv">projectile-project-root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">default-directory</span> <span class="nv">root</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">compile</span> <span class="s">&#34;hugo server -D --navigateToChanged&#34;</span> <span class="no">t</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-stop-hugo-server</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Stop Hugo server.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">kill-compilation</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="ss">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="ss">:prefix</span> <span class="p">(</span><span class="s">&#34;H&#34;</span> <span class="o">.</span> <span class="s">&#34;Hugo&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="ss">:desc</span> <span class="s">&#34;Start Hugo Server&#34;</span> <span class="s">&#34;S&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-start-hugo-server</span>
</span></span><span class="line"><span class="cl">       <span class="ss">:desc</span> <span class="s">&#34;Stop Hugo Server&#34;</span> <span class="s">&#34;s&#34;</span> <span class="nf">#&#39;</span><span class="nv">my-stop-hugo-server</span><span class="p">))</span></span></span></code></pre></div>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-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>
  </channel>
</rss>
