Compare macOS Versions with zsh and is-at-least

I have already run into an issue where I’ve had to adapt some of my scripts for Big Sur.

(n.b. if you have used the -p arg to shasum in the past, it no longer exists in Big Sur. There is a new -U option which is not the same as what -p used to do. Ironically, -p was for ‘portable’ mode.)

It has already been noted that Apple is referring to Big Sur as “macOS 11” which presumably means that sw_vers -productVersion will return ‘11.0’ once Big Sur is out of beta.

However, at least as of this writing (10 July 2020), sw_vers -productVersion on Big Sur returns ‘10.16’.

If you are trying to write a shell script which can be used on both Big Sur and earlier versions of macOS, how can you check to see which version you are running?

I would like to recommend the following, which uses a feature which I believe is unique to zsh — and since Apple has made zsh it’s preferred shell, I recommend writing all of your shell scripts in zsh (however I should note that I may be a little biased, as I’ve been using zsh for 20+ years).

is-at-least

The zsh feature in question is called is-at-least and you use it like this:

autoload is-at-least

is-at-least "$MINIMUM" "$ACTUAL"

where $MINIMUM and $ACTUAL represent the two numbers that you want to compare. What is especially nice about is-at-least is that it can compare version numbers such as 10.15.5 and 10.13.4 and 10.16 (or 11.0).

Note: the autoload is-at-least line needs to be called once-per-script before you use is-at-least but once you’ve loaded it, you can use is-at-least as many times as you want in that script.

The key here is that regardless of whether Big Sur reports itself as 10.16 or 11.0, we can use ‘10.16’ as $MINIMUM and then set $ACTUAL to the version of macOS that we are using.

Note that you don’t have to use variables here, you could do this:

autoload is-at-least

is-at-least "10.16" "$ACTUAL"

The result of is-at-least will be zero if $ACTUAL is at least equal to 10.16, or 1 if it is not.

Here’s a complete example script as a gist for those who may find it useful.

Listen, record, and even pause Relay.fm Live using VLC and Audio Hijack

Relay.fm has a schedule of live shows which you can listen to as they are recording. Most people just listen to these in a web browser, because that makes the most sense and is the easiest way to do it. If you have an iOS device you can use the free Relay.fm app which I will also use if I am not at home when a show is live.

However, if I am on my Mac when a show is live, I prefer to listen using VLC which is a free app, and I also like to record the live show, either so I can pause it if I get interrupted or can just listen later to the MP3. This is accomplished by using VLC plus Rogue Amoeba’s Audio Hijack program, which is not free, but which any self-respecting Mac nerd ought to own because it’s amazing cool and powerful. It can do 1,000 more things than this, but I’m just going to talk about this for now.

Using VLC to listen to Relay.fm live

To listen to Relay.fm in VLC, you need the URL to the live-stream server:

http://stream.relay.fm:8000/stream

That URL is only enabled when the live-stream is active.

First go the File » Open Network:

VLC: File » Open Network

Second, put the URL into the Network URL in the Open Source window that will open:

VLC: Network Pane

If the live-stream is active, it will look like this:

VLC: Live Stream window

If you’re comfortable with the command line, you can replace the first two steps by this line in Terminal:

open -a VLC 'http://stream.relay.fm:8000/stream'

which will automatically open VLC with the stream playing (again, only if it is live).

Record Relay.fm Live with VLC and Audio Hijack

If you want to record Relay.fm with Audio Hijack, we can still use VLC, and then set it up the output to go two places:

  1. To an MP3 so we can listen later

  2. To the Mac’s speakers

In number 2, we also add a “Time Shift” block, which will allow us to pause the livestream (which will keep recording in real-time to the MP3, because that is completely separate). It will also allow us to rewind the broadcast if we missed something. It’s sort of like TiVo for audio.

The setup (which Audio Hijack calls a “Session”) will look something like this:

VLC in Audio Hijack

You can see there are two “branches” from VLC, one going up to an MP3, and the other going down to “Time Shift” and “Output Device”.

We have to tell VLC what to play when this Session runs, which we can set by clicking on the VLC “block” in Audio Hijack, which will reveal the VLC settings. You can see it here:

VLC settings in Audio Hijack

Note that the box next to “Open URL” is checked, and the URL is entered into the appropriate box.

You can also change the MP3 settings (not shown) by clicking on the “Recorder” block. I have mine set to save recordings to the folder ~/Music/Audio Hijack/ with filenames that are formatted like this:

Relay.FM-2019-05-16-at-13-04.mp3

The first part makes sure that all the Relay.fm recordings will be grouped together by name, and then the date (YYYY-MM-DD) followed by the time that the recording began (13-04 refers to 1:04 p.m. local time on May 16th of 2019).

You can download my Audio Hijack session file here: Relay-to-Speakers-and-mp3.ahsession

Assuming you have Audio Hijack installed, you should be able to double-click on the Relay-to-Speakers-and-mp3.ahsession file and have it open right in Audio Hijack. You can then adjust any of the settings that you might want to change. (The file also assumes that VLC is installed at /Applications/VLC.app.)


p.s. – You can easily adapt these instructions to record other podcasts which record live, by creating a new “Session” in Audio Hijack and changing the URL of the live-stream server. For example, ATP’s URL is http://marco.org:8001/listen

With ATP, you can even use Audio Hijack’s “Schedule” feature to record Wednesday nights at 8:58 p.m. (US/Eastern) to 11:55 p.m. and automatically record most of ATP’s live shows. They do occasionally change that date/time of recording, but that will catch most weeks. I suggest starting a few minutes before 9:00 p.m. not because I want to subject you to Marco’s Phish concerts, but just to give yourself a little leeway. Also, they usually stop recording long before 11:55 p.m., but Audio Hijack is smart enough to figure out when there is no sound playing.

The Daily Lectionary Podcast

Last year (2019) during Lent, I started reading The Daily Lectionary. After Easter, I stopped. No idea why, really. I guess because Lent was over? Which doesn’t make much sense, because I enjoyed reading it every day. Nevertheless, I stopped.

Recently, I’ve been wanted to resume the practice again, but I found that I really liked the idea of reading it in community.

Unfortunately, right now we can’t really read “in community” very easily — at least not in the ways that we’re used to thinking of “community”. I did think of making it a daily Zoom call, but everyone I know right now has plenty of Zoom calls, so I decided to do something different.

I decided to start a podcast where I read the Daily Lectionary.

A Little Background Information

If you have been involved in a mainline Christian church, you may be familiar with the lectionary as a list of readings assigned for Sundays throughout the year, and it operates on a three year cycle. The Revised Common Lectionary is the most familiar, but that’s only one kind of lectionary, and there are lots of others.

The Presbyterian Church (USA) also has a two-year daily lectionary from our Book of Common Worship. You can find the readings online at . That page is updated every day to show the current day’s readings.

(Of course, there’s nothing particularly “Presbyterian” about the readings; they all come from the Christian Bible, so if you are not Presbyterian, don’t consider that a hindrance.)

Each day consists of 7 readings:

  • 2 Psalms for the morning
  • 3 Readings for mid-day
  • 2 Psalms for the evening

Now, I know you may be thinking, “Seven readings?!?” but these are not long readings. In fact usually they are fairly short, compared to readings that we usually have for a Sunday worship service.

In fact, looking at the readings from the past two weeks’, I can tell you that reading all 7 of them takes an average of 13 minutes per day! The shortest day was about 10 minutes, and the longest was about 17 minutes. If you can take 20 minutes a day, you can do this.

Also note: The podcast is just the text. There is no commentary or interpretation offered, which would not only lengthen the time commitment, but it might be a barrier to some folks. The whole point is simply to have the texts themselves to read, with the expectation that you will add your own thoughts and prayers to the hearing of them.

The mid-day readings usually include one reading from the Hebrew Bible, one reading from the epistles, and one reading from the Gospels.

The times are, of course, just suggestions. You can read them all at once, or divide them differently. I found that I preferred to read the two “morning Psalms” and the three “mid-day” readings early in the day, and then I would read the 2 evening Psalms when I went to bed. There’s no wrong way to do it.

(As an aside: the daily lectionary also tends to repeat the Psalms. This is not a mistake; it is, I believe, intended to give you another opportunity to hear something that you might have missed the first time, or that means more to you on one day than it might have on another.)

“How to listen”

There are several ways to access these recordings, so if you do not know how to do it one way, keep reading, and maybe you’ll find another option you like better.

Option 1: Listen as a Podcast

If you already know what a podcast is and how to use them, then all you need to know is that you should use https://feedpress.me/lectionary as the link to subscribe.

sketch of the Plattsburgh church

You can also search for “Daily Lectionary” in the iTunes Podcast Directory, but if you do that, please note that there are more than one, so look for either my name (Rev. Dr. Timothy J. Luoma) or the picture of the Plattsburgh church (shown here) which is what I used for artwork.

Each day’s readings post at midnight on the day of the assigned reading, so no matter how early in the morning you get up, it should be available for you.

Each episode also includes links to the text of the readings, in case you want to read along as you listen.

Option 2: Receive Links via Daily Email

If you don’t know what a podcast is, or would rather just get a link via email, you can subscribe via email using this link.

Note: To sign up, you will need to enter your email address, then you will receive an email with a link. You must click that link in the email you receive in order to confirm that you want to receive the daily emails.

You will receive one email each day with a link to the page for today’s readings. Click the link, and you will find a web page where you can listen (and read along, if you’d like).

(Unfortunately, there is no way to have the actual audio file delivered via email, but the link should make it almost as easy to get as if it was in your email.)

Option 3: Read (and Bookmark!) a Web Page

If you do not want to use either of those options, you go to this page: https://feedpress.me/lectionary and add it to your browser’s “bookmarks” or “favorites,” so you can quickly get back to it. I will also see if we can add a link to it from the church’s webpage, in case you lose the link.

From there, you can see and listen to the past several episodes.

(I’m not sure how many days back it will show, but it currently shows two weeks, which should be plenty. If you “fall behind” more than that, cut yourself some slack and start over at the current day..)

Option 4: Read using your own Bible and a printed reference guide

You can also find printable lists of the readings for each month in 2020 (or for the entire year, if you want).

Option 5: Get the readings emailed to you each day

The PC(USA) offers a daily email newsletter with the readings, so you don’t have to keep 5 bookmarks in your Bible.

Option 6: There’s an app for that!

The PC(USA) also offers an app for iPhone/iPad and Android devices which will give you the daily readings in your hand.


I hope that this will be a help to those who might want to add daily Scripture readings to their lives but have struggled to do it on their own.

The Sunday Lectionary

There is also a second podcast for those who want to focus on the Gospel reading for each Sunday, based on the Revised Common Lectionary.

It isn’t daily, it’s weekly, and it is just the gospel reading, read from several versions of the Bible. You can find that at http://feedpress.me/thisweeksgospel

Shortcut: Due Schedule Call

(A note to the reader: although it has been updated and re-posted on March 21, 2020, this was originally written in October 2018.)

Here’s a scenario that you might relate to: I’ll often think to myself, “Oh, I just remembered that I call someone, but I can’t call them right now.” Here are some examples:

  • I need to call to arrange some type of service (plumber, electrician, car shop, etc) but it’s after they are closed for the day.
  • I need to call a friend or family member, but it’s during the day when they are probably working, so I need to call them in the evening.
  • I meant to call someone earlier, but forgot, and it’s too late in the day to call them now.

Or I might want to make sure that I call someone at a specific time:

  • I need to call the car repair shop as soon as they open tomorrow.
  • I want to call Mom on Tuesday night before she leaves on Wednesday.

Et cetera.

Here’s the problem. Well, one of the problems.

If I can’t do it now, I need to set some kind of reminder to do it later.

If the time comes for me to call and I’m distracted, tired, busy, or otherwise occupied, I might not actually make the call when the time comes, so I need my Current Self to make this as easy as possible for my Future Self.

In the past, what I have done is added a note in Due which would say something like “Call AppleCare” and then set the time/date when I want to be reminded.

(If you haven’t used Due, one of the things everyone loves about it is that it will keep reminding you to do something until you actually do it. You can have the reminders repeat every minute, every 5, 15, 30, etc. It’s the most-reliable way to get yourself to do something at a specific time or close to it.)

The problem with my method has always been that the reminder would do off, and then I’d have to do to the phone app, look up the person I wanted to call, and then select the phone number. Sometimes I would realize that I didn’t have the number that I needed to call, and wondering if I had the number that I needed to call always made me dread when a reminder came up to make a call.

It’s that little bit of friction that doesn’t seem like much, but often made me resistant to actually Do The Thing I needed to do when the reminder goes off. It has also happened that I’ve dismissed the reminder, and then been distracted before I actually made the call, either because I didn’t have the number, or something similar.

Now I realize that when you see it written down, it seems silly, and maybe it is, but I’m being honest: even that little bit of “friction” in the process made it much less likely that the call was going to get made, and even when I did it, it always seemed like a bit of a hassle. One of the things I most appreciated about David Allen’s Getting Things Done book was when he talked about being lazy and therefore wanting to make things as easy as he could. He devised the whole system to make it so that when it came time to doing things, he had removed as much friction as possible.

Then I learned that Due has a built-in feature which makes this easier.

I’m sure this is mentioned in the documentation somewhere, but I stumbled across it by accident.

I set a reminder in Due, but this time I added the phone number of the person I needed to call as part of the reminder text. When the reminder alert went off and I went to dismiss it, Due automatically prompted me to call the number.

My eyes grew very wide.

“So you’re telling me that if I put the phone number into Due along with the reminder, then Due will recognize that it’s a phone number and offer to dial the phone for me?”

This is a lazy-person’s dream. Having the number right there means the friction has been removed. I can dismiss the reminder and make the call in one step! And if I realize that I don’t have the number now when I’m thinking about making the call later I can look up the number as my leisure so that I am 100% sure that I’ll have it when I need it.

“This is awesome!” I thought.

But only for a moment. Because brains are terrible, at least mine is, and so the first thing it said to me is: “You do realize that this means that you need to go to the Contacts app, find the person, select their phone number, copy the phone number, and then paste the phone number into Due, right?”

Yeah, I know it seems like that’s not a big deal, but my brain is a jerk and he knows exactly how to push my buttons.

And just like that, there was friction again. It had just from “Doing The Thing” to “Setting The Reminder” which meant now I was subtly resistant to even making the reminder to do the thing that I needed to do.

(Look, I’m not proud that I’m like this, I’m just telling you how I actually am.)

Complication #2: Google Voice

There was actually a bigger complication: most of the calls that I make are not made with via the iOS Phone.app, but with Google Voice.

I use Google Voice for all of my calls related to my “day-job”, and I need/want to use Google Voice for those calls because then the caller-ID will show the phone number that work-related people have for me, instead of my actual iPhone number.

So there’s another piece of friction.

If only there was some way to make this easier…

Cue “Shortcuts”

As most of the people who are reading this probably know, Apple just introduced an app called “Shortcuts” which is basically version 2 of an app which was previously not-by-Apple. Version 1 of the app was called “Workflow”.

I never really used Workflow much. Although Apple had approved it and let it into the App Store, I was certain that Apple would eventually kick it out of the App Store, and then I would be sad if I had built a bunch of things with it.

Well, as it turns out, not only was I wrong, but I was wrong in about as big of a way as possible. Instead of kicking Workflow out of the App Store, Apple bought Workflow, and renamed it “Shortcuts”. In iOS 13, Shortcuts was released as part of iOS itself, instead of a separate app that needed to be downloaded and installed.

Once Shortcuts became an official Apple app, I decided to start using it. But this was the first time that I had a problem that I really wanted to solve with automation on the iPhone:

“How can I make it easier to schedule calls on my iPhone?”

I was poking around in Shortcuts when I realized that I could send the name and phone number of a contact to Due fairly easily.

All I had to do was choose the person from my Contacts.app, and the shortcut could automatically copy the name and phone number, and sent both pieces of information to Due. Then all I had to do was pick a date/time for the reminder.

But what about Google Voice? Unfortunately the official Google Voice app doesn’t support Shortcuts (yet?), but there is another iPhone app for Google Voice called GV Connect which has an URL scheme (for the nerds in the audience, GV Connect supports “x-callback-url”), meaning that I can use it with Shortcuts.

“Due Schedule Call”

Putting all of this together, I made my first real Shortcut, which had 3 (or possibly 4) steps.

  1. Select a contact from my contacts list
  2. If the contact has more than one phone number, it will prompt you to choose which one to use.
  3. Next it will ask if you want to use Google Voice or the regular Phone app
  4. Finally it will send that information to Due, so you can set a time/date for the reminder.

Step #2 was the last piece that I figured out. If I didn’t have some way to choose a phone number, I was either left with the option of sending all of the phone numbers to Due (which was a terrible idea) or just automatically picking the first one (which wasn’t a great idea, although better than the previous alternative).

After that, the real magic happens between steps 3 and 4, and it happens completely in the background.

If I choose the Phone.app, the shortcut just sends the name and number to Due. But, if I choose Google Voice, the shortcut reformats the phone number into the proper syntax for GV Connect, and includes it in the text that is sent to Due.

By front-loading all of the decisions into the first part of the process (making the reminder), I have made it easier for my Future Self to actually make the phone call. It’s easier than it has ever been.

When I “check off” the reminder, Due will let me trigger the call with almost zero effort.

For the first time ever it is just as easy for me to use Google Voice as it is to use the built-in Phone app!1

See For Yourself

I made a short (about 1 minute) screencast of this shortcut in action.

In it, I setup 2 reminders:

  1. I selected a contact named “Apple” (which has multiple phone numbers) and scheduled a call to be made with the Phone app.

  2. I selected a contact named “AppleCare” (which only has 1 phone number) and scheduled a call to be made via GV Connect.

You can see it here:

(Be sure to make it full-screen so you can see things more easily.)

You can get the shortcut here.

Thanks

Thanks to Andreas Amann, GV Connect’s developer, who helped improve this shortcut.

Thanks also to Raymond Velasquez who helped me solve another part of the puzzle via a post on the forum for the Automators podcast, which is a great place to get automation help for iOS or Mac.

Side note: if you aren’t listening to Automators with Rose Orchard and David Sparks, you really should be.

Update 2018-10-13

It occurs to me that this shortcut might be useful to more people if I offered a variant without the Google Voice portion. After all, if you don’t use Google Voice, there’s no sense in having to choose the phone app each time this shortcut runs.

So I made a version without Google Voice. You can find it here:

Due Schedule Call (without Google Voice)


  1. In fact, it’s actually one less tap to use Google Voice rather than the regular phone app, because when you use the Phone app, Due offers to let you call or message the phone number, whereas with GV Connect I can specify that I want to make a call, not send an SMS. 

Tracking Subscriptions

Subscriptions are increasingly common and show no signs of going away, regardless of what you may think about them.

With subscriptions being an important part of modern digital life, it seemed wise to find a way to keep track of them. First I turned to Bobby, which is an iPhone app that has been mentioned a few times on Mac Power Users for managing subscriptions.

Having used it quite a lot now, I can say that Bobby is both great and frustrating.

Bobby’s Best Bits

It’s great to be able to set the name, price, and “cycle” (usually monthly or annually) of a subscription. Bobby has a lot of services already built-in, which will show the appropriate logo and colors for the service. Once you have your subscriptions added in, you can see the average price you are paying on a weekly, monthly, or annual basis.

Perhaps the best feature is the ability to have Bobby remind you when a subscription is coming due. You can set it to remind you the same day (don’t do that, it might be too late to cancel), or 1-30 days/weeks/months/years before it’s due.

(Not sure that “years” is a necessary option. Does anyone have a subscription that they want to be reminded about a year before it expires/renews?)

I wish Bobby let me set a default reminder. Generally I want a week’s notice on all of my subscriptions, with a few exceptions (no need to tell me Netflix is renewing, thanks), but the default in Bobby is for no reminder, and the setting is not shown by default. (More on that below.)

We’ve all had the experience of getting an email saying “Thank you for renewing your annual subscription!” for a subscription that we had forgotten about and would have cancelled if we had remembered it. Bobby can help you avoid that, but you have to remember to add it each time.

Bobby also looks very nice. The fact of the matter is that most of us could very easily just create a spreadsheet with all of this information in it. But we don’t. (Ok, except for you in the back, frantically waving your hand. We see you, and we’re all very impressed. Now sit down.)

I much prefer to look at this:

My Subscriptions in Bobby

…than at some dry and boring spreadsheet. Until I used Bobby, all of my attempts at tracking subscriptions had been short-lived. Now I think that I’ll keep at it, using Bobby, despite some problems and frustrations.

It’s worth talking about those problems and frustrations, even though I don’t think any of them should stop you from using Bobby. If nothing else, you can learn from a few of my mistakes.

Bobby’s Bothersome Bits

Here’s the UI for entering a new subscription.

two Bobby screenshots, one showing ‘More Options’ expanded

(This particular screen is for adding a subscription for a service Bobby doesn’t know about, which is why it looks fairly plain. But I want to focus on the text and fields here anyway.)

On the left side is the default screen that you see whenever you are adding a new subscription. The blank space at the bottom is usually filled with the iPhone keyboard, which you’ll need for entering in the price, name, and (optionally) a description.

The right side is the same screen as the left, except that I have tapped on “More Options” to reveal, well, you know.

The fields for Color, First Bill, Cycle, Duration, Remind Me, and Currency are selected by tapping and choosing from various “pickers” rather than typing.

“First Bill” is not the same as “Next Renewal Date”

I made two mistakes with the “First Bill” field.

The first one was a minor edge case which I only discovered because I was using a Bluetooth keyboard with my iPhone: you can get to the “First Bill” field by pressing Tab and typing something like “2020-02-06” but the app will not recognize a date entered like that, so you need to tap on the field and choose the date from the date picker.

The second mistake was, in hindsight, both more obvious and more frustrating. The field quite clearly says first bill, but the dates that I entered were for the next renewal date. I did that mostly because those are the dates which are easiest to find. I have no idea when I first started using some of these services, and I mistakenly thought that what I should do was put in when I was going to have to pay for these services again.

That, as it turned out, was a significant mistake, because if the “first bill” date is in the future, then Bobby will not include the subscription amount in the monthly estimate until that date occurs.

So, for example, if I told Bobby that my “First Bill” for Dropbox was not until, say, October 15, 2020, then Bobby assumed I was not paying for Dropbox between now and then. Now, I don’t remember when I first started paying for Dropbox (it’s been several years), but what I should have done is put in “October 15, 2019” so Bobby would know that a) I am paying for it now and b) it will renew this year on October 15th.

At first, I found this baffling. Why would I want to track subscriptions unless I am paying for them? Are there people who make plans to start subscriptions at some point in the future?

The only subscription that I could see using this for was Apple TV+ which I have for free until November 2020 but then will renew at its usual price, but that is a rare exception.

Having thought about it further, I assume that this feature is intended to be used when you start a free trial. For example, if you sign up for a free one-week trial before you start paying, you could enter the subscription info into Bobby (along with a reminder, in case you want to cancel before the free trial ends).

Once you know how it works, it is easy enough to adjust. I went through and changed all “2020” to “2019” for any active subscriptions, and that seemed to get Bobby to understand that these were all active subscriptions.

Having said that, if I could change only one thing about Bobby, it would be to change “First Bill” to “Billing Date”. If I choose a date in the future, Bobby could ask me if I want to include the cost in my monthly subscription costs starting today. It seems like a solvable problem, but in the meantime, it’s easy to overcome once you know the system.

Cycle

If I could change two things about Bobby, the second would be that I would not have “Cycle” hidden under “More Options”.

Maybe I’m unusual (don’t answer that) but most of my subscriptions are annual not monthly. In fact, in looking at my subscriptions, I have 10 which are monthly but 26 are annual. That’s a significant difference.1 The default “cycle” for subscriptions in Bobby is monthly which I can understand, since most subscriptions do have a monthly option. However, because the “Cycle” field was not shown by default, I made the mistake (several times) of setting annual subscriptions as monthly, which will really screw up the budget projections.

(Aside: If I could change two more things in Bobby, it would be a) let me set a default reminder for all new subscriptions and b) let me always see the “More Options” screen without having to tap to expand it every time.)

Again, here’s my list of subscriptions in Bobby:

This is a very visually pleasing screen, and you can see that Bobby has done very well identifying most of the subscriptions that I use.2 Under the amounts, you can see time-frames listed (6 months, 4 days, 3 weeks, etc.) which shows how long until that subscription comes up for renewal. That’s great, but I wish there was some indication of whether each subscription amount shown was per month, year, etc.

I’m not great as visual design, but I think it would be possible to put the subscription length after the price. So, for example:

Apple Music – $15.00

would become

Apple Music – $15/month

and

Dropbox – $120.00

would become

Dropbox – $120/year

You could even abbreviate “mon” for “month” and “yr” for “year” if needed. I would also drop .00 from prices. I tend to round-off all of my subscriptions anyway, because I’d rather see “$100” than “$99.99”. As I said, maybe I’m unusual.

My last frustration with Bobby is that there is no iPad app. I would love to see an iPad app, and ideally even a Mac app, because it would be so much easier to enter all of this information on my Mac where I could search my email for receipts/renewal information, and then enter it in Bobby.

Beyond Bobby

I really like Bobby and I’m glad that someone created an app like this. For $1 you can unlock unlimited subscriptions, but for $2 you can unlock all of its features and the developer will get a whopping $1.40 after Apple takes their cut.

That said, once I started tracking this information, I found a wanted a bit more. For example, for subscriptions outside of the App Store, I wanted to keep track of the URLs for changing or cancelling my subscription. I also wanted to know which payment method they were set up to use (I have a few subscriptions which are business expenses, so I want to make sure they have the correct credit card information.)

I also wanted to put any contact information that I had for the service, and if there’s one time when companies want to make sure you can contact them, it’s when you’re going to give them money, so subscription renewal emails are a good place to find contact info for each of these subscriptions.

Eventually, I did make that boring and ugly spreadsheet that I mentioned above, specifically so that I could add additional information.

Having it in a spreadsheet also means that I can see the data in other ways. For example, I made columns showing the monthly and annual price of each subscription. It’s one thing to know that I’m paying $18/month for YouTube, but when I realized that also meant I was paying $216/year for YouTube, it really brought home how expensive it is to hate commercials as much as I do.

As I mentioned, Bobby does have a reminder system built-in, but I still wish that I could see my subscriptions as a calendar in my calendar app.

I also found myself wanting to “group” subscriptions. For example, there are just some which I would never consider doing without; then there are some that I feel like I need to have even if I don’t love them (hello, Office 365); then there others that are support that I give mostly just because I want to (Six Colors, MacStories, Relay.fm, TidBITS, and Patreon).

Then there are weather apps. Until I compiled all of this info, I didn’t realize how many different weather apps I was paying for, ranging from $5/year to $25/year.

So when my subscription to forecast data through iStat Menus Weather came up for renewal, I realized that I could probably make do with one of the other weather apps that I was already paying for.

Pro-Tip: If you use iStat Menus via Setapp the weather data is included in your Setapp subscription price. I had bought iStat Menus before I started using Setapp, but now that I have Setapp, I decided installed iStat Menus through it, so I could keep using iStat Menus weather,. Setapp also includes Forecast Bar. I’m using them both. And Carrot Weather. Yes, I currently have 3 weather apps in my menu bar, and no, I don’t have a problem. What I do have is a forecast predicting up to 22" of snow.

This is harder than it sounds

What has amazed me is how difficult it actually is to track down all of my different subscriptions. I’ve been doing this for quite awhile and I still keep finding myself saying “Oh! I just thought of another one” including (literally as I was writing this) Setapp.

People used to criticize Apple for making it too hard to find your subscriptions list. It’s much easier now, just go to the app update screen on your iPhone or iPad and you’ll see it right near the top:

Screenshot of App Update screen

But the truth is that App Store subscriptions are easy to find and manage. It’s all of the other subscriptions that are harder to remember, but it’s worth taking the time to pay attention before you get another email thanking you for renewing a subscription that you had entirely forgotten about.

I thought I had a pretty good idea of how much I was paying in subscriptions, but seeing it all in one place surprised even me. It also got me to go ahead and cancel some of these that I no longer really need.

What I should do next is tally up the cost of my domain names. But… I really don’t wanna. A few years ago I had a terrible habit of collecting domain names, and they’re overly hard to let go. As I write that, I realize how stupid it is, but it’s true, and I suspect others can easily relate. Seeing those totalled would no doubt spur me to cut a few loose. After all, each domain name is probably worth about the same as a month of YouTube without commercials.

Update 2020-02-10

Someone on the Mac Power Users forum reminded me that David Sparks posted a Subscription Database (which is really a Numbers spreadsheet) that is set up to help you track subscription costs, and uses some spreadsheet calculations to do some of what I am doing by hand in my spreadsheet. Worth checking out.


Short URL for this post: luo.ma/hi-bobby


  1. I also have two subscriptions which are 24 months, one which is 36 months, and one which is 10 years. 150 points if anyone can guess what it is. 
  2. Bobby did not have an icon for Acorn, and when I added it, Bobby automatically chose the icon of a squirrel, which I thought was extremely clever. I realize that it was probably just random, but I like to think it wasn’t. Oh, one more item for the Bobby wishlist: let me use my own images, rather than just selecting from Bobby’s selection of icons. 

Using Keyboard Maestro to make the Home.app Less Terrible

The Home.app on Mac is, frankly, not very good.

It was originally released as an example of iOS apps coming to the Mac, and when it first came out, pretty much everyone said “Well, sure, it’s not very good, but it’s better than nothing… and surely Apple will improve on it over time.”

That has not happened (yet?) and the app remains mostly terrible. For example, it is completely missing some HomeKit accessories which appear in the iPhone/iPad.

In our living room we have 9 overhead lights which I grouped together as “one light” in the Home.app on the iPhone… but for some reason they continue to appear as 9 individual lights in the Home.app on the Mac. I grouped them together on the Mac Home.app, and later they appeared un-grouped again. Why? Who’s to say?

Oh, and some of my Home.app scenes just don’t appear on the Mac. Why? Who knows? How do I fit it? Who knows? The only thing I can do is uncheck the box for “Home” in System Preferences under iCloud, wait for the Home.app to empty out, and then check the box again to re-enable it.

Screenshot of System Preferences, iCloud, Home

That did work to get the Home.app to recognize some new accessories, but it did not help the missing “scenes” appear. Which, I guess, is better than nothing.

(You’ll notice that “It’s better than nothing” is effectively the slogan of most of these iOS-apps-on-the-Mac, at least so far.)

Home.app Automation

The Home.app is mostly impervious to attempts to automate it on the Mac. There is absolutely zero AppleScript support, and keyboard shortcuts are limited to switching between the “Home”, “Rooms”, and “Automation” tabs in the main window.

(That “Automation” tab is identical to what you see on iOS, where you can set timers and triggers. That automation is pretty good, but if you want to assign a keyboard shortcut to setting a Home.app scene or even turning an accessory on/off, well, you are out of luck.)

One minimal piece of functionality that the app has is that each of your “rooms” are available under the “View” menu and via an icon on the Home.app toolbar.

Screenshot of Home.app's "View" menu

I have often wished for a way to go to a specific room via a keyboard shortcut, and today I finally made that happen using one of the best apps on macOS: Keyboard Maestro.

It’s a relatively straight-forward macro, but I thought I’d walk through it as an intro to folks who may want to learn more about Keyboard Maestro.

Create a “Macro Group” for the Home.app

Screenshot of Keyboard Maestro - create macro group

Click the + icon in the first column of Keyboard Maestro’s Editor window to create a new “Macro Group” (think of it like a folder). Then, in the third (main) section, set “Available in these applications” to the Home app using the dropdown. This will restrict the macros in that Macro Group to only being active when you are using the Home.app. Note that I called mine “» Home.app” but you could call it anything you want. I use the » prefix before all of my Macro Groups that are specific to an app to help keep them sorted together.

(That process of setting a Macro Group to only work in one app is a handy feature of Keyboard Maestro that you will probably use a lot.)

Create a Macro for each room

Screenshot of Keyboard Maestro - create macro

  1. Click the + icon in the middle column to create a new macro inside the “Home.app” macro group.

  2. The Macro Name (shown here as “Ethan’s Room”) can be anything you want. You could call it “Bedroom 3” or “Purple Monster”. Whatever name you give it will be what is shown in the middle column.

  3. Assign a “hot key” which is Keyboard Maestro’s name for a keyboard shortcut. Notice that I have assigned two hot keys: ⌥E and ⌥S.

    Keyboard Maestro will let you create as many of these as you want (which is especially nice if you don’t always remember what keyboard shortcut you used — if you think it might be one or the other, use both!)

    However, in this case, I am going to assign at least two keyboard shortcuts to each room, and one of them will always be ⌥S (I will explain why in a moment).

  4. Click “New Action” and choose “Select or Show a Menu Item” (not shown in screenshot) to tell Keyboard Maestro that you want it to use that keyboard shortcut to match a menu item. The top level title is “View” (that is what appears in the menu bar) and the menu item is the name of the room. (Note: in this step, you do have to be exact and match precisely what the menu item says, so be careful.

Repeat the previous 4 steps for each room

I’m not going to show them all to you, but here’s the next one for the Front Door.

Screenshot of Keyboard Maestro, Macros, Front Door

Notice that the first “hot key” is unique ⌥F but the second is the repeated ⌥S.

The same is true for Garage, Hallway, Tj’s Room, Living Room, Office, and Tracey’s Room.

In the middle column you can see the hot keys which have been assigned to each macro. If more than one hot key is assigned, only the first will be shown, so make sure that is that unique one.

(Yes, I will explain why I added those bracketed letters to Tj’s Room and Tracey’s room.)

Q: “Why did you assign the same hot key for each room? Obviously that isn’t going to work right… Right?”

Well, it depends what you mean by “work right” I suppose.

Normally, if you had two identical keyboard shortcuts in an app, you would expect that when you use that keyboard shortcut, nothing will happen, except maybe the system beep will go off.

Keyboard Maestro is smarter than that. If you assign the same keyboard shortcut (or “hot key” in Keyboard Maestro parlance) when you press that keyboard shortcut, Keyboard Maestro will show you what is called the “Conflict Palette”.

The “Conflict Palette” is a little pop-up window which will appear and look something like this:

Screenshot of Keyboard Maestro's Conflict Palette

Note that at the top of the window it shows ⌥S so you will know what hot key caused the conflict. Then there is a list of each macro that has that hot key assigned to it.

Also note that the first letter of each macro name is in grey. When the “Conflict Palette” appears, you can press the corresponding letter to choose that macro, so H for “Hallway” for example.

You’ll note that that last two both start with the letter T. If you press the letter T when this “Conflict Palette” appears, it will then show you only those two items:

Screenshot of Keyboard Maestro's Smaller Conflict Palette

Now it shows the first unique letter to each macro: in this case it’s either J or R. So if I wanted to go to Tracey’s Room, I could press ⌥S then press T then press R.

However, if you look at the Keyboard Maestro Editor screenshot above, you can see that I have also assigned ⌥R and ⌥J to those rooms, so I can go to them directly by pressing those respective keys. You will note that I added [J] and [R] to the macro names to help me remember which keyboard shortcut to use to go directly to those rooms.

(It is not shown here, but I also assigned the hot key ⌥T to both of them, so if I press that it will bring up the second “Conflict Palette” showing just those two rooms.)

This intentional use of the “Conflict Palette” can come in very handy when using Keyboard Maestro to create these floating menu items which you can select with your keyboard.

It’s also a way to make the Home.app slightly less terrible.


Short URL for this post https://luo.ma/km-home-app

Today’s Files

Like nearly everyone else, I jump around a lot during the day between different projects, files, apps, trains-of-thought, etc. I know I shouldn’t and it isn’t my preference, but it’s how most days actually go.

One of the worst parts of this is when I find myself thinking “Wasn’t I working on something important before I got side-tracked? What was that?”

For years I berated myself about this and promised future-me that I would do better. And I would. For awhile. Until it happened again. And then I’d berate myself all over again. Sound familiar?

Well, I still try not to do it, but I have given up believing that it will never happen again. Because it will, and life is too short to keep lying to yourself about reality.

So I’ve started trying to keep track of what I was doing, especially if I can find a way to do it automatically and easily.

Enter the Finder

I didn’t expect to get help from the Finder, but I did. Now, I realize that there are some people who leave their active files on their Desktop, and if that works for you, great. For me, I keep all of mine in Dropbox, and I have a lot of sub-folders with a lot of files. I’ve tried other ways, and this works best for me.

But how do I find that file I was working on earlier without having to keep navigating through all those files and folders? In the Finder. More specifically, with a saved search.

Saved Searches have been around since the origin of Spotlight, as far as I remember, but I’ve never really used them all that often. I hadn’t quite forgotten about them, I just never used them. But I changed that recently and it’s been a much bigger help than I expected.

What I did was really simple. So simple that I almost didn’t bother writing it up, except that I figure if I could benefit from this but didn’t think of it before, maybe someone else will be the same way.

So here’s how I made my Saved Search.

Step 1 is easy, just go to a Finder window and press ⌘F and Finder will switch into Spotlight mode.

2019-11-21-002.png

Now, look at the plus sign (+) at the top right of that window. See it?

2019-11-21-002-CloseUp.png

Watch what happens when I press and hold the option key (⌥)

2019-11-21-003.png

See that change? It’s pretty small, but it’s vital. Instead of being a plus sign, now it looks like a floating ellipses (…). Click that.

Now, look at the area in the red box:

2019-11-21-004.png

Usually when you are searching for things, all of the criteria are added together: I want to search for this “and” that. But in my case, I want this “or” that. Using the Option/⌥ click on the plus sign (+) gives us the “Any of the following are true” search. That’s what we want.

(Note: the first criteria “Kind is Any” is harmless, but we don’t need it, so click the minus button shown with the arrow above to get rid of it. Or don’t.)

Now, change the criteria of “Last opened date” to “today”:

2019-11-21-006.png

…then click the plus sign at the far right of that row.

Next add “Created Date” is “today”:2019-11-21-007.png

…then click the plus sign at the far right of that row.

Lastly, add “Last modified date” is “today” — I’m assuming you know to just click the “within last” and select “today” but if not, here’s what it looks like:

2019-11-21-008.png

Now you have a list of all of the files and apps that you have used today, because if you were working with a file then chances are 99.9999% that you either:

  1. opened the file,
  2. created the file, or
  3. modified the file.

Maybe even more than one of those. But that’s a good net to cast to catch just about anything and everything you’ve worked on today.

We could stop here, but let’s make one more little change.

See that header row with the name, Date Create, Kind, etc? Right click somewhere on there, such as where the arrow is pointing:

2019-11-21-009.png

Select “Date Modified”, “Date Created”, and “Date Last Opened” as columns that you want to see. (If you want or don’t want “Kind” you can leave it or un-check it.)

Done!

Well, almost.

You don’t want to have to do this every time you need it, so click the “Save” button at the top-right: 

2019-11-21-011.png

And then give it a name. Because I am vëry clëver, I called mine “Today’s Files”:

2019-11-21-012.png

Make sure that “Add To Sidebar” is checked and then hit “Save”.

Now, anytime that you need to re-trace your steps, just click on “Today’s Files” in your Finder’s Sidebar2019-11-21-014.png

and you can sort the columns by Date Modified/Created/Last Opened if that helps.

I realize that to some of you this is macOS 101 material, but for me it’s one of those things that I never used until I did, and then I wished that I had done it a long time ago.

I hope it comes in handy for someone else.

 

Trying to make a Virtual Machine from Apple’s recent DMG releases of Mac OS X

Scroll down to “Update and Solution” to see how to get this to work.


Apple recently released new installers for Mac OS X/OS X/mac OS to deal with expired certificates:

If an installer says it can’t be verified or was signed with a certificate that has expired – Apple Support

Three of the six are links to the Mac App Store:

The other three are URLs to download DMGs:

Today I tried (and failed) to create a new Virtual Machine in either Parallels or VMware Fusion using one of these DMGs, specifically, the El Capitan one.

I will explain what I did, and where I got stuck, in the hopes that someone else might figure out what I did wrong and point me in the right direction.

Download the DMG

Apple has created three DMGs for Yosemite, El Capitan, and Sierra, but couldn’t be bothered to give them useful names, so Yosemite and El Capitan are called ‘InstallMacOSX.dmg’ and Sierra is ‘InstallOS.dmg’.

Likewise the DMGs aren’t named usefully when you mount them either, so make sure you name the DMGs well when you download them to avoid confusion. Here’s how to download it and rename it at the same time

curl --fail --location --continue-at - --output "$HOME/Downloads/InstallElCapitan.dmg" \
"http://updates-http.cdn-apple.com/2019/cert/061-41424-20191024-218af9ec-cf50-4516-9011-228c78eda3d2/InstallMacOSX.dmg"

Mount the DMG

Open the ‘~/Downloads/InstallElCapitan.dmg’

That will leave you with

“/Volumes/Install OS X/InstallMacOSX.pkg”

Extract the App

Don’t try to install from that .pkg file, it probably won’t work unless the Mac you’re using is capable of running El Capitan:

Instead, open it with Suspicious Package which will let you examine the contents of the .pkg file, as shown here:

Note the area in the red box. Obviously that’s not the full installer, despite the .dmg being over 6 GB. But let’s export it anyway:

Save it to /Applications/ (or wherever you prefer, but that’s where I’ll assume it is for the rest of these instructions).

Don’t eject “/Volumes/Install OS X/InstallMacOSX.pkg” yet, we still need to get the actual .dmg from it.

Get the other DMG

Download The Archive Browser if you don’t already have it (it’s free!) and use it to open “/Volumes/Install OS X/InstallMacOSX.pkg”.

It will look like this:

Click on the triangle to the left of “InstallMaxOSX.pkg” to reveal its contents, and select the “InstallESD.dmg” file from it.

Once it is selected, choose “Extract Selected” from the bottom-left. Save it to ~/Downloads/ (it won’t be staying there long).

Ok, this part could be confusing…

When The Archive Browser exports the file, it will not just export the “InstallESD.dmg” file. First it creates a folder “InstallMacOSX” and then it created “InstallMacOSX.pkg” inside that folder, and the “InstallESD.dmg” file is put inside the .pkg… but you can’t see it, because the .pkg file won’t let you open it.

That’s OK, because we’re going to use Terminal.app to move the file into place anyway.

First we need to create a directory inside the ‘Install OS X El Capitan.app’ which we previously saved to /Applications/. We’re going to use the same folder for two commands and we want to make sure we get it exactly right both times, so we’ll make it a variable:

DIR='/Applications/Install OS X El Capitan.app/Contents/SharedSupport'

Then use the variable with mkdir to create the folder:

mkdir -p "$DIR"

and then we need to move the “InstallESD.dmg” file into that folder

mv -vn "$HOME/Downloads/InstallMacOSX/InstallMacOSX.pkg/InstallESD.dmg" "$DIR"

Note: you probably want to trash the ‘~/Downloads/InstallMacOSX/InstallMacOSX.pkg’ (and its parent folder) now that it is empty, to avoid confusion later

mv -vn "$HOME/Downloads/InstallMacOSX/" "$HOME/.Trash/"

Now if you look at the ‘Install OS X El Capitan.app’ in the Finder, it should show itself as 6.21 GB:

open -R  '/Applications/Install OS X El Capitan.app'

So close, and yet…

VMWare was willing to start trying to make a virtual machine using the app, but it failed when it came to the actual installation part:

I don’t know what to try next. Parallels would not use either the ‘Install OS X El Capitan.app’ or the ‘InstallESD.dmg’ to try to create a new virtual machine.


Update and Solution

I posted a question on the VMware Fusion support forum asking how to do this, and someone came up with a very clever solution, which I will replicate here in case others are interested. The idea is simple, but I never would have thought of it.

  1. Create a virtual machine of any version of macOS, even the current version that you are using on your Mac.

  2. Inside the VM, download the .dmg (see below) and mount it.

  3. Launch the .pkg inside the .dmg.

  4. The .pkg seems to understand that it is inside a VM, and will install the app, which it would not do outside of the VM. Note that the Installer.app says that it will only take a few megabytes, but that is incorrect.

  5. Find the “Install OS X El Capitan.app” (or whatever the app name is) in the /Applications/ folder inside the VM. It should be over 6 GB in size.

  6. Copy the “Install….app” from the VM out to your actual Mac.

  7. Create a new VM using the “Install….app” from the /Applications/ folder on your Mac.

Step #4 is the part that I never would have guessed. The .pkg would not install the app outside of a VM, but will install it inside of a VM.

This worked perfectly with the El Capitan .dmg file, and I’m currently doing the same with Yosemite and Sierra. Then I’ll try the older versions of Mac OS X from old installers that I have from before they disappeared from Apple’s servers.

Update 2

Turns out that Rich Trouton wrote about this technique back in early 2017:

Downloading older OS installers on incompatible hardware using VMs | Der Flounder

But I wasn’t working with VMs at the time, so I must not not stored that in my long-term memory.

Update 3

I had saved the older installers for Lion, Mountain Lion, and Mavericks, which are no longer available for download.

Each of them still installed as a VM. Apparently they were not signed with the certificates that expired.

Older versions of Mac OS X (10.6.8 and before) are not available to virtualize.

David Sparks released a new Field Guide for Shortcuts. You should absolutely buy it.

I’m on the record as having been completely wrong about Shortcuts (neé Workflow) for iOS. I was convinced that Apple would never allow it as a third-party app. Even after it was initially approved, I was sure that one day the Workflow team would release an update, and someone on Apple’s review team would realize that this app never should have been approved. So I pretty much ignored it.

When the app was acquired by Apple, I was equally convinced that Apple would kill it, cripple it, abandon it, or otherwise ruin it. “Obviously” Apple just wanted the developers, but the app was unlike anything Apple had done with iOS before, so why would anyone believe that it had any kind of future at all?

There are rare occasions in life when you are very happy to be very wrong.

However, the practical implication of my assurance that Workflow had no future was that I never learned how to use it. When Shortcuts came out as an official Apple app, I felt completely lost. Fortunately, David Sparks of Mac Power Users fame published a “Siri Shortcuts Field Guide” — a video course which demonstrated how to go from knowing nothing about Shortcuts to learning some advanced techniques. I jumped in with both feet. I downloaded all of the videos and watched them on my Apple TV with my iPad in my lap. At the end of the videos, I felt very comfortable with Shortcuts, and ended up making over 150 Shortcuts. Some of them are fairly simple, but some of them are fairly complex (I mean, they aren’t Federico complex but they were respectable.)

Just when I got good at the game, it changed.

When iOS 13 was announced, Apple also announced significant changes to Shortcuts. First of all, it would no longer be a separate app that you have to download, it would be a part of the OS. As a result, Shortcuts would be gaining great new functionality — Hurray! — and also be changing drastically Hurra — wait, what?

I was actually frustrated by this announcement. I’m not proud of that. I think it’s a function of getting older and being less mentally flexible, which isn’t something I’m happy to realize or admit. There was a time when any new software release for send me deep-diving into every corner, nook, and cranny exploring and looking for new things. (I used to go through each pane of System Preferences looking for new things when macOS updated.)

To be fair, I tried to keep up. I installed the iOS 13 public betas with the full intention of trying to learn the new ways of doing things. But as you’ve probably heard, this year the betas for iOS have been rough. When I started to hear about iCloud problems, I immediately backed off the betas and stopped using my iPhone and iPad for all but the bare necessities — and many of those didn’t even work!

Eventually I did look at Shortcuts, but so much had changed that it felt strange instead of familiar. I tried a few things but when something didn’t work, I was left wondering I was doing it wrong, or if I was finding bugs in the system. Overall, it was just frustrating.

When I heard David say that he was updating his Shortcuts Field Guide, I was relieved.

When I heard him say that he was basically having to re-do the entire guide and planned on releasing it as a new, separate guide, I nodded in complete understanding. Even some of the basics have changed. It’s almost like the third time that the app has been a “Version 1.0” — once as “Workflow”, once after being acquired by Apple and renamed “Shortcuts”, and now again as “Shortcuts integrated with iOS”.

The good news is that I think this third iteration is likely to stick around longer than the previous two. I have no actual insight into Apple, Inc., but I wonder if perhaps Shortcuts had to go through these transitions before being fully “adopted” by Apple as one of its own. Since it is now part of iOS, I think the transition is complete.

The Challenge and the Opportunity of Shortcuts

The challenge with Shortcuts being on its third major revision is that there is a lot of outdated information out there. Trying to find current and accurate information is challenging. Some of the old ways no longer work, some of them have newer and easier alternatives, and some of it was simply not possible before. If you simply head to your favorite search engine to find help, you could end up frustrated and confused. That will improve over time, but right now, it’s a significant hurdle.

That doesn’t mean this is a bad time to get into Shortcuts. In fact, I would say just the opposite. If you have not spent time with Shortcuts before, or if you have but realize that a lot has changed, then you know the opportunity is just waiting for you to create ways to make life simpler for yourself through the automation possibilities Shortcuts offers.

If you want to make your own Shortcuts, and — perhaps more importantly– if you want to understand the way that Shortcuts works on a conceptual level, then what you want is someone who can walk you through the process. Ideally, you would like to be able to watch as someone who knows what they are doing goes through the steps of building both simple and more complicated shortcuts.

“Shortcuts Field Guide, iOS13 Edition” is David Sparks’ instructional tour, which begins with the “whys and hows” of the foundational pieces, then works up to the intermediate level of specific features and functions, and finally opens the throttle to show you the new advanced triggers and automation power which were never possible before. All along the way, you’ll get to watch how he works, and as he works he explains the choices that he makes, and why. This is the guide that I wanted and needed to get me ready for the next chapter of Shortcuts on the iPhone and iPad.

David combines two special abilities here: first, an extensive knowledge of Shortcuts, and second, the ability and the experience of a teacher.

Being able to do something is one skill; being able to teach someone else to do it is another. In college, I had the misfortune of having a few professors who could no longer effectively teach introductory courses. They could no longer remember what it was like to be a true beginner. David has been doing these video Field Guides for awhile now, and each one has increased his ability to not just describe or show, but to teach, and he does so with the beginner in mind.

If you start with no knowledge, but have a desire to learn, David’s inviting enthusiasm will be all you need to get started, and at the end you will have learned enough to feel confident in your abilities to go forward to build your own Shortcuts. The name “Field Guide” is a spot-on description of what you’re going to get: someone to walk with you through the process of learning how to use this tool in real-life situations.

(If you have used Shortcuts before, you will appreciate that David also includes some examples of how he has updated some of his Shortcuts to take advantage of the new features and functionality now available.)

There are 6+ hours of videos here, but if you’re like me, it may take you longer than that to finish the course, because I kept pausing the videos to create new shortcuts based on things I had learned. David also includes more than 80 shortcuts which he uses in the videos. They range from a relatively simple “record dictation and save text to an Apple note” to a crazy cool “Link-O-Rama” and a complete “Morning Report” including calendar items and weather conditions. Automation does not need to be incredibly complex in order to be valuable. There is great value in creating a “simple” automation to make a common task simpler and less error-prone, or to eliminate a daily friction point that you might not have even realized was there until you saw a way to eliminate it.

I have no doubt that I will revisit this course in a few weeks or months to see what it might spark in me tomorrow that is different than today, but I have already hugely benefitted from the time I spent watching these videos. Oh, and don’t think that you need to set aside 6 consecutive hours. Most of the lessons are under 10 minutes each, so you can watch a few in separate sittings if you want or need to break it up into smaller chunks.

Pricing

Don’t tell David, but he has vastly underpriced this Field Guide. My son takes voice and guitar lessons. Each one-hour lesson costs more than this Field Guide.

Imagine that you happened to be friends with David in real life, and you asked him to teach you how to use Shortcuts. How much time would you reasonably expect him to spend with you? Maybe an hour or two, at most?

And because you aren’t a terrible person, you’d want to do something nice for him in appreciation of his time. Maybe you’d offer to take him out to eat (somewhere nice, or at least somewhere without a drive-thru window). Or maybe you’d send him an Amazon or Apple Gift Card. $50 would seem reasonable to me.

Now imagine that he spent six hours with you. And he recorded the conversation so you could go back and rewatch it whenever you needed, with chapter markers so you can jump right to the point you want. And he also made several combo videos so you could download them and watch them anywhere, anytime, in any app you choose (no DRM or any of that nonsense), even if you don’t have an Internet connection.

If you paid him the US minimum wage of $7.25/hour, it would be over $40. (You would also be a terrible friend, because who would pay someone with David’s experience and expertise minimum wage?!?. The kid down the street probably gets twice that for mowing lawns.)

What I’m saying is that there is no way that $29 is a reasonable price because it’s way too low. But David has it priced at $29 anyway.

And if you act fast you might even find a $5 coupon, which makes it only $24, which almost seems like stealing. I pay almost that much for my regular order at Five Guys.

If you bought David’s previous Shortcuts Field Guide, this is a separate purchase, and if anyone complains about this I will campaign to have them thrown off the Internet. So much has changed that there was no way he could have just updated the old course. If you bought the old course and want the new one, it’s most likely because you know how much has changed. Did any of us expect last year that Shortcuts would change so much this year? Of course not. But it did.

This was a huge undertaking, and for it to be ready when iOS 13 launches took a lot of work on David’s part. There is an even bigger discount for those of us who bought the previous version, which is a fair and generous move on David’s behalf. Everything I said above about the cost of this year’s course was true for last year’s course as well, so even if we paid full-price for both, we’d still be ahead. So let’s not be greedy, but rather be grateful that not only is Shortcuts not dead but its future looks quite bright indeed. Which means that your investment today is likely to be useful for a long time to come.

Look, just buy it.

If you’re one of the tens of people who will read this post, chances are high that you like nerdy Mac/iOS stuff. This course is absolutely worth your time and money. Go get it.

Yes. I moved my blog. Again.

I think I’ve tried all of the various platforms now. Of all of them, I wanted to like Squarespace the most, because it seemed like the coolest one, although that could be because I listen to a lot of podcasts. But Squarespace is expensive, and their iOS apps are terrible. I once wrote a post in Markdown on the website and then couldn’t edit it in the iOS app because it was a "complex document" or some nonsense like that.

WordPress has always seemed like the best choice, except that I didn’t want to do it on a cheap, shared host like I had done it before (cough Dreamhost cough) which was terrible (although that was a number of years ago now). I tried Tumblr. I tried Micro.Blog. I tried just about everything. I even tried hosting my own static site. A few times.

But WordPress is everywhere, including on iOS with Shortcuts, and (perhaps especially) on the Mac with MarsEdit. I’ve always liked MarsEdit, and I’ve owned a license for it for as long as I can remember, but most of the various sites that I’ve tried didn’t work with it.

Why did I wait this long to go back to WordPress?

Well, to be honest, I thought WordPress on WordPress.com was going to cost me like $15-20/month, which was more than I wanted to spend. But when I went to sign up, not only did I find that it was much cheaper, but with the promo code PRICINGSAVE20_785F (valid through August 31st, 2019), my WordPress.com account will only cost about $6/month for 24 months.

What is even better (for you, dear reader, if in fact you actually exist) is that 24 months is a long time compared to how long I usually go before I move my site. So it will be here for at least 24 months, and hopefully by that time I will have gotten the urge to stray out of my system.

I’m going to start moving over old posts from my former Micro.Blog site soon.

Who knows, maybe I’ll even stop breaking my own URLs at some point!