Burton has finally been officially announced. The Visual Studio 2005 Team System is basically everything that VSS wasn't.
- Integrated Unit Testing
- Code Coverage Tools
- Enforced Check-In Policies (e.g. you must pass a unit test before the code can be checked in)
If you are a developer (as opposed to a straight coder), these changes are quite exciting. I know I was impressed when I first saw them. Look for more information at the AskBurton blog.
I am lucky enough to have two of my ObjectSharp colleagues running two separate Birds of a Feather sessions. Barry Gervin is hosting “Integrating Unit Testing tools and practices into the Software Development LifeCycle” on Sunday at 8:00 pm. Barry has been waist deep in unit testing design and implemention for quite a while now. Trust me that his knowledge is based on nicks, cuts and scars rather than book lernin'.
Also, Marcie Robillard (that's Datagrid Girl to the rest of the world) is hosting a BOF session on Wednesday. The topic is basically whatever her fertile mind dreams up. Be afraid. Be very afraid.
If you're attending TechEd, make sure you stop in and see what they have to say.
A quote from Bill Gates' keynote at the Microsoft-hosted CEO Summit.
“Another new phenomenon that connects into this [collaboration] is one that started outside of the business space, more in the corporate or technical enthusiast space, a thing called blogging. And a standard around that that notifies you that something has changed called RSS.”
I guess we can all sleep easier now that our life's work has been validated. ;)
Actually, the most interesting thing about Bill's comments is that he pitches it as being, in some ways, superior to email as a communications medium. Less intrusive and less prone to CC-spamming (that's when some CC's everyone and their mother on an email to ensure that no one feels left out). And when you're talking about blogging to Warren Buffet, Barry Diller, et al. odds are pretty good that the level of corporate interest in RSS will increase over the next six months.
As of tomorrow, ObjectSharp welcomes another member to our team. For those of you who already know her, the color of this post is a giveaway clue. If you're not familiar with her work, you can read more about it here.
I had the unexpected opportunity earlier today to do my first MSDN DevChat webcast. Or a webcast of any kind. One of my colleagues, Dave Lloyd was giving a webcast on the new features in ASP.NET Whidbey. The webcasts originated from the Microsoft Canada office and I went along to be his question monkey and to provide an audience. Once I got to Microsoft, Adam Gallant offered me the chance to do a webcast on C# scheduled for two hours later. Never being one to turn down a chance to speak, regardless of the circumstances, I accepted.
For those of you who have never done a webcast, the process is straightforward. We were in a small conference room, four of us in total. The presenter (Dave) is hooked up to the LiveMeeting manager and a headset. Dave basically controls the slides and demos and speaks into the headset. The rest of use handle any questions or issues as they arise.
The weird part of the process is something that presenters will understand. I personally thrive on the interaction that I get from speaking in front of an audience. More importantly, I tend to adjust what I say and how I say it based on the feedback that I get. If I see a glazed look, I dial back on the details. If I hear snoring, I rachet up the 'coolness' factor. You get the picture.
The challenge of a webcast is that none of this feedback is available. You're in a room talking on the telephone without the benefit of seeing or hearing the audience. It is a surprisingly isolated experience. To make it even worse, the other people in the room have their own conversations going on (quietly, of course) as they answer questions and deal with problems. I just ended up closing my eyes and kept going forward.
So the next time that you're listening to a webcast, feel free to chime in with any questions or feedback your have. It will probably be welcomed by the speaker, if only to let them know that there really are people on the other side of the network connection.
So as I write this at 1:10 in the morning, I have just finished beating my head against a fairly hard wall. The task was to load an RSS Feed into a DataSet. Then once in the DataSet, the feed could be bound to a Datagrid, a DataRepeater, etc. The plan was simple. The strategy sound. Or so I thought.
"No plan survives contact with the enemy." -Field Marshal Helmuth von Moltke.
While I suspect that many of you are aware of the quote, it´s place in the process of strategic is frequently forgotten. The quote is intended to remind strategists to set broad objectives and seize unexpected opportunities when they arise. Of course, in this instance, I´m using the more pessimistic “stuff happens“ meaning that is more commonly ascribed to the quote.
So I naively start the process by creating a DataSet object and using the ReadXml method to build it. Due to the foresight of the .NET Framework designers, I can simply pass the URL to the RSS Feed as a parameter. Sweet.
But then I run into a snag. Or, to put it another way, Moltke proved his prescience. Within ReadXml, a DuplicateNameException is thrown. The specific message was “A column named 'comments' already belongs to this DataTable.“ After an examination of the RSS feed, I discovered that the Slash RSS module uses a Comments tag. In the RSS feed, it is properly namespaced, but the namespace is not recognized by ReadXml. So the Comments tag in RSS clashes with the Comments tag in Slash RSS.
The solution to this problem is not as clean as I would have liked. In my ideal world, there would be a way to limit the namespaces that are loaded into the DataSet. Perhaps using the XmlNamespaceManager, for instance. But for all the Googling that I did, there doesn't appear to be any solution down this alley. So instead I turned to a kludgey (from my perspective) method that involves transforming the RSS feed using XSL.
My next problem immediately followed this solution. When I processed the transformed RSS feed, another exception was thrown. This time it was a ArgumentException that read "The same table (p) cannot be the child table in two nested relations.". Back to the RSS feed we went. What we saw was that if the post was XHTML compliant, then a separate <Body> block was contained within the post. In this <Body> block was the post complete with the various markup tags (like <p>) intact. This differs from the normal format of the post, where the angle brackets surrounding the tag are converted the < and >. The result was that ReadXml was choking on the fact that <P> existed in to separate items.
Back to the XSL, where I excluded the <Body> block from the RSS feed. Now my XSL file looks like the following:
<?
xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:xhtml="http://www.w3.org/1999/xhtml" >
<xsl:template match="*|@*|comment()|text()">
<xsl:copy>
<xsl:apply-templates select="*|@*|comment()|text()"/>
</xsl:copy>
</xsl:template>
<
xsl:template match="slash:comments">
<SlashComments>
<xsl:apply-templates select="*|@*|comment()|text()"/>
</SlashComments>
</xsl:template>
<
xsl:template match="xhtml:body"></xsl:template>
</
xsl:stylesheet>
Mission accomplished. I now have a DataSet that contains the necessary information from an RSS Feed. Next up is to actually bind it to the desired control. Haven't gotten around to it yet, but I'm hoping that it is much easier. It certainly shouldn't be much more challenging.
For those of you in the greater Toronto area, I will be giving a presentation on Designing Service Oriented Architecture Based Applications at the Toronto Visual Basic Users Group meeting on March 16. For more information, check out their web site at
http://www.tvbug.com.
One of the reasons that I blog is to help me keep track of the nuggets of information that I come across in my travels to various clients. I long ago gave up the idea that I could remember everything that I learned and as I get older, the volume that I remember seems to be decreasing, especially as a percentage of the knowledge that would be useful to have. As a result, my reasons for posting are not always altruistic. This is one such post.
The initial problem was encountered at a client last year. The situation involved trying to create a configuration for a server-style COM+ application. For the normal application, configuration settings are stored in a file named executable.exe.config. But for server-style COM+ applications, all of then applications are run by dllhost.exe. This means that they would use (by default) the dllhost.exe.config file, the location of which is normally in the %windir%/System32 directory. There are situations, however, where this is not acceptable. So it becomes necessary to create individual config files for different COM+ applications.
The solution involves the application.manifest file. First, in the configuration screen for the COM+ application, set the Application Root Directory to a particular directory. Any directory will do, but it needs to be different for each application that requires its own config file. In the specified directory, two files need to be added. The first is a file called application.manifest. This file is intended to describe the dependencies that are required by a particular application. However, the contents of the file for this particular purpose can be quite simple. For example, the following is sufficient.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
</assembly>
The second file, again placed into the Application Root Directory, is called application.config. The contents of this file is the normal config file. With these two files in place, the COM+ application now has the freedom to access its own configuration information through the regular channels. Flexibility lives!!
I just noticed that the dates for the VSLive converence in Toronto are now available. May 4-7, 2004. Mark it on your calendar, book your flights and get ready to rock. And, for those who are wondering, temperatures in Toronto are usually above freezing by that time of the year. ;)
I don't normally like to have my blog entries simply point to another URL, but in this case, I have to make an exception. Make sure that, as well as admiring the code, you read the rationale behind the submission. And who says techies aren't creative. And that we don't have time to spare. ;)
http://remus.rutgers.edu/~rhoads/Obfuscated_C/heathbar