Get your Free Visual Studio Tools for Office custom applications here.

Ok, this is very cool - not often somebody gives you something for free.

Is your company upgrading to Office 2003 between June & July of this year?

Could you envision a customized solution built on top of Office - perhaps using Visual Studio Tools for Office, to solve some business need? If so, not only can we help with that, but Microsoft Canada is willing to foot the bill for the development effort. This is a great risk free way to try out Visual Studio Tools for Office projects - either the current 2003 or 2005 versions.

For more info, drop me an email.

Dog Food .NET

Here is a list of MS products that either include or are built using the .NET Framework. I was surprised to see how big it is. Thanks to Dan Fernandez @ MS for this list.

  • Windows Server 2003 includes 1.1
  • Sharepoint Team Services requires the .NET Framework
  • Sharepoint Portal Server 2.0 requires 1.1 and written in managed code.
  • Small Business Server 2003 - Remote Web Workplace and the Backup Snap-in use .NET
  • Windows XP Tablet PC Edition - 1.1 is included, and the Tablet API is written in managed code.
  • Windows XP Media Center Edition includes 1.1 and some of the applications are written in managed code.
  • Outlook Business Contact Manager - majority written in .NET
  • SQL Reporting Services - majority written in managed code.
  • Exchange 2003 Outlook Mobile Access is written in managed code using ASP.NET mobile controls
  • BizTalk 2004 - parts are written in managed code
  • Commerce Server 2002 - parts are written in managed code
  • Content Management Server 2002 - parts are written in managed code
  • MSN Messenger Server (Presence server and admin/config tools)
  • Microsoft Business Network written in managed code, requires .NET Framework 1.1
  • MS-CRM – parts are written in managed code
  • SharePoint Portal Server 2003 – Parts written in managed code
  • Speech Server 2004 – Parts written in managed code
  • ASP.NET Web Matrix – Fully written in managed code
  • Visual Studio .NET 2002/3 - parts are written in managed code
  • This one seems obvious......NET Framework 1.0/1.1 - parts are written in managed code.


What are you doing for your summer job?

We have a very exciting internship project coming up this summer for a university student, perhaps co-op - but not mandatory.

This high-profile project is to develop a software system to monitor the various systems in a “green” home that is completely off of the power grid. The house is fed by batteries charged by solar and wind (and a backup generator). There are many other systems in place to optimize power usage throughout the house. Although this home is off the grid, it's not off the internet, so the software will have to publish it's information and allow remote access via it's 2-way satellite system. The software will also be developed in .NET, likely using the current whidbey beta.

You are a university student with some combination of electrical engineering and computer science. You are strong “quality-oriented” programmer. You have strong design skills and are good at listening and capturing requirement. The position will be located in southern ontario.

If you are interested, please send your resume to .

Bidding on .NET Celebrities

So today our company ObjectSharp placed a bid for 5 of the individuals on the .NET Celebrity Auction. Firstly, it sucks that max bids are not shown for a charitable auction. I would encourage any winners who didn't get to their max bid, to still donate the full amount to ACEH.

Now having said that, what would *we* do with 5 .NET Celebrities? Hmmm

  • Scott Hanselman, I'm going to ask you to give a 1 hour MSDN webcast about how easy it is to build a Smart Client Application using datasets and marshal them across web services.
  • Clemens Vasters, I'm going to ask you to give a talk on rapidly building data driven applications with Windows Forms using SqlDataAdapters and dynamic SQL. (No stored procs allowed).
  • Kimberly L. Tripp, how about a MSDN webcast on building mission critical, enterprise scale applications with MS Access.
  • Joel Semeniuk, you're going to give a talk about building rich user interfaces with ASP.NET and client side javascript.
  • Stephen Forte, Essential C++ Managed Extensions
  • Richard Campbell. Creating a Business Intelligence Solutions using the ODBC driver for CSV files.
  • John Lam, a 1 hour talk on Understanding the Unexpected Reactions of Hyrdoxybenzylthiamin. Ok, so he would actually enjoy this, but for my 1 hour of time, I'll watch it and try to learn something.
  • Kate Gregory has also said she would willingly join me in a head shaving.
  • And of course there is the thought of the .NET Celebrity Winter Car Wash!

Thoughts? Any of you feel like outbidding me?


.NET Celebrity Auction

Be a sport and click on this link:

Then make a generous bid. If you'll win, you'll get an hour (or more) of help from a .NET guru/celebrity (or possibly me). But more, you'll also be helping Tsunami relief efforts.

The top bid gets to pick their consultant. Then next, and so on and so on. If you are in southern Ontario, and you get me, I'll make it up to you by coming to your office - for a whole day, hang out, and bring donuts. What will I do? I can tell you everything I know about Visual Studio Team System (breaking all kinds of NDA rules, etc.), try to convince you to use data sets, do some code reviews, help debug something nasty, defrag your hard drive, organize your mp3's, tell you what DataGrid girl is really like, whatever.

I'm visiting Vancouver, Calgary, Ottawa, Montreal over the next 3 months so if you live/work near there, my offer stands, pending my schedule. I'll also be in Orlando possibly in June (for TechEd), LA in Sept (for PDC), and Chicago in August, so ditto on those as well.

For more info on how it all works....

And finally, special thanks to the other RD's who are volunteering their time (especially all those fellow Canadians). Last but not least, special thanks to Stephen Forte and Julia Lerman for organizing this.

Trip to Ottawa and Requirements Traceability

I just got back from Ottawa, where last night I was speaking to the Ottawa .NET community about Visual Studio Tools for Office. (more on that later).

I wasn't surprised by the Grep Cup weekend inflated hotel rates, but I was surprised to find a “2.8% DMF Fee” on my hotel bill (on top of the 15% worth of federal and provincial taxes). Upon request, I was informed that this was a “Destination Marketing Fee” which goes to fund marketing efforts to promote tourism in the area. Various Ontario tourism centers (including Hamilton - go figure?) have been lobbying the provincial governments since post 9/11 in an effort for them to allow a tax (a real tax, not a fee) for the same purpose. This past summer however, the hotels decided that this was going nowhere so they decided to start collecting (on a voluntary basis) a fee (not a real tax).

Maybe it's just me, but I'm thinking the best way to attract people to your city is not to put a sneaky “DMF Fee” charge on those same people's hotel bill when they come to visit you and hope they don't ask about it. Even worst, because it's a fee charged by the hotel, and not a real tax - guess what - you pay tax on the DMF Fee. Icarumba! It turns out it's voluntary fee and not hotels collect it. The front desk staff sensed I was not pleased about being asked to pay for marketing fees on top of my room rate so they quickly waived the fee. But I wonder how many people willing pay this?

This all reminds me very much about requirements management and software development. Often, people, usually too close to the problem, design features into software that doesn't meet the requirements of the user. Take for example those goofy glyphs on the Lotus Notes login window. What about clippy? Is that satisfying anybody's requirements - or is it just pissing you off? With all of our best intentions, it is extremely important that we take the time to perform reality checks on what we are building against the requirements of our users.

Now to bring it all home. Do users really want to do their work in a web browser? Browsers are great for wandering and finding stuff, but do they want to see the value of their stock portfolio in a browser? You need to find the best environment for the job your users are trying to accomplish. If somebody is accustomed to using Excel to aggregate a bunch of their financial information, then maybe Visual Studio Tools for Office is the right tool for that job. While writing applications in Excel isn't exactly new, with VSTO you have the integration with the .NET Framework, Web Services, and the smart client deployment model, you can apply all professional development skills you have at your disposal to creating applications with Word & Excel. And don't worry, I have yet to see clippy show up in Visual Studio Office projects.


Master detail combo boxes in windows forms

An application I was working on today required two comboboxes to be linked as parent and child (master and slave). Changing the selection on the first combobox needed to cause the second box to provide choices from a child table. For example, the first box could be a list of country codes and the second box could be a list of states or provinces within the country.

It had been a while since I had done winforms development but the .net environment gives great support for this kind of shared state through the binding manager and so I was expecting it to be easy - set the datasource and then the display member and we're done. Oh right, I then remembered that I would have to use the relationship between the parent and child tables to control the slave combobox. Then I got stuck on what to set in the the datasource and display member properties. The last time I did this I think I used datagrids and that was what I thought of trying first. For a datagrid, the answer looks something like this:

datagrid1.DataSource = ds;

datagrid1.DataMember = ds.Relations["parent_child"];

Where parent_child is the name of the relation between the two tables. But there is no DataMember property on the combobox and, come to think of it, how would the combobox know what column I wanted? So after some experiments and some searching around the web I found what I needed to make it work in Dino Esposito's article: I tried setting the DataSource to the data set and the DisplayMember to the path of the column on the child like this:

combobox2.DataSource = ds;

comboBox2.DisplayMember = "parent.parent_child.childCol1";

This nearly worked, the second combobox now displayed data from the child table but it did not change when I changed the parent. Here is what the parent looked like:

combobox1.DataSource = ds.Tables["parent"];

combobox1.DisplayMember = "parentCol1";

The problem was that the binding context set up a different manager for the two controls because their datasources were different. By changing the parent to:

combobox1.DataSource = ds;

combobox1.DisplayMember = "parent.parentCol1";

Now they shared the same binding manager and the controls worked as required.

Hope this saves you some time.

SqlConnection woes on the Compact Framework over WiFi

Last night at the Toronto .NET Users Group talk I did on mobility, a gentleman had a question about directly connecting to an Enterprise SqlServer database from a Pocket PC using the Compact Framework. His users run on a shop floor and some times they lose their wifi signal. While he doesn't keep the SqlConnection open the whole time, it seems that when a wifi signal is back alive his application can't connect to the database using a SqlConnection.Open anymore - despite that he can still ping the server.

He was correctly doing a SqlConnection.Close in a finally clause around his data access, but I suspect that even though pooling is not supported on the compact framework, this is not doing a proper disconnect of the physical connection (a Sql Profiler session would probably tell you that for sure). So a using block in C# will ensure that the SqlConnection is disposed of immediately and will properly terminate the connection. So if between calls you lose and reaquire your wifi connection you'll be starting a bran new connection the next time. It's still a good idea to put all of your actual work in a try/catch/finally block with a SqlConnection Close in the finally.

using (SqlConnection cn = newSqlConnection(CONNECTION_STRING ))
   //do some work with the connection
  catch (SqlException ex)
   //error handling

CTTDNUG UG Tomorrow Night: Building Pocket PC Applications with the Compact Framework and SQL CE

As part of the continuing MSDN User Group Tour, I'll be speaking at the Canadian Technology Triangle .NET User Group in Waterloo on Thursday October 7th (tomorrow night). There is a new location for the meeting at Agfa (formerly Mitra) in Waterloo. All the details are here.

Correction: Adam Gallant is going to be the speaker at this event tomorrow night. Sorry for the confusion. It should be a good talk.

Oshawa .NET: Building Mobile Applications

I'm doing a talk at the East of GTA .NET users group tonight in Oshawa. This is the same MSDN User Group tour event sweeping across Canada. I'll be talking about some of the limitations of the Compact Framework and SqlCE. Should be fun - hope to see you there.

Registration Links and slides (afterwards) can be found here.