December 2, 2020

Do you ever mix up the different dot releases of Swift?

Do you ever forget which release is currently shipping or in development?

Do you ever need to know which Swift shipped with which Xcode?

For me, the answer to all of these questions is yes.

So I created

It’s a simple single page showing the current release, the development release, and a history of each version of Swift with a corresponding Xcode release.

It also gladly switches between dark and light mode to match your system setting.

I like how it turned out and hope you find it useful as well. •

Categories: Apple, Software Development, Swift

Siri is my workout partner

November 16, 2020

I’ve used Siri sporadically since the intelligent assistant was introduced on the iPhone 4S back in 2011, but never as part of a regular workflow.

Then—as I described in an earlier post—I started a daily dance party workout at my house.

I’ve been using Siri to keep in the flow of the workout and, except for a few minor issues noted below, Siri has been a great workout partner.

I wanted to share the ways I am using Siri during my daily workout that are working well for me. With the arrival of the HomePod mini this week, you might want to start a dance party of your own.

Are You Talking To Me?

During my workout, I’m talking to Siri on two different devices—a HomePod and an Apple Watch.

One thing about using “Hey Siri” in an Apple-centric household like mine, all sorts of devices within earshot (microphoneshot?) start listening. So, I have been getting used to activating Siri in device-specific ways.

On Apple Watch, I’ve been using the “Raise to Speak” feature. This allows me to raise my write and address Siri on the watch and only on the watch.
(Settings > Siri > Raise to Speak.)

On HomePod, I’m using “Hey Siri” to activate.

Getting Rolling

Siri is a great way to start and stop workouts on Apple Watch.

When the music starts playing, I want to start my workout without a lot of fiddling around with the watch interface.

So, when the dance party starts, I can just get up and start dancing, raise my wrist and say “Start dance workout”.

The workout starts, and I of course, exclaim “Dance Party!” like an overenthusiastic kid in a 1970s board game commercial. Siri’s not involved with that outburst at all. That’s just for me.

Managing Playlists While In The Flow

That’s about all I use Siri for on the watch until the end of the workout. More on that later.

During the workout, I use Siri on the HomePod a lot during the dance party.

Sometimes you’re just not in the mood for a particular song. “Hey Siri, next song” comes in handy.

Other times you’re really in the mood to dance to a particular song so “Hey Siri, play again” is fairly common.

And then sometimes, as I go, I think of a song that isn’t on my Dance playlist. A recent example is Love Shack by the B-52’s.

“Hey Siri, play Love Shack” gets the song going.

“Hey Siri, add to Dancing playlist” makes sure the song gets added.

One little bump in the workflow is that HomePod is nowplaying a single song, not the playlist. So when the song is over I do need to call out “Hey Siri, play Dancing playlist”.

One thing Siri doesn’t seem to be able to do is skip to a song in a playlist by name. I’ve filed that feature request with Apple (FB8898901). So, for now, if there’s a particular song in the playlist I want to hear, I end up saying “Hey Siri, next song” repeatedly.

Just these few Siri commands make it easy to add new songs as I think of them and manage what’s playing without interrupting the flow of my workout.

Cool Down

When I’m done with the dance workout, after about 20 - 25 minutes, I tell the HomePod “Hey Siri, Stop Music” and raise my wrist to “Stop workout”.

Next up is a cool down workout where I do some stretching.

Once I’m situated on the floor, I raise my wrist again and “Start cool down workout”. On occasion Siri doesn’t understand what a ‘cool down workout’ is and I need to repeat myself.

I do each stretch for a certain amount of time, so I raise my wrist and “Set timer for four minutes” with the desired time for each stretch. I could also ask the HomePod to start a timer, but I like glancing at my watch to see how much time is left, as opposed to asking HomePod to tell me.

Once I’m done, I just raise my wrist again and “End workout”.

Thanks Partner

Overall, I’ve been very happy with how I’m able to manage my workouts, play music, and manage my playlists without having to stop exercising to focus on interacting with a graphical interface.

Nothing is perfect of course. In addition to minor issues I’ve already mentioned, sometimes I need to cover the watch face and lower my wrist and raise it again to get Siri to listen. But this is still less fiddly and error prone than trying to get a workout started on screen while also trying to get the dance party started.

Minor issues aside, the handful of Siri commands I’ve detailed above has really helped get me started exercising daily, with the technology keeping me in the flow instead of serving as a distraction. I’m sure as time goes on I’ll continue to refine my routine.

If you have have favorite Siri tips or suggestions you’d like to share, I’d love to hear them. Free to mention them to me on Twitter or •

Dance Party!

November 9, 2020

For years, I have tried without success to establish a habit of consistent exercise. Over the course of my adult life, I have hired personal trainers, purchased home fitness equipment, joined various gyms.

Some of these attempts at establishing a lasting habit managed to last weeks, some months, one stretch went over a year.

But, in the end, none of these workout routines ever felt like a natural part of me. They always required a significant amount of willpower and I never really found much enjoyment in them. Those conditions are not favorable to forming a lifelong habit.

A New Hope

After some reflection I realized that there is a form of exercise that I enjoy.

I like to dance.

This is not to say I am graceful, talented, or skilled at dancing. But I definitely enjoy it. When a song starts playing, it is difficult for me not to move to the music in some way.

So, how to put that realization to some practical use?

After all, I’ve enjoyed dancing for as long as I can remember, but it has never become a habit, and I hadn’t really thought about it as exercise.

Over the summer a few things came together to spark an idea that seemed promising:

First, the addition of the dance workout in watchOS 7 validated that yes, dancing is an exercise. Maybe even more important for me is that dance workouts can now be measured and tracked in the Apple fitness ecosystem.

Second, on our personal productivity podcast The Weekly Review, Jean MacDonald and I have talked about forming habits on a number of episodes. The three books we have focused on are The Power of Habit by Charles Duhigg; Atomic Habits by James Clear; and Good Habits, Bad Habits by Wendy Wood.

One key principle in establishing a habit is the need for a cue to trigger the behavior.

And then it hit me:

Dance workout icon from Workout app on Apple Watch
Dance Party!

If sometime during the day loud dance music suddenly started playing in my house, it would be difficult for me to not get up and dance.

This led me to the Home app where I found out I could set up a Scene to play a particular playlist on my HomePod. And I could set up an Automation to play that Scene every day at a particular time.

In Apple Music, I already had a Dance playlist that I hadn’t really touched in years from way back in the early iTunes days.

I set it all up and the daily Dance Party! was born.


One suggestion in Atomic Habits is that when establishing a habit, the consistency of repeating the habit is more important than the length of time or progress made during any one iteration of the habit.

James Dempsey
The start of something

So, I made the commitment to myself that once the dance party started, I would definitely dance all the way through the first song. And if I wasn’t feeling it after that, I could consider the dance party done for the day.

The first dance party was on Sept 23, 2020 and I’ve now successfully had a dance party every day for the last six weeks!

A typical dance part lasts 20 - 25 minutes.

Another part of the daily ritual is, when that first song starts playing, as I get up to dance I yell out “Dance Party!” to nobody in particular. It’s a bit of cheesy forced enthusiasm that helps kick things off.

Finally, I use a technique called habit stacking to follow my dance workout with a cool down workout where I do about 10 minutes of stretching. Between the two workouts I close my Exercise ring for the day.

You’d think that having a scheduled time set up that I would never be surprised by a dance party. But you’d think wrong. I’ve been woken from weekend naps and startled from coding by the daily dance party.

The Future

Will this last? I can’t say.

But, I know this feels different than other things I’ve attempted. I’m excited about it and I’m largely having fun doing it. And on days when I’m really not in the mood, I do keep that commitment to dance through a single song. So far, even on those day, my brain has successfully slipped into “well, might as well finish” mode and I’ve done a full dance party.

I don’t tweet about it every day, but if you do see me tweet “Dance Party!” now you’ll know exactly what I’m up to. •

Abstraction Distraction

November 2, 2020

After posting about renovating the site and designing my own HTML and CSS, I was asked why I didn’t use something like Squarespace.

There are a number of reasons: cost, control, and simplicity.


As far as I can tell, Squarespace charges per site, which really starts to add up if you tend towards multiple relatively low-traffic sites.

Since I seem to wind up working on loosely connected but disparate projects, I already have a few sites—often just single-page sites—with the prospect for more.

So cost is certainly a factor for me with Squarespace in particular.

Control and Simplicity

A bigger reason is control and simplicity.

I can never seem to find a template that I’m happy with. I can usually find a template that’s ‘good enough’. This is what happened with the original Wordpress version of this site. It is also currently the case with the LIVE near WWDC site which is hosted by Squarespace. Both Wordpress and Squarespace have visual page builders, but of course they are based on the chosen template. I also browsed through many Jekyll templates before deciding to do my own HTML and CSS.

What I’ve found in using Wordpress or Squarespace is if I can’t find an existing template that matches what I want I have two choices: settle for what the template already does or figure out how to modify the template.

Of course, a third choice is to not use a template at all.

Put another way, the choices are:

  1. Use the abstraction as-is
  2. Modify the abstraction as needed
  3. Don’t use the abstraction, use the underlying layer


Throughout my time writing software for macOS and iOS, I’ve followed the principle of working at the highest layer of abstraction that allows you to accomplish the task at hand.

Behind that principle is the idea that you can use that higher level of abstraction to get something done without needing a deep understanding of the underlying layers.

In this case, the task at hand is getting pages to look the way I want.

Option 1 is off the table since I can never find a template that fully accomplishes that. I can’t just use a template as-is.

Option 2 is to modify the abstraction as needed. Modifying the templates requires understanding the mechanics of the templating in that particular system. It also requires a strong understanding of the underlying layer, HTML and CSS. Finally, it requires understanding how that particular template is using HTML and CSS, so that tweaks to the template don’t introduce bugs.

Option 3 requires a strong understanding of HTML and CSS and no understanding of templates at all. But, it also does require creating an entire design from scratch and figuring out how to handle things that are handled automatically on platforms like Squarespace or Wordpress, like RSS feeds.

So the first option is out because it does not provide enough control. The second option seems to combine the worst of both worlds—a need to understand the underlying layer, plus a need to understand the mechanics of the abstraction.

It’s no spoiler that I’ve gone with the third option. If I want to do any customizing at all, I need a decent understanding of HTML and CSS anyway, so I might as well put my focus there and not worry about templates at all for the moment.

When you can’t use an abstraction as-is, it loses its simplicity. A hybrid of the abstraction and the underlying layer typically combines the complexity of the underlying layer with the complexity of the abstraction. When that happens, there may be more simplicity in working at the underlying layer. That’s where my thinking has led me in this case.

Whew! That’s a long answer to a short question! •


October 31, 2020

I just finished something that has been on my to do list for a long while.

The results are right in front of you.

I just redesigned this site and migrated from Wordpress to a static site generated by Jekyll.

Eight years ago, when I started blogging, I wanted to get rolling quickly. I signed up for a free Wordpress account, picked a theme that seemed okay, and went from there.

I never particularly liked the way the site looked but it was acceptable enough as I focused on other things.

Now I feel much happier about the site, both the result and the process that led to the result. I’ve gotten a chance to dig into HTML and CSS which I have not done for a long time. I’ve also had the chance to learn enough about Jekyll to get up and running.

I may curse my decision sometime in the future when I realize something I want to do is going to take a lot of time that I’d rather not spend.

But for today, I’m going to enjoy the small victory of completing something I’ve been wanting to do for a long while. •