At work I’ve reverted back to ‘old’ Outlook. It’s still so much better than ‘new’ Outlook. It makes me sad to see how old powerful applications are being set aside for lowest common denominator webapps. Dumbing down. Or enshittification.

The Value of Blogging

Joan Westenberg’s post, The Case for Blogging in the Ruins has been working around the ‘blogosphere’. Is the blogosphere even a thing anymore? It used to be massive, which is exactly the point of Westernberg’s piece.

I’ve blogged for decades now. The early Blogger and Movable Type accounts are gone now. Some of the latter I saved, but despite not having a full archive here on this site, there is certainly enough.

Over the years my blogging has had different foci, probably reflecting the growth and change in me and my own interests over the years. My blogging has also been influenced by short-form social media, in that most of my posts now are short. I rarely have the time or motivation to put forward a longer think-piece.

Westenberg says this in their post about what makes a blog work:

“They build. The best blogs create posts that reference and extend earlier posts, developing ideas over time rather than starting from scratch each week. Gwern’s site is an extreme example, with entries that get updated for years, accumulating evidence and refinement. But even a modest version of this works: a body of work that compounds.”

To confirm this, I can refer back to a post I made on August 14, 2018, Blogging As an Exercise in Thought where I also talk about my history of blogging. I’m reminded by this post that I also hosted a blog on Blot for a number of years! There we go, my blog has supported my own memory!

I still read many blogs every day, mainly via RSS. I still prefer them to social media. I hope that they don’t wither and die completely, and that people will continue to find ways to use the medium to build their own long-lasting presence on the web.

I appreciate Westenberg’s post and I hope that I will find time to blog a little more this year.

Finished reading: Are You Mad at Me? by Meg Josephson 📚Like so many “self-help” books there is a lot of fluff around built around some short but core concepts. A book where I think, “this could have been a blog post”, which might actually be where the book originated - but I haven’t done my research as I bought the book on a whim.

I finished The Drifter. What a great game. Adventure point and clicks are the best!

Is this the best subscription cancellation deal ever?

SCR 20251226 lzpk.

Christmas movie on the outdoor screen at Perth Stadium. 🚴

Summer Ride

I couldn’t take anymore Tahoe Liquid Glass shenanigans. So I’m back to this classic look.

At least I have my proxy icons back.

macOS Tahoe with increased contrast

Defaults (2025)

It has been more than 2 years (😱) since Episode 097 of my podcast Hemispheric Views, where we held a Duel of the Defaults! competition.

Two years on, where do I stand now?

If there is a change from my list last year, I’ve indicated it with a leading ✨.

Change? Category Default Comment on Change
Mail Client Fastmail Goodbye Fmail3
Mail Server Fastmail & Apple Mail iCloud is there, but I don’t actively use it
Notes Obsidian for Work; Apple Notes for Home
To-Do OmniFocus
iPhone Photo Shooting Camera.app
Photo Management Photos.app
Calendar BusyCal (plus Calendar.app)
Cloud file storage iCloud (plus OneDrive)
RSS Reeder with FreshRSS
Contacts Contacts.app
Browser Safari Despite trying Vivaldi and Firefox, I always come back to Safari
Chat Signal
Bookmarks Safari Goodlinks is gone; back to basics
Read It Later GoodLinks Rarely used now; very few worthwhile things to read (later) on the web
Word Processing n/a I don’t process words
Spreadsheets Numbers (plus Excel)
Presentations n/a I don’t do presentations
Shopping Lists AnyList
Meal Planning AnyList
Budgeting & Personal Finance Actual Budget on PikaPods
News RSS & NYTimes
Music Apple Music
Podcasts Castro I got bored with PocketCasts

Four changes this year from 23 categories. 8 of the 23 are true defaults.

For about the 14th time in my life I am once again experimenting with David Seah’s Emergent Task Planner sheets.

It’s Hemispheric Views episode 150 Or is it 152? Or 153? Who knows, but it’s here! We’ve got mail and Martin has coffee! Pay attention, there is homework for you in this one.

I’m sure I’m not supposed to see the icons being drawn consecutively onto the screen in iOS 26.1. Such poor software quality.

Saw Gomez perform tonight. So awesome!

Inktober 2025 Day 31. Award

Inktober 2025 Day 30. Vacant

Inktober 2025 Day 29. Lesson

Inktober 2025 Day 28. Skeletal

Inktober 2025 Day 27. Onion

Automating the Bridge Between Obsidian and OmniFocus

The following article is predominantly a record for my future self. The solution as described was imagined and thought through by me, but development was helped by ChatGPT because I don’t have the necessary coding skills. As it took a long time with multiple iterations, I asked ChatGPT to summarise and document the flow of my attempts.

As such, the majority of this article is AI-generated, but proofread and edited by me, a human.


For years, I’ve kept OmniFocus as my single source of truth for tasks. Every commitment lives there — work projects, household jobs, even odd ideas that might grow into something.

But my work notes live in Obsidian. That’s where meeting records, brainstorms, and running logs of ideas go. The two systems complement each other perfectly — except when they don’t talk.

I wanted a way to extract the tasks I jot into Obsidian (- [ ] Do the thing) and have them appear automatically in my OmniFocus inbox. No manual copy-and-paste. No Quick Entry window. No duplicative reliance on the Tasks plugin for Obsidian. Just seamless capture.


The goal

  1. Identify unchecked tasks in a note.
  2. Send each one to OmniFocus Inbox.
  3. Include a backlink to the originating Obsidian note.

In short, bridge the gap between where ideas start (Obsidian) and where they’re managed (OmniFocus).

I thought this would be quick and easy. It definitely wasn’t quick.


The first ideas: AppleScript

OmniFocus supports AppleScript. The theory was to have a script read tasks from the note, feed them to OmniFocus, and be done.

It didn’t go well.

AppleScript threw up errors like:

“Expected end of line but found plural class name.”

Keyboard Maestro tried to help, but AppleScript didn’t behave the same when triggered from automation tools. Even when it ran, nothing actually appeared in the Inbox. After several dead ends, I concluded AppleScript might be powerful — but it’s also brittle, opaque, and slow to debug.


The URL scheme breakthrough

That led me to OmniFocus’s x-callback-url API. This allows new tasks to be created via a simple URL such as:

omnifocus://x-callback-url/add?name=Test&note=Hello&autosave=true

The autosave=true parameter was the key. It bypasses Quick Entry completely and saves the task directly into the Inbox.

That was exactly what I wanted: a silent, background handoff.


Enter LaunchBar… and exit again

My first working prototype ran from LaunchBar.

I created an action that triggered a shell script, which in turn parsed the current Obsidian file and sent the tasks via the OmniFocus URL scheme.

At first, it looked promising. LaunchBar picked up the script, presented it as an action, and I could trigger it with a simple keyword. But then the gremlins arrived:

After hours of troubleshooting, I realised the reliability wasn’t there. The script itself worked — but LaunchBar wasn’t the right launcher.


Keyboard Maestro saves the day

I rebuilt the automation inside Keyboard Maestro, which handles timing, focus changes, and system permissions much more predictably.

The macro:

  1. Copies the current Obsidian note URI.
  2. Runs a Bash script that parses the note.
  3. Sends tasks straight to OmniFocus using the URL scheme.

Everything was almost perfect — except nothing happened. The logs said “No open tasks found.”

After several tests, I discovered the real culprit: macOS’s ancient Bash 3.2, which lacks mapfile. My whole parser depended on that command, so the script never captured anything.


The Bash 3.2 workaround

The fix was to make it Bash-3.2-safe. The parsing logic was recreated in Perl, which handles UTF-8 and regex. Instead of mapfile, it outputs each task line to a temporary file and loops through them safely.

/usr/bin/perl -ne 'if (/^\s*[-*]\s*\[\s\]\s+(.+?)\s*$/){print "$1\n"}' "$FOUND" > "$TITLES_FILE"

Each task line is then URL-encoded and sent directly to OmniFocus:

open "omnifocus://x-callback-url/add?name=${NAME}&note=${NOTE}&tags=Obsidian&autosave=true"

No Quick Entry panel, no intermediate prompts — direct to the Inbox.


The Alfred solution

The final piece was Alfred. After LaunchBar’s unreliability, I moved the trigger there. Alfred handled it flawlessly.

Now I just type cap in Alfred (for , and it fires the Keyboard Maestro macro that runs the script. Within a second, all unchecked tasks from my current Obsidian note appear in OmniFocus, tagged “Obsidian” with a backlink to the note.

Alfred capture No friction, no crashes, and no mysterious “handler” errors.

The feeling of done

When the first test task appeared silently in my OmniFocus Inbox, I felt great satisfaction and relief. After all the false starts — AppleScript’s syntax chaos, Bash’s 2007 limitations, and LaunchBar’s quiet failures — it finally worked.

That single, silent task represented a perfect workflow: low friction, invisible automation, total reliability.


Lessons learned


The final system

It’s simple, fast, and utterly reliable — everything good automation should be.


When people talk about “seamless capture” in GTD, this is what they mean. The tools fade away, leaving nothing but flow. Now, if only I could have this work on Windows…

Inktober 2025 Day 26. Puzzling