94: iOS 12 wish – Siri self-awareness

It goes without saying that Siri has a lot of catching up to do. Anyone who hasn’t given up on it entirely will want to see significant improvements in iOS 12. I’m not too optimistic, so I’m asking for something smaller: just a little self-awareness.

I’m not talking about eliminating the dad jokes, though that would be wonderful. All I’m asking for is some simple connect-the-dots, making Siri not look oblivious when asked basic information about the device it’s running on. There are several pieces of information that are available onscreen in built-in, Apple-created apps, that Siri completely falls down when asked about.

If you’ve ever been to the Apple store for a repair on your iPhone, you know the first thing they ask is whether you’ve backed it up to iCloud. Genius Bar techs have memorized the four-tap sequence they need to access this information in Settings, but think how much time that wastes in the aggregate! Yet asking Siri, "When was my last iCloud backup?" produces one of three unhelpful responses.

"Everything you need to know about Apple products is at Apple's website."

What does that have to do with iCloud?

"Apple.com should be able to answer that question, and more."

You know that icloud.com is a thing, right?

"Allow me to direct you to Apple's rather fabulous website."

For that one, they really punched up the smugness factor in the voice improvements made in iOS 11. And all of these are failures to parse the question. In fact, they are keying on the word iCloud and ignoring the rest. Just saying “iCloud” alone produces the same stock phrases.

I’ll grant that this request has some moderate degree of difficulty (remote data needs to be loaded) and limited use outside of a support context. But what about purely on-device data for one of iPhone’s flagship features: health and fitness? Don’t bother asking Siri…

"How many steps have I taken today?"

"I can't answer that on your iPhone, but you can find it in the Health app."

I am still mystified by this answer. My phone is unlocked. This data is 100% available to me. The steps are logged by the accelerometer in the phone itself (I don’t have an Apple Watch). And what possible definition of “on your iPhone” excludes the Health app which is on the homescreen of that phone? At least you can open the app by simply commanding, “Open Health.”

Even that didn’t used to be the case with the Home app. For years, most commands with the word “home” got routed to the HomeKit or Maps APIs, making it impossible to launch the app via Siri at all. I reproduced this as recently as a few days ago, but it seems to be fixed at the time of writing/recording. Well, unless you have another app installed that has a similar name.

“Open Home.”

“Which of these would you like? Home … or … Home – Smart Home Automation?”


“Just swipe up from the bottom of the screen to get home.”

Maddening. Don’t let Apple tell you that they’ve added support for follow-up questions to Siri. When the Siri prompt sounds, it’s actually starting again from zero. You can ask “What’s the weather?” in response to the follow-up, and it will go fetch the forecast. A simple problem that should be constrained to two choices is instead opened up to the entire universe of possible commands, inviting poor results.

So this is all I ask: Siri, please listen to yourself. Please learn about where you live. Do your homework, and we can talk again this summer.

93: iOS 12 wish – a better phone

WWDC 2018 is fast approaching and Apple-watchers everywhere are preparing their iOS feature wish lists. There’s plenty of low-hanging fruit available to make the iPad and iPhone better internet communicators and content-creation and content-consumption devices. But what about making the iPhone a better phone?

I know. “Who uses their phone as a phone?!” Like email, voice phone calls have become a bizarre, legacy, mostly inbound communication channel. As Google controversially pointed out recently, sometimes a phone call is the best or only way to find certain information or accomplish a task. But 90% or more of the calls to my iPhone are junk.

Apple must have realized that spam calls were of rising concern to their users, as they added call blocking capabilities in the CallKit API introduced in iOS 10. This led to an explosion of call-blocking apps in the App Store, some of them scammy in their own right, requiring access to all your contacts in order to function. A few are above-board, not needing your private data. One of them is WideProtect, which I’ve been using for several months now.

These mass blockers are useful for the latest pattern in spam calls here in the United States: spoofing a number similar to the one being dialed, in hopes that it will look “familiar” and get you to pick up. I started by blocking numbers that were extremely similar to mine, differing only in the last three digits. That didn’t stop enough of the spam, so I expanded the range to anything differing in the last 4 digits — 10,000 numbers in total. That seems like a lot, but I’m only using 1% of WideProtect’s blocking potential! CallKit allows each blocker extension to cover 100,000 numbers, but apps can have multiple extensions. WideProtect has 10 extensions for a maximum of 1 million total blocked numbers.

Blocking extensions are far more effective than my old tactic of putting repeat offender numbers into a single contact named “spammers”, but they don’t eliminate the annoyance. CallKit blocking prevents the phone from ringing, but voicemails still come through as notifications. These too are predictable: most are just 2 or 3 seconds of dead air, while others are a robot reading a script about senior care medical devices they want me to purchase. Needless to say, these are the most garbage-y notifications I receive on any given day.

 Not helpful.

Not helpful.


So why can’t iOS eliminate them entirely? Smart handling of voicemail has always been part of the iPhone’s “revolutionary mobile phone” features (Visual Voicemail, as it was then called, was truly unheard of in 2008.) Today, iPhones analyze voicemails on-device to create transcriptions, which are available within notifications via 3D touch. Using that transcription data to suppress notifications could be dressed up as fancy machine learning, but really all that’s required is the type of basic pattern matching that has powered email spam filters for decades. And any good spam filter needs a safeguard against false positives, so offending voicemails could be sorted into the separate Blocked Messages view in the Phone app, rather than being blackholed entirely.

Perhaps the average iPhone user is accustomed to their device being a constantly buzzing annoyance box, and a couple spam calls per day are nothing amongst their dozens of other spam notifications. But I try to keep those annoyances as close to zero as possible. So even though the phone is, most likely, the least important part of the iPhone, robust spam filtering would help it be the best phone available.

92: Alto's Odyssey

It’s been a couple months since the game’s release, and for some, it may be already forgotten. But many of the initial reviews placed the followup to Alto’s Adventure directly into the pantheon of iOS games. I agreed with those reviews then, and after dozens of hours of flipping, wingsuiting, grinding, and wallriding, I agree with them now.

At least, I agree with their conclusion. Many glowing reviews praised Odyssey for bringing unprecedented nuance and refinement to a “casual” game. But I would argue that these traits break Odyssey out of the casual category and into uncharted territory. Part of what keeps me playing Odyssey is the leaderboard, where I’ve bounced around the top twenty but never broken into the top ten. Sitting down to attempt that feat is not casual at all — a significant chunk of time needs to be set aside to aim for three, four, or five million points when they’re earned by the tens of thousands.

If Odyssey didn’t constantly delight, 40 minutes on the mountain would be a slog. I think anyone who views Alto as a one-button endless runner would feel that way. I’m not going to try to convince you that the balloons, birds, storms, and total solar eclipses make Odyssey the best one-button endless runner ever on iOS. No, that would be Tiny Wings. Why not Alto? Because it is, crucially, a two-button endless runner.

And there, if it lies anywhere, is Alto’s single flaw: the failure to reveal at the outset that the wingsuit and its control scheme is vital to the game. It’s all too easy for a truly casual player to entirely miss its importance, and thereby miss out on the incredible combination play that makes Alto unique and addictive.

Back when tvOS was launched — and Picomac was new! — Alto’s Adventure was hailed as the perfect game for the one-button Siri remote. There’s no doubt that the snowy and sandy environments look stunning on a big screen, but trying to toggle the wingsuit with a firm press is just a recipe for a crash. This is, of course, to Alto’s credit and the Apple TV’s detriment. The lament all along about Apple TV games has been that without a dedicated controller, they are forced to give up complexity and be shadows of what they can be on other platforms.

So if you still haven’t played Alto’s Odyssey, I cannot recommend it highly enough (at least on your iPhone or iPad). Or if you did give it a try and found it too simple, too casual, give it another go. And remember: save up all those coins for wingsuit upgrades. You won’t regret it.

91: Seeing double with regular expressions

A few weeks ago, David and Katie were kind enough to have me on Mac Power Users to talk (to the extent that's possible) about regular expressions. It's a massive topic and we barely scratched the surface, but having listened back to the segment, I think it gives Mac users a number of points of entry. Even so, there was one big topic on my outline that I forgot to cover: multiple matches.

As David said, the basic conceit of regex is "find and replace on steroids". I think even that description is limiting, since the basic model of find and replace is to find one thing and replace it with one other thing. But once you're proficient in the basic search syntax, you can go much further by learning the replacement syntax. (Frustratingly, this tends to vary from app to app. I'll describe things with BBEdit's syntax, which I'm most familiar with.)

If you want to match multiple components of your overall regular expression, all you have to do is enclose them in parentheses. Then, each of these can be referenced in order, left to right, in your replacement string by using \1, \2, \3, and so on — though it gets pretty unwieldy after 4 or 5. This can be used for mundane tasks, like reordering parts of a date string, but it's also endlessly flexible, especially because you can refer to a captured group more than once.

This past week at work I applied multiple matches to what would have otherwise been a tedious clicky-draggy spreadsheet task. I was setting up software for some computer-based tests, including mapping the number of questions answered correctly to a standard score. (Remember the SAT? It's out of 1600 points, but there aren't 1600 questions. Thankfully.)

I had an Excel spreadsheet that a coworker made, but the software required a CSV, with each row having the low raw score, high raw score, low scaled score, and high scaled score for different ranges. We had already run an analysis and decided these correspondences for every possible value, so I needed those pairs of columns to be duplicates of one another. Yes, I could do that in Excel or Numbers, duplicating columns and saving out CSV files via an Export dialog. Or I could make a much faster round trip to BBEdit.

The routine was simple: paste two spreadsheet columns into a text file, giving me numbers separated by a tab. I captured the first number, matched a tab, and captured the second number: (\d+)\t(\d+). Then, since I needed to both flip the column order and duplicate them, I replaced the string with \2,\2,\1,\1. And thanks to BBEdit making the "Replace all" command available even without opening the Find and Replace window, transforming new data only took one keystroke: ⌥⌘=. 15 repetitions of the process only took a couple minutes. (This was right on the threshold of "should I automate this?" If it was 100 repetitions, the answer would have been a definite "yes".)

Now, chances are you'll never have to perform this exact task. In fact, the chance that I'll have to do this again are near zero. But the chances that you'll have to rearrange some lines of text are pretty high. Even if you have to look up the syntax, just knowing that the apps you have on your Mac are up to the task will enable you to solve the problem and get the work done faster.