Daily Notes for 2023-05-02

ยท 1346 words ยท 7 minute read

Mackup and Dropbox ๐Ÿ”—

I recently recommended Mackup, a Mac config syncronization tool, but I’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’t able to write to its prefs file. I put Mailmate in Mackup’s skip list, removed the symlinks and let it write its files again and all was well. Searching Mackup’s issues, I found someone experiencing a similar issue with Xcode 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’s move to the CloudStorage folder.

I’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 ~/bin. It doesn’t work so well with Terminal.app, and gets a little weird now and then with a few other things.

Just … proceed with caution, I guess is the advice. For now I’ve got Mailmate, Terminal.app, karabiner, and Bartender on the skip list. That’s fine for most of them: They’re generally best configured a little different between laptop and desktop anyhow.

My org-contacts file and Things ๐Ÿ”—

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’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 mailto: link and open 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 SPC C m (“leader - CRM - mail”) and get a new message.

I’m on the record somewhere about not liking the emphasis on URL schemes for Mac automation. I don’t like the ins and outs of encoding values and cramming data into that format. At the same time, it does 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’m keeping could interact with the wider Mac ecosystem in a sort of “if needed” manner, hence this little thing.

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 “start date.” I can get at it with SPC C g (“leader CRM thinGs”). I don’t mean to use it? I was just curious. I’m not sure.

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’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.

That’s always the struggle with Emacs: What can it do, and what should it do?

The temptation is to crawl into a uni-environment and torture everything into some kind of alignment, but that’s brittle. It might feel 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 “getting things done” in a very mixed, tactical, “chores, obligations, and interrupts” kind of way, and getting things done in a very “life is an information problem” kind of way.

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 “chores and household projects” tool, I’m a little less certain about it, mainly because of the mobile piece. beorg is great, but it is also a little bit of work to use, and its syncing model is borrowed, so it’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.

So, you know, the interesting thing to me becomes “how can this sophisticated text manipulation environment fit into a broader toolkit?” 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 (“a thing I need to do”) that benefit from more thinking and more complexity? What kinds of tasks can be “dead” 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?

Interesting to me, anyhow, because my tendency, at rest – my unconscious tendency – 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.

Anyhow, here’s that function. It works okay so far. The one glitch is that the Things URL scheme won’t make a tag if it doesn’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.

(defun mph/org-contacts-to-things (contact-kind)
  "Create a Things to-do item based on the current Org Contacts record.
   CONTACT-KIND is a string that specifies the kind of contact ('ping', 'call', 'write', 'schedule', or 'follow up')."
  (interactive
   (list
    (completing-read "Contact Kind: " '("ping" "call" "write" "schedule" "follow up"))))
  (let* ((name (org-entry-get nil "Name"))
         (email (org-entry-get nil "Email"))
         (phone (org-entry-get nil "Phone"))
         (note (read-string "Note: "))
         (notes (format "Email: %s\nPhone: %s\nNote: %s" email phone note))
         (start-date (org-read-date nil nil nil "Start Date: "))
         (start-date-string (format-time-string "%Y-%m-%d" (org-time-string-to-time start-date)))
         (tags (org-get-tags nil t))
         (tag-string (if tags (mapconcat 'identity tags ",") ""))
         (title (format "%s: %s" contact-kind name))
         (url (format "things:///add?title=%s&notes=%s&when=%s&tags=%s"
                      (url-encode-url title) (url-encode-url notes)
                      (url-encode-url start-date-string) (url-encode-url tag-string))))
    (start-process-shell-command "open" nil (format "open \"%s\"" url))))

Conversations, not interviews ๐Ÿ”—

Refreshing interview closer of the month:

“We have a few minutes left, any questions of me?”

“No. I came into this thinking you’d either say ‘did you even read the job description? Now good day while I go fire the recruiter,’ or you’d see something that would lead you to want a conversation, which I hope we’ll continue so I can learn more.”

And there we were, having a conversation.

I’ve been very lucky to have had several conversations recently. It’s reminding me of the times I had interviews and how those things went wrong down the road. It’s great to end a conversation hearing the person you were conversing with say “wow, the time flew by … but this felt so organic.” 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 “well, that’s not quite what we’re dealing with here.” That’s much better than pre-thinking a bunch of answers and poring over “ten most common questions” or (if Nigel or Chris are reading) “you’re trapped in a 20’ blender” scenarios.