How hard can it be? (Or why you don’t have custom per contact ringtones on Maemo)

Often in blogs, forums or IRC you can find people complaining of missing features in some programs (and some of them are very rude). While they can be right sometimes, other times they just make me angry because they don’t know how difficult writing software can be, and they don’t understand the difference between a semi-working prototype and a proper stable application written by professional developers, designed by professional UI designers and tested by professional testers.

Implementing some features can actually be quite difficult and it could be better to skip those from your product and focus on other things; on the N900 one of these missing features is the ability to set customised ringtones for specific contacts.
Several people wondered how hard it can be, after all a lot of old phones do it. What they don’t consider is that, in many ways, the N900 is not a traditional phone and is more similar to a small computer. On the other hand, the N900 still needs to be reliable to be certified as a phone; for ringtones this means that the ringtone should be played as soon as the phone call is received, or the user could miss it.
Now suppose your N900 is under heavy load due to multitasking (real multitasking, like on a normal computer) and you receive a phone call from a friend; being a close friend that often calls you, you have an MP3 ringtone set just for him. The phone has to look up for the contact corresponding to the phone number, load the file from the (slow) memory card, load the libraries for playing the ringtone, uncompress the file, and finally play it. All of this on a phone under heavy load with most programs swapped out of memory!
To workaround this problem the N900 seems to do some tricks: the ringtone is uncompressed into a (big) WAV file and saved on the faster (but small) internal memory, and the component playing the ringtone is memlocked (i.e. never removed from memory). Of course, you cannot do this for all the possible ringtones or the already small disk space would be used immediately. Choosing not to uncompress the files, on the other hand, would mean keeping loaded in memory all the possible codecs.

Does this mean that it’s impossible to have a different ringtone for a specific contact on Maemo? No, it just means that if you want it you have to be ready to accept that the ringtone could start playing a couple of seconds later in some uncommon heavy load conditions. When you are ready to do that you just have to wait a couple of days, so that I can polish and publish the program I wrote to have custom ringtones :D

In other news, I’m going to GUADEC for the whole week: see you there!

I'm going to GUADEC

55 thoughts on “How hard can it be? (Or why you don’t have custom per contact ringtones on Maemo)

  1. @barisione

    i think only content search not help. for example, if i merge contacts i got only short list, and cont figure what person merge to if it three identical “first last”.


  2. There can always be found examples of products missing some specific features. But that can’t be used as an example why a feature isn’t needed or expected.

    One reason for groups it that you may hundreds of customers in the phone. You don’t really know the people so when you get the call, the name may not be enough to understand who is calling – you may need some way to hear or see a company name.

    If getting support calls, you may need to be able to separate customers who have flat-rate support and customers who have to pay for each call, in which case you would like color, ring signal or text to give some feedback. And the flat-rate support may be allowed to call through during weekends, while the pay-per-call customers only has 8-17 support hours. Some companies have multiple support numbers that gets routed – some companies don’t.

    With lots of people, you will get multiple name collisions – how do you separate your friend “John Anderson” from customer “John Anderson” or that evilishly boring sales person “John Anderson” who always wants you to replace your copier with his brand?

    Children playing football? You may have 20 numbers to other parents in the football team. You don’t know half of them. How do you recognize that one of them is calling? Or how do you find a list of football parents, in case you need to call someone but can’t remember the name until you see it?

    Some numbers you may add for short-term use. You want to be able to locate the names and garbage-collect them a month after the last incomming or outgoing call – it may be a number you got on a sticky on your monitor about someone to call to solve a problem.

    In the end, a phone book is way more than a list of names and numbers. It is one of several organizers used to keep control of your business and private life.

    The ability to group people, and to receive a call while seeing not just the name but some associated information such as a company name or a free-text field before picking up a call is a very useful feature. In some situations, controllable ring signals can help with some of these tasks – for example separating family from friends, from priority customers from unprioritized customers.

    That is why groups and multiple ring signals is one of the basic features of a phone.

    A phone that is a computer should obviously be able to do more than just switch ring signal.

    It should for example be able to integrate contact information with calendar information so that you may directly see your next planned meeting, or what you did agree about during your previous call and/or meeting. “A yes, but let’s focus on this question next week, since I will visit you on tuesday morning… By the way – are you happy with the software changes I sent you after our last call?”

    When “only” having a phone, it may be natural to have your computer as PIM – or maybe a large and heavy paper/skin edition. Having a computer that is also a phone, you really expect it to manage to do a reasonably good job.

    The N900 ends up short both as phone and as a computer. The hardware is capable enough, but the base applications are each on it’s own too lite. And they don’t merge together to form a unified product.

    With 100% public code, third party code could add the missing features, or release versions that better merges different features. Right now, we are seeing islands of applications solving small niche problems but that fails with the integration since integration requires replacing basic features with open-source alternatives.

    Palm failed badly trying to move into mobile phones. Most mobile phone vendors have failed badly releasing PIM solutions.

    The N900 is a platform that could merge the two, except for the time needed to replace all parts with open-source alternatives. Nokia probably underestimated the amount of work it would take to move their functionality from Symbian. And since Nokia seems to have moved their focus in other directions, that work now has to be recreated once more by volunteers.


  3. Swap is one of the main reasons why this is complicated and why PC’s and other general purpose computing devices can’t guarantee responsiveness even with the latest of CPUs. A LOT of effort is required to ensure “always on” experience that mimics traditional phones in a “best effort” environment of a generic computing device.


  4. Thank you for your efforts and the wonderful work

    But I haved a problem I hope to solved or gave me advies for this

    whan some one call me im my N900 it’s ringing after 4 – 5 second not direct,and if some whin make a call in 2 or 3 second my phone not ringing and show me miss call !!

    any advis or future solutions for this problem ??



Comments are closed.