Originally uploaded by firstdivision.

Test post of a picture from to my blog.

Here’s the caption from flickr:
Photo taken of a book and bowl of grapes. I came home one day and the table was set like that, “Hmmm” I thought, “That will make a neat picture.”

VSS Reporter and XSLT

A while ago we started using Microsoft’s Visual SourceSafe at work with Visual Studio .NET 2003. One of the first things we realized when we began working with it was that the reporting capabilities were lacking to say the least. Another problem we faced was the ability to tie together changes in SourceSafe with issues in our issue tracker. By using the free tool VssReporter to find the files that changed since a label or date, we were able to accomplish both of these goals.

The only drawback about VSS Reporter is that the generated files aren’t very pretty. Fortunatly one of the output options is XML which we can make to look pretty using XSLT and CSS. And then, as long as we’re in there, let’s add some functionality to integrate a home-grown issue tracker with changes made in SourceSafe. Then we can answer the question, “What bug or feature required that this file be changed?”

The XSLT file essentially builds an HTML page out of a supplied XML file. It was a little tedious to get working a first, but after a little bit of trial and error I was able to get the layout I wanted.

Another thing that the XSL does it to look for an occurence of “ID=” in the comment field. When files are checked into SourceSafe, we have to make sure that we use a comment that includes this string. Without it there will be no way to correspond changes made to files with the issues submitted in the issue tracker. This part is optioal to you, in fact if you don’t have “ID=” in your comment, the XSL will just ignore it and not try to build a link to the issue tracker. This brings up the first modification you have to make.

If you want to use the functionality to integrate your issue tracking system with SourceSafe, you’ll have to use a comment like the one I describe above. In addition, you’ll have to change the line in the XSL file that builds the link to the issue tracker, since I’m going to guess that your URL to your issue tracker is not the same as the one I made up for the example.

Look for the line that looks like:


and replace it with the URL to your own issue tracker. The comment itself is appended to the end of whatever you specify here, so keep that in mind. Either your issue tracker will have to be smart enough to extract the identifier for the issue from the comment….or you’ll have to get fancier with the XSL to have it pass in only the ID number of the issue. Since my VB.NET skills are much better than my XSL, I chose to make the IssueTracker page the smart one. 🙂

The CSS file is nothing special, it just makes the display a little easier to look at.

The Final Product
An example VSS Reporter XML file shows how the three files work together to produce something that both looks nice (I think), and is useful.

If you look at the source for the XML file, you will see a line at the top that is not included in the XML file that is originally generated from VssReporter. This is a line that tell the XML processor where to find a XSL document to use (I hope I’m not lying about what is going on). In any case, you’ll need to add this line to the top of the XML file.

There’s also a ZIP file that contains the three files mentioned in this article. Just unzip all theee to the same directory.

Hopefully someone will find this useful. VssReporter is a really powerful (and free!) tool. I think Visual Studio 2005 Team System might make this unnecesarry in the future, but probably not for a while.

Two cool tools

Just want to post links to two cool tools that I’ve come upon:

The first is BCWipe which allows you to securly delete files, or entire drives. I haven’t used it, but I’ve talked to someone who has and they say it’s pretty cool.

The second tool is Daemon Tools. This is a nice utility that allows you to mount ISO images as drives in Windows. I’ve got an ISO mounted right now, took a few seconds to click the icon in the tray, select my ISO image and then navigate to to my new “F” drive. Pretty slick.

MSDN Event – Visual Studio 2005

It was pretty good. Basically what I expected it to be, which was an overview of the new features available in Visual Studio 2005. One of the biggest advancements seems to be better data access, and more flexibility with how data is presented and bound to controls.

The DataSource wizard has been expanded too. You can now specify an external URL to fetch an XML file for a datasource, that was pretty neat. I’m not sure, but it also seemed that all the “auto-generated” connection strings were maintained in the web.config file auto-magically, even though the presenter was generating a new datasource on each page. There’s also a way to specify a stored procedure to use as the datasource. If this option is chosen, Visual Studio will read the parameters required and prompt you for where to get them (querystring, control, object, etc). Also pretty cool.

The other major feature is something called master pages which lets you specify a template-file for the entire site and control the layout with that file instead of having to keep track of includes all over the place. There’s also “skin” support that lets you define how each control should appear (i.e. all calendar controls should have a grey background, 12 pixel font, etc…). Unfortunately, the skin support doesn’t extend to regular HTML controls, so you can’t use it for things like an H1 tag…I don’t understand why not. This means that CSS is still required for these.

It will also validate the HTML for a particular browser, and will do it for section 508 compatibility if that’s required.

They didn’t cover much about Team System, which I was interested in, but they did give us a DVD of Team Foundation Server that we can install to check out the new features. They also gave us a DVD with all the presentation details on it, you are welcome to borrow mine if you want.


I think I never learned how to spell “visible” until I started programming. I probably always spelled it “visable.” Now, after setting the “visible” property of so many controls I’ve become pretty good at typing out “visible”.

Just thought I’d mention that. lol

Bad Mix – Hip-Tow lesson

Was just looking at at the last of my Gin and Tonic and thought….I wonder what a splash of Cointreau would taste like in there. The answer is not very good.

When I was coming back from work I stopped by the boat club to see if anyone was down there. Nobody was, but I did see my dad moored off Bill’s Island. I also noticed that the inflatable raft was still in with the dinghies but in need of air……a plan was born.

I drove back to the house. Threw a 12-pack and a bunch of ice into a cooler. Grabbed the air pump for the inflatable and launched the canoe with my supplies. I paddled out in the canoe to meet my dad who was moored on the “saff-tee” mooring off Bills Island. The plan was to be a hero and arrive with a 12-pack of ice-cold beer and hang out there for a while. However, when I rounded the point I realized he had already left the mooring to go back to the boat club. Since I was already out there I figured I would paddle over to the club (long paddle into the wind). This would have to substitute for my excercise, no running today.

Getting closer to the club I realized that he was getting ready to leave.

“You THIRSTY?” I yelled. Of course he was. I tied up my canoe to the boat club dock next to Tresta, cracked two beers and handed one to him. Now properly equiped with a cold beer I began pumping up the inflatable which I would be using for the return trip. When it was drum-tight we slid it into the water and I side-paddled it over to the waiting canoe. We tied the canoe the inflatable hip-tow style (side-by-side), I started the engine on the inflatable and I was off.

I couldn’t turn! We had tied the canoe too far to the front of the inflatable and even with the engine turned 90-degrees to the side I couldn’t turn one degree. After re-adjusting the lines I regained control of the two and was able to motor out of the morring field and made my slow downwind journy across the pond back home.

IIS – Visual Studio 2003 – .NET

Well, I’m not sure exactly what happened, but I recently worked on a Windows XP laptop that was freshly rebuilt. Classic ASP pages worked fine, as did .NET aspx pages.

However, suddenly IIS stopped being able to serve classic ASP pages (.NET still worked fine). It just returned a “500 Internal Server Error” The symptoms were exactly the same as an article on MSDN, (two events in Event Viewer, one for W3SVC and one for DCOM) but we couldn’t get the suggested fix of making the passwords the same in both the IIS metebase and Windows.

It turned out, the easiest solution was to uninstall and reinstall IIS. It takes about 20 min and you’re done. Take lunch between the two and you barely notice what’s going on.

SourceSafe – Visual Studio – Integration

A while back at work I needed to install the SourceSafe client onto a desktop that had Visual Studio 2003, but not the SourceSafe integration. After a few posts back and forth here at the Microsoft SourceSafe Forum, I was able to come up with a solution.

1) Copied VSS\Win32 directory from sourcesafe server to local client machine in C:\Program Files\Microsoft Visual Studio\VSS\Win32.

2) Ran SSINT.exe

3) Opened Visual Studio 2003, opened a project from source control. It works.

4) Deleted everything from the local C:\Program Files\Microsoft Visual Studio\VSS\Win32 except: ssint.exe, mfc70.dll, msvcr70.dll, ssscc.dll, and ssus.dll. This is the same file list that is present on a workstation that had the integration installed from the SourceSafe CD.

5) Opened Visual Studio 2003, checked out a file, checked it back in. Works!

One comment that both the posters stressed is to make sure you have SourceSafe licenses for the machines the machines that you install the integration onto.

First Post

This is the first post on the blogs. Who knows if this’ll get used or not. If not, that’s why they make delete keys.

Here’s a backed-up post from earlyer in the month. I had set up another blog but deleted it in favor of this one. Anyway, here’s theold posts:

Friday – Saturday – Sunday: River Rafting
This was an awesome trip. I drove up to Millinocket Maine and spent the night at a campground. In the morning we headed over to the rafting place to gather our synthetic jackets, life preservers and paddles.
The day starts off with a 13 foot waterfall. The waterfall empties into a large area so the consequences for falling out are pretty low. That’s why I think the company uses this spot to get almost every boat to flip at least once. You might as well see what it’s like now.

The rafting itself is strange. The rapids are unavoidable, you know you’re going through it and there’s nothing you can do to stop it. The horizon line gets closer and the noise from the rushing water gets louder. Then (for me anyway) something strange happens. You go into super concentration mode and before you realize it the rapid is behind you and you can’t remember exactly what it looked like. At least this is what it is like from the perspective of a couple days. Of course the one highlight that will stay fresh in everyone’s minds for a while is Exterminator.

Almost everyone in our raft fell off in the Exterminator Class 5 rapid. Not exactly the goal in a huge boiling cauldren of bron water. Everyone except for one person made it back into the raft, he was forced to navigate the majority of the rapid using only his life jacket. He said later that he thought to himself, “There’s a pretty good chance I could die.” This was absolutely true.

Monday (today): Vacation Day (Victory Day)
Helped install some speakers on Mike’s boat.
RROL practice at Indy – Wrecked out.