Woo hoo! I get to show off how test-driven development is done, with Microsoft VSTS at the cockpit. In fact that is the exact title of my presentation. I was invited by the Malaysian Software Testing Board to present at its software testing conference. Check out my speaker profile here. My team mate, Poh Sze, will be delivering a 2-hour tutorial on how to use VSTS Test edition at the same conference.
Now I can expound on the demo I delivered at TechEd SEA 2008 called SharePoint To Go. There's a long title to it, but let's just leave it to SharePoint To Go. I don't mean SharePoint is to go away anytime soon, it means the same as "take away" in this part of the world. When I was planning what session to deliver, I saw a similarly titled session at TechEd North America 2008. I wanted to build a demo that is the synergy of existing frameworks, app blocks, and patterns. So in the end, I decided to use one of the tutorials in Sync Framework RC3 (which has since RTM on 5 Aug), and the Disconnected Service Agent QuickStart sample in the Smart Client Software Factory - April 2008.
The demo is about synchronizing 3 sync providers which are hosted in a WinForms application. 2 of them are in-memory providers, which stores the data (which consists of a customer name field, and phone number field) in a SortedDictionary instance. The third provider I have is to behave as the local replica of my SharePoint List, with full knowledge of synchronizing with the SP List on the server.
In order to do this, I created a proxy client of the SPList Web service, called WSSListAdapter class, which implements the CRUD methods, as well as two methods to get all items from the SP List, and the changes since the last sync. This is the architecture of my demo:
The WSSSyncProvider is a derived class of the GenericSyncProvider class which was provided by the 2nd tutorial sample in the Sync Framework tutorial. I need not write any code to handle the knowledge (sync changes) into the metadata store because all this is provided in the GenericSyncProvider, and the Sync Framework itself. All I had to focus is how to perform CRUD on my SP List.
When you load up my SharePointToGo solution in Visual Studio 2008, you should see the following projects:
(see how that corresponds to the sync architecture diagram above).
In the bookmarks window below, you should see the following:
Just check out the bookmarks, which are ordered according to the sequence of steps.
In order to run my demo, you would have to create a list in your SharePoint site. You can call it Simple List, for simplicity. However, follow the pre-requisites in my Visual Studio 2008 bookmarks (they're there in the VS solution). The first couple of bookmarks require you to do the following:
- Change the URL of the Lists.asmx.
- Get the GUID of your SP List (you may refer to your online search as to how to get the GUID of your newly created SP List).
You would also have to allow the right credentials in SharePoint Central Administration tool to allow the Windows user which you are using to run the WinForms app to access your SP List. Again, please refer to any documentation that you can find on the Live Search on this.
Here are a few comments I got from my TechEd session and my responses:
My response: My session was of Level 300 and as such it does show you what's under the hood, which means plenty of codes. You should be fortunate I did not type each line of code in front of you. I realize that many attendees are still not familiar with our session's code levels. Perhaps we should have a session on that.
- Don't assume that participants have SharePoint development skills
My response: I don't. I have already informed the audience that one of the pre-requisites of my session is that you have some SharePoint development knowledge. But even if you don't, no worries. If you're interested in SharePoint development after my session, you would want to learn about it anyway. Look, it's only a 1-hour session, how could I possibly cover everything. If I have to cover all the pre-reqs, I'll have to lock my audience in the hall for 5 days straight. :p
I appreciate all the feedback, and it's been a wonderful experience interacting with the audience, and getting them laugh at my jokes. I constantly look at ways to make my presentation and demo to be better next time. Till the next TechEd.
Photosynth, which was initially released as a Microsoft Live Labs Technology Preview, is being released as a new free service, to become part of MSN. The new product, available at www.photosynth.net, combines a 20GB online storage and presentation piece, an add-in to Internet Explorer or FireFox, and a downloadable 8mb installation to create one of the first true "Software + Services" offerings coming out of Ray Ozzie's Microsoft Live Labs.
I strongly encourage you to sign up and play with PhotoSynth. It is available immediately worldwide, for free, but in English only at this time. There are some computer restrictions:
A Web browser (Windows Internet Explorer 7 is recommended; Internet Explorer 6 and Firefox 2 and 3 also are supported, but not all features have been tested in all browsers); a small, 7MB plug-in available free at http://www.Photosynth.net; a broadband connection; and the Windows XP SP2 or Windows Vista operating system.
The final session I delivered at TechEd SEA 2008 was one titled "Outlook Application To Go! Building an Occasionally-connected outlook add-in using Outlook+Services Blueprint". I tag-teamed with Patrick Yong, for this instructor-led lab (ILL). Patrick developed a workflow hosted as a WCF service, and it serves as an Issues Tracker. With oil price only increasing, and the cost of living skyrocketing, people need a solution to keep track of their issues. :)
Essentially this lab introduces a manifestation of Software + Services, in the form of an Outlook application to go! Outlook + Services is one of the blueprints published under Software + Services Blueprints. You need to install the Software-plus-Services Blueprints, and the Software-plus-Services Blueprints Manager which is a Visual Studio 2008 extension that gives you all the nifty features of developing an Outlook add-in at blazing pace.
This lab was developed by both Patrick and myself, hence it was exclusive at TechEd SEA 2008. I've developed the lab manual in simple steps, which do not require you to type in code. I've also prepared a bunch of code snippets (all C#), which you could use the keyword shortcut to insert into your code. I've also setup all the bookmarks all over the classes so that all you need is to follow the sequence of the bookmarks. Bookmarks in Visual Studio 2008 is an excellent feature to guide both the presenter as well as the lab participants on where to insert code. The shortcut is as follows:
- Go to the bookmark item.
- Say this is the first todo item, type "todo1", and press the Tab button twice, and VOILA!
The lab content is explained well in the manual. Enjoy reading the manual.
Extract the code snippets into My Documents\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets
This is truly a wonderful experience, to play drums on Rock Band in front of a crowd. So far I was far from being contented playing in front of a virtual crowd in the world tour. Check out the video which my ex-colleague, KC, took, and he uploaded the video onto YouTube. Check it out here.
A bunch of us "Microsofties" just couldn't wait to get our hands on the Rock Band instruments, but we were to give priority to the attendees. But when the attendees failed miserably, we had to step up to the challenge. I jumped up onto the stage on no time to grab hold of the drum sticks, to the chagrin of my team mate, Yu Tsing. ha ha :) The verdict, 98% on drums, and 400+ notes streak.. woo hoo!
These are some of the photos which were taken at my first breakout session at TechEd SEA, which happened right after the keynote. Pretty cool to be presenting in a large hall.
The presenters' appreciation night

You may have realized by now that my recent blog posts are not in chronological order. But I think that this is better than not blogging at all. Life's revolved around TechEd SEA 2008 since the past one month. Check out my profile on the TechEd SEA 2008 website here. My session synopsis are all on this site, just search for my name.
It was also the first month in Microsoft's new fiscal year of FY09, which starts in July every year. That means plenty of business meetings with my ISV partners, especially with managed partners to ensure we start the new fiscal year fresh with good plans, and means to bring in the results.
While preparing for my session that was titled SharePoint To Go!, I holed up in my study room for 4 days straight in sharpening that rusty coding-Swiss army-knife of mine. It was enjoyable and very satisfying to say the least. In doing that I learnt a great deal about the Microsoft Sync Framework, which has since RTM, and also played with one of the app blocks in the Smart Client Software Factory.
The week before TechEd SEA 2008, I was in Seattle to attend an internal technical conference called TechReady. It was also a satisfying and unforgettable experience as I won the Top Performing Partner Evangelist award. The award comes with a Flip video camera, which sadly I haven't had the time to start using it yet. I should have used it at TechEd to do some video recording of the crowd. It wasn't all party and drinks in Seattle, I had to go back to my hotel room every evening to continue working on my demo!
In a later blog post, I will surely explain what were my key learning, steps, and resources I came across while developing the demo for my TechEd session. While I was thinking about how best to retain and share the knowledge, an idea was born. This will be my pet project for this FY, and I hope to have more details of that at a later time, perhaps around Oct timeframe. Meanwhile keep reading my blog. Cheers!
As promised, here are the content from my other session at TechEd SEA 2008. This session was titled WUX338 - Creating Dynamic UI with Windows Presentation Foundation. This session was not solely mine to present, I did a tag-team with the Lead Architect from Entellium Technologies. We invited Entellium to do a quick demo of their sexy-looking Rave client at TechEd SEA keynote, and this session was meant to divulge more details about some of the things they did under the hood to provide animation when stack panels are resized or reordered. This is great considering they are really sharing their engineering excellence.
I took this opportunity to also share the Composite Application Guidance for WPF - June 2008 release. As I have emphasized this during my breakout session, I will say it again in my blog, the application block and patterns used in this example was a modification of the Stock Trader RI application, and it was really meant to exaggerate how modules could be dynamically loaded onto a shell application to make up the look-and-feel of the application. In the modified Stock Trader RI, all I did was to create the following to demonstrate the points across to my audience:
- Create a new region on the shell, AdsRegion
- Create an AdsModule
- Created the interfaces for View and Presenter, and a concrete class to represent the Model, which is Advertisement
- Implemented derived classes for the View and Presenter interfaces.
- Created the AdsModule, and updated the shell bootstrapper to load up the AdsModule statically. However this may well be a dynamic loading of the modules by means of a configuration file or a directory lookup. If you want to find out how to achieve that, there are QuickStart samples that show exactly that.
When I checked out the Composite WPF app block, I fell in love with it. In many ways, those were exactly the requirements of most of the ISVs I've been working with. Essentially the question is how do they cater to very dynamic, or fluid UI that may be capture in some form of metadata, and the application UI framework should be intelligent enough to render this during runtime. In other cases, my ISVs are looking at designing their UI (which may consists of hundreds of screens or forms, and store that as metadata in a local storage, and the shell application should be able to load it up on the fly).
William has also promised to share the code for the PanelAnimator class as well as the Visual Studio project he had demonstrated during the session. However he's on vacation until Aug 22, and once he's back, I'll get the bits from him, to upload here or to link to what he has posted.
Meanwhile, he's the project and the slides I presented at this session.
I'm back. My apologies to those who have been waiting for me to upload the bits after my breakout sessions and ILL session from TechEd SEA 2008. I'll start off with my session that is titled OFC311 SharePoint Applications To Go! - Building Occasionally-Connected SharePoint Applications Using the Microsoft Sync Framework.
You can go ahead and create a list on your SharePoint site. Update the part of the code that points to the SharePoint List Web Service, which I have bookmarked. You need to open this solution using Visual Studio 2008, go to the Bookmarks windows, and navigate through all the bookmarks in sequence.
At a later point, I will provide more meat to this, but in the meantime, check this out.
I'll also talk about what I've been doing since I went MIA.
I get this question very often from our ISV partners. How do you get technical support especially for those hard-to-handle issues in your product development, and it is all to do with the Microsoft technologies you have adopted in your solution?
Before you call any of the numbers below, please make sure that you have your MSPP ID and details ready. A piece of advice: the 5-pack professional support is very affective. Please do not skimp on that. I do know of many partners who tried not to use their 5-pack professional support, for the fear that they would run out of it. If you have an urgent issue, use it, do not skimp it, otherwise you would most likely not use it anyway.
Here's what you can do (phone numbers only apply to Malaysia).
| Microsoft Partner Program (MSPP) | 1 800 88 5648 |
| Licensing/Technical | 1 800 88 6295 |
| 5-Pack Professional Support | 1 800 80 6114 |
| Microsoft Action Pack Subscriptions (MAPS) | 1 800 80 1432 (Malaysia Product Activation Team Department) |
| Regional Support Center (SEAPART) | seapart@microsoft.com |
Microsoft Partner Program (MSPP) - 1 800 88 5648
| Dial 1 | Microsoft Certified Professional Support |
| Dial 2 | Microsoft Certified Trainer |
| Dial 3 | Microsoft Partner Program (MSPP) |
| Dial 4 | Microsoft Learning Solutions |
| Dial 5 | ISV/Empower program |
| Dial 6 | Microsoft Action Pack Subscriptions (MAPS) |
| Dial 7 | Courseware |
| Dial 8 | Partner Sales Management |
Licensing/Technical - 1 800 88 6295
| Dial 1 | Bahasa Malaysia |
| Dial 2 | English |
| Dial 1 | Product Activation |
| Dial 2 | Pre-sales & licensing enquiries |
| Dial 3 | Microsoft Consumer Products (get ready with product identification number) |
| Dial 4 | MSDN & TechNet subscription and media replacement |
| Dial 5 | Microsoft Partner Services |
| Dial 6 | Microsoft Action Pack Subscriptions (MAPS) |
| Dial 7 | Courseware |
| Dial 8 | Partner Sales Management |
| Dial 1 | Gold/Certified Partner: Pre-sales Technical Support |
| Dial 2 | Gold Certified Partner: Technical Support Coordinator (TSC) |
| Dial 3 | Gold/Certified Partner with ISV Competency & Empower: Advisory Hours |
| Dial 4 | Microsoft Activation |
| Dial 5 | MSDN & TechNet media replacement |
| Dial 6 | Regional Support Center (RSC) |
Check out the PhotoZoom at MS Live Labs. It uses the Deep Zoom technology, and instead of using the Deep Zoom composer, and hosting my Silverlight application somewhere, this is live, ready-to-go from the cloud. Or in the site owner's own words:
PhotoZoom is an experimental site developed at Microsoft, running on the Microsoft Live Labs Incubation Platform. It uses the Deep Zoom technology in Silverlight 2 Beta 1 to create photo albums with user uploaded photographs.
You have to associate your Windows Live ID again with this service. Click on Sign Up again, and use your Live ID, or any of your existing e-mail address. This is because the Live ID authentication is on a Windows Live ID test cluster.
Check out what's I've done
Version 1 of the Open XML SDK is now available for free download from MSDN. More about it on Doug Mahugh's blog.
What's the implication for my ISVs?
- develop Office Business Application (OBA) using this final "go-live" version 1.
- churn out documents using this SDK
Have fun!
Enterprise Library has been revised based on customer requests to cover key scenarios for successful development and deployment of .NET applications.
Download the latest version of EntLib
Awhile back, I wrote a blog post on the rounding mechanism, little did I know that a reader posted a better alternative in the comments (I should read keep track of the comments closely in the future). I haven't tested this, but I trust the contributor of this piece of code. Full credit goes to gohsianghwee for posting this, and I quote him:
There is a better alternative, pass in the value 1234.23 and round digit as 2 will solve your problem. This algorithm makes user definable rounding possible. In fact, I just showed you one of my rounding mechanism in my application, which all rounding mechanism in my application are user definable.
User must always use decimal in terms of dollar and cent calculation. Even though decimal is not a primitive type, but it handles the calculation more appropriately compared to the others. This is due to how .NET handles primitive type figures.
public static decimal RoundAmount(decimal roundValue, decimal roundDigit)
{
decimal totalValue = 0;
decimal powerValue = 0;
powerValue = (decimal)(System.Math.Pow(10, (double)roundDigit));
decimal tempDecimalValue = 5 / powerValue;
decimal rndFigure = roundValue / tempDecimalValue;
totalValue =(decimal)(System.Math.Round(rndFigure, 0)) * tempDecimalValue;
return totalValue;
}
Thanks!
Visual Studio Team System Licensing White Paper Now Available
This month we published a white paper describing Visual Studio Team System licensing scenarios. It is synchronized with the April 2008 Product Usage Rights (PUR) document.
I'm so relieved that a VSTS licensing white paper is now available. I often field tones of questions from my ISVs about VSTS licensing.
Let's face it, the reality for a small-sized ISV trying to get help from its technology principal, be it any technology vendor is rather bleak. They may end up in any one of the following situations:
- you may not be in their radar
- you're being shoved aside
- you don't know who from the technology vendor's local office to contact
- you're being ignored from its technology forum because your problem is one in a million
- fine, you got the business card from one of their technology specialists,you call him/her, and your first line was "hey so-and-so, remember me, I met you at this event?", and s/he said "huh? who's that? sorry I don't do this, could you please go to http://support.company.com
- you're working way into the graveyard shift, and you're going crazy because you just can't find that piece of code sample that could resolve everything in your app
- [fill in the more in the comments of this blog post]
I know because I was in their shoes once upon a time when I was working as the R&D Manager in a mid-size ISV in Singapore. My technology principal was a couple of J2EE Application Server vendors, a mobile phone vendor, and a developer tools vendor. I thought to myself, those guys are jerks, they don't care about their ISVs who are toiling day-in-day-out developing an excellent solution on their technology platform.
The table has turned on me. I now work for a technology principal or vendor, Microsoft, and there are heaps of ISVs out there in Malaysia. I know of very small ISVs which are so short-staffed that even the Managing Director does some level of coding. Heck, even my former CTO could whip out a connector to a SMSC in a mere 4 hours. Internally, these group of ISVs are categorized under Breadth ISVs. I bet that some of them may be upset at me for not remembering their names even though I had just spoken to them at TechEd, or ISV Innovation Day recently or as far back as in the year 2003. Or that they'd sent me an email by saying something "I am using WF to develop a workflow on MOSS 2007, but I couldn't deploy it on the *(*^^%&^ server, but this is as much information as I could provide to you". I must have been a jerk (like what I used to call those guys). I apologize if I had been all that.
We hear you, and we are trying to the best of our abilities to address the 800-odd (some say 1000+) ISVs out there in Malaysia. As a ISV Technology Advisor, my goal is to drive technology adoption among my managed ISVs, One ISV Connect ISVs, and breadth ISVs. The technology that I could "evangelize" to you is as much as your appetite for technology, and your adoption of course. If all my ISV partners are presented in a pyramid, you know where you fit, you get the drill? Scaling out is an everyday issue that hangs in my mind. Fortunately, there's help out there, and that's when we encourage our breadth ISVs to check out all the resources online. Before you jumped into any conclusion, by saying something like "I could guess it already, http://msdn2.microsoft.com, aren't I right?", hold your breath, here's what we have for you.
There are heaps of benefits by signing up on Innovate On. All you need to do is to use your Windows Live ID to sign up, then just tell us about the solution that you are developing. And off you go to search for all the technical resources for the solution that you are building. How does the Search know what technical resources apply to your solution? Well, when you profile your solution, you would have selected all the Microsoft technologies that you use in your solution, in turn the Search returns what's applicable to you. You could also further tailor your search in this cool Silverlight search application (I deliberately right-mouse clicked on the Silverlight app to show that it is indeed built on Silverlight)
You could tailor your search based on
- Microsoft technologies
- Audience target
- Stage of product
But the juiciest benefit is ISV Technical Support!!!!
5 hours of free email tech support for your Windows Mobile solution
10 hours of free email tech support for your Windows Vista solution
10 hours of free email tech support for your 2007 Office system solution
The types of support requests you can raise are:
· Best practice
· How-to question
· Code sample
· Technology adoption guidance
I've said enough, click on that Innovate On image!