måndag 2 maj 2016

An Android Fanboy tries iOS


In general, I am a long-time fan of Google's services and devices. In addition to the HTC Hero and original Samsung Galaxy Tablet both running Android, I have owned every single Nexus phone and tablet except for the Nexus One and the most recent devices released in 2015. In other words, I owned the Nexus S, Galaxy Nexus, Nexus 4, Nexus 5, Nexus 6 (2014 edition), Nexus 7 (both the 2012 and 2013 editions), Nexus 9 and Nexus 10. I have been quite pleased with the feature-set of these Google-branded Android devices which receive prompt updates, unlike the Android ecosystem at large.

However, over the years I've become increasingly annoyed at the user interface performance and usability of Android devices. Usability was mostly cured with the Ice Cream Sandwich release and performance was significantly improved with Jelly Bean, but even today my Nexus 6 and Nexus 9 from 2014 have much slower and jerkier scrolling and swiping while browsing heavy sites in Chrome than even the original iPad running Safari, a device I imported from the UK before it was released in Sweden and still own (so I can compare side-by-side). That an ancient device like that, the first popular tablet if you will, is faster than a state-of-the-art Android device -- even in limited scenarios -- says something about the technology or culture of Android and its eco-system!

Ever since getting my MacBook Pro, by far the best computer I have ever owned, I was tempted to see if the grass was greener on the Apple side of the fence. While Android seemed to still be more feature-complete than iOS, the gap had been shrinking over the years.

This post will summarize the good and bad points of this experiment as I see them, having replaced my Nexus 6 and Nexus 9 with an iPhone 6S 64 GB and iPad Air 2 64 GB (wifi + cellular edition) for two months. The post will go through my experiences with iOS in terms of the following aspects:

  • Build and Hardware
  • Apps
  • Web Browsing
  • Using Google Services
  • Navigation
  • Keyboard
  • Notifications
  • Multitasking
  • Mac and iPad Integration
  • Using an Android Wear Smartwatch
  • Conclusion

Build and Hardware

While some Nexus devices had good pretty good build quality (e.g. Nexus 5), others were a disaster (Nexus 9) owing to the fact that Google partners with different manufacturers for every device. That might change in the future as rumour has it that Google might start building its own phones completely in-house, much like it has with its Pixel line of devices (including the great-looking but criticized Android tablet released last year).

The iPhone 6S feels a little bit slippery in my hand, but overall it's the best-feeling phone I have owned in terms of build and appearance. It's a lot smaller than my Nexus 6 and I'm torn on whether it's too small or not -- perhaps I should have gotten the Plus edition instead which is similar in size to the Nexus 6 and can fit more stuff on the display.

The display itself despite the "Retina" moniker has a lower pixel density than my Nexus 6, but it's still good enough not to notice (and that probably helps with the performance, too). It seems less prone to picking up fingerprints than my Nexus 6. It also has a pressure-sensitive screen which I felt was a big selling point (it is rumoured to come to some Android devices soon, as well). In practice, I over-estimated the value of this feature and barely make use of it in practice. While reliable most of the time, sometimes it mistakes my light press for a hard one. This feature still feels gimmicky since it's not well-integrated into the user interface of most apps yet (and perhaps more importantly, it's difficult to actually recognize what apps support it and where, since it's never apparent from the user interface graphics).

The finger-print sensor is great. It's fast and accurate and rarely fails on the iPhone (for some reasons I have had to frequently re-train the iPad's finger-print sensor, though, in order for it to keep recognizing me). Unlocking the phone by placing the finger on the home button for a second is very convenient. The finger-print sensor on the new Nexus 5S and 6P devices is even faster, but is somewhat awkwardly placed on the back and that's simply not as convenient for me.

The camera produces better photos than most Nexus devices that I've owned, but more importantly the shutter responds instantaneously -- more important in practice than the capability of the sensor. Even starting up the camera app on an Android device is often painfully slow and by the time it's ready the perfect shot is already gone.

Coming from the Nexus 6, I feel like the battery lasts much longer -- especially overnight. I can't tell for sure whether this is due to the battery coming straight from the factory or whether it's an issue with iOS itself, but I suspect the latter is an important component. The Lightning cable is convenient and much more robust than the micro-USB connector of most Android devices, but I very much miss the wireless charging (QI) capability of most (though not last year's) Nexus devices.

The iPhone seems to boot a lot faster than any Android device I've owned, which is nice.


I noticed quickly that some apps are more well-developed on the iPhone than the corresponding app for Android. For example, I subscribe to the fantastic weekly Swedish news magazine Fokus which has an official app for both platforms that appears to be based on Qiozk. On Android, this app has wholly inadequate user interface performance, making it almost impossible to browse and swipe-zoom through the magazines. On iPhone it's a different story -- swiping and zooming is really fast and convenient. I now manage to read through most editions of the magazine completely whereas before I struggled every week (two small kids does that to leisure time!) and actually downloaded PDF editions from the website which I would read using the official Adobe Reader app instead. On the other hand, there are fantastic magazine apps for Android, too, so it's probably not an inherent defect in the Android platform itself.

The opposite holds true in a few cases. For example, I have yet to discover a Reddit app that I like -- I find the official app Alien Blue to be rather wonky and no match to e.g. Relay for Reddit.

Some of the apps included on the iPhone are also rather aesthetically unsatisfying in comparison to similar Android apps. For example, the Apple mail app is very dull and almost monochrome in its use of colour. I also very much miss the huge beautiful contact images from Android that were displayed e.g. when receiving a phone call. While the contact images from your Google account are seamlessly synced over to the iPhone (which is great), they are rarely put to good use.

Web Browsing

The browsing experience on the iPhone is very good. As mentioned previously, navigating through demanding sites on Chrome on mobile devices has often been a rather frustrating experience for me (and it's not completely fluid on desktop, either) whereas Safari is always wonderfully fluid everywhere.

When I made the switch to iPhone, I intended to keep using Chrome on my Mac and Windows PCs while using Safari exclusively on iOS. Unfortunately I did not discover a feasible way of keeping my bookmarks synced. I already sync my Chrome bookmarks with Google's cloud but there seems to be no good way of syncing those with Apple's cloud in turn (the one seemingly-robust solution I found was limited to Windows).

I decided to sign up for Pinboard instead, keeping most of my bookmarks there. That in some ways is less convenient because I then have to find my bookmarks on-line or using a Pinboard compatible bookmark managing app and then launch that bookmark in Safari, but on the other hand I get tagging and other features to help me get organized (many years ago I was running delicio.us for the same reason).

While surfing in Safari on mobile devices is generally a joyful experience, there are some annoyances as well. First and foremost, as soon as you touch an advertisement it's considered selected and the browser moves to the URI specified by the ad. On Chrome, that only happens if you touch and then release while not moving your finger. As a result, it is very easy to accidentally select an ad by merely swiping through a page. (Update: This no longer happens consistently to me -- perhaps this problem was rectified by an iOS update.)

Secondly, there are some inconsistencies between the iPhone and iPad version of Safari. For example, if you choose to open a link in a separate tab, the iPhone automatically makes that tab active while the iPad launches it in the background.

Thirdly, there seems to be a limit to the number of tabs that you can have open in Safari at any one time, and it's set rather low (maybe 30 or something like that). I tend to open tabs generously as a kind of temporary reading list. On the other hand, this forces me to read content that I might have otherwise postponed indefinitely (my list of open tabs on Android tended to be impossibly long and cluttered).

Many applications that want to display web content -- such as the excellent RSS reader Feedly and the lackluster Reddit client Alien Blue -- do so in a kind of miniature WebKit-based browser instead of launching Safari wholesale. The same mechanism is employed by the password manager 1Password when you ask it to load and log in to a web page. One benefit with this approach is that launching and loading the web page is nearly instantaneous. The drawback is that you have to execute an extra tedious step if you want to load it in Safari instead to gain access to the capabilities offered there, such as bookmark management. Another benefit is that you can easily go back to the dialog that loaded the web page. This is crucially important on iOS because unlike Android, it has no stack-like mechanism to keep track of the load order of apps and dialogs. Hence, there's no system-wide way of going back to the previous display even though individual apps may offer that functionality.

Using Google Services

As I said initially, I'm a big fan of Google's services, having used them for many years for writing and sharing documents, spreadsheets, photos, videos and more. Hence, it's quite important that I can keep using them on iOS as I have no intention or moving to another services ecosystem anytime soon. I'm happy to report that this has not been a problem.

Some Google apps are a little bit weaker on Android, but mostly they have relative feature parity. Often they are slower in getting updated, though, as Google prioritizes its own platform. For example, the Google Photos app on Android has had support for Chromecast for a long time, while the iPhone app only gained this functionality later. Similarly, Google Maps has full off-line support on Android, but not yet on iPhone (but it's been promised).

On the topic of Chromecast, the iPhone and iPad tend to lose their connection after a while, forcing you to re-connect. That's a problem that Android does not have.


At first glance, the home screen on Android and the iPhone look rather similar. There are no home screen widgets on the iPhone (widgets deployed with apps that display interactive graphics) but I never particularly cared for that functionality anyway (who wants to rely on the home screen to discover what is going on?).

Unlike on Android, all installed apps are displayed on the home screen whether you want it or not, so if you don't want to be bothered by some of the default apps (that you can't get rid of), you have to put them in a folder -- essentially sweep the dust under the carpet. In addition, you can't freely lay out the icons -- you can move them in relation to each other, but not insert any vertical or horizontal spacing. I miss that as I found it made it easier to organize groups of apps.

On Android, there are no physical buttons, but there's a virtual back button at the bottom of the display. The iPhone doesn't really have anything similar. Many apps allow for a way to get back to the previous screen, but it's implemented inconsistently. Some apps display a kind of back button on the bottom of the screen while others do it at the top where I can't conveniently reach it while using only one hand.

Android has a consistent, system-wide way of connecting applications to each other. Each app can register the kind of content it can handle, making it easy to open your preferred web browser or e-mail client, for example, from an arbitrary app. It took a while before I realized that iOS doesn't have something similarly complete. If I open Apple's contacts app and select an e-mail address in order to write a new e-mail to that person, it will always launch in Apple's mail app instead of Google Inbox which I prefer. Similarly, Google Inbox seems to launch web links in Chrome instead of Safari. I suspect it's mainly Apple's way of tying you into their ecosystem, even though in some cases like the latter example it didn't work to their benefit (I would have preferred Apple's own Safari to always open web pages).

There is a kind of "sharing" mechanism between apps, though, allowing you to often launch the content that you presently see on screen in another app. When you select the sharing button, an awkward horizontal list of apps pops up and frequently it doesn't even show the app of your choice initially. In that case you have to open up a separate dialog to "enable" that app in the sharing dialog.

iOS has a bunch of "quick toggles", like Android, that you can select if you want to quickly disable wifi, for example. You reach it by sliding upwards from the bottom of the display. Typically, you end up scrolling a bit on your current page before iOS realizes that you wanted to reach the notification center, which is annoying. I think it would have been better if it opened it immediately when initiating an upwards slide from, say, somewhere among the bottom 10 pixel lines of the display.

The copy/cut and paste on iOS feels imperfect. I find it difficult to adjust a portion of selected text, and sometimes iOS changes to rectangular selection when all you wanted was to select a longer section of word-wrapped text. It is particularly problematic if you're trying to cut or copy an URI which has been word-wrapped.


A lot of people praise the iPhone keyboard. Despite some persistence, I have had a hard time getting used to it.

One big problem from my perspective is that it does not support "swiping" -- drawing virtual lines between keys to form words, something I have been using for several years in various forms, both using third-party keyboard and the official Android keyboard as well. This technique makes typing a whole lot faster.

The keyboard constantly presents a box with an auto-correct suggestion based on what you write, but contrary to my expectation, selecting that box actually gets rid of the suggestion and leaves what you originally wrote. If you want the suggestion, you have to press the space key or another word delimiter. I found this somewhat unintuitive. I also couldn't find an easy way of changing language for the auto-correct suggestions -- I probably write a good third of my text in English and the rest in Swedish so making that step effortless is essential.

It is very difficult to move the cursor around by tapping the place where you want it. More often than not it winds up somewhere else. I found cursor placement to work much better on Android, although I can't quite articulate why.

This is probably a problem specific to Swedish and some other language locales, but you can't reach a comma or a dot from the standard keyboard layout without first pressing a modifier key. I find those keys to contribute to better language so I am not a big fan of the extra step.

These days the iPhone has support for third-party keyboards. I downloaded one of my favourite Android keyboards, SwiftKey, but discovered that it didn't work quite as well as it did on Android, partly because "swiping" didn't work quite as well -- and more importantly because there are cases where the official Apple keyboard keeps popping up no matter what you do, it seems. I even removed the official keyboard and all of its languages from the settings but it still didn't make SwiftKey pop up consistently. It made for a frustrating experience and eventually I decided to remove it and just stay with the official Apple keyboard despite its limitations.


Like Android, iOS has a central notification center where apps can display information. You reach it by sliding downwards from the top of the screen. This mechanism has the same problem as the quick toggle display mentioned earlier, in that you typically end up scrolling quite a bit on your current page before the notification center is opened up.

The ability for apps to receive updates, such as chat messages, doesn't seem to be as seamless and fluid as on Android. For example, I sometimes receive a notification from Slack showing part of a new chat message, but when I then switch to Slack to display the full content, it frequently hasn't been loaded yet and takes a good while to appear (sometimes minutes!). Presumably the mechanisms to populate the notification display and the app itself are separate. I can't be certain that this is a weakness in iOS itself rather than being an app-specific problem, but I somewhat suspect the former.

Sometimes the phone will sound but I don't see anything new among the notifications. There's probably a reasonable explanation for this that I will eventually learn.


The multitasking experience on iOS is a mixed bag. Perhaps the most obvious difference in comparison to Android is how you switch the active app. On Android it's done with a software button at the bottom right. The iPhone and iPad do it by pressing the physical home button twice to bring up the menu. My personal preference is in favour of the former solution, as the physical button double-press makes switching app feel much more effortful.

One really nice thing with iOS is that you can swipe an app away from the open app list and it will force-close. That's really useful if an app is acting up. For example, Spotify and even Google's own apps sometimes don't see specific Chromecast devices in our apartment unless you close and restart. To do that on Android, you have to dive deep into a settings menu hierarchy which takes forever (of course, there are third party solutions to this problem).

Occasionally (but rarely), an app just vanishes inexplicably. I believe this happens when the app crashes. Apple probably thought that users wouldn't notice it as much as opening up a crash dialog like Android does. It makes iOS seem more stable to typical consumers.

One great feature which is available only on iPad but not the iPhone is the ability to keep two apps open at the same time in a split-screen mode with a dividing line that you can move. You can also temporarily "slide in" another app without permanently placing it there. These are fantastic features that Android only recently gained -- and only in the latest beta release. I find the iOS way to be somewhat better implemented, as well.

Both Android and iOS can ask an app to save its state and then invisibly shut down the app to save memory and battery. The idea is that the app will be restarted and state restored when the app is is switched to next time. This doesn't always seem to work that well on iPhone, or at least in Safari. For example, if you're tediously filling in a web form while switching to another app to read details to enter (perhaps looking for credit card or adress details in 1Password, say), the content that you already wrote is often completely lost when switching back to Safari. Needless to say, this is extremely annoying.

Mac and iPad Integration

On another topic, Apple has a feature enabling you to read and send SMS text messages from your Mac or iPad. It's supposed to be part of a greater effort at letting you switch platforms seamlessly while continuing your work as you left it.

I found this rather frustrating. Initially I couldn't seem to get it working at all -- in your iPhone's settings, you have to select the iCloud-connected device to grant reading and sending permissions to. When you do, a message with a code is supposed to come up on that device that you have to enter. That worked for my Mac but not for the iPad -- the message simply never came up.

When I did eventually get it working, I was expecting it to be comparable to something like MightyText or AirDroid. Sadly, that's not at all the case. You can only read the messages initiated from the moment when the devices were connected. In my case, I also didn't get to see the names of the contacts in the message threads -- only their phone number -- but that may be because I might not have enabled contacts syncing on my other devices.

If you receive (and even respond to) an SMS message on you phone, that same message might still pop up (along with a sound) on the Mac many hours later despite it clearly being read. Sometimes after I received a call, my connected Mac would keep ringing for quite some time after I responded to the call, making noise in the background while I was trying to talk.

Using an Android Wear Smartwatch

Having dabbled for many years with smartwatches, including Sony's first and second generation models as well as the Pebble, I got the Android-based LG Watch R about a year and a halfago. At this point I'm not ready to dive head-first into the Apple world and get an Apple Watch and so was thrilled when I realized that the iOS support rolled out by Google for Android Wear some time ago unofficially included my watch model as well. My watch required a full factory reset to work with the iPhone, as well as downloading the official Android Wear app by Google.

The iOS support for Android Wear is very limited: no third-party Android apps can be installed onto the watch, but it can still tell time and display notifications from SMS text messages, Facebook and the like. Even incoming phonecalls are displayed, but without the contact picture. I think basic support works for any notification that the iPhone can display in its own notification centre, but the presentation and control over these notifications is more limited than on an Android phone. Still, if you dismiss a notification on the watch, it is seamlessly dismissed on the iPhone as well, which is one of the key benefits of having a smartwatch.

It is also possible to select the desired watchface from a limited number included, but no third-party Android watchfaces can be downloaded.  I was surprised, however, to see that music control from my watch while using Spotify on my iPhone worked quite well. I'm not quite sure how this was accomplished -- perhaps support for some specific iPhone apps was integrated into the Android Wear app on iOS.

I really, really miss the smart lock functionality from Android. With that enabled, my phone would always be automatically unlocked as long as the watch was in Bluetooth range. The previously mentioned finger-print support compensates somewhat for this omission, but not completely (in part because the finger-print sensor obviously won't work with touch-friendly gloves on, mandatory in the cold Swedish winters).

Occasionally but rarely, the phone loses touch with the watch. When that happens, the re-connect process isn't seamless like on Android -- you have to manually start the Android Wear app on iPhone and then tap the watch to re-connect. I also don't think the wifi support built into the watch as a secondary connection when outside of Bluetooth range works on iPhone, either.

Despite these limitations, I can still use my smartwatch on my iPhone for the purpose of displaying and dismissing notifications. Essentially, my iPhone downgraded my Android smartwatch into something like a Pebble (I guess you could call it a "feature-watch" to use mobile industry lingo), but that's not too bad.


As I've been writing this post and thinking about differences between iOS and Android, I've realized that the comparison may not be completely fair, because in my mind I've continously compared iOS devices to Nexus devices -- Google's flagship Android devices with tight integration between hardware and software and frequent updates. Most other Android devices out there have custom-built Android versions which are often heavily modified -- mostly for the worse. They can be bloated, slow and have significant user interface changes. They also may not be guaranteed to get updates for very long, if at all, since the manufacturer has to port new Android releases over. Still, I would never consider getting a non-Nexus Android device, so for me personally, the fight is between iOS and Nexus devices exclusively.

I've been struggling to determine which is the overall best platform. I think some conclusions are inevitable, though:

  • The iPhone and iPad are fantastically well-built devices, surpassing most devices in Android land -- especially tablets -- in terms of build quality and general feeling. The difference between e.g. the iPad Air 2 and Nexus 9 is breath-taking.
  • The hardware is more or less equally capable when compared with flagship Nexus devices.
  • Despite efforts at catch-up by Apple, Android remains more advanced and flexible than iOS, especially regarding third-party integration.
  • Despite continuous advancements by Google, iOS still has a lead in terms of user interface performance. Using an iOS device feels snappier when you navigate, swipe and pinch-zoom, especially while web surfing in Safari. The heavier the website, the bigger the difference.
  • The apps for iOS tend to be more well-crafted.

Despite iOS seeming less powerful than Android to me, I still like using it. I find that I'm not spending as much time customizing and fixing things (because there's less to customize) and generally trying to "go with the flow" the way Apple intended it. Due to better apps, I can finally read my favourite newspaper Fokus on a daily basis in a very effortless way on my iPad. I could never do that reasonably on Android because that version was neglected by the publisher. I also find that despite being somewhat annoyed at the inconsistency of the built-in browser employed by some apps to load content quickly, I still rather like the end result which is the ability to navigate around apps and the web with lightning speed.

I'm still somewhat torn. The performance benefit with iOS is significant, but the limitations are also significant (though not as much as they used to be). It's possible that I have misunderstood some things and that over time, I will learn ways to overcome some of the problems that I have described with iOS.

After two months of using an iPhone as my primary phone (from the end of November to the end of January), I had to end my experiment prematurely much like a medical study showing harm coming to patients from a new drug being tested. While I had initially intended to keep using the iPhone for a year or two to really get used to it, the differences were bogging me down. The seemingly small things -- worse custom keyboard support, less flexible ways to specify favorite apps, and no system-wide back button, for example -- made a lot of difference to me in practice.

I went back to the Android ecosystem for my phone, but the iPad remains my favorite tablet by far.

tisdag 25 augusti 2015

El Capitan might ruin your AppleID account

El Capitan is the nickname of Apple's next major version of OS X. It is open to anyone for testing provided you fill in some on-line forms. Naturally, I had to give it a shot on my MacBook Pro. As usual with a new OS X installation, I signed in with my Apple ID and most things seemed to work fine. Eventually I encountered an issue with the Intel Haxm emulator for Android (which is not extraordinary as this is a pre-release of OS X after all) so I decided I would go back to Yosemite.

My first hitch came when I tried to re-install OS X from the recovery partition. It detected that my existing installation was El Capitan, whereas the recovery partition contained Yosemite -- because of this mismatch, it refused to install. Thankfully, I discovered that some forward-thinking person(s) at Apple had built in a web-based recovery option as well. After a while, Yosemite had downloaded and installed successfully onto my Mac -- or so I thought.

When I tried to log in to the App Store in Yosemite, my login details were refused with the less than helpful message "Error description not available". When I tried to log in using iCloud with the same account, I was told that two-factor authentication was enabled, and that I should look at my "other devices" for a code. I have no other OS X or iOS devices, and I had no memory of ever having enabled two-factor authentication, but I could select an SMS text message option as well. This worked fine -- I got a code on my mobile phone and, using that, could log in to iCloud.

I contacted Apple support who walked me through checking some basic settings and so on and told to try logging in to the Apple ID administration site online. The theory was that I would be able to disable two-factor authentication and it would all work fine again. When I went there, I was presented with a somewhat similar request for a code, except the text message option never resulted in any message being received on my phone. We tested this numerous time without success and I was also in touch with two other support technicians at Apple. With two-factor authentication enabled, Apple was not going to be able to help me gain access to my account, even though their server wasn't sending me any text messages when trying to log in to Apple ID (whereas logging in to iCloud was still working fine).

I registered a new Apple ID and used that to gain access to the App Store, accepting that my previous Apple ID might simply be irreversibly lost. However, Apple eventually got in touch with me again, this time a senior support technician, and advised me that if I went this route, I probably would not be able to use services like "Find my Mac" as those would be registered to my original account. In order to fix that, I would have to bring my receipt of purchase and get my Mac serviced at a repair center -- at my cost. While Apple support was always polite and much better than most support experiences I've had before, this greatly annoyed me. I stressed that there's nothing wrong with my computer, but something at Apple's backend prevents me from logging in to either the App Store or the Apple ID administration site, presenting a weird error message in the first case and not sending any SMS code in the second case. The Apple representative was sympathetic, but was going away on holiday. I was told the matter would be escalated further, to an actual Apple engineer who would get in touch with me the following week.

I was never contacted by the engineer, but I decided to try "Find my Mac" with my newly registered Apple account by logging in to the iCloud website. Thankfully, it worked just fine, so the theory that my computer was somehow irrevocably tied to my original account didn't quite seem to add up.
I e-mailed the senior support technician again to understand the situation better and a phonecall was arranged. I was prepared to completely give up on my original iCloud account -- all I wanted to know was whether there was any downside to just using my new one instead (except losing App Store purchases and so on, of which I had few).

The Apple technician confirmed to me that since I could successfully use "Find my Mac", it was clear that my new Apple ID was properly setup on my computer and I could simply ditch the old one. More interestingly, he also offered up a theory on what might have happened. He explained that El Capitan comes with a new two-factor authentication system for Apple IDs, different from the two-factor authentication presently available. He said he thought El Capitan either enabled two-factor authentication automatically upon installation, or made it very easy to accidentally enable it during the sign-in process without realizing it. Because I have no other Apple devices to receive codes on, this setting probably "wrecked" my account. It might be possible to re-gain the original account by re-installing El Capitan and using the two-factor authentication setting there to disable it. I was thrilled to finally get a plausible explanation of what had happened, but tired after investing a lot of time in trying to figure out this problem. I decided to simply let the matter be. I said that while I accept some blame for this problem for trying a pre-release operating system and was prepared to live with various problems while using the new version, I was very annoyed that the El Capitan also seemed to make important changes to my on-line Apple ID that under some circumstances could prevent me from logging in again -- maybe ever -- from other Apple devices or operating system versions. The support technician said he would relay this to the OS development team.
Apple's e-mail about two-factor authentication

Afterwards, the senior Apple technician sent me a link to a page explaining the new two-factor authentication in El Capitan and iOS 9. It seemed to me like El Capitan might have automatically enrolled me in this new feature, but failed to let me add a trusted phone number to receive SMS codes on.

Lesson learned: trying new operating systems could affect more than your current computer, tampering with on-line backend systems in unpredictable ways. Be careful out there!

tisdag 2 juni 2015

Testing the Android "M" Developer Preview


Towards the end of the year, the Android release code-named "M" is expected. Like its predecessors, it will probably be named after some piece of candy but the final name has not yet been announced. At the Google I/O developer conference last week, an early developer preview of "M" was made available for select Nexus phones and tablets. I took the opportunity this past weekend of giving it an early spin. This post will not highlight the major additions to this release, but will focus on my experience installing it.

Broken Flash Script

I started with my Nexus 6 phone. To install, I used the familiar procedure using the adb and fastboot command line tools shipped with the Android SDK. These tools are familiar to most Android developers and other technology enthusiasts who like to load different firmware images onto their devices. The first thing that I discovered was that the installation script (flash-all.sh) for Mac did not work, outputting an error message. This situation is similar to what happened with the Android 5 Lollipop release and it is disappointing that the problem persists. However, a helpful blogger has described a simple workaround here which involves flashing each image individually.

Stuck at Login Screen

One of the first things that happened when booting up the new release was that I was asked for wifi credentials and then my Google account, as usual when booting an Android device. However, for some reason my Google account details were not accepted, an obscure and general error message being displayed instead along with a message that I should try again. There seemed to be no way of proceeding, though, the phone seemingly stuck at repeated failed attempts to validate my Google account. Eventually I rebooted the phone using the power button and from then on, the remainder of the setup went smoothly.

Initial Impressions

Android "M" at first glance is quite similar to Lollipop. Among the few differences that I immediately noticed was a new application menu with apps alpabetically ordered by initial letter. This was a welcome change as it now appears to be much faster to find a specific app. Other minor things that I discovered was that apps could be un-installed straight from the launcher desktop and that the volume settings have once again been revamped, including making it easier to keep the phone completely quiet and vibration-free at night while still allowing any alarms to trigger.

I've been using the "M" release on a daily basis now since the weekend and for the most part it has been working just fine. However, one major annoyance is that playing music on Google Play Music often crashes the Android Wear app, which manages communication with my Android Wear smartwatch. When that happens, the song won't play immediately and I have to fuss around with the music app, selecting different songs and switching between screens until suddenly (and arbitrarily) it starts working again for a while. In addition to this annoyance, the music control from the watch is completely broken. It is not completely certain that these problems are caused by Android "M", however. Other possible explanations could be recently introduced bugs in the Android Wear firmware running in the watch (which was also recently upgraded by an automatic over-the-air update) or bugs in the Android Wear app for the phone. However, as I have not previously seen these bugs in Lollipop, I tend to blame "M" for now.

I tried to install Viber from the Google Play Store, but it wasn't visible -- perhaps it has been disabled for "M". I also discovered that I couldn't start the Uber app which I hadn't used before, but was meaning to give a spin - it forced-closed immediately on startup (it is possible, though unlikely, that the bug presents on Lollipop as well). I'm sure this problem will go away with an update to the app eventually.

I am staying with Android "M" for now, looking forward to future rumoured over-the-air updates as the release matures, but if the Google Music problems in conjunction with Android Wear persist for much longer, I might go back to Lollipop.

Tablet Not Booting

I followed the same procedure to install "M" on my Nexus 9 tablet. Unfortunately after installation, the tablet won't boot up any longer -- it is stuck indefinitely at the "Android" logo. I do not anticipate problems reverting back to Lollipop but haven't gotten around to it yet. Unfortunately (or perhaps not?), Android "M" is not yet available for the Nexus 7 2013, my favourite travel companion tablet.
[Update: I got my tablet working with "M". I believe I had forgotten to flash the bootloader the first time around.]

tisdag 25 november 2014

First impressions of the LG R Watch and Android Wear

I've now had my LG R Watch for about three weeks and have some impressions to share. This is not a complete review and I'm not going to go through the interface in detail as there are countless reviews and YouTube views that do just that. Rather, I'm focusing on peculiarities that caught my interest in some way, whether to impress or annoy me.


This smartwatch uses Android Wear, Google's new operating system for embedded body-worn devices. It's a scaled down version of Android, the same operating system present in many of the world's smartphones and tablets. Unlike another recent smartwatch, it is not a completely autonomous device -- rather, it is paired with a phone (which itself must run a recent version of Android) over Bluetooth and relies on that phone to provide internet connectivity and to carry out most of the work. Think of Android Wear as a companion touchscreen on your wrist. I believe that Android Wear may become more autonomous over time. For example, Google recently added the possibility of storing and playing back music on the device itself, as well as support for the built-in GPS present in some smartwatches. (The LG R does not have a GPS, and I did not test stand-alone music playback.)

General Operation


In normal operation the watch displays a standard watchface with the current time. The watch comes with several of these and it is also possible to download additional watchfaces from various sources, including Google Play. Unfortunately there is not yet a dedicated category available there for watchfaces, though there is a category for apps that have varying degrees of support for Android Wear.

Watchfaces come in very different forms. Some are analog, some are digital, and some display the weather, the watch battery, the phone battery, connection status, or other information.

The image to the right illustrates my favorite watchface right now (perhaps unlike most, I prefer digital watchfaces).

Idle Mode

When the watch is not in use the watchface will revert to a dimmed, simplified and often black-and-white version which consumes less battery. When you tap on the watchface or the watch detects arm movement, the normal watchface is restored. Sometimes merely moving your arm isn't sufficient to "wake it up" to normal mode. That is not a big problem on this watch in comparison to other recently introduced Android Wear watches that will actually turn off the entire display in idle mode in order to save battery. Some watchfaces allow the user to configure in great detail what the idle watchface will look like and how it will behave (for example, whether to display it in colour, or how long to wait before going to idle mode).

Apps appear to have the capability to request from the operating system to keep the display in the full-on mode which is great in the rare case that quick, constant access to controls is required. For example, the fantastic TinyCam Monitor app uses this feature to permanently display camera motion. I use this occasionally as a baby monitor (see image to the right). Another example is the impressive though less useful Wear Internet Browser which allows you to browse the web on the watch (it automatically retrieves the bookmarks from your phone's Chrome installation).



Like other modern smartwatches, the LG R Watch in practice must be charged every night in its cradle, which is magnetically attached to the phone through metal pins (no wireless charging on this device). Depending on use, I usually have anywhere from 30 - 50 % of battery left when I go to bed. Some Android Wear watches reportedly won't even make it through the day, and that's with an Idle Mode that completely shuts the screen off. While I would like for the LG R Watch to last longer, in practice it is not a problem to charge the device on a nighly basis together with the phone itself. Nor, it could be argued, is it unreasonable for a modern, high-performant wearable computer to consume some amount of power.


The LG R Watch has a black leather strap that, after having getting used to it, I find very comfortable. It is supposed to be replacable with standard watch straps, as well.


The LG R Watch has a microphone to accept voice commands, but no speaker -- so you can't carry out a complete call on the watch alone. It will also vibrate when notifications come in, but the vibration is quite light and I do not always notice it.

Connection Management

As previously implied, the watch is not very useful without the phone connection given that notifications will not arrive. It does not keep time when shut off, but does retain time when temporarily disconnected from the watch. Occasionally it does not succeed in re-connecting to the phone automatically. When that happens I have to explicitly disconnect and then re-connect using the companion app on the phone. Luckily, disconnections are rare, as I keep the watch near my phone most of the time.


The watch is able to measure pulse optically. This does not seem completely reliable -- it often fails to detect my pulse if I don't hold my arm completely still with the watch tightly secured to my wrist.


Unlike the full-blown Android for phones or tables, Android Wear does not allow for carriers or manufacturers to customize the experience in any significant way. While they look physically different, Android Wear devices all offer the same user experience.

Notification Cards

Any notification that appears on the smartphone (such as an incoming SMS) also shows up as a "card" in the lower portion of the watchface. Any card can display an enlarged version when selected. If any additional options are available for that card, those options can be reached by swiping to the left in successive steps. Sometimes the only available option is to open the notification on the phone. This is the case with any notification which has no built-in support for Android Wear. The Facebook app unfortunately is an example from this category. Other apps, such as Google Hangouts and the excellent new Google Messenger display a richer notification which allows multiple actions to be taken for an incoming SMS, including browsing chat history.

Notification cards like these can be swiped downwards away from the watchface in order to be reachable later, but then they stack up and make scrolling through notifications uncomfortable. If the card is swiped to the right, it is gone forever. For this reason it is difficult to browse through past SMS messages, for example -- you simply cannot recall the SMS history at will because there is no way to launch that card manually. In fact, there is no general notification history either.

Some cards show up automatically when specific apps are open on the phone. For example, whenever music is playing on the watch, a card shows up which can be used to control playback, volume, and skip between tracks. Similarly, when the camera is active, a remote shutter card becomes available. Speaking of the camera, the excellent PixtoCam app shows a live preview camera image on the watch while also offering more advanced camera control than the stock remote shutter card. Another great use-case is the Google Navigation card that shows up to display directions whenever Google Maps on my phone is in navigation mode.

Other Apps

In addition to simple notification cards (with possible additional option cards), apps also have the option of showing a more customized interface. Such apps can be reached by tapping on the watchface once, which launches a long menu of items. At the very bottom you can very tediously scroll to the Start option, which will open a new list of installed apps (again, excluding those which show only cards, as opposed to a more sophisticated interface). This interface also can be swiped to the right, which will return to the watchface mode. To get back to the app again, you have to tap again, scroll down, select Start and then re-select the app. This is a significant downside of the interface as it makes it very difficult to switch between apps and selecting the right information at the right time. Fortunately, there is a third party app that partially solves this by adding a global menu of apps that can be swiped in from the standard watchface. This app is not without a downside however, as it sometimes mistakenly believes that it should open when all you tried to do was swipe away a normal card.

App Management

The watch has no dedicated built-in app installer or uninstaller. Whenever an app is installed on the phone with support for Android Wear, that capability is automatically and instantly synced to the watch.

Layout Considerations

Android Wear watches come in different shapes, sizes and resolutions. Unfortunately, not all watchfaces or apps fit perfectly everywhere. I sometimes see cards showing up with text that are partially obscured in the corner -- even with official Google apps. This problem may eventually resolve itself when the rumoured watchface SDK becomes available, which I understand will offer ways to query detailed device and screen information.


When the watch is fully awake, you can initiate a voice command by saying "OK Google" followed by any of the recognized commands. These commands appear to be more or less hard-coded, but in the Android Wear companion app on your phone you can select which app to launch for a specific voice command. Voice commands can be used to set alarms or response to SMS messages, for example. I have not tried this very much as only English is supported, and most of my day-to-day communication is in Swedish. It is regrettable that while the Android speech recognition engine itself has supported Swedish for the past year or so (as illustrated by the impressive Google Translate app), it still apparently cannot be used to issue any useful voice commands.

In my opinion, by far the most important omission from Android Wear is keyboard support. Although there are some interesting experiments, there is no universal way to input text into any app using an on-screen watch keyboard. This would be particularly useful in countries such as my own that lack voice support for the native language.


The LG R Watch is quite stable in my experience. Once or twice, an app has misbehaved, causing an alert to pop up directly on the watch offering to kill the process. However, my watch has twice frozen up completely while using a particular watchface, requiring a complete reboot and re-connect. It's sad that a watchface can make a modern operating system with a sophisticated (I would hope) sandbox to freeze up like that, although it has not happened to me with any other watchface thus far. In a third case, the watch actually entered into a temporary re-boot loop for some reason. When it came back up, I was able to reset it to factory defaults and it has not happened since. By far the majority of the time, my watch has run like a... clock!


Before the LG R Watch, I had a Pebble, and before that, I had the first and then the second generation of the Sony Smartwatch. The Sony watches frequently dropped the connection to the phone, causing them to even lose the time. The Pebble, my contrast, was stable and had decent notification support, but little in the way of extra features (although the crystal clear e-ink display lasted a week before requiring recharging).

Given my past history with smartwatches, I realized that I found basic notification support very useful to avoid picking up my phone needlessly or when busy with other matters. For anyone who thinks they too would like this capability, and some extras to boot, I whole-heartedly recommend the LG R Watch. However, like any other early adopter, you should be prepared to take part in an experiment which we have yet to see the end of. Android Wear as a platform still requires a lot of work to become truly convenient and reach its full potential.

söndag 29 juni 2014

Utmaningen med Material Design

Det har hunnit gå några dagar sedan Googles utvecklarekonferens, Google I/O, som jag dels sett blandade avsnitt från på distans med 99 andra nördar (tack, Javaforum och King!) och dels på Googles utvecklarkanal på YouTube genom min Chromecast. Nu går hjärnan på högvarv och funderar över de nyheter som presenterades.

För mig känns det om om den mest intressanta och allomfattande förändringen är Googles nya standard för grafiska gränssnitt, Material Design. Samtidigt som jag tittat med stort intresse och viss fascination på några av de I/O-sessioner som behandlat ämnet slås jag av en känsla av hopplöshet. En gång i tiden kunde man som programmerare skapa ett snyggt gränssnitt bara genom att använda tydliga standardkomponenter och smart layouthantering, och det räckte att ha en viss stilistisk känsla och att vara konsekvent, noggrann och logisk för att resultatet skulle bli bra. I framtiden kommer varje applikation att vara lite av ett konstverk och då kommer man nog att behöva ha en designer vid sin sida om man som jag saknar äkta artistisk talang och känsla för färg och form.

Det verkar som om Google tänkt sig att man ska använda Material Design inte bara i Android-applikationer utan även på webben och t o m i IOS-applikationer. Vill man utveckla för webben har Google släppt ett antal webbkomponenter inspirerade av Material Design. Man kan undra hur det skulle se ut om även andra utvecklare av exempelvis mobila plattformar började förvänta sig att utvecklare tillämpar just deras riktlinjer även på konkurrerande plattformar i någon sorts högre syfte att nå ett konsekvent utseende överallt -- hur ädelt målet än må vara.

Jag har ännu bara skrapat på ytan när det gäller min förståelse av Material Design. Jag tror mig dock ha hunnit skönja några grundläggande drag. Kortfattat bygger tankesättet på att allt som presenteras i en applikation skrivs i "bläck" -- som kan vara i valfri färg -- på "pappersark". Även pappersark kan vara i valfri färg, men man kan inte producera något innehåll om man inte har ett papper att rita på. Pappersark är primärt rektangulära, men i enskilda fall kan de även vara runda (för att exempelvis rita en färgad "action-knapp"). Vissa särskilda element som statusfältet på Android-enheter utgör ett undantag, och anses vara "målade" direkt på skärmens glasdisplay (och kommer således runt begränsningarna med "papper").

Ett typiskt gränssnitt består av flera olika pappersark. Vissa kan användas för utplacering av navigeringselement, medan andra uteslutande presenterar innehåll. Komponenter och ark har förutom sina traditionella X- och Y-koordinater även en placering på Z-axeln, dvs i djupled. När pappersark förflyttas av användaren genom en svepgest (t ex för att scrolla i en lista) så kan andra pappersark på en annan djupnivå bli synliga. Pappersark kan följa varandra på relativt komplicerade sätt beroende på vad man vill uppnå som utvecklare.

Man uppmuntras även att tänka på övergångar och animeringar när man utformar sitt gränssnitt enligt de nya riktlinjerna. En Power Point-liknande övergång från en skärm till en annan utan ett logiskt genomtänkt flöde kring hur komponenterna animeras är utesluten. I stället skall användaren i animeringen tydligt uppmärksammas på vilket grafiskt objekt som gav upphov till förändringen. Om en knapptryckning i en lista exempelvis avslöjar en bild så skall bilden animeras ut från knappen. Vidare skall element som skapas med röstkommandon som grund animeras ut från mikrofon-ikonen. Inte heller animeringarnas flöde lämnas till sitt öde -- man uppmuntras att skapa mjuka sinusformade övergångar i stället för animeringar med konstant flöde, vilka anses "onaturliga".

Det finns väldigt mycket att säga om Material Design men jag behöver mera tid för att smälta intrycken. Idag finns det heller inte så många konkreta exempel att hämta inspiration och förståelse från. Jag har visserligen installerat förhandsutgåvan av nästa stora Android-version med kodnamn "L" på min Nexus 5-telefon, men nästan ingen av Googles egna applikationer har ännu genomgått den stora omdaningen. Ett av få undantag är notifikationsfältet i Android, som numera består av överlappande pappersark på ett för mig förvirrande sätt. Dels finns snabbgenvägar för att t ex stänga av trådlöst nätverk i sitt eget pappersark -- inga konstigheter i sig -- men vissa av notifikationerna hamnar också förbluffande nog i ett eget pappersark skilt från arket med de övriga. Alla dessa ark rör sig ett flytande sätt och delvis oberoende av varandra när man sveper uppåt och nedåt. Om man klickar på en av många små symboler bland snabbgenvägarna öppnas den klassiska inställningsdialogen.

Ett av syftena med den nya typen av design är att användaren intuitivt skall begripa hur applikationen fungerar och hur användargränssnittselementen hör ihop, men jag undrar om inte klassiska widgets av standardmodell är enklare att förstå. Då visste man åtminstonde var man kunde klicka för att något skulle hända...

måndag 15 oktober 2007

LaTeX on Windows: The Simple Installation Guide

LaTeX is not only a material, but also a technology for writing and typesetting documents. It is an excellent choice for academics, engineers, scientists, manual authors and others for whom structure is important, but not a great fit for those who wish to tweak every detail of their documents' appearance. It enables rapid creation of documents by taking care of layout, fonts, and the placing of images and tables, while always keeping references and links up to date.

With that introduction taken care of, I recently wanted to build LaTeX documents. On my Linux PC, I had the tools already installed, but on Windows the path was less straight-forward. I initially found a software package called proTeXt, which aims to simplify the installation of a Windows-based LaTeX system. However, I ran into major problems with the finished system that prevented me from using it. As I searched the web, I found several other individuals who had problems. The community surrounding the package was very helpful but no-one had a good idea about the cause of the problem, and I wasn't inclined to spend much more time on it, so I abandoned it in favour of another approach. So here follows what is hopefully a close to fool-proof installation guide. The end result will be a setup that converts LaTeX source to a PDF document. I am not interested in producing PostScript, so this guide will not cover that.

Installing Adobe Acrobat Reader
  1. Download and install Reader from this page or any other way that you prefer.

Installing MiKTeX
  1. Begin by downloading MiKTeX. Get the "basic" version of the installer. At the time of this writing, the latest version can be found here (approx. 70 MB). Start it once downloaded.
  2. Accept the copying conditions by clicking the checkbox and selecting "Next".
  3. Choose whether to install it for any user, or just you, and select "Next".
  4. Select the destination location and click "Next". The default will do fine.
  5. You can now select your preferred paper size (A4 or Letter). Do that, and also answer "Yes" to the question "Install missing packages on-the-fly". Select "Next".
  6. Then click "Start". This will take a while, even with a fast connection.
  7. Eventually, the "Next" button will become enabled again. Select it and then "Close".
Installing TeXnicCenter
  1. Download and run the TeXnicCenter installer from this page. At the time of this writing, version 1 beta 7.01 is the latest. Note that the page includes information about some additional required components. If you run Windows XP SP2 or Windows Vista, none of those need to be downloaded but you may want to look them if you run into problems.
  2. On the welcome page, click "Next".
  3. Choose to accept the license agreement and click "Next".
  4. Select the desired destination folder and click "Next".
  5. Select "Typical" and click "Next".
  6. Click "Next" again.
  7. Deselect the checkbox unless you want items added to your "Send to" menu, and then click "Next".
  8. Click "Install".
  9. Click "Finish".
Configuring TeXnicCenter
  1. Start TeXnicCenter from the Start menu.
  2. The "Tip of the day" may pop up. Select "Close".
  3. The configuration wizard's welcome page should now display since this the application has not been configured. Click "Next".
  4. You will now be asked to select the location of the executables of your TeX distribution. Select the miktex/bin subfolder (important!) of your MiKTeX installation directory. On an English language Windows XP or Vista, that will normally be C:\Program\MiKTeX 2.7\miktex\bin. The screenshot below shows the normal location on a Swedish Windows XP. Select "Next".
  5. On the next page, you are asked to configure PostScript viewers. Skip this and just select "Next".
  6. Now you will be asked to configure a PDF viewer. Select the location of your Acrobat Reader binary. On an English language Windows XP for version 8 of Reader, this is normally C:\Program\Adobe\Reader 8.0\Reader\AcroRd32.exe. Select "Next".
  7. Now select "Finish" to generate default output profiles
  1. To begin a new project, select File > New Project. From the General tab, select Empty Project.
  2. Enter a project name and select "OK".
  3. Enter your LaTeX source in the empty document that appears. This guide does not teach LaTex but there are many good tutorials out there, this one for example. I liked this Swedish tutorial. You can download this sample document, which is configured for both international characters and for PDF creation with clickable bookmarks.
  4. Select the LaTeX => PDF output profile.
  5. Select the Build Output icon (leftmost icon marked red in screenshot above). The file will be automatically saved.
  6. If there were no errors in the Build window, you can now display the final PDF by selecting the View Output icon (rightmost icon in screenshot). The result should look something like this. You may continue to edit the source code with Reader open in the background -- recent versions will refresh when the file has changed.
That's it!

fredag 21 april 2006

3D Interface Extravaganza

This is supposed to be the year when modern, animated graphical user interfaces hit the mainstream. Apple popularized this idea years ago with MacOS X and Microsoft has big ambitions in this regard for Windows Vista.
A friend suggested that I try the Gentoo Linux-based Kororaa live-CD which incorporates an experimental OpenGL-based X server called XGL, combined with a powerful compositing engine called Compiz. Compiz has a modular architecture with a range of standard plugins that provide the following effects, and more:
  • When switching between one of the four predefined workspaces, the transition is animated such that the current and new workspace both appear to be sides on a three-dimensional cube. It is also possible to manually rotate the cube in any direction using the mouse.
  • Windows, when dragged, get an appearance comparable to that of a flag waving in the wind. The effect is proportional to the speed by which the window is moved. The result is a highly spectacular effect — I spent a long time just moving windows around and still have not grown tired of it!
  • By holding a key while moving a window, the window can easily attach to one of the screen’s borders. This effect is remniscent of magnetism, and creates the impression that you almost have to “fight” the window when getting it to loosen its grip on the screen’s side(s).
  • Alt-Tab shows miniatures of all windows on the current workspace, making it easy to select exactly the desired target.
  • The F12 key temporarily shows miniature versions of all windows on the current workspace. When selected, a window immediately gets restored, focused and ready for input. This is essentially a more sophisticated version of Alt-Tab.
  • Any portion of a window can easily be zoomed in and out of using the mouse and a special key combination.
  • Using a key combination combined with the the scroll wheel on the mouse, the transparency of a window can be adjusted with great accuracy.
All of the effects are “live”, in the sense that applications continue to refresh their interfaces smoothly even as they are obscured behind partially transparent windows, or while the screen is rotated. Even movies continue to play uninterrupted!
Excited by the prospects of enjoying a smooth, animated desktop after having experienced the XGL and Compiz combination in Kororaa, with by far the most impressive interface effects I have ever seen, I installed XGL and Compiz in a recent Ubuntu Dapper daily — a remarkably easy endeavour when assisted by one of the many excellent on-line guides.

I’m hoping that some of the interesting features in Sun’s Project Looking Glass might eventually be incorporated in Compiz, such as the ability to turn windows around and scribble notes on the back.