<?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/org/</link>
    <description>Recent content on hi, it&#39;s mike</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>mike@puddingtime.org (mike)</managingEditor>
    <webMaster>mike@puddingtime.org (mike)</webMaster>
    <copyright>© 2026, mike</copyright>
    <lastBuildDate>Sat, 19 Apr 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mike.puddingtime.org/tags/org/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Hugo Bear, ox-hugo, etc.</title>
      <link>https://mike.puddingtime.org/posts/2025-04-19-hugo-bear-ox-hugo-etc-dot/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2025-04-19-hugo-bear-ox-hugo-etc-dot/</guid>
      <description>I&amp;rsquo;ve been feeling envious of the bear people.</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been feeling a little envious of the <a href="https://bearblog.dev">bear blog people</a>, and I sort of missed my Hugo blog, <em>and</em> I missed the very nice blogging pipeline I had all set up between GitHub and Cloudflare, so I spent some time reassembling it all and tweaking a few things here and there. I know I&rsquo;ve left a few bits of old functionality out, but I think that&rsquo;s okay: All part of the campaign to just do whatever seems okay to do, or to decide I don&rsquo;t want to do it anymore and quit doing it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2024-02-14</title>
      <link>https://mike.puddingtime.org/posts/2024-02-14-daily-notes/</link>
      <pubDate>Wed, 14 Feb 2024 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2024-02-14-daily-notes/</guid>
      <description>The Org Borg.</description>
      <content:encoded><![CDATA[<h2 id="the-org-borg">The Org Borg</h2>
<p>I like the ideas I get from taking a tour of a tool like Logseq, even if I don&rsquo;t think the whole thing is going to work for me. It&rsquo;s a chance to fold ideas into what is practically my forever tool, which is org-mode/Emacs, or at least rethink things I thought were more bothersome to fix than they sometimes end up being.</p>
<p>The last few weeks I&rsquo;ve been intrigued by <a href="https://fortelabs.com/blog/para/">PARA</a> as a simple organizing principle, I&rsquo;ve wanted to continue to mesh prose and tasks in the way org-mode excels, and I&rsquo;ve wanted to de-gunk my Denote setup.</p>
<p>I gave Logseq a try, looked at Workflowy again, and briefly dusted off my last Obsidian setup. Logseq and Obsidian are pretty good at surfacing tasks from all over your notes collection. org-mode can manage that but it is very oriented around the org agenda as a way to see your tasks, and the agenda doesn&rsquo;t scale well with large collections of notes.</p>
<p>There are a few ways of coming at that problem, ranging from &ldquo;just be selective about which files go into the agenda&rdquo; to functions that pre-scan your corpus cheaply then assemble a list of agenda files only from things with active todos.</p>
<p>I am still a long way away from having a notes collection large enough to slow the agenda down, but it&rsquo;s growing.</p>
<p>So, in the midst of poking around and trying to decide whether or not to add one of several possible lumps of lisp to my config, I came across <a href="https://baty.blog/2022/keeping-my-org-agenda-updated/">Jack Baty&rsquo;s post on his own solution,</a> which is limiting your agenda files to just project files, based on Denote&rsquo;s naming convention.</p>
<p>My own Denote hierarchy has a bunch of little atomic notes, then a collection of <kbd>project</kbd> files, <kbd>area</kbd> files, and <kbd>people</kbd> files. It also has a <kbd>home</kbd> file that indexes the project and area files, and an <kbd>inbox</kbd> file. I&rsquo;ve been experimenting with a <kbd>foundations</kbd> type that I use to define core concepts. For instance, my team&rsquo;s work a specific tool migration might be a <kbd>project</kbd> file; while portfolio management generally is an <kbd>area</kbd> file. Defining what even is the portfolio, what it means for someone on the team to own a piece of the portfolio, and what expectations are for portfolio owners is a piece of <kbd>foundation</kbd> thinking.</p>
<p>I can see putting tasks in those special-purpose files, and will tend to avoid putting them in tinier atomic or fragmentary notes files. Feels like a reasonable compromise that discourages littering my notes with tasks, keeps org&rsquo;s agenda efficient, and provides a little bit of structure that I feel can go missing in a strictly anti-hierarchical note setup.</p>
<p>The code Jack shared defines <kbd>denote-to-agenda-regexp</kbd> to make a decision on whether or not some supporting functions should include a file in the agenda. He limits his to files with <kbd>_project</kbd> in the name (derived from having <kbd>project</kbd> somewhere in the filetags). I wanted to include <kbd>area</kbd> and <kbd>people</kbd>, too, so I expanded the regexp (inelegantly):</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defvar</span> <span class="nv">my-denote-to-agenda-regexp</span> <span class="s">&#34;_project\\|_area\\|_people\\|_inbox&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s">&#34;Denote file names that are added to the agenda.
</span></span></span><span class="line"><span class="cl"><span class="s">    See </span><span class="ss">`my-add-denote-to-agenda&#39;</span><span class="s">.&#34;</span><span class="p">)</span></span></span></code></pre></div>
<p>I&rsquo;ve also added the project/area/person name as the <kbd>#+category:</kbd> property in my agenda-ready files, since that cleans up the far-left column on the agenda, which is the (very long in Denote) filename by default.</p>
<h2 id="forsaking-mobile">Forsaking mobile</h2>
<p>I guess the other development of all the cleanup and fussing was choosing to not care about the mobile use case for this stuff <em>at all</em>.</p>
<p>I think I have shared elsewhere that one of my formative work experiences included being handed the keys to a portfolio of websites with zero supporting staff and being expected to keep comment moderation going seven days a week. I developed a small fixation around mobile work that predated useful technology for mobile work by a good number of years. It made sense because it allowed me to be out and about and doing little moderation micro-tasks whenever.</p>
<p>Since then, I&rsquo;ve had this scar or kink or crease in my brain about making sure the mobile bases are covered, but the more I think about it the more I think it&rsquo;s a bad idea. It&rsquo;s bad enough that I let Slack or Gmail on my phone, let alone wanting all my work notes and tasks available wherever I am. I suppose in a truly, truly dire situation I could use <a href="https://blink.sh/">Blink</a> to sign in to the desktop machine and run an agenda or look up a note, but that&rsquo;s a ridiculous scenario and the better answer is probably &ldquo;yeah, sorry, away from my computer rn.&rdquo;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-06-13</title>
      <link>https://mike.puddingtime.org/posts/2023-06-13-daily-notes/</link>
      <pubDate>Tue, 13 Jun 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-06-13-daily-notes/</guid>
      <description>Figuring out connection points between Denote and non-Emacs apps like Things with custom links and elbow grease. Automating org dblock rendering. Making org-export output more amenable to SimpleCSS. Text expansion with espanso.</description>
      <content:encoded><![CDATA[<h2 id="making-links-to-pages-in-my-denote-web-export">Making links to pages in my Denote web export</h2>
<p>I&rsquo;m back and forth on whether to stick to org-gtd or to start using Things again. I wanted to re-tag some actions on the fly this morning and it took some extra typing I didn&rsquo;t want to do.  So far, my org-gtd and Denote usage haven&rsquo;t intersected, and there is no way I can think of that any of the existing mobile tools could do anything for me at all if they did.  So as I think about my Emacs/Denote/org estate, and how to decompose it and remix different pieces, there&rsquo;s a pretty clean perforated line between written notes and tasks, provided I can find a way to bridge the two.</p>
<p>One thing I used to do when I was a regular Bear user was create a Things project for all the people I had regular 1:1s with. I set up section headings for each person in the project under which I dropped actions I owed or had delegated. At the top of that project, I had a list of links to my 1:1 notes with each person to make it easier to get to past notes during a meeting without looking them up in Bear &ndash; just save the URL to their 1:1 file,  click the link, Bear opens to where I need it. This felt like a clean way to let two tools do what they&rsquo;re best at: Things does have some basic Markdown editing, but I don&rsquo;t generally want to embed writing/thinking in actions.</p>
<p>Unlike Bear, Emacs has the disadvantage of not being everywhere I would use Things, but since I&rsquo;m exporting my Denote stuff to the web, my notes do have a permanent URL, and it&rsquo;s derived from the filename of a given note, so it&rsquo;s easy to convert the file path to the URL.</p>
<p>This function copies that URL to the clipboard when I&rsquo;m in a note. No error- or sanity-checking: The results will be nonsense if I invoke it outside my Denote hierarchy, but I bound it to my Denote menu in Doom Emacs so it&rsquo;ll only come up when it&rsquo;s contextually appropriate:</p>






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






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






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






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






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






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






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






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






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






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






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">[<span class="nt">Items tagged `foo` in Things</span>](<span class="na">things:///search?query=%23foo</span>)</span></span></code></pre></div>
<p>(I&rsquo;m not sure, btw, how to do that in yasnippet and need to figure that out.)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-04-11</title>
      <link>https://mike.puddingtime.org/posts/2023-04-11-daily-notes-for-2023-04-11/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-11-daily-notes-for-2023-04-11/</guid>
      <description>pinboard/Emacs integration, hoping Yellowjackets doesn&amp;rsquo;t disappoint, blogging with ox-hugo.</description>
      <content:encoded><![CDATA[<h2 id="bookmarks-and-org">Bookmarks and org</h2>
<p>I&rsquo;ve been back and forth on bookmarking. For a period there was some noise about pinboard.in appearing moribund. The obvious explanation for some of the noise generally was that Maciej Cegłowski&rsquo;s smartest guy in the room schtick had finally run afoul of peoples&rsquo; sensibilities. The one supporting piece of evidence I had in my own experience was an unanswered bug report about broken feed functionality.</p>
<p>So I tried raindrop.io (didn&rsquo;t really take), and then just stopped bookmarking stuff because I wasn&rsquo;t sure where to put it, and then started playing around with beorg to capture bookmarks on mobile, which worked fine but I hadn&rsquo;t yet figured out a way to make the practice scale.</p>
<p>Well, the bug I reported about pinboard got fixed, Maciej seems to be active online again, and pinboard is my favorite service, so I&rsquo;m using it. For mobile I like the <a href="https://get-pins.app">Pins app</a> a lot. It&rsquo;s just clean and simple, and it&rsquo;s a universal app so its share extension works on my Macs in apps like Reeder.</p>
<p>Since I&rsquo;ve moved blogging into Emacs, it&rsquo;d be nice to be able to get links I save out of pinboard and into a buffer, and it looks like <a href="https://github.com/davep/pinboard.el">Dave Pearson&rsquo;s pinboard.el</a> will suffice. It provides a pinboard client in Emacs: invoke it, get a list of your bookmarks, do things with them. Konrad Hensen wrote a function that can <a href="https://gist.github.com/khinsen/7ed357eed9b27f142e4fa6f5c4ad45dd">store a pinboard.el link as an org link</a>.</p>
<h2 id="blogging-and-org">Blogging and org</h2>
<p>I added <a href="https://ox-hugo.scripter.co">ox-hugo</a> to my blogging toolkit as an experiment in blogging with org-mode. You just add a section to a monolithic file, compose with org markup, and save. ox-hugo exports the content to a well-formed Hugo Markdown file. Used in conjunction with Hugo server&rsquo;s <code>--navigateToChanged</code> switch, realtime feedback is easy.</p>
<p>Some things I like about it:</p>
<ul>
<li>Adding <code>TODO</code> to the front of the heading makes the post a draft.</li>
<li>Normal org tags at the end of the heading, e.g. <code>:emacs:gtd:blogging:</code> become tags for the post.</li>
<li>Participation in the org ecosystem, e.g. being able to use <code>org-refile</code> on stuff that&rsquo;s not quite ready for today&rsquo;s edition.</li>
</ul>
<p>I&rsquo;m not so sure about it as a longterm document pipeline. This isn&rsquo;t a workflow amenable to anything other than a normal computer that can properly run Emacs. That&rsquo;s not a big deal right now: My iPad is pretty strictly for content consumption these days. But when I think about camping season arriving and how much better suited to that an iPad is, I have qualms. I have no problem imagining an iPad-centric Hugo workflow using any of a number of tools, especially given my publishing pipeline. I don&rsquo;t like the idea of dragging a laptop along.</p>
<p>I get the feeling this is going to land in the &ldquo;fun but not for me&rdquo; pile.</p>
<p>On the other hand, I&rsquo;ve got Tailscale running and there&rsquo;s Blink. I can always get to something that can run Emacs that way. If I&rsquo;m on the grid enough to blog, I&rsquo;m on the grid enough to <code>mosh</code> into something and push out a post.</p>
<p>It&rsquo;s worth a little thinking because the more I do with org mode the more I realize it&rsquo;s how I&rsquo;d prefer to author stuff of any complexity, or stuff that could become part of something more complex at some point.</p>
<h2 id="hoping-yellowjackets-won-t-disappoint">Hoping Yellowjackets won&rsquo;t disappoint</h2>
<p>Al and I have been watching the first season. We&rsquo;ve arrived in the traditional part of a ten-episode season, where things begin to bog down a little and I&rsquo;m hoping it will get a little more sprightly again. And I&rsquo;m going through my usual qualms about shows that look and act like this one: I don&rsquo;t mind some mystery, but I have lost my tolerance for series that won&rsquo;t resolve anything. If it looks like it&rsquo;s going to be an endless puzzlebox, it&rsquo;s not going to get my time.</p>
<p>The ten episode thing: I wish I knew some television writers who could walk me through the realities of doing an eight-, ten-, twelve-, or twenty-episode season.</p>
<p><em>Sharp Objects</em>, <em>Mare of Easttown</em> and <em>Severance</em> all came in at seven or eight episodes, and they felt just right to me. Things stayed tight and they kept moving. <em>For All Mankind</em> comes in at ten per season, and sometimes it drags. <em>The Wire</em> ran 12 or 13 episodes per season (except the last), and I&rsquo;d say it could have tightened down, too.</p>
<p>You just hit those moments, I suppose, where all the setup is done, the Big Problem for the season is established, and &hellip; wham, into a bottle episode or a dream episode that feels loosely connected &ndash; or a subplot goes on unresolved for a few episodes &ndash; and you feel the momentum seeping out.</p>
<p>I suppose there are some economics around the first run and eventual syndication, and probably increasingly good metrics around what audiences will stick with in what numbers. I just wonder what about the structure (at the episode level and the season level) makes things seem to get a little pokey at ten episodes. I took a writing for film class years ago where the person who did the screenplay for <em>Erin Brokovich</em> sat with the class and walked us through the structure, and I&rsquo;ve read since that these things follow predictable patterns you mainly notice when they&rsquo;re broken. I can see how perhaps writers learn a certain tempo within a certain framework and end up with more time than they know what to do with.</p>
<p>And maybe it&rsquo;s just me being affected by streaming and binge-watching. I&rsquo;m still generally on team &ldquo;3 hours for a movie? Sounds like a good deal!&rdquo; so I don&rsquo;t think my attention span has been completely ruined, but there&rsquo;s just so much out there &ndash; maybe I&rsquo;ve been conditioned by the bounty that is Peak Television to look ahead to the next thing in a way I have not by movies.</p>
<p>Anyhow: We are enjoying it for now. The cast is solid, the timeline switching keeps things moving, and showing us the fate of one of the main characters in the first scene of the first episode seems to have worked, though I get the feeling something will happen along the way to complicate that.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
