<?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/mailmate/</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>Wed, 17 May 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mike.puddingtime.org/tags/mailmate/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Daily Notes for 2023-05-17</title>
      <link>https://mike.puddingtime.org/posts/2023-05-17-daily-notes/</link>
      <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-17-daily-notes/</guid>
      <description>MailMate and org-mode bundle, more org-gtd, the dysfunctional orbit of Windows and Linux UX, my weird Electra Townie.</description>
      <content:encoded><![CDATA[<h2 id="org-mode-and-mailmate">org-mode and MailMate</h2>
<p>There&rsquo;s an <a href="https://github.com/mailmate/org-mode.mmbundle">org-mode bundle</a> for <a href="https://freron.com">MailMate</a> that works pretty well: You invoke it, it drops an org-mode todo in a given file using the subject for the heading and a link to the MailMate message.</p>
<p>I added a bunch of messages with similar subjects and found it sort of hard to know which was which without opening them, so I made a small patch to the bundle that adds the name of the sender to the org heading. While I was in there, I made it a little easier to find the hardcoded file target and added it to the README instructions.</p>
<p><a href="https://github.com/pdxmph/org-mode.mmbundle.git">Here&rsquo;s the fork</a>, with all credit to <a href="https://xam.dk">Max Andersen</a>, who wrote the original.</p>
<p>(<a href="/posts/2023-04-25-daily-notes/#mail-restlessness-alights-on-mailmate">MailMate previously</a>. I ended up buying a license. I could do much of what I do with it with plain old macOS Mail.app, but MailMate is much easier to tune and ends up feeling more personalized.)</p>
<h2 id="more-org-gtd">more org-gtd</h2>
<p>I mentioned being <a href="/posts/2023-05-16-daily-notes/#liminal-state">not so happy about my liminal state.</a> It was good to get org-gtd up and running because I was able to quit fussing with <em>how</em> to get everything out of my brain and just concentrate on getting it out of my brain. Therapeutic, even. It didn&rsquo;t take long to start looking at a little of the other core GTD stuff, adding contexts and &ldquo;Area of Focus&rdquo; to all the stuff I got in there. org-gtd has some good agenda views that incorporate areas and contexts.</p>
<p>So, you know, it took a day or two to tour the options and figure things out for the next while and it&rsquo;s just &hellip; good to be using the tool, not thinking about the tool. Which reminds me &hellip;</p>
<h2 id="the-dysfunctional-embrace-of-linux-and-windows">The dysfunctional embrace of Linux and Windows</h2>
<p><a href="https://mas.to/@spacewizard/110379691363071031">My friend Ed reminded me a little</a> about tool fixation with this pretty interesting video about the ways Windows&rsquo; bad UX infects Linux desktops:</p>
<div style="text-align:center;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/GkxAp2Gh7-E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<h2 id="my-weird-electra-townie">My weird Electra Townie</h2>
<p>I have an e-bike and love it for anything further than a couple of miles. Earlyish in lockdown I realized I had more time to get around the neighborhood during the day and went out looking for an acoustic bike. I was hoping for something sort of easygoing &ndash; upright ride, plush, didn&rsquo;t need to be fast. In retrospect, what I was really looking for was some kind of Dutch bike.</p>
<p>Supply chain hell and demand made that tough, but my local Bike Gallery had a sort of weird, niche bike on the floor: An Electra Townie, but more tricked out than they usually are, and on super steep discount. It has front and rear racks, a dynamo hub, disc brakes, and it&rsquo;s a 27-speed. It&rsquo;s also sort of tall for a Townie. I just went to <a href="https://electra.trekbikes.com/us/en_US/bikes/electra-bikes/townie/c/EB300/">the Electra site</a> to make sure I haven&rsquo;t completely misunderstood what&rsquo;s &ldquo;normal&rdquo; for a Townie. This thing is not normal, and I got it for less than their current cheapest model. I&rsquo;m assuming it was an experiment in making a &ldquo;pro&rdquo; Townie of some kind that failed, so maybe they just dumped existing stock and got back to the simpler baseline.</p>
<p>I love it.</p>
<p>I test-rode a Townie a very long time ago &hellip; about the time all the bike manufacturers were in some sort of &ldquo;nobody bikes anymore&rdquo; crisis and were coming out with things like the Trek Lime with automatic shifters and relaxed geometries that wouldn&rsquo;t &ldquo;intimidate&rdquo; people. Because I wanted something that could do a nine-mile commute, the Townies and Limes didn&rsquo;t work for me: The forward-pedaling geometry made it hard to stand up on a hill, and they were geared in a way that made them feel like renting a U-Haul with a throttle governor.</p>
<p>This bike still has the forward-pedaling geometry and the relaxed, swept back handle bars. To get it to fit correctly I did have to move the seat forward more than I have on other bikes, so it seems like a bike that would stop being a good fit for anyone under 5'9&quot; or so, but could accommodate someone around 6'2&quot; or 3. In fact, Ben rode it comfortably and he was easily 6'1&quot; or 6'2&quot; at the time. Combined with the big seat and the inability to really lean forward and bear down, it&rsquo;s content to live in the middle gears and just sort of roll along.</p>
<p>The built-in lights are probably best used to look for potholes at night, and you should have supplements for visibility. The front rack isn&rsquo;t huge, but comfortably carries a box of Trader Joe wine. The rear rack is a little weird: It doesn&rsquo;t seem to be compatible with any of the assorted fitment standards, including the Townie basket we got for Al&rsquo;s Trek e-bike. But it works fine with an Ortlieb or Banjo Brothers panniers, and there&rsquo;s always the milk crate treatment.</p>
<p>Oddities and almost-but-not-quite features aside, the thing I love about it is how upright and comfortable the ride is, and how smoothly it rolls on its largish wheels. I have taken it all the way downtown via both the Springwater and Clinton St. (8 and 6.5 miles, respectively) and it has been comfortable. You just can&rsquo;t try to put too much through the drive train or crank up any hills. You don&rsquo;t really corner with it: Turns are more like a kind of gliding swoop motion.</p>
<p>So it <em>feels</em> to me more or less like what I imagined the Dutch bike I wanted would feel like. Probably less efficient and more wasted power, but upright and easygoing. When I go around the neighborhood, up to Foster, over to Woodstock, or down the Springwater, it feels more like a sightseeing tour than a commute.</p>
<p>Anyhow, I&rsquo;ve had it out for the first time in a little while over the past week and was reminded how much I enjoy it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-05-02</title>
      <link>https://mike.puddingtime.org/posts/2023-05-02-daily-notes/</link>
      <pubDate>Tue, 02 May 2023 00:00:00 -0700</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-02-daily-notes/</guid>
      <description>A Mackup/Dropbox glitch, integrating org-contacts and Things, conversations not interviews.</description>
      <content:encoded><![CDATA[<h2 id="mackup-and-dropbox">Mackup and Dropbox</h2>
<p>I recently recommended <a href="https://github.com/lra/mackup">Mackup</a>, a Mac config syncronization tool, but I&rsquo;m having a few issues with it now. In general, it does a pretty good job with most apps, but I ran into a weird bug with Mailmate where it kept forgetting all my settings. After a few go-rounds I opened up the Console and searched for Mailmate messages and found it wasn&rsquo;t able to write to its prefs file. I put Mailmate in Mackup&rsquo;s skip list, removed the symlinks and let it write its files again and all was well. Searching Mackup&rsquo;s issues, <a href="https://github.com/lra/mackup/issues/1891">I found someone experiencing a similar issue with Xcode</a> and learned it seems to be a thing with Dropbox and iCloud and certain apps. In the case of Dropbox, it has come with that app&rsquo;s move to the <code>CloudStorage</code> folder.</p>
<p>I&rsquo;m not sure this is enough to get me quit using it. It works quite well with my Emacs config, gpg, ssh, zsh, and other stuff. I also like using it for syncing my <code>~/bin</code>.  It doesn&rsquo;t work so well with Terminal.app, and gets a little weird now and then with a few other things.</p>
<p>Just &hellip; proceed with caution, I guess is the advice.  For now I&rsquo;ve got Mailmate, Terminal.app, karabiner, and Bartender on the skip list. That&rsquo;s fine for most of them: They&rsquo;re generally best configured a little different between laptop and desktop anyhow.</p>
<h2 id="my-org-contacts-file-and-things">My  org-contacts file and Things</h2>
<p>I stopped using mu4e. I was uncomfortable with the interplay between several different clients (both automated and user-facing) and my Maildir and IMAP. That left a a small hole in the functionality I&rsquo;d built into my org-mode PRM: being able to quickly mail a contact from a Doom Emacs menu. So I made a quick function that just turns the email address in the org-contacts record into a <code>mailto:</code> link and <code>open</code> call to the system that invokes my preferred mail client (Mailmate at this point). So if the point is over an org-contacts heading I can <code>SPC C m</code> (&ldquo;leader - CRM - mail&rdquo;)  and get a new message.</p>
<p>I&rsquo;m on the record somewhere about not liking the emphasis on URL schemes for Mac automation. I don&rsquo;t like the ins and outs of encoding values and cramming data into that format. At the same time, it <em>does</em> seem to have kept the idea of Mac end-user automation from fading away. So as I sat there looking at my new mailto function, I wondered about how all the contact data I&rsquo;m keeping could interact with the wider Mac ecosystem in a sort of &ldquo;if needed&rdquo; manner, hence this little thing.</p>
<p>It just provides an interactive menu for selecting a contact activity (ping, call, write, etc.) and an interactive date picker, then makes a Thing todo that includes the tags for the contact, with a &ldquo;start date.&rdquo; I can get at it with <code>SPC C g</code> (&ldquo;leader CRM thinGs&rdquo;).  I don&rsquo;t mean to use it? I was just curious. I&rsquo;m not sure.</p>
<p>What I am learning as I use org-mode day-to-day again is that there are things that come naturally to it and that do not come naturally to it. I&rsquo;ve got working integrations with my calendar, for instance, but calendar syncing is another one of those things that eats the one thread you have to work with when it runs, and sometimes it does mysterious things if you mess with a plaintext representation of a more complex data structure that was never written with direct human interaction in mind.</p>
<p>That&rsquo;s always the struggle with Emacs: What <em>can</em> it do, and what <em>should</em> it do?</p>
<p>The temptation is to crawl into a uni-environment and torture everything into some kind of alignment, but that&rsquo;s brittle. It might <em>feel</em> good if your temperament or proclivities lead you to feeling comfortable with that particular shape, but there are tradeoffs whether you acknowledge them or not. In this particular case, the line I am sensing is the line between &ldquo;getting things done&rdquo; in a very mixed, tactical, &ldquo;chores, obligations, and interrupts&rdquo; kind of way, and getting things done in a very &ldquo;life is an information problem&rdquo; kind of way.</p>
<p>I love org-mode as a way of organizing information and thoughts. In particular, I am very fond of all the refiling capabilities it offers, because ideas and information can be shuffled around between different contexts inside the broader org-mode context without lifting a hand from the keyboard. As a day-to-day &ldquo;chores and household projects&rdquo; tool, I&rsquo;m a little less certain about it, mainly because of the mobile piece. <a href="https://beorgapp.com">beorg</a> is great, but it is also a little bit of work to use, and its syncing model is borrowed, so it&rsquo;s not as good as a purpose-built solution. Further, it is not consistent with my desktop org-mode environments when it comes to things like the agenda views.</p>
<p>So, you know, the interesting thing to me becomes &ldquo;how can this sophisticated text manipulation environment fit into a broader toolkit?&rdquo; How can all these things interconnect and complement each other? What are the kinds of work that makes sense living in a purpose-built tool because their typical context favors less thinking and less complexity, vs. the kinds of work that are broadly the same thing (&ldquo;a thing I need to do&rdquo;) that benefit from more thinking and more complexity? What kinds of tasks can be &ldquo;dead&rdquo; and in a little purpose-built silo, and what kinds of tasks benefit from a little bit of added complexity to exist in a better context? How could a thing move from one environment to the other?</p>
<p>Interesting to me, anyhow, because my tendency, at rest &ndash; my unconscious tendency &ndash; is to want everything in one tool, but I continue to learn over time that the one-tool outlook breeds its own kinds of complexity.</p>
<p>Anyhow, here&rsquo;s that function. It works okay so far. The one glitch is that the Things URL scheme won&rsquo;t make a tag if it doesn&rsquo;t exist, so I had to go in and tag an existing todo with all my contact types (friend, network, recruiter, etc.) to get the function to properly tag a contact todo.</p>






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






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






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






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/create-gcal-all-day-appointment-with-contact</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Create a new all-day appointment in Google Calendar and invite the contact at point.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let*</span> <span class="p">((</span><span class="nv">date</span> <span class="p">(</span><span class="nv">org-read-date</span> <span class="no">nil</span> <span class="no">t</span> <span class="no">nil</span> <span class="s">&#34;Date: &#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">formatted-date</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y%m%d&#34;</span> <span class="nv">date</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">next-day</span> <span class="p">(</span><span class="nf">format-time-string</span> <span class="s">&#34;%Y%m%d&#34;</span> <span class="p">(</span><span class="nf">time-add</span> <span class="nv">date</span> <span class="p">(</span><span class="nf">*</span> <span class="mi">24</span> <span class="mi">60</span> <span class="mi">60</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">contact-email</span> <span class="p">(</span><span class="nv">org-entry-get</span> <span class="p">(</span><span class="nf">point</span><span class="p">)</span> <span class="s">&#34;EMAIL&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">         <span class="p">(</span><span class="nv">url</span> <span class="p">(</span><span class="nf">concat</span> <span class="s">&#34;https://calendar.google.com/calendar/u/0/r/eventedit?dates=&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">formatted-date</span>
</span></span><span class="line"><span class="cl">                      <span class="s">&#34;/&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">next-day</span>
</span></span><span class="line"><span class="cl">                      <span class="s">&#34;&amp;pli=1&amp;sf=true&amp;action=TEMPLATE&amp;add=&#34;</span>
</span></span><span class="line"><span class="cl">                      <span class="nv">contact-email</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">browse-url</span> <span class="nv">url</span><span class="p">)))</span></span></span></code></pre></div>
<p>I preferred just setting it to all-day, because I&rsquo;ve learned a few things about scheduling time to catch up with people in a non-business context:</p>
<ol>
<li>It&rsquo;s usually gonna be a few weeks out. PTO, busy, etc.</li>
<li>Setting a day is pretty easy, but setting a good time can be hard when it&rsquo;s that far out. Schedules do things, or we know a given day is <em>usually</em> our good day, but specifics can shift around.</li>
<li>Setting an all-day item and a reminder to lock down the details several days out makes it easier to agree to <em>something</em> and work out the details when calendars are a little more clear. No constant shuffling if one party or the other isn&rsquo;t in complete control of their own calendar.</li>
</ol>
<p>I wonder if I should go read a book about how to stay in touch with people. I know there are several.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Daily Notes for 2023-04-25</title>
      <link>https://mike.puddingtime.org/posts/2023-04-25-daily-notes/</link>
      <pubDate>Tue, 25 Apr 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-04-25-daily-notes/</guid>
      <description>Mail restlessness alights on MailMate, editing web forms in Emacs with Atomic Chrome, org-recur for simple and readable recurrence, GUI org-capture with Captee, more on my org PRM.</description>
      <content:encoded><![CDATA[<h2 id="mail-restlessness-alights-on-mailmate">Mail restlessness alights on MailMate</h2>
<p>I was scrolling through <a href="https://www.reddit.com/r/emacs">/r/emacs</a> today and came across someone asking for help configuring GNUS and IMAP. It has been a very long time since I did that, so I had nothing useful to contribute &ndash; that config predated me using version control &ndash; but I did notice a link to
<a href="https://useplaintext.email">https://useplaintext.email</a>, which intrigued me.</p>
<p>The last time I allowed myself to have a strong opinion about email I was writing a &ldquo;how we work&rdquo; for Puppet&rsquo;s engineering department. The boss and I believed that this was our big shot at putting a lot of email evil to rest &ndash; the scourge of top-posting, the blight of replies too widely scoped to too many groups, the simple, everyday <em>harm</em> done by needless reply-alls that add nothing.</p>
<p>It turns out the top-posters won and we just have to live with that.</p>
<p>But there was <a href="https://useplaintext.email">https://useplaintext.email</a> reminding me of a more innocent time, using the word &ldquo;harmful&rdquo; in conjunction with HTML mail, taking one more swing at putting paid to top-posting once and for all.</p>
<p>It also had a list of plaintext email clients that I gave a quick scan, and one jumped out because I&rsquo;d heard of it but never really gave it a spin: <a href="https://freron.com">MailMate</a>. It&rsquo;s a Mac email client, it defaults to plain text but will read and send HTML email (via Markdown formatting on the sending side). It&rsquo;s also super keyboard-centric. <em>And</em> it has a &ldquo;bundles&rdquo; feature that lets you write your own plugins. It comes with a bunch, including one that saves a link to a message in an org-mode file.</p>
<p>I&rsquo;ve been fiddling around with it today and like it a lot. Besides its plaintext-centricity, keyboard-centricity, and extensibility, I love that you can open up a font picker, select a piece of the interface, and define a font for it. I went through and set everything to Fira Code Retina.</p>
<figure><img src="/img/mailmate_screen.jpg"
    alt="MailMate (in Scrambled Mode) with a fixed typeface for its UI"><figcaption>
      <h4>MailMate in Scrambled Mode</h4>
    </figcaption>
</figure>

<p>So, what about mu4e? Or mutt? Still on the docket.</p>
<p>mu4e has been bugging me a little because it has a very strange and possessive set of keymappings that collide with Doom Emacs. It hijacks the space key, so my muscle memory around the spacebar as the leader key is all messed up.</p>
<p>mutt remains mutt. I have a lot of affection for it, but its main advantage over anything at all is its customizable keyboard-centric nature, and MailMate has that, too, with less fussing.</p>
<p>And there is something a little weird about running isync on two machines in the house. I mean, theoretically it is no weirder than running two IMAP clients of any kind on two machines in the house. It&rsquo;s just an IMAP client. But it&rsquo;s a busy one.</p>
<h2 id="atomic-chrome-ghosttext">Atomic Chrome/GhostText</h2>
<p>There have been a few &ldquo;use your favorite editor for text areas in your browser&rdquo; things over the years. <a href="https://github.com/alpha22jp/atomic-chrome">Atomic Chrome</a> seems to work very well with <a href="https://github.com/fregante/GhostText">GhostText</a>, an extension that works with any of Firefox, Safari, or Chrome. You just install the package in Emacs, and invoke the listener with <code>(atomic-chrome-start-server)</code> somewhere in your init. It listens for the browser extension, which can be invoked with <code>CMD SHIFT k</code>, and opens a buffer for editing.</p>
<p>As I said, this kind of thing has been around for years. The Atomic Chrome/GhostText combination just seems to be reliable in a way I haven&rsquo;t come across in the past.</p>
<h2 id="org-recur">org-recur</h2>
<p>Scheduling recurrence in org isn&rsquo;t <em>that</em> bad, but <a href="https://github.com/mrcnski/org-recur">org-recur</a> makes it really simple. It just extends org-mode&rsquo;s syntax and allows you to add recurrence rules in a heading using notation like <code>|+1|</code>, <code>|Wkdy|</code>, or <code>|1,15|</code>, for &ldquo;every day,&rdquo; &ldquo;every weekday,&rdquo; and &ldquo;1st and 15th of every month,&rdquo; respectively.</p>
<h2 id="captee">Captee</h2>
<p>org-capture, like assorted &ldquo;use your favorite editor everywhere&rdquo; plugins, is one of those things I know people have had working for a while. I remember having it set up and working a very long time ago, then I lost that config and just forgot how to do it. <a href="http://yummymelon.com/captee/">Captee</a> is a little macOS app that worked pretty much out of the box once I had an emacsclient app set up.</p>
<p>It sits in your Mac share menu and grabs URLs from browsers and browser-adjacent apps then does &hellip; stuff &hellip; to them. If you want a simple Markdown link, it&rsquo;ll do that. If you want an org-mode link, it&rsquo;ll do that, copying both to the clipboard for you. It&rsquo;ll also work with your org-capture template of choice and send a link + title + selected text to org-mode.</p>
<p>The thing I really like about it is that it works well with my RSS reader, Reeder. I&rsquo;ve just bound it to <code>C</code> in the share actions list and it saves links/titles to my org-mode inbox.</p>
<h2 id="more-on-my-org-prm">More on my org PRM</h2>
<p>I guess the thing I&rsquo;ve been calling a plaintext CRM belongs to the &ldquo;PRM&rdquo; category (for &ldquo;personal,&rdquo; not &ldquo;customers.&rdquo;) So, it&rsquo;s my org PRM now. I&rsquo;ve been getting real use out of it.</p>
<p>Building it has followed a familiar pattern of feeling a gap, thinking surely someone has filled it, realizing that is not true, then going through the same loop of &ldquo;maybe this general purpose tool?&rdquo; and a halting attempt to use it, then a realization that it doesn&rsquo;t matter how many rounded corners and AJAX transition effects the roach motel has &ndash; it&rsquo;s still a roach motel.</p>
<p>It&rsquo;s just a bad category I can only assume is as bad as it is because nobody wants to pay for it at the consumer level, and I think nobody wants to pay for it because social media has ushered in an era where we&rsquo;re all sort of performing the family holiday letter on Facebook every day of the year.  And also our &ldquo;contacts&rdquo; are all over the place. Every attempt to consolidate them and de-dup them is a minor catastrophe, with your sister-in-law manifesting nine times in the same address book and Siri forgetting where &ldquo;home&rdquo; is because something has pulled in your address-free doppelganger.</p>
<p>Anyhow, the <a href="https://mike.puddingtime.org/posts/20230413-making-a-plaintext-personal-crm-with-org-contacts/">thing I built a few weeks ago?</a> I am using it daily:</p>
<ul>
<li>Agenda reports that tell me who I haven&rsquo;t been in touch with, but want to.</li>
<li>Reminders to schedule time with people or follow up on plans.</li>
<li>Easy,fast access to past messages from contacts.</li>
<li>Quick notes about conversations.</li>
<li>Reminders to ping recruiters.</li>
</ul>
<p>There are a lot of contact management apps. There are a few apps that will issue general-purpose &ldquo;AI-driven&rdquo; reminders to contact people. There&rsquo;s nothing that feels as easy to use. I tried one that featured a lot of nice automation, but it was iOS only and there was no way to mass-select and tag contacts. Even with my relatively modest list I would have been an hour pecking in tags. With a contacts.org file, it was very fast and simple. There&rsquo;s not even a smirky &ldquo;only free if your time is worth nothing&rdquo; rejoinder, because most of these products are harder to use and take more time to deliver less, or cost astronomical amounts for what they do.</p>
<p>Being plaintext and org-mode/elisp driven, it&rsquo;s also super easy to extend and modify. If I don&rsquo;t like a decision I made about how something works, it&rsquo;s an easy change. With org-mode capture templates, the input is all uniform and structured, so I don&rsquo;t worry about backing out or moving the content elsewhere. Basically, it&rsquo;s as calming for me as text ever has been.</p>
<p>Anyhow, I use it daily, I like it a lot, and it feels good to use.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
