TO THE EDITOR: On Jan. 6, 2021, our nation suffered an attack as insurgents breached the Capitol.
As religious leaders, we are deeply grieved and angered by this injury to the norms of democracy and the fear experienced by all those who felt themselves at risk of harm. We also mourn the loss of life as a consequence of the chaos.
We unequivocally condemn the violence of Jan. 6. We condemn the actions of those who allowed themselves to be led by anger and fear fueled by lies and conspiracy theories. We denounce leadership which creates divisions and hatred.
While we may disagree with particular policies and actions of government, we acknowledge this Congress and the incoming president and vice president as duly elected.
In the coming days and weeks, we pray for peace and pledge ourselves to doing what we may to promote truth and justice in this nation for all its people.
We continue to pray for the families of those who lost loved ones because of the violence on Jan. 6. On this week when a new president and vice president is inaugurated, we pray for our divided nation. We pray for those who are so hurt and afraid that they would resort to this kind of violence. We stand with and pray for those who work tirelessly for justice and peace. We pray for those who speak truth to power. We pray for the day when people with competing ideals will sit together in harmony at the table of democracy and fellowship.
At the dawn of this new administration on Jan. 20, with all of its hopes and possibilities, we implore people of faith to fervently pray for peace and unity in our nation, and may those prayers, actualized in our civility and kindness toward one another, bring healing to our nation.
This is the Gospel reading for next Sunday (November 22, 2020) which I have recorded so I can listen to it throughout the week. I have used 4 translations:
I thought I would share them here for others who might be working on the same passage and who would like to be able to listen to the passage throughout the week, either in one or all of those versions.
You can download an MP3 with all of the versions, or an MP3 of just one version, using the links below. The text of each translation is also included.
31-33 “When he finally arrives, blazing in beauty and all his angels with him, the Son of Man will take his place on his glorious throne. Then all the nations will be arranged before him and he will sort the people out, much as a shepherd sorts out sheep and goats, putting sheep to his right and goats to his left.
34-36 “Then the King will say to those on his right, ‘Enter, you who are blessed by my Father! Take what’s coming to you in this kingdom. It’s been ready for you since the world’s foundation. And here’s why:
I was hungry and you fed me, I was thirsty and you gave me a drink, I was homeless and you gave me a room, I was shivering and you gave me clothes, I was sick and you stopped to visit, I was in prison and you came to me.’
37-40 “Then those ‘sheep’ are going to say, ‘Master, what are you talking about? When did we ever see you hungry and feed you, thirsty and give you a drink? And when did we ever see you sick or in prison and come to you?’ Then the King will say, ‘I’m telling the solemn truth: Whenever you did one of these things to someone overlooked or ignored, that was me—you did it to me.’
41-43 “Then he will turn to the ‘goats,’ the ones on his left, and say, ‘Get out, worthless goats! You’re good for nothing but the fires of hell. And why? Because—
I was hungry and you gave me no meal, I was thirsty and you gave me no drink, I was homeless and you gave me no bed, I was shivering and you gave me no clothes, Sick and in prison, and you never visited.’
44 “Then those ‘goats’ are going to say, ‘Master, what are you talking about? When did we ever see you hungry or thirsty or homeless or shivering or sick or in prison and didn’t help?’
45 “He will answer them, ‘I’m telling the solemn truth: Whenever you failed to do one of these things to someone who was being overlooked or ignored, that was me—you failed to do it to me.’
46 “Then those ‘goats’ will be herded to their eternal doom, but the ‘sheep’ to their eternal reward.”
My wife, Sandy, who passed away this past November 30th, in addition to being my faithful companion, was also the chief editor of all my books. This includes the nine-volume series, Healthy Clergy Make Healthy Congregations (HCMHC). I’ve decided that in celebration of the fifty-three years we spent together and in thanksgiving for all she contributed to me, I’m going to GIVE AWAY ALL NINE VOLUMES of the HCMHC series on that day.
Here are links to the Kindle versions of each book, plus a 10th book which is also free today:
For the purposes of shells scripts, sw_vers will return 11.0unlessSYSTEM_VERSION_COMPAT=1 is set. If it is set, then sw_vers will return 10.16.
To my mind, this new information only makes the following suggestion more useful, because it will work under either scenario.
end of update
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).
The zsh feature in question is called is-at-least and you use it like this:
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:
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:
That URL is only enabled when the live-stream is active.
First go the File » Open Network:
Second, put the URL into the Network URL in the Open Source window that will open:
If the live-stream is active, it will look like this:
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:
To an MP3 so we can listen later
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:
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:
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:
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).
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.
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.
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.
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
(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.
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…
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.
Select a contact from my contacts list
If the contact has more than one phone number, it will prompt you to choose which one to use.
Next it will ask if you want to use Google Voice or the regular Phone app
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:
I selected a contact named “Apple” (which has multiple phone numbers) and scheduled a call to be made with the Phone app.
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.)
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:
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. ↩