Voice recognition can't spell big words either

Pro-tip: the voice recognition feature on your phone is not as smart as you.

Here's the situation: I was reading a political philosophy article that was discussing some ideas of Karl Marx because I was a philosophy major and this is the sort of thing we do in our free time.  Anyway, for some reason I wanted to look up the term "bourgeoisie".  The article didn't use that term, but it came to mind and I wanted to see if my understanding of how Marx used it was correct.  So I started typing the word into Duck Duck Go on my phone and suddenly realized - I don't know how to spell it.  (In my own defense, the word originates in French, which is notorious for spelling things in a way that is not intuitive to native English speakers.  Especially the ones who don't speak French.)

So, being a card-carrying computer geek, what do I do?  In a fit of blind optimism, even though I know better, I push the "microphone" button on my virtual keyboard!  I might not know how to spell "bourgeoisie", but I do know how to pronounce it.  Why struggle trying to figure out the spelling when I can just say it and let Android do the spelling for me?

Yeah, that didn't go so well.  Apparently Google voice control doesn't even know that word.  I tried several times and the closest it got was the quasi-phonetic spelling "booshwazee".  Although, oddly enough, searching Duck Duck Go for "booshwazee" actually does show the results for "bourgeoisie".  So in that sense, I guess it did work.  Kind of.  But not really.

Moral of the story: don't count on your apps to be more literate than the average user, especially in a multi-lingual context.  In retrospect, this should have been obvious.  What was I thinking?

The Joy of Gaming With Your Child

For this Christmas post, I wanted to share an experience from a couple of weekends ago that I hope will be entertaining, especially for any parents out there.  Let me set the scene.

As you may know, I have a young child - a seven-year-old son.  Like many (if not most) little boys, he really likes video games.  We limit his screen time, usually to an hour a day, but we allow him to choose what he wants to do with it.  He can watch TV, or use his Kindle, or, on the weekends, play the Wii.  (Not WiiU or Switch - just a plain-old Wii that we've had forever and barely used before he was born.)

Important background information: While my son is generally a very happy child, he's growing and losing teeth at the moment, so he's a little...difficult on some days.

So on this particular Saturday, around 3:30 in the afternoon, my son announces that he hasn't had his electronics yet today and would like me to play Wii with him.  OK, that's fine. Usually he wants to play Mario Kart or Super Smash Brothers, but the previous week he discovered Super Mario Wii, so that's what he wants to play.

Super Mario Wii box art Super Mario Wii box, courtesy of WikiMedia

This is bad news.  Why?  Because inexperienced seven-year-olds and platformers don't mix well.  His hand-eye coordination is still developing and he doesn't really "get" the puzzle aspect of platforming.  So, needless to say, he doesn't do very well.

Now, in the good old days of the original Super Mario Brothers, this would not have been a problem.  He would die quickly and then I'd take my turn and we'd go back and forth.  But Super Mario Wii is a cooperative multi-player game, so you actually both play at the same time.  And not only is it cooperative, but the players can interact with each other, meaning that you can bounce off another player's head, or push them along the screen.

At this point you might see where I'm going.  I'm sure this can be a very fun way to play, but when you're playing with someone who can't really control their character and doesn't fully understand the objective of the game, this is a recipe for frustration.  I end up playing the same levels over and over because my adorable and wonderful child whom I love very much keeps getting in my way and getting us both killed.

Fortunately, on this particular day I had the foresight to grab that bottle of Jack's Abbey bourbon-barrel aged lager wine that's been in the refrigerator for the two months (as I mentioned in my fitness post, I don't drink much these days) before I sat down to play.  That helped me get through the gaming session and see the humor in the situation.  But on those days when things aren't going well or I didn't get much sleep, these sessions can be very trying.

But at least he's having fun and hopefully building some good memories.  And he is improving, slow but sure.  So I'm glad we can do this together, even if it's not always easy.  Thus is parenthood.

New browser plugins for KeePass

Almost three years ago I wrote a post about setting up a browser plugin for KeePass.  That plugin was chromeIPass and it worked pretty darn well.

Now fast-forward to a few months ago.  My wife's laptop broke down and I had to re-install Windows on it.  In the process, I tried to set up chromeIPass and discovered that it's dead!  Well, mostly dead, anyway.  It's open-source, and the source is still available, but it's no longer available in the Chrome app store.  So it's effectively dead.

So I started looking for alternatives.  The good news is that there's a fork of chromeIPass called KeePassHTTP-Connector. That still exists in the Chrome store.  However, it's also been discontinued!  Apparently it's deprecated in favor of KeePassXC-Browser which is a similar plugin for KeePassXC.  Apparently KeePassXC is a cross-platform re-implementation of KeePass.  I'm not sure why that's needed, since KeePass is written in C# and runs under Mono, and .NET core is now cross-platform anyway, but whatever.  The one nice thing about that browser plugin is that it uses a KeePassNatMsg plugin to communicate with KeePass.  Apparently that's more secure because it doesn't involve talking over HTTP.  But apparently it doesn't work correctly with "real" KeePass.  At least, it didn't for me - the plugin segfaulted when I tried to configure it.

Luckily, I did find a currently supported plugin that actually seems fairly good - Kee.  This is actually intended for a separate password manager, also called Kee, which I gather is some kind of paid service based on KeePass.  (Or something.  To be honest, I didn't really look into it - I only cared about the browser plugin.)  The Kee plugin is based on the old KeeFox plugin for Firefox, but this one also runs in Chrome.  It uses the KeePassRPC plugin for communication with KeePass.

If you used KeeFox in the past, this plugin is equally painless to use and configure.  Just install the KeePassRPC plugin, fire up KeePass, and install the browser plugin.  Kee will automatically attempt to connect to the RPC server and KeePass will prompt you to authorize the connection by bringing up a window with an authorization code.  Just enter that code into the window that Kee opens and click "connect".  Done!  Now when you visit a site that's in your KeePass database, Kee will put icons you can click in the login boxes and auto-populate the login form.  (The auto-population can be turned off - the convenience of that functionality is fantastic, but the security is iffy.)

So at least there's still a good, supported KeePass browser plugin out there.  I suppose this is one of the pitfalls of "roll your own" systems based on open-source software.  Since KeePass doesn't bundle a browser plugin, like many of the proprietary password managers do, we're forced to rely on the community, which can be both good and bad.  The bad comes when the "community" is basically one guy who eventually loses interest.  And while it's great that the source is there for anyone to pick up, it's important to recognize that adopting a new software project requires a substantial time commitment.  Free software is free as in "free puppy", not "free beer".

Well there's a shady UI pattern

Here's a lovely UX anti-pattern I discovered today.  I encountered this message while trying to uninstall MediaMonkey, which is a Windows-based music/media manager.

Pop-up when running the MediaMonkey uninstaller that asks if you'd like to get the Gold version for free.

The anti-pattern here is not so much with the pop-up asking if you'd like to "get MediaMonkey Gold for FREE" (note the all-caps on "free"), it's the fact that clicking the "yes" doesn't actually do that.  It just takes you to the generic MediaMonkey download page.  That page says nothing at all about getting the gold version for free.  It just has the comparison matrix for the free vs. gold versions and gives you links to download the free version or to buy the gold version.  Not a word about getting it for free.

This is rather disappointing.  Not because I particularly care about getting MediaMonkey Gold (I would have just bought it if I did), but because up until that moment I had a pretty good opinion of MediaMonkey.  It's not that I didn't like it - I was uninstalling it because I just don't use it.  It's actually a very nice app with lots of good features.  It's just that in the past year the only thing I've used it for is ripping a bunch audio CDs to MP3, and apparently that's a feature that's only available during the "trial period" of the free version.  I haven't used the app in about six months, so my trial period has expired and I didn't feel like paying for something that I use maybe twice a year, hence my decision to just uninstall it.

This just seems like a really shady tactic to discourage people from uninstalling the application.  Offering free stuff to people who threaten to stop using your product seems a bit iffy in the first place, but if you're going to do that you should at least actually send them to a place where they can get the free stuff.  Don't say "you want free stuff?" and then redirect them to the main sales page.  That's the kind of thing you'd expect from a dodgy banner ad, not an otherwise respectable, high-quality software package.

I dislike voice interfaces

Last year I bought a new car.  And I mean a new new car - a 2019 model year right.  My last two "new cars" were low-mileage "pre-owned" (i.e. "used") cars.  They were fine, but they didn't have any bells or whistles.  In fact, my last one didn't even have power locks or windows.

The new car has all that stuff, though.  And one of those bells and whistles is an entertainment center with a touch screen and support for Android Auto.  This was actually something I really wanted, as opposed to having just the integrated options.  My reasoning was that with Android Auto, I can keep the "brains" of the system in my phone, which can be upgraded or replaced, whereas integrated systems are likely to become outdated and maybe even discontinued before I get rid of the car.

The Reality

The reality of Android Auto, however, is not as great as I'd hoped it would be.  Much of the reason for this is that it's primarily driven by the voice-control features in Google Assistant.  There's some support for typing and menu-driven UI, but it's intentionally limited for "safety reasons."  For example, you can't type into Google Maps while you're driving, nor can you scroll beyond a certain limit in the Plex app, because paying too much attention to the screen is dangerous.

You may have noticed I put "safety reasons" in "sarcasm quotes".  That's because the voice control can sometimes be so frustrating that I find myself more distracted by it than if I could just search for what I needed from a menu.  I end up angry and yelling at the console or just picking up my phone and using it directly rather than the car's console interface.

Let me give you an example.  While driving with my son, he asked to listen to some music.  He wanted to listen to "My Songs Know What You Did in the Dark (Light Em Up)" by Fallout Boy.  So I said to Google, "Plan light 'em up by Fallout Boy."  Google replied, "OK, asking Amazon Music to play 'My Songs Know What You Did in the Dark (Light Em Up)' by Fallout Boy."

Great!  The music started playing and I heard, "Do you have the time, to listen to me whine."  I looked at the screen and Amazon Music was playing Green Day.  Why?  I have no idea.  So I tried again and asked Google, "Play My Songs Know What You Did in the Dark by Fallout Boy."  Once again, Google replied "OK, asking Amazon Music to play 'My Songs Know What You Did in the Dark (Light Em Up)' by Fallout Boy."  And this time, it played the right song.  It claimed to be asking Amazon the same thing both times, so why did one work and the other didn't?  Who knows?

This wouldn't be a big deal if it were an isolated incident, but it's actually pretty common when using Android Auto.  Sometimes it gives you what you ask for, sometimes it doesn't.  Sometimes is claims it's giving you what you asked for, but gives you something else.  And sometimes it just doesn't give you any response at all.

And it's not just Google - I have an Amazon Echo and Alexa does the same sort of thing.  It seems to be a bit more reliable than Google, but it still has problems.

When it works...

The thing is, voice interfaces are really great...when they work as you'd expect.  When you know what you want and the system correctly understands you and maps your request to the right thing, they're like the computers on Star Trek.  And to be fair, they do work well often enough to make them useful.  It's just that when they don't work, I find them unreasonably infuriating.

I think the reason for this is that the discoverability of voice interfaces is limited.  On the one hand, yes, you can just ask your device anything.  But the world of "things you can ask" is so huge that it's overwhelming - it's hard to tell where to start.  And when something as simple as "play X song" doesn't work, it's not obvious where to go next.  Try also including the artist?  Maybe a variation on the title?  All you can do is keep trying random things and hope that one of them works.  Sometimes you stumble on the right thing, and sometimes you don't and just give up in disgust.

It's kind of like trying to use a command-line interface, but with no help and no manual.  OK, so the one command you know didn't work.  What next?  Well, you can try some variations on the arguments you passed it.  Maybe sprinkle in a common option that might be applicable.  But ultimately, it's just blind guessing.

When you're using a graphical interface, you still end up guessing, but at least it's a bounded search space - you're limited to what's on the screen.  Also, the options usually have at least some description of what they do.

If nothing else, these issues with voice interfaces are a good way to relate to non-technical users.  You've seen non-technical users get confused, frustrated, and angry when they encounter a task that they don't know how to accomplish or a problem that they can't seem to fix?  Well, that's how I feel when Android Auto tells me one thing and then does another.  Maybe they'll fix that some time soon....