Space Exploration

Hello? Hello? Is this thing still on?

Hello internet. It’s been quite a while. It’s been a very busy year personally and professionally for me, encompassing changes, big highs and a few sad lows. In truth, I’ve found it difficult to find something worth writing about, even when I found the time. I took an interest in Kodi before finding out how frustrating it can be, and setting up a gaming PC in the Amazon EC2 cloud looked fun, but I never find time to play games these days (although I’ll probably give that another go at some stage).

Tumbleweeds passed by. And then Local Guides for Google Maps came along and piqued my interest.

To Boldly Go

So what is Local Guides? Simply put, it’s a points based rewards scheme for Google Maps. You make contributions, you earn points. Earn enough points, and you level up. Level up, and you get rewards. The rewards are as follows:

  • Level 1 (0 – 4 points): Enter exclusive contests in select countries.
  • Level 2 (5 – 49 points): Get early access to new Google products and features.
  • Level 3 (50 – 199 points): Show up in the Google Maps app with your official Local Guides badge.
  • Level 4 (200 – 499 points): Receive a free 1 TB upgrade of your Drive storage for 2 years.
  • Level 5 (500+ points): Become eligible to apply to attend the annual Local Guides summit in 2016; meet other top Guides from around the world, explore the Google campus, and get the latest info about Google Maps.

To be honest, at first glance, the rewards are pretty meh. However, Level 4 is the headline grabber for me – 1 TB of free storage. Just as well – I got 100Gb of free storage when I bought my Chromebook, and that expires in a few months. I could renew this for as little as $2 a month, but nothing beats free!

So my mission – to explore strange new worlds, to seek out new life and new civilizations, to boldly go where no one has gone before. And in the process, get those 200 points.

Point Scoring

You can contribute to Google Maps in five different ways, each way earns you 1 point:

1 – Add a New Location

Maybe a local business is missing from maps. Add it in using Google Map Maker a for an easy point. New locations are subject to peer review, you’ll get points only if they are published.

01_mapmaker

2 – Edit an Existing Location

Maybe an existing location has details missing (think opening hours, phone number, website), or has incorrect details (location on map is incorrect, classified as “restaurant” when it should be “coffee shop”), or details to be refined (change “restaurant” to “Chinese restaurant” if it better describes a location). Again, subject to peer review, and will earn you a point. Note that you can only earn 1 edit point per location – multiple edits of the same place do not accrue more points.

03_tescoedit

3 – Post a Review

Easy point here. Click any location on Google Maps and give it a rating of 1-5 stars. Add a comment. Job done.

04_review

4 – Add a Photo

Following on from the review point above, add a photo for another easy point. I’m one of those annoying people who take photos of my food at restaurants, so I have plenty of these. Note that you can only earn one point per location here – multiple photos do not get multiple points (though it is nice to see how many views your photos get).

photosGreat

5 – Answer Questions

This is only available from the smartphone app. For any place you have reviewed, you can answer a few yes / no / not sure questions about it. Again, only one point per location, not per question. This is available from two places in the app – from the “Contributions” tab, or by selecting a location in maps and clicking on the “Do you know this place?” link.

questions

How Many Locations?

It’s possible to earn up to 5 points per location, but in practical terms it’s highly unlikely you’ll get 5 points for everything (unless you add in 40 brand new locations that no-one else has ever heard of in the Amazonian rainforests or under the sea). A good question is what is the average points score per location. Here’s my experience:

  • For every location I review, I get 1 point.
  • I answer questions on each location – 1 point.
  • I add a photo roughly every 1 in five locations – 0.2 point.
  • I add a new location roughly every 1 in 10 locations – 0.1 point.
  • I edit a location roughly every 1 in 5 locations (pro tip – add a location and then edit it with further detail after it’s been published) – 0.2 point.

This gives a weighted average of 2.5 points per location. For 200 points, this equates to 80 locations. 80 Locations is my new target.

80 Locations? That’s Loads!

Nope. It’s not really. Think of different categories of places, and think of different places you’ve been to within those categories. Here’s 10 categories for starters:

  • Restaurants – easy to rhyme off places I’ve been to for family or work functions (lunches and dinners), or places I fancied trying by myself. Some I frequent, others I’ve only been once. Quick review on the food, service, maybe a photo.
  • Takeaways – a quick review of the local burrito place, burger bar, chip shop…etc. along with a pic of what I’ve bought.
  • Cafés – there is no shortage of coffee shops nowadays. Are they all the same? Differentiate by talking about service, cleanliness, convenience of location, maybe a photo of a view if there is one.
  • Pubs – can I name 8 bars I’ve had a pint in over the years? Is that a rhetorical question? I don’t usually post pub photos unless it’s a shot of the outside of the building, maybe a holiday snap. Quick comment about atmosphere, cleanliness, beers on offer…etc.
  • Hotels – reviews on anywhere I’ve stayed while on holiday, or wedding venues I’ve been to. Usually have a photo for these.
  • Supermarkets – okay, I don’t take photos of these places, but can easily rhyme off 8 supermarkets (there are 4 within a mile radius of my house alone). Do they stock the products I like? Are they clean? What are the staff like?
  • Convenience Stores – again, no photo ops here really. Same deal as when reviewing supermarkets, although these stores are much more plentiful.
  • Petrol Stations – no photos, simple reviews – do they have adequate parking, are they conveniently located, is there a shop in store, are there toilet facilities…etc.
  • Parks / Zoos / Museums – loads of photos here. Plenty to say about each location as there’s such a variety of scope here.
  • Music / Sporting Venues – some photo opportunities here. I’ve been to plenty of live music shows and have favourites venues – the atmosphere, the sound… good memories. Likewise, I have my favourite sports venues too for similar reasons (Monza in 2006 – what a day that was).

Welcome to Level 4

10-15 minutes a day over lunch or in the evening, and I’d easily amassed 200 points in less than 2 weeks. Truth be told, it became quite addictive. Then the waiting game – it can take up to 5 weeks before you get an email to offer you the 1 TB of storage, but I got mine in a few days. Job done!

06_tb

 

 

 

 

 

 

Taking Matters into Your Own Hands – Android Apps on Chrome

Chrome OS Revisited

Just over nine months ago, I wrote this post outlining why I had purchased a Chromebook. In the time since, I’ve lived quite comfortably without a home Windows environment. Just to recap:

  • I can browse the web, email, shop, bank and pay bills online.
  • Google Docs, Sheets and Slides provide me with word processing, spreadsheet and presentation software respectively.
  • I have 100Gb of Google Drive storage (and I can now add OneDrive and Dropbox into the mix as well).
  • Photos / Google+ provides fantastic photo backup and sharing service, along with lightweight editing facilities.
  • All my music is in the cloud with Google Music (the free storage limit was recently extended from 20,000 to 50,000 songs!).
Hello again!

Hello again!

My HP11 Chromebook is light (just over a kilo), fast (7 second boot) and cheap (£180 last year!), with other similarly specced models available in the same price range. For those things that my Chromebook can’t do, I have my trusty Nexus 4 phone. The Play Store has a plethora of apps to keep me happy, more so than the Chrome Web Store.

And yet… I’d like my Chromebook to do those things for me. Chrome is great, but I want it to do more…

Android Apps on Chrome OS

At Google I/O last year, there was a lot of excitement about the upcoming “Android L” release (which we now know and love as “Lollipop”), including integration with Chrome OS. One showcased feature was Android apps running on a Chromebook – notably Vine and Evernote.

Apps! Apps! Apps!

Apps! Apps! Apps!

I was pretty excited about this – complimenting the Chrome Web Store with the Play Store would add a lot of new functionality to the humble Chromebook – literally thousands and thousands of new apps to really make your Chromebook exactly the way you want it. But it didn’t pan out like that.

I don’t know if I was alone in assuming that apps would “just work”, but it turns out each app has to be ported across to the new platform (i.e. from a touch based phone/tablet to a laptop form factor). This may involve some rewrite on the part of the app developer. Admittedly, some ported apps do “just work”, but I’ll come to that later.

Introducing Twerk

Not long after the first trickle of Android apps for Chrome OS came out, ways and means surfaced on how it was possible to port apps across to Chrome OS. They were far too experimental for my liking, and lead to a complete wipe of the machine too. It was something I decided to live without.

And the Twerk came along. Simply put, it allows me to package up and Android app as a Chrome Extension with a few button clicks and no major surgery involved. I’ve been able to package up and install a few apps that I like, enhancing the functionality that I already have (especially the offline apps). So far, I have ported:

Skype. On a Chromebook. Note the nice little icon in the shelf too!

Skype. On a Chromebook. Note the nice little icon on the shelf too!

Not just for Chrome OS – Android on Windows, Linux and Mac!

In reading up on ported apps, I stumbled upon a reddit community outlining what apps had been tested, which have bugs, which work well…etc. They maintain a list here. Along the way, I learned that such functionality is available on Windows, Linux and Mac as long as the Chrome browser is installed.

That’s right – you can run and test Android apps without owning an Android device.

And Now the How

I’m not a magician, so I’m happy to explain how my tricks are done. Before porting any apps, there are two steps to do:

  • Install ARChon Runtime for Chrome
  • Install Twerk

ARChon is a package that allows Chrome to run Android apps. It’s available here – pay attention to which OS version you require. Once downloaded, unpack the zip file and then go to chrome://extensions in the address bar:

Configuring the runtime

Configuring the runtime

Click the checkbox to enable “Developer mode” checkbox, and then click the “Load unpacked extension” button (both shown above). From the popup displayed, select the directory where you unzipped the ARChon zip file to. ARChon is now “installed”.

Alternatively, If you are using Chrome OS, you can simply install the Evernote app – before the Evernote app is installed, the Android Runtime for Chrome (a suitable alternative runtime) is automatically downloaded and installed first.

Twerk is a much smaller download. Both installs here are one-offs.

For each app we wish to port, we must do the following:

  • Obtain APK
  • Create app extension with Twerk
  • Load the new extension in Chrome

Here’s One I Prepared Earlier

So here’s a step by step guide to how I created my Chrome SNES app. It’s an offline app, meaning that I don’t need an internet connection for it to work (which is a sticking point for a lot of people when it comes to Chrome OS).

Firstly, go to the Play Store and browse to find the app you want, then copy the URL in the address bar. Next, go to APK downloader and paste in the URL of the app you just copied. Click to generate the download link, and the download your APK:

Obtaining the APK

Obtaining the APK

Now that you have the APK you need, launch Twerk. Drag and drop your APK file as shown, and configure as you like:

Configuring your app settings

Configuring your app settings

Note the settings I have chosen. Furthermore, clicking on the default package icon allows you to set a new icon – I set mine to something more appropriate that I just downloaded from Google images. Click the button at the bottom to create and save the new Chrome extension – my OCD necessitates that I save all my extensions in a special “Extensions” folder, but that’s just me.

To load your new extension in Chrome, go to chrome://extensions/ again, and click on “Load Unpacked Extension”. This time, select the folder of the extension you have created. Once loaded, you should see the following:

Configuraing the new extension

Configuraing the new extension

Click on “Launch” to launch your newly packaged extension. After the first launch, an icon is created in your app drawer, so there is no need to go back to the Extensions tab each time. Anyhow, the running app initially looks like this:

Loading screen...

Loading screen…

As it’s an offline app, you will be asked to specify a folder where all offline data is stored the first time the app is loaded. Again, my OCD means that I have a separate “AppData” folder where I save all offline application application data.

And then my app is good to go! Here is Super Mario World running natively on my Chromebook (ROMs obtained separately).

25 years ago...

25 years ago…

Go Forth and Experiment!

I’ve ported a handful of apps in the last week. Some work, some don’t. I’m keen to try more emulators, as well as install more offline apps and utilities. I often check in on the reddit list to see what has been tested, and sometimes whole extensions are packages up ready for download.

Chrome demonstrates once more that it is no ordinary browser. By extension, my Chromebook is no ordinary computer – fast, functional and cheap! Missing Windows? Not me.

One to Rule Them All – Custom Search Engines with Google Chrome

Searching for Answers

Tax avoiding billionaire celebrity bicycle faller-offer Bono once sang: “I still haven’t found what looking for”. Perhaps he wasn’t looking in the right place. I think he’d have had more luck if he used a custom search engine.

Normal search engines will scour the web to find content relevant to what you are looking for. There are 2 problems with this:

  • Not all of the web is accessible via search engine
  • Sometimes too much content is returned

Consider the first point raised here – if you use webmail such as GMail or Outlook, you can’t use a search engine to find that email you’re looking for, and rightly so. Instead, you must use the search facility provided by that mail provider.

Regarding the second point – in retrieving relevant content, a search engine may return several pages of results, and the user is faced with an exercise in separating the wheat from the chaff. Consequently, the user may restrict the search to content from a specific site – whilst this is possible using the site keyword, it’s a somewhat hamfisted approach in comparison to using a sites native search functionality if this exists – consider using Google to search for a forum post rather than forum search capabilities. The forum search functionality will be much more accurate, but it’d be nice to have the simplicity of a single search textbox that most search engines provide.

XDA Developer Forum - Not short on criteria

XDA Developer Forum – Not short on criteria

The Chrome Omnibox – Powerful yet Simple

If you’re a Chrome user, you’re familiar with the Omnibox – the address bar come search engine at the top of the window:

Web address on left, search criteria on right. Note the change in icons also.

Web address on left, search criteria on right. Note the change in icons also.

Type in a valid URL, hit enter and you’re taken to that webpage. Type anything else, hit enter and you’re taken to a page of search results for the criteria you just entered.

Such a simple, useful interface.

Let’s make it more useful, and add the ability to search webmail.

Custom Search Engine – GMail

Going back to my earlier point, I’d like to be able to use the Omnibox to search my GMail account. GMail already has this search functionality – I’d just like to be able to access it via the Omnibox.

Right click on the Omnibox and choose “Edit Search Engines”

edit

From the popup that appears, scroll down to “Other Search Engines”:

custom

Add a new row here with the following values:

New Search Engine GMail
Keyword gm
URL mail.google.com/u/0/search/%s

Then click the “Done” button.

Now click in the Omnibox, type gm then press Tab. Notice how your custom search engine is activated:

omniGmail

Type in your search criteria and hit enter – provided you are logged into Gmail (or Chrome) you will be redirected to the page of results in GMail:

omniGmail2

Custom Search Engine – Forum

Now on to the second point – how to use forum search functionality inside a nice simple interface like the Omnibox?

To lay some context, I’m an F1 fan who regularly visits PlanetF1.com. They have a user forum filled with commentary, rumour, opinions – the usual stuff. Quite often, stories will appear in the forum before the appear in the main site – forum users have other sources of information which they make public before any official announcement. They may or may not be true.

If you’ve never heard of Ross Brawn, you don’t know F1. He’s a highly respected F1 team boss who has achieved success with Benetton, Ferrari and even his own team, Brawn GP. He went on sabbatical a few years ago, seemingly leaving F1 and never to return. But there are always rumours of a comeback.

In short, I want a quick way to search the PlanetF1 forum for any topics that match the following criteria:

  • Any topic from the last 3 months
  • Within a specific subforum
  • Where my search text appears in the first post of the topic
  • Ordered most recent post first

Following the previous steps, I create a custom search engine with the following values:

New Search Engine PlanetF1
Keyword pf1
URL forum.planet-f1.com/search.php?keywords=%s&
terms=all&author=&fid%5B%5D=3
&sc=1&sf=firstpost&sk=t&sd=d&
sr=topics&st=90&ch=300&t=0&submit=Search

To use this search engine:

  • Click in the Omnibox
  • Enter the keyword (pf1)
  • Hit the Tab key to activate the custom search engine
  • Enter my search criteria (Ross Brawn)

rossbrawn2

Bingo!

GETting to the point – How does this work?

Pick any site you know of that provides search functionality. For the sake of argument, lets try BBC news, and search for something topical, such as “Sony hack”:

sonyhack

You are redirected to a page of results, but take note of the URL of this page:

http://www.bbc.co.uk/search?q=Sony%20hack

Let’s search for “Christmas Sales”. Again, note the URL of the page your are redirected to:

http://www.bbc.co.uk/search?q=Christmas%20sales

The URLs only differ by the search criteria entered here. This is an example of an http GET request, where the search criteria appears in the URL (as opposed to an http POST, where the search criteria is sent separately to the page request and thus does not appear in the URL).

The idea here is to create a template which uses characters that we enter from the Omnibox. In the case above, we substitute our search criteria with the %s wildcard thus:

New Search Engine BBC News
Keyword bbc
URL bbc.co.uk/search?q=%s

And hey presto – a custom BBC news search engine!

For Your Convenience…

I’ve compiled a list of custom search engine URLs that you may find useful. Note that you are free to name them as you like and set whatever keyword you fancy.

Social Media
Facebook facebook.com/search/results/?init=quick&q=%s
Twitter twitter.com/search?src=typd&q=%
Google+ plus.google.com/s/%s
Yammer yammer.com/#/Threads/Search?type=following&search=%s&search_source=global
LinkedIn linkedin.com/vsearch/f?type=all&keywords=%s
Webmail
GMail mail.google.com/mail/u/0/#search/%s
Inbox for GMail inbox.google.com/u/0/search/%s
Outlook dub125.mail.live.com/?fid=flsearch&srch=1&skws=%s&sdr=4&satt=0
News and Reference
BBC News bbc.co.uk/search?q=%s
Wikipedia en.wikipedia.org/w/index.php?search=%s&title=Special%3ASearch&go=Go
IMDb imdb.com/find?ref_=nv_sr_fn&q=%s&s=all
Buying Online
Amazon UK amazon.co.uk/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=%s
eBay UK ebay.co.uk/sch/i.html?_nkw=%s&_sacat=0
Streaming Media
YouTube youtube.com/results?search_query=%s
BBC iPlayer bbc.co.uk/iplayer/search?q=%s
Other
Google Drive drive.google.com/drive/#search?q=%s
Google Translate to French translate.google.co.uk/#auto/fr/%s
Google Translate to Spanish translate.google.co.uk/#auto/es/%s
Google Translate to German translate.google.co.uk/#auto/de/%s
Google Translate to Italian translate.google.co.uk/#auto/it/%s
Google Translate to Irish translate.google.co.uk/#auto/ga/%s

Go Forth and Multiply!

That’s just a handful of custom search engines I can think of off the top of my head. Use as many or as few as you like. Better yet, come up with a few of your own 🙂

Photo Sharing with Google+

The far flung corners of the world

As mentioned in a previous post, I’m married to a Malaysian, and every few years we take the long flight to see family in Kuala Lumpur. When I’m not there, we stay in touch via the usual channels, namely email and Skype.

I also have family in England – my brother, his wife and daughter live in London. We keep in touch in the same way.

Just over a year ago, I became a daddy. Like any doting dad, I have hundreds of photos of my son which I show to friends and family. I do this mostly with the photo sharing service provided by Google+.

I decided to write this post after showing a Polish friend of mine how to set photo sharing up.

I’m amazed – it’s such a brilliant (and free!) service, yet so few people I know use it. People who could make great use of it too.

I have friends all over the world that are far from home and family, and quite a few of them have become parents for the first time in recent years.

Time to set things right.

It starts with a GMail account

“Nobody uses Google+” is a phrase you’ll often hear (and part of the reason I’m writing this post). The thing is, if you have GMail account, then you already have a Google+ account – it uses the same username and password as your GMail. If you have an Android phone, then you definitely have a GMail account, and by extension a Google+ account!

If you don’t have GMail, create a new account and we’ll continue. I’d advise you to create GMail accounts for anyone you want to share photos with if they don’t have one already.

Circle of Friends

Google+ works just like Facebook in that I have a list of friends that I share status updates and media with. However, Google+ allows me to conveniently organise friends into groups (e.g. “Family”, “Work Friends”, “Club teammates”). These groups are called “Circles”, and friends can be a member of as many or as few of these as you’d like:

01_Circles

If I post photos on Facebook, there’s no convenient option to post to some people but not others (convenient being the important word here). Herein lies the difference – Google+ makes it very easy for me to share photos of my son to family and family alone. It’s like my own private network. Let’s run through an example. We’ll start with uploading photos, and then move on to how to share them.

Uploading to Google+ from the desktop

Let’s start by uploading pictures to Google+. Sign into your account, and go to Photos:

02_Photos

Click on “Upload Photos” to start uploading from your computer:

04_Upload

Alternatively, if you already use Google Drive, go to Settings, and then select “Show Drive photos and videos in your photos library”:

03_GoogleDrive

Uploading from Mobile

Easy one this! Install the Google+ app for either iOS or Android. Go to “Settings” and enable Auto-Backup. Any photos you take will be saved to your Google+ account.

05_MobileSettings

Sharing Photos

We start by creating an album. Here’s a selection of photos I have uploaded from a trip to Singapore Zoo:

05_Singapore

I want to create an album with a selection (i.e. not all) of these photos. I click and hold on the first photo I want to add (hold to enable select mode), then click on the others I want to add:

06_Singapore_2

I click the “Copy” link at the top of the page to show the album dialog:

07_Singapore_3

I give the album the name “Big Cats”, and click “Copy”. From the photos screen, I then select More > Albums:

08_Singapore_4

And I can see my new album:

09_Singapore_5

Clicking on it will show me the contents:

10_Singapore_6

Clicking on “Share” launches the “Share” dialog:

11_Singapore_7

Select which circle you wish to share the album with and click the “Share” button. That’s it.

The mobile app has the same process – select photos, copy to album, share album:

12_MobileAlbumSetup

Convince me of the Benefits

Okay, now we know the how, but do we know the why? From my own experience, there are many benefits here.

Firstly, all my family have the Google+ mobile app. When anyone shares an album, everyone else gets an instant notification that there are new photos to see. I can post a picture and minutes later receive comments from family anywhere in the world. It keeps us all closer together, and my Malaysian family have watched my son grow from a newborn to the toddler he is today.

Secondly, my photos are backed up in the cloud should I ever lose my phone, computer, USB stick, SD card… I smashed the screen on my Nexus 4 last year, and as part of the repair, the device was wiped (factory reset). Whilst I lost my Candy Crush progress, I didn’t lose a single photo.

Lastly, both the app and the desktop site have some pretty nifty tools for photo editing, not to mention Google’s many Auto-Awesome features (which are worth a blog post on their own!).

Alternatives

There are other photo sharing alternatives out there – Facebook does allow you to share to specific friends only, but personally I don’t think it’s very intuitive. Dropbox does allow you to backup and share photos, but Google Drive / Google+ gives you more space for less and more fine grain control on exactly who you share your content with.

Back in the old days, we’d send emails with lots of photo attachments that took too long to send, never mind downloading and viewing at the other side! Is this still a viable alternative? Are you reading this and thinking “that’s what I’m doing at the moment”?

Google+. Try it. You might like it…

 

 

 

 

 

A Short Ode to Google Now

Post Holiday Blues

It’s Monday afternoon, and it’s my third week back at work since being off on holiday (although it feels like it has been longer). Being married to a Malaysian, I’m lucky to be able to visit Kuala Lumpur every few years, and last month was one such holiday. Three glorious weeks of good weather, good food and good company.

langkawi2

Any feelings of jetlag are long gone, although I only finished unpacking my suitcase last weekend. I took my trusty Nexus 4 with me, so all my holiday photos are backed up to my Google+ account. That said, I’ve decided to write a short post on how useful Google Now was. Sit back and enjoy!

Flight Delayed

I woke up very early on the morning of Saturday 26th of April. Not only did Google Now provide me with my flight details, but also informed me that the flight had been delayed by 2 hours:

01_delayedFlight

This actually allowed me to relax in Heathrow and get something to eat in peace. No need to keep an eye on the clock or departure gate board.

Location – Kuala Lumpur

For the purposes of this blog, I won’t go into the details of how to keep a 1 year old entertained on a 13 hour flight. However, there’s plenty to see and do in Kuala Lumpur – check out the nearby attractions:

02_nearby

And recommended photo spots:

04_photospots

Other useful cards included local translations:

05_translate

Currency exchange rate:

06_currency

As well as the time back home:

07_time

I spent my first weekend in Langkawi, so the weather report was useful:

08_weather

Memories

So yes, Google Now is useful when travelling, and yes, I do miss the 30 degree heat. One of the nice things when I got home was the auto created digital scrapbook of my holiday that is the Google+ “Stories” feature:

10_story

11_midvalley

12_langkawimap

13_langkawiPics

Back to work then.

Fragmentation or Diversity? It’s a Matter of Perspective

Points of View

It’s hard being a developer that has to support thousands of different devices, with screen sizes ranging from tiny to enormous, running multiple OS versions on all sorts of hardware… said the web developer.

Even if you only have a passing interest in developing for mobile, you’re bound to have heard about Android Fragmentation. In short, fragmentation is the onus placed on Android developers to ensure their apps work on an ever expanding array of devices encompassing variables such as:

  • screen sizes
  • screen resolution
  • device hardware specifications (i.e. RAM, processor, disk space / SD card support)
  • device capabilities (e.g. not all devices have NFC, tablets don’t tend to have phone functionality)
  • different versions of the operating system

As a developer, these variables add overhead to the whole process. Last year, the BBC revealed that their Android development team was three times the size of their iOS team. Fragmentation has often been cited as “The Achilles Heel of Android”. I’ve heard developers say “We didn’t develop an Android version because… fragmentation”. A valid argument?

Taking off my developer hat, I look at this issue from a consumer perspective. The fact that Android caters for the list of variables above means that manufacturers (original equipment manufacturers, or OEMs for short) can produce a wide range of devices to suit a wide variety of customer tastes and budgets – do I really want a phone with 6 inch screen? Do I want to buy a high-res quad core monster, or a budget friendly device for casual use? New devices (and indeed new manufacturers) are appearing every day, with a lot of emphasis being placed on growth within emerging markets such as China, Brazil and India.

Hardware sales aside, a larger audience equals more people to sell apps and services to. Even Nokia are tackling the emerging markets with an Android phone, with the Nokia X reportedly selling out in four minutes at one Chinese retailer. Although an Android phone, the device taps into Microsoft services rather than the equivalents provided by Google, and it is customised with a Windows Phone style launcher.

But how do we keep everyone happy? I thought I’d write this post as I personally believe the issue of fragmentation is largely overblown. The Android SDK is inherently designed to cater for such variety from the design phase onward; it’s not a hacky, post-production fixing exercise. Hopefully I can clear this up.

Fragmentation – How does it happen?

You’ve probably seen horrific patchwork quilt graphs like this one:

Android-fragmentation-brand-2013

But what does this mean?

To start with, we should consider the Android Open Source Project (or AOSP for short). If you didn’t know already, Google makes the source code for Android freely available, hence it’s rapid adoption by new and established OEMs. The manufacturing cost associated of using Android lies in whether the OEM wants to use Google services (such as the Play Store), which must be licensed. In the case of the Nokia X, no such license was required; similarly, Amazon tablets provide their own marketplace.

If an OEM wishes to run Android on their devices, they will download the source and compile it against each device specification they manufacture. In our graph:

  • Manufacturers are represented in different colours, with area reflecting market share (Samsung being the most dominant player here)
  • Manufacturers are further split into different device specification, with area representing device popularity

So many specifications, so many Android binaries, so many problems!

At least, that’s what you may be led to believe. Google sets compatibility standards for manufacturers to ensure a consistent SDK, so that developers don’t write custom code for every possible hardware configuration, making this graph largely irrelevant in my opinion.

But what about different versions of the OS itself?

Like any other OS, incremental improvements of Android are released over time, bringing features such as better memory management (the main focus behind KitKat), a more fluid UI (JellyBean) and other assorted goodies.

Correspondingly, the updated source is pushed to AOSP for OEMs to compile and make available for their devices. Unfortunately, unless you have a Nexus device, you can expect a delay between when the source is released to AOSP and when it becomes available for your device; it may not even become available at all. For me, this is the true measure of fragmentation, and is displayed in more objective (And less scary) graphs such as this one:

Distribution

Delays are straightforward to explain. OEMs need to compile and thoroughly test the source on their device range and this takes time. Although Android is a third party product, it’s still the OEM brand image that will be hurt if the update isn’t seamless. There may be an incentive to be first to market with the latest and greatest, but a hasty release may not be worth it if a rival OEM releases a perfect update a little while later.

Why then would an OEM choose not to release an update at all? Again, relatively straightforward – doing so could take the shine off new hardware they plan to release. This is especially true for smartphones which are generally replaced every 2 years. The choice is simple for an OEM – spend time and money creating a free update for a 2 year old device, or make it exclusive to newer hardware, providing the consumer with the incentive to spend money. This is further complicated in the US, where telecoms carriers hold sway on what updates OEMs can release for their devices, again for the same reasoning – making money.

How does Google address version fragmentation?

Google have taken a number of steps to address this issue:

  • Most new APIs are not version specific
  • The Support Library
  • All new devices that wish to use Google services must run KitKat

The first point is really rather clever. Think about the release of any new operating system. The parent company release promotional material of the new features. Again, it’s an incentive to upgrade, and so we associate new features with new versions of an OS.

In Android’s case, this model is flawed – for reasons given above, a large chunk of consumers do not have the latest version of the OS, and some run so called “legacy versions” of the OS (i.e. Android 2.3; Gingerbread). Developers would have little or no incentive to work with new features if they aren’t widely available.

Consequently, Google release most new APIs as part of the Google Services package; a service that runs on all Android devices and is updated automatically. Developers who wish to integrate features such as Google Drive, Cast, Cloud Messaging, Game services… etc. can do so knowing that all devices can handle the new APIs, regardless of OS version.

play-services-diagram

The second point mostly caters for devices running anything less than Honeycomb (Android 3.0). Honeycomb was designed for Android tablets only, and had a very different look and feel to the Android that ran on phones at the time (mostly Gingerbread 2.3 and Froyo 2.2). It introduced ActionBars, Fragments and swipeable views among other things.

The main focus of Android 4.0 (Ice Cream Sandwich) was to create a unified experience across tablets and phones, and thus a lot of the design introduced concepts in Honeycomb became the new standard for phones as well. These design libraries are not APIs, so do not ship with the Google Services package; they are tied to the OS version.

However, developers can simply import the Android Support Library jar into their projects and start using the new designs for older versions of the OS. Code written using the support library is not specific to older versions of the OS either – that is, your Gingerbread compatible app with fragments looks and behaves exactly the same on an Android 4.0+ device. Thus the need for version specific code is largely avoided.

Of course, Google do provide monthly statistics on the adoption rates of each OS version (as shown above), and it’s the developers choice to ignore older OS versions if they wish. If a user wishes to download an app that is not supported on their device, they will have to know the URL of the app as it will not appear in any search results. Furthermore, they will be prohibited from installing the app as the Play Store will display a “Not compatible for your device” message instead of an Install button. Even side loading the package won’t work.

The last point is based on “a leaked internal memo“, although it has been reported in a few places. Apparently Google is insisting that all devices released from February 2014 onwards must run KitKat. The main focus of KitKat was to radically improve memory management, allowing low-cost, low-spec devices with as little as 512Mb of RAM to run the latest version of the OS (so called “project svelte“). I’m interested to see how this one pans out.

How do developers cater for different screen sizes and resolutions?

This has been a feature of the SDK for a long time. It’s really nothing new.

Here’s a quick primer on how screen layouts work in Android – basically, each screen will have an XML file that defines the position and styling of screen components (such as buttons, labels, images…etc), much in the same way as HTML is used. Let’s say we have a screen that uses the layout “activity_main.xml”. The directory structure looks like this:

TreeLayout1

If I wanted to alter the layout for a large screen somehow (change the styling / margins, show more controls), I create a new folder “layout-large”, and add a new layout with the same name as before to it. So my directory structure looks like this:

TreeLayout2

At runtime, Android will load in the correct layout depending on device screen size.

Images work in a similar way. Let’s say I have the image “ic_launcher.png” – the directory structure looks like this:

TreeDrawable1

If I wanted to use a high resolution version of the icon on higher resolution screens, I create a folder “drawable-hdpi” and store my higher res graphic there:

TreeDrawable2

At runtime, Android will load in the highest resolution images that the device screen can support.

These folder suffixes are known as “qualifiers”, and the documentation on them can be found here.

Further Restrictions

If you want to take a very narrow view of supporting only specific devices, Google allows you to do this as well – you may specify which devices may download your app when uploading it to the Play Store thus:

DeviceSupport

I know that the SkyGo app is restricted in this fashion, causing some consternation among customers who don’t own one of their allowed devices (for a time the Nexus 5 was not compatible, even though the Nexus 4 was). This may be that they only release their app for devices they have tested it on, but the cynical side of me thinks they are being lazy here.

A Rich, Ever-Expanding Ecosystem

Here’s a list of Android devices I own:

And some I’d like to get my hands on:

A wide range of devices and form factors, all running Android, all ready to consume services. Fragmented? Maybe. Diverse? Definitely.

 

Make your own Android Laptop – Part 2

Intro

This is the second part of a two part blog on running Android on a laptop / desktop computer. This post focuses on my experience of running Android in a desktop environment; please take a look at the previous post of you’d like to try it out for yourself.

Setup / Boot time

Android will boot up in a time comparable to any tablet I’ve used, although this is hardware dependent (a few minutes on my laptop). There’s a standard setup process for the first time you run the OS, just like when you start a new phone or tablet:

android-setup

Home Screen

Your home screen is fairly blank on first install, so I quickly got to work customising it with my own wallpaper, preferred apps on front (Google Play store works) and some  widgets. My homescreen looks like this:

homescreen

So what have I got here?

  • Google Music widget (currently listening to the Rush soundtrack)
  • Google Now widget (how are my teams doing, what news stories interest me)
  • News and Weather widget
  • Google Newsstand widget (randomiser of articles for sites / magazines I subscribe to).
  • Google+ Widget (randomiser of stories from my G+ feed)
  • Links for my regular apps, including some folders on the bottom dock row

If I click on the app drawer icon (bottom row in the middle of screen), I can view all my apps:

appdrawer

One quirky thing – a bigger screen doesn’t necessarily give you more icons on screen. A higher resolution screen will use higher resolution icons. In short, the icons occupy the same physical size, but will be of greater image density. It’s like comparing a high res tablet with a medium res tablet – the icons are the same size, but they look nicer.

Storage

I installed Android on a 16Gb USB disk. On first impression, that’s not a huge amount of space (bear in mind that the OS will take up part of this). However, what we have is a cloud centric machine. Take a look at the following free cloud storage providers:

storage

  • Google Drive gives me 15Gb of storage for free, and an extra 10Gb if I install Quickoffice
  • Box gives me 10Gb of storage for free
  • Dropbox gives me 2Gb of storage for free, up to a  maxmium of 16Gb through their “refer a friend” scheme
  • OneDrive gives me 7Gb of storage for free

Although I haven’t installed it (yet), Amazon cloud locker will give me another 5Gb of free storage. So that’s anywhere between 37Gb and 63Gb of storage for free.

It’s also worth noting that Google have slashed their cloud storage prices recently, with 100Gb storage costing less than $2 a month. This will trigger an inevitable price war, giving your cloud-centric machine a lot more for a lot less.

That said, if cloud storage isn’t your thing, the OS will pick up any USB drive or external hard disk plugged into the computer automatically. I believe SD cards are also supported, though you may need to manually mount these.

The Office Experience

The standard list of applications we’d expect from any computer for work use would include:

  • An Email client
  • Word processor / spreadshseet / presentation software
  • A browser
  • A calendar

To cover this, I have installed:

GMail (on top of the default mail client)

email1

Quickoffice

office

Chrome

browser

Google Calendar

calendar

I may also need instant messaging / video conferencing abilities. So I installed Skype (I had some camera discolouration issues with Hangouts):

skype

I’ve also got remote desktop capabilities, using the official Microsoft Remote Desktop Client app:

remotedesktop

Bonus! MightyText is fantastic. It allows me to sync up with my phone and read and send SMS from my desktop. Pretty swish.

mightytext

Media

If I was writing this post two days ago, I’d be reporting that YouTube didn’t work for me. Happily, the most recent update seems to have solved this issue:

youtube

Google Music stores all my music in the cloud, so it doesn’t take up space on device (unless cached). Also, my Google Music allowance of 20,000 songs does not count against my Google Drive storage allowance, so some more free storage there. I’ve also got Google Play All Access, so I can listen to pretty much anything they have in store:

music

Social Media is a bit hit and miss though. Facebook doesn’t have a tablet optimised app yet; Twitter does, but it’s not great from what i can see:

twitter

However, the WordPress app is pretty neat:

wordpress

Google+ is fantastic:

plus

Snapseed is a nice app that can read and edit photos from any of my cloud storage lockers, as well as from my Google+ profile. I can take photos with my phone while out and about and G+ autobackup will save them to the cloud. When I get home, they are already available on my machine to edit (no more USB cables!):

snapseed

And of course, there are a host of emulation apps available. Here’s a PlayStation Portable emulator (PPSSPP) in action:

psp

Outro

I really enjoy using my Android laptop. The OS would be perfect for an old XP Netbook, especially as KitKat is designed to run on machines with as little as 512Mb of RAM. A lot of the windows shortcuts work too (copy/paste, printscreen, windows home, alt+tab). The touch interface is a bit clunky in parts (swipe left / right is awkward with a touchpad), but I’ve been reading up on how to map these gestures to mouse buttons.

How does it compare with ChromeOS? I did try ChromeOS (well, Chromium) on a bootable USB stick a few months ago using a similar method to that in part 1. To be honest, I saw little difference between ChromeOS and just running Chrome browser in fullscreen mode. Furthermore, Android seems to have a greater range of apps. Personally, I prefer my Android setup even though it’s not optimised for the desktop experience…yet.

How to conclude? Give this a go for yourself and drop me a line on twitter @redhandknight and let me know how you got on.