November 2008 - Posts
Doing my part to spark the economy I recently purchased a HP TouchSmart IQ506 PC.

Fairly nice looking computer that my stable of Apple machines aren't embarrassed to be seen next to. The best part is that the screen is capable to multi-touch. It isn't exactly surface on the cheap since it only picks up two contact points with the current driver, but it's fairly accurate. My friend Kurt Brockett at our distinguished competition Identity Mine posted about getting the TouchSmart up and running on Windows 7. I wanted to write that first and call it "Kevin on 7" but he beat me to it. Although he skipped out on giving me credit for telling him to download the original drivers from HP and use WinRar to extract the .exes instead of hunting down the Vista drivers for each item. In retaliation, I will not tell him what are the drivers for his two unknown devices.
Next step is to actually build something using Multi-touch. There isn't a ton of information out there at the moment. You can watch this session from PDC - Windows 7: Developing Multi-touch Applications. The take away is that WPF 4.0 will have multi-touch support which looked cool, the WPF and Surface teams are working together so at some point there will be common interface for building multi-touch apps on Surface & Win 7 and right now you can use the real-time stylus APIs or unmanaged code for handling multi-touch. Using unmanaged code you can either handle WM_TOUCH or WM_GESTURE windows messages. If you handle the WM_TOUCH messages then you aren't able to use their gesture recognition.
Since unmanaged code makes Kevin the Coder cower in fear, I found some sample code in one of the PDC labs that handles creating the necessary structs and pInvoking the right functions. It's just a simple multi-touch line drawing app. To use this in your own code you can just add the WMTouchForm.cs class and inherit your form from that. You can then add handlers for TouchUp, TouchDown, and TouchMove.
Using the two contact points doesn't really get you much without some gestures. Andy Wilson and Yang Li created a great "$1 Gesture Recognizer" that works in JS and C#. To start out I downloaded the C# version, added the WMTouchForm as a base class for the main form and rewired the mouse event to correspond to the multi-touch events with the new location data. You can download the modified version here.
Here are some samples of gestures I made:
One Finger Swipe
Two Finger Swipe
Pinch
Two Finger Swipe Rotated
The $1 recognizer works pretty good considering I only loaded 1 sample of each of the four gestures. It's also great at recognizing regardless of the rotation of the gesture. I'm going to work on adding in support for my own scaling and rotation gestures next. I looked at porting over the scatter view control from the surface sdk, but that quickly got out of hand. I think I'd be better off starting with a simple control with similar properties.
We've set up a view new things to start sharing more content. First we have our video channels on YouTube and Vimeo courtesy of our new Director of Videography. The quality difference in HD between YouTube and Vimeo is pretty huge. Vimeo videos look sharp and I like the UI. Plus no popup ads since we are high rollers and have a pro account. But since my grandma is more likely to see the video if we upload them to YouTube, they'll be in both places for the time being. Grandma loves some Surface videos. We've also set up a friendfeed channel at http://friendfeed.com/clarityconsulting Now you can follow along with all our videos, blogs, Upcoming events, photos, tweets and Yelp reviews of our competitors all in one place.
Tonight is my first entry in my new column, Visual Studio Wish List. Here is my scenario - I just set up a new machine to try out some CTPs for Windows Azure, Live Framework, SQL Data Services & .NET services. After signing up on a series of connect sites and entering some invite codes (Am I the only person who thought it was a little confusing to navigate the Microsoft connect sites?) I get the following instructions:
Not a huge deal, but annoying that I have to go download all that stuff. Plus all the stuff I needed for SL, Azure & SDS. Maybe like 200 clicks to download 20 things and keep clicking Next on some installers. Not hard, but annoying especially when all these products are from one company. What I'd love is to have some sort of feature manager in VS when I can click "Add Feature" and select "Live Framework Development" or "Silverlight Mobile" so I don't have to hunt for Silverlight Mobile SP1 CTP Tools for Visual Studio to make it work. Clicking that would go out to the appropriate sites and download the dependencies and install everything. Even better if when I startup VS it can alert me of updates like "Silverlight Mobile SP1 CTP December Preview Tools for Visual Studio is available, would you like to upgrade?" Done. So much easier to get up and running. Most of the project types could just be add-on features so I can enable Windows Mobile development if I need it rather than having to go through the VS install process again which with it's normal speed takes about 4hrs on a quad core 3.2ghz machine.
Eclipse has something very similar to this already - Here is an example of the flow at http://www.comeclipse.com/updatesite.html

Screenshot from Eclipse's update manger
Even a command line tool similar to mac ports would be a huge help. Like on my mac if I want to do something in Django, I can just "port install django" and I get all the stuff I need to start building an app and can easily update when new versions are released.
And of course allow 3rd parties to plug-in to a directory service so I can download new unit testing frameworks or whatever.