ReBuildAll Blog
Thoughts (mostly) on .NET development

Windows Mobile 6.1 suxx (HTC Touch Diamond 2)   (Mobile)   
There have been some updates to the text of this post since it was first published, marked in the text as updated

I have now been using a Windows Mobile 6.1 based device - an HTC Touch Diamond 2 - for 2 months. Before deciding which WM phone I requested from my workplace I read reviews, looked at pictures, even went to a store to try out the phone. The reviews were praising, the pictures looked good and nothing did I suspect from a casual use of the phone at the store.

Could I have been more wrong!?

Quite frankly I have never seen or used a phone this bad. The phone features are more lacking than a Nokia (business) phone 5 years ago. Basic needs that I would assume to be normal in a phone cannot be used or do not work. It has been a big disappointment for me (maybe partly because I expected too much? but can you expect too much from a smartphone?).

I will detail out all my thoughts/complaints below. When reading you might say - hey this works for me, or there is this application that solves your problem. Well, I do not want to hunt for applications and install them on my phone, just to have what I would expect to be basic services - nevertheless, please feel free to throw any comments at me at the end of this article. :)

I have used Nokias for the past 10 years, so you will see a lot of comparisons to those below. My most recent experience is with a Nokia E71. The only reason I parted with that is because it was a work phone and I just switched workplaces 2 months ago :) Other than Nokia I also had a Sony Ericsson phone for a short time. Although I did not like that too much, it was still ok feature wise, not nearly as bad as Windows Mobile.

There are some good things about Windows Mobiles phones, I do not doubt that, but I did not find my digital assistant inside mine, sadly. The HTC game which uses the tilt sensors is really nice (Teeter) and I also like Bubble Breaker :) The youtube channel seems usefull and there is a nice Facebook client as well (although a little buggy). But frankly, these are just extras (for me).

So here it goes ...

No default backup solution

I did not find a backup solution in the phone, by default. Needless to say, Nokias nowadays contain such an application, where you can backup to the memory card in the phone. With PC Suite you can also create backups of your phone and it takes all settings, files, contacts, messages into the backup archive, from where you can even restore selectively.

Hard reset your Windows Mobile device? There went all your bookmarks from the browser. Same when upgrading the ROM.

At least contacts, messages, etc can be saved by using ActiveSync. User files can also be saved by using MyPhone. but that brings us to another major problem.

No multiple sync partners are possible

I take it really bad when a device tries to be smarter than me. And when talking about sync features of WM6.1, this seems to be the case. If I set the contacts to sync with Exchange, I cannot sync them also with a computer (unless I start tweaking the settings every single time I sync - not an option). It just so happens to be I would like my contacts in Exchange, but also have them on my home computer (another complaint, is that the phone only syncs with the default contacts folder in Outlook. Nokia PC Suite lets you choose where you want to sync, and I also used that feature actively).

Bring MyPhone into the picture: you cannot save all things (contacts being most important) to MyPhone when you are syncing with Exchange. How stupid is that? Now I have some things in Exchange, some things in MyPhone. Yay?

I realize with multiple sync sources/destinations there could be possible problems. But:

- Nokia's PC Sync included an option which sync partner should be considered when a conflict arises. When the mobile phone is the "master" data source, it doesn't matter if conflicts come, they will not bother you
- I do realize these potential problems and want to live with them, thank you.

Terrible alarm sounds

I don't know who designed the alarm sounds / alarm settings but the person did not use the device as an alarm clock to wake up to. ALL OF THE SOUNDS are quite frankly horrible to wake up to (I tested them all). The biggest problem is, there is no such option to start at a low volume and gradually increase it (fade in). The sound just starts playing at full volume. Some mornings I thought I would just throw the mobile at the wall to make it silent :-O You day just started bad right from the beginning when waking up to these noises.

Anyway, this problem I fixed - because I had to. I created my own sound, as a 4Mb WAV file. It is this long, because repitition was done in the sound file itself. It also has a nice 20 second fade in at the beginning. Waking up is pleasant again. ;-)

But this does still bother me, because the next hard reset / ROM update will erase my sound and I have to transfer it there again. Not to mention you can't just use any sound, it has to be .WAV and has to be put into the Windows folder. Ringtones aren't this restrictive and quite frankly why do different rules apply to alarms than to ringtones? And that brings us to ...

Ringtone settings are lacking

Ringtone options are too basic. Nevertheless, they are the smallest problem given all my other complaints.

My first Nokia (business) phone back in 1999 had more complex profiles than this device. There are not really any real profiles, more like states: vibrate, silent, ring. But you cannot combine the settings as you would like them. Also, SMS notification is completely not tied to these states.

As a result, if you want SMS to vibrate, it will vibrate ALWAYS, even when the phone is set to just ring. Yeah. No to mention by default there was no SMS notification at all, no vibrate, no sound.

No custom states/profiles, you cannot create new ones yourself.

And again, no gradual rasing volume for ringing.

Text message delivery notification shows only number

Now I know this is a problem with my device / HTC Touch Diamond 2 only, because I have seen this work in a WM phone before. But for me, the delivery notification only shows the phone number. Not the name. I send a message to 5 contacts (from say 300), and only get 4 reports of delivery, does the phone manufacturer really think I will be satisfied with 4 numbers?

Not to mention status is not shown - the latest Nokia phones also show pending status for the messages, which might be interesting for multipart messages. It is also good to know if the message is still pending or what is up with it.

Text messages only to "mobile" numbers

Now what in the hell is this limitation? Again, the device tries to be smarter than me and offers me to send SMS only to mobile numbers. Sounds sensible until you have a friend who has two (or three) mobile phones, and exchanges them regularly. Or just has a work mobile and a home mobile. Or one for one country and another for another (like me, I have a differnt number for Finland and for Hungary).

I tend to have several such contacts.

In Nokia after you entered the recipient name the phone offered me to choose a number if someone had several numbers. Or I could designate a default number (and change that whenever I want to), and then it would not ask.

In WM, I would need to exchange numbers to be able to solve this. Terrible.

Week numbers in calendar (updated 30.10.2009)
Thanks for Tavi for the information on week numbers

I originally wrote no week numbers but as it turns out they are available in the default WM calendar, they just have to be turned on (silly me). So one complaint off the list :) (the WM calendar might not be pretty but is functional)

HTC TouchFlo calendar however does not contain them.

Week numbers are quite important especially here in Finland, because everyone uses them in scheduling.

Internet Connections settings chaos

I had a PDA back in 2004. It ran Windows Pocket PC Edition 2003SE. I remember it had horrible internet settings. Well, the same settings screens greeted me 5 years later. And they are still horrible and still not intuitive to use and configure.

Not to mention I can't figure out an easy way to sometimes use the WAP settings and sometimes Internet settings. Yes, I do need to do that, because some sights let me on when I am using WAP settings only, and some only using Internet settings. Nokia had a simple option: ask which connection to use when going online.

And even more ...

Battery time is abysmal, good if I get 2 days of usage. Ok, big touch screen, lots of services, but I still find it too short.

It has connection droppings, at least once a week. The cellular network just goes away, and I have to reboot and/or switch off (and then back on) the phone mode.

Whenever I switch to offline mode, when I go online again it asks my PIN again. Little bit uncomfortable.

Typing on the device is not fun. To type fast you need the stylus. Touch screens just cannot do equally well as buttons. Scrolling on a touch screen is nice, but I don't think touch is something I could not live without.

Update 28.10.2009: Typing national characters is a pain. While with previous phones I started using national characters (finnish and hungarian) more and more because typing of them became easier, now I started to use them less and less. (thanx to Dave for pointing this out :))

Update 29.10.2009: When automatic clock updates are set, the clock is updated to random times, about once a day. Automatic clock updates cannot be used. This seems to be a problem on multiple Windows Mobile phones, not all of them even made by HTC.


My advice based on my experience is that if you can avoid Windows Mobile, do it! Somewhere I read that iPhone and Android users are the most satisified ones, and behind them comes Windows Mobile and Symbian users, equally satisfied around 66%. I don't know what those people have been using!?

The whole phone feels like Windows Pocket PC 2003SE with a new application called phone installed on it (and not really well done at all). The entire OS is ancient, uncomfortable and illogical. Windows Mobile brings shame to the smartphone name. The HTC user interface, TouchFLO eases the pain a little, but I feel disappointed by that as well. It just does not feel like a product that was intended to be a serious smart phone UI.

As I have stated above several times, the OS's customization features are really bad. It just doesn't let you do things your own way and forces you down given paths.

I am just now downloading WM 6.5 update for HTC Touch Diamond 2. Probably will update tomorrow. But reading about this update on the internet I am just unsure if it will be any better (I will write about my experience with it after I have used it for some time). I guess I am looking forward to getting another phone for personal use (Touch Diamond 2 will remain my work phone), and that might be the Nokia E72 to be released in the coming weeks.

(I have also received recommendations for iPhone and Android. iPhone is not an option, because you cannot get it operator free. First of I do not want to be the customer of the operator that sells it in Finland. Second, as I sometimes use my phone in Hungary, a sim-free phone is really nice to have. And third, no, I will not even consider buying and hacking it sim-free. Android I do not know yet - but what would you choose: the one you know works or the big unknown. Nokia E-series has my vote :P)

Shortcut keys in Windows 7   (Tips & Tricks)   
Probably everyone knows a few shortcut keys in Windows and various applications. Ctrl-C and Ctrl-V being one of the most popular, I guesss. But there are really a lot of very useful shortcut keys introduced in Windows 7.

I am myself a keyboard freak: I like doing many things from the keyboard. In fact, I try to avoid the mouse as much as possible. Because I code and write, my hands are usually on the keyboard, so moving onto the mouse takes away precious typing time :)

The following applies to Windows 7 only.

Did you know you can maximize (Win+Up) and restore/minimize (Win+Down, although this only restores if the window is maximized) windows easily, or even move a maximized window from one monitor to the other (Win+Shift+Left or Win+Shift+Right, based on the direction you are moving)? I also like the fill left or fill right side shortcuts (Win+Left, Win+Right). Arranging windows was never quite so easy.

It takes a moment of time to learn a few shortcuts, but I find that it speeds up everyday operations so much.

You will find a list of shortcuts here:

New Keyboard shortcut keys (hotkeys) in Windows 7

Or if you really feel like learning, here is a more complete list:

Windows 7 keyboard shorcuts

Update 27.10.2009 - Another page with useful information on shortcuts for Windows 7: The Master Lift of new Windows 7 shortcuts

Easy debugging of Windows Services   (Framework)   
Ever wanted to create a Windows Service, but found it is very hard to debug? Here are two tips to make debugging easy.

Use the Debugger class to break into the service when starting

Have you read my previous post about the Debugger.Break() statement? You can read it here: Debugger breakpoints from code. The same method can be used with Windows Services to break into the code as it is being executed. If you want to break into the code just as your service is starting up, add the following code to the class constructor:

    public partial class MyService : ServiceBase
        public MyService ()
            this.ServiceName = "MyService";


This will popup an application error message just as the execution is over the line - just as your service is starting up. You just need to say you want to debug it, and attach a debugger to it. If you have your service code open in Visual Studio, you can just use your existing instance of Visual Studio to debug the service. You can then monitor the startup, or add additional breakpoints.

You are not limited to breaking in the constructor - just add the statement wherever you need it.

As the debugger attached, Visual Studio will tell you there is no source code to display. But don't panic, just hit the step over (F10) debug command and you will end up at the statement after the Break() call.

Make your service a normal application for debugging

Another way to solve this problem is to turn your service into a normal Windows or Console application, that you can debug the traditional way. I like this approach, because I can run my application normally, without the hassle of the Service interface, until I am ready to run it as a service. This method makes it possible to seamlessly transition from "normal" run into "service" run, back and forth, as needed.

To make this happen you will have to alter your startup and stop code of the service. You need to do this, because the startup and stop code needs to be accessible from the outside, and ServiceBase have them defined as protected.

If you are worried about this solution, you can always put #if DEBUG precompiler statements around the code you enter. This way it will only be available in the debug version and you do not need to worry about it in the release version (if this is an issue at all).

An easy way to get started is to modify it like the following example. We add two new methods to the class:

    public partial class MyService : ServiceBase
        public MyService ()
            this.ServiceName = "MyService";

        protected override void OnStart ( string[] args )

        protected override void OnStop ()

        public void HandleStart ()
            // real startup logic

        public void HandleStop ()
            // real stop logic

When the application is invoked as a service, HandleStart() and HandleStop() methods will be called to handle the actual startup and teardown logic. But now you can also call these methods from your alternate solution.

If you want even more abstraction, you can just create two separate classes. One will contain the actual logic you need to perform, but will be a regular class derived from object. This would contain the HandleStart() and HandleStop() methods I described above. The actual ServiceBase derived class will be a wrapper (think Adapter pattern) around this regular class.

Now after this little modification is complete you still need to alter the startup code.

The default Visual Studio Service project template will generate a Windows application, so you can't really use the console. But no worries, add a reference to System.Windows.Forms, and then change the startup code. Look at the following example. (This reference might be a bad idea in some cases, but I will not go into the cons of this solution, at least not in this post).

        static void Main ( string[] args )
            if ( args.Length > 0 &&
                 args[0] == "console" )
                var service = new MyService();

                MessageBox.Show( "Press OK to quit" );

                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
				    new MyService() 

What this code does is when it detects the command like argument "console" it will not invoke the service startup code, instead it will proceed to instantiate the service class and invoke the methods we added above. If you wanted to go with the abstraction case, you would forget about the ServiceBase derived class here, and simply use your custom class directly.

The code displays a simple MessageBox, and the service will close when the user presses the "OK" button.

Whichever way you go, debugging services can be made really simple, which is a big plus when you need to debug them often.