MDC in retrospect

MDC was absolutely amazing. It was my first chance to be the "anchor" of a keynote, and I think it went pretty well. Happily, the planned theme of the keynote was to educate the idiot, and since I didn't know anything about the mobile space beforehand, it worked well! :)

Seth, Ori, And Kevin Collins did an amazing job.

I can't wait to see what the audience thought about the presentation. I'm sure some thought the whole "I don't know what I'm doing" thing was a put on. I can tell you, it wasn't.

The funniest thing (for me) had to be when I asked Ori if I should ask MapPoint for coordinates on the Moon or in North America. During rehersals he kept stressing how fragile everything was and that I shouldn't try things out on stage. I had selected the moon previously (during other dry runs) but I'm pretty sure that he wanted to go with the "safe" answer of North America. I love being contrary ;-)

Anyway, I really want to thank the entire mobile team (from VS, MDD, SQL CE, to CF) for the chance to do the presentation. It was so much fun, I really learned a lot, and it helped me to really get clear in my mind what I deeply care about (smart clients, regardless of size <G>).

Sneak peek at MDC

Seth Demsy has some of the earliest pictures of MDC... Seth is going to be one of the fine folks that do all the real work in my presentation on Thursday...

What is a smart client?

David Hill has a pretty good definition of what a smart client is [link from Chris Sells]... it's especially fitting because of my upcoming MDC talk:

"In addition, the client platform has moved on in the past few years and now includes many different types of client devices, not just desktop PCs. Such devices include PDA's, SmartPhones, Tablet PCs, Laptops, set-top boxes, automotive devices, retail terminals, and so on. Smart client applications can be built to take maximum advantage of the features provided by the host device and tuned to provide the best user experience for the typical users of these devices."

He also has a great check list:

"

  • Utilizes Local Resources
  • Connected
  • Offline Capable
  • Intelligent Install and Update
  • Client Device Flexibility  

"

This is one of the more clear definitions of smart clients... too often people get too trapped into specific features. Using Office doesn't make your application a smart client, writing with the .NET Framework doesn't make it smart either. The key is to offer a great user experience with compelling functionality.

Porting BlogX to .NET CF

As everyone probably guessed, my last post was generated directly on my iPAQ talking over my wireless network at home...

Some interesting observations...

  • You get very wierd behavior if you take an assembly that was compiled against the desktop framework and run it on the device. Visual Studio will silently let you do this, compile, and try to run - however you will get odd errors. I saw "You need a new version of the framework", "Unexpected error", and "TypeLoadException". In the end I had to copy all my shared code from BlogX (the service proxies and runtime helper classes) into new CF projects.
  • Guid.NewGuid doesn't exist, but it took 1 google search to find the right hack for this. I'll have to follow up with the device folks to see if this is fixed in Whidbey.
  • XmlSerialization isn't in the .NET CF... I'm suprised they didn't just write a reflection based version, but I bet it would have been way too slow. This made me comment out a bunch of stuff from my shared BlogX libraries.
  • TabOrder isn't supported (or maybe my machine is broken). I couldn't get the TabOrder UI in VS to show up, so tabbing around between the fields on the device isn't in the right order (I can fix this in code though). Of course, many devices don't have keyboards so this probably isn't that big of a deal.

Overall, I'm pretty amazed that it only took 1 hour to get a smart client blog posting app written, of course I'll credit this to the great modularity of BlogX (ha ha!!!).

BlogX Client For .NET CF

It took about an hour, but I can now post blog entries directly from my iPAQ... the built in keyboard actually makes it somewhat tolerable!

.NET Compact Framework...

I've been attending JavaOne for several years, and every year one of the things that amaze me is all the device stuff. I knew about all of the Microsoft device stuff, but I never really appreciated it until this week. On Tuesday or so I got asked to talk at MDC, and since then I've been diving into our mobile technology offerings.

First, I have always seen that smart mobile devices are a key component in the smart client ecosystem. You are not always going to have your laptop or desktop with you, and you need something to access your information. In the past I've played with several CE devices, the Apple Newton, and at least half-a-dozen different cell phones. In their day, the various devices always seemed pretty cool, but I never really had such a desire to program for these until yesterday.

The folks at the MDC gave me a HP iPAQ 4355 to get me up to speed and get an appreciation for where we are today. It is absolutely amazing. I remember seeing the Sharp Zaurus a couple years ago at JavaOne and I was amazed. The device was running a Linux variant with J2ME running on it. I was so frustrated that Microsoft was doing so poorly with our device offerings.

No more.

On thursday I picked up my new device and installed VS .NET 2003, and then the Pocket PC 2003 SDK. Within 5 minutes I had written my first application - using WinForms, and about 1 minute later I was querying web services, browsing the file system, it was amazing.

I talked a bit with the compact framework team when they were developing it (I worked on the WinForms and then .NET Framework class libraries team at the time) and we talked about how they were doing the port, etc. I never really got into programming on the devices, mostly because at the time I was so focused on the desktop, and the device stuff was so immature from a platform sense.

These new devices are absolutely stunning. With built in WiFi and Bluetooth I was syncing mail, running managed code, and talking to web services as I walked the hall. I know this sounds like a commercial, but it was an experience.

I've already run into a bunch of issues with the existing tools and platform though. Accessing data on the device, talking to the contact database, etc - all are really tough today. It is going to be a blast to go down to MDC and talk about what we are doing to make this stuff even better in the future.

In the mean time - I tried using the InTheHand POOM library, but I get a missing method exception when I try to run it on the device... anyone know how to fix it?

Thursday, a day of preparation

Looks like I'm going to be presenting at MDC... today is an excercise in being submerged into technology...