Thursday, September 26, 2013

Moving from iOS to Android: Oy Vey!

For the past month, I have been debating where to go when my iPhone 4 contract expires.  Was it worth staying with the iOS ecosystem, and maybe upgrade to a shiny new iPhone 5S, or would it be better to go another route.  So I debated: iOS vs. Android, new and on-contract vs. older and off-contract...  What did I really need?  I finally decided that what I really wanted was (in order):  4G with LTE and HSPA+ capability, jailbreak/root available, off-contract.  So I found a nice Samsung Galaxy Note on Amazon and bought it up.  Then the fun began...

iPhone Data vs. Everyone Else's Data
Silly me for assuming that I could simply move the SIM from my iPhone 4 to the Note.  Converting the iPhone 4's microSIM to a miniSIM was simple enough, as there are plenty of kits to solve that problem, but there are more devils in the details.  Key to this is that AT&T still maintains separate data plans for iPhones and everything else.  So while my new Note registered with AT&T and I could send and receive calls, I had no data access over the AT&T network.  The good news is that it's simple enough to change your data plan right from the AT&T web site.  The bad news is that you (the end user) can not change from an iPhone plan to a non-iPhone plan via the website.  So to the local AT&T store I went on Friday...September 20th...fully prepared to stand behind the masses activating new iPhones.  Fortunately no one in my neighborhood was doing this, and it took the AT&T sales guy less than two minutes to magically fix my data networking plan issue.

SMS vs. iMessage
Now with that problem solved, I texted my wife to see if she could join me for lunch.  My text to her was delivered great.  Her text back?  Not so much.  You see, she decided to stick with her iPhone 4 when I switched ecosystems.  My text to her was sent as a standard SMS message.  Her response back was intercepted and interpreted by Apple's iMessage service.  and it seems iMessage still associated my mobile number with my now-out-of-service iPhone 4 and sent her response via iMessage to all my Apple devices.  So while I had my Note in-hand and silent, my iPad and Macbook sitting at home proudly and promptly posted her reply.  Bad enough that I don't get texts from my wife, but 80% of my work colleagues use iPhones as well.  And we frequently text each other.  I couldn't be that much out of the loop.

So some quick Google-fu later that afternoon produced a result:

  1. Put the SIM back in the iPhone.
  2. Once it has registered with AT&T, go to Settings->Messages and disable iMessages.
  3. Wait a few minutes for the phone to send some housekeeping texts in the background.
  4. Power off and move the SIM back to the Note.

That did the trick, mostly.  My wife and I were able to send texts back and forth shortly thereafter.  It took nearly a day longer before I started to receive texts from all of my iPhone colleagues, however.

Whaddaya Mean No Voice Dialing?
This seems completely fundamental to me, but clearly I'm just an Apple fanboy.  Since I first fired up my 3GS, I've been able to place calls from my phone by simply long-pressing the button on my headset and saying, "Call , mobile/work/home."  And it didn't matter if the headset was wired or Bluetooth, or if the phone was unlocked or locked.  It just worked.  And it made sense.  If municipalities were (rightly) cracking down on people manipulating their mobile devices while driving, naturally you'd want users to be able to make calls hands-free, even if the phone were locked.

Clearly the Android community disagrees.  There's a nifty Google Voice Talk app on my phone, but it only works when the app is open.  So I searched for something better and found an app called Headset Button Controller that, for $2.99, will let you set up all sorts of controls for single-press, double-press, long-press, etc. to approximate what you get natively in iOS.  (In my case, I set up long-press to launch the Google Voice Talk app, and a short single-press to answer/hangup calls.)  And it seems to work mostly OK.  Except that sometimes it doesn't work.  And sometimes it will let me voice call while the phone is locked, and sometimes it barks at me to unlock the phone first.  And Google Voice Talk is really bad at matching entries in my contacts list.  Nearly half the time it fails to match and suggests a bunch of Google searches instead.  Why when I start a command with "Call" Google isn't intelligent enough to compare my words against my contacts, exclusively if I'm speaking words and not numbers, is beyond me.  But there I go being an Apple fanboy again...

By the way, I wrote to Samsung about this, trying to help them understand that the current environment surrounding corporate BYOD security and hands-free operation while driving means that Android, and by extension Samsung, is at risk of not being a serious consideration for business users.  Here was there response:
We can understand your concern, we are sorry to inform you that as of now there is no option to make a call with out unlocking the device via Bluetooth headset. Should this become available it will be posted in Samsung official website. Unfortunately, we are unable to speculate when/if this feature might be available due to the fact that this might lead to inaccurate information and confusion.
In other words, "Thanks, we'll get back to you."

Every Action is a New Action.  Every Response is a New Response.
A colleague who had explored both the iOS and Android ecosystems once told me, "Apple is way more polished.  Android feels like Linux.  It's really cool, but it just isn't finished."  Most of that, I assumed, had to do with the presentation and rendering of the user interface.  I have a bunch of Android tablets, and I have a real appreciation for how difficult it can be to get a consistent look and feel across myriad hardware and display types.  And that was one of the compelling things about getting a Samsung Galaxy phone.  I figured that because Samsung is the major player in Android now, that most of the UI issues would be resolved as people build towards the dominant platform.  And that's mostly the case.  Of the apps I've downloaded from the Play store, I don't think I have any that present UI issues with my phone.

But clearly the "just isn't finished" comment reaches more broadly than the UI.  As I explained with voice dialing: the same app can present different and seemingly unpredictable responses under conditions that seem to me to be similar.  Whether it's voice dialing, tweeting from Slices, or simply being able to bypass the lock screen if a calendar alert shows up on it, I swear I can not predict what the behavior is going to be the next time based on what it was the last 10 times.  Yes, apps are buggy everywhere.  But they seem more so on Android, and in more unpredictable ways.

Apps
As I said before, I can sympathise with developers trying to create apps for a wide ecosystem.  But so many of the apps available in the Play store are absolute garbage.  And the problem with apps that simply don't work isn't one that's limited to small-time, independent developers and hobbyists.  Take for example the Samsung Wallet app.  It's written by Samsung -- for Samsung devices.  Read the page on the Play store and you will see that the Galaxy Note is *specifically* listed as a supported device.  So I downloaded the app on my Note and launched it.  I got the Sign In and Terms of Service Screens great.  Then the app tried to actually do something.  "Network Error".  So I force-closed the app, cleared the app data, and tried again.  "Network Error."  Even the Samsung App Store app that came PRELOADED on the phone is broken.  Similar network errors.  So I deleted that app and re-downloaded the app from Samsung.  Now I get a nice message that my device or country is not fully supported, followed by a page that simply says No Data.  Cripe!

By the way, keep reading the Samsung Wallet page in the Play store -- scroll down to the comments -- and you will see my experience with Samsung's Wallet app is not unique.

Other apps just end up being horrific battery parasites.  The Groupon app, for example, runs in the 10-13% range on my battery stats at all times, even though I never open it except to display vouchers when I pay for something.  My best guess is that it's constantly polling the GPS and trying to push the latest local deals my way, even though I've set all notifications off.  The Facebook app is similar.  All notifications are off and the app is set to update status only manually, and yet when I finally gave up on Groupon and uninstalled it, there was Facebook consistently hitting 10% in my battery stats.  Guess what app I uninstalled next?

And would that the battery grubbing were only seen in 3rd party apps, but even Chrome is a notorious battery hog.  Worse than that, Chrome -- Google's own browser running on Google's own OS -- is an hellacious resource hog.  Most times that I launch Chrome, I end up rebooting the phone afterwards to cure all of the response issues and lag it introduces.  On a couple of occasions I simply put the phone down and walked away, just to see how long it would take Chrome to clean itself up.  And on those occasions, Chrome regularly registered 11-13% battery consumption hours later, while the overall battery capacity dwindled as if I had been having an hours-long conversation on the phone.  See ya Chrome!

Music in the Car
Rarely do I listen to over-the-air radio broadcasts anymore.  Thanks to Apple's iDevice ecosystem, it's very easy to connect your iPod/iPhone/iPad to a car stereo system and start streaming music -- whether its music pre-loaded on the device and played via the iPod/Music app, or 3rd party like Slacker and Spotify.  This is another case where "it just works" is so true.  Enter the Note.  It fails miserably in all three of my vehicles, and note that none of them use the iDevice interface that "locks" the device.  I suspect it has to do with the fact that the Note is trying to mount itself as a mass storage device rather than a media device like an iDevice, but I can't find an option in the settings that seems to work.

So I invested $25 in a cable from a company called CableJive that's supposed to fix the issue.  The samDock cable I ordered is supposed to work with my Note, and should be supported by all systems that (1) can charge the device, (2) don't lock the controls on the device, and (3) play analog audio.  I know my car systems all meet requirements 1 and 2, and I'm pretty sure they all meet #3 as well based on previous experiments with iPhones and Dock/micro-USB cables.  But when I connect the Note through the samDock to my car systems, I end up with either an Error or a No USB message.  And no sound.

Summary
I'm not giving up yet, but this process is definitely making me question why I switched ecosystems.  I was prepared for what I saw as obvious issues, like synchronizing media between iTunes and Android, but I've been truly amazed by the lack of basics like voice dialing and the unpredictability of the OS and apps.  I'm going to give it a year, or at least try to give it a year, before I give up.  Hopefully the experience improves.

Sunday, July 21, 2013

Dashing through (Zero) Windows

One of the neatest devices Sony has ever sold is the Sony Dash.  For those unfamiliar, the Dash is/was Sony's take on the Chumby platform.  Most of what it does is now done better by tablet computers, but it is still far-and-away the best nightstand alarm clock ever conceived, with separate controls for alarms (nearly infinite) and screen wake/sleep (also nearly infinite).  In fact, it serves so well as an alarm clock that I use it to teach my kids when it's OK to be up for the morning. ("If the screen is sleeping, you should be sleeping.  If the screen is awake, you can be awake.")

A few days ago, both of my Dash's mysteriously stopped working, or rather stopped being able to connect to Sony's back-end servers through ssm.internet.sony.tv, which basically turns the Dash into an expensive brick.  We did suffer a power outage, but everything else on my home network recovered OK, and I had no problems reaching anything on the Internet from any of my other devices.  So naturally I assumed the problem was on the Sony end.  In the process of (and after) getting nowhere with Sony's online forum community and tech support, I did a bunch of troubleshooting on my home network.  I double-checked configs on my firewall and home switch.  I rebooted everything.  I wiped and re-configured my firewall.  I even swapped my trusty SSG5 for an SRX210 I had in my lab.  Nothing changed.

So I hypothesized that the problem was in the FiOS network outside my house.  I turned on the hotspot on my mobile phone and connected the Dash to the Internet through it.  Success!  So what could Verizon be doing to cause the problem?  Luckily, I had a Wireshark trace from the Dash during the outage.  So I traced a HTTP connection to ssm.internet.sony.tv from the laptop, both via my home network and via the mobile hotspot.  I noticed that when I tried to connect to Sony via my home network, the browser session merely timed out after a while.  When I tried to connect to Sony via my mobile hotspot, I got an immediate message about a bad proxy.  That sounded like a successful connection from a plain old browser.

So I compared the trace from the Dash to the traces from the laptop.  It took several reads, but I finally saw something interesting in the TCP session setup.  (You can follow along if you like with the trace from the Dash and the trace from the laptop via the mobile.)  In frame #2 of the Dash trace, you can see that the SYN-ACK packet that comes back from Sony indicates a TCP Window size of 0, whereas the SYN-ACK packet in the laptop trace indicates a TCP Window size of 5512 (see frame #3).  I double-checked this against the laptop trace via my home network, and the laptop received a SYN-ACK with Win=0 as well when connected to my home network.  So now I definitely had a smoking gun.  Moreover, I had an indication that Verizon probably wasn't the problem; it was more likely my firewall proxying the TCP three-way handshake.  I was using the SRX at this point, so I executed the set security flow tcp-session no-syn-check and set security flow tcp-session no-sequence-check commands and committed the changes.  I cleared the old sessions to ssm.internet.sony.tv from the SRX session table and fired up the Dash on my home network.  Success!

Now what's interesting is that what changed at the time of the outage was not my firewall config, it was something else.  The jury is still out as to whether the issue was caused by a change Sony made or Verizon made, but somebody changed something that broke the default TCP proxy behavior of both my SSG and SRX.  If I ever get to the bottom of that, I'll post an update.

-- Greg