“A nearly impenetrable thicket of geekitude…”

Technology Stir Fry, the blog

This is Technology Stir Fry: the blog.

The most recent ten posts are shown below. For older material, you might like to browse by tag or by date using the menus to the left.

OmniFocus Automation

I’ve been using The Omni Group’s OmniFocus personal task manager for a decade or so now. Every few years I get the sense that I’ve strayed too far from principles and rebuild my system from scratch; 2019 has been one of those years for me. As a result I’ve been spending a lot of time with Tim Stringer’s Learn OmniFocus site, and in particular looking at how other people tailor this very flexible software to their particular needs.

A recent Learn OmniFocus workflows interview with Jason Atwood reminded me that one of the coolest features of the Mac version of OmniFocus is the ability to select a subset of the folders and projects in your database and focus in on them: if you do this, you can apply various perspectives to just those selected areas as if the others didn’t exist. I used to do this, but over time I ended up with too many folders for it to be practical. It’s an error-prone pain to select several items and then the focus action. I could reorganise my database so that I only have a couple of top-level folders, but I don’t have a perfectly hierarchical life. I want to be able to slice things up in several different ways.

Pain leads to automation, and one recent evolution of OmniFocus is towards a cross-platform automation system based on JavaScript. With a bit of help from Sal in the Omni Group Slack’s #automation channel, it turned out to be pretty easy to make plugins to select arbitrary groups of projects and folders and focus them. I’ve pushed a repository to GitHub if you’re interested in the code.

Here’s what my Automation menu looks like in OmniFocus now:

Automation Menu

So, it’s pretty easy to focus in on specific clients, or on “Work” in general, or on “Home” (defined as “not Work”).

I could bind each of those actions to a different shortcut key using the system keyboard preferences (as you can see I’ve done with the “Promote/demote” action). I have a problem remembering lots of bindings, though, so I turned to Keyboard Maestro. This is another piece of Mac software I’ve been using to some extent for ages but to which I’ve been reintroducing myself this year through David Sparks“field guide”. Amongst other things, David taught me about conflict palettes.

Here’s my OmniFocus group in Keyboard Maestro:

Keyboard Maestro "OmniFocus" Group

You can see that I have a number of macros, each bound to the same Control+F shortcut key (the group is also set to be active only when OmniFocus is the current application). Each of those macros simply invokes the appropriate menu item in OmniFocus. This is what pops up if you use a conflicted binding like Control+F:

Conflict Palette

Pressing one of the highlighted letters (‘D’, ‘H’, or ‘W’ in this example) after Control+F dismisses the conflict palette and invokes the identified macro, which in turn invokes the relevant plugin.

I find using a couple of keystrokes like this really smooth, by comparison with manually selecting multiple items with the mouse or even selecting a menu item. I often find that moving complexity out of the user interface into automation means I’ll actually use something, where it was previously too much hassle to bother with. I feel more focused already.


zsh: Not Yet

In macOS 10.15 Catalina, Apple have decided to change the default shell from an antediluvian version of bash to a very recent version of zsh.

One reason for this appears to be bash switching to GPL V3 a while back. Whatever the reason, though, they are flagging this change up pretty heavily every time you open a shell:

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.

Switching to a new shell will be something of a major project, so although I will probably do that at some point I was delighted to find that you can disable the warning by adding the following to your .bash_profile:



Signing Mail

I have been signing outgoing electronic mail, on and off, for many years.

It’s getting harder.

Follow That Link

I’ve written before about link rot on this site and the various forms it takes. As mentioned there, I now run Nanoc’s check external_links subcommand weekly to catch links when they stop working so that I can fix them.

Not all link rot shows up as a 404 Not Found status, though. Read on for a couple of classes of problem that a recent version of Nanoc helped me uncover and resolve.

Reading, 2018

This article collects comments on books I read in 2018. I’ve left out things I read but don’t have anything to say about, including (this year) all of the non-fiction and a couple of things I might come back to.

I have included only minimal spoilers. Links to books are to the author’s web site where possible.

RFC 8409

Now available for your normative referencing pleasure:

Young, I., Ed., Johansson, L., and S. Cantor, The Entity Category Security Assertion Markup Language (SAML) Attribute Types, RFC 8409, DOI 10.17487/RFC8409, August 2018.
See https://www.rfc-editor.org/info/rfc8409.

This has been cooking for quite a long time: the original discussions about the need for something like this go back to early 2012, and the initial specification drafts are from later in that year.

Some very early mail I have from Leif credits RENATER (the operator of the French research and education identity federation) with the original idea, but as you can see from the Acknowledgements section it has definitely been one of those “it takes a village” enterprises.

The technical content hasn’t changed very much in the last five years, but it’s wonderful to have a stable reference available for the many use cases and specifications we have already built, and continue to build, on top of the entity category concept.


The Elders Have Spoken

A recent Internet-Draft catches my eye: Social Media (An Apology), ostensibly authored by “The Elders of the Internet” (or “Edlers”, as Appendix A has it).

As a result, we were caught unawares when the Internet became the sink for every poorly-considered argument, paranoid thought when you wake up in the dead of night, and shrieking nutjob you’d usually cross the street to avoid.

It’s really hard to argue with all this, particularly section 2.4.


"Responsible Behaviour" Revisited

It has been more than a decade since I wrote Responsible Behaviour, in which I mused about how many Wikipedia articles the man on the Clapham omnibus would need to read to understand a particular cryptography-related joke. I saw this, in part, as a proxy for whether cryptography was becoming mainstream. I ended with:

Do you agree? More interestingly, what do you think the answer will be in ten years?


The 38th meeting of the REFEDS (Research and Education FEDerations) group took place this weekend. After Matte Miettinen had summarised the state of the Shibboleth Consortium, I gave a brief presentation updating everyone on the project’s technical status. You can download a PDF copy of the slides.

Overcast and Personal Data

My podcast application of choice is Overcast by Marco Arment. He has just released Overcast 4.2, and the announcement is notable for its enlightened approach to user privacy:

Your personal data isn’t my business — it’s a liability. I want as little as possible. I don’t even log IP addresses anymore.

If I don’t need your email address, I really don’t want it.

And the first time you launch 4.2, people with email-based accounts will be encouraged to migrate them to anonymous accounts:

Of course it’s not possible for all applications to operate anonymously, but the principle is important: you should collect only as much personal information as you require and no more. Anything more than this is a GDPR concern and a data breach waiting to happen.