Wednesday 24 December 2008

My Skypephone from 3


I've been a prepaid mobile subscriber for years now.  I've been moving around between countries a fair bit, so it made sense from a cost point of view; I didn't want to be paying enormous roaming charges.  This meant a number of other things:
  • Pre-loved phones because otherwise, the phone would be SIM-locked,
  • Manual top-ups rather than just paying at the end of the month,
  • Relatively expensive calls (e.g. as much as €2.50 per minute to call the folks back home),
  • Multiple numbers, one for each country,
  • Expiring numbers, if I didn't return in time to top-up again & renew,
  • Difficulty managing phone-books (if held in the SIM).
Although I love tech, I've resisted getting new phones, and have satisfied my interest through reading about it, and getting those pre-loved phones from family.  Of the phones I've had, my favourite was a Sony-Ericsson T630.  The form factor was so right, that just holding the phone in hand was a pleasure.  The interface was easy to navigate, and although different to the Nokia phones I had had before it, easy to learn.  I was a sad day when it was stolen from me.

My least favourite phone has been my latest, a Samsung SGH-E720.  Although it has quite a nice menu structure, it has such a poor audio performance that calls were to be avoided until an alternative was available.  The speaker was often muffled, and similarly the microphone made it difficult for callers to understand me.  I had a Motorola RAZR V3 as a second phone from work.  Motorola are not know for their user interfaces and I have to say the RAZR had the worst menu structure of any mobile I've ever used.  It was however a great performer in the audio quality stakes.  I would often swap my SIM from the Samsung to the Moto just to make a single call.

I'm also a big fan of Skype.  Their software is great because the interface is so easy to use; by way of example, I talked my mum through installing it and setting an account for herself, and I talked her through from 20,000 miles away over an IM connection.  I almost love it to a fault because I may insist that you have it to contact me! :-)

So when the 3G carrier 3 introduced their Skypephone, I was at last interested in buying a new phone again.  The prospect of unlimited calls to and from my Skype contacts for free is an amazing offer.  Also, when roaming I'm often in a network covered by 3's networks, and roaming is effectively free on those networks.  So after not having bought a new phone for ten years, I had found a phone deal worth having and I got one.

The first thing you notice about the Skypephone is how small it is.  You know that little pocket on a pair of jeans that you can put coins (or your iPod Nano) into?  I often put my Skypephone in there - it's that small.  

The second thing you notice is the short battery life, which I'm sure is in no small part due to the small size.  I don't make a lot of calls, but the phone can struggle to get through the second day after an overnight charge.  But I've had the phone now for quite a few months, and the short battery life is something I've gotten used to.  I just make sure to charge it every night.  The connector on the bottom is also a fairly standard mini-USB port, and it can charge from any computer.  So in today's world a battery top-up is never far away.

This mini-USB port also means that the PC connection is simple, using common USB cables that we all have a million of at this stage; no specialist cables to lose.  Unfortunately the included PC-Sync software leaves something to be desired.  I mean, it works, but the UI is a complete mess.  And sadly there's no Mac version of the PC-Sync software.  But when connected to a PC or Mac, the phone asks you if you want PC-Sync or a USB Mass Storage device.  This latter works fine with my Mac, so I am able to access the supplied 512MB micro-SD card and load it with music and pod-casts.

The audio quality in calls isn't bad... not as good as the Motorola RAZR mentioned above, but more than acceptable.  I have had complaints from callers about background noise.  I guess the microphone in the phone isn't set up quite right.  The saving grace is that the microphone in the headphones cum hands-free is much better.  While on the headphones, they're not too bad, either in calls or while using the media-player.  The headphones/hands-free also connect to the same mini-USB port as is used for charging and PC connection, and it auto-detects what's been connected - sounds cool, eh?  Well...

That's not to say I've not had issues with the phone.  Within a couple of months of buying the thing, the universal mini-USB started acting up.  With nothing connected at all, with every button press, or incoming call, or what-have-you, the phone would think that the headphones had been inserted (and pop up the two second dialog box to tell you).  This made the phone almost unusable.  Thankfully the kind folk at 3 repaired it free of charge.

What else...?

The UI to the phone is quite good, with a simple layout, logical menus, and easy to understand functionality.  The keys are quite responsive, although very small.  I put this small key size down to the small size of the phone, and I initially didn't like it; I've long gotten used to it however.  The apps in the phone are simple enough.  Occasionally, when I'm bored, I'll surf the free content around the 3 portal.  The phone seems quite responsive when looking at these pages; a far sight better than the original phones 3 were selling.  Actually, the Symbian phones I've seen still seem quite slow.  Sadly the low resolution screen makes general internet browsing pointless.  The phone can also be used as a Bluetooth modem, but it's only UMTS (not HSDPA), so not as fast as it could be.

I use the media-player application fairly regularly.  It seems that the media-player understands ID3 tags on MP3 files, sort of... annoyingly, when playing an album it orders the songs alphabetically by the track name in the ID3 tag (no, not by filename, or by ID3 track number).  I could probably write a script to modify the ID3 tags on the phone to work around this, but couldn't they get it right?  Oh well...

And then there's the Skype functionality which quite central to this phone - it's the "Skypephone" after all.  Unlike other X-Series phones from 3 where Skype has to be started every time, the Skype application is always running.  Also rather than using Fring (as on X-Series), the Skypephone uses iSkoot.  Both of these are mobile applications for making Skype calls, but the big difference is that iSkoot uses normal circuit switched calls to make the connections, rather than the data connection made by Fring.  I think this makes the Skype calling experience much better in the Skypephone.

When in it's idle mode, the central button labelled with the Skype logo does just that - brings you straight into the already running Skype application.  

The iSkoot Skype application is not without its annoyances.  I've found that it's a less than perfect implementation of the Skype chat protocol, and where normally I'd get two copies of messages (one on each of PC and Skypephone), somtimes the phone seems to "eat" messages such that the PC never gets them.  And when I cross in and out of 3 network coverage, I've found that there are times when the only way to get the Skype application connected again is to reboot the phone.

Despite all this, I've saved money and been able to re-connect with people back home because I'm no longer afraid of how much a call is going to cost.  In the first month of owning the phone, I made three hours of Skype calls in various 3 networks, all free!  So despite its issues, I love my Skypephone.

The future is now...

The Skypephone is produced by Amoi in China, although I'm reliably informed that the software was produced in Italy.  Amoi's name for the phone is the WP-S1.  It's based on the BREW platform from Qualcomm.  A second generation Skypephone has been introduced in some of the 3 networks (the WP-S2), and this new model is meant to have better battery life.  3 are also about to introduce the INQ-1, a low-cost touch-screen phone also from Amoi.  I can't wait to see it.

Thursday 13 November 2008

Hash Wrangling

Someone once asked me "just what is a Symbol in Ruby". I was stumbling around the web and found this: http://www.randomhacks.net/articles/2007/01/20/13-ways-of-looking-at-a-ruby-symbol

The way I personally think of it is as an immutable string that has a hashed internal representation, which probably encompasses definitions 4 from the web page above. Having coded to the Ruby C API, I also think of them in terms of them in terms of its hashed internal representation, and the C typedef ID (definitions 5 and 13).

But this also reminds of something I've been thinking about for a while with respect to hashes. Let's call it hash-wrangling:

wrangle |ˈraŋg(ə)l|
noun: a dispute or argument, typically one that is long and complicated.
verb:
  1. [ intrans. ] have such a dispute or argument : [as n. ] ( wrangling)weeks of political wrangling. See note at quarrel .
  2. [ trans. ] round up, herd, or take charge of (livestock) : the horses were wrangled early.
  3. another term for wangle .
ORIGIN late Middle English : compare with Low German wrangeln, frequentative of wrangen ‘to struggle’ ; related to wring .

Hashes are a great programming construct that I first encountered in awk's associative arrays. As a former C programmer, hashes were great because they provide tremendous power in freeing you from the mundane simplicity of C's data structures, and let you think about the relationships between different data. Gone are all thoughts of B-trees, search algorithms, etc and you're left with just the hash key and its related value.

The problem I see with hashes however is that it is far too easy to get the key wrong. It's quite easy to misspell a key, and have the resulting value stored in the wrong place, or fetched from the wrong place. The interpreter doesn't care what the hash keys are, and will just return a null when the value is fetched from the wrong place.

I've sometimes considered creating forms of enumerated types for the hash keys, as a convenient way to verify that only the correct keys are being used for a given hash. But this gets very long winded very quickly. And not only is it easy to get the key wrong, but with a hash using the "unknown" dataype (needed to allow nested hashes), it's also easy to get the type of the value wrong.

I think the only solution for this is to write test scripts that exercise every line of code. This sort of approach only goes so far however, and doesn't necessarily catch those cases where the hash keys is generated at runtime. You end up having to write lots of code that validates the inbound hash keys.

This is where an Object Oriented language like Ruby can help a lot because you can build the validation into the class definition itself. The class is basically a hash structure that you've defined in your code up front, and that is validated every time you access it. A hash is then relegated to only those values that might have been received from outside, but not yet passed to the class for validation.

This is not to say that the structure of the class and its data should become static. There is tremendous power in the way a dynamic language like Ruby has all classes open for the addition of new methods all the time. So, even if your class validates the data through its definition, thus staying DRYer in your approach to data structures, you can easily add more capabilities later.