04 December 2010

Javascript/ECMAscript objects and namespaces

There seems to be quite a bit of confusion as to what these beasts are and what they're for. Hopefully, this article will clear up some of that confusion, although I certainly do not profess to be a real expert on any of the subjects herein and have simplified things before writing them down here.

Reading up on the concepts dealt with here and implementing them was in fact prompted by a real-world problem that I came up against at work. Part of my work involves maintaining a control panel site, each page of which can contain multiple "components". Each component comprises three elements most of the time: a PHP template file that handles the display, a PHP class that manages the mechanics of the back-end (often invoked via an AJAX call) and, given that AJAX obviously involves JavaScript, an associated JavaScript file containing data and functions that tie the display and the back-end together. Different components are written/maintained by different members of the development team and any single page can therefore contain components written by several developers. This situation can lead to clashes such as more than one JavaScript file containing functions or variables with the same name if we're not all very careful.

Namespaces and objects provide a tidy way to clean up the global namespace. If each component on the page behaves as a self-contained entity then each developer can use the names he or she wants for the elements making up his/her JavaScript code without treading on anyone else's toes in the process. Each developer's work is tucked away in its own namespace or object and can't interfere with any other developer's work.

So, how do we go about this tidy stuff?

Firstly, let's look at the namespace approach.

Consider this declaration of a generic object with a single property in JavaScript and an alert() that will display that property:

var myObject = { aNumber: 10 };
alert(myObject.aNumber);

A namespace is merely an extension of this concept in that we're also adding functions to the object myObject. Without them, the whole namespace thing is pretty pointless.

Let's add a function to myObject that displays the value aNumber and add some indentation to make reading this stuff easier:

var myObject = {
aNumber: 10,
display: function() { alert(this.aNumber); }
};

In order to get this working, you need to call the function called display within the myObject namespace:

myObject.display();

Note the use of the reserved word this used to refer to the property aNumber belonging to the object whose display method is being called.

This example is obviously somewhat lame in that it is making a bit of a mountain out of a molehill. Using a namespace just to display an alert box is overkill, so let's get a bit more adventurous and create a simple guessing game. This should do the trick.

First, the HTML for the page that is going to run the game:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title>JavaScript guessing game</title>
<meta http-equiv="Content-Type" content="text/html" />
<script type="text/javascript" src="guessinggame.js"></script>
</head>

<body>

<input type="text" id="guess" value="" size="3" />
<input type="button" value="guess" onclick="guessingGame.play()" />
<input type="button" id="startbutton" value="start game" onclick="guessingGame.start()" />
<input type="button" value="cheat!" onclick="guessingGame.cheat()" />

</body>

</html>

Note that the text input box has been given the id guess and the button to start the game has been given the id startbutton. The text input and button are going to be accessed by the JavaScript.

And now the JavaScript file, guessinggame.js:

var guessingGame = {

initialised: false,

found: false,

numToGuess: 0,

start: function() {
this.numToGuess = 1 + Math.floor( Math.random() * 10 );
this.initialised = true;
this.found = false;
document.getElementById("startbutton").disabled = true;
},

cheat: function() {
if ( !this.initialised )
alert("The game hasn't started so you can't cheat yet!");
else if ( this.found )
alert("You've already found the answer, so why cheat now?");
else {
alert("The number to guess was: " + this.numToGuess);
this.found = true;
document.getElementById("startbutton").disabled = false;
}
},

play: function() {
if ( !this.initialised )
alert("The game hasn't yet started. Start one before guessing");
else if ( this.found )
alert("The game is over, you already got the right number!");
else {
guess = parseInt(document.getElementById("guess").value);
if ( guess == this.numToGuess ) {
this.found = true;
document.getElementById("startbutton").disabled = false;
alert("Correct! The number was indeed " + guess);
}
else
alert("Nope! Try again.");
}
}

};

Our namespace, guessingGame contains three properties: initialised, found and numToGuess. Note that all of these properties have to have something assigned to them when they are declared in the namespace. Unlike normal variables (or properties of an object declared as we'll see later on) they can't just be declared and have something assigned to them later on. Our namespace also contains three functions: start, cheat and play. How it all works should be pretty self-explanatory and is not the point of this article. What is the point is the fact that despite there being six "things" to play with here, there is only ONE thing in the global namespace: guessingGame. This means that someone else can come along and write a similar game in a namespace containing similarly-named properties and functions, but as long as that new game's namespace has a different name, there will be no clashes whatsoever. Both can cohabit on the same page without any risk of confusion.

While this is a neat way to prevent namespace collisions, we can do much better. Just like with any other form of object literal, anyone from inside or outside the object can access any of the data held within the namespace. If we opt for another approach, we can create objects that only expose to the outside world properties and methods that they want to make visible.

Let's rewrite the guessing game, but alter it so that we only have 5 guesses before the game is considered to be over and the player to have failed. We will therefore have to add a "guessesLeft" property, set it to 5 when the game starts and decrement it each time the player makes a guess. Once it reaches zero, the game is over. If we go for the traditional namespace as above, it would be trivial for the player to obtain unlimited guesses by setting the "guessesLeft" property to a positive number before calling the play function because that property is exposed to the outside world. This is how to avoid that situation using private properties.

Consider this declaration of a very simple object:

var simpleObject = function() {
var aNumber = 10;
};

var myObject = new simpleObject();

The first three lines define the class of our to-be object and give a name to that structure: simpleObject. The function defined in this way also acts as the constructor of that class. The last line actually instantiates that class. The object myObject is now an instance of the simpleObject class.

If you now try to display the property aNumber using something like this:

alert(myObject.aNumber);

All you'll get back is the response "undefined".

Why?

Because aNumber is a private property of the object. It can only be seen from within that instance of the object (or within a so-called "privileged" method that we'll be dealing with later). If you want to be able to use a property of an object, it must be a public property:

var simpleObject = function() {
this.aNumber = 10;
};

var myObject = new simpleObject();
alert(myObject.aNumber);

This time you get the expected result.

Rather than access the public property directly, let's now create a method of the simpleObject called "disp" that we can call and that will display the value of that property:

var simpleObject = function() {

this.aNumber = 10;

function disp() {
alert(this.aNumber);
}

}

var myObject = new simpleObject();

myObject.disp();

Uh oh... That didn't work! Why? Because "disp" is a private method and as such is not visible from the outside world! We need to create "disp" as a public method if we want to be able to invoke it from the global namespace. There are two ways of doing this. The first way is simply to add the method to myObject, our instance of the simpleObject class:

var simpleObject = function() {
this.aNumber = 10;
};

var myObject = new simpleObject();
myObject.disp = function() { alert(this.aNumber); };

myObject.disp();

The other way is to add the method to the definition of the class itself by adding it to the "prototype" property of that class:

var simpleObject = function() {
this.aNumber = 10;
};

var myObject = new simpleObject();
simpleObject.prototype.disp = function() { alert(this.aNumber); };

myObject.disp();

The first way is the "quick and dirty" way of doing it and is just as effective as the second way unless you have created multiple instances of the class and/or you have created other classes that build upon your base class simpleObject. If this is the case then, with the first method, you have to add the method to each instance, which can be laborious, not to mention inefficient with the method being stored as many times as there are instances. With the second solution, by adding the method to the class prototype, it immediately becomes available to all instances of the class and of classes derived from it. To boot, it is only stored once, which is more in line with the whole philosophy of object-oriented programming, re-use of code and all that.

Let's change our class slightly to add a private property and try and access it using a public method:

var simpleObject = function() {
var privatenum = 20;
}

var myObject = new simpleObject();
myObject.disp = function() { alert(this.privateNum); };

Uh oh... That didn't work either! Why? Because public methods can only access public properties, not private properties.

Enter the privileged method:

var simpleObject = function() {

var privatePr = 'private property';
this.publicPr = 'public property';

this.disp = function() {
alert(privatePr + " / " + this.publicPr);
}

}

var myObject = new simpleObject();
myObject.disp();

That's better! This shows that a privileged method can access not only public properties of an object but also that object's private properties.

So far we've seen private and public properties and we've accessed them using public and privilieged methods. One thing we've not yet been able to use is a private method.

Just like private properties, private methods can be used by privileged methods (and by other private methods). This is useful if, for example, there are multiple privileged methods that perform similar operations. Whatever is common to all of the privileged methods can be stored in a private method that is invoked by each of them.

It is now time to rewrite the guessing game, but this time using an object and building in the limited number of guesses. You will not need to change the HTML of the previous guessing game, only the JavaScript:

var gameObject = function() {

var guessesLeft;
var found;
var numToGuess;
var yourGuess;
var initialised = false;

this.start = function() {
guessesLeft = 5;
found = false;
numToGuess = 1 + Math.floor( Math.random() * 10 );
document.getElementById("startbutton").disabled = true;
initialised = true;
}

this.cheat = function() {
if ( !initialised )
alert("You can't cheat before even starting the game!");
else if ( found )
alert("You already found the number, why cheat now?");
else {
alert("The number to guess was: " + numToGuess);
gameOver();
}
}

this.play = function() {
if ( !initialised )
alert("Start a game before guessing!");
else if ( found )
alert("You already guessed the number, the game is over!");
else if ( guessesLeft > 0 ) {
yourGuess = parseInt(document.getElementById("guess").value);
if ( yourGuess == numToGuess ) {
alert("Congratulations! You guessed that the secret number was "
+ numToGuess + " with " + --guessesLeft + " guess(es) left.");
gameOver();
}
else {
if ( --guessesLeft > 0 )
alert("Nope. Try again. You have " + guessesLeft + " guess(es) left.");
else {
alert("Nope. You're out of guesses!");
gameOver();
}
document.getElementById("guess").value = '';
}
}
else alert("Sorry, you've already run out of guesses!");
}

function gameOver() {
found = true;
document.getElementById("startbutton").disabled = false;
document.getElementById("guess").value = '';
alert("Game over!");
}

}

var guessingGame = new gameObject();

The interesting thing here is that the only things we're exposing to the outside world in this object are the three privileged methods: start, play and cheat. As in the previous incarnation of this game, the cheat() method gives the answer but ends the game there and then. You don't get the satisfaction of being congratulated for entering the right number if you had to ask for it! Using the earlier solution for this game, it would have been possible to access any guessesLeft property and fiddle with it before submitting a guess, thus having an infinite amount of guesses. With this approach, the number of guesses remaining is available only to the instance of the class because it is all held in private properties.

So, to recap:

Private properties:

Declaration:

var myClass = function() {
var privateProperty;
};

Can be accessed by: private methods and privileged methods.
Are not visible outside the object's scope.

Public properties:

Declaration:

var myClass = function() {
this.publicProperty = 'whatever';
};

Can be accessed by: public methods, private methods(*), privileged methods.
Are visible outside the object's scope.

Private methods:

Declaration:

var myClass = function() {
function privateMethod() {
/* stuff goes here */
}
};

Can access: public methods(*), other private methods, privileged methods(*), private properties, public properties(*).
Can be accessed by: other private methods, privileged methods.
Are not visible outside the object's scope.

Public methods:

Declaration:

yourObject.publicMethod = function() {
/* stuff goes here */
};

- or -

yourClass.prototype.publicMethod = function() {
/* stuff goes here */
};

Can access: other public methods, privileged methods, public properties.
Can be accessed by: other public methods, private methods(*), privileged methods.
Are visible outside the object's scope.

Privileged methods:

Declaration:

var myClass = function() {
this.privilegedMethod = function() {
/* stuff goes here */
};
};

Can access: private methods, public methods, other privileged methods, private properties, public properties.
Can be accessed by: public methods, private methods(*), other privileged methods.
Are visible outside the object's scope.

The more astute readers will have noticed that an asterisk appears sometimes when it comes to private methods' access to public properties and methods and privileged methods. This is down to an error in the implementation of ECMA-262 where this incorrectly references the window object in private methods called by another method of an object when it should reference the object in which the method is running. Consider this scenario:

var myClass = function() {

this.publProp = 'I am a public property of myClass';

this.privilegedMeth = function() { privMeth(); };

function privMeth() { alert(this.publProp); }

}

var myObj = new myClass();
myObj.privilegedMeth();

This should work. Upon invoking myObj.privilegedMeth(), the private method privMeth() is invoked. This, in turn should be able to access the public property publProp and display it in an alert box. Well, it doesn't, because once execution enters the private method, this no longer references your instance of the myClass class, myObj. Instead, it references window. Given that global variables and functions are actually properties and methods of window, you can see this in action by creating a global variable called publProp and giving it a content different from the public property of your object:

var publProp = 'variable in the global namespace';

var myClass = function() {

this.publProp = 'I am a public property of myClass';

this.privilegedMeth = function() { privMeth(); };

function privMeth() { alert(this.publProp); }

}

var myObj = new myClass();
myObj.privilegedMeth();

An alert box saying "variable in the global namespace" will be displayed, which is definitely not the expected behaviour!

We can get around this problem with a bit of a kludge. We create a private property (usually called that, but "that" is a matter of personal taste...) and assign the value of this to it when the object is instantiated. Thereafter, we prefix the public and privileged data we want to access from within the private method with "that." instead of "this." and everything works again because that hasn't changed since the object was instantiated (whereas this now references window). The code snippet above becomes:

var myClass = function() {

var that = this;
this.publProp = 'I am a public property of myClass';

this.privilegedMeth = function() { privMeth(); };

function privMeth() { alert(that.publProp); }

}

var myObj = new myClass();
myObj.privilegedMeth();

You now get the expected result.

So, the point of this article was to explain how to tidy up the potential mess that can arise when multiple scripts are included in a web page. It explored two ways to achieve that and outlined the main differences between them. In doing so it highlighted a pitfall that's the result of a flaw in most browsers' implementation of ECMA-262 and provided a way to bypass that flaw.

Obviously, much more complex stuff can be done than was explored here. For starters, none of the functions and methods given as examples actually take any parameters, while nothing's to stop them doing so. The constructor can also take parameters. For example, in the guessing game object, we can set the maximum allowable number of guesses by saying how many we want to allow the player in the constructor:

var gameObject = function(maxG) {

var guessesLeft;
var found;
var numToGuess;
var yourGuess;
var initialised = false;
var maxGuesses = maxG;

this.start = function() {
guessesLeft = maxGuesses;
found = false;
numToGuess = 1 + Math.floor( Math.random() * 10 );
document.getElementById("startbutton").disabled = true;
initialised = true;
}
...
...
}

var guessingGame = new gameObject(3);

This time, when the class is instantiated, the parameter passed to the constructor, the value 3, is assigned to the private property maxGuesses. When the privileged method start() is called, we no longer blindly assign the value 5 to the private property guessesLeft, we assign maxGuesses to it. We have, in effect, created a variant of the game in which only 3 (the value passed to the constructor) guesses are permitted.

References to methods can also be passed to functions and used as callbacks. This is used frequently in the AJAX subsystems of Prototype and jQuery, where you pass a reference of a function to be called when the AJAX call has completed. You can pass a reference to a private, public or privileged method, although you might have to use the old "that" trick if you want to pass a reference to a public or privileged method when setting up the AJAX call from within a private method. You can also use Prototype's bind method to ensure that your methods run in the desired scope/context.

18 September 2010

Nokia E72 firmware version V51

Nokia released a major update for the E72 handset in September 2010. The previous version was V31, so V40 and V50 weren't even released to the public. According to many online resources there are something like 450 bugfixes in V51. There are also some new features that some people would consider to be bugs, and curiously enough, some pieces of software appear to have been downgraded between versions V31 and V51.

V51 is currently available via Nokia Software Updater and as Firmware-over-the-air.

There are various sources of information on the internet listing things that are supposed to have changed. What I'd like to do here is give you an idea of what the new firmware feels like, which is something you can't put on paper.

Visually, very little has changed. To be honest, the only difference I've noticed is a smaller clock at the bottom of the screen.

People who tend to use the keypad to select elements in the phone's menus will be pleased to hear that the '7' and '8' keys can now be used again. That ability was removed in V31 for some reason or other.

The menus do seem a little more responsive generally, although the digits still take ages to display while you're dialling a number.

The voice control application, vlingo, does get in the way when you start the phone up for the first time. Although it starts in the background and you can kill the application by long-pressing the menu key, scrolling to the vlingo icon and pressing the delete key, it starts again next time you start the phone, and will carry on doing so until you tell it not to.

The way to do this is not self-evident at all. Nor is why you should have to do this in the first place because the E72 already has built-in recognition of voice commands without the need for third-party software. Carry on answering questions asked by the application as if you were planning on using it until you get to the page where you're invited to hold down the "voice activation" key, speak a phrase into the microphone and then release the voice activation key. The thing is, you're invited to press the "back" key instead of the voice activation key (on the side of the phone between the volume/zoom keys), so you end up in an endless loop and cannot complete the settings and get rid of vlingo.

Instead of holding the voice activation key, start typing some text instead. You will be informed that you can indeed input text directly and asked if you want to skip the voice configuration. You can then proceed to the next pages in the configuration process and at some point you will be asked if you want vlingo to start when the phone starts. This is where you can say "no" and no longer be bothered with the software.

Even though we are all told that the browser, media player and messaging application have been updated, there is no perceptible change.

Adobe Reader LE is a useful piece of software for reading PDF files. The trouble is, many recent PDF files require Adobe LE 2.5, which came with firmware V31. Firmware V51 downgrades Adobe LE to version 1.5. I have no idea why this is.

Up until now, the keypad autolock would only kick in if you were on the standby screen. Go into the menu or into any application and the keypad would no longer lock. With V51, the keypad will lock automatically regardless of the screen you're on. Some people are calling this a "bug" (probably because it's a change from what they were used to), I think that it makes things more consistent and I welcome the change.

I think some optimisation has taken place in order to reduce power consumption and thus get more life out of the battery. Under normal circumstances, the battery indicator will show "full" for most of the battery's charge cycle. Once it drops a bar, the battery is usually flat within 24 hours. The gauge had dropped a bar yesterday morning, and this evening, about 34 hours later, it is still on 3 bars, and that is with the WLAN switched on almost permanently (I use the E72 as a VoIP/SIP phone). So, instead of being flat as a pancake in 24 hours, it has only dropped by 3 bars in half as long again. That's a definite improvement.

The e-mail client still doesn't use the "destinations" feature. You can only set it to use a given access point to connect to a mailbox. Thankfully, SmartConnect is included in the firmware, so you can get around the problem by using that. It didn't work with V31. BirdStep had to provide a patch to get it working. I don't know if the new version works or not on its own since the patch from BirdStep is still installed on my E72 after the update to V31.

Reading the Nokia Support Discussions forum, you will hear about various problems that people say that they have had. Among the problems I've seen, there are:

I don't see the names of people calling me, only the number.

It's unlikely that that happened since the update. Read here.

The phone has become unstable and never stops crashing.

This is the same as any update on any phone. The usual things to try are to clear the phone's settings (*#7780#) or to attempt a re-install of the firmware.

I can't zoom into pictures using the gallery, only using the file manager.

Can't say I've noticed this. I just tried to do just that and the zoom works fine in the gallery.

Received calls are no longer logged!

Can't say I've noticed this either. They are logged on my handset.

This and many other problems reported can most likely be solved in the same way as the general instability problem.

In short, the update is positive, I think, but I fail to understand why a whole major version has been skipped. The changes made do not justify such a version jump in my opinion.

12 February 2010

WOMWorld/Nokia "Experiences"

WOMWorld/Nokia have recently unveiled their "Experiences" page. It offers a view of the devices they currently have out on loan and the cities where said devices are currently being evaluated.

Privacy concerns mean that the devices are mapped only to the city where they've been sent, not to the actual address of the person trying the device out. For example, as of writing this, there's the indication of an N900 (the one sitting next to me on the arm of my sofa) in Bolton when in actual fact I am in Horwich, which is a few miles West of Bolton.


I'm not sure exactly what the purpose of this is but hey, it's fun, right? It certainly seems to fit in with the current craze for location-based services such as OVI location sharing, geotagging on twitter, Google Buzz etc.

Speaking of the N900 I have here, I still have just over a week to evaluate it. I'll digest my findings and report back shortly thereafter.

05 February 2010

Vodafone Access Gateway femtocell

Or, How To Spend Lots Of Money And Then Pay For Your Mobile Calls Twice

There's no denying that this product can be of use if you're in the unfortunate position of needing 3G coverage from Vodafone UK and from no other operator. If this is the case and you have a decent enough broadband connection then this product will certainly fit the bill. There is, however, a more sinister side to it in that the business model used to place it on the market do leave a little to be desired. Let me elaborate...

What is a femtocell and how does it work?

You know those mobile phone towers that everybody wants near enough to have great mobile phone coverage but not in their own back yard? This is one of those that's been very much scaled down both in size and in terms of power output. A big, outdoors mast has its radio tranceivers on the top and equipment in the cabinet at the foot of the mast to connect the signals directly to the operator's backhaul network. This one here has tiny tranceivers in the housing that emit a fraction of the radiation, just enough to give you a good 3G signal for your phone within your home, and it uses your home broadband internet connection to tunnel into Vodafone's own network. In effect, you have a base station in your home.

This base station allows you to place and receive calls and to connect your phone to the internet using the 3G signal.

In theory...

Also, this device is 3G only, no GSM signal is broadcast. If your mobile phone is not a 3G phone, it will not work with this device.

A few figures

The Access Gateway femtocell requires that phones be registered to it in order for them to be able to use it. It provides a web-based interface allowing you to register up to 30 Vodafone numbers with it. Only 4 phones can be connected to it and use it simultaneously.

Vodafone are selling this piece of kit at prices ranging from £50 to £160 up front or at £5/month, depending on what level of service you want and already have.

So, what's the problem?

On the face of it, it looks like a useful piece of kit providing 3G coverage where there was none before. However...

There have been numerous complaints (head over to Vodafone's user forums if you want to see for yourself) about the kit not actually working. Apparently a phone will show a full 3G signal and the VAG tell you that all is well when in fact you are not connected to Vodafone's network at all. You will miss calls and you won't even know about it until you try (and fail) to place a call yourself.

Whenever your phone connects to a base station (and this device is a base station even though it's a lot smaller), your operator's network is updated with the ID of the base station you're connected to. When someone tries to call you, the network knows which base station to use in order to reach your phone. This sometimes (frequently?) doesn't work how it should, meaning that Vodafone doesn't know that you're connected via your femtocell and therefore can't reach you.

The "solution" proffered by Vodafone is to power-cycle the femtocell. Having to switch a device off and on again in order to make it work reliably is obviously not a perfect situation...

Other than technical issues there are commercial and financial implications. By selling you one of these femtocells, the operator is, in essence, admitting that the service you're already paying for in your mobile phone bills is not up to scratch. It is then making you pay (again) for the hardware to solve that problem.

But that's not all, it gets better!

This femtocell uses your broadband connection. So, not only are you paying for the hardware, but you're also paying for the network connectivity. Those of you with capped data contracts will have to remember that the data used by the femtocell will be counted in your monthly allowance.

Wait... There's even more...

Not only are you using your own internet connection and hardware that you've had to pay for to extend Vodafone's network at your expense, but you're not even getting a discount on your mobile calls.

Here's the best bit...

If you happen to use Vodafone's home broadband service, when you use the femtocell to place calls on your Vodafone mobile, the data sent over the internet connection is still counted against your monthly allowance. So not only are you paying the full price, but you're also using your broadband allowance that you're paying for elsewhere. You are, in effect, paying for the call twice.

So, this solution is viable, albeit costly, if you find yourself in a situation where you need to use Vodafone's mobile telephony, and Vodafone alone is an option, and if you're in an area to which Vodafone's normal network does not extend.

There are alternatives

If you stop and think about it, why do you absolutely have to make cellular calls with your mobile phone? A large proportion of phones produced over the past few years are also able to connect to standard WiFi wireless networks (WLAN), so why not turn to VoIP? Software exists for nearly all WLAN-enabled phones allowing you to place and receive VoIP calls on your phone.

This can be achieved in either of two ways. The first and simplest solution is to use a system that's designed specifically for use on internet-enabled mobile phones. Such services include Fring, Nimbuzz and Truphone. These systems usually allow free calls between users of the same system and low-cost calls to normal phone lines almost anywhere in the world. Some of them also allow the user to log into various instant messaging services such as MSN messenger, AIM, Yahoo! messenger and google chat. They also allow limited access to certain social networks like twitter and facebook.

Internet telephony solutions normally associated with desktop computers are also available to mobile phones nowadays. I'm thinking in particular of Skype, which is available as a native application on many mobile platforms. If it is not available on yours, then you can always try using Fring because that service can also interface with Skype, allowing you to place and receive Skype calls via Fring.

The second alternative solution is to use traditional VoIP providers, whose systems use a widely implemented protocol called SIP, or Session Initiation Protocol. There are numerous manufacturers of hardware SIP phones, such as Cisco, Snom and Grandstream, for example. These products all "talk" SIP, which is a pretty universal protocol.

The implementation of SIP is just a question of software. If appropriate software is available for your phone, you can get it to "talk" SIP, too, and use the services of any mainstream SIP provider. Your mobile phone will, in effect, be a SIP phone just like any of the phones from the manufacturers mentioned above. This, too, usually gets you free calls to other users of the same service and cheap calls to normal phone lines. My main providers of IP telephony are VoipTalk and VoipFone.

Even if there is no software to turn your mobile phone into a SIP phone, all is not lost. Fring, at least, can log into your VoIP provider on your behalf and relay SIP calls to/from you through your Fring account at no extra charge. Given how ubiquitous SIP is, I assume other systems similar to Fring can do likewise. The only disadvantages to this particular kind of setup (and to using Skype like this through a third party) are the comparatively poor audio quality that is a result of multiple transcodings in order to reduce bandwidth and the sometimes borderline unacceptable lag between one person speaking and the other hearing what was said on the other end of the line.

To sum this up, you have three possible solutions other than a femtocell for your telecommunications needs. In order from lowest to highest desireability, they are:

3rd position: use a third party system such as Fring, Nimbuzz or Truphone, which can interface with well-known network-based solutions such as Skype or straightforward SIP. The cost involved is nil except for the communications themselves, which can be free anyway under some circumstances.

2nd position: use standard SIP service from a run-of-the-mill SIP provider and access it with a dedicated hardware SIP phone. This is the best solution from the point of view of call quality and ease of use. It does, however, mean buying a dedicated SIP phone, although that SIP phone will probably be cheaper than the femtocell...

1st position: use your WLAN-enabled mobile phone as a SIP phone. You get call quality that's maybe just a bit lower than you would with a dedicated, hardware SIP phone, and it might also be marginally less flexible to use depending on how well the SIP software integrates with your phone. There is little to no expense, though, because the software is more often than not either absolutely free or extremely low cost.

The femtocell does, however, have one major advantage over all of these three solutions: convergence. Whether your mobile is connected to a conventional base station or to your femtocell, if someone dials your mobile number then your phone will ring. This is not the case with any of the VoIP solutions outlined above.

Does it matter?

It depends on the reason why you want the femtocell in the first place.

Do you want the femtocell so that you can still be reached on your mobile when you're otherwise out of reach of your mobile network? If so then none of these VoIP solutions are really any good for you. In this case, you could always consider diverting all inbound calls from your mobile to your land line. You'd most likely have to pay for any calls diverted this way on top of your contract, and you'd have to weigh this cost against the cost of the femtocell.

Do you want the femtocell so that you can place calls using the free minutes in your contract rather than letting them go to waste while paying for communications on your landline? If so then you might want to consider a VoIP solution, which will be cheaper than the femtocell and cheaper than normal landline calls.

Food for thought...

31 January 2010

Nokia E72: review

On Friday (22/01/10) I took delivery of a Nokia E72 handset on loan from Nokia so that I could test-drive it and write this review. The whole thing could in fact be summed up in three words: "I want one". That is not, however, particularly helpful for other people so I'll go ahead and give you the longer version as well...

To get an idea of the perspective from which I'm writing this mini-review, bear in mind that I'm a long-ish term Nseries user having worked my way through an N73, N95 and N96, and my current phone is a 5800 XpressMusic (which really is an Nseries phone in all but name). I don't have much use for several of the business-related features of the E72 (such as VPN and printing, for example) and won't cover them here. There are also some of the features I used to use on the N95 that disappeared from the N96 and 5800XM but have reappeared on the E72. These features mean enough to me for me to be willing to compromise on the multimedia side of things that is usually less well developed on Eseries devices.

First impressions are very important. The build of this device is impressive. It certainly doesn't feel plasticky and flimsy like many competing phones, it has a metallic coolness and weight (128g) about it. Given that the E72 sports a full, 4-row QWERTY keypad, each of the keys is comparatively small at roughly 5mm (W) by 7mm (H) in size. At first I thought I'd have great difficulty using it because of this but I was pleasantly surprised at the speed with which I got used to it. The keys are domed, which helps you feel your way around the keypad, and the action is gentle yet well defined. The ergonomics make the keypad far easier to use than you'd initially think looking at its somewhat reduced size.

At 6cm wide, 11cm tall and only 1cm thick, this phone is quite a slab. Slim, but a slab all the same. With a significant amount of metal in the bodywork and no moving parts (this is a candybar phone, not a slider or a clamshell), it feels rock solid. The battery cover is also made of stainless steel and does not creak like the back of the 5800XM or the N96, another detail that makes the phone feel solid.

The E72 comes with 512 MB of NAND flash, resulting in a comfortable 220 or so megabytes of free space on its C: drive for installing extra software. This is complemented by a microSD card slot that also accepts microSDHC cards. At the time of writing, these cards are available in capacities of up to 16GB. A 4GB card comes with the phone and is already installed in the slot. It includes, among other things, 2.5GB of maps and the PC Suite software used for synchronising data between the phone and your PC. Personally, I'm using a ByteStor 16GB card in mine. The E72 also has 128MB of SDRAM, which is just about enough for a phone of this calibre. The CPU in this handset is clocked at 600MHz and it shows in the responsiveness of the user interface, especially if you turn theme effects off.

Having the screen in landscape mode all the time is certainly "different". Even though the only thing that changes from a more conventional phone is the orientation, you nevertheless have the impression that the screen is larger. It is only an impression, though. Maybe the landscape orientation allows for more information on-screen, or maybe we're just more comfortable looking at something more like a TV screen. Its QVGA (320×240) resolution, however, is lower than what I've been used to for the past 9 months. The 5800XM does have a 360×640 widescreen format display, so switching to this handset will be a bit of a step backwards in that respect.

Knowing that this phone has native VoIP support, one of the first things I did was to set up a SIP profile on the E72 and then pay a visit to forum.nokia.com in order to grab and install the SIP VoIP Settings application for this model. The setup was painless and literally within seconds I had connected the phone via my wireless network to my PBX at home running Asterisk and was using it as my "landline" phone. Now, that is a feature that I missed from the N95 and which disappeared when I "upgraded" to the N96.

Call quality, for both cellular and VoIP calls, is very good indeed. The sound is not tinny at all, it is rather rich without being fuzzy. The quality of audio transmitted appears to be good as well. I just spoke with my father in France a few minutes ago and he told me that I sounded very clear his end of the line (it was a VoIP call). The good audio quality is valid for the music player, too. And for Spotify mobile. One minor niggle I'd point out is the minor click you hear when one track ends and the next one begins. It's only a quiet click but it shouldn't really be there. Nokia has managed to suppress it in other music-enabled devices such as the N96 and the 5800, it should also be possible to do so in a close-to-top-of-the-range Eseries device. One feature that Nokia haven't sorted out in any of their devices yet to the best of my knowledge is gapless audio playback. Not having it, and having to suffer a pause in the playback between tracks, when listening to live albums, for example, is a bit of a pain.

The battery in this phone is a mighty 1500 mAh BP-4L, the same battery as in the N97. The official specs claim that this gives the E72 16-22 days of standby time or up to 13 hours talk time in GSM or VoIP mode (or 6 hours in 3G mode) but, as always with battery life annouced by manufacturers, need to be taken with a skip full of salt given that the conditions in which the measurements are made are not reproducible in real life. While playing with the phone pretty intensively, I've been able to get 3 solid days of life out of the battery, that's with the WLAN connected permanently since I've been using the phone as a VoIP phone connected to my PBX.

The E72 ships with a few nice accessories, and some not so nice. First of all, the stereo earphones. I'm afraid they're a waste of space. They reproduce virtually no bass or treble and they're the kind that you're supposed to wedge in your ear, and they invariably fall out all the time despite coming with three different sizes of rubber grommet. Not only that but the inline remote control only has volume up/down keys and a call key, and looks (and feels) cheap and nasty. This phone is fully compatible with the more complete remote control of the 5800 XpressMusic, which also includes track skip, fast-forward, rewind, pause/play and stop controls, and a lock. It also has a standard 3.5 mm stereo socket on it into which you can plug a standard set of earphones, such as noise-isolating in-ear buds. Forget the supplied earphones, get yourself an AD-54 audio adapter and some decent earbuds. Your ears will thank you.

You can use a microUSB cable to connect the phone to your computer. The supplied CA-101D "cable" (in quotes because it's a bit of a joke, "stub" would be a more accurate description) is only about 10 cm long and therefore probably OK for laptop users. It's no good whatsoever for users of desktop systems because it's just far too short. The photo above shows it next to an SD card, which gives you an idea of its size, or rather lack thereof. You'll definitely want to invest in a normal CA-101 cable. Note that the E72 can be charged through the USB port. The rate at which it charges is, however, much slower than if you use the supplied AC-8 charger, which takes approximately 2 hours to charge the battery fully. For the phone's USB port to be fully functional, it needs to be connected to a USB 2.0 port on your computer. My (rather old) laptop only has USB 1.1 and the phone will not charge when connected to it, nor will "mass storage" mode work. USB charging is comparatively rare on Nokia handsets.

Another rarity on Nokia phones is HSUPA. All of Nokia's recent 3G phones are in fact 3.5G-compatible, boasting data download speeds of up to 7.2 megabits per second (provided the mobile network supports such speeds) but only the old 3G uplink speed of 384 kbit/sec. Several newer Eseries devices, including the E72, support HSDPA at 10.2 megabits/sec and, very importantly for those who send large volumes of data, HSUPA at up to 2 megabits per second.

The cleaning cloth is a nice touch. It's needed because the phone itself is a bit of a grease magnet. There's also a protective carrying case and a wrist strap. The case offers good scratch protection but it's a bit of a scramble to get the phone out of it quickly enough if someone calls you. The wrist strap is a great addition. It offers much appreciated reassurance when, for example, using the camera. You know you're not going to drop £350 worth of phone into the pond while photographing the ducks...

Speaking of the camera, I was rather impressed with it. It shoots 5 megapixel still images and video up to VGA resolution (640x480) at 15 frames per second. The video frame rate is half that of the 5800 XpressMusic and high-end Nseries devices but I'm not really that bothered. I use the still camera far more, so that's what I was more interested in. I've not yet really put it through its paces, but preliminary tests suggest that it's every bit as good as the N95's camera despite the absence of Carl Zeiss optics. Nokia hasn't brought out a camera of this quality since the N82 (and arguably the N86 8MP). Once I've conducted some reasonable tests I'll add a link to the results here, so check back occasionally, but don't expect much until the weather improves around here (northern England). There's little point in me taking a load of pictures of rainy streets and grey skies. One indication of the piqué of images taken with the camera is the size of the resulting JPEG files. Generally, they range between 1MB and 3MB on the E72. Believe me, 3MB is big for a 5 megapixel image from a cameraphone, meaning that there's plenty of detail in there...

One feature of this phone that I appreciate greatly is the mode switcher. It allows you to switch easily from "business" mode to "personal" mode and back. You get a different set of shortcuts and notifications on your home screen and a different theme for each mode. It would have been nice for the mode switch to change profiles as well so you can filter out business-related calls when in "personal" mode, for example, but I suppose we can't have everything.



Just below the soft keys and above the call make and break keys, there are four function keys. Menu and calendar on the left, contacts and messaging on the right. With the exception of the menu key, all of these keys are in fact programmable. The action in response to short press and a long press can be programmed independently. For example, I have programmed the "calendar" key to bring up the calendar application if I simply press it, or to bring up the clock application if I press and hold it. Or, a short press on the "messaging" key brings up the messaging application's main screen, while a long press on it starts composing a new text message. In the middle is the usual 5-direction D-pad, the middle of which is also an optical Navi-wheel. Swiping your finger over it allows you to scroll in the direction of the swipe. At first I thought it got in the way, but I came round to it after a couple of days once I'd got the hang of it.


While on the subject of messaging, the e-mail client built into the E72 is far more feature-rich than that of Nseries devices. I suppose this is normal for a phone being presented as a business device. It is compatible with normal POP3 and IMAP4 services, but also Lotus Notes, Google mail, Hotmail and Microsoft Exchange. Not fogetting Nokia's own OVI Mail service. There are, however, a few things I'd like to see Nokia put right in future releases of the software. First of all, there is no automatic "send to self" feature, nor is there an automatic Bcc: feature to fall back on because of the lack of "send to self". If the E72 moved sent mails over to the "sent items" IMAP folder of the account it's connected to, it wouldn't be a problem, but instead of that it stores sent mail locally and there is no possibility to move mail between folders manually (or, if there is, it doesn't work). If you want a globally accessible copy of any mail sent, you have to Bcc: yourself manually each time you send something.

Secondly, the way the e-mail application handles network connectivity needs to be rethought. S60v3 with Feature Pack 2 (the user interface on the E72) has a network feature called "destinations" whereby network access points can be organised in a priority list. For example, in the "Internet" destination, I have my home wireless network in first position, followed by my mobile network operator's packet data service. Any application needing a connection to the internet can therefore use the "Internet" destination rather than any particular network access point programmed into the phone. If it does, the phone will first try and connect using the first access point in the "Internet" list, ie. my home wireless network. If that is unavailable, because I'm out of the house, for example, then it will fall back on the next item in the list, my operator's packet data service. Despite the presence of this feature in the E72, the e-mail application only uses specific access points, not destinations. I can set things so that my wireless network is used for e-mail connectivity, and all works fine as long as I'm at home. If I go out, I need to change the access point used, for the inbound mail connection and then for the outbound mail connection, for each of the mailboxes defined. It would make things far simpler if I could tell the application to use the "Internet" destination. The most convenient connection would be used regardless of whether or not I'm in range of my wireless network. The feature is built into the phone, so why does an application a priori developed specifically for the series of phones not use it?

While I'm griping about missing features, how about scheduled backups? Backing up your data is crucial, especially on what is supposed to be a business device. S60v5 devices have the ability to schedule either a daily or a weekly backup. As long as the phone is switched on, you don't need to think about backing up your data, it happens on its own. Why not include that in Eseries device? It's so useful. Much more so than 3D ringtones, for example...

The killer application on the E72, in particular since Nokia announced free navigation on several devices including this one, is OVI Maps. It includes walk and drive navigation with verbal prompts in over 70 countries. Other than the fact that turn-by-turn navigation is no longer subject to the purchase of a licence, one of the key features of OVI Maps v3.03 is the ability to log into your Nokia account and synchronize the locations and routes stored in your phone with your online maps.ovi.com account. Another feature added in this version is "location sharing", whereby you can update your facebook status with your location and an optional photo. The resulting status update on your facebook profile will include a link to a map marking the coordinates of the location you shared in this manner.

Unfortunately, there is a bug in the firmware of the E52, E55 and E72, which inhibits signing on to your Nokia account. If you try and do so within OVI Maps, the application simply crashes. This very same bug is most likely behind the fact that the e-mail application cannot create an OVI Mail account correctly either. The bug has been acknowledged by Nokia and they are working on a fix. The Nokia employee who posted the message linked to above on the Nokia Support Discussion forums sent me a patch to test on my E72 and it worked fine, allowing OVI Maps v3.03 to access my Nokia account and also allowing the e-mail client to set up my OVI Mail account with no problems. The patch will definitely be included in future firmware releases of these three devices. It is unknown for now how it will be pushed to devices running current (and older) firmware. Before you ask, I have not been granted permission to distribute the patch I was sent. Do not ask me to send you a copy of it.

Update 06/02/2010: The fix I was given to test has now been officially released by Nokia. You can grab it from this support page.

It is now 4 days since I started writing this review and just over a week since I took delivery of my test E72. In that time I have grown extremely fond of the device, especially the landscape mode screen. In fact, if I look at the 5800 XpressMusic now it looks positively weird. I never thought I would ever be able to use a non touch-screen phone again after the 5800, but the E72 has proved me wrong. I have now managed to reach a relatively fast typing speed, pretty much as fast as I was on the touch screen if not faster, and the fact that the E72 is VoIP-capable is, I think, what really won me over. As I mentioned earlier, I used to have an N95 until the end of 2008, when I "upgraded" to an N96 (in quotes because in many respects, the absence of VoIP and the comparatively poor camera in particular, it was more of a downgrade) and then to the 5800 XpressMusic (also without VoIP) in April 2009. The absence of VoIP on the last two handsets was a major pain in the neck and meant that I had to go out and purchase a dedicated VoIP phone.

Despite the complaints I have formulated here, I was so impressed with the E72 that I went and ordered one for myself only a few days after I first got my hands on the loan device. I'm really pleased that I can now have a single phone for cellular and VoIP calls, and I'm equally pleased with the build quality of that single phone. It's a pleasure to use.

Incidentally, I signed up with Virgin Mobile on an 18-month contract at £25 per month, which gets me 500 minutes, up to 3000 texts and up to a gigabyte of mobile web data. The phone itself was free, and here's the best bit of it: it's a generic, UK phone and it isn't even SIM-locked! Most of the time when you get a "free" phone from an operator, its firmware has been messed about with by the operator so that you get its logo in your face all the time and so that some features of the phone that they don't want you using have been deactivated. This is not the case here. You'd walk out of a Nokia store with exactly the same phone had you bought it SIM-free. Indeed, this phone is a SIM-free phone. Until now I was on O2 with a SIM-only deal getting me 600 minutes, 1200 texts and 1 gigabyte of data for £20 per month. In essence, I'm paying an extra £5 per month for the next 18 months (so £90 all in all) and getting comparable service given that I never got anywhere near the 600 minutes or 1200 texts, and I just got a phone worth around £350 for free. Not a bad deal after all!

21 January 2010

Free navigation with OVI Maps!


On the morning of January 21st 2010, Nokia announced that turn-by-turn navigation would be free for all to use on their Nokia handsets.

Until now, the OVI Maps software (formerly known as Nokia Maps) was free to use for finding your current position and managing locations, but obtaining step-by-step directions from one location to another with vocal prompts was subject to the purchase of a navigation licence.

The roll-out of free navigation is not yet global. The ability to use it is subject to installing OVI Maps V3.03, which is not yet ported to all models. As of writing, the models supported are:

5230, 5800 XpressMusic, 5800 Navigation Edition
6710 Navigator, 6730 classic, X6
E52, E55, E72, N97 mini

Current speculation is that this new version of OVI Maps will be embedded in the V21 firmware update of the N97 that is due to be released later this month. It is also thought that OVI Maps V3.03 is the reason why the V21 update, originally announced for December 2009, was delayed.

Visit http://www.nokia.com/maps for more details.

14 January 2010

Nokia 5800 XpressMusic V40 firmware update


What better way to kick off the New Year's blogs than with the announcement of a great firmware update from Nokia?

This article could be subtitled "Give Credit Where Credit Is Due" because V40.0.005 does seem to be the result of a productive effort from Nokia's software development team. They have evidently been listening to customers' concerns because the timer-related bugs that were introduced in V30 and V31 are gone and new features that many people were demanding have been introduced. In short, it took them long enough but they got this one right in my opinion.

Nokia considers changelogs to be confidential information, so you'll never find one except when it's leaked on unofficial sites, but bear in mind that they more than likely contain inaccuracies deliberately introduced by Nokia in order to identify the mole leaking them. The information here is therefore based solely on personal observation. There may be features I've overlooked because I never use them, and some things I did notice may be totaly subjective.

BUGFIXES

There were three (most likely related) bugs introduced in V30 and carried over to V31 that almost ruined the experience of using the 5800XM for me:

1) Scheduled backups would not happen
2) The alarm would go off late
3) Timed profiles would expire late

These bugs would appear to have been eradicated in V40. The scheduled backup did happen last night, my alarm went off at 07:45 precisely instead of some indeterminate time between 07:45 and 07:55, and the timed profile expired at 08:00 dead on. That is a major relief, it's been random since I installed V30 in October last year.

NEW THINGS I LIKE

More responsive

The phone definitely seems more responsive since the update, and this isn't the result of a reset because I didn't do that. There's no need to if the phone has UDP (User Data Preservation). The user interface is definitely snappier, menus open quasi-instantaneously, applications open quicker, on-screen controls react faster.

More RAM

Running x-plore immediately after the phone boots reveals that there's 51 MB (plus whatever x-plore itself is using) of RAM free on D: for applications to play with. That's more than with V31, where 48 MB were available. This will help if you have several applications running concurrently. You will be less likely to run out of RAM, which means less likelihood that the system will forcefully shut down an application that's being a bit of a memory hog.

More battery life

Preliminary investigations using Nokia's "Energy Profiler" suggest that the operating system has been optimized to use less battery power and thus increase battery life when in standby, which is the status in which the phone finds itself most of the time.

Swipe action

When this was first introduced on the N97 it confused the hell out of people. Despite the animated graphics, people were just trying to press on the green, animated, right-pointing arrow to take a call and, of course, not succeeding. They didn't realize that the animation was suggesting that they should swipe the screen to the right in order to take the call, or to the left in order to reject the call. Reading the manual might have helped here, but who does that? That's another matter altogether... Anyway, the "swipe to answer" gesture is now part of the 5800XM's firmware and I must say that I like it, although its implementation is a little confusing here. A swipe to the right does answer the call, whereas a swipe to the left unlocks the keypad and silences the ringtone but doesn't reject the call. You have to tap a button on the screen after you've unlocked the keypad in order to do that. The green and red keys still, however, function as normal (answer and reject).

The swipe action has also been carried over to the alarm clock. Swipe to the right to kill the alarm, or to the left to engage the "snooze" function. Ditto for calendar entries with a reminder (ToDo notes, Memos, Anniversaries and Meetings), albeit with a slightly different behaviour. With calendar entries, a left swipe will silence the alarm and then give you the opportunity to kill it or engage the "snooze" function.

Visual feedback

If you tap on a selected item in a list in order to open it, you now get visual feedback that you've done just that. It's a small detail but it helps in that you are given an acknowledgement of the command you just issued. This is particularly useful if you've deactivated haptic feedback (vibrations in response to actions on the touch screen) in order to conserve battery power.

NEW THINGS I HAVE MIXED FEELINGS ABOUT

Auto QWERTY keypad

Many people were asking for this, and I can see the logic in it. If you're holding the phone in portrait mode, you get a conventional alphanumeric keypad for text input. If you now rotate the phone to landscape mode, the alphanumeric keypad is replaced with a full-screen QWERTY keypad automatically. This is all very well, but the option to have an alphanumeric keypad while holding the phone in landscape mode has now disappeared. I used to use that frequently because, say what you will, text input on a small keypad such as that of a phone is far easier on an alphanumeric keypad because the keys themselves are much larger than they are on a full-screen QWERTY keypad, and with T9 predictive input you don't lose any speed to speak of. Combine that with the ease of holding the phone horizontally and you're on to a winner. Unfortunately, you no longer have this option. It would have been nice to have included something in the phone's settings to enable either this new behaviour or the traditional behaviour.

New "Contacts Bar" homescreen theme

This, along with kinetic scrolling (see further down), brings the 5800XM in line with other S60v5 devices (except the N97/mini) from Nokia. You get up to 20 contacts in the scrollable contacts bar, a tap on one of which will bring up a screen showing a log of your communications with that contact and buttons to call or send a message to that contact. You also get the usual 4 shortcuts to applications like you do on the "Shortcuts bar" home screen theme, plus a small panel allowing you to control the music player or the FM radio, if one of them is running.

This would be great if it weren't for two things missing from it. Firstly, the "Content search" is not on the homescreen. Secondly, the calendar is missing. While the absence of the search facility is not a deal breaker, the lack of a calendar display most certainly is. Also, the contacts bar is extremely clunky with only 3 contacts displayed at any given time and with no option to rearrange contacts other than deleting them and then adding them again in the order in which you want them to be displayed.

Nice try but it needs more work.

Kinetic scrolling

This is the ability to scroll through a list by swiping the screen upwards or downwards and thus "flicking" the list in that direction, making it scroll until you stop it or until it decelerates and comes to a halt. Several applications have used this feature for a long time, Gravity and Nokia's own touch screen Photo Browser come straight to mind. Kinetic scrolling was added to the N97's firmware in V20, which was released late October 2009, and I believe other S60v5 phones had it right from the beginning. The 5800 was therefore, until now, the only S60v5 phone not to have it.

The trouble is, its implementation is inconsistent. Kinetic scrolling does not function in the phone's menus, nor can you use it to scroll through the text of a message or an e-mail.

Personally, I never had any problem sliding the scroll bar to the right of the screen and I find myself still using that rather than kinetic scrolling. At least it's implemented consistently, you can use it everywhere.

THINGS THAT LEFT ME PERPLEXED

The "Switch" application is used when you get a new phone and want to transfer your data to it from the old one (provided both are Nokia phones). In theory, you'll only use it once, if at all, so I suppose it doesn't really matter where it is in the menu heirarchy, but moving it from Connectivity > Data transfer, where it seemed perfectly at home, to Settings leaves me thinking "What was that in aid of?".

THINGS I DEFINITELY DISLIKED

Subscription to "My Nokia"

Whether you like it or not, the phone sends off an SMS to the "My Nokia" service, subscribing you to receive tips on phone usage by SMS. You are not asked if you want this, you are told "I'm going to subscribe you to My Nokia" with the only possible response from you being "OK". You then have to go into the "My Nokia" application in your phone's menu and send another SMS to unsubscribe from the service.

The problem with this is that the tips from "My Nokia" are of no interest to anyone who's been using a mobile phone for more than about 30 seconds. They are aimed at people for whom even the most basic operations (such as switching the phone on and off) are completely bewildering. For my part, I find it rather condescending, even insulting, that Nokia should feel the need to remind me that I can use the power button to switch my phone on... If it's switched off then I can't receive that pearl of wisdom. Duh!

FM radio

The FM Radio no longer works. It'll start, but then it becomes totally unresponsive. You can't change preset stations, retune manually or do anything other than exit the radio application.

I never use the thing so it doesn't really bother me, but I do appreciate the frustration of people who do use it in much the way that not many people were bothered about the bugs present in V30/V31 while I definitely was!

IN CONCLUSION

This is a breath of fresh air after the string of somewhat disastrous firmwares for S60v5 phones we've seen coming form Espoo. It fixes the main problems encountered in earlier versions of the 5800's firmware and adds new features that people have been demanding so that this phone falls in line with other devices of the same family. It's what V30 and V31 should have been with a few extras.

A few things still need ironing out in the new "Contacts bar" homescreen and there is still no native SIP client to place VoIP calls, but regardless of these issues, V40.0.005 is a huge step in the right direction towards making the 5800 XpressMusic a phone that's fun to use in that the features it offers actually do what it says on the tin.

This is a major update so it won't be available over-the-air. If you want it (and I certainly recommend that you do install it), you'll need to update the phone on your computer using Nokia Software Updater.