My good friend, Dave Nanian, (of Brief editing fame, Track Record, and now Shirt-Pocket software (where he just won an Eddy award for NetTunes!  How cool is that!?)), made me a bet that I couldn’t turn down.  He’s a gadget freak and totally loves the i-mate SP3 phone.  I’ve known Dave for years and I’d never heard him talk so glowingly about a gadget.  His bet was that if I got one and honestly didn’t like it, he’d cover the cost.  I couldn’t turn that offer down.  Turns out, it was a really safe bet on Dave’s part. Wow, this phone rocks.  (I got the worldwide version from Expansys as I’m doing a lot of international travel next year.)

 

I’d played with some of the PDA phones (that look to be the size of dinner plates to me) this last year, but could see that they really didn’t do either the phone or PDA piece very well.  My main want in a phone is small size so I can comfortably carry it my pocket.  To me a phone is a tool, not a dorky belt fashion accessory (sorry, guys).  My only other requirement is that I be able to use the phone to get internet access when traveling. 

 

For the last three years, I’ve been using a Motorola TimePort that came with my car, but is right at the edge of being too big.   Also, connecting to the internet at 9.6K through the serial port was painful.  For the last three or four months, I’ve been using a Nokia 6600, which has Bluetooth so I could get the GPRS connection.  It is a good phone, but the Nokia-Symbian software that runs on the PC is some of the worst software I have ever used.  While I thought ActiveSync with my old and barely used iPaq a few years ago was not the best software (as you’ll see in a moment), the Nokia PC Suite spawns four of five memory chewing, processor spinning, horribly ugly processes to simply copy calendar, tasks, and software to the phone.  It took me an hour to clean all that goo out of memory and figure out how to manually start and, most importantly, stop those processes so I could do a manual sync.  I don’t know about you, but I hate software that feels so self important that it has to run all the time even when it’s not needed at all.

 

The i-mate SP3 is a top notch phone first and foremost.  Its super small (slightly more than 3/4ths the size of the Nokia 6600) and I found it very easy to use as a phone.  It’s got Bluetooth and connects perfectly with GPRS to the internet.  For us road warriors, it also completely charges off the USB port so there’s no extra 10 pound power brick to carry, which makes its real size even smaller.  The gravy for me was that the phone itself can connect over GPRS to our Exchange Server so I can get my mail and calendar anywhere in the world.  I’m probably not going to be writing many emails on the phone, but just getting that quick check without having to open the computer and connect is divine.  It took less than five minutes to set up and it just worked.  I like software and hardware that does that.  Now, if only someone could tell me why Tasks are second class citizens and not synchronized either…. (Any hints on how to get them synced through Exchange on GPRS?  Third party commercial products are welcome.)

 

To me the screen on the phone is fantastic and is surprisingly bright.  The apps included with the phone are useful and allowed me to get things like speed dialing and photo contacts set up easily.  As a good sign I won the first game of Solitaire, though it took 13 minutes to get all those little cards moved to the home row.  The only small issue I’ve had with the phone has been clicking the action button.  I had a tendency to press it slightly up instead of directly down.  For those of you that like cameras in the phone, the imate SP3 has one.  Personally, I would pay an extra $50 to not have a camera just to avoid yet another moving part that could break.  Maybe someday I’ll understand why a cheap camera on a phone resembles anything close to useful.

 

The Windows Mobile SmartPhone 2003 OS looks interesting as well.  While working at Microsoft, several folks showed me a very cool SmartPhones application that reported real time traffic updates on a map.  If the 5’s are red, stay in our office for another 30 minutes.  If they are black, you can go home.  The traffic application got me thinking about other things I thought would be interesting.  The weather was an obvious choice, and some fine fellow New Hampshire residents, ConnectedBits, have done a great app, Weather for SmartPhone.  I’ve been playing around with the .NET Compact Framework the last few days and maybe I’ll have one of my own in the New Year.

 

The one drawback of Windows Mobile SmartPhone is ActiveSync.  For the most part, it does work, though no matter how hard I’ve tried, I can’t get Bluetooth synching to work. That’s no big deal as the i-mate SP3 as I need to use the USB cable anyway for charging.  In my opinion, there are two major problems with ActiveSync.  The first is a design flaw in that’s been in ActiveSync since 1.0: there’s no way to do a manual sync.  In other words, start up, synchronize, and shut down.  Now that I’ve got the automatic Exchange synchronization, I (and probably many folks) only need to synch with the PC once or twice a week at most.  I don’t want to be running memory sucking programs if I don’t need them. Especially one that will keep a live COM reference to something as big as Outlook.

 

The second major flaw is one that’s come in since the last time I used ActiveSync:  like a virus, ActiveSync insists on checking the HKCUSoftwareMicrosoftWindowsCurrentVersionRun registry key and if it’s not there writes itself back.  I’ll go ahead and say this in all capitals because I really am shouting: NO PROGRAM SHOULD EVER WRITE TO THE RUN KEY OR STARTUP GROUP WITHOUT EXPLICITLY ASKING THE USER!  &@#$ IT!  What ActiveSync is doing behind our backs is so completely wrong.  If they checked and popped up a message box that the Run entry wasn’t there and why you might want it, I would not be complaining at all.

 

Having some familiarity with programming (J), I took five minutes and wrote the following JavaScript program to give us a manual sync and to undo the ugly Run key writing.  Since there’s no way to shut down ActiveSync other than getting brutal, there’s no way of releasing the COM reference to Outlook.  Consequently, the script below has to kill Outlook as well.  I’ve not had any problems with this, but your mileage may vary.  Caveat Utilitor: utility user beware.  Don’t come yelling at me if this corrupts your .OST, .PST, or Exchange Server, causes acne, halitosis, or any other problems you ever may encounter in your life or any afterlife (depending on your beliefs).

 

You’ll need the KILL.EXE program that comes with WinDBG to use this.  The WinDBG download link is in the source code comments.

 

/*———————————————————————

// FILE    : ManualSync.js

// VERSION : 1.0

// DATE    : 12/31/2004

//

// You’ll need the KILL.EXE program from WinDBG.  Do not ask me for it,

// downloading WinDBG is free from Microsoft:

// http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx

//

// This script will also kill Outlook.  Since there’s no way to

// shutdown ActiveSync, there’s no way to release that COM reference it

// has to Outlook.  Thus, I have to kill Outlook along with ActiveSync.

// I’ve never had any problems doing this, but use this script at your

// own complete risk!

//

// Make sure to set ActiveSync to sync on connection

———————————————————————*/

// The complete path to the WCESCOMM.EXE program.  You may need to

// change this if you installed into a different location.

var asProgram =

              “C:\Program Files\Microsoft ActiveSync\WCESCOMM.EXE” ;

// The registry key to delete.

var regToDel = “HKCU\Software\Microsoft\Windows” +

                        “\CurrentVersion\Run\H/PC Connection Agent”;

 

// Get the WshShell object so we can start an application.

var WshShell = new ActiveXObject ( “WScript.Shell” ) ;

 

try

{

    // Start up the wcescomm.exe program.

    oExec = WshShell.Exec ( asProgram ) ;

}

catch ( ex )

{

    WScript.Echo ( “Unable to start the WCESCOMM.EXE program.” ) ;

    WScript.Quit ( 1 ) ;

}

 

// If it’s running, pop up a message box to pause execution.

if ( ( 0 == oExec.Status ) || ( 1 == oExec.Status ) )

{

    var msg = “OK will kill ActiveSync, Outlook and remove the ” +

              “Run key. Cancel leaves everything running.” ;

    var ret = WshShell.Popup ( msg , -1 , “ManualSync” , 1 + 32 )

    if ( 1 == ret )

    {

        try

        {

            // Spawn off the kill of death.

            WshShell.Exec ( “kill -f wces*” ) ;

            // Gotta kill Outlook as well.

            WshShell.Exec ( “kill -f Outlook.exe” ) ;

        }

        catch ( ex )

        {

            WScript.Echo ( “Unable to start KILL.EXE” ) ;

            WScript.Quit ( 1 ) ;

        }

 

        // Now delete the Run registry key entry.

        WshShell.RegDelete ( regToDel ) ;

    }

}

WScript.Quit ( 0 ) ;