My TechEd Presentation – Building cross-platform Modern Apps – the Design perspective

TechEd a couple of months ago was really fun and I am grateful to Microsoft folks for giving me an opportunity to be both part of the Keynote and also have a slot in the Architecture track. Sorry it has taken me a very long time to upload my TechEd talk “Building cross-platform Modern Apps: the Design perspective”. But as they say better late than never.  😎

You can download a copy of my presentation – Xamarin – Building cross-platform.

Feel free to ping me if you have any questions.

WP7 Mango Speech to Text feature

So I switched on my Bluetooth headset and discovered the Text to Speech feature that Mango has which works brilliantly. On the other hand, the reverse – speech to Text has a few short comings. Here is what was send to the missus when I replied to an SMS using this feature:

Okay calling amusing text to speech not speak to destitute lots of okay bye

And in case you were wondering, no I did not say that – but something quite different.  I guess Mango is still beta 🙂

TFS on the Road–Windows Phone 7 App

Pedro has build one of the best apps for Windows Phone 7 (WP7) that I have ever come across – TFS on the Road. As the application navigation map shows below it covers most aspects of TFS that you would be interested in – all packaged up in a very nice GUI. 🙂

application navigation map

Best of all, the application is free and you can get it from WP7 Market Place or if you want the code then from CodePlex. There are more screenshots for you to see what this looks like.

Before you go away and install the app, you need to have TFS OData Services installed and made available over IIS. If you are using CodePlex, then you are good to go as Microsoft already has that switched on.

Opensource ZigBee stack?

I was planning on getting the Telegesis ETRX2USB and wanted to know if there are any open source (or shareware) open source ZigBee stacks that I can use with that?

I also wanted to know if there is any opensource (or not too expensive), network management or network analyser for a ZigBee network? Essentially I want to be able to programatically view network and node information on the ZigBee network (e.g. S/N ratio, signal strength, etc.) – something similar to Ember’s Insight Desktop which shows the details I am interested in. I could not find anything specific and would be interested in getting ideas.

Making your TyTn Stable

Over the last few weeks I have heard a lot of people complain about the HTC TyTn (and more so these days with the new iPhone out now). But the phone itself is not bad – but if you are still running Windows Mobile 5 on it then sorry you don't get the rights to complain – that OS itself has loads of issues. So, if you are like me with a TyTn I would suggest you get on a Windows Mobile 6.1 ROM and get some peace of mind. I am running the 'Diamond Look-alike" Mobile 6.1 ROM and it is rock solid – I highly recommend it. I have been running it for a few days and am very impressed.

Of course, I was contemplating between the Diamond and the Diamond Pro, but now with the iPhone 2.0 – the water is as clear as mud on which one I should pick! Sigh!

On a somewhat related note, if you were thinking of getting a Diamond from Expansys, I would hold off as all of their phones are imports and technically grey market imports which HTC does not and will not support. But despite Expansys, why would anyone pay so much more for a HTC Windows Mobile, when you get a similar spec'd iPhone for much less?

Shame on Expansys for selling them as "UK" phones. Sad

Diamond vs. Diamond Pro vs. TyTn

I currently have a HTC TyTn and was thinking of getting either the new HTC Diamond or the HTC Diamond Pro and was not sure how they stack up size wise; but that is there sizeasy.com come in the picture and help me see what the three of them look like together.

Diamond Pro is a little thinner and lighter than the TyTn, the question for me is do I really need the keyboard or can I live with something like the Diamond. Hmm … decisions, decisions, decisions.

Point UI

Fellow Avanut David send the link to Point UI; it essentially is a small skin application for your Windows Mobile 5/6 and somewhat emulates the iPhone interface. Before you roll your eyes and think "here is another iPhone-knockoff-wanna-be", I'd suggest you take it for a spin. It is just bloody good!

The interface is just simple and you can use fingers (my fat fingers also worked!); to me it seems a less of the iPhone and more of a combination of the HTC Touch and the new upcoming Windows Mobile 6.1 and 7 (screenshots of v6.1 can be found here). Maybe Microsoft should hire these guys in the team.

Yes it is version 1 and has a few things missing but the community is quite active and a lot of good seems to be coming out. And the best part of it all – it is free. Big Smile

WMDC goes RTM (finally)

About time if you ask me; WMDC (Windows Mobile Device Center) – Incase you have not heard, WMDC is the thing that replaces ActiveSync and is the new software that allows you to sync you mobile phone or Pocket PC/PDA with Vista has finally gone RTM. . I am glad this has gone live as that means, no more hacking to get this installed and working. You can read up more on it at the WMDC Home Page.

Before you install this, if you have any of the old versions installed, then you need to uninstall it first before you try and installing this new one. Below are the steps from Microsoft on how to go about this.

Uninstall Steps:

  • Open the Start menu
  • Click Control Panel
  • Click on “Uninstall or Change a Program”
  • Select “Windows Mobile Device Center” from the program list and click “Uninstall”
  • Select “Windows Mobile Device Center Driver Update” from the program list and click “Uninstall”

Install Steps:

To install the new version you need to plug in the phone first. Here are the steps:

  • Connect your device to your PC.
  • Download the Windows Mobile Device Center Installer (9 MB) to your PC by clicking on the download link.
  • Select Run this program from its current location and click OK.
  • Follow the instructions on the screen.

You can get both the x32 and the x64 bit versions – approx. 10 mb each.

Syncing your mobile with Vista RC1 via WMDC

Update: Microsoft has now publicly released the Beta 3 version of WMDC which you can get from here and you do not need to use the hack detailed below in this post. This beta 3 also supports Windows Mobile 2003!

WMDC (Windows Mobile Device Centre), is the new software in Vista that replaces ActiveSync and you cannot even install ActiveSync on Vista.

If you installed Vista RC1 and plugged in your Windows Mobile Phone (either Pocket PC or Smart Phone) and expected Outlook to start syncing you would be in for a rude shock. All Vista does is open the device in Explorer so you can browse it and get to explore files – but nothing to sync up. This is because the WMDC bits are not publicly released yet but are being dogfood’ed internally.

If you are like me and cannot wait then below are the steps you need to do to get your mobile sync between the device and Outlook / Exchange using WMDC (make sure you also read warning before you do anything):

  1. Add a new key called “WHOS” (without the quotes of course) in HKLM\Software\Microsoft. (See the image below on how this should look like with the blue circle around the key)
  2. Plug in your mobile to the machine (either via USB or your Cradle).
  3. Run Windows Update.

Windows Update should detect that you have a new update and download and install the WMDC bits. After which you can setup a new partnership to get this running with Outlook.

Warnings:

  1. This is not supported – so you are really on your own. If something breaks and/or you lose data please don’t come crying to me or Microsoft. At the end of the day, there is a good reason why MS has not released this yet.
  2. Delete any existing partnership from your mobile and make sure there is nothing associating it with another computer. I had issues setting this up as a Guest or even as another one and had to restart all over (including installing Vista), so to be on the safe side, delete the partnership!
  3. Back up your data – both on the machine and the device.
  4. If you are not sure where to find WMDC – it should create a shortcut on your desktop. Also you can get to it via Mobile PC in the Control Panel (Control Panel\Mobile PC).

Below are some screen shots of this working on my machine. I also show the Control Panel and the Sync Centre.

 

Currently this is exposed via a MSI which essentially adds this key. Best of Luck!

Call A Contact

[Update 1: Added the link for the Smartphone bits that you can download]

[Update 2: Added a Bug and Troubleshooting section at the end of this post]

[Update 3: Fixed a few small typos]

One of the things that has bugged me for a bit is the lack of integration between the phone numbers in Outlook contacts and a smart device (such as a Pocket PC or a Smartphone) connected to the computer when it comes to making phone calls.

In Outlook when you right-click on a Contact, it recognizes the context and the fact that there are phone numbers associated with that contact and it gives you an option to call them. Note, I am of course assuming that the said contact has phone numbers – either stored locally or retrieved from the GAL.

If you are running Office 2007 Beta 2, then the menu you see should be something along the lines of the image on the right hand side of this paragraph. (Sorry I have had to block out the actual phone numbers). Now, one would thing that when you click on one of those phone numbers, Outlook will dial that number for you. Well, note quite. Unfortunately, selecting any number, if you have Live Messenger installed, then you get Windows Live Call (which in turn asks me to sign up with some Verizon VOIP service – no thank you). I looked high and low and asked around but could not find anything that will let me send this phone number to my mobile and then use that to dial out. After ranting about it for a while and asking a few colleagues if there was a way, I thought I would write this myself.

So, here is the fruit of last weekends puntering about. There are two aspects to this solution – one that runs on your mobile device and the other is a Windows application that runs on your computer. You would need to install both these to get this working and it will work on both Pocket PC and Smartphone 5.0 (or higher). You will also need to have the .NET Framework 2.0 runtime on your computer and the .NET Compact Framework 2.0 SP1 runtime on your Mobile device. More details on how to install these a little later, but before that briefly explain how this works.

Well, simply you start a Windows application, called "Call A Contact" (yes, it is a Windows app and not a Outlook add-in – more on that in a bit) which "talks" to the other application on your device and instructs it to dial the provided phone number – fairly simple.

So, why a Windows app and not a Outlook add-in. Well basically it is because of time and patience (lack thereof). I only have Office 2007 Beta 2 running, and to get the VSTO CTP bits for Office 2007, the pre-requisite is the WinFX February CTP. For me this is not an option as I need to be on the latest version of the WinFX bits, for the WCF book that I am writing. Being, on the latest CTP, due to time constraints going back to an older version is not an option. Also, assuming I did go back to the Feb CTP of WinFX, the current VSTO bits are not very functional yet and we would still end up struggling. What about Office 2003 then? Well, almost the same similar story there as well. I don't have Office 2003 installed, and I will need to setup a VM with all the right dev bits – which again will take a long time – something I don't have at this point. As a result, the interim solution was to write a simple Win app, and that can be deprecated, with the Outlook add-in – that is when I can get all the bits along with the sun, moon and stars aligned. Smile

How do I use it?

Once you have installed both the desktop and mobile pieces, below are some screen shots showing how to use it from your computer. Make sure your device is connected via ActiveSync and cradled, and then start the app on your desktop (via Start => All Programs => Call A Contact).

You will see the Windows application as shown below. Click on Connect Device; if the connection between the desktop and the device is established then all the other controls will be enabled. The default paths for the apps (depending on the device) are pre-loaded, these can be changed if you installed the apps in some other location. Enter the phone number you want to call and click Run Program – simple as that.


(Before Connection)                             (After Connection)

The "Check Phone Status", when enabled, will check that the phone is free and only dial out if it is, otherwise you will see a dialog saving the phone is busy. If you don't care about this (which most likely you won't, because if the phone is busy the odds are you are already talking on it and know it is busy Wink. The three things I check for are:

  • Incoming Call
  • Current Call
  • On-Hold Call

Also, on your device if you use File Explorer and browse to where you installed the application (by default this should be in \Program Files\CallAContact and launch the application you will see a simple form where you can enter the phone number and get the same result. The Check Phone Status performs the same function. For example one a number is dialed out and the phone is busy if you try and dial another number with the check phone status option enabled you see an message saying the phone is in use, and to try later.

Note, if the CallAContact application is running on your device (as shown above) and you try to run it form the Desktop application – then nothing will happen. This is simply because since the application is already running on your device, I don't know what to do – should I quit that or not? (Remember we can only have one instance of the application on the device). So as best practice if you are using this on the mobile (though I can't imagine why), then make sure you exit the app when you are finished.

What about the Smartphone?

I have the code for that and have tested it in an emulator, but I need to get a device to test it, to ensure everything is working. You should be able to use this for that without any issues and I will be adding the links using which you can download the setup for Smartphone as well shortly.

What do I need to install it?

Well its not a long list of things, but depending on your current setup it might get a little tricky. Below are the things that are needed on your desktop and device. Please read this carefully as you will need to have all of these up and running.

  1. Mobile 5.0 device – This can be either a Pocket PC based mobile (like the HTC TyTn) or a Smartphone (like the QTEK 8500), but it has to be a Mobile 5.0 device.
  2. ActiveSync 4.2 – If you have an older version then please upgrade to version 4.2 from here. (which is the latest at the time of this writing).
  3. On your computer you will need the .NET 2.0 runtime. If you don't have this already then please get this from here (and it is a hefty download at 24 mb). If you are not sure if you have this already installed or not then skip on further and when you try and install the applications, that will fail (without causing any issues to your machine so you can relax), and will tell you that you are missing this.
  4. On your Mobile device you will need the .NET Compact Framework 2.0 with SP1. If you don't already have this installed then download it from here (at a heftier 37.1 mb). A couple of things that you need to read through. This is different from the .NET 2.0 bits in the above step. Also if you already have .NET Compact Framework 2.0 installed you will still need to get this as this is with SP1. Also, I would recommend installing this on your storage card – and not using up your main memory on the device.

If for some reason you don't have the .NET Compact Framework 2.0 SP1 installed (or you have an older version installed), when you try and run the application on the device you will see an error something like this:

Here are some screen shots showing you how to install the .NET Compact Framework mentioned earlier:

Steps for Installing

  1. Assuming you have all the bits mentioned above installed and working correctly then download the two required zip files below.
  2. Extract each of the files in a separate folder.
  3. Make sure your device is connected and powered on.
  4. In each of the folders double-click on Setup.exe and follow the prompts.

Files to Download:

Before you get to the link I should highlight the fact that you should backup all your data and don't come to me crying if something is screwed up because of this.

  1. Windows Application – WinCallAContactSetup.zip (495 kb)
  2. Pocket PC Device – CallAContactPocketPCSetup.zip (384 kb)
  3. Smartphone Device – CallAContactSmartphoneSetup.zip (378 kb)

If you want to change the default path for the program on the device and the type of device to be selected by default, then modify the WinCallAContact.exe.config file in any xml editor (or even notepad). This file can be found in the directory where you installed the application (default path is: C:\Program Files\Amit Bahree\CallAContact\). Change the PocketPCProgram key or the SmartPhoneProgramKey for updating the paths for either of those. Also if you prefer to default the app to Smartphone instead of Pocket PC, then change the WhichDevice from a "0" to a "1". Similarly if you don't want the Check Phone Status to be enabled then change that value to a "false". Note, all the values are case-sensitive.

Here is what the default config file looks like when you install this:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="PocketPCProgam" value="\Program Files\CallAContact\CallAContact.exe"/>
<add key="SmartPhoneProgram" value="\Program Files\smartphonecallacontact\SmartPhoneCallAContact.exe"/>
<add key="CheckPhoneStatus" value="true"/>
<add key="WhichDevice" value="0"/>
</appSettings>
</configuration>

I have not done a lot of extensive testing, and I would like to heard your feedback and any issues you have. Also, please let me know if you would like me to extend this.

Lastly, when I get the Outlook add-in I will be posting it here (will get the VM up and running soon) – so keep an eye out – till then copy from Outlook and paste into this. If you are interested in the source code then let me know as well and I can post it up here.

Bugs Found:

  1. The Windows application had a bug where if the phone number had more than one whitespaces then it will not work correctly. This has been fixed. Please uninstall the old Windows Application, download and install the updated one (using the same links as above). Note, you do not need to update the application on your Mobile device as this was only on the windows application.

Troubleshooting Tips:

  1. When you try and call the phone number if you see a error similar to the one shown below then this can mean a couple of things. One your device is not connected any more, please reconnect and try again. Or two you did not install the application in the default location, but somewhere else. For example, if you installed the application on a storage card (which is recommended), then for your Pocket PC device change the path to "\Storage Card\Program Files\Call A Contact\CallAContact.exe" (without the quotes of course). If you want to find out the path on your device then use file explorer to see the location as shown in the screen shot below.



How to change the Screen orientation on a Phone / Pocket PC?

If you have a Windows Mobile 5.0 device like the one I recently got and were wondering how do I change the screen orientation, well its fairly easy. It is cool that the screen orientation changes between landscape and portrait when I slide out the keyboard. But, on rare occasions I want to change the orientation without sliding out the keyboard and it is a pity that there is no hardware button to do this.

Programmatically this is a simple task. If you are using C++, all you need to do us use the ChangeDisplaySettingsEx class and change the DM_DISPLAYORIENTATION value for the lpDevMode member type. The supported screen settings are returned via lpDevMode.dmDisplayOrientation, with a DMO_0 meaning that screen rotation is not supported by the device. Also, when the display mode is changed a WM_SETTINGCHANGE message is send to all apps.

If you are more of a managed code kind of a person and rather use that, then it is even simpler. When you create a new Windows Mobile 5.0 Pocket PC device application project, your solution should automatically have a reference to the Microsoft.WindowsCE.Forms assembly. If for some reason you don’t have then then add the reference to this assembly. It usually resides in the same location where you installed the CF SDK (e.g. in my case this is C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\Microsoft.WindowsCE.Forms.dll).

In the SystemsSettings class, use the ScreenOrientation property to change the screen orientation (these are static). The possible values are 0, 90, 180, 270 (depicting angles), with the default being 0. To change the screen orientation between Landscape and Portrait you change the angle between 0 and 90 degrees as shown in the c# code snippet below.

Note, this only supported in .NET CF 2.0.

1 if (SystemSettings.ScreenOrientation == ScreenOrientation.Angle0) 2 //change to landscape 3 SystemSettings.ScreenOrientation = ScreenOrientation.Angle90; 4 else 5 //change to portrait 6 SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;

 

[I’m rocking out to Veronicas – Everything I’m Not [Jason Nevins Remix]

Utility to tweak HTC Hermes

Thanks to my colleague, Steve Butcher for this one.

Instead of messing around with the registry, there a utility available that will allow you to make tweaks to the HTC TyTn (the phone I got). This was also called the HTC Hermes, among a host of other names by different vendors. As the site article says, the utility itself free, but you need to register and download it and the site is in German only.

If you are either too lazy, or don’t know German, or just can’t be bothered and still want this utility then let me know. Since I have already downloaded this I can send you the cab file directly (its 745 kb).

[I’m rocking out to A Bad Dream by Keane from the album Under the Iron Sea]