Hoarder

I started to write about Basic Memory this afternoon, and that gave me an idea that turned into an evening of coaching Claude into helping me do some stuff: I took my corpus of old micro.blog posts and migrated them into my notes. They’re all YAML-n-Markdown, so they could just be imported. I did the same with my mono-topic Hugo posts. Same idea. I made a script for the many, many daily posts I wrote over a few years, grateful that I stuck to a convention of organizing them with l2 headings: Each heading became a title of a new, atomized post. I did that because my daily posts could cover a lot, so now it’s all more searchable. ...

May 20, 2025 · 2 min · 378 words · mike

The eglot/lsp/apheleia rabbithole

… I went down it last night and this morning. I’m back on Doom after patiently dismantling a bunch of cruft I’d added to it. I set a goal of getting my package count under 200 (including all the batteries Doom includes). Because its default stance is that you want emacs-lsp and not eglot I went along with that initially, and it drove me a little bonkers. I think these things assume a much more organized person than I am, and LSP began to nag pretty much constantly until I made the mistake of telling it to blocklist ~/, at which point it pretty much stopped working, because there’s an implicit -r in there. ...

May 20, 2025 · 3 min · 512 words · mike

Simple 'drafts' for lmno.lol

lmno.lol does have a feature for hiding posts, but the last time I did blogging out of a monolithic file I struggled to remember to toggle that, so when I started working on a post that got longer and longer I ended up moving the work into a scratch buffer. That was annoying to me, so there’s this: (defvar mph/blog-drafts-file (expand-file-name "drafts_lmno.md" "~/journal/blog/")) (defvar mph/blog-published-file (expand-file-name "lmno.md" "~/journal/blog/")) (defun mph/move-heading-between-draft-and-published () "Move current Markdown L1 heading to the other blog file (drafts_lmno.md or lmno.md). If in drafts_lmno.md, moves to lmno.md. If in lmno.md, moves to drafts_lmno.md. Always inserts at the beginning of the file." (interactive) (let* ((current-file (buffer-file-name)) (target-file (cond ((string= (file-truename current-file) (file-truename mph/blog-drafts-file)) mph/blog-published-file) ((string= (file-truename current-file) (file-truename mph/blog-published-file)) mph/blog-drafts-file) (t (user-error "This file is not drafts_lmno.md or lmno.md"))))) ;; Save and cut the heading (save-excursion ;; Find the beginning of the current L1 heading (beginning-of-line) (while (and (not (looking-at "^# ")) (not (bobp))) (forward-line -1)) (unless (looking-at "^# ") (user-error "Not on a Markdown L1 heading")) (let ((start (point))) ;; Find the end of the current heading (next L1 heading or end of buffer) (forward-line 1) (while (and (not (looking-at "^# ")) (not (eobp))) (forward-line 1)) ;; Cut the heading and its content (let ((heading-text (buffer-substring-no-properties start (point)))) (delete-region start (point)) ;; Paste into target file at beginning (with-current-buffer (find-file-noselect target-file) (goto-char (point-min)) (insert heading-text) (save-buffer))))) (message "Moved heading to %s" (file-name-nondirectory target-file)))) ;; Doom leader key setup (map! :leader :desc "Blog commands" "l" '(:ignore t :which-key "blog") :desc "Move heading to other blog file" "l r" #'mph/move-heading-between-draft-and-published :desc "New lmno blog entry (md)" "l b" #'lmno-capture-post) Just, SPC l r on a given l1 heading to shuttle it to either the drafts file or the main blog file. ...

May 19, 2025 · 2 min · 292 words · mike

So many brooms, so many buckets (Updated)

I started the day playing around with MCP’s for Claude Desktop. I found one for Emacs and one called Basic Memory. emacs-mcp-server sends evals to your running Emacs instance via emacsclient. It’s sort of fascinating to watch in progress. Not the fastest thing on the planet, but it was a jolt the first time I turned my attention to something else and came back to realize it had created a new function and added it to my configuration. ...

May 17, 2025 · 5 min · 937 words · mike

A cautionary Syncthing tale

Over on the other blog I recently enthused about SyncTrain, an iOS SyncThing client. I still maintain it is very good, but wow did I end up foot-gunning with it: I set Journelly up to use a SyncTrain share on my iPhone, promising myself I’d make sure to do the occasional manual sync, never leave my Journelly file open when not editing it on one of the real computers, etc. I still managed to end up with a sync error, and SyncThing dutifully created a sync error file. The Journelly app picked up that file and started using it as the default file to write to – I’m assuming iOS filesystem arcana is involved – which I wouldn’t have noticed if I hadn’t manually peeked in the directory instead of just using an org-capture template to make Journelly entries on my Mac. ...

May 15, 2025 · 2 min · 400 words · mike

Offsite's over

Rainy afternoon here on the last day of the work offsite. We all went down to Pine St. Market and had ramen at the end of the day, and I said goodbye to some of the folks who came in from out of town. A few I’ll see once more for dinner tomorrow. This kind of work function is always a little draining by the time it’s over. Spending days in a small room, even with pretty good people, just takes some battery, and this one was a little melancholy because one of my teammates is moving on. ...

May 15, 2025 · 1 min · 98 words · mike

trying to get org-capture to work is nature's way of telling us to slow down

I’ve been so happy with my emacs-plus install that there was an when-not-if element to the whole thing. It came today when I tried to get org-capture to work and it … just wouldn’t. So I tried an alternate build and lost over an hour I could have spent writing to uninstalling, reinstalling, troubleshooting, rewriting a launchd agent, etc. ...

May 13, 2025 · 2 min · 281 words · mike

Digging in on the photo project

I abhor feeling attachment to things. Years ago I was out in the garage going through some old boxes at the same time I was thinking about some people I knew who seemed very connected to what they had been, and uncertain of how to go about being who they had become. So when I reached into the box and pulled out some old object I thought, “I don’t want this thing anymore,” then I thought “oh, but it’s a reminder of …” and then I thought, “I’m in no danger of forgetting that time.” ...

May 12, 2025 · 3 min · 472 words · mike

Experiments in atomic writing

I am not sure how this will go and it could be this is futzing under another guise, but this evening I did improve on my futz pattern a little by choosing to devote a journal entry to some thinking I’ve been doing about The News, how to consume it, how much to consume, etc. etc. IOW, instead of diddling around with a tool or a toy, I started writing about something that matters to me. ...

May 12, 2025 · 3 min · 606 words · mike

Eugene

We took a trip to Eugene to visit Ben. Walking around this morning we came across the Shelton McMurphey Johnson House, and then picked up the trail up Skinner’s Butte.

May 11, 2025 · 1 min · 30 words · mike