<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.objectsharp.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Bruce Johnson's SOA(P) Box</title><link>http://blogs.objectsharp.com/blogs/bruce/default.aspx</link><description>Using SOA in the .NET world</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Toronto Code Camp Collateral</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2010/05/01/toronto-code-camp-collateral.aspx</link><pubDate>Sat, 01 May 2010 21:33:41 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:202543</guid><dc:creator>bruce</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/202543.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=202543</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=202543</wfw:comment><description>&lt;p&gt;I just finished my two presentations at this year’s Toronto Code Camp. As is my standard, I have put my slides on Slideshare.net. They can be found at:&lt;/p&gt;  &lt;p&gt;OData - &lt;a title="http://bit.ly/akPCcH" href="http://bit.ly/akPCcH"&gt;http://bit.ly/akPCcH&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Silverlight 4 Out of Browser - &lt;a title="http://bit.ly/91xQwp" href="http://bit.ly/91xQwp"&gt;http://bit.ly/91xQwp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As well, the sample code for the Silverlight 4 talk can be downloaded &lt;a href="http://bit.ly/97DmrV" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=202543" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2010/default.aspx">VS2010</category></item><item><title>Visual Studio 2010 At the Movies</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2010/04/23/visual-studio-2010-at-the-movies.aspx</link><pubDate>Fri, 23 Apr 2010 16:21:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:201898</guid><dc:creator>bruce</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/201898.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=201898</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=201898</wfw:comment><description>&lt;P&gt;Yesterday was the third (or fourth) annual ObjectSharp At The Movies event., For this particular version, we were able to celebrate the launch of Visual Studio 2010 and .NET 4.0 with a plethora of sessions covering VS (naturally) to ASP.NET, Silverlight, Sharepoint and TFS. All in all, it was a successful day that seemed to give the attendees what they came for. The slides that I used for my portion of the talk (which was an overview of VS2010 and .NET 4) can be found &lt;A href="http://bit.ly/ajpfko" target=_blank&gt;here&lt;/A&gt;. As always, feel free to ask questions. And, for those that missed it, we plan on doing it again next year. Just don’t know (yet) what the theme will be. &lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=201898" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2010/default.aspx">VS2010</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2010ATM/default.aspx">VS2010ATM</category></item><item><title>MIX 10 – First Impressions</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2010/03/15/mix-10-first-impressions.aspx</link><pubDate>Mon, 15 Mar 2010 21:29:53 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:198581</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/198581.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=198581</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=198581</wfw:comment><description>&lt;p&gt;Once of the interesting elements of this year’s MIX is the complete domination of Twitter as a medium for distributing updates. If you have been following me on Twitter (I’m @LACanuck), then you will already have heard a lot about the Windows Phone 7 development announcements. However, as useful as Twitter is, it’s not really a place for opinion. Unless your opinions fit into &amp;lt;140 characters. Mine don’t&lt;/p&gt;  &lt;h2&gt;Windows Phone&lt;/h2&gt;  &lt;p&gt;There is no question that there is a lot of buzz around developing apps for the Windows Phone 7. This is completely understandable, as WP7 allows Silverlight developers the ability to create applications for the phone. According to Scott Gu’s keynote, there is only “one Silverlight”. That is to say that applications that run on the browser should also be able to run on WP7.&lt;/p&gt;  &lt;p&gt;Now there is going to be a little bit of a reality check for that statement, especially as we hit Silverlight 4. I’m not sure, for example, if Silverlight as running on WP7 has the concept of a trusted application. I suspect that it doesn’t, although I’m open to correction if my assumption is misplaced.&lt;/p&gt;  &lt;p&gt;But working solely within the security sandbox is not the only real difference. Specifically, the design of a WP7 application is very different than a Web application. The size of the design surface is, naturally, much smaller on the WP7. And the UI needs to consider that main UI gesture is touching, a paradigm that doesn’t apply to Web applications. All of this is to say that while, theoretically, the same application could run on both platforms, it’s much more likely that different views will be used by the different targets. If nothing else screams that you should be using MVVM as a design pattern for Silverlight, this will. &lt;/p&gt;  &lt;h2&gt;Deployment&lt;/h2&gt;  &lt;p&gt;Once you see what’s possible in the WP7 environment, the excitement regarding creating applications is easy to understand. And not only are the apps exciting, so too is the ability to monetize your application. Microsoft will be making a Marketplace available so that you can sell your apps on-line. Given how well Microsoft has done with community driven marketplaces, I have no doubt this will be successful. &lt;/p&gt;  &lt;p&gt;But what about your own personal applications? What if you want to develop a WP7 application that is used by your mobile sales force? At the moment, the answer seems to be that you’re out of luck. This might change before it goes live, but the word that I’m hearing is that the only way to get apps onto your phone is through the Marketplace.&lt;/p&gt;  &lt;p&gt;Now, that’s not completely accurate. If you have Visual Studio 2010, you can deploy your application to a physically connected phone. However, the time to live for applications which have been deployed in such a matter is limited, To, approximately, a month. After which the app would need to be redeployed. &lt;/p&gt;  &lt;p&gt;I’m not a fan of this. In fact, in my mind ,it drops the collection of Silverlight developers who might write WP7 apps by 50%. At least. I can take guesses at the reason why this limitation is the case, but still, it’s not what I was hoping for. The term for what I’m looking for is ‘siloed’ deployment’ (that is, deployment only for people in a particular silo) and I’m hoping that it becomes part of the released version of WP7 before it goes live with the first version.&lt;/p&gt;  &lt;p&gt;While there is more of interest that is being revealed here, this is probably a decent start. And I’ll be both blogging and tweeting as much as I can while I’m here at MIX ‘10&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=198581" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX10/default.aspx">MIX10</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category></item><item><title>The Benefits of Windows Azure</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2010/03/01/the-benefits-of-windows-azure.aspx</link><pubDate>Mon, 01 Mar 2010 15:03:43 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:197004</guid><dc:creator>bruce</dc:creator><slash:comments>215</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/197004.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=197004</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=197004</wfw:comment><description>&lt;p&gt;The age of cloud computing is fast approaching. Or at least that's what the numerous vendors of cloud computing would have you believe. The challenge that you (and all developers) face is to determine just what cloud computing is and how you should take advantage of it. Not to mention whether you even &lt;u&gt;should&lt;/u&gt; take advantage of it. &lt;/p&gt;  &lt;p&gt;While there is little agreement on exactly what constitutes 'cloud computing', there is a consensus that the technology is a paradigm shift for developers. And like pretty much every paradigm shift there is going to be some hype involved. People will recommend moving immediately to the technology &lt;i&gt;en masse&lt;/i&gt;. People will suggest that cloud computing has the ability to solve all that is wrong with your Web site. Not surprisingly, neither of these statements is true.&lt;/p&gt;  &lt;p&gt;And, as with many other paradigm shifts, the reality is less impactful and slower to arrive than the hype would have you believe. So before you start down this supposedly obvious ‘path to the future of computing’, it's important to have a good sense of what the gains will be. Let's consider some of the benefits that cloud computing offers. &lt;/p&gt;  &lt;h3&gt;Instant Scalability&lt;/h3&gt;  &lt;p&gt;If you are tasked with building a customer-facing Web site, then one of the main concerns is scalability. Regardless of the type of site being created, there will be considerable intellectual energy spent determining how to configure the Web servers to maximize the up-time. And in many cases the infrastructure design must also consider issues not related solely to reliability. The ability to handle peak times, which can be a large multiple of the normal level of activity, must also be designed into the architecture.&lt;/p&gt;  &lt;p&gt;These spikes in usage come in a couple of different varieties. Sometimes, the spikes come at predictable times. Think of the holiday season for a retail site or a price sale for a travel site. Sometimes the spikes cannot be predetermined, such as a breaking news event for a current events site. But regardless of the type of spikes, the infrastructure architect must create an infrastructure that is capable of absorbing these variations in stride. The result, especially if the peak is 10 times or higher than the average load, is that extra (and mostly unused) capacity must be built into the design. Capacity that must be paid for, yet remains idle.&lt;/p&gt;  &lt;p&gt;Into this picture comes cloud computing. Regardless of the cloud platform for which you develop, the ability to scale up and down with the click of a mouse is readily available. For Windows Azure, there are a number of different scalability points, including the number of virtual machines assigned to the application, the number of CPUs in each of the virtual machines, and so on. Within the application itself, you as the designer would have already partitioned the application into the various roles that are then deployed onto the virtual machines. &lt;/p&gt;  &lt;p&gt;As the demand on the Web site increases, additional machines, CPUs or roles can be added to ensure a consistency of responsiveness through all of the loads. More importantly, when demand decreases, the resources can be removed. Since these settings form the basis for price paid for the cloud computing service, companies will end up paying only for the capacity that they require.&lt;/p&gt;  &lt;p&gt;The price to be paid for this flexibility is that mostly that the application needs to be designed with the necessary roles in mind. As well, there are other constructs (such as the AppFabric and the ServiceBus) and technologies (such as WCF) that need to be mastered and integrated into the application. As a result, it is easier to build a Web application that works with Windows Azure right from the start. This is not to say that existing Web applications can’t be refactored to take advantage of the cloud…they certainly can. But starting from scratch allows you to take full advantage of the benefits offered by Azure.&lt;/p&gt;  &lt;h3&gt;Expandable Storage&lt;/h3&gt;  &lt;p&gt;The ability to avoid idle resources is not the only appeal of cloud computing. Another resource that can be virtualized for most applications is the database. Just like the CPU, database usage can rise and fall with the whims and patterns of the user base. And the fact is that the vast majority of business databases do little more that grow in size as time goes one. Again, infrastructure architects need to consider both growth rate and usage patterns as they allocate resources to the database servers. As with the machine-level resources, over-capacity must be designed into the architecture. By using a database hosted in the cloud, the allocation of disk space and processing power can be modified on an as-needed basis. And you, as the consumer, pay only for the space and power that you use.&lt;/p&gt;  &lt;p&gt;There are some additional thoughts that need to be given to the use of a cloud database. In order to provide the described flexibility, cloud database providers freely move data from one server to another. As a result, there must be a fairly high level of trust in the provider, particularly if the data is sensitive in nature. For the traditional non-cloud database, the owner of the Web site maintains physical control over the data (by virtue of their physical control over the database servers). Even if the server is hosted at a co-location facility, the Web site owner ‘knows’ where the data is at all times. &lt;/p&gt;  &lt;p&gt;When the data is persisted to the cloud, however, this is no longer the case. Now the data is physically in control of the cloud provider. The owner has no idea on which server the data is stored. Or even, when you get right down to it, which city. For some companies, this is a level of trust well beyond what they might have been comfortable with in the past.&lt;/p&gt;  &lt;p&gt;As a person who lives abroad, (I’m from Canada), there is one more consideration: privacy. Data privacy laws vary from country to country. When data is stored ‘in the cloud’, there is little weight given to the physical location of the data. After all, the actual location has been virtualized out through the cloud concept. Information can (and does) move across national boundaries based on the requirements of the application. And when data resides in another country, it may very well be subject to the privacy laws of that country. If those laws are significantly different than your own, you might need to modify your corporate policies or the Web application itself to address whichever requirements are more stringent. This sort of situation brings rise to a common approach to cloud storage – data segregation.&lt;/p&gt;  &lt;p&gt;In data segregation, the data required by the Web application is stored in multiple locations. Data that is static and/or not particularly sensitive is stored in the cloud. Data that is sensitive is stored in a traditional (and more subject to owner control) location. Naturally, the Web application needs to be structured to combine the data from the different sources. And the traditionally located data needs to be stored in an infrastructure that is reliable and scalable…with all of the problems that the implementation of those features entail. &lt;/p&gt;  &lt;p&gt;The functionality offered by cloud computing will be enticing to some, but definitely not all, Web sites. For those who fit the target audience (Web sites that have a wide fluctuation in usage patterns) or just those who want to outsource their Internet infrastructure, cloud computing is definitely appealing. For developers of these sites, platforms such as Windows Azure represents a significant change in the necessary development techniques. And even with the inherent complexity, the shift to cloud computing is beneficial to developers (the resulting applications tend to be more modular, composable and testable), enough to make further exploration of the details worthwhile. &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=197004" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Azure/default.aspx">Azure</category></item><item><title>Order Fixation</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2010/01/25/order-fixation.aspx</link><pubDate>Mon, 25 Jan 2010 12:39:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:192654</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/192654.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=192654</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=192654</wfw:comment><description>&lt;p&gt;One of my current tasks for a client has been to facilitate the integration between a Java client and a WCF service. The mechanism for doing this is JSON and I have been quite grateful that WCF makes it relatively easy to implement this type of communication. However, there is one area that has been causing some grief for me (and my Java colleagues) that I finally create a workaround for yesterday.&lt;/p&gt;  &lt;p&gt;The source of my problem starts with the contract used by the WCF service. A number of the methods include parameters that are abstract data types. Consider the following class declaration.&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" face="Courier New"&gt;[KnownType(ButtonCommand)]     &lt;br /&gt;&lt;/font&gt;&lt;font color="#800000" face="Courier New"&gt;[KnownType(MouseCommand)]     &lt;br /&gt;[DataContract]&lt;/font&gt;&lt;font color="#800000" face="Courier New"&gt;     &lt;br /&gt;&lt;/font&gt;&lt;font color="#800000" face="Courier New"&gt;public abstract class AbstractCommand&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The AbstractCommand class is just a base class for a couple of concrete classes (ButtonCommand and MouseCommand). The WCF method is declared as accepting an AbstractCommand type, but the value passed into the method will be either a ButtonCommand or a MouseCommand. &lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" face="Courier New"&gt;[OperationContract]     &lt;br /&gt;[WebInvoke(BodyStyle=WebMessageBodyStyle.Wrapped,      &lt;br /&gt;&amp;#160;&amp;#160; RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]      &lt;br /&gt;StatusCode ExecuteCommand(AbstractCommand command);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Naturally, when the client invokes this method, the expectation is that a concrete class instance will be passed along. However, if all you do is pass in the JSON for one of the concrete classes in, you get an exception saying that an abstract class cannot be instantiate. The reason for the error can be found in how WCF dispatches message. When the request arrives, WCF examines the message to determine which method is to be invoked. Once identified, the parameters for the method (found in the JSON) are created. This creation involves instantiating an object using the default parameterless constructor for the type and then assigning property values as found in the JSON. However, the AbstractCommand type cannot be instantiated (it is abstract, after all). And there is no immediately apparent mechanism to determine which concrete type should be used.&lt;/p&gt;  &lt;p&gt;To address this final problem, Microsoft introduced the idea of a type hint. The JSON for a concrete type passed into the ExecuteCommand method would look something like the following:&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000" face="Courier New"&gt;{&amp;quot;command&amp;quot;:{&amp;quot;__type&amp;quot;:&amp;quot;ButtonCommand:#Command.Library&amp;quot;, &amp;quot;prop1&amp;quot;:&amp;quot;value&amp;quot;, &amp;quot;prop2&amp;quot;:&amp;quot;value&amp;quot;}}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The name/value pair of “__type” is used by WCF to determine the type that should be instantiated before performing the property assignment. This is conceptually similar to how types are provided through SOAP. This mechanism does have the hard requirement that the “__type” value be the &lt;strong&gt;first&lt;/strong&gt; pair in the JSON list. &lt;/p&gt;  &lt;p&gt;Enter Java into the picture. In order to communicate with my WCF service, the client using the Java JSONObject class. This class takes a collection of name/value pairs and converts it into a JSON-formatted array. This array is then sent to my method, where it goes through the previously described process. However the JSONObject seems to take the portion of the JSON specification where it says the name/value pairs are ‘unordered’ to heart. There is (apparently) no way to force a particular name/value pair to be emitted as the &lt;strong&gt;first&lt;/strong&gt; pair. In other words, the JSONObject cannot reliably produce JSON for a concrete type that is being passed into a parameter of an abstract type.&lt;/p&gt;  &lt;p&gt;Crap. &lt;/p&gt;  &lt;p&gt;Well, it was actually stronger language than that once I figured this out.&lt;/p&gt;  &lt;p&gt;The solution was not nearly as complicated as identifying the problem. I created a WCF endpoint behavior extension. In the AfterReceiveRequest event handler, I look at the body of the request (which has already been converted into XML, as it turns out..a surprise, albeit an easier choice format for the next step). If the “__type” property is the first pair in the JSON array, it is converted to a “__type” attribute in the XML element. Otherwise, it appears as a regular child node. So the transformation consists of finding the XML elements that have a name of “__type” and moving the value up into an attribute of the parent node. The modified message is then injected back into the WCF pipeline. And now the request is processed as desired.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=192654" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Service-Oriented+Architecture/default.aspx">Service-Oriented Architecture</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category></item><item><title>Setting the Default Style for a Custom Silverlight Control</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2010/01/14/setting-the-default-style-for-a-custom-silverlight-control.aspx</link><pubDate>Thu, 14 Jan 2010 14:47:24 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:192027</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/192027.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=192027</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=192027</wfw:comment><description>&lt;p&gt;Like so many of my posts, this one is as much about keeping a log of what I learned. And, in this particular case, since I had a difficult time finding the answer (and the answer is relatively new), a blog posts is doubly worthwhile. &lt;/p&gt;  &lt;p&gt;I was trying to write a custom control for Silverlight 3. It was an extension to a ListBox, so I created a class that derived from ListBox and added my neat-o cool functionality. However, part of the requirements for the control was (for example) that it needed to be horizontal and that the scroll bars needed to be hidden. For this, the best approach is to define a default template for the control.&lt;/p&gt;  &lt;p&gt;The default template is basically the style that is applied to the control in the absence of designer requests to the contrary. Practically, it is exactly the same as any other style that you would create. What makes it different is that the user of the custom component does not need to do anything to have the style applied. &lt;/p&gt;  &lt;p&gt;In order to accomplish this feat requires &lt;u&gt;three &lt;/u&gt;steps. The first has been true since Silverlight 2, that being that the style needs to be placed into a file named Generic.xaml. In the past it was sufficient to place the style in said file and set the TargetType of the style to be the custom control. However at Silverlight 3, two additional requirements were added. The first is that the Generic.xaml needs to be placed into a directory called Themes. The second is that the following line of code needs to the constructor for the custom control.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#804000"&gt;this.DefaultStyleKey = typeof(&lt;em&gt;customcontrolname&lt;/em&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Once these conditions have been met, the default style will get picked up. It was the last two steps that stymied me, as many of the existing posts talk about one, but not both of the requirements.&lt;/p&gt;  &lt;p&gt;As a convenience, there is now a TemplatedSilverlightControl template that actually sets up the necessary files, directory and code to make all of this work without further thought. And I like not having to think (other than remembering to use the correct template, that is).&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=192027" width="1" height="1"&gt;</description></item><item><title>Getting Value from your Data</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/05/20/getting-value-from-your-data.aspx</link><pubDate>Wed, 20 May 2009 14:41:17 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:173613</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/173613.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=173613</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=173613</wfw:comment><description>&lt;p&gt;For those of you who are not on the ObjectSharp mailing list, you might not be aware that next week we have another in our Smart Breakfast series. This time it’s David Chennels talking about Business Intelligence. You can find the details out &lt;a href="http://www.objectsharp.com/about/events/Pages/smart-breakfast-business-intelligence.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Now the term “Business Intelligence” is one of those amorphous phrases that have the potential to make people crinkle their nose. It has the good buzzwords to entire management and it’s vague enough so that you can put many different technologies under that umbrella. If you’re a geek in the Microsoft space, typically business intelligence includes the OLAP and Analysis Services parts of SQL Server, maybe a third-party tool to visualize the data (if Reporting Services isn’t enough) and perhaps Integration Services. &lt;/p&gt;  &lt;p&gt;But those tools have been around for a while. And, even though there is no licensing fee added to be able to use then, they don’t seem to have much traction, at least in the companies that I’ve been working with. So what is the reason for this lack of interest?&lt;/p&gt;  &lt;p&gt;From my perspective, the answer seems to be lack of awareness. If you ask any managers whether more information is better than less, most will want more. If you qualify the question by letting the managers specify the type and format of the information that is presented, the percentage answering in the affirmative goes up. And yet, even though the information is already stored in the corporate database and the tools to create the desired reports are readily available, nothing is done. &lt;/p&gt;  &lt;p&gt;And what is the solution? Education. Spend some time getting up to speed on what you can do with the tools already at your disposal. Is the creation of a business dashboard a zero-effort project? No. But it’s probably much less effort than you think. And in the current business environment, doesn’t it make more sense to find a way to use your existing resources to their fullest event? Of course it does.&lt;/p&gt;  &lt;p&gt;So take a morning to learn about the possibilities. More specifically, take the morning May 28th and come to the ObjectSharp Smart Breakfast on Business Intelligence. Along with a good breakfast, you’ll learn about some tools and techniques that can make an immediate difference to your business. Now that’s &lt;u&gt;really&lt;/u&gt; getting value.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=173613" width="1" height="1"&gt;</description></item><item><title>Getting Trained in an Economic Downturn</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/04/30/getting-trained-in-an-economic-downturn.aspx</link><pubDate>Thu, 30 Apr 2009 22:34:07 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:171788</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/171788.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=171788</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=171788</wfw:comment><description>&lt;p&gt;I’m sure that, for the vast majority of the readers of my blog, becoming more productive with your programming tools is a desirable goal. Not all developers go out of their way to advance their skills, but the very fact that you read blogs means that getting better is of interest to you. And, for most companies, they would also like you to make better use of your existing tools. It’s certainly obvious that it’s in your company’s best interest for this to happen, even if they don’t go out of their way to explicitly advance your skills. &lt;/p&gt;  &lt;p&gt;And this is the ugly truth for most companies. In the best of times, a large number of companies don’t provide any significant budget for formal training. Usually developers are expected to pick up any new skills on their own time. Or, worse, they are expected to apply new technologies without spending any ‘exploratory’ time with them. As most of your are aware, the first time you try a new technology, the result is usually only partially successful. Only after you have worked with it a few times does it become possible to take full advantage of it. And yet, management is reluctant to pay for training classes, tech conferences, or even a programming book that will help you get ‘into the zone’ for the stuff that would make a difference in your day-to-day efforts. Here's a few suggestions that might, &lt;em&gt;possibly &lt;/em&gt;get your manager to approve educational expenses, even in the economic conditions that exist today.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Working with Books&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Over the years, I have worked with a number of different companies. Each of them takes a slightly different view of what appropriate training costs are. For companies that have a large number of developers and a small educational budget, sometimes books are all that fit. For some companies, creating a library of programming books is a viable books. Your company could purchase well-reviewed (reviews are easy to find on Amazon) programming books on the relevant topics. Employees could then ‘borrow’ books that were appropriate to their current tasks. The books end up being purchased just once, but can be shared between developers as the need arises. &lt;/p&gt;  &lt;p&gt;A more high-tech solution to the problem can be achieved with a solution to the on-line technology book site &lt;a href="http://my.safaribooksonline.com/?portal=informit"&gt;Safari&lt;/a&gt;. Safari allows for books to be searched electronically and even be downloaded (in a PDF format) or even printed on an as needed basis. This is a decent mix between the need to search for a specific answer and still being able to read a book cover-to-cover when called for. &lt;/p&gt;  &lt;p&gt;However, a corporate library is not always the best solution. Finding answers in a book requires, in many cases, that you have some inkling of the solution beforehand. At a minimum, you need to frame your query appropriately, something that is as much art as science. And the pace of technology advances means that books are almost always going to lag new technology and best practices by a period of months, if not years. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Selling Management on Training: Speak Their Language&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When you want to convince your boss to let you go to a conference or attend a course, the first thing to do is look at the expenditure from their perspective. After all, the cost of the training is an expense to them. If there is no corresponding benefit, it becomes difficult to justify spending the monies. And, ultimately, you need to convince management that the benefits that they will gain are more than the money that they will spend.&lt;/p&gt;  &lt;p&gt;In general, you will find that the attitude that a company has towards the training of developers is dictated by &lt;em&gt;how&lt;/em&gt; the company makes money and &lt;em&gt;who&lt;/em&gt; is responsible for helping to making that money. Usually, companies whose product is technology-based tend to be better at providing and paying for skill improvements for their employees. When developers productivity is closely aligned with corporate revenues, it is easier to get the boss’ attention. However, if you work on an application that has no direct correlation with how the company makes money, you’re much more likely to face an uphill battle. &lt;/p&gt;  &lt;p&gt;But regardless of where you fit in this spectrum, focus your arguments on what &lt;em&gt;they&lt;/em&gt; get out of sending you across town or across the country. Make the conversation about their Return on Investment. Show that the training will have concrete and immediate value to the company and you’re a lot closer to getting approval. &lt;/p&gt;  &lt;p&gt;One way that you might be able to do this is to offer to share materials and experiences with your team upon return. At ObjectSharp, we call these sessions ‘Lunch &amp;amp; Learns”. You many know them as “Brown Bag Training”. By offering to present such a session after your conference or course, your company gets to spread some of the benefits of sending one person on training across multiple people. And your team benefits from having the new technologies couched in terms that are directly relevant to your environment. &lt;/p&gt;  &lt;p&gt;In some cases, it’s also possible to get the trainer to offer to help with these sessions. This is something that ObjectSharp offers to attendees of our courses. We’re more than happy to have one of our instructors speak to your company about the newest technologies. While any course is on-going, instructors work hard to make the content relevant to you. To accomplish this, we ask about the kinds of projects that are being worked on and where the technology will be applied. So by having an ObjectSharp instructor give the Lunch &amp;amp; Learn, you get a person who is well-versed in the technology, but who also has a basic understanding of how it will fit into your corporate development plans.&lt;/p&gt;  &lt;p&gt;You might consider shouldering some of the burden of training yourself. I don’t necessarily mean to pay for it directly. But if you take your time to attend user group meetings and Code Camps (both of which take place in non-work hours), you show a dedication to improving your skills that might make a difference. At a minimum, you will get some insight into the latest technologies, even if it’s not quite the same personalized and intensive hand-on experience that going on a course might be.&lt;/p&gt;  &lt;p&gt;Finally, I’d like to leave you with one final, and surprisingly creative, argument. One of the most common questions we get from potential training clients is 'What if I train our developers and they leave?'&amp;quot; Our answer is invariably 'What if you don’t train them and they stay?' This usually gets an 'Aha' moment from management, followed by a realization that perhaps investing more in staff development might not be quite the pure expense that they think.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=171788" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category></item><item><title>Data Bondage in WPF presentation at Toronto Code Camp</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/04/26/data-bondage-in-wpf-presentation-at-toronto-code-camp.aspx</link><pubDate>Sun, 26 Apr 2009 05:28:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:171326</guid><dc:creator>bruce</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/171326.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=171326</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=171326</wfw:comment><description>&lt;P&gt;My final presentation in my April World Speaking tour was at the Toronto Code Camp this afternoon. As always, the code camp was a huge success. The efforts of many people went into making it so, but the organization was top notch.&lt;/P&gt;
&lt;P&gt;As part of the lead-up to my presentation, Joey de Villa made good on a promise to wear Microsoft branded assless chaps. And he even regaled the crowd with his version of Hit Me With Your Best Shot, a choice completely in character with the theme of the presentation. &lt;/P&gt;
&lt;P&gt;As for the presentation, it went very well. Something like 70-80 people where there and I was pleased by the questions that were asked. I have always preferred an interactive audience because it means that they are probably listening. :)&lt;/P&gt;
&lt;P&gt;As I promised at the end of the presentation, here are links to the slides and demos. Any questions are most welcome.&lt;/P&gt;
&lt;P&gt;Slides: &lt;A href="http://www.slideshare.net/LACanuck/data-bondage-in-wpf" target=_blank&gt;here&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Demos: &lt;A title=Download href="http://blogs.objectsharp.com/CS/files/folders/171303/download.aspx"&gt;Download&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Update: For those who want a more complete story surrounding the title of the presentation and the assless chaps references, check out Joey's blog post &lt;A href="http://www.globalnerdy.com/2009/04/27/assless-chaps-and-data-bondage/" target=_blank&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=171326" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Never Test Alone – Presentation at KWSQA Testing Conference</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/04/22/never-test-alone-presentation-at-kwsqa-testing-conference.aspx</link><pubDate>Wed, 22 Apr 2009 20:14:59 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:171104</guid><dc:creator>bruce</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/171104.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=171104</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=171104</wfw:comment><description>&lt;p&gt;I finished presentation four of my April World Tour of the GTA earlier today. It was actually a co-presentation with Deb Forsyth and I was basically code-monkey and the 'developer’ that she could point to with here ‘bad developer’ stories. This was an unusual conference for me, in that I was a lone developer in a room full of testers. Daniel never had it so bad with the lions. :)&lt;/p&gt;  &lt;p&gt;Anyway, as I mentioned in the presentation, the slides are now available for download at the following link. As always, questions are welcomed.&lt;/p&gt;  &lt;p&gt;Slides – &lt;a title="Download" href="http://blogs.objectsharp.com/CS/files/folders/171100/download.aspx"&gt;Download&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=171104" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Dropping Cookies in IE7</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/04/17/dropping-cookies-in-ie7.aspx</link><pubDate>Fri, 17 Apr 2009 13:41:32 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:170639</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/170639.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=170639</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=170639</wfw:comment><description>&lt;p&gt;I was asked an unusual question yesterday about cookies, Silverlight and WCF. The scenario was that a Silverlight application was being used in a consumer-facing situation. The application itself communicates with the server using WCF. The service which is the target of the communication uses ASP.NET Authentication to authenticate the user. It’s an implementation detail (but critical to this post) that the method of storing the authentication token is a cookie called .ASPXAUTH.&lt;/p&gt;  &lt;p&gt;In a normal (that is, working) scenario with Silverlight, the credentials are sent to the server and an .ASPXAUTH cookie is returned. The browser strips off the cookie and stores it. On any subsequent requests, Silverlight creates a request and sends it the the server through the browser’s networking API. The browser is responsible for determining which, if any, cookies should be send with the request and adding them to the outgoing header. In other words, the Silverlight application has no specific knowledge of or interaction with the .ASPXAUTH cookie.&lt;/p&gt;  &lt;p&gt;As you would expect, this mechanism works the vast majority of the time. If it didn’t, I think it would have been a significant story long before now. But my questioner was running into a situation where the Silverlight application was unable to communicate with the server even after authentication was performed. What’s worse, this behavior was only happening on IE7. When Silverlight was run through Firefox, it worked exactly as it was supposed to.&lt;/p&gt;  &lt;p&gt;The diagnostic step in a situation like this is to use Fiddler (or whatever your favorite TCP trace application is) to view the raw messages. And what was seen is that although the authentication response had the .ASPXAUTH cookie in it, any requests sent back to the server after authentication did not. Given when I’ve already explained about the processing of cookies with Silverlight requests, this eliminates the Silverlight application as the most likely culprit. But it also makes one scratch your head, as we can be pretty certain it’s not a widespread failure of IE7 to process cookies.&lt;/p&gt;  &lt;p&gt;The answer likes in a strange bug in IE7. It turns out that &lt;strong&gt;if a domain name has a underscore in it, IE7 doesn’t persist the cookies&lt;/strong&gt;. Let me repeat that, because it’s such a bizarre sounding problem. In IE7, if the domain name has an underscore (‘_’) in it, then any cookies returned from the domain will not be persisted. Which also means that subsequent requests will be ‘cookie-free’.&lt;/p&gt;  &lt;p&gt;I’m guessing that most domain names don’t have an underscore, which is why this bug didn’t get widespread notice. In this particular case, the domain was one used for development, which would keep the problem from being a production issue. But I have no reason to believe that the bug would be restricted to a local problem. Deploy a ‘underscored’ domain name to the public internet and no authentication, shopping carts or other state information can be saved.&lt;/p&gt;  &lt;p&gt;Fortunately, the solution was a simple one. If the domain name in the endpoint configuration is replaced with the raw IP address, IE7 is more than happy to save the cookie. I wouldn’t be surprise if an entry in your local hosts file would have the same effect. And the final solution would be to have your domain administrator create a DNS Alias entry…one that doesn’t have an underscore, of course.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=170639" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Code Contracts at Toronto VB User Group</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/04/17/code-contracts-at-toronto-vb-user-group.aspx</link><pubDate>Fri, 17 Apr 2009 13:37:53 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:170637</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/170637.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=170637</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=170637</wfw:comment><description>&lt;p&gt;On Wednesday past, I did a Code Contracts presentation to the &lt;a href="http://www.tvbug.com/default.aspx?MainFrameURL=diary.aspx" target="_blank"&gt;Toronto Visual Basic User Group&lt;/a&gt;. It was a continuation of my whirlwind ‘April Presentation Tour’, in that it was my third presentation in a week and the third of five that I’m doing in April. Tee shirts for the April Presentation Tour were available for sale from vendors as you left the arena&lt;/p&gt;  &lt;p&gt;I have posted the slides and the source code to the following links:&lt;/p&gt;  &lt;p&gt;Slides: &lt;a title="Slides" href="http://www.slideshare.net/LACanuck/code-contracts-in-net"&gt;Here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Source Code: &lt;a title="Source Code" href="http://blogs.objectsharp.com/CS/files/folders/170636/download.aspx"&gt;Here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you have any questions, please feel free to drop me a comment or an email message.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=170637" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category></item><item><title>What’s New in Silverlight 3 at the Toronto Silverlight User Group</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/04/10/what-s-new-in-silverlight-3-at-the-toronto-silverlight-user-group.aspx</link><pubDate>Sat, 11 Apr 2009 03:36:23 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:169861</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/169861.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=169861</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=169861</wfw:comment><description>&lt;p&gt;This past Thursday, I had the opportunity to present on Silverlight 3 to the &lt;a href="http://www.torontosilverlight.com/" target="_blank"&gt;Toronto Silverlight User Group&lt;/a&gt;. It was my first time presenting to the group and I was impressed by the number of attendees (I would say 30-40) who managed to hang around on the Thursday evening before a long weekend. &lt;/p&gt;  &lt;p&gt;As promised, I have posted the slides and the source code to the following links:&lt;/p&gt;  &lt;p&gt;Slides: &lt;a title="Slides" href="http://www.slideshare.net/LACanuck/whats-new-in-silverlight-3"&gt;Here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Source Code: &lt;a title="Source Code" href="http://blogs.objectsharp.com/cs/files/folders/169860/download.aspx"&gt;Here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you have any questions, please feel free to drop me a comment or an email message.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=169861" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Catastrophic Failure While Installing an Out-of-Browser Silverlight Application</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/04/08/catastrophic-failure-while-installing-an-out-of-browser-silverlight-application.aspx</link><pubDate>Wed, 08 Apr 2009 15:00:14 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:169589</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/169589.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=169589</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=169589</wfw:comment><description>&lt;p&gt;While working on one of the demos for my upcoming &lt;a href="http://www.torontosilverlight.com/" target="_blank"&gt;Toronto Silverlight User Group&lt;/a&gt; presentation, I ran into a catastrophic failure. Actually, the starting point for the problem was that when I right-clicked on the Silverlight application and selected the installation option, nothing happened. No errors, no warnings, but also no results.&lt;/p&gt;  &lt;p&gt;While trying to figure out the problem, I when to the more direct method of installation by programmatically calling Application.Current.Detach(). When this statement was hit, an exception was thrown with the following beautiful details.&lt;/p&gt;  &lt;p&gt;&lt;font color="#804000" size="2" face="Courier New"&gt;System.Exception: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))     &lt;br /&gt;&amp;#160;&amp;#160; at MS.Internal.XcpImports.CheckHResult(UInt32 hr)      &lt;br /&gt;&amp;#160;&amp;#160; at MS.Internal.XcpImports.Application_Detach(Application app)      &lt;br /&gt;&amp;#160;&amp;#160; at System.Windows.Application.Detach()      &lt;br /&gt;&amp;#160;&amp;#160; at LocalConnectionDemo.MainPage.Button_Click(Object sender, RoutedEventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160; at System.Windows.Controls.Primitives.ButtonBase.OnClick()      &lt;br /&gt;&amp;#160;&amp;#160; at System.Windows.Controls.Button.OnClick()      &lt;br /&gt;&amp;#160;&amp;#160; at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160; at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160; at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;As you might guess, this is not particularly useful in the debugging process. After a fair bit of effort, I discovered the solution. I happen to be using a PNG file as the icon for the application. When the PNG file is added to the project, the Build Action is automatically set to Resource. When you change the Build Action to Content, the problem goes away.&lt;/p&gt;  &lt;p&gt;Also, the same exception is thrown if the file used as the out-of-browser icon is not present at the indicated location. &lt;/p&gt;  &lt;p&gt;I’m hoping that the exception becomes a little more useful as Silverlight 3 moves through the beta process.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=169589" width="1" height="1"&gt;</description></item><item><title>Design 101 – The Color Wheel</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/30/design-101-the-color-wheel.aspx</link><pubDate>Mon, 30 Mar 2009 18:43:55 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:168973</guid><dc:creator>bruce</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/168973.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=168973</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=168973</wfw:comment><description>&lt;p&gt;One of the most common comments from Silverlight and WPF developers is their lack of design sense. Over the next little while, I’ll be posting (interspersed with other topics) on some of the basics of color theory and how they can be applied to WPF and Silverlight.&lt;/p&gt;  &lt;p&gt;To start with, let’s talk about one of the fundamental artifacts of color theory – the color wheel.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.objectsharp.com/cs/blogs/bruce/ColorWheel_033AF319.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 10px 0px 0px;display:inline;border-top:0px;border-right:0px;" title="Color Wheel" border="0" alt="Color Wheel" align="left" src="http://blogs.objectsharp.com/cs/blogs/bruce/ColorWheel_thumb_5EE5E8C9.jpg" width="266" height="272" /&gt;&lt;/a&gt;Originally conceived by Sir Isaac Newton, color wheel is a representation of the colors in the visual spectrum. In the representation, the three primary colors are placed equidistant from one another. The gaps between the the primary colors is then filled with with secondary and tertiary colors. &lt;/p&gt;  &lt;p&gt;Now, already I’ve used three terms, only one of which I would expect you to be familiar with. Primary colors (red, blue and yellow) are something that we learned about in elementary school. Secondary colors (orange, green and violet) are created by combining the primary colors. Tertiary colors are those that are formed by combining primary colors with secondary colors.&lt;/p&gt;  &lt;p&gt;So now that we have a color wheel, what good is it? Well, it helps identify harmonious colors. When selecting colors to use in a user interface, it is important so select colors that are, in combination, pleasing to the eye. Personally, I understand the challenge to this. As a person born without the color sense gene, I think that pink and lime green go well together. But apparently, I’m in the minority. :) &lt;/p&gt;  &lt;p&gt;There are numerous theories about the combinations of colors that promote harmony. We’ll look at some of them in more detail in upcoming blog entries, but to give you a second, two of the most commonly used ones are &lt;em&gt;complimentary &lt;/em&gt;and &lt;em&gt;analogous&lt;/em&gt;. Complimentary colors are found opposite one another on the wheel. For example, red-green, yellow-violet, and blue-orange are all complimentary. These colors promote stability and contrast in the image.&lt;/p&gt;  &lt;p&gt;Analogous colors are sets of three colors that are adjacent to one another on the color wheel. In images using analogous colors, one of the colors tends to be the dominant one. The result is an image that appears to be saturated in the dominant color with the other colors offering a subtle nuances of difference.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=168973" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Design/default.aspx">Design</category></item><item><title>Where does Off-Browser Silverlight Run?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/24/where-does-off-browser-silverlight-run.aspx</link><pubDate>Tue, 24 Mar 2009 12:45:57 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:168571</guid><dc:creator>bruce</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/168571.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=168571</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=168571</wfw:comment><description>&lt;p&gt;Off-browser Silverlight is pretty cool. And one of the first questions that got raised is ‘where is it running’. Obviously, it’s not running within the browser. I mean, duh. But if not there, then where?&lt;/p&gt;  &lt;p&gt;I got the first inkling of an answer listening to &lt;a href="http://blogs.msdn.com/mharsh/" target="_blank"&gt;Mike Harsh’s&lt;/a&gt; presentation on off-browser Silverlight at MIX ‘09 (slides, demos and video can be found on his &lt;a href="http://blogs.msdn.com/mharsh/archive/2009/03/19/slides-demos-and-video-for-my-mix-09-session-building-out-of-browser-experiences-with-microsoft-silverlight-3-mix09-t45f.aspx" target="_blank"&gt;blog&lt;/a&gt;). Actually, it wasn’t his presentation, per se, but his answering of questions afterwards. I actually give Mike props for doing this presentation. Off-browser Silverlight is very easy to configure and use. It’s difficult to find 60 minutes worth of content when the user experience is ‘right-click to install…right-click again to uninstall’ and the developer experience is ‘check a box in the property sheet’. But from his easy handling of the questions afterwards, it’s pretty obvious that he knows the topic well.&lt;/p&gt;  &lt;p&gt;One of the post presentation questions Mike was asked was related to the ‘how’ of off-browser Silverlight. Mike intimated that, basically, the Browser control was used. In other words, when installed on a client’s machine, launching the Silverlight application actually launches an application which hosts the Browser control. The Browser control then hosts the Silverlight application.&lt;/p&gt;  &lt;p&gt;As it turns out, this is “basically” true. For the Windows platform, it’s precisely true. From &lt;a href="http://www.blogger.com/profile/01255600685340367644" target="_blank"&gt;Chris Hayak&lt;/a&gt;, the application which is launched is called SLLauncher.exe. This is also the application to which you will attach if you want to debug Silverlight apps in off-browser mode. For the Mac platform, the SLLauncher application runs webkit, which in turn hosts the Silverlight application.&lt;/p&gt;  &lt;p&gt;The one downside of this approach is that, at least during the beta, there is no way to distinguish between multiple, simultaneous off-browser Silverlight apps. They all appear in the process list as ‘sllauncher.exe’. Hopefully this will change before SL3 goes gold.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=168571" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>Is WPF Dead?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/23/is-wpf-dead.aspx</link><pubDate>Mon, 23 Mar 2009 18:40:52 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:168526</guid><dc:creator>bruce</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/168526.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=168526</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=168526</wfw:comment><description>&lt;p&gt;One of the first questions that arose from the announcement of off-browser Silverlight was “What will happen to WPF?” The obvious source of this concern is that since Silverlight 3 can run either as part of a Web page or installed in an off-browser mode, why would there ever be a reason to write a WPF application? And since Silverlight seems to be the technology that has all of the new features, is there a possibility that WPF could languish as the ugly step child in the client application development world ? &lt;/p&gt;  &lt;p&gt;First, let me assuage your concerns. WPF is not dead. This opinion is based on a couple of on-going development projects at Microsoft: Expression Blend/Design and Visual Studio. In the case of Expression Blend/Design, the entire application was written in WPF. For Visual Studio, the code editors are being re-written in WPF. If nothing else, the investment being made by Microsoft to these products in WPF should demonstrate its on-going commitment to the technology. And there is the on-going integration of WPF into the Live Messenger client to add more fuel to the argument.&lt;/p&gt;  &lt;p&gt;Going forward, I see WPF and Silverlight moving ahead more or less in lock-step. Features in Silverlight that are successful will find their way into WPF (Visual State Manager, for example). Features in WPF that are useful will move into Silverlight (element binding, based-on styles). Since the products have different audiences, each technology will be driven forward with a different set of priorities. VB.NET and C# already have this So don’t give up on WPF because of all of the excitement from Silverlight. As a WPF developer, I found some of the excitement generated by Silverlight announcements a little odd (applause for element-to-element binding? WPF has had that for a while now). What playing with Silverlight 3 that I have done so far suggests that the disparity between the two features sets is going to be much less in the future.&lt;/p&gt;  &lt;p&gt;That having been said, there is still the open question of when WPF should be used instead of Silverlight 3. I can see three main cases at a minimum, but they all revolve around the same restriction in Silverlight…the security sandbox.&lt;/p&gt;  &lt;h3&gt;Access to local system resources&lt;/h3&gt;  &lt;p&gt;Off-browser Silverlight runs in the same security context as on-browser Silverlight. So if your application needs access to the local file system or the communication ports on the client machine, then Silverlight is not going to work out. In fact, this limitation can be extended in include any feature that requires full-trust to operation. Silverlight doesn’t work in full-trust mode. WPF can.&lt;/p&gt;  &lt;h3&gt;Full 3-D graphics capabilities&lt;/h3&gt;  &lt;p&gt;With Silverlight 3, perspective 3-D is available. But that is not the same as the complete 3-D capabilities that WPF has. It’s nice, but if you’re looking for fully rotational 3-D images, then WPF is the choice.&lt;/p&gt;  &lt;h3&gt;Semi-Esoteric Functionality&lt;/h3&gt;  &lt;p&gt;There are instances where Silverlight is missing functionality that is available in WPF. For example, there is no Closing event for a Silverlight application. This means that you can’t stop a user from closing an application when the current record has been modified but not saved. In on-browser Silverlight, a JavaScript hack can be used to emulate this feature. But in off-browser Silverlight, there is no JavaScript available, so no Closing event can be detected. While might seem like an edge case, the functionality offered by Closing is part of most LOB application. So it might not be such a small deal as you might originally think. &lt;/p&gt;  &lt;p&gt;I’m sure there are more differences. It’s not like WPF is not a compelling choice for a development platform. In fact, I approach the choice between the two the same way I would between WinForms and ASP.NET. Because ultimately, the decision between Silverlight and WPF will be based on the specific requirements of a project. If Silverlight (either on- or off-browser) is sufficient, then pick Silverlight. If not, then pick WPF. Regardless of your choice, you’re not in danger of dead-ending with the technology. Both areas will flourish and grow for many years to come.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=168526" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Consuming WCF in Silverlight 3 Session at MIX ‘09</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/20/consuming-wcf-in-silverlight-3-session-at-mix-09.aspx</link><pubDate>Fri, 20 Mar 2009 14:01:09 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167843</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167843.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167843</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167843</wfw:comment><description>&lt;p&gt;This session covers three separate scenarios for Silverlight and WCF interactions. The basic functionality of adding a service reference, creating proxy class and calling method hasn’t changed. However, they are trying to address some of the common pain points related to WCF&lt;/p&gt;  &lt;p&gt;It’s now possible to remove the network traffic associated with ‘fat’ SOAP/XML messages by using a binary XML format to send the message. The demo reduced message size by 30%. But size was not the main design goal for binary XML. While compression is possible at the HTTP level, apparently binary XML reduces effort on the client and server as messages are compressed and decompressed. Binary XML is intended to improve speed. And while not every message is affected significantly (small messages and strings don’t really benefit), there is no case that MS is aware of where it gets worse. So binary XML becomes an appropriate default formatting standard.&lt;/p&gt;  &lt;p&gt;Also included in this section was a description of why server-side error information is not accessible from within Silverlight. Specifically, if you have a server-side HTTP 500 code, the information related to the error does not get pushed to Silverlight. This is a fairly hard limitation related to how browsers pass HTTP information to plug-ins. And Silverlight is really a plug-in. The solution is an HTTP hack, there internal server errors get returned as HTTP 200 codes. And Silverlight 3 is built to pull the error information off of the response and surface it through the normal SOAP faulting mechanism. &lt;/p&gt;  &lt;p&gt;When it comes to security WCF calls in Silverlight 3, there are two choices: browser-based and manual. The browser-based approach depends on cookies and Forms authentication at the browser level. This is easy to implement, but is open to cross-domain threats &lt;strong&gt;IF&lt;/strong&gt; you have enable cross-domain access for every Web site. The manual approach has identity managed by Silverlight. When the credentials are added by Silverlight (instead of the browser), the cross-domain thread is eliminated. SL3 provides an out-of-the-box mechanism for creating the SOAP headers associated with the manual mechanism. It’s the ‘out-of-the-box’ that is new in SL3, not the technique itself.&lt;/p&gt;  &lt;p&gt;The big gotcha in the manual mode is found in the method that WCF uses to prevent replay attacks. There is the concept of a MaxClockSkew. In indicates how far apart the client and server clocks can be. The default value if 5 minutes. which is to say that if the server system has a time of 11:05 and the client system has a time of 11:11, &lt;strong&gt;all messages will be rejected&lt;/strong&gt;. This is the kind of situation that I’m sure will bedevil developers. MS is still trying to decide what the default value of MaxClockSkew will be when SL3 is released.&lt;/p&gt;  &lt;p&gt;The second scenario covered in this session involved pushing messages to Silverlight. It was possible in SL2 to push message to the Silverlight application, but the knowledge required by the developer to implement it has been reduced. Because I’m very familiar with WCF, the technique does not seem advanced. Basically, the idea is to have the SL3 client make a one-way WCF call with a callback contract. The OneWay mode means that there is no calling context hanging around on the client. The callback allows the service to call back to the Silverlight application. In the Silverlight application, there is an event raised when the callback method is invoked from the service.&lt;/p&gt;  &lt;p&gt;The third and final scenario talked about REST in Silverlight 3. As it turns out, SL3 doesn’t have much added in this area. Mostly because “the REST story in SL2 was pretty complete” This is actually pretty true about WCF in Silverlight in general. It’s not that there aren’t things that people would like to do with WCF in Silverlight (different bindings, for example). But the reality is that the limiting factor for most new feature requests is the HTTP stack from within the browser. It was mentioned that it’s possible to roll your own HTTP stack by going out to JavaScript through the HTTP DOM, but that technique will probably not work if the Silverlight application is running on off-browser mode.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167843" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>Off-line and Off-Browser Silverlight</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/19/off-line-and-off-browser-silverlight.aspx</link><pubDate>Thu, 19 Mar 2009 10:48:33 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167747</guid><dc:creator>bruce</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167747.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167747</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167747</wfw:comment><description>&lt;p&gt;The big announcement at yesterday’s keynote was the availability of an off-line and off-browser mode for Silverlight 3.0. Just to clarify the terms, off-line mode indicates that Silverlight will not require a live connection to the Internet in order to continue functioning. Practically, this means that a Silverlight application will able to be installed on the client’s computer. Off-browser means that Silverlight apps will no longer appear to need to be running within any browser.&lt;/p&gt;  &lt;p&gt;As a point of clarification, this last feature doesn’t mean that Silverlight will have free reign over your computer. Off-browser Silverlight apps will still run in the same security sandbox that they have in the browser. It’s just that you won’t need to explicitly launch the browser to start the application. In fact, the installation process for the Silverlight application includes the ability to place links on the desktop on the system tray&lt;/p&gt;  &lt;p&gt;So what are the ramifications of these changes?&lt;/p&gt;  &lt;p&gt;First, it opens up a world for Silverlight applications. While I’m a huge fan of WPF, there are a number of roadblocks to wide acceptance. It needs to have the .NET Framework installed (3.5 or 3.0). Which, in itself, implies a Windows platform (according to the Mono project, they are &lt;a href="http://www.mono-project.com/WPF" target="_blank"&gt;not planning to support WPF&lt;/a&gt;). Full WPF applications need to be installed. Yes, you can use XBAP to deploy the application, but that model has implications on security (it runs in the browser-driven security sandbox).&lt;/p&gt;  &lt;p&gt;Silverlight, on the other hand, runs on both Windows and Mac. And while it requires an installation step, to call it an install is really overkill. It’s basically an XCOPY from one place to another on the client’s system. The conclusion, though, is that WPF and off-browser Silverlight do hit different target markets.&lt;/p&gt;  &lt;p&gt;The second question is how does it change your Silverlight development process. &lt;/p&gt;  &lt;p&gt;The goal of off-browser Silverlight was to have the same application run in both modes. And it certainly appears that is the case. However, being able to run the same application off-line and on-line does have an impact on your approach to development. For example, UI pieces might be different. The ability to retrieve data for a combo box, for example, might depend on being able to call out to a WCF service. That isn’t happening in off-line mode (although it would if you were just off-browser). So to create a solid off-line scenario, you may need to provide additional functionality or enable/disable functionality that is currently in place. This is not an insurmountable problem, but it does require some care and design effort.&lt;/p&gt;  &lt;p&gt;All in all, off-browser/off-line Silverlight is an interesting idea and I’m looking forward to not only working on apps in this space, but also to see how others take advantage of it. Exciting times indeed.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167747" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>Having an Out-of-Browser Silverlight Experience</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/18/having-an-out-of-browser-silverlight-experience.aspx</link><pubDate>Wed, 18 Mar 2009 22:12:23 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167656</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167656.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167656</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167656</wfw:comment><description>&lt;p&gt;The fundamental philosophy used to develop the off-browser functionality for Silverlight applications was to reduce the friction surrounding the moving of the application from in-browser to out-of-browser. Specifically, there is no separate download that is required to take a Silverlight application off-line. As a developer, you need to make a change to the manifest to support installation, but nothing more than that. And because the off-browser application runs in the same sandbox as the in-browser application, there are also no security warning messages on installation.&lt;/p&gt;  &lt;p&gt;From the user’s perspective, there are two methods to take the application off-browser. The first is the right click on the application. A second option (besides the Silverlight Configuration that has always been there) is visible to indicates that the application to be installed. Also, it is possible to place a button on the application that will install the application. &lt;/p&gt;  &lt;p&gt;The manifest is where most of the information used in the installation exists. The name, description and icons related to the application are stored there, along with the flag indicating whether the application can be taken off-browser.&lt;/p&gt;  &lt;p&gt;Updating the Silverlight application is exactly the same as the traditional Silverlight application. Which is to say that updates are downloaded and installed automatically. This keeps it consistent with the Silverlight model, where new versions are automatically picked up. The biggest difference is that once a new version is detected and downloaded, the Silverlight application does not automatically terminate and start running the new version. It waits until the next time that the application starts before launching the new version.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Warning&lt;/em&gt;&lt;/strong&gt; – in the beta version, there appears to be a bug associated with updating from your localhost. In the words of the Silverlight PM, it’s a little flaky.&lt;/p&gt;  &lt;p&gt;In terms of interacting with the client, an off-browser Silverlight app still has access to the Insolated store. And through the OpenFile and SaveFile dialogs, access to the local file system. There is&amp;#160; a quota on isolated storage, but it is increased to 25MB from it’s current size of 1MB. That’s nice and probably sufficient for most applications. &lt;/p&gt;  &lt;p&gt;There are still a number of open questions about off-browser Silverlight applications. Is there an event raised when the application is closed (this is done through Javascript in normal Silverlight applications)? Is there a mechanism that simplifies serialization and synchronization? Should there be a way to uninstall the application other than by right-clicking on it (what if the app can’t load)? I’m sure time and the need to make this work in the real world will provide answers. &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167656" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>Go Beyond Best Practices Session at MIX ‘09</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/18/go-beyond-best-practices-session-at-mix-09.aspx</link><pubDate>Wed, 18 Mar 2009 16:35:24 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167645</guid><dc:creator>bruce</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167645.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167645</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167645</wfw:comment><description>&lt;p&gt;Because I already had some exposure to Silverlight 3 at the MVP Summit, I thought I’d start off with a session directed at creating user experiences. Not to mention that I was interested in the idea of going beyond the superlative of ‘best’ :)&lt;/p&gt;  &lt;p&gt;The basic premise of the talk revolves around the idea that companies that succeed find ways to get customers to engage with them. The experience of using the customer transcends the details of the product or service being offered. He mentioned a book called “&lt;a href="http://www.firmsofendearment.com/" target="_blank"&gt;Firms of Endearment&lt;/a&gt;” which describes companies that arouse passion from the people involved. The authors of the book determined that companies that fit this model, exhibit a number of characteristics. One is described by the SPICE model.&lt;/p&gt;  &lt;p&gt;Consider the following categories.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Society&lt;/li&gt;    &lt;li&gt;Partners&lt;/li&gt;    &lt;li&gt;Investors&lt;/li&gt;    &lt;li&gt;Customers&lt;/li&gt;    &lt;li&gt;Employees&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The value created by the companies in Firms of Endearment was equally important across &lt;u&gt;all&lt;/u&gt; of these constituencies. Experience is about the effects that we create for these constituencies.&lt;/p&gt;  &lt;p&gt;But experience is becoming a buzzword. That is to say, it’s a phrase that businesses use to think that &lt;/p&gt;  &lt;p&gt;For most businesses, process is more important that effect. People follow the ‘process’ without a thought to what the effect on others might be. Experiences are a combination of behaviors, attitudes and emotions. For most companies, the emotional side is what’s lacking.&lt;/p&gt;  &lt;p&gt;For example, Fed Ex doesn’t believe that it’s in the delivery business. It thinks it’s in the ‘peace of mind’ business. This is really about engineering the experience that people have when they use your product/service. It’s about creating clues as to how important you consider your constituents to be. These clues are frequently small and subtle. And the effort to perform them is also small. But a focus on ROI has obscured the the need to actually follow through. The suggestion is that instead, there should be some concentration on ROY. As in Y not provide the clues necessary to make customers/employees/etc realize that you are as passionate about the business they they are.&lt;/p&gt;  &lt;p&gt;I found the presentation interesting. At a minimum, it gave me pause to think about how ObjectSharp delivers to this constituencies. While I think we do a decent job, there are certainly areas where we can improve. And we probably need to pay closer attention to the details of the experience that our customers have. And, in many cases, it’s the details that are more important than anything else.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167645" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>MIX ‘09 Keynote – Part 3</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/18/mix-09-keynote-part-3.aspx</link><pubDate>Wed, 18 Mar 2009 15:10:29 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167641</guid><dc:creator>bruce</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167641.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167641</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167641</wfw:comment><description>&lt;p&gt;Some additional Silverlight 3 improvements that are being announced.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Data Binding improvements, specifically element-to-element bindings&lt;/li&gt;    &lt;li&gt;Validation error templates, although there is no support for the IDataErrorInfo interface&lt;/li&gt;    &lt;li&gt;improvements on the ability to push data from the server to the client. Conceptually, this is similar to callback functionality in WCF.&lt;/li&gt;    &lt;li&gt;Introduction of a DomainServices class that is used to generate a proxy class on the client. The proxy class has the ability to track and marshal changes between the client and server.&lt;/li&gt;    &lt;li&gt;Validation logic can be declaratively defined on the DomainServices derived class. The generated proxy class will contain the same validation, triggering the error template within Silverlight.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And now, the big news.&lt;/p&gt;  &lt;p&gt;Silverlight 3 will be able to run outside of the browser on both Windows and the Mac. Security is the same sandbox model used from within the browser. There is built-in support for automatic updates. And the application can be aware of its off-line/on-line situation. There will be more about this later in the week, I’m sure.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167641" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>MIX ‘09 Keynote – Part 2</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/18/mix-09-keynote-part-2.aspx</link><pubDate>Wed, 18 Mar 2009 14:51:55 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167640</guid><dc:creator>bruce</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167640.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167640</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167640</wfw:comment><description>&lt;p&gt;More stuff on the Web server side of the equation. There is a new version of the Web Platform Installer. This doesn’t have any impact on me, at least not in the past. But there is now a gallery of community-based applications, such as DotNetNuke, DasBlog and WordPress that can be automatically installed onto a web server through the Platform Installer. Not useful to me, but nice to people who are trying to streamline the build-out of a Web server. You can see a list of these applications &lt;a href="http://www.microsoft.com/web/gallery/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Silverlight 3.0 has some new functionality to improve functionality. There will be hardware-based acceleration for compositing, where available. And there are a number of features aimed at improving the media experience. A gentleman from NBC came out and showed some stats on the Beijing Olympics and Silverlight. As well, NBC will do the same for the Vancouver Olympics. Forgive me for not caring, as none of this is available in Canada. &lt;/p&gt;  &lt;p&gt;You will probably hear that Silverlight has 3D functionality. A warning that it is not true 3D, but the ability to move a 2D image in three dimensions. The actual term is ‘perspective transform’. If you have to ask about the difference, then you probably don’t care. But for those that do, visualize a flat-screen image that can be rotated about the X-, Y-, or Z-axis so that it appears to be spinning. Hit testing works appropriately (you can only click on the image, regardless of how it is oriented. &lt;/p&gt;  &lt;p&gt;Silverlight 3.0 will provide a better experience for SEO. This includes the capability of supporting deep linking and navigation.&lt;/p&gt;  &lt;p&gt;Going back to the idea that support for a sketch-based workflow, Expression Blend 3 will have a features called SketchFlow. This feature allows for easy navigation through a collection of pages. The interface allows for quick and simple creation of the workflow through an application. Each state in the workflow corresponds to a page. &lt;/p&gt;  &lt;p&gt;One of the things that is interesting about the creation of the pages in a workflow is the inclusion of Wiggly controls. These are controls that, through their appearance, will not be mistaken for a completed application. The borders on the controls take on the appearance of a hand-drawn image. Yet the controls are still real WPF controls, meaning that they work in the Blend and, indeed, when the applications is ‘run’ through the SketchFlow prototyping tool..&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167640" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>MIX ‘09 Keynote – Part 1</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/18/mix-09-keynote-part-1.aspx</link><pubDate>Wed, 18 Mar 2009 14:21:24 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167639</guid><dc:creator>bruce</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167639.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167639</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167639</wfw:comment><description>&lt;p&gt;The first part of the keynote was Bill Buxton talking about the benefits of considering user experience and design when creating an application. Certainly a good speaker with passion about hit topics. But I’m afraid that he’s preaching to the converted. He touted the idea of coming up with 5 solutions to any problem, allow the best one to float to the surface. While this is a fine idea, I’m afraid that it will run up against the shoal of fiscal prudence as soon as it gets pitched to management. The trick will be to convince management that five solutions is worth while. He mentioned sketching as a technique, but I’m still waiting for tools to support this approach. The ability to transition from a ‘sketch’ to a WPF form would be quite useful to fill this gap.&lt;/p&gt;  &lt;p&gt;One more thing about Bill’s talk. He gave a quote, almost as a throwaway, that I’m sure I’ll use in the future “It’s too important to take it seriously”. While that sounds like a contradiction, I think that in the design space, the implication is that user experience should have some focus on fun and excitement over pure serious. When you think about the shining lights of user experience applications, you’ll find that ‘fun’ and ‘cool’ are big parts of the success. &lt;/p&gt;  &lt;p&gt;The first portion of Scott Guthrie’s presentation talked about Web functionality. Expression Web 3 contains a feature called SuperPreview, which allows pages in Expression Web to be viewed (either side-by-side or onion skinned) as they will be rendered in other browsers. This includes browsers that you don’t have installed on your system. The functionality of SuperPreview also makes it easier to identify and isolate problems with rendering in the different versions. The Web 3 version support (at a minimum) IE versions, as well as Firefox and Safari. But there is also a standalone version of SuperPreview which allows comparison between IE 6, 7 and 8. You can download it &lt;a href="http://download.microsoft.com/download/5/6/8/568F0D28-0434-4794-B7FC-FB293BCC98FB/SuperPreview_Trial_en.exe" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167639" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>On the Road to MIX ‘09</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/18/on-the-road-to-mix-09.aspx</link><pubDate>Wed, 18 Mar 2009 10:07:45 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167626</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167626.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167626</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167626</wfw:comment><description>&lt;p&gt;I’m writing this particular blog post while in the air on the way to Las Vegas. For the next three days, I’m going to be at the MIX ‘09 conference. For regular readers of my blogs, that means you can expect a flurry of posts. I tend to live-blog the sessions that I’m in (particularly the keynotes) as a way of note taking, if nothing more. In this way, if nothing more, it is completely different than the MVP Summit I was at a couple of weeks ago.&lt;/p&gt;  &lt;p&gt;Actually, there are some other differences. Where the MVP Summit is as much about giving information to Microsoft as it is about receiving, MIX is all about the receiving. While I have some inkling about some of the announcements that you’ll be hearing about, I also know that they have kept some under wraps. Which means that they were even held back from the NDA sessions at the MVP Summit. So, even though I already have some blog posts ready to go, I will still need to pay attention to what’s being discussed. And I’ll pass the good stuff on to you as soon as I can.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167626" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX09/default.aspx">MIX09</category></item><item><title>The Patch I Didn’t Even Know I Needed</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/12/the-patch-i-didn-t-even-know-i-needed.aspx</link><pubDate>Thu, 12 Mar 2009 09:39:53 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:167054</guid><dc:creator>bruce</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/167054.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=167054</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=167054</wfw:comment><description>&lt;p&gt;I have been working with WPF and Silverlight pretty steadily for the past 6 months or so. And thanks to &lt;a href="http://www.lhotka.net/weblog/default.aspx" target="_blank"&gt;Rocky Lhotka&lt;/a&gt;, a problem that I didn’t even realize I had has been (probably) corrected.&lt;/p&gt;  &lt;p&gt;The problem was that occasionally Visual Studio would just go away. No warning. No error. Just disappear. It didn’t happen that often for me, but I have had awkward moments while teaching a course. Even in that situation, neither I, nor any of the students did anything but shrug, chuckle and restart. These things do happen in the world of software development. The fact that we were willing to just accept it unquestioningly is a blog post for another day. &lt;/p&gt;  &lt;p&gt;However, while perusing my blog roll yesterday, I came across this &lt;a href="http://www.lhotka.net/weblog/WorkingWithWPFOrSilverlightYouNeedThisPatch.aspx" target="_blank"&gt;post&lt;/a&gt; from Rocky. It talks about a hotfix for a problem that causes Visual Studio to just disappear. Way too coincidental. A quick download and, hopefully, I’m inoculated from this issue going forward. If you’re using WPF in Visual Studio, it’s a fix you might strongly consider.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=167054" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Fixing ‘prop’ Snippet Compatibility</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/07/fixing-prop-snippet-compatibility.aspx</link><pubDate>Sun, 08 Mar 2009 02:34:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:166451</guid><dc:creator>bruce</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/166451.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=166451</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=166451</wfw:comment><description>&lt;P&gt;As you might have gathered from reading my &lt;A href="http://blogs.objectsharp.com/cs/blogs/bruce/archive/2009/03/01/changing-generated-code-in-vs2008.aspx" target=_blank&gt;recent post&lt;/A&gt; on changing generated code in VS2008, I wasn’t thrilled when Microsoft changed the behavior of the prop snippet between VS2005 and VS2008. It’s almost two years later and my fingers still want to type '&lt;EM&gt;prop’&lt;/EM&gt; even when I know that using automatic properties is very, very unlikely to be the thing that I want to generate.&lt;/P&gt;
&lt;P&gt;My solution to this consternation was to create a custom snippet. The XML found below can be used to create such a snippet. In this case, the snippet is named ‘propfull’ and its template creates a property complete with the backing variable. It can be loaded into Visual Studio by using the Import button found in the Tools | Code Snippet Manager dialog box. The other possible approach would be to edit the snippet that comes with VS2008, but I’m loath to make that type of change to the default. Changing behavior that others have come to expect would evil, wouldn’t it Microsoft?&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#800000 size=2 face="Courier New"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt; &lt;BR&gt;&amp;lt;CodeSnippets&amp;nbsp; xmlns="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet%22"&gt;&lt;FONT color=#800000 size=2 face="Courier New"&gt;http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#800000 size=2 face="Courier New"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CodeSnippet Format="1.0.0"&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Header&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Title&amp;gt;propfull&amp;lt;/Title&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Shortcut&amp;gt;propfull&amp;lt;/Shortcut&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Description&amp;gt;Code snippet for property implemented using a backing store&amp;lt;/Description&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Author&amp;gt;Bruce Johnson, ObjectSharp Consulting&amp;lt;/Author&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SnippetTypes&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SnippetType&amp;gt;Expansion&amp;lt;/SnippetType&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/SnippetTypes&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Header&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Snippet&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Declarations&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Literal&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ID&amp;gt;type&amp;lt;/ID&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ToolTip&amp;gt;Property type&amp;lt;/ToolTip&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Default&amp;gt;int&amp;lt;/Default&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Literal&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Literal&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ID&amp;gt;backing&amp;lt;/ID&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ToolTip&amp;gt;Backing variable name&amp;lt;/ToolTip&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Default&amp;gt;myProperty&amp;lt;/Default&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Literal&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Literal&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ID&amp;gt;property&amp;lt;/ID&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ToolTip&amp;gt;Property name&amp;lt;/ToolTip&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Default&amp;gt;MyProperty&amp;lt;/Default&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Literal&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Declarations&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Code Language="csharp"&amp;gt;&amp;lt;![CDATA[ &lt;BR&gt;private $type$ $backing$;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;public $type$ $property$ &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp; get { return $backing$; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; set { $backing$ = value; } &lt;BR&gt;}$end$]]&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Code&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Snippet&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/CodeSnippet&amp;gt; &lt;BR&gt;&amp;lt;/CodeSnippets&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=166451" width="1" height="1"&gt;</description></item><item><title>My Biggest Disappointment at the MVP Summit</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/05/my-biggest-disappointment-at-the-mvp-summit.aspx</link><pubDate>Thu, 05 Mar 2009 16:52:28 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:166311</guid><dc:creator>bruce</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/166311.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=166311</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=166311</wfw:comment><description>&lt;p&gt;I’ve just come home from spending the last three days in Redmond at the MVP Summit. For those who might not be aware, the Summit is an annual event that Microsoft hosts for Most Valuable Professionals (MVP). The MVP designation is given to people who have contributed in a positive way to the community through speaking, blogging, answering questions in forums or organizing user groups and conferences at the local level. At the Summit, the various product groups get the opportunity to demonstrate some of the futures for their products in order to solicit feedback. The chance to meet and talk with product group members is actually one of the main benefits of being an MVP to me. They are people who are passionate about the code they write and who love to hear about the good and the bad.&lt;/p&gt;  &lt;p&gt;However, the futures that are being discussed are really that. We’re not talking about what’s going to be in VS2010. The feature list for that has been set in stone for a while and is generally well known. Instead, we’re talking about what might be coming in the next version of Visual Studio. Or Silverlight. Or ASP.NET. Or Data Programmability. These futures have not, for the most part, even been designed much less coded. So to talk with us about this, MVPs at the Summit (and, indeed, all MVPs) have to sign a non-disclosure agreement (NDA). This means that we cannot discuss with anyone outside of the MVP community what we have seen and heard until the information becomes public.&lt;/p&gt;  &lt;p&gt;Today’s technology, combined with the outgoing personalities of MVPs makes this restriction a challenge. Normally when I’m at a conference, I’m live blogging the session that I’m in. Or I’m twittering my schedule. Can’t do that here. It gives me itchy fingers, but the NDA is taken quite seriously. Even the code names for various projects are considered NDA, a problem for the person who unthinkingly twittered one while in sessions on Monday.&lt;/p&gt;  &lt;p&gt;So that inability to share is my biggest disappointment. Not an unexpected one (I’ve been to the Summit before and am under NDA constraints constantly), but still a source of sadness nonetheless. But let me just say that I’ve already written some blog posts that will be published once the details of the products are made public in the near future. Hopefully that little tidbit of foreshadowing won’t get the NDA police on my trail.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=166311" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Clearing the Debugging Tooltip</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/01/clearing-the-debugging-tooltip.aspx</link><pubDate>Mon, 02 Mar 2009 03:45:57 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:165747</guid><dc:creator>bruce</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/165747.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=165747</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=165747</wfw:comment><description>&lt;p&gt;On the scale of annoyances, this is not a huge one. But the solution is so simple, that it’s worth a quick post.&lt;/p&gt;  &lt;p&gt;Have you ever been in the middle of debugging an application and used the hover functionality to display the current value of a variable? And expanded multiple levels to find the specific property that you’re looking for? Of course you have. &lt;/p&gt;  &lt;p&gt;But have you ever been frustrated when the debugging view obscures a piece of code that you’re interested in? So that you have to close the debugging tooltip to see the code and then navigate through the hierarchy to get back to what you were looking for? Odds are that it has happened to you. It certainly happens to me frequently enough.&lt;/p&gt;  &lt;p&gt;Fortunately, there is a solution. While the debugging tooltip is displayed, simply press the Ctrl key. This instantly makes the tooltip transparent. And when you release the Ctrl key, the tooltip reappears. Simple and elegant, just the way all solutions should be.&lt;/p&gt;  &lt;p&gt;Thanks to &lt;a href="http://www.objectsharp.com/blogs/dave" target="_blank"&gt;Dave Lloyd&lt;/a&gt; and &lt;a href="http://kodehoved.dk/" target="_blank"&gt;Brian Rasmussen&lt;/a&gt; for the information (same tip at different times).&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=165747" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category></item><item><title>Changing Generated Code in VS2008</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/03/01/changing-generated-code-in-vs2008.aspx</link><pubDate>Mon, 02 Mar 2009 02:47:34 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:165746</guid><dc:creator>bruce</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/165746.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=165746</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=165746</wfw:comment><description>&lt;p&gt;Have you ever been dissatisfied with the code that is automatically generated by Visual Studio in response to various commands that you perform. For example, in VS2005, I got used to using the &lt;em&gt;prop&lt;/em&gt; snippet to create properties. This snippet created a property declaration complete with a private backing variable. However, in VS2008, the &lt;em&gt;prop&lt;/em&gt; snippet was modified to create a property declaration in the form of the automatic property declaration. That, to me, was annoying. &lt;/p&gt;  &lt;p&gt;(Note to Microsoft: Please consider the existing snippets to be part of what you consider when looking at backwards compatibility. Create more snippets, sure. But please don’t change what the current snippets do…especially when the ‘better’ snippets are not actually better)&lt;/p&gt;  &lt;p&gt;Or, consider the fact that, as more and more work is done in WPF, the need to ensure that business classes implement INotifyPropertyChanged grows. Adding or modifying a snippet to include the code to call PropertyChanged could be quite useful. It certainly has been for me.&lt;/p&gt;  &lt;p&gt;Little known by most developers is the location for the snippets that Visual Studio provides. Or, what might be more interesting to intrepid developers, the snippets used by Visual Studio refactoring. All of these are found in &lt;em&gt;%ProgramFiles%\Microsoft Visual Studio 9.0\VC#\Snippets\1033&lt;/em&gt;. The keyword snippets can be found in the &lt;em&gt;Visual C#&lt;/em&gt; subdirectory, while the refactoring snippets can be found in the R&lt;em&gt;efactoring&lt;/em&gt; subdirectory. Take a look at what’s there and you may be surprised how you can increase your productivity for mundane (and frequent) tasks.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=165746" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category></item><item><title>“Fixing” the WPF Designer</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/02/27/fixing-the-wpf-designer.aspx</link><pubDate>Sat, 28 Feb 2009 03:41:55 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:165567</guid><dc:creator>bruce</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/165567.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=165567</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=165567</wfw:comment><description>&lt;p&gt;If you use WPF on a regular basis, then I can take a good guess as the esteem in which you hold the designer. While it has it’s place, hard code WPF devs using XAML directly. It’s much each to get the result that you’re looking for quickly. The problem I’ve always had is that when you open a WPF file, even when you have disabled the design portion, there is still a significant time lag. &lt;/p&gt;  &lt;p&gt;Thanks to &lt;a href="http://weblogs.asp.net/fmarguerie/default.aspx" target="_blank"&gt;Fabrice Marguerie&lt;/a&gt; who wrote &lt;a href="http://weblogs.asp.net/fmarguerie/archive/2009/01/29/life-changer-xaml-tip-for-visual-studio.aspx" target="_blank"&gt;this blog post&lt;/a&gt; which describes how to eliminate that annoying delay. &lt;/p&gt;  &lt;p&gt;It’s nice to have less friction between me and my XAML. :)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=165567" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Excel automatically defines column types</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/02/25/excel-automatically-defines-column-types.aspx</link><pubDate>Thu, 26 Feb 2009 03:39:40 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:165448</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/165448.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=165448</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=165448</wfw:comment><description>&lt;p&gt;So to set up this problem, an application that I'm currently working on needs to process data that is stored in an Excel spreadsheet. The creation of the spreadsheet is actually performed by a scientific instrument, so my ability to control the format of the output is limited. The instrument samples liquids and determines a quantity. That quantity is placed into the spreadsheet. If the quantity in the liquid is not successfully read, then the literal &amp;quot;Too low&amp;quot; is placed into the sheet. The application opens up the spreadsheet and loads up a DataSet using the OleDb classes (OleDbConnection and OleDbDataAdapter). &lt;/p&gt;  &lt;p&gt;This seemed like a fine setup. At least, until some of the numeric values in the spreadsheet were not being read. Or, more accurately, the values in the spreadsheet were not making it into the DataSet. Head-scratching, to say the least.&lt;/p&gt;  &lt;p&gt;After some examination, the problem became apparent. When the values were being successfully read, the column in the DataSet had a data type of Double. When the values were not being successfully read, the column in the DataSet had a data type of String. Now the difference between success and no-success was nothing more than the contents of the spreadsheet. &lt;/p&gt;  &lt;p&gt;Now the obvious path to follow is how the data type of the column is determine. Some research brought me to what I believe is the correct answer. The Excel driver looks at the contents of the first 8 cells. If the majority is numeric, then the column's data type is set to Double/Integer. If the majority is alphabetic, then the column becomes a string. &lt;/p&gt;  &lt;p&gt;Of course, this knowledge didn't really help me. As I said at the outset, my ability to control the format of the spreadsheet was limited. So I needed to be able to read the numeric data even if the column was a string. And, at present, the cells containing numbers in a column marked as a string were returned as String.Empty.&lt;/p&gt;  &lt;p&gt;The ultimate solution is to add an IMEX=1 attribute to the connection string. This attribute causes all of the data to be treated as a string, avoiding all of the cell scanning process. And, for reasons which I'm still not certain of, it also allowed the numeric data to be read in and processed. A long and tortuous route yes, but the problem was eventually solved.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=165448" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SQL+Tips/default.aspx">SQL Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Walking the WPF Control Hierarchy</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/02/25/walking-the-wpf-control-hierarchy.aspx</link><pubDate>Wed, 25 Feb 2009 20:33:46 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:165434</guid><dc:creator>bruce</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/165434.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=165434</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=165434</wfw:comment><description>&lt;p&gt;I just finished teaching a Silverlight/WPF course last week. As is true in almost every course I teach, there were questions from people who are trying to use the technology in the real world. It's what I love about teaching...that I always learn something about how people use the tools they have been given.&lt;/p&gt;  &lt;p&gt;In this particular case, the problem was relating to walking the control hierarchy in a user control. The user control contained a DataGrid and the goal was to get from a particular cell within the DataGrid back to the user control itself. The code that was written to do so looks approximately like the following.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;public UserControl GetContainingUserControl(FrameworkElement element)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;{&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;#160;&amp;#160; if (element is UserControl)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return element;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;#160;&amp;#160; else&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return GetContainingUserControl(element.Parent);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The problem with the code is that, in the case specified, the Parent becomes null before the UserControl is found. For most developers, this is a strange and unexpected turn of affairs. For most hierarchies, it seems completely reasonable to presume that every element in a hierarchy will have a non-null parent except the root of the tree. But if you read over the description of the Parent property closely, you will see that it &lt;u&gt;could&lt;/u&gt; be null. From MSDN,&lt;/p&gt;  &lt;p&gt;&lt;font color="#804000"&gt;Parent may be a null reference (Nothing in Visual Basic) in cases where an object was instantiated, but is not attached to an object that eventually connects to the Silverlight RootVisual, or the application object.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Ouch. Sure it's documented, but still. Ouch.&lt;/p&gt;  &lt;p&gt;Fortunately, there is a solution, found in an incredibly useful class named VisualTreeHelper. This class exposes a number of methods that can be used to navigate up and down the visual hierarchy in a WPF interface component. There is, for example, a GetChild method that retrieves a particular child element. As well, of particular interest for this example, there is a GetParent method that retrieves the parent of a given element. This method will not return a null parent until the top of the visual hierarchy is reached. &lt;/p&gt;  &lt;p&gt;In other words,VisualTreeHelper.GetParent(element) can be used in place of element.Parent in the above method with the result being more in line with expectations.&lt;/p&gt;  &lt;p&gt;Whew.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=165434" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category></item><item><title>First Post of the Year and a Gift for You</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2009/01/06/first-post-of-the-year-and-a-gift-for-you.aspx</link><pubDate>Tue, 06 Jan 2009 11:53:21 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:160664</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/160664.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=160664</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=160664</wfw:comment><description>&lt;p&gt;Now that the holidays are over (which weren't particularly fun for me this year, due to a persistent bout with sinusitis), it's time to get back to the posting. And to start things off, let me offer any of you who might be thinking about going to &lt;a href="http://www.devteach.com" target="_blank"&gt;DevTeach Vancouver&lt;/a&gt; at the beginning of June (8th to the 12th). Jean-Rene Roy, the organizer of the conference, has offered 50% off the registration cost to the first 30 people who register with the following code: &lt;b&gt;DEVT50OFFVAN&lt;/b&gt;. Also, the registration need to be done prior to Feb 10th. &lt;/p&gt;  &lt;p&gt;If you've never been to a DevTeach conference, you don't know what you're missing. This is easily the top .NET developer-focused conference in Canada. They get big name speakers presenting on the latest and greatest of technologies. As well, the setup for the conference is such that the speakers are much more accessible than any other conference I've been to. So not only will you be able to hear familiar luminaries, but you'll also get the ability to speak with them one-on-one. A great deal at full price, this becomes an incredible opportunity at half-price. So if you were just thinking of going, let this offer make your mind up for you.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=160664" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>My Book is now Available</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/11/16/my-book-is-now-available.aspx</link><pubDate>Sun, 16 Nov 2008 15:56:31 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:156828</guid><dc:creator>bruce</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/156828.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=156828</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=156828</wfw:comment><description>&lt;p&gt;In the excitement of PDC, it slipped my mind to let everyone know that the book on which I was a co-author was actually shipped at the beginning of October. The title is the terse, yet incredibly descriptive &lt;a href="http://www.amazon.com/gp/product/0735625654?ie=UTF8&amp;amp;tag=tagconsulting-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0735625654" target="_blank"&gt;MCTS Self-Paced Training Kit (Exam 70-503): Microsoft&amp;#174; .NET Framework 3.5 Windows&amp;#174; Communication Foundation (PRO-Certification)&lt;/a&gt;. There is a bidding war for the movie rights and I'm hoping that George Clooney plays me in the adaptation. :)&lt;/p&gt;  &lt;p&gt;For those of you wondering how the actual release might have slipped my mind, the reason is that I'm not involved in the steps that takes place at the end of the publishing process. Most of the book was written in the first half of the year. Since July, I have been reviewing chapters and responding to editor notes. But since the middle of August my tasks have been done. And, I'm afraid, when it comes to book writing, once I'm done, I mentally move on to the next task. So I wasn't even sure when the publication date was. But it was released and, based on the numbers that I've seen so far, it seems to be doing quite well. If any of you have the chance to read it, I'd be thrilled to hear any feedback (both good and bad).&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=156828" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Personal/default.aspx">Personal</category></item><item><title>Non-Geek Fun</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/11/15/non-geek-fun.aspx</link><pubDate>Sat, 15 Nov 2008 21:19:26 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:156782</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/156782.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=156782</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=156782</wfw:comment><description>&lt;p&gt;I've been a fan of &lt;a href="http://www.gladwell.com" target="_blank"&gt;Malcolm Gladwell&lt;/a&gt; since I read The Tipping Point. And after following that up with Blick, it is clear that Mr. Gladwell is a fascinating author on subjects that are quite interesting, even when it falls outside my normal range of reading material (that being mostly geeky ). Apparently on Tuesday, a new book of his entitled &lt;a href="http://www.amazon.com/Outliers-Story-Success-Malcolm-Gladwell/dp/0316017922/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1226787489&amp;amp;sr=8-1" target="_blank"&gt;Outliers: The Story of Success&lt;/a&gt; is coming out. That in itself is enough to pique my interest. However, it turns out that, as part of his book tour, Mr. Gladwell is speaking in Toronto on Dec 1 at the University of Toronto Rotman School of Business. And the price of the tickets (only $31 and which you can get &lt;a href="https://secure.e-registernow.com/cgi-bin/mkpayment.cgi?state=529" target="_blank"&gt;here&lt;/a&gt;) includes a copy of the book. I'm signed up already and if you have found his books interesting, here is a chance to hear him in person.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=156782" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Personal/default.aspx">Personal</category></item><item><title>Problems Publishing Unit Tests from VSTS</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/11/03/problems-publishing-unit-tests-from-vsts.aspx</link><pubDate>Mon, 03 Nov 2008 19:07:45 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154925</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154925.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154925</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154925</wfw:comment><description>&lt;p&gt;Earlier today, a colleague had an issue with the publishing of unit test results into a TFS instance. The publication process, which is typically done manually at the click of a button, was no longer available. Specifically, the Publish button was actually disabled. There was no obvious error message indicating what, if anything, was wrong. This lack of information made identifying the problem a challenge, to put it mildly.&lt;/p&gt;  &lt;p&gt;The solution, at least to identifying what the problem was, is to use the command line version of MSTest. If you execute the command MSTest /? in a command window, you will see that there are a number of options which can be used to execute a set of unit tests and publish them to a TFS server. For example, the following command will execute the unit tests in the TestLibrary.dll assembly and publish the results to the TFS server located at http://TfsServer:8080&lt;/p&gt;  &lt;p&gt;&lt;font color="#804000"&gt;MSTest /nologo /testcontainer:&amp;quot;TestLibrary.dll&amp;quot; /runconfig:&amp;quot;localtestrun.testrunconfig&amp;quot;      &lt;br /&gt;/resultsfile:&amp;quot;TestLibraryResults.trx&amp;quot; /test:TestLibrary /publish:http://TfsServer:8080       &lt;br /&gt;/publishbuild:&amp;quot;DemoTestBuild_20081103.1&amp;quot; /teamproject:&amp;quot;DemoProject&amp;quot; /platform:&amp;quot;Any CPU&amp;quot; /flavor:Debug&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In this particular situation, running MSTest generate an error that indicated that the drop location for the build could not be created. An error that was, thankfully, quite easy to correct. But difficult to identify without using the command line tool.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154925" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>More Thoughts on the Cloud</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/31/more-thoughts-on-the-cloud.aspx</link><pubDate>Fri, 31 Oct 2008 14:04:18 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154801</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154801.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154801</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154801</wfw:comment><description>&lt;p&gt;One of the more farsighted thoughts on the implications of cloud computing is the concern about vendor lock-in. Tim Bray mentioned it in his &lt;a href="http://www.tbray.org/ongoing/When/200x/2008/10/14/Cloudy-Times" target="_blank"&gt;Get in the Cloud&lt;/a&gt; post &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;u&gt;Big Issue&lt;/u&gt;&lt;/em&gt;&lt;em&gt; &amp;#183; I mean a really big issue: if cloud computing is going to take off, it absolutely, totally, must be lockin-free. What that means if that I&amp;#8217;m deploying my app on Vendor X&amp;#8217;s platform, there have to be other vendors Y and Z such that I can pull my app and its data off X and it&amp;#8217;ll all run with minimal tweaks on either Y or Z. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;...&lt;/p&gt;    &lt;p&gt;&lt;em&gt;I&amp;#8217;m simply not interested in any cloud offering at any level unless it offers zero barrier-to-exit.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This idea was also commented on by Dare Obasanjo &lt;a href="http://www.25hoursaday.com/weblog/2008/10/19/CloudComputingAndVendorLockIn.aspx" target="_blank"&gt;here&lt;/a&gt;. It was Dare who originally pointed me at Tim's post.&lt;/p&gt;  &lt;p&gt;My take on the vendor lock-in problem is two-fold. First is the easier one to deal with - the platform on which the application is running. As it sits right now, use of Azure is dependent on you being able to publish an application. The destination for the application is a cloud service, but that is not a big deal. You can just as easily publish the application to your own servers (or server farm). The application which is being pushed out to the cloud is capable of being deployed onto a different infrastructure. &lt;/p&gt;  &lt;p&gt;Now, there are aspects of the cloud service which might place some significant requirements on your target infrastructure. A basic look at the model used by Azure indicates that a worker pattern in being used. Requests arrive at the service and are immediately queued. The requests are then processed in the background by a worker. The placement of the request in the queue helps to ensure the reliability of the application, as well as the ability to scale up on demand. So if you created an infrastructure that was capable of supporting such a model, then your lock-in at the application level doesn't exist. Yes, the barrier is high, but it is not insurmountable. And there is the possibility that additional vendors will take up the challenge.&lt;/p&gt;  &lt;p&gt;The second potential for lock-in comes from the data. Again, this becomes a matter of how you have defined your application. Many companies will want to maintain their data within their premises. In the Azure world, this can be done through ADO.NET Data Services. In fact, this is currently (I believe) the expected mechanism. The data stores offered by Azure are not intended to be used for large volumes of data. At some point, I expect that Azure will offer the ability to store data (of the larger variety) within the cloud. At that point, the spectre of lock-in becomes solid. And you should consider your escape options before you commit to the service. But until that happens, the reality is that you are still responsible for your data. It is still yours to preserve, backup and use.&lt;/p&gt;  &lt;p&gt;The crux of all this is that the cloud provides pretty much the same lock-in that the operating system does now. If you create an ASP.NET application, you are now required to utilize IIS as the web server. If you create a WPF application, you require either Silverlight or .NET Framework on the client. For almost every application choice you make, there is some form of lock-in. It seems to me that, at least at the moment, the lock-in provided by Azure is no worse than any other infrastructure decision that you would make. &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154801" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Azure/default.aspx">Azure</category></item><item><title>Summarizing the Cloud Initiative</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/31/summarizing-the-cloud-initiative.aspx</link><pubDate>Fri, 31 Oct 2008 04:11:30 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154785</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154785.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154785</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154785</wfw:comment><description>&lt;p&gt;So it's the last few hours of PDC for this year. Which means that pretty much all of the information that can be shoved into my brain has been. It also means that it's a pretty decent moment to be summarizing what I've learned. &lt;/p&gt;  &lt;p&gt;Obviously (from its presence in the initial keynote and the number of sessions) cloud computing was the big news. This was also one of the more talked about parts of the conference, and not necessary for a good reason. Many people that I have talked to walked out of the keynote wondering exactly what Azure was. Was it web host? If so, what's the point? It's not like there aren't other companies doing the same thing. Could it be more than web hosting? If so, that wasn't made very clear from the keynote. In other words, I was not exactly chomping at the bit to try out Azure.&lt;/p&gt;  &lt;p&gt;But it's here at the end of the week. And I've had a chance to see some additional sessions and talk to a number of people about what Azure is capable of and represents for Microsoft. That has tempered my original skepticism a little. But not completely.&lt;/p&gt;  &lt;p&gt;In the vision of Azure was presented, the cloud was intended to be a deployment destination in the sky. Within that cloud, there was some unknown infrastructure that you did not need to be aware of. You could configure the number of servers to go up or down depending on the expected traffic to your site. As you change the configured value, your application becomes provisioned accordingly. This is nice for companies that need to deal with spikes in application usage. Or who don't have (or don't want to have) the support personnel for their infrastructure.&lt;/p&gt;  &lt;p&gt;However, there are some limitations to the type of applications which can fit into this model. For example, you need to be able to deploy the application. This implies that you have created the application to the point where you can publish it to the Azure service. The published application might include third party components (a purchase ASP.NET control, for example), but can't use a separate third-party application (such as Community Server).&lt;/p&gt;  &lt;p&gt;As well, you need to be able to access the application through the web. You could use a Silverlight front end to create the requests. You could use a client-based application to create the requests. But, ultimately, there is a Web request that need to be sent to the service. I fully expect that Silverlight will be the most common interface.&lt;/p&gt;  &lt;p&gt;So if you have applications that fit into that particular model, then Azure is something you should look at. There are some 'best practices' that you need to consider as part of your development, but they are not onerous. In fact, they are really the kind of best practices that you should already be using. As well, you should remember that the version of Azure introduced this past week is really just V1.0. You have to know that Microsoft has other ideas for pushing applications to the cloud. So even if the profile doesn't fit you right now, keep your ears open. I expect that future enhancements will only work to envelope more and more people in the cloud.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154785" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Azure/default.aspx">Azure</category></item><item><title>WPF Futures</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/28/wpf-futures.aspx</link><pubDate>Tue, 28 Oct 2008 21:33:12 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154655</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154655.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154655</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154655</wfw:comment><description>&lt;p&gt;I just got out of the WPF Roadmap talk. I found the future for WPF less interesting that the present, although that could very well because the speed of innovation coming from that group has been very high over the past couple of years. In fact, the 'roadmap' is as much about the present as it is about the future.&lt;/p&gt;  &lt;p&gt;Mention was made of the fact that the SP1 version of .NET 3.5 actually included a fair bit of 'new' functionality for WPF. As well, they have just released some new controls that are in different states. There is a DataGrid, Calendar control and DatePicker that are officially released. And there is a brand new ribbon control that is (I believe) in CTP mode. &lt;/p&gt;  &lt;p&gt;As well, there is also a Visual State Manager available for WPF. This is actually quite cool, as the VSM solves a problem that WPF has (and that SIlverlight already has). Specifically, it could be challenging to get the visual state of a control/page/form matched up with the event or data triggers that would be raised within the application. The Visual State Manager lets you associate a storyboard with a particular state and then set the state programmatically, at which point WPF runs the storyboard. &lt;/p&gt;  &lt;p&gt;Both the ribbon control and the VSM are available right now&lt;/p&gt;  &lt;p&gt;The future for WPF seemed less clear. A list of 'potential' controls was presented. And some general comments about improvements in the rendering, integration with touch, etc. In other words, the future appears to be now. I guess that lack of specificity is to be allowed when a product group is right at the beginning of it's development cycle.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154655" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Silverlight 2.0 Penetration</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/28/silverlight-2-0-penetration.aspx</link><pubDate>Tue, 28 Oct 2008 16:27:38 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154652</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154652.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154652</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154652</wfw:comment><description>&lt;p&gt;I'm sure that you know that Silverlight was released a couple of weeks ago. ScottGu made an interesting comment indicating that Silverlight (that would be 1.0 or 1.1) was installed on 1 in 4 computers that are connected to the Internet. And that over the next month, those computers would be updated to 2.0. Also that they had already upgrade 100 million computers. These numbers surprised me, only in that I didn't expect that penetration had achieved that goal.&lt;/p&gt;  &lt;p&gt;It also provides a number that might encourage people to start developing externally facing applications using Silverlight. Which, given some of the capabilities, is a good thing.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154652" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Development Changes</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/28/development-changes.aspx</link><pubDate>Tue, 28 Oct 2008 16:08:01 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154651</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154651.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154651</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154651</wfw:comment><description>&lt;p&gt;The presenter for the development changes related to .NET and Windows 7 is ScottGu. Who else?&lt;/p&gt;  &lt;p&gt;First off, Microsoft will be releasing a WPF ribbon control later this week. That is very nice, especially since the ribbon is the new hotness when it comes to the user interface.&lt;/p&gt;  &lt;p&gt;Demos also mentioned the integration of touch and jump lists, which are Win7 specific functionality. The jump lists (which is context sensitive functionality available through the thumbnail for an application) are simply commands which are implemented and registered by the application. Touch integration includes the ability to tie gestures to commands. So, ultimately, commands become the main mechanism for integrating WPF and Win7, at least at this level.&lt;/p&gt;  &lt;p&gt;Today, some additional WPF controls are being released. This includes DataGrid and a DataPicker control, as well as a Visual State Manager (a feature that greatly improves the creating of interfaces that depend upon events within the UI).&lt;/p&gt;  &lt;p&gt;.NET 4.0 includes support for the dynamic language runtime.&lt;/p&gt;  &lt;p&gt;VS2010 includes improvements for WPF designer. It also appears that VS2010 was built using WPF (at least the UI portion). Other areas of improvement include a streamlined test-driven development (TTD) model, and a better extensibility within the editor (and the IDE itself). For the later functionality, check out the Microsoft Extensibility Framework (MEF). The idea behind MEF is to allow for better visualization of data, even from external sources such as TFS, within the IDE. The demo includes the ability to grab bug information from TFS and display it while looking at the code associated with the bug.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154651" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Windows 7 Brick-a-brack</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/28/windows-7-brick-a-brack.aspx</link><pubDate>Tue, 28 Oct 2008 15:44:25 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154650</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154650.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154650</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154650</wfw:comment><description>&lt;p&gt;A couple of notes on how Windows 7 will improve O/S and application performance and some additional features.&lt;/p&gt;  &lt;p&gt;If you reduce the granularity of a timer, you can improve power consumption.&lt;/p&gt;  &lt;p&gt;They are trying to reduce the memory and processor requirements for Windows. Sinofsky (the speaker) held up his current machine, which is a 1MHz, 1GB system on which Windows 7 uses only half the RAM when started.&lt;/p&gt;  &lt;p&gt;A VHD can be created from within Windows (yeah!!!!!). As well, a VHD can be added to a running instance of Windows. And the machine can be booted from a VHD using the boot manager. This has the potential to be quite cool, especially for people like me who go from system to system on a regular basis.&lt;/p&gt;  &lt;p&gt;Built-in zoom-in and zoom-out. Useful for me when I'm training.&lt;/p&gt;  &lt;p&gt;To give you an idea of what the release schedule for Windows 7 is, the version that is available is basically the Milestone 3 version. There are still basically two steps to go. Next up, after the Milestone 3 is the Beta version, which is expected to be out at the beginning of next year. While M3 is criteria complete, in terms of performance, it is not feature complete. The beta version will be feature complete when it comes out. Microsoft is basically looking for us to use Windows 7 and provide feedback that will impact bugs fixes and the release schedule.&lt;/p&gt;  &lt;p&gt;That having been said, there is no hard timeline for when Windows 7 will be released. The only comment beyond that was &amp;quot;we're sticking with the idea of roughly 3 years from the Vista release&amp;quot;. Which, if memory serves, means that we're talking about Q4 2009 or Q1 2010.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154650" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Windows 7 includes Touch Support</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/28/windows-7-includes-touch-support.aspx</link><pubDate>Tue, 28 Oct 2008 15:12:52 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154647</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154647.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154647</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154647</wfw:comment><description>&lt;p&gt;First off, I find touch cool. I couldn't really use it to do my work, but I love the possibilities for improving user experiences.&lt;/p&gt;  &lt;p&gt;Windows 7 has built in support for touch in a number of ways. First, applications don't need to explicitly support touch in order to be used by touch. Second, the interface with touch goes beyond using your finger as a mouse. It includes the concept of 'gestures'.&lt;/p&gt;  &lt;p&gt;This is tough to explain in words, but let me try. Say you were looking at a Word document and you wanted to scroll down. You could 'flick' your fingers down and it would scroll as if you had started to roll a wheel. This is quite similar to the interface that an IPhone has. Along the same line, you can go back in IE by 'flicking' to the left. The subtlety of the interface fits nicely with my idea of the kinds of animation that a good WPF application should have.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154647" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Ray Ozzie Keynote - Day two</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/28/ray-ozzie-keynote-day-two.aspx</link><pubDate>Tue, 28 Oct 2008 15:01:52 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154646</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154646.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154646</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154646</wfw:comment><description>&lt;p&gt;The starting point for his presentation was to talk about how the Internet has become ubiquitous. And how there is a benefit to having proximity between the hardware, the software and the user. He also mentioned the phone as one of the software platforms that are part of most people's lives, which is not a surprise considering the comments about the Live Mesh made at Mix '08. &lt;/p&gt;  &lt;p&gt;Also interesting that Windows 7 is being referred to as the 'client' operating system. The intent is obviously to set up the idea that the next version of Windows is intended to be the 'client' to the Azure 'service'.&lt;/p&gt;  &lt;p&gt;The highlights for Windows 7 include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Changes to the taskbar to including thumbnails of the running instances of an application, as well as the ability to manage (e.g. close, open a recently used document, etc.) an instance from the thumbnail.&lt;/li&gt;    &lt;li&gt;Improvements to the searching capabilities within the machine, as well as across the machines in your home network.&lt;/li&gt;    &lt;li&gt;Improvements to automatic connection while in your home network. This includes discovery of other Windows 7 machines on the network. And, more importantly, the default printer changes to a printer within your home network (instead of having to remember to change from your printer at work). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These last two points indicate the focus for Windows 7 improvements, that being to try to smooth the integration of computers within a home next.&lt;/p&gt;  &lt;p&gt;More to follow.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154646" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>ASP.NET 4.0 Futures</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/28/asp-net-4-0-futures.aspx</link><pubDate>Tue, 28 Oct 2008 14:38:18 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154643</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154643.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154643</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154643</wfw:comment><description>&lt;p&gt;One way that you can tell that a product is getting more mature by the type of features that are included with new release. By this measure, ASP.NET is getting to be positively adult like.&lt;/p&gt;  &lt;p&gt;I just sat through the session on ASP.NET 4.0 futures. The main announcements are surprisingly tame. Well, surprising by former ASP.NET standards. And not particularly revolutionary.&lt;/p&gt;  &lt;p&gt;There are, of course, other reasons for that. The ASP.NET team has been working on a release schedule that is based on Internet time. In other words, you can't want for three years between releases when the rest of the world is innovating every 6-9 months. That's one of the reasons that you saw an MVC release onto Codeplex. It's why you saw Atlas before AJAX. And why the AJAX Control Toolkit exists.&lt;/p&gt;  &lt;p&gt;As a result, the advancements are more along the lines of incorporation and integration of these features. MVC is officially part of the product. As is the AJAX Control Toolkit. All good things, but definitely not earth-shaking.&lt;/p&gt;  &lt;p&gt;There are a couple of changes on the technology side. There is support for JQuery, a JavaScript library used to improve the integration between JSON and HTML. The binding used in AJAX looks much more like the WPF binding syntax. That last point made me wonder how long until there is a convergence of ASP.NET and WPF, when it comes to application markup.&lt;/p&gt;  &lt;p&gt;There are a number of other announcements, regarding JavaScript integration, better granularity when it comes to enabling and disabling ViewState (yeah!), and more control over how server controls deal with CSS markup. If you spend your business hours working with ASP.NET, some of this will probably fall into the 'finally' category. But for me, there was nothing that I found particularly compelling.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154643" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>A Lap Around Windows Azure</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/27/a-lap-around-windows-azure.aspx</link><pubDate>Mon, 27 Oct 2008 17:43:09 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154636</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154636.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154636</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154636</wfw:comment><description>&lt;p&gt;The first session that talked about Azure was (not surprisingly) incredibly popular. Filled a room that looked like it seated 700+ people. Then filled an overflow room. And the second overflow room is pack with people standing at the back.&lt;/p&gt;  &lt;p&gt;The sample app is a thumbnail generator. In other words, a function that could normally be provided by a Windows Service. Interesting that the 'simplest' scenarios is that one. Interesting that it seems to indicate that what you're deploying into Azure is a service with ASP.NET or Silverlight as the user interface&lt;/p&gt;  &lt;p&gt;A couple of times now, Azure has been referred to as an operating system. &lt;/p&gt;  &lt;p&gt;Currently, the storage abstractions are: blobs for user data, simple tables for service state and queues for service communications. But these abstractions are &lt;strong&gt;not&lt;/strong&gt; intended to replace a database. Astoria seems to be the expected CRUD channel. &lt;/p&gt;  &lt;p&gt;&amp;quot;Azure is an operating system&amp;quot; is getting to the point where it should become a drinking game.&lt;/p&gt;  &lt;p&gt;The second demo is a live site, managing teachers in Ethiopia. The speaking actually asked that we not to go to the site because it is live and the the typical usage pattern doesn't include being hit by 1000+ rabid developers all at once. :) In what appears to be a common approach, the user interface is a Silverlight communicating with Azure through web service calls.&lt;/p&gt;  &lt;p&gt;As of noon (PDT) today, you can go to &lt;a href="http://www.azure.com"&gt;http://www.azure.com&lt;/a&gt; and download the desktop SDK. And publish applications to the close. Currently usage is free, with restrictions. And there is no indication yet regarding the pricing model, although in the keynote, Ray Ozzie suggested that it would be 'competitive' and that there would be support for 'hobbyists'. So look to Amazon's EC2 for a rough idea and figure that you will have some low/no cost option for you to play with. &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154636" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Azure/default.aspx">Azure</category></item><item><title>Azure and On-Premises Data</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/27/azure-and-on-premises-data.aspx</link><pubDate>Mon, 27 Oct 2008 16:47:02 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154634</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154634.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154634</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154634</wfw:comment><description>&lt;p&gt;One of the more interesting questions that will arise from cloud computer in general and Azure specifically is how the connection with on-premises data will be maintained. Based on what I saw in the keynote, they appear to have the link to Active Directory well in hand. In other words, identity can be federated so that the Azure service receives the credentials and passes the authentication request to an Active Directory server running on your corporate network. The demo in the keynote made that process look incredibly easy. Demo easy, with no discussion over the potential security risks or configuration requirements for the AD server. But that's beside the point (for the moment).&lt;/p&gt;  &lt;p&gt;My real question relates to the access required for non-identity data. How will a company's internal data be made available to an Azure service. It appears that the answer is going to include SQL Data Services, but I'll be interested in hearing more about the details. Specifically, the level of exposure and integration required to allow an Azure application to retrieve and update information that is available only through an internal network. That has the potential to be an interesting challenge and set up a confrontation between security and functionality. &lt;/p&gt;  &lt;p&gt;Welcome to the new world, same as the old world.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154634" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Nothing like some new terms</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/27/nothing-like-some-new-terms.aspx</link><pubDate>Mon, 27 Oct 2008 15:17:31 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154631</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154631.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154631</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154631</wfw:comment><description>&lt;p&gt;Get ready to hear about the 'Fabric controller'. In a cloud computer environment, the fabric controller is the &amp;quot;O/S&amp;quot;. It is responsible for managing the services that you have configured.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;Modeling your services&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;The first step is to model your service. This means to define the attributes related to the deployment and execution of your service. This includes the channels and endpoints for your service (do a quick look to WCF for the definition for these terms). As well, you define the security model by identifying the roles and groups. This information is persisted as the configuration for the service.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;Development Tools&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;The developing and testing of the service can be done using familiar tools (i.e. VS2008). There is no need to deploy to the cloud in order to test. There is also no requirement that the application be written purely in managed code. This piece of information is a bit of a clue as to what is going on under the covers. In other words, there is probably Windows running someplace.&lt;/p&gt;  &lt;p&gt;The development environment 'simulates' the cloud computing environment. Once the application is completed, it can be 'published' to Azure. The 'package' (the bin output for the project) and the configuration file is sent to Azure. After a few minutes, your application is running live on the cloud.&lt;/p&gt;  &lt;p&gt;Simple. At least for the &amp;quot;Hello World&amp;quot; application. :)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154631" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Windows Azure Links</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/27/windows-azure-links.aspx</link><pubDate>Mon, 27 Oct 2008 15:03:18 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154630</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154630.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154630</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154630</wfw:comment><description>&lt;p&gt;If you're looking for a set of links that provide more info on Windows Azure, check out &lt;a title="http://blogs.msdn.com/cloud/archive/2008/10/27/bookmarks-windows-azure.aspx" href="http://blogs.msdn.com/cloud/archive/2008/10/27/bookmarks-windows-azure.aspx"&gt;http://blogs.msdn.com/cloud/archive/2008/10/27/bookmarks-windows-azure.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154630" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Ray Ozzie Keynote at PDC 2008</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/27/ray-ozzie-keynote-at-pdc-2008.aspx</link><pubDate>Mon, 27 Oct 2008 15:01:20 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154629</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154629.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154629</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154629</wfw:comment><description>&lt;p&gt;Today's focus is on the back-end innovations. The client conversation/demos will be done at tomorrow's keynote. In other words, this is the 'cloud' talk.&lt;/p&gt;  &lt;p&gt;The content of the first portion of his talk is about the convergence of IT Pro and IT Dev functions. Basically, he is making a case for the need for cloud computing. Things like redundancy, resilience, reliability, etc. Nothing exceptionally new here. But he then branches to the idea that, rather than having the infrastructure within a corporation, perhaps it would be better to have the infrastructure hosted by someone who specializes in offering web functionality that supports millions of developers. I think I can see where this is heading :)&lt;/p&gt;  &lt;p&gt;The new service is called Windows Azure.&lt;/p&gt;  &lt;p&gt;That explains the 'blue' theme seen throughout the Convention Center.&lt;/p&gt;  &lt;p&gt;One of the goals is to be able to integrate the service with the existing toolset. &amp;quot;And you can&amp;quot;, says Ray. But there will also be a new set of tools aimed at assisting developers with this 'cloud design point'. After all, it's not quite the same as traditional Windows applications. The focus for a typical Windows application is 'scale-up' and not 'scale-out'. And to work properly with the cloud, the 'scale-out' model is a requirement.&lt;/p&gt;  &lt;p&gt;Keep in mind that one of the benefits of the cloud computing is the ability to increase capacity by turning a dial that increase the number of 'servers'. For your application to work successfully in that environment, the manner in which you develop applications might change significantly. But the details on that piece will have to wait for tomorrow. &lt;/p&gt;  &lt;p&gt;Now it's time for the demos. More shortly.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154629" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>Traveling to PDC 2008</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/10/27/traveling-to-pdc-2008.aspx</link><pubDate>Mon, 27 Oct 2008 14:14:46 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:154628</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/154628.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=154628</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=154628</wfw:comment><description>&lt;p&gt;I'm writing this while at 35,000 feet, winging my way to PDC in Los Angeles. This is actually my first PDC so I'm looking forward to it. I've been to Tech Ed and Mix in the past, but have never made it to a PDC. How can anything bad happen while I'm surrounded by 7,000+ geeks?&lt;/p&gt;  &lt;p&gt;There are a couple of areas where I expect to see some significant announcements. Some of them, such as the beta bits for Windows 7 and an early CTP for VS2010, are already widely anticipated. But there are likely to be more (and potentially more interested) announcements from across the company. &lt;/p&gt;  &lt;p&gt;For example, I expect to hear some big initiative surrounding cloud computing. Aside from tools that will help developers take advantage of the technology, it wouldn't surprise me to hear about a service that competes with Amazon's new E3 service.&lt;/p&gt;  &lt;p&gt;Another potential target for news is the Oslo project. There has been a bit of buzz (oooooo...alliteration) on this upgrade to Microsoft's service layer offering, but it will be interesting to see how Oslo is positioned, especially in relation to any cloud computing announcements.&lt;/p&gt;  &lt;p&gt;Beyond the above, I'm sure there will be more surprises. From the number of sessions on the agenda, I expect that there will be some VSTS innovations. And my interest has been piqued by an MSR project called Pex that deals with automated white-box testing. I'll be live-blogging from the keynotes and the sessions that attend, basically commenting on anything that catches my ear. So stay tuned for some PDC details...at least, my take on them.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=154628" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/PDC/default.aspx">PDC</category></item><item><title>A Disappointment with PPTPlex</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/09/03/a-disappointment-with-pptplex.aspx</link><pubDate>Wed, 03 Sep 2008 23:42:17 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:152346</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/152346.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=152346</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=152346</wfw:comment><description>&lt;p&gt;I did a presentation this afternoon on some of the basic functions of WCF. I had put a slide deck together using a new Microsoft Office add-in called &lt;a href="http://www.officelabs.com/projects/pptPlex/Pages/default.aspx" target="_blank"&gt;PPTPlex&lt;/a&gt;. You can see demos of what this add-in does in the provided link, but basically is allows for a much more dynamic experience of going through the slides in a slide deck. As compared to the typical linear flow, PPTPlex allows you to easily jump from one slide to another with a couple of clicks up and down the slide hierarchy.&lt;/p&gt;  &lt;p&gt;I was pretty excited to be able to put this technology to work in the real world - right up to the time when I started the slide show.&lt;/p&gt;  &lt;p&gt;Most of the time when I do presentations, I use a split screen. That is to say that what is displayed to the audience is not the same as what I see on the laptop in front of me. The new Presentation Mode in PowerPoint 2007 helps me a great deal with working that way. I was expecting that, when PPTPlex was run as a slide show, I would have expected the same appearance, that being that the slide show (such as it is) would be displayed on the secondary monitor.&lt;/p&gt;  &lt;p&gt;I was disappointed.&lt;/p&gt;  &lt;p&gt;Now it may be that there is a setting that I missed that would have allowed this to happen. I will admit that I was standing in front of the class when I tried this, so the time allocated for exploration was limited. But I expected it to just work and it didn't. Sigh.&lt;/p&gt;  &lt;p&gt;Now I haven't yet got back to a place where I can do some detailed investigation, but as soon as I do I will see if I missed something. I hope so, but I doubt it. More details as they become available.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=152346" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Personal/default.aspx">Personal</category></item><item><title>Mind Mapping from Word 2003 to 2007</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/08/28/mind-mapping-from-word-2003-to-2007.aspx</link><pubDate>Thu, 28 Aug 2008 15:31:51 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:151914</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/151914.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=151914</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=151914</wfw:comment><description>&lt;p&gt;I recall my first experience with Word 2007...it took me 20 minute to figure out how to do a Save As. Who would have figured that the cute icon in the top left corner actually had functionality associated with it. :) &lt;/p&gt;  &lt;p&gt;In a blog post from &lt;a href="http://www.sellsbrothers.com/"&gt;Chris Sells&lt;/a&gt;, I was point to a tool whose purpose is to bridge this gap. You see an on-line image of Office 2003 menu structure and by hovering an item, you are told where to find the same function in 2007. You can find the tool &lt;a title="a cool tool that shows me where the new version of each command is located in the new Word" href="http://office.microsoft.com/assistance/asstvid.aspx?assetid=XT100766331033&amp;amp;vwidth=1044&amp;amp;vheight=788&amp;amp;type=flash&amp;amp;CTT=11&amp;amp;Origin=HA100744321033"&gt;here&lt;/a&gt;. Check it out, use it and avoid the embarrassment that I went through.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=151914" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Writing is done, so back to the blogging</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/08/21/writing-is-done-so-back-to-the-blogging.aspx</link><pubDate>Thu, 21 Aug 2008 12:49:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:151346</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/151346.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=151346</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=151346</wfw:comment><description>&lt;P&gt;The two or three of you who follow my blog with regularity will have noticed that I was dark for most of the summer. The reason was that I was in the process of writing a book. Co-writing, would be more accurate, but&amp;nbsp;still long hours were spent&amp;nbsp;pounding out prose on my antique&amp;nbsp;Underwood.&amp;nbsp;Okay, maybe not so much pounding, but writing a book does dry me out for writing blog posts.&lt;/P&gt;
&lt;P&gt;The recent influx of posts would seem to indicate that the book writing process was finished. And indeed it is. In fact, my editor informed me yesterday that the files have been shipped off to the publisher for final processing and printing. This is a source of great cheer, as I can now rest easy that no additional requests for editing will arrive in my inbox.&lt;/P&gt;
&lt;P&gt;For those of you who are interested, the book is the MS Press training kit for the Windows Communications Foundation exam. You can see what it looks like at &lt;A class="" href="http://www.amazon.com/MCTS-Self-Paced-Training-70-503-PRO-Certification/dp/0735625654/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1219326729&amp;amp;sr=8-1" target=_blank&gt;Amazon&lt;/A&gt;. And feel free to buy multiple copies...they make great Christmas gifts &lt;img src="http://www.objectsharp.com/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=151346" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Personal/default.aspx">Personal</category></item><item><title>Visual Studio and SQL Server 2008 Conflicts</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/08/11/visual-studio-and-sql-server-2008-conflicts.aspx</link><pubDate>Mon, 11 Aug 2008 13:40:18 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:150964</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/150964.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=150964</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=150964</wfw:comment><description>&lt;p&gt;I'm just passing along some information that has been making the rounds (I found it on &lt;a href="http://blogs.microsoft.co.il/blogs/bursteg/archive/2008/08/08/if-you-haven-t-installed-vs-2008-sp1-don-t-install-sql-server-2008.aspx" target="_blank"&gt;Guy Burstein's&lt;/a&gt; blog).&lt;/p&gt;  &lt;p&gt;If you attempt to install SQL Server 2008 on a machine that has Visual Studio 2008 installed, it will fail. The requirement is to have VS 2008 SP1 installed, an update that is still about a week away from release. And you need the 'real' SP1. The same problem exists with the beta for SP1.&lt;/p&gt;  &lt;p&gt;So, for you developer/database people out there, it looks like at least a week of waiting to get the combination on a single machine.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=150964" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SQL+Tips/default.aspx">SQL Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2008/default.aspx">VS2008</category></item><item><title>Misleading "Could Not Locate Dependency" message in Composite UI Block</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/08/08/misleading-could-not-locate-dependency-message-in-composite-ui-block.aspx</link><pubDate>Fri, 08 Aug 2008 17:00:41 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:150822</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/150822.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=150822</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=150822</wfw:comment><description>&lt;p&gt;The project that I have been working on for a number of months uses the &lt;a href="http://msdn.microsoft.com/en-us/library/aa480450.aspx" target="_blank"&gt;Composite UI Application Block (CAB)&lt;/a&gt; as the basis for the user interface. If you have never worked with CAB before, it is an interesting framework. In many ways it makes tasks easy that would be incredibly challenging otherwise. This includes the ability to add and remove elements from the user interface by simply adding or removing lines from an XML file. On the other hand, there are parts of CAB that appear to work as if by magic. &lt;/p&gt;  &lt;p&gt;One of the 'magic' pieces is dependency injection. As a smart part (the name of the UI element that is part of the composition process) is loaded, the presenter (CAB supports a model-view-presenter pattern) is instantiated with some number of parameters passed into the constructor. The cool feature is that the value of any one of the parameters can be 'injected' into CAB by marking the parameter as follows.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;public DemoPresenter([ServiceDependency] WorkItem workItem,      &lt;br /&gt;&amp;#160;&amp;#160; [ComponentDependency(&amp;quot;Target&amp;quot;)] string injectedParameter)&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;In this declaration, the &lt;em&gt;injectedParameter&lt;/em&gt; value is taken from the &lt;em&gt;Target&lt;/em&gt; item in the work item and automatically passed into the constructor. Someplace earlier (and, in fact, even in another component), someone had to execute the code.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;string valueOfInterest = &amp;quot;Hello&amp;quot;;     &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;WorkItem.Items.Add(valueOfInterest, &amp;quot;Target&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;While this might seem a little convoluted, in the world of composite UI, this injection technique allows disparate components to easily share context. &lt;/p&gt;  &lt;p&gt;So much for the background and on to the problem. I had created a presenter constructor that took a parameter of type NamedObject. As well, the ComponentDependency attribute specified that the &amp;quot;Target&amp;quot; item in the work item should be passed in. In the place where the object was added to the WorkItem.Items collection, I instantiated an object of type Profile, where the Profile class derives from the NamedObject class. I added the Profile object to my Items collection with a key of &amp;quot;Target&amp;quot;. I expected that the dependency injection mechanism to retrieve the Target item and pass it into the presenter constructor. Instead, I received an &amp;quot;Unable to locate dependency 'NamedObject'&amp;quot; exception being raised.&lt;/p&gt;  &lt;p&gt;After digging deep into the injection process, specifically into the ObjectBuilder methods within the CAB project. It turns out that the matching process used by dependency injection is not based solely onthe key passed into the Items.Add method. It is also includes the type of the item. In other words,&amp;#160; the ObjectBuilder not only looks to find an item called &amp;quot;Target&amp;quot;, it also ensures that the type of the item matches. And, to make it more annoying, the ObjectBuilder doesn't understand hierarchy. So even though my item was of type Profile, which is a NamedObject (due to the inheritance), the ObjectBuilder says that there was no match and threw an exception.&lt;/p&gt;  &lt;p&gt;The solution to this problem (other than to modify how ObjectBuilder performs its matching...a daunting task to say the least) is to extract the item out of the work item directly. There are reasons for wanting to avoid this (there are actually more than one Items collection which can contain the injected value), but it worked in my situation. But I still have a gripe with the message. It's not truly misleading, as ObjectBuilder couldn't find a dependency of the indicated type. However, the message does require a deep understanding of how ObjectBuilder does its thing, and that is a strike against the message in my book.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=150822" width="1" height="1"&gt;</description></item><item><title>More Ways to Avoid the Second System Effect</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/08/06/more-ways-to-avoid-the-second-system-effect.aspx</link><pubDate>Wed, 06 Aug 2008 18:02:17 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:150482</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/150482.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=150482</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=150482</wfw:comment><description>&lt;p&gt;Dare Obasanjo had an interesting &lt;a href="http://www.25hoursaday.com/weblog/2008/08/04/AvoidingTheSecondSystemEffectInSoftwareDevelopment.aspx" target="_blank"&gt;post&lt;/a&gt; yesterday on the Second System Effect in software development. For those who are unaware, the second system effect is a term first coined by Frederick Brooks in &lt;a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959" target="_blank"&gt;The Mythical Man Month&lt;/a&gt;. It deals with (in general) the idea that the second system designed/implemented by anyone is typically over-architected, with more bells and whistles added then need be.&lt;/p&gt;  &lt;p&gt;Dare goes on to describe a number of common factors that keep systems from falling into this trap. Factors that my experience do contribute greatly to the success of a second version. I do have a couple of factors to add.&lt;/p&gt;  &lt;h3&gt;Only One Driver&lt;/h3&gt;  &lt;p&gt;There is a fundamental clash between marketing and developers when it comes to the priority of items added to a product. Marketing is looking for features that will help to drive sales. Developers are looking for features that will improve the architecture, stabilize the product, ease any future enhancements and simply be cool to implement. Frequently, these two groups will not agree 100% at the features which should be in the next release.&lt;/p&gt;  &lt;p&gt;Successful projects have a single driver. That is, there is one person who is responsible for determine which features do and don't make the cut. They will listen to both sides of the argument and make a decision, with their ultimate responsibility being to drive the successful shipping of the release. It doesn't matter which discipline the person comes from, although it helps if the driver has the respect of both groups). The important element is to have someone who is making the decision and ensuring that the process doesn't become a continual stream of requests for new features.&lt;/p&gt;  &lt;h3&gt;Rewriting is not Right&lt;/h3&gt;  &lt;p&gt;The title should probably read &amp;quot;Rewriting is not Right unless you have extraordinary unit test coverage...and probably not even then&amp;quot;, but that wasn't catchy enough. &lt;/p&gt;  &lt;p&gt;After you come up for air at the end of a project, it is usual to have some sort of post mortem. Even the name indicates how developers look at this part of the software development process. It is not in our nature (generally speaking) to sit back and admire the good things that were accomplished. Instead, we concentrate on the warts of the system. How many times have you said, immediately after completing a task, that you wished you could rewrite it from scratch?&amp;#160; Take solace that you're not alone in that feeling...it is quite common among your brethren.&lt;/p&gt;  &lt;p&gt;The problem is that the feeling to rewrite needs to be resisted. There is, whether you realize it or not, more invested in the development of a particular feature than you might expect. There is more than the code that implements the feature set that is visible. There are also all of the bug fixes associated with the application. The one or two lines of code that were necessary to make the system load the poorly-formatted file that arrives monthly from your biggest client. The use of a semaphore to ensure that a timing problem was corrected. All of those little things that had to be done to take the first pass of code and make it ready for use in the real world.&lt;/p&gt;  &lt;p&gt;When you're thinking about rewriting, your mind is focused on reworking the architecture. It is not thinking about the many hours of effort that went into identifying, replicating and correcting the bugs. We know that it's easier to write new code than to read old code, but we don't consider all of the the knowledge embedded in the old code. While throwing out old code is sometimes useful, we tend to fall back on that choice too quickly, believing that 'new' is faster than spending the time to understand the impact of enhancements and changes. If you have a set of unit tests that covers the vast majority of functionality, then you might be able to make a case. But if you don't, then rewriting part of your system should be the last choice, not the first one.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=150482" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>SQL CLR Configuration - A Head Slapping Moment</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/08/05/sql-clr-configuration-a-head-slapping-moment.aspx</link><pubDate>Tue, 05 Aug 2008 15:52:18 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:150258</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/150258.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=150258</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=150258</wfw:comment><description>&lt;p&gt;This post is basically a reminder to a future me. The client I'm working with right now (basically an ISV) is using SQL Express as part of their project. And included in their database are a number of CLR stored procedures. In other words, the stored procedures are written in C#. While a little unusual, this is not particularly extraordinary.&lt;/p&gt;  &lt;p&gt;The problem arose as I deployed my application from the build server to a freshly installed machine by hand. Moving the binaries was simple (a file copy from a shared directory). Moving the database was nothing more than a backup and restore. But when I ran the application, things didn't work. &lt;/p&gt;  &lt;p&gt;It turns out that I had forgotten an important point, that being that the database setting that enabled the CLR would be 'backedup and restored' along with the database. Given that CLR functionality is turned on using sp_configure (sp_configure 'clr Enabled' to be precise), there was no reason for me to make such an assumption. But I did and the result was a moderate debugging session spent trying to figure out why I was stupid...er...forgetful.&lt;/p&gt;  &lt;p&gt;Anyway, the point is that not every setting that a database depends on is backed up with the database. Some are associated with SQL Server itself and are therefore not backed up at all. I knew that, but sometimes I forget. :)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=150258" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SQL+Tips/default.aspx">SQL Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>A New Recruiting Drive</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/07/29/a-new-recruiting-drive.aspx</link><pubDate>Tue, 29 Jul 2008 16:38:44 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:149662</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/149662.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=149662</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=149662</wfw:comment><description>&lt;p&gt;ObjectSharp has been growing quite steadily for the past little while. But winning a couple of recent contracts have begun to strain our seemingly unending supply of high-end talent. For this reason (and to get some fresh blood and ideas into the company), we are now actively searching for associates. If you're immediately available, we do have a project that could use your skill set (assuming that your skill set includes C#, Windows/Web Forms and SQL Server). But if you're just interested in learning what ObjectSharp has to offer, I'd be happy to answer any questions. Or you can contact (or forward a resume to) our fantastic Service Manager, &lt;a href="mailto:gbourque@objectsharp.com" target="_blank"&gt;Gisele Bourque&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In a few sentences, working with ObjectSharp is a great opportunity to work with some of the top minds in the .NET world using technologies and techniques that are at the forefront of software development. The people are great. The projects are usually quite interesting. And, on top of all of that, you get paid. :) If you'd like the chance to stretch your development wings, it's probably worth having a conversation with us, one way or the other.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=149662" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>ORA-01008 Not All Variables Bound error</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/07/28/ora-01008-not-all-variables-bound-error.aspx</link><pubDate>Mon, 28 Jul 2008 12:46:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:149620</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/149620.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=149620</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=149620</wfw:comment><description>&lt;P&gt;I have recently had the opportunity to work (&lt;A href="http://www.objectsharp.com/cs/blogs/bruce/archive/2004/09/17/883.aspx" target=_blank&gt;&lt;FONT color=#669966&gt;once again&lt;/FONT&gt;&lt;/A&gt;) with Oracle. Specifically, I had to create a mechanism that would, based on configurable settings, update either a SQL Server or an Oracle database. In and of itself, this is not particularly challenging. Not since ADO.NET implemented a provider model using the Db... classes that are part of System.Data. The provider name can be used to generate the appropriate concrete instance of the DbConnection class and away you go.&lt;/P&gt;
&lt;P&gt;While testing out this capability, I ran into this error when the target data source was Oracle. One would think (and I certainly did) was that I had missed out assigning one of the in-line parameters. The text associated with the error certainly gave that impression. And I was, after all, building the SQL statement on the fly. A bug in my logic could have placed a parameter into the SQL and not created a corresponding DbParameter.&lt;/P&gt;
&lt;P&gt;But that was not the case.&lt;/P&gt;
&lt;P&gt;Instead, it was that the value of one of my parameters (a string, as it turned out) was null. Not String.Empty, but null. And when you assign a null value to the parameter, it's as if you didn't bind anything to&amp;nbsp;the parameter, the result being that when executing the query, a nice ORA-01008&amp;nbsp;exception is thrown.&amp;nbsp;The correct way to do the assignment is to set the parameter value to System.DbNull value instead. It would appear that the SQL Server data provider doesn't have this issue, in that the problem only appeared against an Oracle data source. Not a particularly vexing problem, but still it's something to be aware of.&lt;/P&gt;
&lt;P&gt;And a couple of years had passed since my last Oracle post ;)&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=149620" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SQL+Tips/default.aspx">SQL Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category></item><item><title>The Cost of Migrating from VB6</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/07/26/the-cost-of-migrating-from-vb6.aspx</link><pubDate>Sat, 26 Jul 2008 04:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:149464</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/149464.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=149464</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=149464</wfw:comment><description>&lt;P&gt;Recently, a question regarding the cost associated with migrating from VB6 to VB.NET was asked by one of our clients. Since that is a question whose answer has a broader appeal than just to the asker, I thought I would replicate my response here. &lt;/P&gt;
&lt;P&gt;It should be stated up front, however, that I don't normally recommend a migration from VB6 to .NET. This isn't to say that there aren't ways to benefit from the move. It's just that a straight migration typically won't see any of those benefits. Re-architecting an application is generally the only way to get those improvements and a straight migration doesn't accomplish this. And if you already have a working VB6 application, there is little to be gained by creating a VB.NET application that does exactly the same thing. &lt;/P&gt;
&lt;P&gt;Keep in mind that I said "little", not "nothing". While the benefits are greater for redesigning, there are still times where a migration is the right choice. Which is the reason why the question of cost does need to be addressed. &lt;/P&gt;
&lt;P&gt;There are a number of factors that come into play when trying to determine the cost of just migrating a VB6 application to VB.NET. Let me provide an admittedly incomplete list.&lt;/P&gt;
&lt;H3&gt;Code Migration&lt;/H3&gt;
&lt;P&gt;Naturally, the first thing to consider is moving the code from VB6 to .NET. Where there are migration wizards that are available, both from Microsoft and third parties, it is important to realize that there is no way to simply 'wizard' a migration. While the syntax between VB6 and VB.NET are similar, there are many concepts that are different. And no wizard will take a VB6 application and create a VB.NET application that is designed in the most effective manner for .NET. So while you can get an application to be compilable quite quickly, it won't be taking advantage of many of the features of .NET that can improve developer productivity. This is one of the reasons that many companies consider re-writing VB6 applications instead of just migrating them.&lt;/P&gt;
&lt;P&gt;That having been said, it is certainly faster to migrate an application than it is to rewrite. An average developer can produce 500-1000 lines of tested and deployable code in a month. However, that same developer can migrate 35,000 to 40,000 lines of code a month. So to calculate raw cost per line of a migration, figure out how much you pay an average developer in a month and divide by 35,000.&lt;/P&gt;
&lt;H3&gt;Developer Training&lt;/H3&gt;
&lt;P&gt;Of course, migrating the code is only part of the associated cost. Developers have to be retrained to use VB.NET. A typical VB6 developer will take about six months to regain the productivity level in VB.NET that they had in VB6. A junior developer might take 8 months, while a senior developer will take around 4 months. &lt;/P&gt;
&lt;P&gt;Part of the process of getting people up to speed will be training. Depending on the technologies that are being used, anywhere from 10-20 days of in-class training will be needed. A typical breakdown of the topics covered would be 3-8 days of .NET Framework training, 3-5 days of ASP.NET development, 1-2 days of testing. 4-5 days of advanced programming concepts (WCF, Sharepoint, WPF, etc).&lt;/P&gt;
&lt;P&gt;While this might seem like an expensive process, there are hidden costs and lost productivity associated with trying to get developers up to speed 'on the cheap'. There is too much in .NET for a single class to provide all of the necessary information in sufficient depth to be able to use it effectively. The problem is that some organizations (and some developers) will pretend that a 5 day course on .NET is good enough. The developer will end up spending the next 12 months looking up how to do the common tasks that weren't covered in the 5 days and will end up making design decisions that, had they the correct knowledge at the time, would not be made. Both company and developer can spend years trying to correct the bad choices made through inexperience.&lt;/P&gt;
&lt;H3&gt;Preparing the VB6 Application&lt;/H3&gt;
&lt;P&gt;There are a number of common issues that arise during the migration process, issues that can't be addressed by a wizard. These issues generate the large majority of problems that are found when migrating and include such items as&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The default property is no longer used &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;The property/method is not found in VB.NET &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;The property/method is found, but has a slightly different behavior &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;COM functionality has changed &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;If these issues are addressed before the migration (that is, in the VB6 application), it can help speed up the migration process. Each of these issues actually results in a cascade of problems (on the order of 5 VB.NET problems for each instance of a VB6 problem) in the migrated application, so it is worthwhile to spend some time 'fixing' the VB6 application in order to get it ready for migration.&lt;/P&gt;
&lt;P&gt;While there are other considerations involved (is the new application to be web-enabled? is there integration with other legacy applications?, etc.), these items are the largest sources of cost associated with migrating from VB6 to .NET.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=149464" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Bring Your Data to Life with WPF Session</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/07/bring-your-data-to-life-with-wpf-session.aspx</link><pubDate>Fri, 07 Mar 2008 16:39:21 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134858</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134858.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134858</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134858</wfw:comment><description>&lt;p&gt;The premise behind this session is the idea of separation of UI designers and developers. The UI people don't know how to code business rules. But the UI people need to be able to 'try out' the user interface and easily make changes. This is the designer/developer separation that is in the Web space, only in this case, it's for Windows Forms applications.&lt;/p&gt;  &lt;p&gt;For those of you who aren't aware, one of the drawbacks of WPF is the lack of data binding support. This is a significant step back in functionality, if you're used to creating ASP.NET or Windows Forms apps. And it stopped me from using WPF to any great extent.&lt;/p&gt;  &lt;p&gt;The session starts out slow, talking about the rationale behind data binding. This is something that I would expect most developers to be aware of, although if he's including designers in his target audience, then I can understand the digression. &lt;/p&gt;  &lt;p&gt;Databinding in a WPF form can be done through the latest version of Expression Blend. A new Data pane allows for the selection of a data source (a class, for example). Once the data source has been specified, the property sheet for a control allow the mapping between the control's property and the data source's property to be made. This is a familiar process, although very new to WPF and Expression Blend.&lt;/p&gt;  &lt;p&gt;WPF includes the concept of a value converter. This is a function that operates on a bound value with the result from the conversion being displayed. As well, the data binding appears to be hooked up to the property change notification mechanism, in that if a property is programmatically changed, the updated value appears in the form. &lt;/p&gt;  &lt;p&gt;There is also a mechanism (INotifyCollectionChanged) which raises an event when the collection is changed. The idea of 'change' in a collection is the addition or removal of an item from the collection. WPF data binding is able to detect and respond to these events. &lt;/p&gt;  &lt;p&gt;WPF has replaced the ObjectDataSource class with an ObjectDataProvider. Without seeing the details, I'm guessing there is a lot of similarity in terms of functionality, if not the details. &lt;/p&gt;  &lt;p&gt;In the WPF itself, the binding notation looks like the following&lt;/p&gt;  &lt;p&gt;&amp;lt;TextBox Test=&amp;quot;{Binding Path=Sun.Name, Source={StaticResource solarSystem}}&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p&gt;This notation takes the Name property of the Sun object found in the ObjectDataProvider named solarSystem. A little cumbersome, but since it's definable through Expression Blend, that's only an issue for those of you who code in Notepad 2008. &lt;/p&gt;  &lt;p&gt;As part of the data binding mechanism, there is the concept of a data template. This greatly resembles a template within ASP.NET, where different fields and controls are displayed based on the mode of the control. One twist is that WPF data templating can be defined based on the type of object being displayed. Within the same list box, a collection of Products will appear with different fields then a collection of Customers, even though the underlying WPF is the same. &lt;/p&gt;  &lt;p&gt;The final reveal for the demo is a list box that displayed the information about a solar system not as a list of planet names, but as a graphical representation of the solar system orbit with the images of the planets and the positioning away from the sun based on properties from the object. The cool part is that there is no change to the underlying object necessary to change from a drop down list of properties to the graphical view. Only the XAML needs to be modified. But again, that is the power of WPF.&lt;/p&gt;  &lt;p&gt;One word of warning. Not all of the advances in WPF are necessarily available in Silverlight. A concept called a CollectionView was explicitly called out as not being part of Silverlight 2. So if you are developing for the Silverlight market, make sure that the data binding techniques you use are supported before you spend time on it.&lt;/p&gt;  &lt;p&gt;WPF provides support for a hierarchical data template. This template because useful when you are trying to create a tree view visualization for your data. It's similar to the list box data template in concept, but the level within the hierarchy becomes part of the mechanism for distinguishing between the different data fields and styles that are used.&lt;/p&gt;  &lt;p&gt;It looks to me like data binding for WPF has finally moved towards the standards that we have been used to. The presentation didn't cover error providers and error notification, but a slide at the end suggests that it is, using the IDataErrorInfo interface.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134858" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX08/default.aspx">MIX08</category></item><item><title>Steve Ballmer Keynote - 2</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/06/steve-ballmer-keynote-2.aspx</link><pubDate>Thu, 06 Mar 2008 21:08:17 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134666</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134666.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134666</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134666</wfw:comment><description>&lt;p&gt;Continuing from the previous post&lt;/p&gt;  &lt;p&gt;Guy commented on how Microsoft is different. Responsive, helpful and a change from what Microsoft's image has been historically.&lt;/p&gt;  &lt;p&gt;Some questions from the audience&lt;/p&gt;  &lt;h3&gt;On Adobe&lt;/h3&gt;  &lt;p&gt;They are a big competitor in some areas. Specifically in the Silverlight and .NET vs Flex and Flash arena. There is no expectation that they are going to &amp;quot;go away&amp;quot;. Will continue to work with Adobe where it makes sense.&lt;/p&gt;  &lt;h3&gt;On Internet Explorer not moving at the speed of .NET&lt;/h3&gt;  &lt;p&gt;Many innovations, including the browser, were tied to the &amp;quot;next O/S after XP&amp;quot;. Microsoft .NET was not. It was because they took dependencies on the O/S. That will not happen in the future. Future IE will incubate the innovations outside of the O/S and move them into the O/S once they have been proved out&lt;/p&gt;  &lt;h3&gt;On the PHP applications that Yahoo has&lt;/h3&gt;  &lt;p&gt;There will be some refactoring of the search, ad and email technologies when Yahoo and Microsoft get together. Some technology will come from Microsoft. Some will come from Yahoo. &lt;/p&gt;  &lt;h3&gt;On the Synergies between Microsoft and Yahoo&lt;/h3&gt;  &lt;p&gt;Scale is an advantage in the search game. More search = more ads = higher bids on ads. The more ads you have, the larger the number of ads that can be inserted into the results of a search. Google has more ads that either Yahoo or Microsoft. The merger will help scale out in this market.&lt;/p&gt;  &lt;h3&gt;On the Virtualization Server Licensing Scheme&lt;/h3&gt;  &lt;p&gt;The question was regarding the licensing cost for virtualization to be able to compete with Amazon's computing in a cloud (ECC or EC2, I can't remember the acronym). The answer was that Microsoft has plans to provide a similar service.&lt;/p&gt;  &lt;h3&gt;On Silverlight on the iPhone&lt;/h3&gt;  &lt;p&gt;Microsoft would love to get Silverlight on every mobile platform they can. There is currently no free runtime license for apps on the iPhone. Apple apparently wants 30% of all of the revenue generated through the iPhone. So while it would be nice to have, the expectation is that developers are unlikely to bite. And it was suggested that perhaps Apple is not being embracing of external developers.&lt;/p&gt;  &lt;h3&gt;On Silverlight and Microsoft applications&lt;/h3&gt;  &lt;p&gt;The question is whether Silverlight will become part of Microsoft apps, such as Hotmail. As the product cycle for the relevant products is appropriate, Silverlight will become part of the deliverable. But only on those technologies where appropriate. MSN Messenger was called out specifically as not a likely choice.&lt;/p&gt;  &lt;h3&gt;On HD DVD vs Blu Ray&lt;/h3&gt;  &lt;p&gt;Microsoft doesn't make peripherals. They support the devices where the demand is and will continue to do so. In the long term, the format isn't that important, as content is more likely to be delivered over the network. &lt;/p&gt;  &lt;h3&gt;On Enterprise adoption of social networking&lt;/h3&gt;  &lt;p&gt;The ways in which people interact with each other within the corporation is changing. Sharepoint provides collaboration services, so there is already some knowledge about how people interact. The key is to leverage these areas to provide more 'social-like' capabilities. This area is early technology, so there will be advances in the future.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134666" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category></item><item><title>Steve Ballmer Keynote - 1</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/06/steve-ballmer-keynote-1.aspx</link><pubDate>Thu, 06 Mar 2008 20:42:03 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134664</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134664.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134664</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134664</wfw:comment><description>&lt;p&gt;The keynote is actually an interview between Guy Kawasaki (as interviewer) and Steve (as interviewee). A number of interesting points.&lt;/p&gt;  &lt;h3&gt;Regarding competing with Google&lt;/h3&gt;  &lt;p&gt;Of the four areas in which Microsoft is focused, Google is really only present in one of them (on-line ads). But the on-line ad space is expected to be the next big thing.&lt;/p&gt;  &lt;h3&gt;On why he keeps working&lt;/h3&gt;  &lt;p&gt;This is the answer that everyone should give. He:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Loves what he does&lt;/li&gt;    &lt;li&gt;Works with smart and energetic people&lt;/li&gt;    &lt;li&gt;Enjoys the challenge&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;From personal experience, this should be what everyone strives for.&lt;/p&gt;  &lt;h3&gt;On the place of XBox in the Microsoft world&lt;/h3&gt;  &lt;p&gt;Steve put it into perspective. XBox has 25 million users world wide who are passionate about the products that Microsoft creates. But there are 1 billion Office users. It makes sense to focus efforts on driving passions appropriately&lt;/p&gt;  &lt;h3&gt;On Web and Windows forms technologies&lt;/h3&gt;  &lt;p&gt;Microsoft is trying to blur the boundaries between Web and Forms, in terms of capabilities. Apparently 1.5 million Silverlight downloads per day. WPF currently has a broader reach because of Windows Update&lt;/p&gt;  &lt;h3&gt;On Apple's MacBook Air&lt;/h3&gt;  &lt;p&gt;&amp;quot;My laptop is lighter&amp;quot;, &amp;quot;It's missing half the features of my laptop&amp;quot;, &amp;quot;Where's the DVD?&amp;quot;, &amp;quot;We'll get rid of this (the Air that Guy has) and get you a real machine&amp;quot;&lt;/p&gt;  &lt;h3&gt;On Vista&lt;/h3&gt;  &lt;p&gt;The number one issue for Vista is application compatibility and driver compatibility. Made choices to create a secure O/S. The result is that compatibility is hurt. As drivers and applications are updated, the compatibility issues have decreased. With SP1, the uptake in the business market will increase.&lt;/p&gt;  &lt;h3&gt;On Microsoft's Skill Set&lt;/h3&gt;  &lt;p&gt;Microsoft is trying to focus on two skill sets: consumer devices and business platforms. Most companies only attempt to create one. Microsoft is lucky enough to be able to focus on two, with a third and fourth still a possibility&lt;/p&gt;  &lt;h3&gt;On Social Networking&lt;/h3&gt;  &lt;p&gt;People will continue to use the Internet to keep in touch, to find friends, to connect with people. It is unlikely that any one company/website/technology will be able to stay on top forever.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134664" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category></item><item><title>Real World AJAX with ASP.NET Session</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/06/real-world-ajax-with-asp-net-session.aspx</link><pubDate>Thu, 06 Mar 2008 16:26:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134642</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134642.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134642</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134642</wfw:comment><description>&lt;P&gt;I have to give credit to Nikhil Kothari. He just ran a session the way that I like to see sessions run. As I read the title and abstract for the session, I was expecting not much in the way of new information. I actually attended the session mostly because it was the only one in this time slot that might be of interest.&lt;/P&gt;
&lt;P&gt;Nikhil started out with just some basic stuff on AJAX. But very quickly he got past that and the session became very interesting. The idea is that if you plan on using AJAX in a "real" application, there are a number of issues that need to be address. Simple issues to identify, but complex to deal with. For example:&lt;/P&gt;
&lt;H3&gt;History&lt;/H3&gt;
&lt;P&gt;Say you have a page that makes a number of AJAX calls, updating the screen each time. Then you click on the back button. The typical action is to go to the page prior to the initial view of the current page. But what you generally what to do is go to the results from the previous AJAX call.&lt;/P&gt;
&lt;P&gt;The solution is to use an AJAX UpdateHistory control. More details can be found on Nikhil's weblog &lt;A href="http://www.nikhilk.net/UpdateControls.aspx" target=_blank&gt;here&lt;/A&gt;. It requires some work by the developer to determine when the browser history needs to be updated, but if you put the effort in, your users will love you. OK, not really. This is one of those features that users will ignore if it's there, because your site is working as they think it should. But if you don't have it, they will hate you. It's almost the same thing.&lt;/P&gt;
&lt;H3&gt;Indexability&lt;/H3&gt;
&lt;P&gt;If you have a page that uses AJAX to retrieve and display information, you have a problem with making that page appear in the appropriate place within Google. After all, Google depends on static data for its indexing.&lt;/P&gt;
&lt;P&gt;The pattern that Nikhil is suggesting is to create a static page that contains all of the data. Make the data static on page. Put the data into a hidden div. Then create a separate frame and use script to pull the data from the hidden div into the frame. When viewed normally, the data will appear in the frame. When crawled by a spider, the script is not executed, so the data is just available for indexing. This pattern might not work in all situations, but there are enough to make it worthwhile being aware of. Again, a blog post (&lt;A href="http://www.nikhilk.net/AjaxSEO.aspx" target=_blank&gt;here&lt;/A&gt;) provides some additional details.&lt;/P&gt;
&lt;P&gt;Overall, a nice presentation with some useful takeaways.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134642" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category></item><item><title>Silverlight 2 - Fundamentals</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/silverlight-2-fundamentals.aspx</link><pubDate>Wed, 05 Mar 2008 23:06:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134571</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134571.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134571</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134571</wfw:comment><description>&lt;P&gt;I'm sitting through the first part of the Building RIA using Silverlight 2 session. The starting point is some of the new, but quite fundamental elements of Silverlight 2&lt;/P&gt;
&lt;P&gt;First off, the schedule of releases at the moment are:&lt;/P&gt;
&lt;P&gt;Beta 1 = today, with a non-commercial go-live license&lt;/P&gt;
&lt;P&gt;Beta 2 = Q208, including a commercial go-live license&lt;/P&gt;
&lt;P&gt;Silverlight 2 now includes a TextBox (only about a year too late). &lt;/P&gt;
&lt;P&gt;Silverlight works in a sandbox. It has access to local storage through isolated storage. But basically consider Silverlight applications to have the same level of local storage as your current web browser.&lt;/P&gt;
&lt;P&gt;Silverlight supports cross-domain requests, but the target domain needs to be configured (via a policy file) to accept requests from Silverlight.&lt;/P&gt;
&lt;P&gt;Silverlight has a number of classes available to allow a number of easy mechanisms to make a request to the current or a different domain. And those requests can be made both synchronously and asynchronously.&lt;/P&gt;
&lt;P&gt;A large number of intrinsic controls are now available. And the controls are very skinable.&lt;/P&gt;
&lt;P&gt;There is support to one- or two-way data binding. The binding mechanism seems to be quite similar to ASP.NET, although the syntax is a little different.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134571" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category></item><item><title>Scott Guthrie Keynote - 3</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/scott-guthrie-keynote-3.aspx</link><pubDate>Wed, 05 Mar 2008 18:04:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134543</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134543.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134543</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134543</wfw:comment><description>&lt;P&gt;Silverlight 2 beta includes&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Multi-language support - VB, C#, Iron Ruby, Iron Python&lt;/LI&gt;
&lt;LI&gt;WPF UI, including data binding&lt;/LI&gt;
&lt;LI&gt;Networking stack - REST, SOAP, WS-*, sockets. And cross-domain stuff is supported&lt;/LI&gt;
&lt;LI&gt;Integrated Data Support - LINQ, and the ability to cache data across browser sessions&lt;/LI&gt;
&lt;LI&gt;High performance&lt;/LI&gt;
&lt;LI&gt;Small download, fast install - 4.3 MB download, no .NET Framework download required, working with Novell on a Linux implementation&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Includes a lot of built-in controls&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Sliders&lt;/LI&gt;
&lt;LI&gt;Calendars&lt;/LI&gt;
&lt;LI&gt;DatePicker&lt;/LI&gt;
&lt;LI&gt;DataGrid&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Built-in controls are shipped &lt;U&gt;with source&lt;/U&gt; included in the beta. Open license allows for modification and resale.&lt;/P&gt;
&lt;P&gt;The built-in controls are now completely skinable, including custom animations.&lt;/P&gt;
&lt;P&gt;Also including unit testing capability for Silverlight controls. Around 1200 unit tests included for the built-in controls.&lt;/P&gt;
&lt;P&gt;They are also shipping preview versions of Silverlight tools for VS2008 and Expression.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134543" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category></item><item><title>Scott Guthrie Keynote - 2 - Silverlight and the Olympics</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/scott-guthrie-keynote-2-silverlight-and-the-olympics.aspx</link><pubDate>Wed, 05 Mar 2008 17:55:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134542</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134542.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134542</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134542</wfw:comment><description>&lt;P&gt;Silverlight is a major part of the Olympics 2008 Site&lt;/P&gt;
&lt;P&gt;2200 hours of live streaming coverage over 22 days. This, plus the 1100 hours of content on the 5 NBC broadcast networds, will be made available as Video On Demand.&lt;/P&gt;
&lt;P&gt;Also, through Silverlight, you will be able to see live streamed coverage of all 34 sports. As part of the live coverage, you can&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;rewind and rewatch the stream&lt;/LI&gt;
&lt;LI&gt;view pop-up alerts of other activities in other sports.&lt;/LI&gt;
&lt;LI&gt;share link to the live coverage with others. &lt;/LI&gt;
&lt;LI&gt;include picture in picture (PiP) of multiple sports&lt;/LI&gt;
&lt;LI&gt;view multiple live streams of the same sports, even PiP&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Very cool, especially if you're a fan of non-traditional sports. But I wonder if such a service will be available outside of the US. &lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134542" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category></item><item><title>Scott Guthrie Keynote - 1</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/scott-guthrie-keynote-1.aspx</link><pubDate>Wed, 05 Mar 2008 17:40:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134539</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134539.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134539</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134539</wfw:comment><description>&lt;P&gt;Silverlight 2 Beta 1 is available for download after the keynote&lt;/P&gt;
&lt;P&gt;Changes include enhancements for media. Sorry, but this section includes terms that don't mean that much to me. High Def? I thought he was a rapper. ;) But let me make some notes&lt;/P&gt;
&lt;P&gt;Adaptive Streaming - The Silverlight client can adaptively determine the bandwidth between the client and the server and set the bit-rate appropriately. And can change on-the-fly, if necessary&lt;/P&gt;
&lt;P&gt;Total Cost of Ownership - Windows Media Services 2008 is free. Provides 3x the scalability of other services, yet maintains a high level of reliability. Also, there is support for progressive downloading, including bit-rate throttling. Progressive downloading means that the initial 10s or so of content is bursted out, but beyond that it just maintains the 10s buffer instead of trying to get as much content as you can to the client as quickly as you can.&lt;/P&gt;
&lt;P&gt;Business Opportunities - Integration of advertising into the Silverlight experience. Jon Harris demos a Silverlight Advertising Template. Template is a Visual Studio 2008 project template and the wizard used to create it. The result is a project that includes a fair bit of commonly used Silverlight functionality&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134539" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category></item><item><title>Dean Hachamovitch Keynote - 1</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/dean-hachamovitch-keynote-1.aspx</link><pubDate>Wed, 05 Mar 2008 17:19:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134537</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134537.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134537</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134537</wfw:comment><description>&lt;P&gt;Dean is responsible for IE 8. And he is talking about 8 points (because developers can count higher than 3). If you've given presentations, you'll understand that reference.&lt;/P&gt;
&lt;P&gt;1. CSS 2.1&lt;/P&gt;
&lt;P&gt;There are issues with CSS support in IE7. IE8 addresses these by focusing on full support for CSS 2.1 standard.&lt;/P&gt;
&lt;P&gt;2. CSS Certification&lt;/P&gt;
&lt;P&gt;Getting certified is the best way to ensure that all browsers will render standard CSS correctly. Microsoft has provided a large number of test cases to include in the certification process. The problem will be backwards compatibility. There are instances where pages look gook in IE7, but don't look good in Firefox. Because IE8 is more CSS compliant, it also looks bad in IE8. There is, however, an IE7 compatibility more (under control of the page developer) to force IE8 to work like IE7&lt;/P&gt;
&lt;P&gt;3. Performance&lt;/P&gt;
&lt;P&gt;They have improved JS script performance by a factor of approx 2.5 times. Not always as good as Firefox/Mozilla, but a great improvement over IE7. And they are still working on it.&lt;/P&gt;
&lt;P&gt;4. HTML 5 Support&lt;/P&gt;
&lt;P&gt;The back button doesn't work well with AJAX functionality. Sometimes 'Back' doesn't get you what you expect. Support for HTML 5 means (among other things) an interaction that is more like what the use expects&lt;/P&gt;
&lt;P&gt;Also, HTML 5 support includes network awareness. A connection gets lost and the page responds, including the ability to modify the content of the page.&lt;/P&gt;
&lt;P&gt;5. Developer Tools&lt;/P&gt;
&lt;P&gt;IE8 includes built-in developer tools. Includes a script debugging window, complete with breakpoints, watches, an immediate window, etc.&lt;/P&gt;
&lt;P&gt;Also includes the CSS debugging info similar to what is found in Visual Studio 2008. When you select a particular element in the document, you can see the styles which are applied to the element. This allows 'wrong' style values to be quickly identified with regards to their source.&lt;/P&gt;
&lt;P&gt;6. Activities&lt;/P&gt;
&lt;P&gt;Activities are context-sensitive bits on a web page. Select text and quickly get to a map of the address it represents. Or find the selected item on Ebay. "Quickly' invokes a right click or selecting from an Activities menu that is similar in location to the Exception Helper in Visual Studio.The context for the selection is provided through an architecture known as OpenService format. It is called the OpenService Specification and Microsoft has made it available for comment.&lt;/P&gt;
&lt;P&gt;7. WebSlices&lt;/P&gt;
&lt;P&gt;The Web Slice is a part of a web page that contains basically a summary (a slice) of another web page. Provides quick, pop-up summary of a separate web page. A summary of a Facebook friend can be&amp;nbsp; retrieved through either a context-sensitive click or a toolbar click. And the current page is not left.&lt;/P&gt;
&lt;P&gt;The is a WebSlices spec that contains the details.&lt;/P&gt;
&lt;P&gt;8. IE 8 Beta 1 is now available. Or at least, after the keynote.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134537" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX08/default.aspx">MIX08</category></item><item><title>Ray Ozzie Keynote - 2</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/ray-ozzie-keynote-2.aspx</link><pubDate>Wed, 05 Mar 2008 16:53:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134536</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134536.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134536</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134536</wfw:comment><description>&lt;P&gt;The idea behind the concept of connected devices is to create software to provide a personal device mesh using the Internet as a hub. By having a central personal data store, complete with synchronization, the devices will become much more a part of 'you'. A current research team has been working on this starting with the PCs. &lt;/P&gt;
&lt;P&gt;A second scenario is connected entertainment devices. The vision includes having DRM be transferable between your own devices. Purchase music and be able to listen to it on your computer, your Zune and your XBox without requiring additional licenses.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://workspace.officelive.com/" target=_blank&gt;Office Live Workspace&lt;/A&gt;, opened up to a broad public beta as of yesterday, has a major role in the connectivity picture. You will be able to tag Office documents and make them available to people who are interested in what you have to offer.&lt;/P&gt;
&lt;P&gt;You will be able to run Exchange, Sharepoint and Office Communications Server in either the typical, on-premise server or as a hosted service (called Exchange Services, Sharepoint Services, and, well, you get the idea).&lt;/P&gt;
&lt;P&gt;He also touched on SQL Server Data Services as a developer database in the cloud. I'll have to check that out.&lt;/P&gt;
&lt;P&gt;And&amp;nbsp; now, on to Scott Guthrie.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134536" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX08/default.aspx">MIX08</category></item><item><title>Ray Ozzie's Keynote - 1</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/ray-ozzie-s-keynote-1.aspx</link><pubDate>Wed, 05 Mar 2008 16:41:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134535</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134535.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134535</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134535</wfw:comment><description>&lt;P&gt;If you want to know why Microsoft made the play for Yahoo, look no further than one of the three main focuses that Ray Ozzie sees for the near future. He expects on-line ad revenues to double to $80B annually over the next two years. And to not make such a play is to basically concede the bulk of the market to Google (my opinion, not his)&lt;/P&gt;
&lt;P&gt;The second prong in Microsoft's strategy is based on the idea that the Internet has become a hub of a large number of devices. The list goes from PC to gaming systems to cell phones to cars. The idea of the Web is to bring together a collection of personal devices. And one of the guiding principles of Microsoft's software offerings is to provide a mechanism to facilitate this future.&lt;/P&gt;
&lt;P&gt;The business side of the "Internet is a hub" is being brought out in virtualization. Current software will be "refactored" to support virtualization in many different ways. &lt;/P&gt;
&lt;P&gt;"Small pieces loosely joined" (a Weinberg quote, I believe) is the new motto.&lt;/P&gt;
&lt;P&gt;More to come...&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134535" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX08/default.aspx">MIX08</category></item><item><title>Looking for Clues</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/05/looking-for-clues.aspx</link><pubDate>Wed, 05 Mar 2008 14:06:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134377</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134377.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134377</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134377</wfw:comment><description>&lt;P&gt;So one of the question about MIX is whether there will be a 'surprise' announcement. Last year, it was the Windows Live Streamer that allowed people to store video in the cloud and have it served to your site.&lt;/P&gt;
&lt;P&gt;I don't think the availability of Silverlight 2 qualifies. There are many sessions that have a Silverlight 2 label and in the hands-on lab section, I was told that the Silverlight 2 labs that are in the list won't be available until after the keynote. So not much of a surprise there.&lt;/P&gt;
&lt;P&gt;However, there is a block of hands-on lab computers that were not active yesterday. And there is a rumour of a session titled "X talking about Y" that will be dropped into one of the open session blocks. Both of these suggest that some announcement in the tool realm will be dropped sometime in the next couple of hours. Stay tuned.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134377" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Canadian+MIXers/default.aspx">Canadian MIXers</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/MIX08/default.aspx">MIX08</category></item><item><title>Off to MIX</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2008/03/04/off-to-mix.aspx</link><pubDate>Tue, 04 Mar 2008 21:46:11 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:134317</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/134317.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=134317</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=134317</wfw:comment><description>&lt;p&gt;First off, let me comment on the dearth of posts for the last few months. As always, it has to do with my workload. I have been working heads down on a major project for client for about six months. On top of that, my evenings are spent co-authoring the Training Kit for the WCF exam. The result is that I don't have a lot of time left for extra-curricular writing, which is what this blog is. I expect both of those to change shortly, so there should be more posts in the coming months.&lt;/p&gt;  &lt;p&gt;The client project is actually one of the slickest that I've worked on. It uses a ton of cutting edge technologies, including WCF, the component application block (CAB) and even WPF. It's that last piece that's the most interesting because it's the first time that I've seen WPF used in a line of business application in the wild. My colleague, Rob Burke, is the author of this coolness. He demoed it at our At the Movies presentation and has blogged about it &lt;a href="http://robburke.net/2008/02/07/wpf-at-the-movies-follow-up-links/" target="_blank"&gt;here&lt;/a&gt;. Take a look if you get the chance. It's well worth seeing.&lt;/p&gt;  &lt;p&gt;But all of this is beside the point of this post. At the moment, I'm on a place heading to Las Vegas for the MIX '08 conference. I'm expecting a ton of blogging activity this trip, so get ready for a flurry of posts over the next week as I try to keep up with what's happening.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=134317" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Can't Save Test Results?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/10/02/can-t-save-test-results.aspx</link><pubDate>Tue, 02 Oct 2007 12:52:04 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:88308</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/88308.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=88308</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=88308</wfw:comment><description>&lt;p&gt;For some bizarre and unknown reason, I started getting the message "Can't save results of the run since ResultFilePath is null" when I was trying to run a test through the VSTS Test Manager. A quick Google search revealed the suggestion that a ResultFilePath element be added to the PropertyGroup tag in your solution file. That didn't have any affect for me.&lt;/p&gt; &lt;p&gt;It turned out that my testrunconfig file went missing. It can be added to the solution by right-clicking on the solution in Solution Explorer and adding a new item. Still, when I added the testrunconfig file back into the solution, the problem still existed. What it took was to close and reopen the solution along with adding the testrunconfig. Now life is good once again and testing can continue.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=88308" width="1" height="1"&gt;</description></item><item><title>Anchor and AutoSize Properties (on GroupBox, at least)</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/08/24/anchor-and-autosize-properties-on-groupbox-at-least.aspx</link><pubDate>Fri, 24 Aug 2007 21:31:14 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:80818</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/80818.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=80818</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=80818</wfw:comment><description>&lt;p&gt;I had a weird problem earlier today involving the width of a GroupBox. I had dropped a GroupBox onto a panel. The panel was configured to automatically expand and contract as the size of the form is modified (using the Anchor property). I set the Anchor property on the GroupBox expecting it to be displayed in the same manner. But that was not to be&lt;/p&gt; &lt;p&gt;After a fair bit of fiddling around, I stumbled upon the problem. AutoSize. I had set AutoSize to true because I was dynamically adding controls that were to be displayed in the GroupBox. That setting, combined with the AutoSizeMode set to Grow and Shrink, let the control grow as I added more items. &lt;/p&gt; &lt;p&gt;What I didn't count on was that AutoSize also (appears) to control the horizontal size as well as the vertical. As a result, in order to get GroupBox to expand along with the size of the form, I had to turn AutoSize off and manually size the GroupBox as more items were added.&lt;/p&gt; &lt;p&gt;I am, however, open to other suggestion, should someone have one to offer.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=80818" width="1" height="1"&gt;</description></item><item><title>GetType on a Dynamically Loaded Assembly</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/08/24/gettype-on-a-dynamically-loaded-assembly.aspx</link><pubDate>Fri, 24 Aug 2007 04:58:42 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:80726</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/80726.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=80726</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=80726</wfw:comment><description>&lt;p&gt;The application on which I'm working has the opportunity to dynamically load and assembly. Later in the application, one of the types from the loaded assembly need&amp;nbsp;be retrieved using GetType. More specifically, the GetType was performed using a fully qualified type name (including the name of the assembly). But the GetType failed. Naturally, this begged the question of why GetType didn't find the type in the dynamically loaded assembly.&lt;/p&gt; &lt;p&gt;Ultimately, it comes down to how GetType operations. If you provide a string of the form "A,C" (for assembly,class), then GetType operates as if it were performing Assembly.Load(A).GetType(C).&lt;/p&gt; &lt;p&gt;Notice the Load method that is in there. If A exists in the default probing path, then there is not problem. But A doesn't include a fully qualified path. And if the assembly was originally loaded from a location other then the executable's directory, GetType will fail.&lt;/p&gt; &lt;p&gt;There are a couple of solutions to the problem.&lt;/p&gt; &lt;p&gt;1 - Put the assembly in the GAC. Then Load will find the assembly and GetType will work&lt;/p&gt; &lt;p&gt;2 - Add a codebase element to the config file. This element can be used to control the probing path, but you cannot probe outside of the executable's directories and subdirectories. The codebase element (which has to be created for each DLL) allows you to specify the full path to the assembly.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=80726" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category></item><item><title>An Old Problem is New Again</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/08/22/an-old-problem-is-new-again.aspx</link><pubDate>Wed, 22 Aug 2007 14:34:17 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:80395</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/80395.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=80395</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=80395</wfw:comment><description>&lt;p&gt;I ran into a problem yesterday that brought back memories. And not the good kind of memories either.&lt;/p&gt; &lt;p&gt;I'm doing some work using TypeConverters. In particular, I'm creating a Windows Forms control that functions in a manner similar to a PropertyGrid, but with a user interface that looks more like a typical Windows form. You know, with labels, and text boxes. Because this is a generic control (that is, the fields which get displayed depends on the object associated with the control), I'm doing a lot of reflection to retrieve the properties that are required. And I'm using reflection (the GetValue/SetValue) to interact with the object. This last part (the SetValue method in particular) means that I'm using type converters to move the string values that are in the text boxes into the actual properties themselves.&lt;/p&gt; &lt;p&gt;Now type converters are quite useful. They expose a ConvertFromString method that (not surprisingly) takes a string value and converts it to a value of the associated type. If the string is not valid for the destination type, an exception is thrown.&lt;/p&gt; &lt;p&gt;Problem 1: the raised exception is System.Exception. I have no idea why the exception surfaced from ConvertFromString is an Exception. The InnerException is a FormatException, which is the type of exception that I would have expected. But no, ConvertFromString throws Exception. This forces me to use a pattern that I loathe - try {...} catch (Exception) { }&lt;/p&gt; &lt;p&gt;Whenever I teach, I always harp on this. You should (almost) never catch the general Exception object. You should only catch specific Exceptions. But because of ConvertFromString, I have to add to my list of cases where catch (Exception) is required. &lt;/p&gt; &lt;p&gt;But why should this matter, you ask. TypeConverters exposes an IsValid method. You should be able to check for the validity of the string value prior to calling ConvertFromString. This would completely eliminate the need to catch any exceptions at all. And it's the best practice/recommended/ideal way to go.&lt;/p&gt; &lt;p&gt;Problem 2: Int32Converter.IsValid("bad") returns true. &lt;/p&gt; &lt;p&gt;Think about that last one for a second.&lt;/p&gt; &lt;p&gt;According to the type converter for Int32, the string 'bad' is a valid integer value. In my world, not so much. If you spelunk the various classes in .NET Framework, you find out that IsValid is supposed to be overridden in the various converter classes. But the numeric classes don't bother to do so. As a result, the IsValid that actually services my request just returns a true regardless of whether the string is valid or not.&lt;/p&gt; &lt;p&gt;What's worse, this is a known bug that will never be resolved. Apparently to make IsValid work for Int32Converter is considered a breaking change. &lt;/p&gt; &lt;p&gt;So my suggestion (courtesy of Dave Lloyd) is to add a new method to the TypeConverters. Call it IsReallyValid. IsReallyValid could then be implemented properly without the breaking change. It could take the CultureInfo&amp;nbsp;object necessary to truly determine whether a string is valid. For the base type converter, it could simply return a true. &lt;/p&gt; &lt;p&gt;Heck, let's go a step further and mark IsValid as being Obsolete. That would force people to move to IsReallyValid and correct any problems in their applications. And maybe, in a couple of versions, Microsoft could reintroduce a working version of IsValid and mark IsReallyValid as being obsolete. In this way, four versions from now (that's about 10 developer years), IsValid will work the way it's supposed to (and everyone would expect it to).&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=80395" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>Looking for Mr (or Ms) GoodDeveloper</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/07/16/looking-for-mr-or-ms-gooddeveloper.aspx</link><pubDate>Mon, 16 Jul 2007 22:01:40 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:71658</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/71658.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=71658</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=71658</wfw:comment><description>&lt;p&gt;Business has been booming of late at ObjectSharp. Don't know whether it's the weather or the business cycle, but our recent company barbeque had more new faces that I've seen in many years. And we haven't lost any of the old faces either. &lt;/p&gt; &lt;p&gt;And yet it doesn't seem to end. At the moment, we're looking to add some consultants to our team. Specifically, we have the need for someone with Windows Forms experience, either in creating commercial-grade user interfaces on their own or with the CAB application block. &lt;/p&gt; &lt;p&gt;If you (or someone you know) has that experience and is looking to join a fun team of top-notch developers, drop me your (or your friend's) resume. You'll get a chance to work on projects that use cutting edge technology. You'll learn about (and sometimes use) technologies that aren't yet available. And, if you have the interest, we have six MVPs on staff to help you get your own designation.&lt;/p&gt; &lt;p&gt;If you don't fit into this skill set, fret not. There will be others coming along in the very near future. Just keep your eye tuned to this blog.&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=71658" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Personal/default.aspx">Personal</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Relieving File in Use Problems</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/06/18/relieving-file-in-use-problems.aspx</link><pubDate>Mon, 18 Jun 2007 04:54:44 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:61501</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/61501.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=61501</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=61501</wfw:comment><description>&lt;p&gt;It's quite possible this is old news to people, but it took me more than a couple of minutes to find the solution. I was using the FromFile method on the Image class to create a new Image object. When I was done with the Image, I needed to move the file. But it turns out that the file was still 'being used by another process'.&lt;/p&gt; &lt;p&gt;The solution is simple, but it didn't come immediately to mind because I'm so used to basically ignoring the scope of variables. The trick is to call Dispose immediately rather than waiting for garbage collection to do its thing. Once Dispose has been invoked, you can manipulate the underlying image file as you need to.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=61501" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>Connection Strings and TableAdapters Revisited</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/06/05/connection-strings-and-tableadapters-revisited.aspx</link><pubDate>Wed, 06 Jun 2007 00:25:37 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:54797</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/54797.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=54797</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=54797</wfw:comment><description>&lt;p&gt;In a previous &lt;a href="http://objectsharp.com/cs/blogs/bruce/archive/2007/04/26/a-big-strike-against-tableadapters.aspx" target="_blank"&gt;post&lt;/a&gt;, I had ranted about an issue that I had regarding connection strings and TableAdapters. Since that time, I have dug deeper into the problem and identified what my problem was. And I have a suggestion to help keep it from happening.&lt;/p&gt; &lt;p&gt;First off, it's important to understand how the particular project was structured. It was a Web application and like all good ASP.NET developers, I had segregated various pieces of functionality into different tiers. Specifically, I have an assembly which contains the data access code. It is in this tier that the TableAdapters were being used.&lt;/p&gt; &lt;p&gt;When you use the designer to create the TableAdapter, you have the option to put the connection string into the configuration file. The person who created this assembly (it wasn't me) did exactly that. Which resulted in an app.config file being created in my data access assembly's project. &lt;/p&gt; &lt;p&gt;So now it comes time for me to use the data access assembly. While I have&amp;nbsp;web.config file, complete with (what I thought) was the correct connection string, the name I gave to the string did not match what the TableAdapter had created automatically. This is the beginning of the problems. As I go through the testing, all appears to be working exactly as expected. But now I come to deploy the application. &lt;/p&gt; &lt;p&gt;After deployment, I get the application 'pausing' for about 30-45 seconds followed by an 'unable to connect to the database' message. I check the web.config and see the (still badly named) connection string has been modified appropriately. So I can't figure out why the application can't connect to the server. And I eventually find out the name of the connection string is incorrect. This is where the rant came in. &lt;/p&gt; &lt;p&gt;But the question that I was too relieved to ask at the time was "which server could the application not connect to". After I had cooled down, I started looking. And it turns out that it was trying to connect to my development database. Since I had changed the connection string through the configuration file, I couldn't figure out why the application would even &lt;em&gt;know&lt;/em&gt; about the development database. Until I found it. My development connection string was embedded in the TableAdapter code. It was set up as the default value, so that if the connection string couldn't be found by name, it would just use the original string.&lt;/p&gt; &lt;p&gt;Now I have a couple of problems with this approach. First off, it kept me from noticing that I didn't have the correct connection string name being defined. I'll take some of the blame for this. But worse, it means that the connection string to my development database is hard-coded as a string in my assembly. And since I don't treat development database connection strings with the same security reverence as a production connection string, it also means that a valid user id and password were also hard coded in my assembly. And by 'hard coded', I mean that anyone with my assembly and a decompiler would have an easy time finding out a set of valid credentials. &lt;/p&gt; &lt;p&gt;So, ultimately, I'd like to request that Microsoft disable this automatic 'caching' of connection strings. Or at least give me the option to be able to turn it off myself. Because without this, I'm sure there are a number of assemblies that contain secrets people don't expect to be there.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=54797" width="1" height="1"&gt;</description></item><item><title>Certification 2.0?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/06/05/certification-2-0.aspx</link><pubDate>Tue, 05 Jun 2007 20:46:14 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:54698</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/54698.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=54698</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=54698</wfw:comment><description>&lt;p&gt;For reasons which I'm contractually obligated not to disclose (meaning I could tell you, but I'd have to wound you...it's not that important :)), I have an abiding interest in the certification process at Microsoft. Prior to the release of these new certifications, I was not a huge fan. Not just of Microsoft, you understand, but any certification that I had been exposed to. The biggest problem (as I saw it) was a combination of meaningless questions (who wants to remember whether it's Save or Write...I can just Google...er...MSN Search for it) and the watering down of the value of the certification through sites that include 'dumps' of questions and answers from people who have taken the exam. When I saw a 9-year old as the youngest MCSD, I figured the overall value was not that high.&lt;/p&gt; &lt;p&gt;The latest round has made an attempt to solve the problem of meaningless questions. However, it is still possible to get dumps of the questions and answers, so the watering down process still exists. &lt;/p&gt; &lt;p&gt;But the value of certifications is not dead. A friend of mine, &lt;a href="http://blogs.msdn.com/howard_dierking" target="_blank"&gt;Howard Dierking&lt;/a&gt;, is in a position to improve the process to make them more valuable on a number of fronts. Check out &lt;a href="http://blogs.msdn.com/howard_dierking/archive/2007/06/05/community-based-development-let-s-talk.aspx" target="_blank"&gt;this post&lt;/a&gt; to get a sense of the ideas that he is working on. More importantly, let him know if they make sense or if you can suggest any improvements. I think these ideas are a good step towards making certifications relevant. And since I now hold a couple of them, I have a vested interest. ;)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=54698" width="1" height="1"&gt;</description></item><item><title>It was only a matter of time...</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/05/15/it-was-only-a-matter-of-time.aspx</link><pubDate>Tue, 15 May 2007 11:14:12 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:47489</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/47489.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=47489</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=47489</wfw:comment><description>&lt;p&gt;until someone developers a Flash to Silverlight conversion utility. And the first one that I've see is called &lt;a href="http://www.erain.com/products/harmony/" target="_blank"&gt;Harmony&lt;/a&gt; from &lt;a href="http://www.erain.com/" target="_blank"&gt;Electric Rain&lt;/a&gt;. The product is not yet in beta, but the promise is to convert SWF files into XAML for either WPF or Silverlight. It also appears to be taking a more holistic approach to the conversion by trying to identify the graphical elements involved in order to create a 'better' XAML file. The only downside that I can see is that ActionScripts&amp;nbsp;are not converted. &lt;/p&gt; &lt;p&gt;That's one more piece to the acceptance rate puzzle.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=47489" width="1" height="1"&gt;</description></item><item><title>Code-Name Jasper</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/05/02/code-name-jasper.aspx</link><pubDate>Wed, 02 May 2007 16:56:56 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:44080</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/44080.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=44080</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=44080</wfw:comment><description>&lt;p&gt;Named after a venerable Canadian national park (due to the overwhelming influence of Canadians on the Microsoft Data team, who are taking over the U.S. one developer at a time), Jasper is one of the incubation projects from the System.Data team introduced at MIX '07. &lt;/p&gt; &lt;p&gt;Built on top of the Entity Framework, Jasper provides a set of classes that can easily be used to perform CRUD operations on data. While this doesn't sound particularly exciting when phrased like that, the reality is that the classes are generated under the covers at run time. &lt;/p&gt; &lt;p&gt;So if I had a database that contained a Customers table, then Jasper allows me to create a DynamicContext object that has the connection string to the database. Then I can say "DynamicContext.Customers" and a Query object containing the customers in the database will be returned. Each customer object within this query has a set of properties that match to the columns in the table. The magic here is that database schema is being queried at runtime to determine which classes should be included in the application. And once retrieved, the query can easily be used to bind to elements on an ASP.NET Web page.&lt;/p&gt; &lt;p&gt;There are a number of interesting aspects as the talk gets closer to a real-world scenario. For example, it seems to be taking the Ruby approach of 'by convention' rather than 'by declaration'. If the Customers table had a property called address, you can create a class named Customers and add a GetAddress method. When the data classes are generated at runtime, a call to the GetAddress method will be used in the property getter for Address. This is how override certain functionality can be achieved.&lt;/p&gt; &lt;p&gt;All in all, there are some interesting possibilities that could arise from this. If you want to play with what is there right now, check out &lt;a title="http://msdn2.microsoft.com/en-us/data/bb419139.aspx" href="http://msdn2.microsoft.com/en-us/data/bb419139.aspx"&gt;http://msdn2.microsoft.com/en-us/data/bb419139.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=44080" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category></item><item><title>WPF Found a Home!</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/05/01/wpf-found-a-home.aspx</link><pubDate>Tue, 01 May 2007 22:48:31 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43894</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43894.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43894</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43894</wfw:comment><description>&lt;p&gt;The more I see about Silverlight, both 1.0 and 1.1, the more I realize that WPF has found a client to service. From the moment I heard about XAML and WPF, I questioned where it was going to fit in the real world. A large part of the 'coolness' of XAML revolved about transitions and transformations. But business applications don't really need that. Business applications are, generally speaking, not flashy, demo-candy-ful&amp;nbsp;systems. So this disconnect between the needs of business and the strengths of XAML left me wondering.&lt;/p&gt; &lt;p&gt;While I don't believe that WPF is going to replace Windows Forms anytime in the near future, I think that it's pretty obvious that the raison d'etre of XAML is to support Silverlight.&lt;/p&gt; &lt;p&gt;But it's important for developers to realize that XAML/WPF/&lt;a href="http://www.microsoft.com/silverlight/" target="_blank"&gt;Silverlight&lt;/a&gt; is sill new technology. The one thing I haven't seen here at MIX is an integrated development environment. Orcas doesn't have a XAML designer...it has a link to edit the XAML in Expression Blend. The data binding story in XAML is a step back from what ASP.NET developers gained in .NET 2.0. &lt;a href="http://msdn2.microsoft.com/en-us/data/bb419139.aspx" target="_blank"&gt;Jasper and Astoria&lt;/a&gt; are interesting technologies, but the security and error management stories are still being developed. In other words, temper the excitement of some very, very slick technology with the realization that we still have a little time before it becomes 'real'&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43894" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category></item><item><title>Drilling Down on the Silverlight Hype</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/05/01/drilling-down-on-the-silverlight-hype.aspx</link><pubDate>Tue, 01 May 2007 14:54:07 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43661</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43661.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43661</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43661</wfw:comment><description>&lt;p&gt;First off, I do think that Silverlight is a very cool piece of technology. Want to see just how astounding? Check out the Top Banana demo application that was part of yesterday's MIX keynote. You can also find it &lt;a href="http://www.visitmix.com/Blogs/Joshua/beau-ambur-of-metaliq/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;What I found most astounding is that Top Banana is a browser-based application with cross-browser support.&lt;/p&gt; &lt;p&gt;Silverlight is also touting that it allows .NET to run on the various browsers. Which it will do at version 1.1. Keep that in mind. The Silverlight that was released as a beta version yesterday (albeit with a "Go Live" license) does not have .NET support. Programming against the object model is done using JavaScript. The version that contains .NET support was released as an alpha version without the Go Live license. In other words, the cross-platform .NET support is only available as a preview.&lt;/p&gt; &lt;p&gt;Not that it won't be cool when it becomes 'real', but keep that in mind when you're looking at the various demos. Remember to ask which version was used to put the demo together.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43661" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category></item><item><title>Expression Web</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/30/expression-web.aspx</link><pubDate>Mon, 30 Apr 2007 21:41:03 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43601</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43601.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43601</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43601</wfw:comment><description>&lt;p&gt;I just sat through a session on Expression Web. They were showing some of the functionality that was currently being used, along with some of the plans for the next version. There are a couple of points that I'd like to make clear that came out of the session.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Expression Web fills the same space as Visual Studio. They are targeted to different audiences, naturally (Expression Web is aiming at designer-type people), but they are both development environments. They even work on the same project structure, although Expression Web is incapable of modifying the code behind files.&lt;/li&gt; &lt;li&gt;Expression Web does not currently have any support for Team Foundation Server. My first thought was 'ewwww'. But (and this is a killer but) you can only modify the Web pieces of the application. No code behind can be touched. While I'm not thrilled with not having integration, I'm more willing to relax it for the Web content.&lt;/li&gt; &lt;li&gt;They are currently thinking about whether to include TFS support in xWeb (the cutesy name for Expression Web) in the next version. If you want to influence their decision, send them a message through &lt;a href="http://connect.microsoft.com"&gt;http://connect.microsoft.com&lt;/a&gt;. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I'm looking forward to playing with the elements of Expression Web to see what kind of trouble I can get into. :) If you want the same opportunity, you can download a trial version from &lt;a href="http://www.microsoft.com/expression"&gt;http://www.microsoft.com/expression&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43601" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category></item><item><title>Computer Canada Feature Article on Employees as Assets</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/30/computer-canada-feature-article-on-employees-as-assets.aspx</link><pubDate>Mon, 30 Apr 2007 21:18:46 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43599</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43599.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43599</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43599</wfw:comment><description>&lt;p&gt;The April 20th edition of Computer Canada had a feature &lt;a href="http://www.itbusiness.ca/it/client/en/ComputerCanada/News.asp?id=43254&amp;amp;PageMem=1" target="_blank"&gt;article&lt;/a&gt; on (generally) the asset value that employees bring to a company. I mention this because, as it turns out, I'm quoted in the article. I believe that documentation is not the solution to the knowledge leakage problem discussed in the article. Developers don't like documentation, so the trick is to keep code clean and easy to read. Standards are important. Unit tests are important (they document the assumptions made by the developer). Enforcing both standards and appropriate levels of unit testing would, quite naturally, be even more important.&lt;/p&gt; &lt;p&gt;This combination is a significant benefit (albeit a soft one) that a company can accrue by using tools such as Team Foundation Server. Imposing process on software development efforts can be challenging, however. The metaphor that a development team is like a herd of cats is frequently quite accurate. Getting them to buy into the process is very important to it's success. But a well planned implementation that takes into consideration appropriate levels of training along with a process that mirrors the current situation can greatly help a company achieve it's goal with respect to securing application knowledge.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43599" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Identifying Formatting Errors with Expression Web</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/30/identifying-formatting-errors-with-expression-web.aspx</link><pubDate>Mon, 30 Apr 2007 19:44:34 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43597</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43597.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43597</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43597</wfw:comment><description>&lt;p&gt;One of the more interesting aspects of Expression Web is its ability to help debug CSS errors. I'm in a talk on Designing with Expression Web and the story is about how to use Expression Web to identify problems in a web page. The web page is loaded and the problematic element is selected. One of the windows is a rules summary pane that includes all of the formatting rules that apply to the selected item, in the order in which they occur. &lt;/p&gt; &lt;p&gt;So the process of identifying&amp;nbsp;the problem is finding the particular rule that actually causes the unexpected formatting. And having tried to suss this out on my own in the past, I can greatly appreciate the benefits of having such a tool available.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43597" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category></item><item><title>Dynamic Language Runtime announced</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/30/dynamic-language-runtime-announced.aspx</link><pubDate>Mon, 30 Apr 2007 16:44:53 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43591</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43591.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43591</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43591</wfw:comment><description>&lt;p&gt;As I mentioned previously, Microsoft has announced a Dynamic Language Runtime (DLR), the idea being to enable dynamic languages (e.g. Python, Ruby, etc.) in .NET. Although the site hasn't opened yet, I suspect that you'll be able to download the DLR from the Silverlight community site at &lt;a href="http://www.silverlight.net"&gt;http://www.silverlight.net&lt;/a&gt;. And CodePlex already has some samples at &lt;a title="http://www.codeplex.com/dynamicsilverlight" href="http://www.codeplex.com/dynamicsilverlight"&gt;http://www.codeplex.com/dynamicsilverlight&lt;/a&gt;&lt;/p&gt; &lt;p&gt;There is an eWeek&amp;nbsp;interview with former colleague John Lam and Jim Hugunin about the DLR&amp;nbsp;&lt;a href="http://www.eweek.com/article2/0,1895,2123793,00.asp" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43591" width="1" height="1"&gt;</description></item><item><title>Getting your hands on Expression Studio</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/30/getting-your-hands-on-expression-studio.aspx</link><pubDate>Mon, 30 Apr 2007 16:28:48 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43589</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43589.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43589</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43589</wfw:comment><description>&lt;p&gt;If you're an MSDN subscriber, you might be wondering what parts you can get hold of without purchase the product. Expression Studio is made up of: &lt;a href="http://www.microsoft.com/products/expression/en/expression-web/default.mspx"&gt;Expression Web&lt;/a&gt;, &lt;a href="http://www.microsoft.com/products/expression/en/expression-blend/default.mspx"&gt;Expression Blend&lt;/a&gt;, &lt;a href="http://www.microsoft.com/products/expression/en/expression-design/default.mspx"&gt;Expression Design&lt;/a&gt; and &lt;a href="http://www.microsoft.com/products/expression/en/expression-media/default.mspx"&gt;Expression Media&lt;/a&gt;. From a developer's perspective, it is really Expression Web and Expression Blend that are of greatest interest. You might be able to make the case for including Design in this list, but personally (since I was born without the graphics gene), I wouldn't&lt;/p&gt; &lt;p&gt;Microsoft has thankfully included the two pieces (Web and Blend) into the MSDN Premium subscription. Expression Web can already be downloaded. Expression Blend will be available in the very near future. See Soma's announcement (from earlier this month) &lt;a href="http://blogs.msdn.com/somasegar/archive/2007/04/03/listening-to-your-feedback-expression-and-msdn.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43589" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category></item><item><title>What's the Big Announcement?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/30/what-s-the-big-announcement.aspx</link><pubDate>Mon, 30 Apr 2007 16:06:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43585</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43585.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43585</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43585</wfw:comment><description>&lt;P&gt;For weeks now, there has been a buzz about a big announcement at the Mix '07 conference. Well, in his keynote, Ray Ozzie made the following announcements:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Expression Studio is shipping today - See &lt;A href="http://www.microsoft.com/expression/expression-studio/overview.aspx" target=_blank&gt;here&lt;/A&gt; for the details. One of the interesting elements of Expression Studio is that it includes the standard edition of Visual Studio 2005. As I mentioned in my last post, I haven't seen the developer experience for Silverlight. Hopefully with this will be at least similar to what developers already expect.&lt;/P&gt;
&lt;P&gt;Silverlight Streaming - A companion service to Silverlight. The idea is to allow Silverlight applications to be posted to a set of Microsoft servers in the cloud. From this cloud, the applications can then be delivered to client browsers through your web site. First I've heard of this, so if I misunderstood this 'third part' of the Microsoft strategy, I'll correct it later.&lt;/P&gt;
&lt;P&gt;Scott Guthrie announce that Silverlight includes a cross-platform .NET Framework. As of 20 minutes ago, there was a preview for this functionality that was available on the web.&amp;nbsp; While it is a Beta version, it does have a "Go Live" license.&lt;/P&gt;
&lt;P&gt;Silverlight can be downloaded from &lt;A href="http://msdn2.microsoft.com/en-us/asp.net/bb419316.aspx" target=_blank&gt;here&lt;/A&gt;. The SDK can be found &lt;A href="http://msdn.microsoft.com/vstudio/eula.aspx?id=a40f3ffc-2657-02ec-7d67-7a79b4eac832" target=_blank&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;More to come&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class=wlWriterSmartContent id=0767317B-992E-4b12-91E0-4F059A8CECA8:c719df92-6196-46d1-b4cb-bfe82807ff31 style="PADDING-RIGHT:0px;DISPLAY:inline;PADDING-LEFT:0px;PADDING-BOTTOM:0px;MARGIN:0px;PADDING-TOP:0px;"&gt;Technorati tags: &lt;A href="http://technorati.com/tags/Mix%2007" rel=tag&gt;Mix 07&lt;/A&gt;, &lt;A href="http://technorati.com/tags/Silverlight" rel=tag&gt;Silverlight&lt;/A&gt;, &lt;A href="http://technorati.com/tags/ASP.NET%202.0" rel=tag&gt;ASP.NET 2.0&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43585" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Mix/default.aspx">Mix</category></item><item><title>Into the Mix</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/30/into-the-mix.aspx</link><pubDate>Mon, 30 Apr 2007 05:11:43 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43387</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43387.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43387</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43387</wfw:comment><description>&lt;p&gt;So I arrived at earlier today and dove pretty much staight into the gestalt of Mix. Registration was a breeze. And there were plenty of open seats at the two-monitor hands-on labs. So I dove into Expression and Silverlight. The technology looks interesting, although the labs didn't have any development experience. Yet. Word on the street is that may change later this week (hint, hint).&lt;/p&gt; &lt;p&gt;Also, I heard confirmation of a rumour that had been making the rounds. Specifically, that the Entity Framework will not make it into Orcas, but instead will be released by the middle of 2008. This is a disappointment to me for a number of reasons. You can read more about the announcement &lt;a href="http://blogs.msdn.com/adonet/archive/2007/04/28/ado-net-entity-framework-update.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43387" width="1" height="1"&gt;</description></item><item><title>Calgary Code Camp</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/29/calgary-code-camp.aspx</link><pubDate>Sun, 29 Apr 2007 12:40:47 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:43219</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/43219.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=43219</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=43219</wfw:comment><description>&lt;p&gt;So my yesterday was spent having a good time at the Calgary Code Camp. For those of you who want my slide decks, you can find them below. For anyone else, suffice it to say that the camp was smoothly run, contained lost of great content and appeared to be thoroughly enjoyed by all. I was especially impressed by the content in the Agile track. Based on what I saw, I would guess that it is more firmly intrenched among the Calgary influencers than in Toronto.&lt;/p&gt; &lt;p&gt;As well, I had the&amp;nbsp;change to talk to some old acquaintances and meet a whole bunch of new faces. But more, I learned that Sam is in trouble and doesn't even know it&amp;nbsp;and that I expect &lt;a href="http://geekswithblogs.net/dlussier/Default.aspx" target="_blank"&gt;D'Arcy&lt;/a&gt; to be publishing some YouTube content on the pros and cons of chicken wings. :)&lt;/p&gt; &lt;p&gt;Now for the slides decks/code.&lt;/p&gt; &lt;p&gt;&lt;a href="http://objectsharp.com/cs/files/folders/bruce/entry43217.aspx"&gt;Language Integrated Query Slide Deck&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://objectsharp.com/cs/files/folders/bruce/entry43216.aspx"&gt;Extending the ObjectDataSource Slide Deck&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://objectsharp.com/cs/files/folders/bruce/entry37219.aspx"&gt;Extending the ObjectDataSource Demo Code&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you're looking for the LINQ sample application, you can find it &lt;a href="http://blogs.msdn.com/charlie/archive/2007/03/04/samples-update.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=43219" width="1" height="1"&gt;</description></item><item><title>A Big Strike Against TableAdapters</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/26/a-big-strike-against-tableadapters.aspx</link><pubDate>Thu, 26 Apr 2007 12:32:49 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:42766</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/42766.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=42766</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=42766</wfw:comment><description>&lt;p&gt;I'm hoping that someone reads this post and corrects me. But I'm not holding out much hope.&lt;/p&gt; &lt;p&gt;I don't normally use TableAdapters, but for a small application I decided that they seem like a reasonable choice. And so long as I was using them on my development platform, all was well and good. The problem arose when I delivered the application.&lt;/p&gt; &lt;p&gt;Like any good developer, I store the connection string to&amp;nbsp;the data store in the configuration file. Which is what I did&amp;nbsp;for this application. When I defined the TableAdapters, I pointed the connection string property to the same setting. Or so I thought. But what actually happened was that the connection string was actually stored in the DLL that contained the adapters. Hard-coded. As in not modifiable through the config files. And, naturally, this wasn't discovered until deployment.&lt;/p&gt; &lt;p&gt;So I started to look for ways to have the TableAdapter pull the connection string from the config files. I figured that this would be a fairly common scenario, so it should be address. Not so much&lt;/p&gt; &lt;p&gt;Apparently there is &lt;strong&gt;no&lt;/strong&gt; way to automatically have TableAdapters use config settings. The "solution" is to use the fact that TableAdapters are partial classes to create a write-only ConnectionString property. It looks like the following:&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New" color="#804000"&gt;public partial class FormTableAdapter &lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; public string ConnectionString&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Data.SqlClient.SqlConnection conn = new&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New" color="#804000"&gt;System.Data.SqlClient.SqlConnection();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.ConnectionString = value;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Connection = conn;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Then, where the adapter is instantiated in your code, you set the ConnectionString property to the value from the config file. &lt;/p&gt; &lt;p&gt;To me, this is unacceptable. I was already a little skeptical of TableAdapters (I don't like the DataSet and the data access code in the same assembly), but this takes the cake. It almost seems like they were designed to &lt;strong&gt;not&lt;/strong&gt; allow a reasonable deployment model. Maybe it will get better in the next version, but until then, I'm sticking with DataAdapters.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=42766" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>A Peek into the Future Of Dynamic Languages</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/24/a-peek-into-the-future-of-dynamic-languages.aspx</link><pubDate>Tue, 24 Apr 2007 16:50:27 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:41998</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/41998.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=41998</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=41998</wfw:comment><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:0e10cdc3-13dc-472d-8e77-6fee49f9de8d" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Mix%2007" rel="tag"&gt;Mix 07&lt;/a&gt;, &lt;a href="http://technorati.com/tags/dynamic%20languages" rel="tag"&gt;dynamic languages&lt;/a&gt;, &lt;a href="http://technorati.com/tags/clr" rel="tag"&gt;clr&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;There has been a lot of nothing coming out of Microsoft over the last couple of months. I mostly noticed it at the MVP Summit in March, where the level of NDA content (for C# people anyway was non-existent) and I got a lot of 'you should come to Mix' tossed in. &lt;/p&gt; &lt;p&gt;So I am going to Mix '07, and for a taste of the sort of announcement that should be commonplace, check out this &lt;a href="http://blogs.zdnet.com/microsoft/?p=404"&gt;post&lt;/a&gt; from Mary Jo Foley about a "Dynamic Language Runtime" for .NET. It even includes a quote from an old colleague of mine, &lt;a href="http://www.iunknown.com" target="_blank"&gt;John Lam&lt;/a&gt;, who knows a thing or two (or a thousand) about dynamic languages and Microsoft. &lt;/p&gt; &lt;p&gt;And I'm pretty certain this won't be the only groundbreaking announcement that comes out.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=41998" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Taking it on the Road</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/22/taking-it-on-the-road.aspx</link><pubDate>Sun, 22 Apr 2007 20:13:46 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:41709</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/41709.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=41709</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=41709</wfw:comment><description>&lt;p&gt;This coming Saturday (April 28th), I'm going to be doing my Extending the ObjectDataSource talk at the Calgary Code Camp. While this isn't the first time I've spoken in Calgary (I did an MSDN User Group Tour there a couple of years ago), it has certainly been a while. I'm looking forward to participating as well as connecting with some people I haven't seen in a while. If you are in the area, you should seriously think about attending. Code Camps are a lot of fun and the price (free) enhances the value even more. You can find out more about the sessions and register at &lt;a href="http://www.calgarycodecamp.com"&gt;http://www.calgarycodecamp.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=41709" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>Extending the ObjectDataSource - VB Version</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/22/extending-the-objectdatasource-vb-version.aspx</link><pubDate>Sun, 22 Apr 2007 19:59:22 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:41707</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/41707.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=41707</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=41707</wfw:comment><description>&lt;p&gt;This past Tuesday, I did my Extending the ObjectDataSource talk for the Toronto Visual Basic User Group. Although you can find the slides &lt;a href="http://objectsharp.com/cs/files/folders/37217/download.aspx"&gt;here&lt;/a&gt;, the demo code is in C#. To make it fair for all, here is the VB.NET code for the same demo.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://objectsharp.com/cs/files/folders/40858/download.aspx" target="_blank"&gt;Extending the ObjectData Source Demo Code - VB&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=41707" width="1" height="1"&gt;</description></item><item><title>Joining the Patent Parade</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/12/joining-the-patent-parade.aspx</link><pubDate>Fri, 13 Apr 2007 01:14:05 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:39475</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/39475.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=39475</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=39475</wfw:comment><description>&lt;p&gt;In another life, I did some development work on a application that involved extracting data from a faxed image. It was difficult work and the results were surprisingly good, considering the challenges (faxed images are notorious for being of poor quality, being skewed, etc.). As it turned out the work that we did was patentable and, as of May 1, the U.S.&amp;nbsp;patent (#7212301) will be approved.&lt;/p&gt; &lt;p&gt;This is one of those process patents that I've always been surprised that actually qualified. But there was a very experienced attorney saying that it was and, lo and behold, four years later there it is. Please excuse me for a moment of personal pride.&lt;/p&gt; &lt;h3&gt;&lt;font color="#804000"&gt;Abstract:&lt;/font&gt;&lt;/h3&gt; &lt;p&gt;&lt;font color="#804000"&gt;One or more parameters such as time is reported to a center using a form. The center then automatically extracts data from the form and converts it for storage and subsequent processing or review. The form is preferably a physical form, which the sender fills in and then faxes to the center. Image capture, registration, and feature recognition routines are included to enable the center to extract the reported data with no need for data reentry or human intervention. The invention is particularly suitable for employees who need to submit time sheets, expense reports, and the like to an employer, or for automatic analysis of submitted inventory reports, product orders, etc.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=39475" width="1" height="1"&gt;</description></item><item><title>Distributing SOA Information</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/12/distributing-soa-information.aspx</link><pubDate>Thu, 12 Apr 2007 19:25:27 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:39401</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/39401.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=39401</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=39401</wfw:comment><description>&lt;p&gt;As you might have guessed from the name of my blog, I have a long-term love of distributed applications. My infatuation with the technology actually goes back to earlier forms of&amp;nbsp;COM+ and Web services. I believe that a well designed distributed application can be used to address the scalability, reliability and even identity issues that spring up in most large scale business applications. The biggest problem with designing distributed application is knowing which of the many available technologies is the best choice for the situation.&lt;/p&gt; &lt;p&gt;This is the reason that I was looking forward to the release of the Windows Communication Foundation (WCF). If nothing else, WCF provided a common interface to the multiple technologies used to build distributed applications. Well, WCF has been released for a few months now (and was actually in a 'go live' state for a lot longer), which means that interest in how it can be used in real-life is growing. To help people learn and use this very cool technology,&amp;nbsp;ObjectSharp is introducing a new course on the best practices surrounding WCF. The course is being developed by &lt;a href="http://objectsharp.com/cs/blogs/pmadziak/" target="_blank"&gt;Peter Madziak&lt;/a&gt;, with more information about the content and thinking behind the course found &lt;a href="http://objectsharp.com/cs/blogs/pmadziak/archive/2007/04/11/new-wcf-course.aspx" target="_blank"&gt;here&lt;/a&gt;. If you have any interest in distributed applications in general and WCF at all, you owe it to yourself to check out the course description. &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=39401" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Service-Oriented+Architecture/default.aspx">Service-Oriented Architecture</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category></item><item><title>Roadmap for VSTS</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/09/roadmap-for-vsts.aspx</link><pubDate>Mon, 09 Apr 2007 15:20:32 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:38619</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/38619.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=38619</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=38619</wfw:comment><description>&lt;p&gt;Microsoft has just released (&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/bb407307.aspx" target="_blank"&gt;here&lt;/a&gt;) a moderately detailed description of where Team Systems is going over the next&amp;nbsp;12 months or so. The roadmap also includes the beginnings of the functionality that will be found in the next version of VSTS (code named Rosario). Nothing like a little transparency to get people salivating. :)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=38619" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Orcas/default.aspx">Orcas</category></item><item><title>Distributed Applications Training Kit now available</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/06/distributed-applications-training-kit-now-available.aspx</link><pubDate>Sat, 07 Apr 2007 02:03:07 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:38134</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/38134.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=38134</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=38134</wfw:comment><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Although the publication date was slipped slightly (and there was conflicting information coming from some of the vendors), the training kit for the Distributed Applications PRO certification (&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FMCPD-Self-Paced-Training-Exam-70-549%2Fdp%2F0735623384%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1175914289%26sr%3D8-1&amp;amp;tag=tagconsulting-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;70-549&lt;/a&gt;&lt;img style="margin:0px;" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=tagconsulting-20&amp;amp;l=ur2&amp;amp;o=1" width="1" border="0"&gt;) is now available. Of the three training kits I was involved in, this is the one where I thought the material would be most useful beyond&amp;nbsp;studying to pass the certification test. The concepts and issues associated with distributed applications are commonplace and the book provides a nice consolidation of the latest thoughts on how to address the problems. I am curious about how people find the book, so if you have any feedback, I would love to hear it.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=38134" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category></item><item><title>Toronto Code Camp Slide and Demo</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/04/02/toronto-code-camp-slide-and-demo.aspx</link><pubDate>Mon, 02 Apr 2007 12:10:17 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:37220</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/37220.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=37220</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=37220</wfw:comment><description>&lt;p&gt;The second annual Toronto Code Camp took place this past Saturday. By all accounts, it was a tremendous success with over 250 people giving their Saturday over to many things technical. I gave a presentation on extending the ObjectDataSource control, and while you should be able to get the slides and demo code from the Toronto Code Camp site shortly, I thought I'd post them here as well, just to get it out as quickly as possible.&lt;/p&gt; &lt;p&gt;Slide Deck - &lt;a title="Extending the ObjectDataSource" href="http://objectsharp.com/cs/files/folders/37217/download.aspx"&gt;Extending the ObjectDataSource&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Demo Code - &lt;a title="Extending the ObjectDataSource Demo Code" href="http://objectsharp.com/cs/files/folders/37219/download.aspx"&gt;Extending the ObjectDataSource Demo Code&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=37220" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>TFS and Baby Steps</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/03/29/tfs-and-baby-steps.aspx</link><pubDate>Thu, 29 Mar 2007 17:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:36427</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/36427.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=36427</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=36427</wfw:comment><description>&lt;P&gt;I just finished attending ObjectSharp's SMART (Software MAnagement Round Table) &lt;A href="http://objectsharp.com/oNewsUpdate/ReadingFullStory.aspx?StoryNum=-118" target=_blank&gt;session&lt;/A&gt; on the impact of quality assurance on the development process and had a couple of observations to share.&lt;/P&gt;
&lt;P&gt;First off, the biggest takeaway from the session is the need to move quality to the front of the development process. In this way, quality is a lot like security. There is no way to create a really secure application by adding security features at the end of the development cycle. In the same way, there is no magic powder that can be sprinkled on a completed application to greatly improve its quality. The overall quality of an application is found in its architectural choices, whether it was designed to be testable and the approach taken by the development staff with regards to testing. &lt;/P&gt;
&lt;P&gt;However, one of the conversations I had with an attendee regarding Visual Studio Team Systems was just as interesting. He had just installed Team Foundation Server and had created a team project using the default Agile template. The team project he created was going to be for a&amp;nbsp;working application. I found this approach interesting, not the least because (by his own admission) there was no "process" for developing software currently in play.&lt;/P&gt;
&lt;P&gt;The interesting aspect (for me)&amp;nbsp;was the supposed lack of software development process in his company. I would strongly suggest that there really &lt;STRONG&gt;was&lt;/STRONG&gt; a process in place. Even though you might not think a process is in place with your development team, doesn't mean that a process doesn't exist. In any kind of team development environment, processes will form. It's just a question of how formal the process is. So your 'lack of process' (call it an unprocess) is really just a lack of documentation and formalization. Because of its lack of formality,&amp;nbsp;unprocesses frequently&amp;nbsp;operate below the radar of even the people involved.&lt;/P&gt;
&lt;P&gt;If you haven't worked with Team Systems before, let me preface my comments by saying that it absolutely introduces structure to the development process. If you plan on using it 'out of the box' with no customization, you will need to use the process described by one of the canned templates. For those who don't currently have a process, the Agile template is the most likely starting point. But the Agile template includes process. There is a workflow for tasks. There is a workflow for defects. And workflow equals process.&lt;/P&gt;
&lt;P&gt;I can appreciate the idea behind starting out with the canned templates. Its presence would indicate that it's&amp;nbsp;a process with&amp;nbsp;proven&amp;nbsp;success. And using the product as it arrives is a first,&amp;nbsp;small 'baby step' into the world of development process. The problem is that the first step you're taking isn't a small one. Instead, you have taken a giant step into the world of Agile development. Complete with all of the process that is codified in the Agile template. And Agile has more process than most people think. The result is that the first 'baby'&amp;nbsp;step can be a killer for Team Systems.&lt;/P&gt;
&lt;P&gt;If someone new to a development process&amp;nbsp;truly wants to take baby steps with TFS, they should start by thinking about the unprocess which is currently being used in their organization.&amp;nbsp;Spend a day or even a few hours talking to someone who is familiar with development methodologies, to identify the flows that are currently at play. The default template should be customized to follow this unprocess. Then, over time, the structure originally defined by the Agile template can be added back in, if needed.&lt;/P&gt;
&lt;P&gt;Does this require a little more effort on your part? Yes. But the steps involved in modifying the template are both well documented and fairly easy to follow. By taking this approach, you truly can learn Team Systems by taking baby steps. And this is a lot less painful than trying to make the leap from unprocess to Agile. &lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=36427" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Accessing Content Page properties in Master Pages</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/03/20/accessing-content-page-properties-in-master-pages.aspx</link><pubDate>Tue, 20 Mar 2007 17:36:10 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:35061</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/35061.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=35061</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=35061</wfw:comment><description>&lt;p&gt;I'm teaching our &lt;a href="http://www.objectsharp.com/training/CourseDetail.aspx?id=1122" target="_blank"&gt;ASP.NET 2.0 Best Practices&lt;/a&gt; course this week. I only get to teach about 1 week a quarter, so I greatly enjoy whenever I do. One of the interesting things about teaching, even content that you know very well, is that there are always questions and topics that I haven't run into in the past. Today was no exception.&lt;/p&gt; &lt;p&gt;I was covering Master Pages and Theming when I was asked about accessing information on the content page as part of the master page's processing. As it turns out, there were two solutions.&lt;/p&gt; &lt;p&gt;1. The Page property on the ContentPlaceHolder control has a reference to the Page class formed by the content page. In other words&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" color="#804000"&gt;this.ContentPlaceHolder1.Page&lt;/font&gt; &lt;/p&gt; &lt;p&gt;give you access to the Page object for the content. So you can cast that object onto the specific page class and access any public properties normally. &lt;/p&gt; &lt;p&gt;2. Use another ContentPlaceHolder control. In the specific request, the goal was to include a link to an optionally present,&amp;nbsp;page-specific CSS file. This link (ideally) would be in the header. The solution was to put a ContentPlaceHolder into the HEAD section. Now the content page was completely capable of filling in the content with a CSS link, if one was available. &lt;/p&gt; &lt;p&gt;I was surprised by this second answer, as I didn't think that the ContentPlaceHolder would "work" other than in the body. No reason why I thought this. But one of the students suggested it and, lo and behold, it worked just fine. &lt;/p&gt; &lt;p&gt;As most instructors will tell you, the number of things you learn while teaching a class is quite astounding.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=35061" width="1" height="1"&gt;</description></item><item><title>WebParts and the need for a Database</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/03/08/webparts-and-the-need-for-a-database.aspx</link><pubDate>Thu, 08 Mar 2007 13:20:14 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:27479</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/27479.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=27479</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=27479</wfw:comment><description>&lt;p&gt;I'm doing some work creating WebPart components in ASP.NET 2.0 and discovered a dependency that I wasn't initially expecting...the need for a database.&lt;/p&gt; &lt;p&gt;It appears that in order to even place a WebPart onto a form, you need to have a&amp;nbsp;database. Or at least a persistent data store. A little bit of investigation found this information available in a number of places. The WebPart isn't actually the problem, so much as the WebPartManager. The manager is responsible for keeping track of the various WebPartZones and which WebPart is in which Zone. To persist this information across iterations of the page, the location information is stored in a database. So, even when the page is displayed the first time, a database connection needs to be available. &lt;/p&gt; &lt;p&gt;While you can create your own provider, the easiest mechanism is to use the aspnetdb, which is also used by the Membership and Role providers. To add the database to an existing SQL Server instance (either SQL Server 2000 or 2005), use the aspnet_regsql command, which is found in c:\Windows\Microsoft.NET\Framework\v2.0.50215. Once the database is available, a connection string (call it AspNetDbConnectionString to match the upcoming example) should be defined in the web.config file, along with a webParts element that includes a personalization tag, similar to the following:&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;lt;webParts&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;personalization defaultProvider="SqlPersonalizationProvider"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;providers&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="SqlPersonalizationProvider"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t&lt;/font&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;ype="System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connectionStringName="AspNetDbConnectionString"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applicationName="/" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/providers&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;authorization&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;deny users="*" verbs="enterSharedScope" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;allow users="*" verbs="modifyState" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/authorization&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/personalization&amp;gt;&lt;br&gt;&amp;lt;/webParts&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=27479" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>Captain SOA to the Rescue</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/02/28/captain-soa-to-the-rescue.aspx</link><pubDate>Wed, 28 Feb 2007 14:31:25 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:24556</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/24556.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=24556</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=24556</wfw:comment><description>&lt;p&gt;From &lt;a href="http://blogs.msdn.com/howard_dierking/default.aspx" target="_blank"&gt;Howard Dierking&lt;/a&gt; (former real person, now Microsoft drone :)), here is a detailed breakdown of the many ways that SOA can help your business, your professional career and even your life. Yeah. That's it. SOA is "Life Transforming"&lt;/p&gt; &lt;p&gt;&lt;a title="http://soafacts.com/" href="http://soafacts.com/"&gt;http://soafacts.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=24556" width="1" height="1"&gt;</description></item><item><title>Windows Training Kits now available</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/02/18/windows-training-kits-now-available.aspx</link><pubDate>Sun, 18 Feb 2007 15:35:24 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:22418</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/22418.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=22418</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=22418</wfw:comment><description>&lt;p&gt;I just found out that twp of the training kit books for the Professional versions of the latest Microsoft Certification tests are not available. Specifically, the books for &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FMCPD-Self-Paced-Training-Exam-70-547%2Fdp%2F0735623406%2Fsr%3D8-1%2Fqid%3D1171813238%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=tagconsulting-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325" target="_blank"&gt;Web Applications&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FMCPD-Self-Paced-Training-Exam-70-548%2Fdp%2F0735623392%2Fsr%3D1-2%2Fqid%3D1171816224%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=tagconsulting-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325" target="_blank"&gt;Windows Applications&lt;/a&gt;. Why am I mentioning this seemingly meaningless piece of news? Because I'm one of the co-authors. In other words, the books (along with a third that is coming out in the next few weeks) represent a large portion of the last six months of my business life. So rush right out and buy a copy. Or 10 :)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=22418" width="1" height="1"&gt;</description></item><item><title>Microsoft Vista Launch in Toronto</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/01/29/microsoft-vista-launch-in-toronto.aspx</link><pubDate>Mon, 29 Jan 2007 20:18:08 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:15852</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/15852.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=15852</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=15852</wfw:comment><description>&lt;p&gt;One of the benefits of being an MVP is that occasionally you get to do really cool things. And, in this particular case, I'm using the traditional meaning of cool rather than the geeky.&lt;/p&gt; &lt;p&gt;&lt;a href="http://objectsharp.com/cs/blogs/bruce/WindowsLiveWriter/MicrosoftVistaLaunchinToronto_E550/Microsoft%20Canada's%20Digital%20Ice%20House%20Invitation%5B4%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="480" src="http://objectsharp.com/cs/blogs/bruce/WindowsLiveWriter/MicrosoftVistaLaunchinToronto_E550/Microsoft%20Canada's%20Digital%20Ice%20House%20Invitation_thumb%5B2%5D.jpg" width="564" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This event is going on all week,&amp;nbsp;but I get to spend Groundhog's Day in an ice house helping introduce Visa and Office to the community. I'm looking forward to the opportunity, although I do need to go out and get some long underwear before Friday. I've been told that the temperature inside the house is a few degrees below zero. Could be all the ice in the vicinity. ;)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=15852" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Personal/default.aspx">Personal</category></item><item><title>Decrypting Stored Procedures</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/01/24/decrypting-stored-procedures.aspx</link><pubDate>Wed, 24 Jan 2007 06:10:51 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:11780</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/11780.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=11780</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=11780</wfw:comment><description>&lt;p&gt;As part of work that I was doing recently, I had to generate the creation script for a SQL Server database. While running through the Generate Script task in Management Studio, I received an error that indicated that the stored procedure was encrypted. Never having running into encrypted stored procedures before, I was a little surprised. It turns out that encrypted stored procedures can&amp;rsquo;t be scripted. Could be that they&amp;rsquo;re encrypted. Duh!&lt;/p&gt;
&lt;p&gt;Anyway, the documentation says that, for encrypted stored procedures, it is important to generate the creation script prior to&amp;nbsp;encryption. So&amp;nbsp;I started asking the client if they had the creation scripts. It turns out that a previous DBA had invoked the annoying &amp;lsquo;job security&amp;rsquo; clause when creating the stored procedures, so the creation scripts were nowhere to be found.&lt;/p&gt;
&lt;p&gt;Some additional research on the problem and I find a third party component that can decrypt the stored procedures. It&amp;rsquo;s called SQL Decrypter and it&amp;rsquo;s from Orbital Technologies (&lt;a href="http://www.orbitaltechnologies.org/decryptor/"&gt;http://www.orbitaltechnologies.org/decryptor/&lt;/a&gt;). I have to say, it&amp;rsquo;s a nice tool. Does exactly what it&amp;rsquo;s supposed to do, quickly, easily and painlessly. So the client gets the generation scription and Orbital gets another (I&amp;rsquo;m sure) satisfied customer.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=11780" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SQL+Tips/default.aspx">SQL Tips</category></item><item><title>DataFormatString doesn't seem to work on BoundField elements</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/01/05/dataformatstring-doesn-t-seem-to-work-on-boundfield-elements.aspx</link><pubDate>Sat, 06 Jan 2007 03:02:10 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:7207</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/7207.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=7207</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=7207</wfw:comment><description>&lt;p&gt;I was using the BoundField element in ASP.NET 2.0&amp;rsquo;s GridView control. More specifically, I was attempting to use the DataFormatString element in order to change the look of dates and dollar amounts as they get displayed. Much to my dismay, it didn&amp;rsquo;t look like the format string was being applied to the data. &lt;/p&gt;
&lt;p&gt;After digging around a bit (and making sure that my memory of the format codes was accurate), it turns out that the problem is caused by a combination of factors. The first is that the default value for the HtmlEncode is true. The HtmlEncode property determines whether the value of the bound field is HTML encoded before being transmitted to the browser. The second factor is that, when the DataFormatString is applied to the value, any HTML encoding takes place prior to the formatting.&lt;/p&gt;
&lt;p&gt;When, for example, a date is rendered, the date value is converted to string using the ToString() method. The string is then HtmlEncoded. Finally, the String.Format method is used to format the string using your format codes. However, your date format codes won&amp;rsquo;t work because the &amp;lsquo;date&amp;rsquo; is no longer a DateTime variable. It&amp;rsquo;s a string. So instead of formatting the data, it is displayed using the ToString() layout. The same problem exists for other non-string types, including currency, floats, etc.&lt;/p&gt;
&lt;p&gt;The solution is to set the HtmlEncode attribute to false on the BoundField element. Now the value is not converted to a string prior to the Sting.Format method call, the result being that the String.Format method uses the typed value (not the ToString version) and the format string&amp;nbsp;in the manner that you (and I) expect.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=7207" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>Register for the Toronto Code Camp</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/01/03/register-for-the-toronto-code-camp.aspx</link><pubDate>Wed, 03 Jan 2007 21:58:30 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:7015</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/7015.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=7015</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=7015</wfw:comment><description>&lt;p&gt;The registration page has been available since the middle of December (at &lt;a href="http://www.torontocodecamp.net/"&gt;http://www.torontocodecamp.net&lt;/a&gt;), but my heads-down end of year mode kept me from mentioning it until now. &lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not familiar with the Code Camp concept, it is a free day-long conference on all things geeky. Geeky to developers, that is. Code Camps are run on a Saturday to give people who might not normally be able to attend a conference the opportunity. The Toronto Code Camp has its focus on Microsoft technologies (although not exclusively) and includes content on current and future technologies, both at the introductory and advanced level.&lt;/p&gt;
&lt;p&gt;For those of you who don&amp;rsquo;t get enough technology during the course of a normal week, the Code Camp is a wonderful opportunity to get the latest and greatest in information from some wonderful speakers. Also, if you have wanted to speak to a group of enthusiastic users, the Code Camp provides a nice, safe, informal environment to get started.&lt;/p&gt;
&lt;p&gt;So if you haven&amp;rsquo;t registered already, get to the &lt;a href="http://www.torontocodeamp.net/" target="_blank"&gt;Toronto Code Camp site&lt;/a&gt; and sign up now. You&amp;rsquo;ll get much more than your money&amp;rsquo;s worth. :)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=7015" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>Tagging isn't just for walls anymore</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/01/03/tagging-isn-t-just-for-walls-anymore.aspx</link><pubDate>Wed, 03 Jan 2007 06:04:52 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:6917</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/6917.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=6917</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=6917</wfw:comment><description>&lt;p&gt;You may or may not be aware of the current craze sweeping the (cringe) blogosphere. When you get tagged, you are supposed to reveal five things about yourself that the typical reader is unlikely to know. Since I was honoured by &lt;a href="http://msmvps.com/blogs/windsor/archive/2007/01/02/blog-chain-letter-err-tag.aspx" target="_blank"&gt;Rob Windsor&lt;/a&gt; with a tag, I feel compelled to continue the chain.&lt;/p&gt;
&lt;p&gt;1.&amp;nbsp; My first job in the computer industry was also my first job ever. I was fifteen and I spent the summer writing computer games for the Oxford County Board of Education. On a Commodore Pet. The coolest part of this is that a number of the games that I designed were eventually converted into LOGO and were still being used by the province of Ontario more than 10 years later.&lt;/p&gt;
&lt;p&gt;2.&amp;nbsp; I was a poor writer when I was in high school and university. Not that I&amp;rsquo;m a great writer now. Only that it comes much more easily than it used to. The key for me was a suggestion to write the way that I speak. Don&amp;rsquo;t worry about the grammar or coherence. That can be added in the editing process. Just get words down and work from there.&lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; I grew up in Canada and never learned how to skate. Not until this past December, when I laced up skates for the first time in over 35 years. Now I play in two hockey leagues. Not well, but not killing myself is my only bar to success in the sport.&lt;/p&gt;
&lt;p&gt;4.&amp;nbsp; I love playing volleyball. I played the sport on and off for years, but took it up with a vengeance once I moved back to the Toronto area. My height (or lack thereof) means that I set when I&amp;rsquo;m playing court volleyball. But I also play beach volleyball in the summer, where I mostly play doubles.&lt;/p&gt;
&lt;p&gt;5.&amp;nbsp; When I lived in Los Angeles, I tried out for a number of game shows. This includes a couple that never made it to air, as well as the venerable Jeopardy. I actually appeared on one show, QuickSilver. It was on the USA Network for a couple of seasons. I won the grand prize for the show that I was on, said grand prize being a week at a Dude ranch in Colorado. And I still have the tape to prove this. &lt;/p&gt;
&lt;p&gt;Now to pass the baton on to others. I&amp;rsquo;ll start with one of my partners,&amp;nbsp;&lt;a href="http://www.objectsharp.com/blogs/dave" target="_blank"&gt;Dave Lloyd&lt;/a&gt;. Next is &lt;a href="http://geekswithblogs.net/dtotzke/" target="_blank"&gt;Dave Totzke&lt;/a&gt;. The someone who probably doesn&amp;rsquo;t know that I read his blog: &lt;a href="http://weblogs.asp.net/erobillard/default.aspx"&gt;Eli Robillard&lt;/a&gt;. Finally I go way up the food chain to two blogs that I read to help me get better with my writing and presentation skills, And I know that they have no idea that I read their posts religiously:&amp;nbsp;&lt;a href="http://headrush.typepad.com/" target="_blank"&gt;Kathy Sierra&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.presentationzen.com/presentationzen/" target="_blank"&gt;Garr Reynolds&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=6917" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>A Nice New Year's Gift</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/01/02/a-nice-new-year-s-gift.aspx</link><pubDate>Tue, 02 Jan 2007 05:10:13 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:6664</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/6664.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=6664</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=6664</wfw:comment><description>&lt;p&gt;So when I popped into my In-Box this morning, I received a nice gift from Microsoft: news that I have been re-upped as an MVP. &lt;/p&gt;
&lt;p&gt;For those of you who have never heard of the MVP program, you can visit &lt;a href="http://www.microsoft.com/mvp"&gt;http://www.microsoft.com/mvp&lt;/a&gt;. But it&amp;rsquo;s basically an award to for those who are active in the community. You don&amp;rsquo;t have to be a pure evangelist of Microsoft technologies. In fact, being honest and up front about the good and the bad is considered as part of the package.&amp;nbsp;But you do have to offer help and advice to those who need it. There are many forms that community involvement can take, including writing blogs (such as this one), answering questions on forums, writing books/articles for magazines, and speaking at user groups. I&amp;rsquo;m lucky enough to enjoy participating in all of these activities, as well as working in an environment that encourages it.&lt;/p&gt;
&lt;p&gt;So thanks Microsoft for the honour and I look forward the technology developments in the next year.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=6664" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>How to start the year</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2007/01/01/how-to-start-the-year.aspx</link><pubDate>Mon, 01 Jan 2007 15:19:23 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:6586</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/6586.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=6586</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=6586</wfw:comment><description>&lt;p&gt;Happy New Year all.&lt;/p&gt;
&lt;p&gt;How better to start the year with a couple of personality tests.&lt;/p&gt;
&lt;p&gt;My results:&lt;br /&gt;&lt;b&gt;You are &lt;font size="6"&gt;Superman&lt;/font&gt;&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;Superman&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spider-Man&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Flash&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Green Lantern&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Iron Man&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supergirl&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wonder Woman&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Robin&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hulk&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batman&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catwoman&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;
&lt;td&gt;You are mild-mannered, good, &lt;br /&gt;strong and you love to help others.&lt;br /&gt;&lt;img src="http://www.thesuperheroquiz.com/pics/superman.jpg" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thesuperheroquiz.com/"&gt;Click here to take the "Which Superhero am I?" quiz...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or:&lt;br /&gt;&lt;b&gt;You are &lt;font size="6"&gt;Lex Luthor&lt;/font&gt;&lt;/b&gt; 
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;Lex Luthor&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;84%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dr. Doom&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;81%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apocalypse&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;68%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mr. Freeze&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;64%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Juggernaut&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Magneto&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;59%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kingpin&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;59%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Joker&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;51%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Green Goblin&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;48%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poison Ivy&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;44%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dark Phoenix&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Riddler&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Venom&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catwoman&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mystique&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;32%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two-Face&lt;/td&gt;
&lt;td&gt;
&lt;hr align="left"&gt;
&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;
&lt;td&gt;A brilliant businessman on a quest for world domination and the self-proclaimed greatest criminal mind of our time!&lt;br /&gt;&lt;img src="http://www.thesuperheroquiz.com/villain/pics/lex2.jpg" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;a href="http://www.thesuperheroquiz.com/villain"&gt;Click here to take the "Which Super Villain am I?" quiz...&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=6586" width="1" height="1"&gt;</description></item><item><title>Precocious Children</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/12/28/precocious-children.aspx</link><pubDate>Thu, 28 Dec 2006 14:48:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:5960</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/5960.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=5960</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=5960</wfw:comment><description>&lt;P&gt;I usually don’t talk about my ‘real’ life on this blog as I try to keep it more technically slanted. I probably should create a category about the trials and tribulations of raising young children, as I’m a relative expert in this process. As of this moment, I have four who range in age from 10 down to 4. I say ‘as of this moment’ not because I expect more (we’ve taken steps) but because the oldest is almost 11. &lt;/P&gt;
&lt;P&gt;Of the four, the one that is most ‘interesting’ is number two. He has just turned 9, reads two grades above his age level and finds most of what he’s taking in class boring. This, as you might guess, is a recipe for trouble. Not bad trouble, but he’s the kid who we get regular communications from his teacher about behavioral issues.&lt;/P&gt;
&lt;P&gt;On the up side, he will occasionally do things that give us hours of laughter. Such as the following, which is from an email that appeared in his in-box a short time ago. And yes, I do read his email. He’s 9 and I feel a responsibility to keep track of what his up to.&lt;/P&gt;&lt;FONT size=2&gt;From: "Job Search Agents" &amp;lt;jagent@route.monster.com&amp;gt;&lt;BR&gt;Reply-To: "Monster Job Search Agent" &amp;lt;jagent-feedback@monster.com&amp;gt;&lt;BR&gt;To: &amp;lt;hisemailaddress&amp;gt;&lt;BR&gt;Subject: Monster Jobsearch Agent - 22/12/2006&lt;BR&gt;Date: Fri, 22 Dec 2006 02:30:43 -0500&lt;BR&gt;&lt;BR&gt;Great news! We have found new jobs matching your job search agent criteria!&lt;BR&gt;&lt;BR&gt;Here are the results that were found on December 22, 2006:&lt;BR&gt;&lt;BR&gt;Your job search agent titled&amp;nbsp; "magician" matched new jobs based on your search criteria. Listed below are the top 3 match(es)... (Just click on the job title to view a job.)&lt;BR&gt;&lt;BR&gt;Dec 21, Seasonal Warehouse Magic!, Ellusionist.com, US-CA-Sausalito&lt;BR&gt;Dec 21, Assistant to Operations Director, Ellusionist.com, US-CA-Sausalito&lt;BR&gt;Dec 21, Marketing Manager UK, Aladdin Knowledge Systems (Deutschland) &lt;/FONT&gt;&lt;FONT size=2&gt;GmbH, UK-London-Windsor&lt;/FONT&gt;&lt;BR&gt;
&lt;P&gt;First off, notice how he has gone to Monster.com to create a job search for himself. He’s in to an ‘I need to earn money’ phase, so this definitely fits. He even started a blog that I’ve mentioned previously (&lt;A href="http://camsreviews.blogspot.com/"&gt;http://camsreviews.blogspot.com&lt;/A&gt;) as a way to make money. Second, check out the type of job he’s looking for – magician. He’s an amateur magician with an emphasis on ‘amateur. Finally, notice that indeed Monster went to great lengths to find a match. &lt;/P&gt;
&lt;P&gt;Believe me that the finding of this email gave us much in the way of holiday cheer. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=5960" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Personal/default.aspx">Personal</category></item><item><title>Why the Silence</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/12/23/why-the-silence.aspx</link><pubDate>Sun, 24 Dec 2006 03:11:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:5677</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/5677.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=5677</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=5677</wfw:comment><description>&lt;P&gt;Those of you who actually read my blog on a regular basis might have wondered what had happened to me. While I’ve never been a ‘post-a-day’ kind of writer, it’s rare to have two months go by without a post of any substance. Well, I do have a reason for my absence.&lt;/P&gt;
&lt;P&gt;I have spent the past months working on three separate writing projects, specifically the training kits for the Web, Windows and Enterprise Pro exams that are part of the MCPD certification. The names are too long to include, but they are MCPD Self-Paced Training Kits for exams &lt;A href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FMCPD-Self-Paced-Training-Exam-70-547%2Fdp%2F0735623406%2Fsr%3D1-1%2Fqid%3D1166928098%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=tagconsulting-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;70-547&lt;/A&gt;&lt;IMG style="BORDER-RIGHT:medium none;BORDER-TOP:medium none;MARGIN:0px;BORDER-LEFT:medium none;BORDER-BOTTOM:medium none;" height=1 alt="" src="http://www.assoc-amazon.com/e/ir?t=tagconsulting-20&amp;amp;l=ur2&amp;amp;o=1" width=1 border=0&gt;&amp;nbsp;(Web),&amp;nbsp;&lt;A href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FMCPD-Self-Paced-Training-Exam-70-548%2Fdp%2F0735623392%2Fsr%3D1-1%2Fqid%3D1166928017%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=tagconsulting-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;70-548&lt;/A&gt;&lt;IMG style="BORDER-RIGHT:medium none;BORDER-TOP:medium none;MARGIN:0px;BORDER-LEFT:medium none;BORDER-BOTTOM:medium none;" height=1 alt="" src="http://www.assoc-amazon.com/e/ir?t=tagconsulting-20&amp;amp;l=ur2&amp;amp;o=1" width=1 border=0&gt;&amp;nbsp;(Windows), and &lt;A href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FMCPD-Self-Paced-Training-Exam-70-549%2Fdp%2F0735623384%2Fsr%3D8-2%2Fqid%3D1166927396%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=tagconsulting-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;70-549&lt;/A&gt;&lt;IMG style="BORDER-RIGHT:medium none;BORDER-TOP:medium none;MARGIN:0px;BORDER-LEFT:medium none;BORDER-BOTTOM:medium none;" height=1 alt="" src="http://www.assoc-amazon.com/e/ir?t=tagconsulting-20&amp;amp;l=ur2&amp;amp;o=1" width=1 border=0&gt; (Enterprise). None of these books are available yet (Amazon has them being released on Feb 28th), but I put the final stamp of approval on my part a short time ago. &lt;/P&gt;
&lt;P&gt;This isn’t the first book I’ve been involved in. The other one was called The ASP 3.0 Code Maintenance Handbook from Wrox. The Friday before it was release, Wrox went bankrupt, so you can imagine that it didn’t sell incredibly well. In one of life’s little ironies, all three of these unreleased books are already selling better than my first ever did. And I can’t imagine that I’m a bad enough writer to drive Microsoft press out of business.&lt;/P&gt;
&lt;P&gt;Anyway, once the holiday season has passed, I fully expect to be increasing my blog post output. So look for topics of interest for people who are working with ASP.NET 2.0, as well as anything else that might catch my interest.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=5677" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Certification/default.aspx">Certification</category></item><item><title>SOA Article in IT Business</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/12/22/5675.aspx</link><pubDate>Sat, 23 Dec 2006 03:52:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:5675</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/5675.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=5675</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=5675</wfw:comment><description>&lt;p&gt;I love it when it happens like this. A few months ago (roughly August, I believe)&amp;nbsp;I was interviewed by Gail Balfour about some of my thoughts and experiences on Service Oriented Architecture. She put my comments (along with a few others) into an article. For various reasons, the schedule for including that article kept getting pushed back from Sept to Oct and then Nov. Finally, (at 4:43 on the Friday before Xmas :) it has been released. You can find it at &lt;a href="http://www.itbusiness.ca/it/client/en/ComputerCanada/News.asp?id=41590"&gt;http://www.itbusiness.ca/it/client/en/ComputerCanada/News.asp?id=41590&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Since it's the first time I've been quoted in a publication of this size, I'm a little proud. Forgive my self-indulgence. And, since I haven't said it yet, I hope that all of you enjoy the fun and excitement of the holiday season.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=5675" width="1" height="1"&gt;</description></item><item><title>NHL on Google Video</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/11/02/4111.aspx</link><pubDate>Thu, 02 Nov 2006 20:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4111</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4111.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4111</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4111</wfw:comment><description>&lt;p&gt;What do you do when you&amp;rsquo;re the fourth most popular major sport in a three-sport country? Or when your television ratings are lower than arena football? You go viral. Apparently the NHL has made an agreement to put full-length videos of hockey games up on Google Video. Way cool.&lt;/p&gt;
&lt;p&gt;Check the link out here: &lt;a href="http://video.google.com/nhl.html"&gt;http://video.google.com/nhl.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4111" width="1" height="1"&gt;</description></item><item><title>An inside view of the GooTube saga</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/10/30/4109.aspx</link><pubDate>Tue, 31 Oct 2006 00:50:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4109</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4109.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4109</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4109</wfw:comment><description>I&amp;rsquo;ve been following the Google/YouTube deal relatively closely, if only because of the copyright implications. The following &lt;a href="http://www.blogmaverick.com/2006/10/30/some-intimate-details-on-the-google-youtube-deal/" target="_blank"&gt;post&lt;/a&gt; on &lt;a href="http://www.blogmaverick.com/" target="_blank"&gt;Mark Cuban&amp;rsquo;s blog&lt;/a&gt; contains an interesting and apparently insider&amp;rsquo;s view of the mechanations behind the purchase.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4109" width="1" height="1"&gt;</description></item><item><title>Renaming Windows Workflows</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/10/30/4108.aspx</link><pubDate>Mon, 30 Oct 2006 16:01:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4108</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4108.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4108</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4108</wfw:comment><description>&lt;p&gt;I&amp;rsquo;m spending some time at the moment working with Windows Workflow. Specifically, getting the WF engine to drive a state machine for a Web application that uses a Web service as the &amp;lsquo;next state&amp;rsquo; determinator. And it&amp;rsquo;s as much fun as it sounds.&lt;/p&gt;
&lt;p&gt;I did run into one unexpected problem while working with WF. I had created a workflow and added a number of activities to it. After working with it for a while (including adding some values to the activities), I decided to change the name of the Workflow from Workflow1 to something a little more meaning full. When I made this change, it appeared as if the renaming functionality was doing what it was supposed to do, but upon recompilation, it turns out that it was just teasing.&lt;/p&gt;
&lt;p&gt;All of the values for the activities are in the form of &amp;ldquo;Activity=Workflow1, Path=AuthenticateResponse&amp;rdquo;. Although the workflow was changed to &amp;lsquo;PLCWorkflow, none of the property values were modified. Probably because internally they are stored as strings, but it does mean that you really need to name your workflow before you start any significant work on it. Just something to keep in mind.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4108" width="1" height="1"&gt;</description></item><item><title>TFS Email Notifications</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/10/27/4106.aspx</link><pubDate>Fri, 27 Oct 2006 13:47:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4106</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4106.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4106</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4106</wfw:comment><description>Consider this post to be little more that a future reminder for me. If you&amp;rsquo;re looking for a mechanism to send an email message when a work item is assigned to a developer, check out the solution offered &lt;a href="http://blogs.vertigosoftware.com/teamsystem/archive/2006/07/13/Automatic_email_notifications_when_a_work_item_is_assigned.aspx" target="_blank"&gt;here&lt;/a&gt;. Thanks to &lt;a href="http://www.objectsharp.com/blogs/andre/" target="_blank"&gt;Andre&lt;/a&gt; for finding the link.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4106" width="1" height="1"&gt;</description></item><item><title>Looking for Kid Book Reviews?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/10/26/4105.aspx</link><pubDate>Thu, 26 Oct 2006 12:12:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4105</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4105.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4105</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4105</wfw:comment><description>&lt;p&gt;I don&amp;rsquo;t normally verge away from the technical when it comes to this blog, but I promised my son this post. A little over two weeks ago, he started a blog. Specifically, he starting writing book reviews for the many books that he reads. So if you have a boy in the range of 6&amp;ndash;10 years old , check out &lt;a href="http://camsreviews.blogspot.com/"&gt;http://camsreviews.blogspot.com&lt;/a&gt;. The one thing I will say is that, if you&amp;rsquo;re trying to get your child starting to read, these are the books to go for. The content, at least in some situation, may not seem perfect (some of the books are scary and the Captain Underpants series has what most would consider to be bathroom humor).&amp;nbsp;But the content is also the reason why they keep reading. Something about gross humor seems to work like that.&amp;nbsp;And ultimately, that&amp;rsquo;s really what&amp;rsquo;s important.&lt;/p&gt;
&lt;p&gt;If you like what you see, leave him a comment. He&amp;rsquo;ll be thrilled to know that someone is reading his reviews.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4105" width="1" height="1"&gt;</description></item><item><title>Math Humour</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/10/18/4102.aspx</link><pubDate>Wed, 18 Oct 2006 14:50:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4102</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4102.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4102</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4102</wfw:comment><description>&lt;p&gt;I found this news clipping in a blog post that has since gone broken. If some knows where it originally comes from, please let me know.&lt;/p&gt;
&lt;p&gt;NEW YORK - A public school teacher was arrested today at John &lt;br /&gt;F. Kennedy International Airport as he attempted to board a flight &lt;br /&gt;while in possession of a ruler, a protractor, a set square, a &lt;br /&gt;slide rule, and a calculator. &lt;/p&gt;
&lt;p&gt;At a morning press conference, Attorney General John Ashcroft &lt;br /&gt;said he believes the man is a member of the notorious Al-gebra &lt;br /&gt;movement. He did not identify the man, who has been charged by the &lt;br /&gt;FBI with carrying weapons of math instruction. &lt;/p&gt;
&lt;p&gt;&amp;ldquo;Al-gebra is a problem for us,&amp;rdquo; Ashcroft said. &amp;ldquo;They desire &lt;br /&gt;solutions by means and extremes, and sometimes go off on tangents &lt;br /&gt;in a search of absolute value. They use secret code names like &amp;lsquo;x&amp;rsquo; &lt;br /&gt;and &amp;lsquo;y&amp;rsquo; and refer to themselves as &amp;lsquo;unknowns,&amp;rsquo; but we have determined &lt;br /&gt;they belong to a common denominator of the axis of medieval with &lt;br /&gt;coordinates in every country. As the Greek philanderer Isosceles &lt;br /&gt;used to say, &amp;lsquo;There are 3 sides to every triangle.&amp;rsquo; &lt;/p&gt;
&lt;p&gt;&amp;lsquo;When asked to comment on the arrest, President Bush said, &amp;ldquo;If &lt;br /&gt;God had wanted us to have better Weapons of Math Instruction, He &lt;br /&gt;would have given us more fingers and toes.&amp;rdquo; White House &lt;br /&gt;aides told reporters they could not recall a more intelligent or profound &lt;br /&gt;statement by the president. &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4102" width="1" height="1"&gt;</description></item><item><title>Adding a New Item Template to Visual Studio</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/09/19/4096.aspx</link><pubDate>Tue, 19 Sep 2006 19:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4096</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4096.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4096</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4096</wfw:comment><description>&lt;p&gt;Problem number two I ran into was how to include my newly minted item template into Visual Studio. There are two steps that need to be followed to accomplish this. &lt;/p&gt;
&lt;p&gt;First, the appropriate ZIP file needs to be placed into the directory located (for me) at C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates\CSharp\1033\ItemTemplates. The ZIP file contains the .mht file that I had created, along with a .vstemplate file. The biggest problem I had with this seemingly simple process was how I created the ZIP file. I had a directory called ObjectSharpManualTest that contained the necessary files. I right-click on the directory and sent the directory to the Compressed File option. A nice zip file gets created and all is good with the world.&lt;/p&gt;
&lt;p&gt;Except that it&amp;rsquo;s not in the correct format. &lt;/p&gt;
&lt;p&gt;If you look at the ZIP file, the top level contains a Directory called ObjectSharpManualTest. The .mht and .vstemplate files are in that directory. But when Visual Studio loads the item templates, it only looks at the top level of the ZIP file. And, seeing no .vstemplate file, it moves on without loading. The solution is to select the .mht and .vstemplate files directly (i.e. not the directory in which they are loaded) before creating the compressed file. This results in a ZIP of the correct layout.&lt;/p&gt;
&lt;p&gt;Once the ZIP file has been created, the following command (when executed from the Visual Studio 2005 Command Prompt) loads the item template into Visual Studio.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000"&gt;devenv /InstallVsTemplates&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This command takes a few minutes to run, but when you&amp;rsquo;re finished the item template is ready to be used.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4096" width="1" height="1"&gt;</description></item><item><title>Finding the Export Template menu item in Visual Studio</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/09/19/4095.aspx</link><pubDate>Tue, 19 Sep 2006 19:18:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4095</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4095.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4095</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4095</wfw:comment><description>&lt;p&gt;I&amp;rsquo;m in the process of doing some customization to support a new Team Systems project template and I needed to create a new manual test template. It seemed like it should be pretty simple, but I ran into a couple of issues that are blogworthy. I&amp;rsquo;ll focus on the one described in the title, but there are other posts coming.&lt;/p&gt;
&lt;p&gt;The instructions that I read on how to create an item template were to create the code needed for the template in Visual Studio and then use the File | Export Template menu option. Like I said, sounds easy. Until you discover that there is no Export Template menu option.&lt;/p&gt;
&lt;p&gt;The solution is to add the menu option to the File menu. To do this, from within Visual Studio start with Tools | Customize. On the Commands tab, there is a Rearrange Commands button. Click it and the Rearrange Commands dialog appears. Make sure the Menu Bar radio button is selected and the drop down immediately to the right is &amp;ldquo;File&amp;rdquo;. Then drag the Export Templates command (you&amp;rsquo;ll find it under the File category) from the Customize dialog to the list box area in Rearrange Commands. Close these two dialog boxes and you now have an Export Template menu option exactly where everyone seemed to think it already was.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4095" width="1" height="1"&gt;</description></item><item><title>Changing the Web Service Port for TFS</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/09/14/4093.aspx</link><pubDate>Thu, 14 Sep 2006 14:34:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4093</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4093.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4093</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4093</wfw:comment><description>&lt;p&gt;One of the challenges associated with installing Team Foundation Server in the real world is the hard-coding of some of the ports. Not hard-coding, per se, but the inability to easily modify the assigned ports during the installation process. For example, at the company where I just performed the installation, port 8080 was already being used by some RAID monitoring software. So while the installation process was doing its system check, it balked because port 8080 was already being used. Is there any way to change this during the installation dialog? No. It might be possible to change the msiproperty.ini file, but according to an MSDN Forum &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=669115&amp;amp;SiteID=1" target="_blank"&gt;post&lt;/a&gt;, there are known issues with doing so. So we killed the RAID monitoring process and performed the install on 8080.&lt;/p&gt;
&lt;p&gt;But now I was faced with the need to change the port after the fact. Because, after all, it was much more difficult to change the RAID monitoring software. And should brand new software be able to cope? As it turns out, it can. There are only two steps needed to change the port on a running system. At least two that I&amp;rsquo;ve seen so far and I&amp;rsquo;ve been able to connect to TFS, create projects and modify security. If there are other gotchas, I don&amp;rsquo;t know what they are. The steps are:&lt;/p&gt;
&lt;p&gt;1. Change the port that is being listened to by IIS. This is done through the Internet Information Systems Manager. If you right-click on the Team Foundation Server web site and select Properties, the port number is on the Web Site tab. When finished with this change, make sure that you restart IIS.&lt;/p&gt;
&lt;p&gt;2. In the installation directory for TFS, there is a Web Services directory. In that directory, there is a web.config file. The web.config file has an element named TFSNameUrl. This is the URL, complete with port number, for the web service. Change the port number to reflect the change that you made to IIS.&lt;/p&gt;
&lt;p&gt;These two changes were all that I&amp;rsquo;ve seen in the way of requirements, but if someone runs into trouble, let me know and I&amp;rsquo;ll take a look.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4093" width="1" height="1"&gt;</description></item><item><title>SQL indexing and parameters</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/07/20/4089.aspx</link><pubDate>Thu, 20 Jul 2006 14:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4089</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4089.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4089</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4089</wfw:comment><description>&lt;p&gt;I&amp;rsquo;ve spent some time over the last couple of weeks pondering an unusual SQL tuning problem. The situation is as follows:&lt;/p&gt;
&lt;p&gt;The following statements are executed against a SQL 2000 database that contains &amp;gt;1M records in the act_item table. They are run using Query Analyzer and the Duration and Reads come from SQL Profiler&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;exec sp_executesql N'update act_item set Priority = @Priority where activity_code = @activity_code', N'@activity_code nvarchar(40),@Priority int', @activity_code = N'46DF335F-68F7-493F-B55E-5F9BC6CEBC69', @Priority = 0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Reads: ~22000&lt;br /&gt;Duration: 250-350 ms&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;DECLARE @Priority int&lt;br /&gt;DECLARE @Activity_Code char(36)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;SET @Priority = 0&lt;br /&gt;SET @Activity_Code = '46DF335F-68F7-493F-B55E-5F9BC6CEBC69'&lt;br /&gt;update act_item set Priority = @Priority where activity_code = @activity_code&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Reads: ~160&lt;br /&gt;Duration: 0 ms&lt;/p&gt;
&lt;p&gt;As you can see, the first and second block &lt;em&gt;should&lt;/em&gt; do the same thing and you might expect it to take the same amount of time. But it obviously doesn&amp;rsquo;t. And just so that we&amp;rsquo;re clear, the activity_code field is indexed in the table. So I would have expected the first update statement to run quickly too. &lt;/p&gt;
&lt;p&gt;The reason for the discrepancy is not readily apparent in the information I just provided, although a clue is there. The reason for the difference revolves around the data type for the activity code. In the table definition, it is a char(36). But when the a parameter of type nvarchar(40) is used, rather than converting the nvarchar(40) to a char(36), it converts the char(36) to an nvarchar(40). Which means that instead of using the index to retrieve the row to update, it performs a table scan. Which on a 1 million plus row table is a significant operation.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to read about another persons journey down this road, check out &lt;span class="906162813-20072006"&gt;&lt;a title="http://www.sqlservercentral.com/columnists/dpeterson/bewareofsearchargumentsargdatatypes.asp" href="http://www.sqlservercentral.com/columnists/dpeterson/bewareofsearchargumentsargdatatypes.asp"&gt;&lt;font face="Arial" size="2"&gt;http://www.sqlservercentral.com/columnists/dpeterson/bewareofsearchargumentsargdatatypes.asp&lt;/font&gt;&lt;/a&gt;&amp;nbsp;(thanks to Doug Smyth for this post). This post also refers to a document in SQL Books On-Line that describes the conversion precedence of the various data types. While memorizing the list probably isn&amp;rsquo;t important, it is important to be aware of this list when defining the parameter types for the values passed through ADO.NET. I&amp;rsquo;m sure many of you are diligent about this, but for those who aren&amp;rsquo;t, you need to be keep in mind that not matching the parameter in the database might cause you some performance issues.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4089" width="1" height="1"&gt;</description></item><item><title>Another MVP for ObjectSharp</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/07/04/4084.aspx</link><pubDate>Tue, 04 Jul 2006 13:36:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4084</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4084.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4084</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4084</wfw:comment><description>&lt;p&gt;I found out yesterday that &lt;a href="http://objectsharp.com/blogs/matt/" target="_blank"&gt;Matt Meleski&lt;/a&gt; has been awarded a well deserved &lt;a href="http://mvp.support.microsoft.com/" target="_blank"&gt;Microsoft MVP&lt;/a&gt; award in the BizTalk arena. Matt has been working with the community for years spreading the good word about BizTalk, as well as providing a vast array of examples of how to make BizTalk dance on his &lt;a href="http://www.objectsharp.com/blogs/matt" target="_blank"&gt;blog&lt;/a&gt;. If you have any interest in learning about BizTalk or have particularly gnarly problems, Matt is definitely one of the people to talk to. &lt;/p&gt;
&lt;p&gt;Congratulations Matt.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4084" width="1" height="1"&gt;</description></item><item><title>The Name Game, Part Deux</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/06/21/4083.aspx</link><pubDate>Thu, 22 Jun 2006 01:41:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4083</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4083.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4083</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4083</wfw:comment><description>&lt;p&gt;So long DLinq. Hasta la vista XLinq. You now have new names. And while they are more descriptive, they just don&amp;rsquo;t have the same &amp;lsquo;cool&amp;rsquo; factor for me. Especial since I would have expected ELinq, SLinq and OLinq to have been added. Oh well.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/somasegar/archive/2006/06/21/641795.aspx"&gt;http://blogs.msdn.com/somasegar/archive/2006/06/21/641795.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4083" width="1" height="1"&gt;</description></item><item><title>The Ramifications of .NET 3.0</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/06/14/4079.aspx</link><pubDate>Wed, 14 Jun 2006 20:22:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4079</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4079.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4079</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4079</wfw:comment><description>&lt;p&gt;If you weren&amp;rsquo;t listening closely, you might have missed the &lt;a href="http://blogs.msdn.com/somasegar/archive/2006/06/09/624300.aspx" target="_blank"&gt;announcement&lt;/a&gt; that the WinFX technologies have been renamed to .NET 3.0. One of the questions I have been fielding frequently here at TechEd is &amp;lsquo;what does .NET 3.0 mean to .NET 2.0 applications&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;The answer is &amp;lsquo;nothing&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;.NET 3.0 is an additive upgrade for the Framework. That is to say that the actual installation process for .NET 3.0 involves first checking to see if .NET 2.0 is installed. If not, then .NET 2.0 is installed. Only after .NET 2.0 is available do the four pillars of WinFX (Windows Communication Foundation, Windows Presentation Foundation, CardSpace and Windows Workflow). get installed.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re looking for more information about this, check out &lt;a href="http://www.netfx3.com/"&gt;http://www.netfx3.com&lt;/a&gt;. But in the short term, take away the fact that the introduction of .NET 3.0 means nothing when it comes to developing .NET 2.0 applications.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4079" width="1" height="1"&gt;</description></item><item><title>TechEd 2006 - Best Practices for ASP.NET Security session</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/06/13/4077.aspx</link><pubDate>Tue, 13 Jun 2006 15:13:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4077</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4077.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4077</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4077</wfw:comment><description>&lt;p&gt;So if you put best practices in the title for a session, whether it be at TechEd, PDC or whatever,&amp;nbsp;then I think it should be mandatory to actually discuss what the best practices are. Yes, I know that best practices is a dumb name for what is really prescriptive guidance, but it&amp;rsquo;s not my title.&lt;/p&gt;
&lt;p&gt;As I sit here in a session that is titled &amp;lsquo;Best Practices for Building Secure Web Applications using ASP.NET and IIS 6.0&amp;rsquo;, I&amp;rsquo;m being told about authentication modes, impersonation and identity. Interesting stuff, sure. But not best practices. I don&amp;rsquo;t need to learn this stuff, as I&amp;rsquo;m already more familiar that I care to think about the various authentication modes and the user identities that are available at different times. I want to know about the challenges, limitations and (okay, I&amp;rsquo;ll say it)&amp;nbsp;best practices regarding authentication and authorization.&lt;/p&gt;
&lt;p&gt;Next up was a brief discussion of the Membership API. Again, stuff that I learned about last year. And nothing that talks to when and why I&amp;rsquo;d want to use this.&lt;/p&gt;
&lt;p&gt;The final section was a description of ASP.NET trust levels and the impact that the levels have on web applications. Telling me stuff like, changing from Full trust to High trust can gain some benefits. But as the speaker goes into some of the details, again, I&amp;rsquo;m not getting enough information. For example, he says &amp;lsquo;may need to move code into the GAC&amp;rsquo;. I want to know why, but it&amp;rsquo;s not coming. The speaker talks about application pools and that each pool can be given it's own identity. But no mention of when this might be useful. Or what problems I might run into if I try to communicate between web sites in different pools.&lt;/p&gt;
&lt;p&gt;I feel for the presenter. This is not content that lends itself very well to code demos. Which means that there are more Powerpoint slides than is optimal. And the demos deal with configuration of IIS and ASP.NET, because that&amp;rsquo;s where the changes are. Sigh&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4077" width="1" height="1"&gt;</description></item><item><title>An answer to a CardSpace (aka InfoCard) question</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/06/13/4075.aspx</link><pubDate>Tue, 13 Jun 2006 12:49:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4075</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4075.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4075</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4075</wfw:comment><description>&lt;p&gt;At the beginning of June, I worked at the realDevelopment &amp;lsquo;06 tour stop in Toronto as one of the MVP experts. Half of the day is devoted to Web security and a great deal of attention is paid to &lt;a href="http://msdn.microsoft.com/winfx/reference/infocard/default.aspx" target="_blank"&gt;CardSpace&lt;/a&gt;. If you&amp;rsquo;re not familiar with CardSpace, try remember way back to when it was called InfoCard. If that still doesn&amp;rsquo;t click, think of it as a mechanism for maintaining all of the credentials that you use when you log into various web sites. Unlike Passport, it&amp;rsquo;s not necessarily the same email/user id for every site. Each site can be provided with a distinct set of information about you.&lt;/p&gt;
&lt;p&gt;But that&amp;rsquo;s not the question that was left sitting there. At the question and answer session after the talk, a number of people were asking about exporting CardSpace cards so that they can be imported onto, say, their machine at work. It&amp;rsquo;s quite simple, as it turns out. But, the conversation goes, if it&amp;rsquo;s easy to export the cards, what&amp;rsquo;s to stop someone from walking up to your&amp;nbsp;unattended&amp;nbsp;machine and exporting your cards.&lt;/p&gt;
&lt;p&gt;First off, the possibility that you leave your machine, complete with all of the credentials to access your bank account, unattended is the beginning of the problem. But fortunately, CardSpace is willing to deal with this.&lt;/p&gt;
&lt;p&gt;One of the fun parts of TechEd is that you get meet people who know things. That&amp;rsquo;s what happened last night. I ended up talking with &lt;a href="http://blogs.msdn.com/richardt/" target="_blank"&gt;Rich Turner&lt;/a&gt;, the Product Manager for CardSpace. Who better to ask this question? As it turns out, it was the perfect person to ask.&lt;/p&gt;
&lt;p&gt;The trick is to use a PIN to protect the cards before they get exported. By doing so, you can ensure that, even if they are exported, they cannot be used unless the PIN code is provided. This isn&amp;rsquo;t an unbreakable solution, but what is? It does, however, alleviate the problem that seemed to be on the forefront of most people&amp;rsquo;s mind.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4075" width="1" height="1"&gt;</description></item><item><title>TechEd 2006 - Day 1</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/06/13/4074.aspx</link><pubDate>Tue, 13 Jun 2006 12:02:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4074</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4074.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4074</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4074</wfw:comment><description>&lt;p&gt;Yesterday was my first full day ever at a TechEd conference. The first part of it was blown working with customer issues, so it wasn&amp;rsquo;t until the afternoon that I got to go to my first session. Which was a talk on how to get Windows Workflow and Windows Communications Foundation to work together. Actually, not so much on how, but what&amp;rsquo;s possible.&lt;/p&gt;
&lt;p&gt;I thought it was an interesting talk. Well structure and a good blend between technical demos and the story that you need to keep audiences going (which, as an aside, was what was lacking from the keynote&amp;hellip;but that&amp;rsquo;s another issue). Because I&amp;rsquo;ve already played with the technology, the fact that it was about level 200 meant that there wasn&amp;rsquo;t much new in terms of the details. In fact, I left with one question that I still need to get answered. One that deals with threading.&lt;/p&gt;
&lt;p&gt;Over the course of the&amp;nbsp;presentation demos were shown to illustrate starting a workflow using a WCF (web service, basically) call and how a workflow can call out using WCF. In other words, there is no question that these two pieces of technology know how to talk together. The question I was left with dealt with starting up a workflow using a WCF call. Specifically, who manages the threads that need to be generated. Is it IIS spawning a separate request? Is it the WF host creating a new thread? And what level of thread-safety do I need to have in any custom activities to avoid causing problems?&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t have the answers yet, but I&amp;rsquo;ll let you know when I do.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4074" width="1" height="1"&gt;</description></item><item><title>And so it begins...TechEd 2006</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/06/11/4071.aspx</link><pubDate>Sun, 11 Jun 2006 21:41:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4071</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4071.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4071</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4071</wfw:comment><description>&lt;p&gt;Arrived at the hotel a few minutes ago, after spending a wet by nice weekend at Cape Cod with my wife. Yes, I wasn&amp;rsquo;t as eager as my colleagues to get started on the technical content. So sue me. :)&lt;/p&gt;
&lt;p&gt;Throughout the week, I&amp;rsquo;ll be blogging whenever I come across something interesting to say. I&amp;rsquo;ll be spending a fair bit of time working in the Connected Systems area at the Technical Learning Center. I&amp;rsquo;m looking forward to talking about some of the brand spanking new technologies that fits into that particular niche. I&amp;rsquo;ve already done some work with WCF, but Workflow and WCS (formerly InfoCard) have some potential as well.&lt;/p&gt;
&lt;p&gt;There will be more when I have more.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4071" width="1" height="1"&gt;</description></item><item><title>The Five Stages of .NET Conversion (for VB6 Developers)</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/06/07/4067.aspx</link><pubDate>Wed, 07 Jun 2006 14:07:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4067</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4067.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4067</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4067</wfw:comment><description>&lt;P&gt;For developers, the move from VB6 to VB.NET (or any .NET language) is much more of a mental one than anything else. The syntax of VB.NET is sufficiently familiar to avoid syntax overload. But the functional differences are significant enough to make one question how .NET could make anyone more productive. It has been a while since I made the move myself, but I&amp;#8217;d like to share the stages that I, and I suspect most other converts, have passed through.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Arial&gt;Anger&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Unfortunately this was the first emotion I experience and the one that lingered the longest. When I made the move to .NET, I had been a VB/ASP developer for about 7 years. I could make VB/ASP sing and dance like a virtuoso. I didn&amp;#8217;t need to think about the commands to type&amp;#8230;my fingers knew what to do with no conscious bidding. I strongly believe that more current VB6 developers are living in this state of grace, which is the reason for the lack of acceptance that .NET could increase productivity.&lt;/P&gt;
&lt;P&gt;The first two weeks of .NET were hellacious. I went from coding expert to coding simpleton. Things that were just &amp;#8216;known&amp;#8217; took 45 minutes of Googling to find. Simple functions, like how to convert a string to a date; how to get the current time; how to identify the current working directory. I estimate that I 20% of what I knew was lost with the move to .NET. Anger doesn't begin to describe the feelings of frustration I felt. Rage would be closer.&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Depression&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Anger gave way to depression as I gradually realized that .NET was the way of the future. The size of the base class library was (and still is) quite intimidating. How was I going to get my head around all of the various namespaces/classes/properties/methods? After the frustration of the previous two weeks, I sunk into a depression as I realized that I was much further away from becoming &amp;#8220;.NET virtuoso&amp;#8221; than I had hoped I would be. The days of boundless productivity were both far behind me and far into the future.&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Shock&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The turning point in this process came when I tried to do something in .NET was was challenging in VB6. For me, that was the creation of a Windows Service. In VB6, the ability to create an application that started automatically when the computer was started and responded appropriately to start/stop/pause/continue commands required some high-end programming or a third-party component. But for .NET, it is dirt simple. In VB.NET, you simply create a class that derives from the ServiceBase class. Create the OnStart method that is invoked when the process first starts and you&amp;#8217;re done. Even adding the mechanism to support installing the Windows Service from a command line was easy.&lt;/P&gt;
&lt;P&gt;I was stunned. I started to take a second look at some of the other functionality that were challenging in VB6/ASP, to see if the same improvements had been made. My first stop was creating a simple data-driven Windows&amp;nbsp;form. While it wasn&amp;#8217;t exactly what I was looking for (a problem that has since been corrected in VS 2005), it was certainly better than VB6. And in ASP.NET, DataGrids rocked as a way to display tables of information pulled from a database. Maybe there was something to this productivity increase after all. &lt;/P&gt;
&lt;P&gt;And it didn&amp;#8217;t stop there. Creating a text box that accepted only phone numbers and looked like a normal text box(really&amp;#8230;anyone *like* the inflexibility of the MaskedEdit controls display?) was also a breeze. Derive a class from the TextBox class and implement the KeyPress and Text property overloads to ensure that the format is appropriate. All dirt simple.&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Denial&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Now my world was really in an uproar. Could it be that VB6 wasn&amp;#8217;t the epitome of development tools&amp;#8230;that combination of ease and power that makes it such a staple for business developers? Not possible. After all, look at the millions of lines of code and thousands of developers being successful with VB6. That&amp;#8217;s the only measure of a development environment, isn&amp;#8217;t it?&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Acceptance&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;And yet, VB.NET ultimately wasn&amp;#8217;t that different from what I was used to.&amp;nbsp;Object-oriented concepts had been floating around since VB4.Controls have properties and methods. So could classes. The syntax, nor the idea,&amp;nbsp;isn&amp;#8217;t that new. It took a little while to get my head around the power of inheritance, but that doesn&amp;#8217;t come up in business development as much as people might think. I was now at the end of the made the journey through the stages of .NET. Once you get over the hump, VB.NET is definitely more productive than VB6 for the average business developer.&amp;nbsp;And keep in mind that I&amp;nbsp;went through these stages in 2002.&amp;nbsp;Assuming you&amp;#8217;re moving to VS 2005, then you have even more&amp;nbsp;areas where you have less work&amp;nbsp;to do than you did in the past. &lt;/P&gt;
&lt;P&gt;I do have a word of warning for VB6 developers. The Base Class Library (BCL) is incredibly daunting.&amp;nbsp;While I would like to tell everyone not to be intimidated, it&amp;#8217;s hard not to be.&amp;nbsp;Enhancements, like the My namespace in VB.NET 2005 relieve some of the stress, but there is still a lot of surface area that the average developer needs to be aware of to maximize their effectiveness. When you first buckle down to learn .NET, make sure you focus on the namespaces and classes that make up the bulk of what you&amp;#8217;ll be doing, whether it&amp;#8217;s data access, ASP.NET or graphics. Knowledge and familiarity was ultimately the reason that I was able to move through these stages without any -cide effects&amp;#8230;that would be homicide or suicide.&lt;/P&gt;
&lt;P&gt;Good luck with your own journey.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Update: Title changed, mostly because I can't count. Thanks Rob.&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4067" width="1" height="1"&gt;</description></item><item><title>The Future of Languages: Java vs Everything Else</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/04/27/4059.aspx</link><pubDate>Thu, 27 Apr 2006 15:07:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4059</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4059.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4059</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4059</wfw:comment><description>&lt;p&gt;I&amp;rsquo;ve been lucky enough to meet and talk with&amp;nbsp;a lot of really smart people during my career. And by smart, I mean off-the-charts, jaw-droppingly brilliant. One of the things I have come to take for granted is that people that smart have the ability to see through much of the clutter and religious rhetoric that pervades so many technical discussions. Which is why I was surprised to read (via &lt;a href="http://pluralsight.com/blogs/dbox/archive/2006/04/27/22819.aspx" target="_blank"&gt;Don Box&lt;/a&gt;) about the &lt;a href="http://java.sys-con.com/read/193146.htm" target="_blank"&gt;comments&lt;/a&gt; that James Gosling, the father of Java, has about the current state of languages. &lt;/p&gt;
&lt;p&gt;While (like Mr Box) I wasn&amp;rsquo;t surprised to see him knock C#, the rationale was not exceptional. Basically he said, Java is better because Java runs everywhere.&amp;nbsp;This is a tired argument that&amp;nbsp;lost any real weight when the myth of &amp;ldquo;Write Once, Run Anywhere&amp;rdquo; was dispelled.&lt;/p&gt;
&lt;p&gt;But I found his comments about Ruby to be even more stunningly out of touch. While I can&amp;rsquo;t comment on PHP, I have been exposed to Ruby through the evangilizing of one of my partners, &lt;a href="http://www.iunknown.com/" target="_blank"&gt;John Lam&lt;/a&gt;. It is definitely not restricted to producing Web pages, even though the web framework &lt;a href="http://www.rubyonrails.org/" target="_blank"&gt;Ruby on Rails&lt;/a&gt; is the vehicle by which most people are familiar with Ruby. As for Mr Gosling&amp;rsquo;s comment on performance and scalability being a limiting factor, I find that a little disingenuous in light of Java&amp;rsquo;s history.&lt;/p&gt;
&lt;p&gt;The scariest part of the interview is when Mr Gosling suggests that the only way to have power is through complexity. I would think that the goal of a programming language would be to reduce complexity while retaining power. I&amp;rsquo;m pretty certain that the introduction of C reduced the complexity of writing computer programs (as compared to assembly language) without reducing power significantly. I think that C# reduces some of the complexity of C++ without a corresponding reduction in power. I would expect that the next wave of languages will do the same. I really don&amp;rsquo;t like the idea of the braintrust of a language throwing in the towel with regards to complexity. That is the beginning of the end of that language&amp;rsquo;s reign. And if this is really the attitude of Mr. Gosling, I think that the future of Java is pretty bleak.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4059" width="1" height="1"&gt;</description></item><item><title>You Won't Believe What Chalk Can Do</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/04/26/4058.aspx</link><pubDate>Wed, 26 Apr 2006 05:47:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:4058</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/4058.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=4058</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=4058</wfw:comment><description>A friend of mine sent along &lt;a href="http://users.skynet.be/J.Beever/pave.htm" target="_blank"&gt;this link&lt;/a&gt; of chalk drawings. Yeah, I know. My kids do them too. But not like this. Unless you have heard of Julian Beever, you haven&amp;rsquo;t seen chalk like this. Enjoy.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=4058" width="1" height="1"&gt;</description></item><item><title>Team Foundation Server and SQL Collations</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/02/21/3935.aspx</link><pubDate>Wed, 22 Feb 2006 02:22:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3935</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3935.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3935</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3935</wfw:comment><description>&lt;p&gt;I just got through a grueling session of installing the release candidate for Team Foundation Server. And by grueling, I mean about 16 hours worth. And given all of the glowing reports, I was surprised that this install turned about to be more challenging that the Beta 3 Refresh.&lt;/p&gt;
&lt;p&gt;My problem centered around one particular point in the process. After having installed IIS, SQL Server, and Sharepoint Services on a fresh version of Windows 2003 (and the .NET 2.0 Hotfix), the installation of TFS performs a health check. My results coming out of the health check was that the running SQL Server instance was using an unsupported collation. Now while I have installed SQL Server many times, I&amp;rsquo;ve never given much thought to the collation. So I started looking at the problem. Since I had made no changes during SQL Server installation (with respect to collation), I uninstalled SQL Server and reinstalled it specifically choosing the Latin1_General option. Also, because the instructions in the installation help file said that TFS didn&amp;rsquo;t support case sensitive, binary or binary 2 collations, I left all of the check boxes on that form blank. To no avail. The SQL Server collation was not supportable by TFS&lt;/p&gt;
&lt;p&gt;Just to be clear, after all of the dust had settled, my SQL Server&amp;rsquo;s collation was Latin1_General_CI_AI and TFS just didn&amp;rsquo;t like that.&lt;/p&gt;
&lt;p&gt;So I go digging into the installation log file and come across the SQL statement which gets executed as part of the collation health check:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;SELECT * FROM (SELECT CONVERT(char(100), SERVERPROPERTY('collation')) AS Collation) as c WHERE (Collation LIKE '%[_]CS%') OR (Collation LIKE '%[_]AI%') OR (Collation LIKE '%[_]BIN%') OR (Collation LIKE '%[_]BIN2%')&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The thing that stood out for me was the inclusion of the Collation Like &amp;lsquo;%[_]AI%&amp;rsquo; clause. Unless I&amp;rsquo;m reading this wrong, it means that TFS doesn&amp;rsquo;t like Accent Insensitive collations. And I don&amp;rsquo;t see this small tidbit documented anyplace.&lt;/p&gt;
&lt;p&gt;The sole bright spot is that after I reinstalled SQL Server with the &amp;lsquo;Accent &amp;ndash; sensitive&amp;rsquo; check box on the Collation Settings portion of the installation checked, all went well. I now have a running version of TFS that is capable of working over HTTP. Let the games begin.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3935" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Another Notch in a Colleague's Belt</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/02/14/3864.aspx</link><pubDate>Tue, 14 Feb 2006 15:53:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3864</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3864.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3864</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3864</wfw:comment><description>One of my ObjectSharp partners, &lt;a href="http://objectsharp.com/Blogs/barry/"&gt;Barry Gervin&lt;/a&gt; was recently interviewed on &lt;a href="http://www.dotnetrocks.com/"&gt;.NET Rocks!&lt;/a&gt; about one of my favorite topics: &lt;a href="http://msdn.microsoft.com/netframework/future/linq/"&gt;LINQ&lt;/a&gt;. At the moment, links to the interview in various formats are on the .NET Rocks front page. &lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3864" width="1" height="1"&gt;</description></item><item><title>Migrating from VB6 to .NET in the Real World</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/02/10/3838.aspx</link><pubDate>Fri, 10 Feb 2006 18:08:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3838</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3838.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3838</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3838</wfw:comment><description>&lt;p&gt;In the Windows world, my developer life starting with Visual Basic 3. As a result, I have a great deal of respect for what can be accomplished using a &amp;lsquo;toy&amp;rsquo; development environment. It also means that I have an on-going interest in helping people who have been working in VB6 transition to .NET. But the conversation at the&amp;nbsp;following &lt;a href="http://weblogs.asp.net/rosherove/archive/2006/02/10/437845.aspx" target="_blank"&gt;link&lt;/a&gt;&amp;nbsp;(from &lt;a href="http://swigartconsulting.blogs.com/tech_blender/" target="_blank"&gt;Scott Swigart&lt;/a&gt; posted by &lt;a href="http://weblogs.asp.net/rosherove/" target="_blank"&gt;Roy Osherove&lt;/a&gt;) hits way too close to home. If you want to gain an understanding of at least &lt;strong&gt;part&lt;/strong&gt; of the reason for resistance, put yourself on the receiving end of the conversation. I&amp;rsquo;m hoping that Microsoft is aware of just how common this pattern is in the real world. And how much it violates the RAD culture that exists in VB6.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3838" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Java, .NET, Web Services and Enums</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/01/31/3793.aspx</link><pubDate>Tue, 31 Jan 2006 21:34:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3793</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3793.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3793</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3793</wfw:comment><description>&lt;p&gt;While working on getting a Java Web service and a .NET Web service client to talk to one another, I ran into an interesting situation. The problem had to do with the WSDL being produced by the Java service. Actually, the entire process involved the following steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An interface written in C# was used to generate a WSDL file.&lt;/li&gt;
&lt;li&gt;That WSDL file was imported into JDeveloper and a web service was created&lt;/li&gt;
&lt;li&gt;The WSDL file exposed by the JDeveloper web service was used (through the wsdl.exe tool) to create a proxy class to be used by a .NET client.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The problem was caused by enumerations being used in the interface. The WSDL file generated using the C# interface included defined a separate type (with a base of string) for each enumeration and then restricted the string values for that type. However, the WSDL file exposed by the JDev web service expected that the enumerated parameters would be of type string. Not the restricted, created type that C# wants to send. The resulting type mismatch caused the requests from the .NET client to the Java web service to be rejected with an &amp;lsquo;unknown type&amp;rsquo; message.&lt;/p&gt;
&lt;p&gt;The solution, while admittedly a hack, demonstrations a little discussed features of enumerations. Consider&amp;nbsp;property called Status that is declared as an enumerated type of CallStatus. I added a field called StatusString defined as below and decorated the Status property with a SoapIgnore attribute as follows:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;[SoapElement(&amp;ldquo;Status&amp;rdquo;)]&lt;br /&gt;public string StatusString&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; get { return Enum.GetName(typeof(CallStatus), status); }&lt;br /&gt;&amp;nbsp;&amp;nbsp; set { status = (CallStatus)Enum.Parse(typeof(CallStatus), value); }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[SoapIgnore()]&lt;br /&gt;public CallStatus Status&lt;br /&gt;{ &amp;hellip; }&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The SoapIgnore attribute hides the &amp;lsquo;real&amp;rsquo; Status property from the SOAP serialization process. Instead the StatusString property, which is used to convert enumerated values to and from a string, is marked as being the &amp;lsquo;Status&amp;rsquo; from the perspective of SOAP serialization. One item that may or may not be a problem is that the assigned value of StatusString could be null. This isn&amp;rsquo;t considered as part of this example, as the Web service was under a compulsion to return a valid value. But if the field is nilable, then you would need to code for that in the StatusString setter.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3793" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>A Must-Attend Conference </title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/01/31/3792.aspx</link><pubDate>Tue, 31 Jan 2006 14:49:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3792</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3792.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3792</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3792</wfw:comment><description>&lt;p&gt;For those of you interested in furthering your development career, might I suggest checking out &lt;a href="http://www.waterfall2006.com/" target="_blank"&gt;Waterfall 2006&lt;/a&gt;. It&amp;rsquo;s new, but oh so relevant.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="http://blogs.sarkhouston.com/hdierking/" target="_blank"&gt;Howard&lt;/a&gt; for the heads-up.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3792" width="1" height="1"&gt;</description></item><item><title>Automatic Check-Out Not Working with VSTS/TFS</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/01/27/3774.aspx</link><pubDate>Fri, 27 Jan 2006 17:38:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3774</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3774.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3774</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3774</wfw:comment><description>&lt;P&gt;For the last little while I have been having an issue using source control under TFS. Specifically, when I go to edit a file that (I believe) is under source control, I'm allowed to do so. What's worse, when I go to save the file (like when the application is executed or I'm running through TestManager), I'm told that the file is read-only and I'm asked if I want to overwrite it. Even if I overwrite the file, I still have to go to the Source Control Explorer and manually check the file out for editing.&amp;nbsp;This is,&amp;nbsp;as I'm sure many of you would agreed, annoying beyond belief. I could easily go on for paragraphs about how I'm being taken out of the flow and why isn't this happening automatically.&lt;/P&gt;
&lt;P&gt;When I first discussed this problem with others, I was told to go to the Tools | Options dialog box. Once there, in the Source Control | Environment section, there is a couple of controls that&amp;nbsp;control what happens&amp;nbsp;to files upon Saving and Editing.&amp;nbsp;It was suggested that setting&amp;nbsp;these to &amp;#8220;Check out automatically&amp;#8221; would work.&lt;/P&gt;
&lt;P&gt;Unfortunately, this wasn't the first. First off, it appears that these settings are the default values. At least, they were on my system. Frustration ensued for another couple of weeks.&lt;/P&gt;
&lt;P&gt;Then, for reasons which I'm not sure of, some of the projects in my solution started acting the way they were supposed to. As I started editing a file, a quick &amp;#8220;checking out&amp;#8221; message appeared. I was confused, to put it mildly. Not to mention intrigued. As I started looking I found that the working projects contained a file with an extension of .vspscc. This is the source control bindings information for the project. After a little more work, I discovered how to create this file through the Visual Studio IDE. From the File menu, select Source Control | Change Source Control. In the dialog box that appears, the non-working projects will&amp;nbsp;not be bound to a TFS server. Assuming that you are already connected to the correct TFS server, select the unbound projects and click on the Bind button at the top of the screen. This will check out the project files and you will (naturally) need to revolve any conflicts and check them back in. As well, you may need to restart Visual Studio to get the automatic check-out to work (I'm 50-50 on having to do this). But most importantly, source control will now work more like you would expect.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3774" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>News on TFS Release Candidate</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/01/19/3738.aspx</link><pubDate>Thu, 19 Jan 2006 19:49:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3738</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3738.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3738</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3738</wfw:comment><description>&lt;P&gt;Just passing this information on to any who might have missed it.&amp;nbsp; Look for the Release Candidate for TFS in early February.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/jeffbe/archive/2006/01/19/514801.aspx"&gt;http://blogs.msdn.com/jeffbe/archive/2006/01/19/514801.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3738" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Equality Overloading and Code Analysis</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/01/17/3724.aspx</link><pubDate>Tue, 17 Jan 2006 16:19:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3724</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3724.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3724</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3724</wfw:comment><description>&lt;P&gt;One of the things I like about VS 2005 is the integration of FxCop functionality into the IDE. Most of the time, it informs me of better practices to things that I would have done differently in previous versions of .NET. A good example is the IsNullOrEmpty method on the String class. Code analysis pointed out that, for some of my code, this would be a better performing replacement for the &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;x == null or x == String.Empty&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;tests that are quite common on parameter validation.&lt;/P&gt;
&lt;P&gt;One of the problems that I ran into, however, was when I was trying to correct a code analysis note about validating arguments. Specifically CA 1062 - Validate Arguments on Public Methods. I had a equality operator overload that looked like the following:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;public static bool operator==(BusinessObject x, BusinessObject y)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;{&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;&amp;nbsp; return x.Name = y.Name;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The code analysis complaint was that I should be validating the arguments of the public method. OK, I said, and modified the code to the following:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New" color=#a52a2a&gt;public static bool operator==(BusinessObject x, BusinessObject y)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; if (x == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; if (y&amp;nbsp;== null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New" color=#a52a2a&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; return x.Name = y.Name;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#000000&gt;First off, the reason for the two if statements was because if I only used one, code analysis still complained. But what's worse is that when I ran my unit tests, I got a fatal exception saying that VSTestHost.exe had crashed. Walking through the code, I discovered a fatal oversight that caused the problem. Feel free to take a few seconds to consider the possibilities&amp;nbsp;before reading the answer.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#000000&gt;Figure it out?&amp;nbsp; It's much easier if you debug the app.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#000000&gt;The problem is that the if (x == null) line introduces a stack overflow. This is because in order to evaluate whether x equals null, what does the code do? It calls the overloaded equality operator. Over and over again.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The solution is to modify how a null value is checked. &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New" color=#a52a2a&gt;public static bool operator==(BusinessObject x, BusinessObject y)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; if (Object.ReferenceEquals(x, y))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; if (Object.ReferenceEquals(x, null))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; if (Object.ReferenceEquals(y, null))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New" color=#a52a2a&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; return x.Name == y.Name;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#008000&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;Now you should be good to go.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Update: Corrected the fact that I can't write C# code without the benefit of a compiler :) See the comments for the rationale&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3724" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Toronto Code Camp is in the Books</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2006/01/16/3719.aspx</link><pubDate>Mon, 16 Jan 2006 05:05:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3719</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3719.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3719</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3719</wfw:comment><description>&lt;p&gt;Well the first Toronto Code Camp is finished and, as far as I can tell, it was a success. There was somewhere north of 175 people who spent their Saturday to hear some wonderful speakers discuss technology. Current technology. Future technology.&amp;nbsp;And lots of demos galore. Worst thing that happened was that Saturday morning was the first below freezing day in Toronto in quite a while.&amp;nbsp;Meaning that many of the attendees were colder than normal when they walked through the door.&lt;/p&gt;
&lt;p&gt;Kudos to Chris Dufour and Jean-Luc David, as well as their crack&amp;nbsp;team of volunteers,&amp;nbsp;for putting on a first-rate conference. When&amp;nbsp; you hear about the next code camp, make sure you get your name in quickly. I&amp;rsquo;m sure it will &amp;lsquo;sell&amp;rsquo; out as fast as this one did.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3719" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Upgrading to WSE 3.0</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/11/21/3617.aspx</link><pubDate>Mon, 21 Nov 2005 14:38:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3617</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3617.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3617</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3617</wfw:comment><description>&lt;p&gt;If you weren&amp;rsquo;t aware, the version of WSE 3.0 built against the release version of Visual Studio was released on the Nov 7. I&amp;rsquo;m sure that it would have received launch parties and wide mention in blogs were it not for the conflicting launch of Visual Studio .NET, SQL Server 2005 and BizTalk 2006. :)&lt;/p&gt;
&lt;p&gt;If you did any work with the CTP versions of WSE or if you are upgrading from WSE 2.0, there is one thing you should definitely be aware of. Specifically, I had created a WSE policy that use Anonymous over Certificate security. It was working in the CTP version. Then I upgraded to the release version. All of a sudden, I received the following error message on the client side:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;WSE910: An error happened during the processing of a response message, and you can find the error in the inner exception. You can also find the response message in the Response property.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The inner exception was an InvalidOperationException with a Message of:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;Security requirements are not satisfied because the security header is not present in the incoming message.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;After a fair bit of digging, I determined that this message is actually a &amp;ldquo;can&amp;rsquo;t validate the user&amp;rsquo;s credentials&amp;rdquo; message. But the real cause (because, after all, I was still sending the same credentials that I did prior to upgrading) was a little more subtle. In order for the WSE functionality to work in 3.0, a new element needs to be added to the web.config of the service. &lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New" color="#804000"&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;webServices&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color="#804000" size="2"&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/webServices&amp;gt;&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;When this tag gets added, all of a sudden the message went away. To be fair, this tag is documented as one of the changes between WSE 2.0 and 3.0. What surprised me is that it appears to also be one of the changes between the earlier CTP versions of WSE. Hopefully this post will help others avoid my not-so-brief struggle.&lt;font size="+0"&gt;&lt;/p&gt;&lt;/font&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3617" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Hilarious</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/11/16/3603.aspx</link><pubDate>Wed, 16 Nov 2005 17:36:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3603</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3603.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3603</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3603</wfw:comment><description>&lt;P&gt;Check it out:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1906"&gt;http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1906&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3603" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>How geeks pass the time</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/11/11/3593.aspx</link><pubDate>Fri, 11 Nov 2005 18:32:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3593</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3593.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3593</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3593</wfw:comment><description>&lt;P&gt;As I mentioned &lt;A href="http://objectsharp.com/blogs/bruce/archive/2005/11/04/3562.aspx"&gt;earlier&lt;/A&gt;, I was at the Visual Studio/SQL Server/BizTalk product launch in Ottawa yesterday. I was lucky enough to be included I love getting a chance to talk to people who are just getting into .NET 2.0. I have been working with it on a daily basis for more than 6 months, to the point where I almost forget whas VS 2003 is like. Answering questions helps put my world back into perspective.&lt;/P&gt;
&lt;P&gt;But it's not all talk at this sort of event. There is a fair bit of down time while most of the people are in sessions and there is no one to ask us questions. And when a bunch of geeks get bored, you know the results are not going to be pretty.&amp;nbsp; One of my co-experts, &lt;A href="http://hoser.lander.ca"&gt;Richard Lander&lt;/A&gt;, presented the following challenge: &lt;A href="http://hoser.lander.ca/PermaLink,guid,20c75894-5947-4a62-a9c6-01b14516ecf8.aspx"&gt;http://hoser.lander.ca/PermaLink,guid,20c75894-5947-4a62-a9c6-01b14516ecf8.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Make sure that you give the code a try. I can pretty much guarantee that the number of people who will guess correctly will be incredibly small. After all, Richard is on the CLR team (and smart to boot) and he wasn't jumping up and down with the answer. Even after seeing the results, those of us in the room were scratching our heads looking for the reason. So give it your best shot and let me what you think and why.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3593" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>VS 2005 Launch Events</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/11/04/3562.aspx</link><pubDate>Fri, 04 Nov 2005 14:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3562</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3562.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3562</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3562</wfw:comment><description>&lt;P&gt;Next week, I'm going to be a cabana boy at the VS2005/SQL2005/BizTalk2006 launch events in Toronto and Ottawa. It should be an interesting experience. I'm looking forward to finding out the areas of interest for most people. I've been pretty much immersed in VS2005 for so long, that I almost forget what's new. This should be a nice chance to get caught up with reality. &lt;/P&gt;
&lt;P&gt;If you've already made plans to attend, you might want to check out this &lt;A href="http://blogs.msdn.com/canadian_launch_tour_2005/archive/2005/11/04/489026.aspx"&gt;post&lt;/A&gt; from Mark Relph about a 'hidden' contest. If you haven't made plans, there is still room to register in Toronto. The Ottawa event is currently waitlisted. Up-to-date information can be found at the official &lt;A href="http://www.microsoft.com/canada/launch2005/"&gt;Canadian Launch Site&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3562" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>RTM Version of VB Linq</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/11/03/3557.aspx</link><pubDate>Thu, 03 Nov 2005 15:38:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3557</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3557.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3557</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3557</wfw:comment><description>For those of you that think the bleeding edge is not sharp enough, the bits that include the LINQ preview have been redone for the final version of Visual Studio. You can get it &lt;A href="http://download.microsoft.com/download/b/3/1/b3141ee3-4a13-4061-a96e-4ae3c37ea0e0/LINQ%20VB%20Preview.msi"&gt;here&lt;/A&gt;. Personally, I think you should at least let the code cool before working examples of the next version of a language is available, but what do I know.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3557" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Not enough to retire on, but still...</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/11/03/3556.aspx</link><pubDate>Thu, 03 Nov 2005 13:44:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3556</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3556.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3556</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3556</wfw:comment><description>&lt;P&gt;By way of the &lt;A href="http://www.freakonomics.com/blog"&gt;Freakonomics blog&lt;/A&gt;:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 115px; PADDING-TOP: 0px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: white; TEXT-ALIGN: center"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" src="http://static.flickr.com/23/25822676_789bf55448_t.jpg"&gt;&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;My &lt;A href="http://www.objectsharp.com/blogs/bruce"&gt;blog&lt;/A&gt; is worth &lt;B&gt;$6,774.48&lt;/B&gt;.&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 10px"&gt;&lt;A href="http://www.business-opportunities.biz/projects/how-much-is-your-blog-worth/"&gt;How much is your blog worth?&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" href="http://www.technorati.com/"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" src="http://technorati.com/pix/tech-logo-embed.gif"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3556" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Developers, start your downloads</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/10/28/3540.aspx</link><pubDate>Fri, 28 Oct 2005 14:02:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3540</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3540.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3540</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3540</wfw:comment><description>&lt;P&gt;If the noise rising up from the blogosphere hasn't reached you yet, Visual Studio 2005 and SQL Server 2005 are now available for download for MSDN subscribers. This would be the 'real' versions as opposed to the beta/CTPs that we've been working with to this point. Also, .NET 2.0 Framework is available at &lt;A class=blines3 title="Link outside of this blog" href="http://www.microsoft.com/downloads" target=_blank&gt;www.microsoft.com/downloads&lt;/A&gt;, so that the beautiful VS2005 apps can be deployed to non-development machines.&lt;/P&gt;
&lt;P&gt;Big day, to say the least. And T-minus 9 hours before both downloads have finished for me. ;)&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3540" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Too good, it is. Shared, it must be</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/10/13/3503.aspx</link><pubDate>Thu, 13 Oct 2005 19:43:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3503</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3503.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3503</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3503</wfw:comment><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/mattwar/archive/2005/10/09/479008.aspx"&gt;http://blogs.msdn.com/mattwar/archive/2005/10/09/479008.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3503" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Toronto Code Camp Registration Opens</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/10/05/3487.aspx</link><pubDate>Wed, 05 Oct 2005 18:07:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3487</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3487.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3487</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3487</wfw:comment><description>&lt;P&gt;The rumours have been swirling. Now the truth is out.&lt;/P&gt;
&lt;P&gt;On Sat. Jan 14, there will be a Toronto Code Camp. You can register/find more infomation/hang out at &lt;A href="http://www.torontocodecamp.com/"&gt;http://www.torontocodecamp.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;If you're a developer looking for in-depth content from the people who know (that would be other developers), then the code camp is the place to be. If you're a developer that &lt;U&gt;has&lt;/U&gt; in-depth content that other developers could use, this is you're chance to shine. Regardless, it will be a blast. Clear your schedule now to be there.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3487" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>The end of Begin/End</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/10/02/3480.aspx</link><pubDate>Sun, 02 Oct 2005 16:23:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3480</guid><dc:creator>bruce</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3480.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3480</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3480</wfw:comment><description>&lt;p&gt;While on my way back from the MVP Summit, I was playing around with some of the things I had discovered about VS 2005. I mean, if I was going to drip geekiness for the entire conference, why not extend it to the absolute limit. And what I found was something mildly disturbing.&lt;/p&gt;
&lt;p&gt;A pet peeve of mine for a while has been how easy it is to make an asynchronous Web service call. Whether the caller knows it or now, that call actually makes your application multi-threaded. For the simplest case, that&amp;rsquo;s fine. But when you&amp;rsquo;re making the call from a Windows form application and need to update the user interface with the results of the Web method call, you are getting into an area of complexity that&amp;rsquo;s more complicated than you realize. Ask any decent developer what the hardest time of bug to crack is and invariably you&amp;rsquo;ll get &amp;lsquo;race conditions&amp;rsquo;, &amp;lsquo;deadlocks&amp;rsquo; or just the generic &amp;lsquo;multiple threads&amp;rsquo; back as the answer. And you have entered that realm unknowingly.&lt;/p&gt;
&lt;p&gt;For VS 2005, Microsoft took my complaint and said &amp;lsquo;hey&amp;hellip;if updating the UI is soooooo hard, we should make it easier&amp;rsquo;. Not what I had in mind, trust me. Ask me about a /nomultithread default compiler switch and you&amp;rsquo;ll be closer. So now instead of calling BeginHelloWorld and EndHelloWorld, it is possible to call HelloWorldAsync and create an event handler for HelloWorldCompleted. Yes, it&amp;rsquo;s a familiar model. And, as it turns out, HelloWorldCompleted actually fires on the main UI thread, so that ugly MethodInvoker stuff no longer needs to be understood. &lt;/p&gt;
&lt;p&gt;But along with changing this asynchronous model, Microsoft also eliminated the Begin/End versions of the methods. Which means if you need to do something like a fork/join pattern, you can&amp;rsquo;t. Just so that we&amp;rsquo;re clear, a fork/join would have previously consisted of:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;nbsp; IAsyncResult ar = ws.BeginHelloWorld(null, null);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;nbsp; // Do some stuff in parallel with the web service call&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;nbsp; string result = ws.EndHelloWorld(ar);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Because of how EndHelloWorld works, the main thread will block until the background thread has completed. And if the background thread finishes first, processing will continue normally. This is a very common approach if you&amp;rsquo;re web page were to fire off an asynchronous call to a Web service and wanted to include the results on a page being returned to the client.&lt;/p&gt;
&lt;p&gt;As I was saying, since the Begin/End methods are no longer included in the proxy class, this pattern (at least as I have outlined it) is no longer possible. And to replicate the pattern using the event handler model is non-trivial. So my solution was to take the class generated by WSDL (or by adding a Web reference) and putting back in the Begin/End methods that I need. The basic structure is:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;nbsp;&amp;nbsp;public IAsyncResult BeginHelloWorld(AsyncCallback callback, object asyncState)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return this.BeginInvoke("HelloWorld", new object[0], callback, asyncState);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;nbsp;&amp;nbsp;public string EndHelloWorld(IAsyncResult ar)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;object[] results = this.EndInvoke(ar);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ((string)(results[0]));&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The second parameter on the BeginInvoke call is an array of objects representing the parameters to HelloWorld, so if you&amp;rsquo;re doing this for a method that takes parameters, you&amp;rsquo;ll need to change the dimension of the object array and initialize it appropriately.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3480" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>You know you're living on the edge when...</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/09/30/3479.aspx</link><pubDate>Fri, 30 Sep 2005 18:11:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3479</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3479.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3479</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3479</wfw:comment><description>&lt;p&gt;&amp;hellip;you hear a presenter say &amp;ldquo;In the past&amp;hellip;er&amp;hellip;I mean in the version that&amp;rsquo;s about to ship&amp;rdquo;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3479" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Blogging from the MVP Summit</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/09/30/3478.aspx</link><pubDate>Fri, 30 Sep 2005 18:04:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3478</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3478.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3478</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3478</wfw:comment><description>&lt;p&gt;One of the cool things about being an MVP is that I get invited to the annual MVP Summit. One of the bad things about being at the summit is that it is covered by an NDA agreement. Which means I don&amp;rsquo;t get the blog about anything that I&amp;rsquo;m seeing here. That having been said, I think I can get away with this.&lt;/p&gt;
&lt;p&gt;Yesterday there was a morning of executive keynote presentations. It was in a large facility, complete with big screens, translators and closed captioning. Closed captioning that was hand-typed as the executive was speaking. By someone who isn&amp;rsquo;t intimately familiar with technological terms. The following is a brief list of the mistypings:&lt;/p&gt;
&lt;p&gt;Lynn Yucks = Linux&lt;br /&gt;urine testing = unit testing&lt;br /&gt;martyr = smarter&lt;/p&gt;
&lt;p&gt;Almost seems Freudian, doesn&amp;rsquo;t it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3478" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>Atlas for VS 2005 Release Candidate</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/09/27/3474.aspx</link><pubDate>Tue, 27 Sep 2005 15:59:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3474</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3474.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3474</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3474</wfw:comment><description>&lt;P&gt;It looks like the version of Atlas that is capable of running with the VS 2005 release candidate is being...er...released. The link, from what I can see, is &lt;A href="http://msdn.microsoft.com/asp.net/future/atlastemplate/default.aspx"&gt;here&lt;/A&gt; or &lt;A href="http://lab.msdn.microsoft.com/vs2005/eula.aspx?id=63C6B54B-AF8F-453B-869B-0438DBBB781B"&gt;here&lt;/A&gt;. If it doesn't work, keep trying. The page has been alternating between available and missing.&lt;/P&gt;
&lt;P&gt;Get it while it's hot.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3474" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>What Inferred Types in C# 3.0 are Not!</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/09/24/3469.aspx</link><pubDate>Sat, 24 Sep 2005 18:06:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3469</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3469.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3469</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3469</wfw:comment><description>&lt;p&gt;I had the opportunity earlier this week to listen on a MSDN chat covering the enhancements to C# that were unveiled at PDC. Listen being an imprecise term given that it was a chat, you understand.&lt;/p&gt;
&lt;p&gt;I had two main takeaways from the chat. First, there was a ton of interest in LINQ and the various inner and outer workings of that. I&amp;#8217;ll post some observations on that shortly. The second thing I learned was that there seemed to be a high level of confusion over exactly what inferred types are bringing to the table. I think that the real problem is that they don&amp;#8217;t bring nearly as much as people expect/want/are afraid of. Please allow me to put the underlying thought into my own words.&lt;/p&gt;
&lt;p&gt;In its simplest form, an inferred type looks like the following:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;var a = 1;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The &amp;#8216;var&amp;#8217; keyword is used in place of a data type. At compile time, it is inferred that a is intended to be an integer. From that point forward, the compile treats a as if it had been defined as:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;int a = 1;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;So much for the simplest case. And, in fact, using this as the example is a bit of a problem because no one should ever write code this way. In this simple a case, you should use the second code rather than the first. This makes it difficult to understand when inferred types are even useful. So let me pull the example that was used in the chat:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;Dictionary&lt;Customer,List&lt;Pair&lt;string,Order&gt;&gt;&gt; peopleOrders = new Dictionary&lt;Customer,List&lt;Pair&lt;string,Order&gt;&gt;&gt;();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now everyone who thinks this is easy to read hold up your hand. In this blog, where there is no syntax coloration, it&amp;#8217;s hard to figure out what the name of the variable is, much less what the type is. When this code is read, the programmer will have to give it a second or third glance to get what is going on. And since variable declarations are not normally that important to the business logic of a method, all this syntax does is add friction to the process of understanding. So consider the inferred version:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;var peopleOrders = new Dictionary&lt;Customer,List&lt;Pair&lt;string,Order&gt;&gt;&gt;();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Isn&amp;#8217;t this much easier to digest?  I&amp;#8217;m sure that even those people who put their hands up for that last question will agree. At that, ultimately, is the purpose for inferred types. To reduce the friction involved in reading code. Strong typing is still in place. Programs are still type-safe. Casting exceptions will still be thrown when appropriate. In other words, inferred types are just a way to pretty up the syntax of C#. And given some of the code that I&amp;#8217;ve looked in the past, anything that helps keep modules cleaner is worth it.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3469" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Orcas/default.aspx">Orcas</category></item><item><title>Great Customer Services Sells</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/09/19/3450.aspx</link><pubDate>Tue, 20 Sep 2005 03:59:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3450</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3450.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3450</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3450</wfw:comment><description>&lt;p&gt;One of the things that really turns my head when it comes to software is great customer service. I have been using a product called &lt;a href="HttpContext context," target="_blank"&gt;ClearContext&lt;/a&gt; for about six months now. It is a tool that allows you to prioritize the email that arrive in your Outlook in-box. I have found it quite effective in whittling my in box from almost 1000 to less than 75. &lt;/p&gt;
&lt;p&gt;But this post isn&amp;rsquo;t intended to be an ad for ClearContext. Instead, it was their service that set them off. A little while ago, I lost a hard drive on which I ran Outlook. Which means I also lost the licensing information for ClearContext. While I could download and run the product without the license, the nag screen eventually got to me. On Saturday at 1:33 pm, I sent an email to ClearContext asking if they could resend my registration key.&amp;nbsp; Before 1:45 pm, I had received the keys I requested.&lt;/p&gt;
&lt;p&gt;Why is this so incredible? Because I don&amp;rsquo;t get the sense that ClearContext is a huge company. It&amp;rsquo;s certainly not a Dell, Microsoft or Oracle that have support staff 24x7. But they gave me exactly what I wanted when I wanted it. Can&amp;rsquo;t do any better than that and it&amp;rsquo;s certainly worth a plug in my blog.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3450" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>Getting the schema for an XML column in SQL Server 2005</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/09/06/3275.aspx</link><pubDate>Tue, 06 Sep 2005 12:27:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3275</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3275.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3275</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3275</wfw:comment><description>&lt;p&gt;There is no question that the XML column data type in SQL Server 2005 opens up a large number of interesting possibilities. Some that I&amp;rsquo;ve even been lucky enough to work on myself. In this particular instance, I needed to find out the schema against which a typed XML document will be validated. The idea is to provide some client-side validation for the XML before submitting it to the database server. This doesn&amp;rsquo;t prevent SQL Server from redoing the validation (there isn&amp;rsquo;t any way to prevent that from happening that I&amp;rsquo;ve found), but it does reduce network traffic in the case of bad data.&lt;/p&gt;
&lt;p&gt;The problem I faced was that the schema information is not readily apparent. After some digging, the I found that the following SQL will get the string representation of the schema.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;SELECT Object_Name(Object_id) [TableName],&amp;nbsp;col.name, s.name, XML_SCHEMA_NAMESPACE(sch.name,s.name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM (sys.columns col INNER JOIN sys.xml_schema_collections s ON col.xml_collection_id = s.xml_collection_id)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JOIN&amp;nbsp;sys.schemas sch on s.schema_id = sch.schema_id&lt;br /&gt;WHERE Object_Name(Object_id) =&amp;nbsp;@TableName&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; AND col.name = @ColumnName&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The first two columns are the table and column name. The third column is the name of the schema used for the column. This is the name as found in XML_SCHEMA_COLLECTIONS. The fourth and final column contains the string representation of the schema.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3275" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>I'm sensing some battle lines being drawn</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/08/31/3206.aspx</link><pubDate>Wed, 31 Aug 2005 21:50:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:3206</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/3206.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=3206</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=3206</wfw:comment><description>&lt;p&gt;I&amp;rsquo;ve gotten my hands a little more dirty with SQL 2005 over the last couple of months. I&amp;rsquo;ve used CLR triggers and stored procs to implement some functionality that would have been difficult to do using T-SQL. I&amp;rsquo;ve worked with XML datatypes to generically extend the fields that can be persisted in a table. In other words, I&amp;rsquo;ve played with some of the newer and potential more contentious features of SQL 2K5. &lt;/p&gt;
&lt;p&gt;While cruising through a number of blogs today, I came across this &lt;a href="http://donxml.com/allthingstechie/archive/2005/08/30/2158.aspx" target="_blank"&gt;post&lt;/a&gt; from Don Demsak. In it, he refers to an eWeek article &lt;a href="http://www.eweek.com/article2/0,1895,1853634,00.asp" target="_blank"&gt;DBAs Bar Door Against Big Bad .Net Wolf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My own experiences suggest that this tone is just the beginning. I recently had a chance to hear a presentation on the Web Service functionality that SQL Server provides. For the uninitiated, it is possible to define an HttpEndpoint in SQL Server. On this endpoint, methods can be defined that expose stored procedures. Interesting functionality to include in SQL Server, but what I found most interesting was the angle that the speaker took in support of the idea of exposing your SQL Server machine to the Internet. The suggestion was that, with ASP.NET Web services, the DBA has no idea what data or functionality that the ignorant (my word, but their tone) developer created. By exposing their own Web services, the DBA could take control over the exposed data by eliminating the middle man.&lt;/p&gt;
&lt;p&gt;My first instinct was &amp;lsquo;whoa&amp;rsquo;. The approach seemed a little extreme. Maybe I&amp;rsquo;m just an ignorant developer, but for most of my professional life, the idea of having the machine running the database server exposed to the Internet, even if it was &amp;lsquo;only&amp;rsquo; port 80, was never considered a good idea. And the HttpEndpoint doesn&amp;rsquo;t include support for any of the WS-* standards. It is basically just the same sort of Web service that was available back at ASP.NET 1.0 before the introduction of WSE. &lt;/p&gt;
&lt;p&gt;Does anyone else thing this feature is a good idea?&amp;nbsp; Am I just being short-sighted and/or narrow-minded?&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=3206" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>SQL Server User's Group Meeting in Los Angeles</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/08/25/2974.aspx</link><pubDate>Thu, 25 Aug 2005 20:39:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2974</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2974.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2974</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2974</wfw:comment><description>Just in case anyone reading this blog happens to be in the Los Angeles area, I&amp;rsquo;m speaking at the SQL SIG chapter of the Los Angeles .NET Developer&amp;rsquo;s Group this evening.&amp;nbsp; The topic is Using Managed Code in SQL Server 2005 and it should be a combination of demo and architectural discussion (because the demo is, for the most part, pretty ordinary&amp;hellip;that&amp;rsquo;s what happens with the design is solid:). For more information, check out the &lt;a href="http://ladotnet.org/EventDescription.asp?104" target="_blank"&gt;event description&lt;/a&gt;.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2974" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>EXECUTE permissions needed for XML Schema Collections</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/08/20/2954.aspx</link><pubDate>Sun, 21 Aug 2005 03:51:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2954</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2954.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2954</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2954</wfw:comment><description>&lt;p&gt;I&amp;rsquo;m working in depth with the new XML data type in SQL 2005 for the first time. There are a number of aspects that I really like. In particular the ability to strongly type the column using an XSD as the validation. For what I&amp;rsquo;m doing (it involves allowing a client to extend and persist database tables), they are almost perfect.&lt;/p&gt;
&lt;p&gt;As you work through this process, however, it&amp;rsquo;s important to be aware of the permissions that are required to utilize the schema. Once I had added my XSD to the XML Schema Collection, I tried to INSERT a record into the table. I received the following exception:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;System.Data.SqlClient.SqlException: EXECUTE permission denied on object 'OrdersExtension', database 'Northwind', schema 'dbo'&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;It turns out that in order to use the schema, the user needs to be granted EXECUTE rights. Specifically, the following statement needed to be executed:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;GRANT EXECUTE on XML SCHEMA COLLECTION::dbo.OrdersExtension to DBUser.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Whoo-hoo.&amp;nbsp; Problem solved.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2954" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Ridding yourself of the Print Status Dialog</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/08/15/2936.aspx</link><pubDate>Mon, 15 Aug 2005 15:53:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2936</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2936.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2936</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2936</wfw:comment><description>&lt;p&gt;I had the need this past weekend to eliminate the Print Status dialog from a printing process. Just to make sure that we&amp;rsquo;re speaking the same language, the Print Status dialog is that message box-like artifact that appears while a job is printing. The text in the dialog shows progress with a &amp;lsquo;Printing 1 of 10&amp;rsquo; sort of message. It is this generic message that I was trying to get rid of.&lt;/p&gt;
&lt;p&gt;Research into this area introduced me to a class that I was previously unaware of &amp;ndash; the PrintController. This class is responsible for driving the printing process, detecting when the process has been cancelled and raising the PrintPage event. As such, it is also in charge of displaying and updating the print status dialog.&lt;/p&gt;
&lt;p&gt;There are a number of classes in the .NET Framework that provide print controller functionality. The StandardPrintController actually doesn&amp;rsquo;t display the Print Status dialog, so it is a simple process to instantiate a StandardPrintController object and assign it to the PrintController property on the PrintDocument. Now that annoying (to me, anyway) goes away.&lt;/p&gt;
&lt;p&gt;Or does it. All is good until you want to preview the document. Setting up a PrintPreview dialog and activating it results in that Print Status dialog reappearing. Even after the StandardPrintController is being used. Nothing I try makes the message box go away. Some in depth digging reveals the cause of the problem. Deep in PrintPreviewControl class there is a method called ComputePreview. The purpose of ComputePreview seems to be to generate the entire&amp;nbsp;report and make it available for previewing. Within this method, the PrintController property on the PrintDocument associated with the preview control is temporarily replaced. Replaced, it turns out, with the PreviewPrintController. And the PreviewPrintController displays the print status dialog. To this point, I can&amp;rsquo;t seen how to avoid this problem. Any suggestions are welcome.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2936" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Unexpected Locking in SQL Server 2005</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/07/26/2704.aspx</link><pubDate>Tue, 26 Jul 2005 04:51:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2704</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2704.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2704</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2704</wfw:comment><description>&lt;p&gt;I was working a little bit with SQL Server 2005 today and ran across an unexpected (at least to me) situation. From within the Management Studio, I opened up a table to view the contents.&amp;nbsp; Nothing complicated, although I did modify the default SQL slightly to reorder the results.&amp;nbsp; Then, in another query tab, I executed a script that did a DROP TRIGGER against the table that I had just opened. Problem is, the DROP statement just hung there. Waiting on a lock.&amp;nbsp; Specifically, waiting on exclusive access to the table. A lock that it couldn&amp;rsquo;t get because I had opened the table through Management Studio. Like I said, unexpected.&lt;/p&gt;
&lt;p&gt;The solution was simple once I saw who was holding the lock. Close down the tab and everything was hunky-dory.&amp;nbsp; But the time I spent researching the problem is gone, never to be recovered. I also did a bit of digging into why this was so unexpected. It doesn&amp;rsquo;t appear to happen in Enterprise Manager. Simply opening a table and retrieve all of the rows does not establish a lock on the records. Doesn&amp;rsquo;t even appear to if you start to edit a particular record. Chalk it up to one more thing that is new and improved.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2704" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Getting out of the Longhorn Habit</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/07/22/2702.aspx</link><pubDate>Fri, 22 Jul 2005 17:15:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2702</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2702.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2702</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2702</wfw:comment><description>One of the problems with keeping one eye on the next version of software is getting too comfortable with the name.&amp;nbsp; I still say Whidbey instead of VS.NET 2005 and it will take me a while yet before that problem goes away. And Microsoft has just added another synonym to that problem.&amp;nbsp; Please welcome &lt;a href="http://www.microsoft.com/windowsvista/default.mspx" target="_blank"&gt;Microsoft Vista&lt;/a&gt; as the &amp;lsquo;real&amp;rsquo; name for that which has been called Longhorn for what, about two years. Yeah, like I&amp;rsquo;m going to be able to make that adjustment quickly.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2702" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>A Rare Personal Post</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/07/22/2699.aspx</link><pubDate>Fri, 22 Jul 2005 15:15:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2699</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2699.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2699</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2699</wfw:comment><description>I don&amp;rsquo;t normally post on what&amp;rsquo;s going on in my personal life. For the most part, nobody would care.&amp;nbsp;Not to mention that my life just isn&amp;rsquo;t that interesting.&amp;nbsp;However, having just had our 5 month old chocolate labrador spayed, I found this particular &lt;a href="http://www.basketcasecomix.com/2005-07-04.htm" target="_blank"&gt;comic&lt;/a&gt; (found at Basketcase Comix) to be the biggest laugh I&amp;rsquo;ve had in a few weeks.&amp;nbsp; So how could I not pass it on.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2699" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Invalid XPath Expression in a BizTalk Mapping</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/07/18/2687.aspx</link><pubDate>Mon, 18 Jul 2005 14:22:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2687</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2687.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2687</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2687</wfw:comment><description>&lt;P&gt;While working on a BizTalk mapping for a client, I ran across an unusual problem.&amp;nbsp; When the mapping was tested, an XSL transform error was thrown. Specifically, the error message was:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#804000 size=2&gt;XSL transform error: (0,0) :&amp;nbsp;'userCSharp:(string(*[local-name()='Times' and namespace-uri()='']/*[local-name()='WindowCloseTime' and namespace-uri()='']/text()))' is an invalid XPath expression. 'userCSharp:(string(*[local-name()='Times' and namespace-uri()='']/*[local-name()='WindowCloseTime' and namespace-uri()='']/text()))' has an invalid qualified name.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Since this came from the XSL that is generated by the mapping, the first step I took in identifying the problem (ok&amp;#8230;the first step after scratching my head for 30 minutes or more) was to examine the XSL for the mapping. This can be created by running the Validate Map option from the Solution Explorer. My search for this particular XPath expression found it in an XSL segment that looked like the following.&lt;BR&gt;&lt;FONT face="Courier New" color=#804000 size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#804000 size=2&gt;&amp;lt;xsl:variable select="userCSharp:(string(*[local-name()='Times' and namespace-uri()='']/*[local-name()='WindowCloseTime' and namespace-uri()='']/text()))" name="var:v18"&amp;gt;&amp;lt;/xsl:variable&amp;gt;&amp;nbsp;&lt;BR&gt;&amp;lt;xsl:if test="string($var:v15)='true'"&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xsl:variable select="string($var:v18)" name="var:v19"&amp;gt;&amp;lt;/xsl:variable&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;xsl:attribute name="FIRST_PU_MINUTE"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="$var:v19"&amp;gt;&amp;lt;/xsl:value-of&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;BR&gt;&amp;lt;/xsl:if&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Now that I have a better look, it appears that the userCSharp namespace has attached itself to an XPath expression. Normally, it is attached to a function that is defined further down in the XSL file. No wonder it&amp;#8217;s invalid. &lt;/P&gt;
&lt;P&gt;The good thing is that I was able to see from the attribute name that the problem is in the mapping for the FIRST_PU_MINUTE attribute. When I looked, it turned out that the scripting functoid I was using hadn&amp;#8217;t been defined. Instead of defining the external assembly function, I had left it as the default, commented-out code. Once I corrected that problem, my transform error went away.&lt;/P&gt;
&lt;P&gt;Update: The XSL fragment didn't appear when I first posted it. My bad.&amp;nbsp;Now it makes much more sense.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2687" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>Updating Config Files in ASP.NET 2.0</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/07/15/2673.aspx</link><pubDate>Fri, 15 Jul 2005 05:13:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2673</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2673.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2673</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2673</wfw:comment><description>&lt;p&gt;One of the new features of ASP.NET 2.0 is the ability to not only more easily read from config files, but also to update them. If you&amp;rsquo;re looking for a pretty good description of what&amp;rsquo;s possible, check out the &lt;a href="http://beta.asp.net/QuickStartv20/aspnet/doc/management/default.aspx" target="_blank"&gt;ASP.NET QuickStart Tutorial&lt;/a&gt;. Going over the&amp;nbsp;basic process isn&amp;rsquo;t the point of this post. Instead, I want to talk about an unexpected, but yet expected, side effect.&lt;/p&gt;
&lt;p&gt;The situation is quite common. Your web site utilizes Session variables. Over the course of your application, you update one of the config files that you had defined. All is fine and wonderful right up to the point where a Session variable was accessed. For some unknown reason, it was gone.&lt;/p&gt;
&lt;p&gt;If this particular situation sounds familiar, there could very well be a good reason. It is similar to what happens if web.config gets updated on an active virtual directory. At least the symptoms are. What is actually happening is that the web application gets restarted. So it should be a surprise, should it.&lt;/p&gt;
&lt;p&gt;Well, no. With one minor exception. In the particular case we were looking at, the config file was actually defined as an external file. So in web.config there was an entry similar to:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" color="#804000" size="2"&gt;&amp;lt;customAppSettings configSource=&amp;rdquo;customAppSettings.config&amp;rdquo; /&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;So the actual updates were taking place outside of the web.config file. Since web.config isn&amp;rsquo;t updated, the application shouldn&amp;rsquo;t restart. Should it?&lt;/p&gt;
&lt;p&gt;Well it turns out that the default behavior of the Config API&amp;nbsp;is that changes to the external file cause an application restart just like web.config. And with the application restart comes the loss of Session information&lt;/p&gt;
&lt;p&gt;There is a way to modify this default behavior. In the &amp;lt;section&amp;gt; tag&amp;nbsp;where the config section is defined, the restartOnExternalChanges attribute gets set to false.&lt;/p&gt;
&lt;p&gt;&lt;font color="#804000"&gt;&amp;lt;section name="customAppSettings" type="ObjectSharp.Demo.CustomAppSettingsSection, ObjectSharp.Demo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a140608022e61b4b"&amp;nbsp;&lt;strong&gt;restartOnExternalChanges="false"&lt;/strong&gt; /&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;All of a sudden updating the config file doesn&amp;rsquo;t cause an application restart and all of the little session variables remain fat and happy.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2673" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Invasion of the Language Snatchers</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/07/03/2606.aspx</link><pubDate>Mon, 04 Jul 2005 02:43:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2606</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2606.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2606</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2606</wfw:comment><description>&lt;p&gt;While spending my weekend perusing blog and other light bedtime reading. In doing so, I came across an interesting &lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=d1a0fd34-3279-41ec-a009-f7a6bf6e10c3" target="_blank"&gt;entry&lt;/a&gt; by Rocky Lhotka. He discusses the Mort persona and it&amp;#8217;s impact on the features found in VB.NET.  I agree with his observation that the continuous suggestion that VB is not a &amp;#8216;real&amp;#8217; language has driven a large number of Morts to C#.  I did a number of the MSDN Whidbey User Group tours across Canada and was surprise how often C# is the language of choice even if the development team is already VB familiar. So the trend to adding Mort-desired functionality is only going to pick up speed.&lt;/p&gt;
&lt;p&gt;So is this a good thing for C# developers.  I, for one, believe that it is.  Many of the productivity advancement for Visual Studio come up through the VB.NET ranks. Improved intellisense.  Edit and continue. Having Mort push on the C# IDE will only improve it over time.  If your disappointed by the impurities that might be added to C#, don&amp;#8217;t fret. You can always take up &lt;a href="http://www.ruby-lang.org/" target="_blank"&gt;Ruby&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2606" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Missing vcvarsall.bat in VS.NET 2005 Command Prompt</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/07/03/2605.aspx</link><pubDate>Sun, 03 Jul 2005 05:34:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2605</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2605.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2605</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2605</wfw:comment><description>I took a few moments to dig into a nagging problem this weekend.&amp;nbsp; Seems that whenever I launched the Visual Studio 2005 Command Prompt, I received an error message indicating that a file called vcvarsall.bat couldn&amp;#8217;t be found.&amp;nbsp; A thorough search of the Visual Studio 8 directory found nothing of that name, although there was the old standby of vsvars32.bat. I took a further search through ladybug and I see that it had already been reported and marked as fixed for the release version. If you find this annoying, there is a workaround available.&amp;nbsp; The details can be found at &lt;A href="http://lab.msdn.microsoft.com/productfeedback/ViewWorkaround.aspx?FeedbackID=FDBK24480#2"&gt;http://lab.msdn.microsoft.com/productfeedback/ViewWorkaround.aspx?FeedbackID=FDBK24480#2&lt;/A&gt;, but it works out to be either install C++ or change the shortcut for the command prompt to run vsvars32.bat.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2605" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>And so the migration begins...</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/06/27/2598.aspx</link><pubDate>Mon, 27 Jun 2005 13:59:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2598</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2598.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2598</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2598</wfw:comment><description>I&amp;#8217;ve been a fan of &lt;a href="http://www.nunit.org/" target="_blank"&gt;NUnit&lt;/a&gt; for quite a while now. There is nothing like it for increasing the likelihood of creating quality software in the face of shifting requirements. The philosophy involved with parallel development of unit tests and code is one of the reasons that I&amp;#8217;m looking forward to Visual Studio Team Systems.  With NUnit-like functionality embedded in the IDE, the number of developers utilizing this approach should increase.  And, as it turns out, all of those NUnit tests that have already been created don&amp;#8217;t have to be left behind. Thanks to &lt;a href="http://weblogs.asp.net/rosherove/archive/2005/06/26/415437.aspx" target="_blank"&gt;Roy Osherove&lt;/a&gt;, I found out that a &lt;a href="http://blogs.msdn.com/jamesnewkirk/archive/2005/06/24/432485.aspx" target="_blank"&gt;tool&lt;/a&gt; to convert NUnit tests to VSTS tests is being created by James Newkirk. I&amp;#8217;ve already downloaded it and the playing begins.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2598" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Advancing the Cause of Social Science</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/06/24/2475.aspx</link><pubDate>Fri, 24 Jun 2005 22:53:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2475</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2475.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2475</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2475</wfw:comment><description>&lt;A href="http://blogsurvey.media.mit.edu/request"&gt;&lt;IMG style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" alt="Take the MIT Weblog Survey" src="http://blogsurvey.media.mit.edu/images/survey-cameron.gif"&gt;&lt;/A&gt;&lt;BR&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Have a weblog?&amp;nbsp; Take the following survey and help out an MIT research project.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;BTW, the 'Cameron' I was thinking of is my son. He needs freeing from the enslavement he feels from being 7. :)&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2475" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>A Return to BizTalk EDI Base Service</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/06/16/2258.aspx</link><pubDate>Thu, 16 Jun 2005 04:39:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2258</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2258.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2258</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2258</wfw:comment><description>&lt;p&gt;&lt;font face="Arial" size="2"&gt;A while &lt;/font&gt;&lt;a href="http://objectsharp.com/Blogs/bruce/archive/2005/03/29/1573.aspx#2251" target="_blank"&gt;&lt;font face="Arial" size="2"&gt;ago&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial" size="2"&gt;, I described a problem where BizTalk&amp;rsquo;s EDI Base Service wouldn&amp;rsquo;t restart on a system reboot, even though it was set to start automatically.&amp;nbsp; It turns out that the problem is apparently caused by the timing of the starting of other services.&amp;nbsp; The EDI Base Service requires that the main BizTalk service is running.&amp;nbsp; If it&amp;rsquo;s not, then the start for the EDI service fails.&amp;nbsp; If after your system has settled down from the reboot, you try to start the EDI service manually, all works well.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Arial"&gt;The solution is&amp;nbsp;to add a value to the registry to force the EDI Base Service to depend on the BizTalk service.&amp;nbsp; This is done by adding a value to &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;HKLM/System/CurrentControlSet/Services/EDI Subsystem.&amp;nbsp; The&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;value name is DependOnService.&amp;nbsp; The type for this particular value is REG_MULTI_SZ. &amp;nbsp;The value for this value (yes, I know how that sounds) is the name of your BTSSvc entry. &amp;nbsp;For me, it&amp;rsquo;s BTSSvc{DC267C4B-9C82-4B6F-B5CA-F4571593C6DE}.&amp;nbsp; Yours may or may not (I&amp;rsquo;m guessing not) be the same, but it is a key underneath HKLM/System/CurrentControlSet/Services that starts with BTSSvc followed by a GUID.&lt;?xml:namespace prefix ="" o ns ="" "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Once you&amp;rsquo;ve made this change, the next time you restart, you shouldn&amp;rsquo;t see that error. At least, that has been my experience to date.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2258" width="1" height="1"&gt;</description></item><item><title>And you think SQL injection is dangerous</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/06/13/2222.aspx</link><pubDate>Tue, 14 Jun 2005 02:05:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2222</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2222.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2222</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2222</wfw:comment><description>&lt;p&gt;I&amp;rsquo;m a regular reader of thedailywtf.com. I find it to be an interesting source of examples that I use to lighten up the classroom experience.&amp;nbsp; But this particular example (appropriately called &lt;a href="http://thedailywtf.com/forums/36193/ShowPost.aspx"&gt;Tossing Your Cookies&lt;/a&gt;) is worth spreading around more quickly.&amp;nbsp; I know that defensive web development says that you should validate every input coming into your system, but really&amp;hellip;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2222" width="1" height="1"&gt;</description></item><item><title>Just to make VB.NET developers feel better...</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/05/30/2038.aspx</link><pubDate>Mon, 30 May 2005 18:04:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2038</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2038.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2038</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2038</wfw:comment><description>From &lt;a href="http://pluralsight.com/blogs/dbox/" target="_blank"&gt;Don Box&amp;rsquo;s blog&lt;/a&gt;, I found the following &lt;a href="http://grumpyoldprogrammer.myblogsite.com/blog/Grumps/_archives/2005/5/12/834859.html" target="_blank"&gt;post&lt;/a&gt; describing why C# might become irrelevant.&amp;nbsp; Think of the fun if the &lt;a href="http://classicvb.org/petition/" target="_blank"&gt;VB6 petition&lt;/a&gt;&amp;nbsp;was replaced by classicCSharp.org (note to self&amp;hellip;register that domain).&amp;nbsp; Would each of the points have to end in a semi-colon?&amp;nbsp; Would each objective be surrounded by curly brackets?&amp;nbsp; Enquiring minds want to know.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2038" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>The Dual Life of Code Behind</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/05/15/2009.aspx</link><pubDate>Sun, 15 May 2005 19:52:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2009</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2009.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2009</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2009</wfw:comment><description>&lt;P&gt;When you create an ASP.NET page using Visual Studio .NET, the default processing model is to use code-behind (the basics of which I described &lt;A href="http://objectsharp.com/Blogs/bruce/archive/2005/05/15/2007.aspx" target=_blank&gt;here&lt;/A&gt;). One of the more interesting aspects&amp;nbsp;of code-behind is that you can specify the code for the code-behind assembly using two different techniques.&amp;nbsp; The first, and most commonly used is to build an assembly and deploy it to the bin directory on the web server.&amp;nbsp; The second mechanism is to specify the file containing the source code in the Page directive for the ASPX file.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Compiled Assembly&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;%@ Page Language=&amp;#8221;C#&amp;#8221; Inherits=&amp;#8221;ObjectSharp.WebPageClass&amp;#8221; %&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Source Code&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;%@ Page Language=&amp;#8221;C#&amp;#8221; Src=&amp;#8221;WebPageClass.cs&amp;#8221; %&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;There are pros and cons to both of these approaches.&amp;nbsp; Functionally, they are equivalent.&amp;nbsp; When the first request is made to the page, the source code file is compiled and the resulting assembly loaded into memory. For every subsequent request, no compilation is required. Not only does this mean functional equivalence, but it also means that there is no performance penalty for deploying source code instead of a compiled assembly.&lt;/P&gt;
&lt;P&gt;The biggest downside of the source code technique is exactly that, however.&amp;nbsp; That&amp;nbsp;the code file needs to be deployed onto the web server.&amp;nbsp; This, naturally,&amp;nbsp;has the potential to be a security problem.&amp;nbsp; A deployed assembly doesn&amp;#8217;t have quite the same exposure, if only because it can be deployed into the Global Assembly Cache instead of directly into the application&amp;#8217;s virtual server.&lt;/P&gt;
&lt;P&gt;While it might seem that the security risk might tilt the tables entirely towards compiled assemblies, that isn&amp;#8217;t true.&amp;nbsp; The problem with compiled assemblies has to do with updates to the web site.&amp;nbsp; When a new version of a compiled assembly is deployed to the web server, IIS is smart enough to detect the change.&amp;nbsp; The current web application is stopped and restarted so that the modified assembly can be loaded.&amp;nbsp; Unfortunately, the stopping and starting of the web application means that every Application and, more importantly, Session variable is discarded.&amp;nbsp; Depending on how the web application has been designed, this can be a significant problem.&lt;/P&gt;
&lt;P&gt;Source code deployment doesn&amp;#8217;t suffer from the same problem.&amp;nbsp; As with compiled assemblies, IIS monitors the source code files, so that when an update occurs, a recompilation takes place.&amp;nbsp; So the updates do get activated immediately.&amp;nbsp; The difference is that the web application does &lt;EM&gt;not&lt;/EM&gt; have to be stopped and started in order to get the changes in place. &lt;/P&gt;
&lt;P&gt;Choices, choices.&amp;nbsp; The trick to ASP.NET, as it is with almost any discipline, is to understand not only the choices but when each can and should be used.&amp;nbsp; This not only helps you design better web applications, but also solve those nagging times when the web application seems to restart for no apparent reason.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2009" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Last+Developer+Standing/default.aspx">Last Developer Standing</category></item><item><title>How Consultants Work...well, some of them :)</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/05/15/2008.aspx</link><pubDate>Sun, 15 May 2005 18:52:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2008</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2008.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2008</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2008</wfw:comment><description>As a person who works in the computer industry, I have been a fan of Dilbert for years.&amp;nbsp; As a consultant, I get a special kick out of cartoons such as this &lt;a href="http://www.dilbert.com/comics/dilbert/archive/dilbert-20050515.html" target="_blank"&gt;one&lt;/a&gt;. Not that I&amp;rsquo;ve ever been&amp;nbsp;questioned about the process I use. But even if I was, I&amp;rsquo;d make sure to take my time and&amp;nbsp;consider&amp;nbsp;my answer carefully.&amp;nbsp;:)&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2008" width="1" height="1"&gt;</description></item><item><title>The Code Behind Model of ASP.NET</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/05/15/2007.aspx</link><pubDate>Sun, 15 May 2005 18:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2007</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2007.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2007</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2007</wfw:comment><description>&lt;p&gt;Almost from it&amp;#8217;s beginning, HTML has been a mixture of data, display and logic.  While the original static pages might have only combined data and display, once scripting was introduced the three disciplines have lived together uncomfortably.  ASP only made this situation worse by introducing a different location (the server) where the scripting code could be executed.  &lt;/p&gt;
&lt;p&gt;Ugly doesn&amp;#8217;t adequately describe this problem.  There is little possibility for functional reuse in this scenario.  It is difficult even to modify existing business logic, much less make sure that it&amp;#8217;s capable of being using by other components. This is &lt;em&gt;not&lt;/em&gt; how enterprise-class applications are suppose to be created.&lt;/p&gt;
&lt;p&gt;While ASP.NET supports this older processing model (known as in-line), it also introduced a newer model known a code-behind.  While this particular model doesn&amp;#8217;t eliminate the data/display co-mingling, it does take the business logic away from the web page.  Instead, the events are handled by methods in a separate class.  The code behind class. Let&amp;#8217;s take a brief look at how these pieces (the ASPX page and the code behind class) get wired together.&lt;/p&gt;
&lt;p&gt;
&lt;table width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="100%" bgcolor="silver"&gt;&lt;font face="Courier New" size="2"&gt;&lt;%@ Page Language="C#" Inherits="ObjectSharp.WebPageClass" %&gt;&lt;br /&gt;&lt;HTML&gt;&lt;br /&gt;    &lt;body&gt;&lt;br /&gt;        &lt;form id="MyForm" runat="server"&gt;&lt;br /&gt;        &lt;asp:textbox id="MyTextBox" text="Hello World" runat="server"&gt;&lt;/asp:textbox&gt;&lt;br /&gt;        &lt;asp:button id="MyButton" text="Echo Input" Onclick="MyButton_Click" runat="server"&gt;&lt;/asp:button&gt;&lt;br /&gt;        &lt;asp:label id="MyLabel" runat="server" /&gt;&lt;br /&gt;        &lt;/form&gt;&lt;br /&gt;    &lt;/body&gt;&lt;br /&gt;&lt;/HTML&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;Above is a standard, if simplistic, ASPX page.  Were it not for that first line, it would look like pretty much a run-of-the-mill HTML page.  And it&amp;#8217;s that first line that brings the code-behind class into play.&lt;/p&gt;
&lt;p&gt;That first line is known as the &lt;em&gt;page directive&lt;/em&gt;.  When the ASPX file is processed, the directive is interpreted to mean that a) the language in any of the script blocks in the file will be in C# and b) that the processor should use methods in ObjectSharp.WebPageClass to handle the events raised by the web form.  As an example, this means that the MyButton_Click method (seen above as the Onclick event handler for MyButton) would be implemented in the assembly that contains the ObjectSharp.WebPageClass class.&lt;/p&gt;
&lt;p&gt;
&lt;table width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="100%" bgcolor="silver"&gt;&lt;font face="Courier New" size="2"&gt;using System;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;&lt;br /&gt;namespace ObjectSharp&lt;br /&gt;{&lt;br /&gt;    public class WebPageClass : Page&lt;br /&gt;    {&lt;br /&gt;        protected System.Web.UI.WebControls.Label MyLabel;&lt;br /&gt;        protected System.Web.UI.WebControls.Button MyButton;&lt;br /&gt;        protected System.Web.UI.WebControls.TextBox MyTextBox;&lt;br /&gt;&lt;br /&gt;        public void MyButton_Click(Object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            MyLabel.Text = MyTextBox.Text.ToString();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Above is an example of a code-behind file for that example ASPX page.  Again, there are a couple of points worth noting. First off, the class itself inherits from System.Web.UI.Page.  This is the base page for all ASP.NET code behind files.  The fully qualified name for this particular class is ObjectSharp.WebPageClass, which matches the Inherits attribute in the Page directive.  There is a public method called MyButton_Click that will be invoked whenever the MyButton control on the web page is clicked.  &lt;/p&gt;
&lt;p&gt;The final item of note for this class definition are the three protected variables MyLabel, MyButton and MyTextBox.  You might have noticed that they correspond, by name and type, to the three elements of the example ASPX page that have &lt;em&gt;asp:&lt;/em&gt; as the element&amp;#8217;s namespace qualifier.  That is not a coincidence. By utilizing that &lt;em&gt;asp:&lt;/em&gt; qualifier, a corresponding object is created in the code-behind.  Then when the methods of the object are manipulated within the code-behind class, the values on the web page are modified as well.  &lt;/p&gt;
&lt;p&gt;In the example, the MyButton_Click method sets the Text property on MyLabel.  As a result, the MyLabel control on the page that is sent back to the browser will have it&amp;#8217;s text updated.  This mapping is managed automatically by ASP.NET and has the effect of moving the web page development model much closer to the Windows Forms model.  While you can accurately claim that as an abstraction the ASP.NET code-behind model is leaky, as a starting point for ASP.NET developers, it is nice to have a familiar base from which to build.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2007" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Last+Developer+Standing/default.aspx">Last Developer Standing</category></item><item><title>Last Developer Standing</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/05/14/2003.aspx</link><pubDate>Sat, 14 May 2005 15:33:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2003</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2003.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2003</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2003</wfw:comment><description>&lt;p&gt;In case you were unaware, Microsoft Canada is in the middle of running a Last Developer Standing competition. Modelled on the wildly popular (or at least, moderately watched) Last Comic Standing show on television, the idea is to give developers a series of tests.  For each test, only the developers who answer the most questions correctly get to move on to the next round.  What&amp;#8217;s even better is that the final developer gets more than just good wishes&amp;#8230;to the tune of $25,000.  More information can be found at &lt;a href="http://www.lastdeveloper.com/"&gt;http://www.lastdeveloper.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So why am I mentioning this now?  As part of this contest, I have been asked to blog about some of the topics that contestants will face.  These posts are available on a specific feed (&lt;A href="http://objectsharp.com/Blogs/bruce/category/104.aspx"&gt;http://objectsharp.com/Blogs/bruce/category/104.aspx&lt;/a&gt;), as well as my main feed.  So stay tuned for information that might very well be what you need to be the Last Developer Standing.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2003" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Last+Developer+Standing/default.aspx">Last Developer Standing</category></item><item><title>Licensing VSTS</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/05/13/2002.aspx</link><pubDate>Fri, 13 May 2005 04:24:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:2002</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/2002.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=2002</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=2002</wfw:comment><description>If you're at all interested in using VSTS in your company, the announcement of the pricing for Team Systems was probably quite disturbing.&amp;nbsp; More so if the number of developers on your team numbered in the single digits.&amp;nbsp; Fortunately, Microsoft listened to the feedback (some might call it backlash, but that's just semantics).&amp;nbsp; &lt;A href="http://blogs.msdn.com/rickla/archive/2005/05/12/416994.aspx"&gt;Here&lt;/A&gt; is an announcement by Rick LaPlante outlining some of the changes to Team Systems pricing.&amp;nbsp; Being able to get VSTS 'Lite' (that is, for less than 5 users) will greatly increase the market for the application.&amp;nbsp; And given the issues that VSTS is aiming to solve, the wider the reach of the tool, the better.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=2002" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>App.Config for BizTalk 2004</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/21/1837.aspx</link><pubDate>Thu, 21 Apr 2005 16:52:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1837</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1837.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1837</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1837</wfw:comment><description>&lt;P&gt;As part of a current project, I'm utilizing some standard .NET assemblies in the BizTalk mapping.&amp;nbsp; Because these same assemblies can be used in other non-BizTalk applications, they utilize the app.config file to store potentially changing information.&amp;nbsp; Naturally, because these assemblies and indeed pretty much all of BizTalk run out of the Global Assembly Cache, the location for the app.config file becomes a little challenging to determine.&amp;nbsp; While there are a number of potential solutions for where the information can be stored, I found that the simplest is to place the config information in to the BizTalk server config file.&amp;nbsp; This file is called BTSNTSvc.exe.config and can be found in the installation directory for BizTalk.&amp;nbsp; Also, if you're going to make a change to this file, you need to stop and restart the BizTalk services to get it picked up.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1837" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>Ready to Go Live</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/17/1828.aspx</link><pubDate>Mon, 18 Apr 2005 01:45:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1828</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1828.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1828</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1828</wfw:comment><description>&lt;p&gt;One of the reasons that I've been eagerly awaiting Beta 2 is the Go Live license.&amp;nbsp; This means that I'll be moving bits and pieces of the ObjectSharp web site to Whidbey over the next few weeks.&amp;nbsp; It gives us ObjectSharpees a chance to see what, if any, problems are encountered when creating, testing and deploying in the real world.&amp;nbsp; While our site is not nearly as complicated or demanding as some of the projects that we have under our belt, there is always something that is not quite what we anticipated.&lt;/p&gt;&lt;p&gt;For those of you who might be worried about the dangers associated with putting a Beta product into production, consider this &lt;a href="http://weblogs.asp.net/scottgu/archive/2005/04/16/401381.aspx" target="_blank"&gt;post&lt;/a&gt; from Scott Guthrie describing some of the stress testing that must be endured before the beta version got released. If that doesn't give you some sense of security that the beta is worth working with, nothing will.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1828" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Installing Beta 2</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/17/1827.aspx</link><pubDate>Mon, 18 Apr 2005 01:30:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1827</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1827.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1827</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1827</wfw:comment><description>&lt;p&gt;I just finished installing Beta 2 of Whidbey. For the most part, it went pretty smoothly.&amp;nbsp; &lt;/p&gt;&lt;p&gt;I initially started with a VPC image that had the February CTP installed.&amp;nbsp; I tried to uninstall the bits using the technique suggested on the download page.&amp;nbsp; Didn't work for me.&amp;nbsp; To be fair, I didn't uninstall in the same order that they listed.&amp;nbsp; I just started at the top of the Add/Remove Programs list and went down. I was unable to uninstall any of the SQL Server Express pieces.&amp;nbsp; The uninstall threw up a fatal error during installation message box.&lt;/p&gt;&lt;p&gt;Since it was just a VPC image and I was in a hurry ;), I just created a VMC image from scratch.&amp;nbsp; Now the installation worked to perfection. And I have a Beta 2 version to play with.&amp;nbsp; There goes the evening.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1827" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Philosophy, Debugging and Star Wars</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/17/1825.aspx</link><pubDate>Sun, 17 Apr 2005 14:35:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1825</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1825.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1825</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1825</wfw:comment><description>&lt;p&gt;I find it amazing how certain quotes stick with you over a much longer period of time then they probably should.  Allow me to give two examples.  The first is an oft-repeated phrase spoken by Yoda in the second (or fifth, depending on your numbering system) Star Wars movie:  "Try not.  Do or do not.  There is no try'&lt;/P&gt;&lt;P&gt;Yeah, I know.  I simultaneously dated myself and added a geek label to my business card.&lt;/P&gt;&lt;P&gt;The second quote is a little more professional and, unfortunately, I don't know the origin. "Debugging is the process of discovering how many invalid assumptions you made during  the design and implementation of your program".&lt;/P&gt;&lt;P&gt;While cruising my blog roll today, I came across this &lt;A href="http://www.neward.net/ted/weblog/index.jsp?date="20050414#1113518008833"" target="_blank"&gt;post&lt;/a&gt; from Ted Neward that links these two apparently unrelated quotes.  Nice work and something to keep in mind the next time you're faced with a challenging problem in your code.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1825" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Now featuring Go Live</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/17/1824.aspx</link><pubDate>Sun, 17 Apr 2005 14:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1824</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1824.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1824</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1824</wfw:comment><description>&lt;P&gt;In case you hadn't heard, Beta 2 is now available for download for anyone who is an MSDN subscriber.&amp;nbsp; As someone who is just 20 minutes from completing, a couple of points to consider.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;These are large images.&amp;nbsp; I'm pulling down the Team Suite and it lists at 3.6 GB.
&lt;LI&gt;There is a list of the pre-beta 2 components (from&amp;nbsp;beta 1 or the CTP)&amp;nbsp;that need to be removed from your system before installation.
&lt;LI&gt;Did I mention that it's large.&amp;nbsp; Which means long download times.&amp;nbsp; Mine seems to be coming in at around 15 hours overnight.&amp;nbsp; So don't be holding your breath after clicking "Download"&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Enjoy playing with the pieces and try not to blow all of Sunday.&amp;nbsp; Although, if you haven't started the download yet, the weekend is already safe. &lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1824" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Creating Your Own EDI Schema in BizTalk - Part II</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/06/1589.aspx</link><pubDate>Wed, 06 Apr 2005 18:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1589</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1589.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1589</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1589</wfw:comment><description>&lt;P&gt;See.&amp;nbsp; I told you.&lt;/P&gt;
&lt;P&gt;Actually, this was an error of my own making.&amp;nbsp; The error that appeared on building the schema project was&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;Error in inserting document definition: Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Violation of PRIMARY KEY constraint 'PK__codset__2D27B809'. Cannot insert duplicate key in object 'codset'&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;A similar error was displayed for the segcon and elmnts tables as well.&lt;/P&gt;
&lt;P&gt;The problem was that I had badly defined the EDI schema.&amp;nbsp; The schema I built had two N1Loops (that is a loop that contained N1, N3, N4 and G61 segments). The second loop also contained one more segment, meaning that I couldn't reuse the loop. But, in a moment of boneheadedness, I created duplicate definitions for the N1, N3, N4 and G62 segments.&amp;nbsp; The result was an error such as the one shown above.&amp;nbsp; The solution is to rename the duplicated segments (say N1_2) while (and this is important) keeping the tag_name attributed of the recordInfo tag at N1.&lt;/P&gt;
&lt;P&gt;One thing I will say is that the message that appears is completely useless for identifying the duplicated elements.&amp;nbsp; To see what went wrong, I modified the table definition for segcon, sgmnts, codset and elmnts to get rid of the primary key violation message.&amp;nbsp; Then a build would work to success.&amp;nbsp; Once the build was complete, I used the following statement to see the duplicated records.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;SELECT fc, envr, code, COUNT(*) &amp;nbsp;from codset GROUP BY fc, envr, code ORDER BY COUNT(*) DESC&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Any row with count greater than 1 would cause the violation exception.&amp;nbsp; The envr value contains the segment that is duplicated.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;004010204_004010_DEFAULT_X_&amp;lt;G6101&amp;gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;means that the G61 segment is being duplicated.&amp;nbsp; Realize that if G61 is duplicated, then you will also seen records for G6102, G6103, etc.&lt;/P&gt;
&lt;P&gt;Once I had solved all of my duplication issues, I needed to rebuild the database schema.&amp;nbsp; For me, I only had a couple of schemas, so it was no problem for me to rebuild.&amp;nbsp; I deleted all of the tables and rebuilt the table structure using the Edi.sql script found in c:\Program Files\Microsoft BizTalk Server 2004\EDI\Adapter\bin\config. If you have already compiled a number of schemas and don't want to go through it again, make a backup of the BizTalkEdiDb database before removing the primary keys and perform a&amp;nbsp;restore when all of the problems have been addressed.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1589" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>Metro Toronto User Group - Taking Charge of VS.NET</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/06/1588.aspx</link><pubDate>Wed, 06 Apr 2005 18:55:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1588</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1588.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1588</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1588</wfw:comment><description>I know that it's late notice, but I'm actually a last minute replacement.&amp;nbsp; I'm going to be speaking at the &lt;A href="http://www.metrotorontoug.com"&gt;Metro Toronto User Group&lt;/A&gt; meeting this evening.&amp;nbsp; To keep as many people happy as possible, I'm going to keep the same topic with a bit of a twist.&amp;nbsp; The original topic, which&amp;nbsp;is Taking Charge of the VS.NET IDE,&amp;nbsp;included some demonstrations of automatic data binding using a custom built framework.&amp;nbsp; Since I don't have such a framework at hand, I'm going to fall back on a bird of a feather trick used by my colleagues Dave Lloyd and Barry Gervin.&amp;nbsp; I'll be talking about macros and the extensibility framework, sure.&amp;nbsp; But then I'm going to break into a collection of tips and tricks that can help make the IDE more useful.&amp;nbsp; I'll be looking to the audience members to kick in their own favorites as well.&amp;nbsp; So if you're planning on being there this evening, bring your faves and be ready to share.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1588" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Architect's Breakfast - Enterprise Integration Patterns - Kitchener, April 6</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/05/1586.aspx</link><pubDate>Tue, 05 Apr 2005 15:42:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1586</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1586.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1586</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1586</wfw:comment><description>&lt;P&gt;In case you happen to be in the area and haven't heard about it by now, I'm going to be doing another Architect's Breakfast session at the Sheraton Four Points starting at 7:30 on April 6.&amp;nbsp; The topic is Enterprise Integration Patterns and I'm going to be talking about how to apply patterns and message to solve some common integration issues.&amp;nbsp; If you want more details or would like to register, check out the official invitation &lt;A href="http://www.objectsharp.com/ttdinvitation/entintinvite.asp"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Did I mention that breakfast will be served?&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1586" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Creating your own EDI Schema for BizTalk - Part I</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/05/1585.aspx</link><pubDate>Tue, 05 Apr 2005 15:17:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1585</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1585.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1585</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1585</wfw:comment><description>&lt;P&gt;First off, you'll notice that the title of this blog includes Part 1.&amp;nbsp; I don't have any other parts...yet.&amp;nbsp; But from what I've seen so far in terms of paucity of documentation and general gotchas, I fully expect there to be.&lt;/P&gt;
&lt;P&gt;So I'm create an EDI schema for a 204 transaction.&amp;nbsp; Not a very large transaction, so it figures to be relatively easy to put together.&amp;nbsp; As it turns out, there are a couple of loops within the transaction.&amp;nbsp; Since the 204 transaction is a load tender, there is a header/detail relationship between some of the segments.&amp;nbsp; So after create the header segments, I define an element called DetailLoop.&amp;nbsp; Then, further down in the schema, I define DetailLoop as containing, among other segments, an S5 segment.&lt;/P&gt;
&lt;P&gt;Once the schema has been built, I build the project that contains it.&amp;nbsp; A build error is generated. Specifically, the error is:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;Segment name [DetailLoop] does not start with value of tag [S5]&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The problem is that the EDI schema validator gives more weight to the loop name than I originally thought.&amp;nbsp; It is expecting that the name of the loop start with the name of the first tag in the loop. In other words, when I changed the name of the loop from DetailLoop to S5Loop, the error went away.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1585" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>Authenticating senders and recievers in BizTalk</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/04/1583.aspx</link><pubDate>Mon, 04 Apr 2005 15:32:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1583</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1583.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1583</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1583</wfw:comment><description>&lt;P&gt;Once more back into the EDI/BizTalk breach.&lt;/P&gt;
&lt;P&gt;While testing an BizTalk EDI-document orchestration that I created, I ran into a couple of problem.&amp;nbsp; Specifically, an EDI document was rejected because BizTalk was unable to authorize the sender and receiver.&amp;nbsp; The specific error message (as found in the Event Log) was &amp;#8220;The recipient of the document is not recognized&amp;#8221; or &amp;#8220;The sender of the document is not recognized&amp;#8220;. The documentation on exactly what is being done here is sparse, so let me describe what BizTalk is looking for.&amp;nbsp; To start with, consider the following fist couple of lines in the EDI document.&amp;nbsp; These lines are before the transactions contained within the document and are used by EDI subsystem authenticate and route the document.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;ISA*00*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *00*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ZZ*CONTOSO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *12*4162164603&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *050328*0852*U*00401*000004393*0*P*&amp;gt;&lt;BR&gt;GS*OW*9055551212*5198581234*20050331*1052*3733*X*004010&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;When an EDI document is received through the pipeline, the subsystem opens the document to find the send.&amp;nbsp; In the above code, the sender is indicated by the 'ZZ' and 'CONTOSO' blocks in the first line.&amp;nbsp; As well, the sender id is found in the third field ('9055551212') in the second like.&amp;nbsp; These data are combined to form a party identifier. The party identifier looks like EDI://CONTOSO:ZZ:9055551212.&amp;nbsp;Once the identifier is created, the EDI Subsystem examines the list of Parties to find the sender.&amp;nbsp; If not found, then an entry is put into the event log saying that the sender could not be authenticated.&lt;/P&gt;
&lt;P&gt;The second part of the authentication process is to authenticate the receiver. The identifier for the receiver is constructed in a similar manner.&amp;nbsp; For the above example, the recipient party identifier is EDI://4162164603:12:5198581234.&amp;nbsp; The information used to create this come from the first line (segments 6 and 7) and&amp;nbsp; the second line (segment 4).&amp;nbsp; Not only does the EDI Subsystem look for the sender party identifier in the Parties list, but also the recipient party identifier.&lt;/P&gt;
&lt;P&gt;What this means is that in order for the EDI Subsystem to accept an EDI document, both the sender and recipient need to be defined as a Party.&amp;nbsp; To do this, open up the BizTalk Explorer, expand the view to reveal the Parties node.&amp;nbsp; Right click on Parties and select Add Party. In the dialog box that appears, give a reasonable name for the party.&amp;nbsp; In the Properties list that appears, add a property called EDI, with a Qualifier of EDI and a Value of the sending party identifier (for our example, EDI://CONTOSO:ZZ:9055551212).&amp;nbsp; Save this new party.&amp;nbsp; Make sure that a second party is created using the receiving party identifier.&amp;nbsp; With this combination of parties, the incoming EDI documents can be correctly authenticated and fed in to the processing pipeline.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1583" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>New Article - Optimizing the Downloading of Large Files in ASP.NET</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/04/04/1581.aspx</link><pubDate>Mon, 04 Apr 2005 14:35:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1581</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1581.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1581</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1581</wfw:comment><description>Just to let everyone know, I have posted a new article on techniques that can be used to optimize the downloading of large files in ASP.NET.&amp;nbsp; It discusses some of the architectural issues that impact download speed if you need to push multi-megabyte files to a browser client. If you're interested, you can find it &lt;A href="http://objectsharp.com/Blogs/bruce/articles/1571.aspx"&gt;here&lt;/A&gt;.&amp;nbsp; As always, comments and suggestions are appreciated.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1581" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category></item><item><title>XSD2EDI Failure locks the repository</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/30/1575.aspx</link><pubDate>Wed, 30 Mar 2005 16:51:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1575</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1575.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1575</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1575</wfw:comment><description>&lt;P&gt;As a result of the problems that I described in my last &lt;A href="http://objectsharp.com/Blogs/bruce/archive/2005/03/30/1574.aspx"&gt;post&lt;/A&gt;, I ran into another little documented (there seem to be a number of these surrounding EDI and BizTalk) problem.&amp;nbsp; When I rebooted my system after the Validate Schema process hung my system, I immediately tried to run it again (by definition, insanity is trying the same thing over and over, expecting a different result, isn't it?).&amp;nbsp; This type around I got an error message saying that my respository was locked.&amp;nbsp; Specifically (and for Google), the message is:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;Schema validation failed: Repository was locked on host [hostname] by process [xsd2edi], processid [nnn]&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;Sympton: Build output:&lt;BR&gt;XSD2EDI failed to convert XSD: Can't lock repository because it is already locked&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;It turns out that the correction for this is quite simple.&amp;nbsp; In the BizTalkEDIDb, there is a table called parame.&amp;nbsp; This table contains a single record (at least, that's what it has on my system).&amp;nbsp; One of the first in this table is called repolock.&amp;nbsp; In that field is the name of the host, process and process id that is updating (I assume) the repository.&amp;nbsp; It is set by XSD2EDI and, naturally, the information survives a system crash and restart.&amp;nbsp; To unlock your respository and be able to validate your schemas again, set the value of repolock to null using your favorite method.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1575" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>BizTalk EDI and Virtual PC</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/30/1574.aspx</link><pubDate>Wed, 30 Mar 2005 16:42:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1574</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1574.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1574</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1574</wfw:comment><description>&lt;P&gt;As you might have figured out (from my recent posts), I'm working on a BizTalk project.&amp;nbsp; Specifically, I've been dealing with the joys of trying to get the base EDI adapter working the way that I want/expect.&amp;nbsp; Yesterday, it was trying to get the 850 Schema validated. There are two items that I want to mention that got in my way.&lt;/P&gt;
&lt;P&gt;First, because of all the different software I try out, I'm a firm believer and user of Virtual PC.&amp;nbsp; So the BizTalk I'm using is installed on a VPC running 2K3.&amp;nbsp; The system on which it's running has 1GB of RAM, around 650MB are allocated to the VPC.&lt;/P&gt;
&lt;P&gt;So back to the story.&amp;nbsp; In the BizTalk project in VS.NET, you right click on a schema and select Validate Schema.&amp;nbsp; This basically runs the XSL2EDI.exe process to validate the schema and convert it into the BizTalkEDIDb tables.&amp;nbsp; On my system, I was finding that running this process would freeze my machine after about 10 minutes of running.&amp;nbsp; And by 'freeze', I don't just mean the VPC.&amp;nbsp; My entire system would seize up, requiring a hard reboot to get started again.&amp;nbsp; After having this happen a couple of times, I looked at what might be the cause.&lt;/P&gt;
&lt;P&gt;Turns out that the project in which the schema I was validating still had an orchestration running.&amp;nbsp; Once I stopped the orchestration, the freezing problem seems to be solved.&amp;nbsp; Or, to put it a slightly more pragmatic way, it hasn't happened since and I've validated more than one schema since then. It's only empirical evidence, but it's all that I have.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1574" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>XSD2EDI Failed to convert XSD</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/29/1573.aspx</link><pubDate>Tue, 29 Mar 2005 14:30:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1573</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1573.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1573</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1573</wfw:comment><description>&lt;P&gt;I've been spending some time on BizTalk Server 2004 these past few weeks.  And for the next few, just so that you know the source of future posts.  I've run into this situation a couple of times, so I'm posting as much as a reminder to me as for any other reason.&lt;/P&gt;
&lt;P&gt;My current project has me working EDI (after a seven or eight year absense) integration with an existing application.  As a result, I get the chance to work with BizTalk's EDI Adapter. From a configuration perspective, it's quite simple to get set up, but I was receiving a strange error on my build.&lt;/P&gt;
&lt;P&gt;XSD2EDI: Failed to convert XSD: Compiling repository failed&lt;/P&gt;
&lt;P&gt;According to a support article (&lt;A href="http://support.microsoft.com/?kbid=883549"&gt;http://support.microsoft.com/?kbid=883549&lt;/A&gt;), this is caused by an authentication issue with the BizTalk Base EDI Service.  But, in my case, that wasn't the problem. Instead, what appears to be happening is that this server, even though it is marked as being Automatic, wasn't starting.  The first time I saw this error, the service actually Disabled, so you need to address that particular issue.  But even after that, I would still see the error the next time I rebooted the server.  Nothing in the event log to indicate a problem, so at the moment I'm both puzzled and looking for clues.  I'll keep you posted if I find something.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1573" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/BizTalk+2004/default.aspx">BizTalk 2004</category></item><item><title>Using C# in BAT files</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/25/1566.aspx</link><pubDate>Fri, 25 Mar 2005 16:25:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1566</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1566.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1566</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1566</wfw:comment><description>Personally, writing BAT files has never been my thing.&amp;nbsp; And with the experience I have in C#, the ability to script and automate in that language would be quite useful.&amp;nbsp; Thanks to this &lt;A href="http://wintellect.com/WEBLOGS/wintellect/archive/2005/03/23/931.aspx"&gt;post&lt;/A&gt; from Jason Clark, I now have the ability to run C# (and for the VBers among you, VB.NET) as part of a BAT file.&amp;nbsp; Incredibly cool.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1566" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category></item><item><title>The floodgates are...well...beginning to open</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/16/1548.aspx</link><pubDate>Wed, 16 Mar 2005 14:30:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1548</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1548.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1548</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1548</wfw:comment><description>From a couple of different sources, I'm seeing that the first set of documentation for Indigo is now available at &lt;A class=blines3 title="Link outside of this blog" href="http://winfx.msdn.microsoft.com" target=_blank&gt;http://winfx.msdn.microsoft.com&lt;/A&gt;.&amp;nbsp; And, as &lt;A href="http://blogs.msdn.com/distilled/archive/2005/03/15/396300.aspx"&gt;Andy Milligan&lt;/A&gt; suggests, the implication is that the bits for Indigo can't be far behind. Personally, my mouse is poised over the MSDN download page.&amp;nbsp; The rest of you probably have a life. ;)&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1548" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>VB6 Support Coming to an End</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/07/1530.aspx</link><pubDate>Mon, 07 Mar 2005 22:39:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1530</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1530.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1530</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1530</wfw:comment><description>&lt;P&gt;Courtesy of &lt;A href="http://www.thedatafarm.com/blog/PermaLink.aspx?guid=ac27cc6b-0098-4088-b1fc-1c36f6965572"&gt;Julia Lerman&lt;/A&gt;, I am reminded that mainstream support for VB6 comes to an end on March 31.&amp;nbsp; Now contrast that fact with the results of a survey that found over 50% of shops are still using VB6, a fact I blogged about &lt;A href="http://objectsharp.com/Blogs/bruce/archive/2005/02/16.aspx"&gt;here&lt;/A&gt;.&amp;nbsp; Does anyone else see a problem with this picture?&lt;/P&gt;
&lt;P&gt;The problem of telling people who are currently running VB6 why they might want to move their applications has been at the front of my brain for a little while.&amp;nbsp; The biggest roadblock is that there really is no direct compelling reason.&amp;nbsp; Put it to you this way. You have an application currently working in VB6.&amp;nbsp; It took a couple of man years to build, but everyone is comfortable with it.&amp;nbsp; Both your developers and users can use and extend it as they need to.&lt;/P&gt;
&lt;P&gt;Along comes someone saying that the company needs to convert to VB.NET.&amp;nbsp; This is a working application, not a broken one.&amp;nbsp; There is a cost to doing the conversion, not just in the effort, but in the efficiency of the development team.&amp;nbsp; As someone who made the move from VB6 to VB.NET about 4 years ago, I can tell you I was quite frustrated by how much my productivity dropped for the first few weeks (or months).&amp;nbsp; And what does the company get on the other side?&amp;nbsp; An application that (hopefully) works. Not really the ROI that one would hope for.&lt;/P&gt;
&lt;P&gt;The problem is that the benefit to moving to the .NET platform comes about in the future.&amp;nbsp; A well designed .NET application is much easier to extend.&amp;nbsp; Using widely accepted software design processes (like unit testing and FXCop) are more easily accomplished using .NET.&amp;nbsp; Meaning that the quality of the software produced increases. So over the life of an application, the company will definitely make back its investment.&amp;nbsp; Or, more accurately, is quite likely to make it back.&amp;nbsp; But the argument is a difficult one to make to an executive with their eye on the financials of a company.&amp;nbsp; Invest potentially tens and hundreds of thousands of dollars for what return?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm still thinking about how to crack this nut.&amp;nbsp; Any suggestions that you have or stories that you've run into would be helpful, so feel free to send them on.&amp;nbsp; And I'm sure I'll come back to this in a later post.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1530" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Why Penquins are No Longer at the North Pole</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/03/1466.aspx</link><pubDate>Thu, 03 Mar 2005 16:31:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1466</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1466.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1466</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1466</wfw:comment><description>&lt;P&gt;Courtesy of &lt;A href="http://www.livejournal.com/users/hippopottoman/"&gt;Hippopotoman&lt;/A&gt;, this is pecisely why picture == words * 1000. No question this will be my biggest laugh of the day.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://today.java.net/jag/page14.html#113"&gt;http://today.java.net/jag/page14.html#113&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1466" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Sending Mail through SMTP with Authentication</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/03/1465.aspx</link><pubDate>Thu, 03 Mar 2005 15:35:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1465</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1465.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1465</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1465</wfw:comment><description>&lt;P&gt;If you have looked at the process of sending emails from within .NET, odds are pretty good that you have stumbled across the SmtpServer class.&amp;nbsp; To send email, you create a MailMessage object, assign the necessary properties and then use the Send method on SmtpServer.&amp;nbsp; The SmtpServer class can be pointed to any mail server that you would like.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;MailMessage message = new MailMessage();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;message.From = "bjohnson@objectsharp.com";&lt;BR&gt;message.To = "who@ever.com";&lt;BR&gt;message.Subject = "Testing";&lt;BR&gt;message.Body = "This is a test";&lt;BR&gt;&lt;BR&gt;SmtpServer.Server = "mail.server.com";&lt;BR&gt;SmtpServer.Send(message);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;So all is well and good right?&amp;nbsp; Well maybe not so much.&amp;nbsp; What happens if your email server, like all good servers, doesn't allow relays.&amp;nbsp; Instead, it requires that a user id and password be provided.&amp;nbsp; What I found strange is that the SmtpServer class doesn't include properties like UserId or Password to handle the authentication.&amp;nbsp; So how is this accomplished.&lt;/P&gt;
&lt;P&gt;The answer is to utilize a newly added feature(new to .NET 1.1, that is).&amp;nbsp; The MailMessage class has a Fields collection.&amp;nbsp; The necessary authentication information gets added to the fields in the message that is being sent out. Certainly not where I expected it to be, but smarter people than I designed the class, so I'm sure there was a reason for this approach.&amp;nbsp; Regardless, it's knowledge that needs to be easily Googlable, hence the post. An example of the code that adds the three fields follows.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#a52a2a&gt;&lt;FONT face="Courier New"&gt;message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", &lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#a52a2a&gt;&lt;FONT face="Courier New"&gt;"1"); &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;//basic authentication&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#a52a2a&gt;&lt;FONT face="Courier New"&gt;message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", &lt;BR&gt;&amp;nbsp;&amp;nbsp; "userid"); &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;//set your username here&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#a52a2a&gt;&lt;FONT face="Courier New"&gt;message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", &lt;BR&gt;&amp;nbsp;&amp;nbsp; "password"); &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;//set your password here&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1465" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Anticipation</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/03/03/1464.aspx</link><pubDate>Thu, 03 Mar 2005 15:17:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1464</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1464.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1464</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1464</wfw:comment><description>Now here is news that I have been waiting to hear.&amp;nbsp; Whidbey Beta 2 will probably be released in the next couple of days.&amp;nbsp; For me, this is very cool news, as I have been looking forward to getting the Go Live license.&amp;nbsp; For more information, check out Wesner Moise's blog entry &lt;A href="http://wesnerm.blogs.com/net_undocumented/2005/03/whidbey_beta_2_.html"&gt;here&lt;/A&gt;.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1464" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Pure Math III - The SHA Also Rises</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/24/1450.aspx</link><pubDate>Thu, 24 Feb 2005 22:34:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1450</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1450.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1450</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1450</wfw:comment><description>&lt;P&gt;While perusing SlashDot, I came across an entry saying that the SHA-1 hashing algorithm has been broken.&amp;nbsp; If you have any familiarity with cryptography, you'll realize just what this means.&amp;nbsp; After all, SHA-1 is at the heart of SSL, digital signature and (wait for it) strongly named .NET assemblies.&amp;nbsp; So does this signify the end of days?&amp;nbsp; Total anarchy? Cats and dogs living together?&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Not so much.&amp;nbsp; From a practical perspective, what has really happened is that brute force is no longer the best way to find a string that will hash to a given value.&amp;nbsp;Consider for a moment what the job of a hashing algorithm is:&amp;nbsp; to take a given string of arbitrary length and convert it to another string of a specified length (160 bits for SHA-1).&amp;nbsp; The properties of the hash are that there should be close to a&amp;nbsp;one-to-one correspondence between the initial string and the hashed string.&amp;nbsp; It should also not be possible to regenerate the original string given only the hash. &lt;/P&gt;
&lt;P&gt;Of course, complete one-to-oneness is impossible.&amp;nbsp; There are more strings of arbitrary length then there are of a specified length.&amp;nbsp; When two strings hash to the same value, it is called a collision.&amp;nbsp; And it means that when either of those strings are used, for example, as part of a digital signature, the results will be the same.&amp;nbsp; If it were easy to go from a hashed value to any string that would generate the hash, the algorithm would be poor.&lt;/P&gt;
&lt;P&gt;For a few years, it was believed that the best way to find the collision for a given hash was brute force.&amp;nbsp; That is, randomly generate strings until a collision was found.&amp;nbsp; What it means to say that SHA-1 is broken is that brute force is no longer the fastest way to a collision.&amp;nbsp; The researchers have described a technique that reduces the effort by a factor of 2000.&amp;nbsp; Now that means that instead of 2&lt;SUP&gt;80&lt;/SUP&gt;&amp;nbsp;calculations, only 2&lt;SUP&gt;69&lt;/SUP&gt; are required.&amp;nbsp;Still not a meager number, but quite a breakthrough.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;A more complete description of the implications can be found &lt;A href="http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html"&gt;here&lt;/A&gt;. &lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1450" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Getting ahead of the Whidbey Curve</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/23/1448.aspx</link><pubDate>Wed, 23 Feb 2005 22:25:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1448</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1448.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1448</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1448</wfw:comment><description>&lt;P&gt;It is likely that, given the relative proximity of the release of Whidbey and Yukon, you will be inundated with information about these tools/products in the next six months.&amp;nbsp; And it's already started.&amp;nbsp; ObjectSharp (in conjunction with Microsoft) is in the midst of giving a series of week-long training sessions on Whidbey and Yukon.&amp;nbsp; If you haven't signed up already, it's actually too late.&amp;nbsp; The last two sessions (Calgary and Montreal) are already sold out.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;But that's not all.&amp;nbsp; As well as the Whidbey/Yukon talk, ObjectSharp (again, in conjunction with Microsoft) is presenting a series of day-long, hands-on workshops on Visual Studio Team Systems (at a cost of $299).&amp;nbsp; Five cities (Montreal, Vancouver, Calgary, Ottawa and Toronto), two seminars (with a good chance for a third) each. You heard that right.&amp;nbsp;Hands-on.&amp;nbsp;Right in your backyard.&amp;nbsp;Believe me when I say that VSTS is one of the cooler parts of the next wave of products.&amp;nbsp; Now you get a chance to try it out, first hand.&amp;nbsp; Interested?&amp;nbsp; Click &lt;A href="http://www.objectsharp.com/ttdinvitation/VSTSBootcamp.aspx"&gt;here&lt;/A&gt;.&amp;nbsp; If you do it now, you'll actually be ahead of the crowd.&amp;nbsp; This series has just been officially unveiled, so not even the masses have heard about it.&amp;nbsp; And you though there was no real benefit to subscribing to this blog. ;)&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1448" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Montreal .NET Architecture User Group</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/21/1442.aspx</link><pubDate>Mon, 21 Feb 2005 14:53:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1442</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1442.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1442</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1442</wfw:comment><description>&lt;P&gt;I get the opportunity to travel to Montreal to speak to the &lt;A href="http://www.gumsnet.org/fra/default.htm"&gt;GUMSNET&lt;/A&gt; study group tomorrow. The topic under consideration will be Windows Services.&amp;nbsp; I'll be making a brief presentation, showing some code and answering any and all questions that I can.&amp;nbsp; I'm looking forward to going to Montreal, as it has been over 15 years since I was&amp;nbsp;last in one of the nicest cities in North America.&amp;nbsp; I won't get more than a half-day to look around, but since the meeting is at McGill University, at least it's close to the downtown area, which is where I'll be hanging up to show time.&lt;/P&gt;
&lt;P&gt;And, in case you were wondering, the presentation is in English. My French is such that my 7-year old son who is in French-immersion is beginning to surpass my quite limited vocabulary. &lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1442" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>The cost of no hockey season</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/18/1439.aspx</link><pubDate>Fri, 18 Feb 2005 21:32:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1439</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1439.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1439</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1439</wfw:comment><description>&lt;P&gt;This is a (for me) rare trip outside of the realm of technology in my blog.&amp;nbsp; So if that's what you're hear for, feel free to skip to the next entry.&lt;/P&gt;
&lt;P&gt;For those of you still with me, how about $1 billion.&amp;nbsp; That's a 1 followed 9 zeros.&amp;nbsp; More than chump change, even BillG.&amp;nbsp;And yet, that's roughly what the NHL players will *not* be paid this year.&amp;nbsp; Check out Mark Cubans &lt;A href="http://www.blogmaverick.com/entry/1234000837032305/"&gt;blog&lt;/A&gt; (always a fascinating look into the business of sports) for the rationale and why he&amp;nbsp;puts Bob&amp;nbsp;Goodenow into rare company.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1439" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>Putting it into Perspective</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/16/1434.aspx</link><pubDate>Thu, 17 Feb 2005 00:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1434</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1434.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1434</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1434</wfw:comment><description>&lt;P&gt;One of the dangers of being a consultant, especially one who focuses on cutting edge technology, is that it's easy to get wrapped up in a small, insular world.&amp;nbsp; In my case, that would be .NET. And at this moment in particular, Whidbey, Yukon and Indigo. Why is this a problem?&amp;nbsp; Because sometimes it blinds you to the problems that the majority of the programming world is working on.&amp;nbsp; To get a look at the world from the perspective of the 'masses', check out the results of this &lt;A href="http://www.visual-expert.com/us/info/survey_vb_2004_results.htm"&gt;survey&lt;/A&gt; (thanks to &lt;A href="http://weblogs.asp.net/despos/archive/2005/02/16/374175.aspx"&gt;Dino Esposito&lt;/A&gt; for the link).&lt;/P&gt;
&lt;P&gt;One of the more interesting points is that almost 50% of the respondees come from 1-2 person shops.&amp;nbsp; Because I don't know the methodology behind the survey, I am suspicious of the accuracy of the percentages.&amp;nbsp; However even allowing for a large margin of error, I find that percentage&amp;nbsp;significant.&amp;nbsp;And I have no doubt that you will have to pry VB6 (if I can borrow a phrase) from their cold, dead fingers.&amp;nbsp; After all, small shops like that don't normally have the luxury of fooling around with new technology.&amp;nbsp; There is too much real work to be done.&lt;/P&gt;
&lt;P&gt;That having been said, I have seen many times how great an improvement in developer productivity can be obtained through the &lt;EM&gt;proper&lt;/EM&gt; use of the .NET Framework.&amp;nbsp; And these small shops would probably benefit the most from&amp;nbsp;the productivity gains, if they can just be pushed to the&amp;nbsp;top of the learning curve.&amp;nbsp;My question is:&amp;nbsp; what is the best way to introduce these people, who are already hugely productive in their tool set, to the benefits of .NET?&amp;nbsp; Any suggestions out there, because I'm certainly open to them.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1434" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Getting your Message Across</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/14/1424.aspx</link><pubDate>Mon, 14 Feb 2005 18:04:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1424</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1424.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1424</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1424</wfw:comment><description>&lt;P&gt;For those of you who have ever had to deal with the 'how to get your message across' part of every presentation's creation process.&amp;nbsp; Enjoy (thanks to &lt;A href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1695"&gt;Chris Sells&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.theonion.com/news/index.php?issue=4106&amp;amp;n=3"&gt;http://www.theonion.com/news/index.php?issue=4106&amp;amp;n=3&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1424" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Why I write</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/13/1419.aspx</link><pubDate>Sun, 13 Feb 2005 19:12:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1419</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1419.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1419</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1419</wfw:comment><description>&lt;p&gt;Just came across (via &lt;a href="http://weblogs.asp.net/ksharkey/archive/2005/02/01/364923.aspx" target="_blank"&gt;Kent Sharkey&lt;/a&gt; and &lt;a href="http://ginasmith.typepad.com/gina_on_gina/2005/01/why_writers_can.html" target="_blank"&gt;Gina Smith&lt;/a&gt;) a quote that very accurately describes the path that I took to get to where I am right now with my writing.&amp;nbsp; &lt;/p&gt;&lt;p&gt;"Writing is like prostitution. First you do it for love, and then for a few other close friends, and then for money." Moliere&lt;/p&gt;&lt;p&gt;Only a little bit for the money, at this point. But there's always hope ;)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1419" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>Getting Something for Nothing - Almost</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/13/1418.aspx</link><pubDate>Sun, 13 Feb 2005 19:03:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1418</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1418.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1418</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1418</wfw:comment><description>&lt;p&gt;It's not often that you can get something for nothing. And this case is no exception. But when you realize what you do get, it's still a very, very good deal.&lt;/p&gt;&lt;p&gt;The offer is basically as follows:&amp;nbsp; buy some Microsoft Office Licenses, get a check towards to cost of developing software that utilizes the Office application set.&amp;nbsp; If this sounds lame to you, then you probably aren't aware of all of the development tools that are available for Office.&amp;nbsp; Nor all of the uses to which it can be put.&lt;/p&gt;&lt;p&gt;For example, we have one client that uses InfoPath as one of the interfaces into a workflow application.&amp;nbsp; Users enter data through an InfoPath form.&amp;nbsp; The data is transformed into an XML document which is then submitted to the workflow through a web service.&amp;nbsp; And that is just one application.&amp;nbsp; The &lt;a href="http://msdn.microsoft.com/office/understanding/vsto/default.aspx" target="_blank"&gt;Visual Studio Tools for Office (VSTO)&lt;/a&gt; toolkit is surprisingly powerful.&amp;nbsp; If your user base is familiar with Office, then the ability to extend Word and Excel to interact with your corporate applications can be quite compelling.&lt;/p&gt;&lt;p&gt;If you want to talk to someone about the possibilities, feel free to drop me a line at &lt;a href="mailto:bjohnson@objectsharp.com"&gt;bjohnson@objectsharp.com&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1418" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Changing Gears</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/13/1417.aspx</link><pubDate>Sun, 13 Feb 2005 14:14:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1417</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1417.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1417</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1417</wfw:comment><description>&lt;p&gt;First off, I apologise for my relative dearth of recent posts.&amp;nbsp; At the end of January, I finished off a fairly long contract. And, as yet, I haven't started onto anything new.&amp;nbsp; Actually, it has been a nice break for me, but for my blog?&amp;nbsp; Not so much.&lt;/p&gt;&lt;p&gt;Whether you realize it or not, I use the current project that I'm working on as fodder for many of my posts.&amp;nbsp; The goal of most of my posts is to describe a situation that I have run into, one that I hope is a relatively common one.&amp;nbsp; For that, I need situations.&amp;nbsp; No current project, then the bloggable situations are much fewer.&lt;/p&gt;&lt;p&gt;What I have been spending my time on is getting back into ASP.NET.&amp;nbsp; And what I apparently blocked out of my mind is some of the annoyances associated with data binding on web pages.&amp;nbsp; Especially the two-way binding necessary to allow web pages to show and update data.&amp;nbsp; I'm very much looking forward to the improvements in this process that will be forthcoming with Whidbey.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1417" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Seems like maps are the next big thing</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/02/09/1407.aspx</link><pubDate>Wed, 09 Feb 2005 16:55:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1407</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1407.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1407</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1407</wfw:comment><description>&lt;P&gt;First there is &lt;A href="http://maps.google.com/"&gt;Google Maps&lt;/A&gt;, a masterful example of the power of client-side scripting.&lt;/P&gt;
&lt;P&gt;And today, I find out about &lt;A href="http://www.csthota.com/blogmap"&gt;Blogmaps&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.csthota.com/blogmap" alt="BlogMap"&gt;&lt;IMG style="BORDER-RIGHT: black 1px dashed; BORDER-TOP: black 1px dashed; BORDER-LEFT: black 1px dashed; BORDER-BOTTOM: black 1px dashed" alt=http://www.csthota.com/blogmap/ src="http://www.csthota.com/blogmap/blogapi.ashx?method=blogmap&amp;amp;feed=http://www.objectsharp.com/blogs/bruce/Rss.aspx&amp;amp;height=250&amp;amp;width=150&amp;amp;label=Bruce Johnson"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;How could I resist?&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1407" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>So it has started - the auction for Aceh Aid, that is</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/23/1375.aspx</link><pubDate>Sun, 23 Jan 2005 14:27:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1375</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1375.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1375</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1375</wfw:comment><description>The 10-day eBay auction for 30 world-famous .NET developers got under way less than half-an-hour ago.&amp;nbsp; Check out the auction at &lt;A href="http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;amp;item=5552696499"&gt;&lt;FONT color=#0000cc&gt;http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;amp;item=5552696499&lt;/FONT&gt;&lt;/A&gt; &lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1375" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Standards at the speed of thought</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/21/1368.aspx</link><pubDate>Fri, 21 Jan 2005 14:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1368</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1368.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1368</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1368</wfw:comment><description>I've had to deal with comment spam in the ObjectSharp blogs over the past few days.&amp;nbsp; Through a search of Google, found a simple, trigger-based &lt;A href="http://netnerds.net/articles/285.aspx"&gt;solution&lt;/A&gt; for .Text (the engine that we use) that I suspect will deal with the majority of the spam that was coming through.&amp;nbsp; But, as explained in this &lt;A href="http://www.google.com/googleblog/2005/01/preventing-comment-spam.html"&gt;post&lt;/A&gt;, Google is modifying their ranking engine to pay attention to a newly created&amp;nbsp;attribute on the anchor tag that will basically mitigate the benefit of comment spam, that being to artificially raise the Google rank for the offending links.&amp;nbsp; What impressed me is the speed with which this innovation was implemented, not only by Google but by the list of blog hosts and competitive search engines at MSN and Yahoo.&amp;nbsp; Whoa. Would that other standards could work that way.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1368" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Upcoming Architect's Breakfast</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/20/1362.aspx</link><pubDate>Thu, 20 Jan 2005 16:56:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1362</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1362.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1362</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1362</wfw:comment><description>&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;ObjectSharp has&amp;nbsp;been doing a bimonthly Architect's Breakfast seminar for about 6 months now.&amp;nbsp; The idea was to provide architects information on enterprise level topics without impacting significantly on their normal daily routine.&amp;nbsp; It has been quite a success.&amp;nbsp; Enough so that we're making a couple of changes.&amp;nbsp; First, the Toronto sessions will now be monthly.&amp;nbsp; Second, we are introducing a bimonthly seminar in the Kitchener/Waterloo/Cambridge area.&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;If you are interested, this month&amp;#8217;s topic is &lt;STRONG&gt;&lt;EM&gt;Business Intelligence and SQL Reporting Services. &lt;/EM&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;You can find all the details here: &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;Toronto&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;: &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;&lt;A href="https://werner.objectsharp.com/exchweb/bin/redir.asp?URL=http://www.objectsharp.com/TTDInvitation/BusInt_invite.htm" target=_blank&gt;http://www.objectsharp.com/TTDInvitation/BusInt_invite.htm&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;Kitchener: &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=navy size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Verdana"&gt;&lt;A href="https://werner.objectsharp.com/exchweb/bin/redir.asp?URL=http://www.objectsharp.com/TTDInvitation/BusInt_inviteKW.htm" target=_blank&gt;http://www.objectsharp.com/TTDInvitation/BusInt_inviteKW.htm&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1362" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Grabbing the contents of your clipboard</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/20/1361.aspx</link><pubDate>Thu, 20 Jan 2005 14:17:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1361</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1361.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1361</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1361</wfw:comment><description>Want to see something&amp;nbsp;that's a little freaky?&amp;nbsp; Check out this &lt;A href="http://www.harriyott.com/2005/01/javascript-clipboard-control.aspx"&gt;post&lt;/A&gt;. Apparently you can grab the current contents of a user's clipboard through Javascript running in a browser.&amp;nbsp; While this probably isn't as much a security issue as some might think (after all, there really is no context for the data that is retrieved), it is interesting that it's even possible.&amp;nbsp; Thanks to &lt;A href="http://www.livejournal.com/users/hippopottoman/"&gt;Blair&lt;/A&gt; for the heads up.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1361" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>I know a celebrity!!!</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/19/1355.aspx</link><pubDate>Thu, 20 Jan 2005 03:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1355</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1355.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1355</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1355</wfw:comment><description>One of my colleagues, &lt;A href="http://www.objectsharp.com/blogs/barry"&gt;Barry Gervin&lt;/A&gt;, is part of a wonderfully generous effort to raise money for &lt;A href="http://acehaid.org/"&gt;Aceh Aid at IDEP&lt;/A&gt;.&amp;nbsp; Twenty-four of the best and brightest of the .NET community are each donating an hour of their time to be put up for auction on eBay.&amp;nbsp; Julia Lerman has more details &lt;A href="http://www.thedatafarm.com/blog/PermaLink.aspx?guid=29f19653-b078-4b6e-9b4b-e60d1d2b00a1"&gt;here&lt;/A&gt;. Keep an eye out for the auction and please bid generously.&amp;nbsp; You know the hour of any of these consultant's time is worth it.&amp;nbsp; And you're money does good in an area that desparately needs it.&amp;nbsp; Nice combination, isn't it.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1355" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Generating Passion in your Life</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/19/1351.aspx</link><pubDate>Wed, 19 Jan 2005 18:50:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1351</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1351.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1351</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1351</wfw:comment><description>&lt;P&gt;Found another interesting &lt;A href="http://headrush.typepad.com/creating_passionate_users/2005/01/passion_is_infe.html"&gt;blog entry&lt;/A&gt;&amp;nbsp;on passion by Kathy Sierra on generating passion.&amp;nbsp; And we're talking about passion for technology and life, not that other thing.&amp;nbsp; Too much of that other thing resulted in the four kids that currently occupy much of my non-working hours.&lt;/P&gt;
&lt;P&gt;The basic premise is that people tend to emulate those around you.&amp;nbsp; Hang with complainers and you will (subtly, perhaps) become one).&amp;nbsp; Hang with people who love what they do, and you will too.&amp;nbsp; Interesting that I've actually seen happen.&lt;/P&gt;
&lt;P&gt;My wife, &lt;A href="http://www.alisajohnson.com"&gt;Alisa&lt;/A&gt;, is a real estate agent.&amp;nbsp; She has been doing fine, but this past November she had a chance to go to a conference which, as it turns out, contained a high percentage of very successful agents.&amp;nbsp; And by successful, I'm talking $500K per year and up in commissions. On her return, the level of enthusiasm for her profession was visibly higher.&amp;nbsp; Not only that, it carried over into the the rest of her endeavors.&amp;nbsp; She is well on the way to doubling last year's sales.&amp;nbsp; And possibly tripling it.&amp;nbsp; All because she spent some time hanging with passionate people.&lt;/P&gt;
&lt;P&gt;As&amp;nbsp;you look towards the rest of the year,&amp;nbsp;there are a number of opportunities&amp;nbsp;for you to do the same thing.&amp;nbsp; &lt;A href="http://www.ftponline.com/conferences/vslive/"&gt;VSLive&lt;/A&gt; has conferences all over the world.&amp;nbsp; There is &lt;A href="http://www.microsoft.com/events/teched2005/default.mspx"&gt;TechEd&lt;/A&gt; coming in June and a &lt;A href="http://msdn.microsoft.com/events/pdc/"&gt;Professional Developer's Conference&lt;/A&gt;.&amp;nbsp;&amp;nbsp;Attending and hanging out with people who love what they do might do as much for you as the technical content.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1351" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Using Apostrophe's</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/12/1276.aspx</link><pubDate>Wed, 12 Jan 2005 14:49:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1276</guid><dc:creator>bruce</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1276.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1276</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1276</wfw:comment><description>&lt;P&gt;One of my pet peeves is the misuse of apostrophes.&amp;nbsp; I find myself particularly annoyed by the misuse of you're and your, but any badness feels like teeth on tin foil to me. Not that I'm perfect, but...well...I'm sure some of you understand.&amp;nbsp; Anyway, courtesy of Blair Conrad, I found the following cartoon quite amusing.&amp;nbsp; Your mileage may vary&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://angryflower.com/bobsqu.gif"&gt;&lt;/P&gt;
&lt;P&gt;P.S.&amp;nbsp; The title was on purpose.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1276" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>Nerd Score</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/07/1238.aspx</link><pubDate>Fri, 07 Jan 2005 22:20:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1238</guid><dc:creator>bruce</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1238.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1238</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1238</wfw:comment><description>&lt;A href="http://www.wxplotter.com/ft_nq.php"&gt;&lt;IMG alt="I am nerdier than 55% of all people. Are you nerdier? Click here to find out!" src="http://www.wxplotter.com/images/ft/nq.php?val=8666"&gt; &lt;/A&gt;
&lt;P&gt;&lt;FONT size=2&gt;Just because there's nothing better to do after five on a Friday.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1238" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>Should DSL use UML</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/05/1219.aspx</link><pubDate>Wed, 05 Jan 2005 20:27:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1219</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1219.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1219</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1219</wfw:comment><description>&lt;P&gt;I have been quietly following the ongoing conversations regarding Domain Specific Languages (DSL) and whether UML should be used as the mechanism to describe them.&amp;nbsp; My UML and DSL knowledge is not nearly as deep as some of my colleagues, but I believe that the noise level from this space will only increase over the next 12-18 months.&lt;/P&gt;
&lt;P&gt;As part of my blog reading (via &lt;A href="http://pluralsight.com/blogs/dbox/archive/2005/01/05/4759.aspx"&gt;Don Box&lt;/A&gt;), I came across a number of postings from &lt;A href="http://www.booch.com/architecture/blog.jsp?archive=2004-12.html"&gt;Grady Booch&lt;/A&gt; and &lt;A href="http://blogs.msdn.com/alan_cameron_wills/archive/2004/11/11/255831.aspx"&gt;Alan Cameron Wills&lt;/A&gt;&amp;nbsp;talking about both sides of the issue. But to me, the most interesting part was actually in one of the comments to Alan's post.&amp;nbsp; Specifically, &lt;A href="http://www.trcinc.com/"&gt;Lloyd Fischer&lt;/A&gt; says:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#a52a2a size=2&gt;Anyway, we spent a lot of time thinking about visual representations of software. It turned out that the times we were successful was when the system in question *already* had a visual representaion. Examples are piping and instrumentation diagrams, electronic schematic diagrams, ladder logic diagrams, etc. &lt;BR&gt;&lt;BR&gt;In those cases where we tried to create new visual representations we failed. The "business users" invariably rejected our attempts to turn their knowledge into diagrams because they were unnatural to experts in the field. The fact that they had not yet created such diagrams was a telling sign that no such representation was possible. Those fields where such representations were useful had long ago created them.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;That is probably the best argument in favor of using something *other* than UML to describe DSLs that I have heard.&amp;nbsp; That UML (or diagrams, in their world) doesn't fit with the mental model that the domain experts already have is very telling.&amp;nbsp; After all, the experts aren't constrained by anything when it comes to describing their world outside the realm of software.&amp;nbsp; They have white board, diagramming tools, everying that a designer would need.&amp;nbsp; If that was the way they wanted to go, they'd already be there.&amp;nbsp; And yet they're not.&amp;nbsp; I think this is one case where we need to listen to the experts and find a way to represent the mental model that they have spent years developing.&amp;nbsp; Seems more productive than forcing our way upon them.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1219" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Maybe I'm just cynical, but...</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/04/1208.aspx</link><pubDate>Tue, 04 Jan 2005 22:08:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1208</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1208.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1208</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1208</wfw:comment><description>&lt;P&gt;Through &lt;A href="http://blogs.msdn.com/dareobasanjo/"&gt;Dare Obasanjo's blog&lt;/A&gt;, I was pointed to a 'conversation' between Adam Bosworth of Google and Krzysztof Kowalczyk about the open source contributions.&amp;nbsp; It all started when Adam '&lt;A href="http://www.adambosworth.net/archives/000038.html"&gt;asked&lt;/A&gt;' the open source community to fix a problem with commercial databases for those customers who need to maintain high availability and scalability across large clusters.&amp;nbsp; Krzysztof (and others) &lt;A href="http://blog.kowalczyk.info/archives/2004/12/29/google-we-take-it-all-give-nothing-back/"&gt;suggested&lt;/A&gt; that Adam was trying to get the open source community to play tooth fairy.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Although at first blush, it certainly sounds like having the&amp;nbsp;suggestion implemented would greatly ease Google's ongoing operational effort, in a follow-up post Adam &lt;A href="http://www.adambosworth.net/archives/000039.html"&gt;says&lt;/A&gt; that he wasn't asking for Google, that Google already has what it needs for storage and indexing. He then goes on to&amp;nbsp;&lt;A href="http://www.adambosworth.net/archives/000040.html"&gt;scold&lt;/A&gt; the critics of his posts, saying that they don't appreciate what Google gives our for free&amp;nbsp;millions of times a day.&lt;/P&gt;
&lt;P&gt;I have two issues with Adam's comments.&amp;nbsp; First, if Google has already solved this problem, why have no contributions to the open source community along this effort been forthcoming.&amp;nbsp; While it might not have addressed the dynamic partitioning and schema changes (it's possible), odds are pretty good that Google has an idea about indexing.&amp;nbsp; They would certainly be able to kick start the effort by making a contribution in those areas.&lt;/P&gt;
&lt;P&gt;My second issue is the dis-ingenuousness of the &amp;#8220;we're giving stuff away for free&amp;#8221; comment.&amp;nbsp; Google has a market cap of $53B.&amp;nbsp; Revenues are approaching $3B per year.&amp;nbsp; Some of that revenue comes from sponsored searches, AdWords, AdSense and a number of other products that need the traffic generated by their free service.&amp;nbsp; Which is to say that if Google stopped giving stuff away, their revenues would fall off pretty quickly.&lt;/P&gt;
&lt;P&gt;Do I love what Google offers?&amp;nbsp; Of course. Makes my life much easier in many different ways.&amp;nbsp; But please don't pretend that it's being given away for altruistic reasons.&amp;nbsp; I'm really not that naive.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1208" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>The True Joy of Blog Reading</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2005/01/04/1204.aspx</link><pubDate>Tue, 04 Jan 2005 05:13:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1204</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1204.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1204</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1204</wfw:comment><description>&lt;p&gt;I've been a voracious reader since I was a young boy.&amp;nbsp; My current life means that I don't get to read as much as I would like, but I still get a thrill when I find a new author that I like.&amp;nbsp; Especially one that has a whole bunch of books written.&amp;nbsp; Dan Brown's &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0385504209/qid=1104814473/sr=8-1/ref=pd_csp_1/103-8766220-4617466?v=glance&amp;amp;s=books&amp;amp;n=507846" target="_blank"&gt;The De Vinci Code&lt;/a&gt; was one such author, as it was really the fourth book that he had written. Gave me another couple of months worth of books.&lt;/p&gt;&lt;p&gt;When I get the time, I like to do the same thing with blogs.&amp;nbsp; Follow blog roles, links, etc. to see what other people talk about.&amp;nbsp; I had one of those author epiphanies earlier today with Kathy Sierra.&amp;nbsp; In particular, I started with &lt;a href="http://headrush.typepad.com/creating_passionate_users/2005/01/users_shouldnt_.html" target="_blank"&gt;Users shouldn't think about YOU&lt;/a&gt;. That post contains some nice insights into how instructors and authors get in the way of the learning process.&amp;nbsp; It certainly gave me something to think about.&lt;/p&gt;&lt;p&gt;And, of course, I started reading some of the other posts that Kathy has written.&amp;nbsp; Very nice.&amp;nbsp; Like the content, like the style.&amp;nbsp; Consider me subscribed.&amp;nbsp; And happy that I'll have some late night reading for a couple of days.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1204" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category></item><item><title>Caching and Unit Tests</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/17/1102.aspx</link><pubDate>Fri, 17 Dec 2004 18:40:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1102</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1102.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1102</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1102</wfw:comment><description>&lt;P&gt;We've been playing with the Caching Application Block here at the client I'm currently working with and have found a couple of important items that will be of interest to anyone doing the same.&amp;nbsp;I should say that&amp;nbsp;we're using NUnit to run our unit tests, so some of the information applies specifically to that.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Actually, both of the items we ran into had to do with the storage mechanism that we used.&amp;nbsp; The Caching Application Block includes implementations for three separate modes:&amp;nbsp; in process, memory-mapped files and SQL Server.&amp;nbsp; These three modes basically mirror the functionality available with the Cache object in ASP.NET.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;For all of the tests run to this point in the project, we had been using the in-process mode both in our unit tests and in the builds that have been sent to the system verification team.&amp;nbsp; However we recently made the choice to share the caching across web services, so we&amp;nbsp;switched to the memory-mapped file mode.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Oops.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;First off (and it should have been obvious), there is a different serialization technique used with memory-mapped files.&amp;nbsp; That is to say, that the in-process cache doesn't use serialization at all.&amp;nbsp; The memory-mapped version does serialize and deserialize the object as part of the default processing.&amp;nbsp; This change in caching mechanism should have caused us to go back to our unit tests, updating the storage type used there.&amp;nbsp; A couple of issues might very well have been exposed.&amp;nbsp; But after just a couple of minutes of seeing unexpected errors occur in unusual places, we did just that.&lt;/P&gt;
&lt;P&gt;Second oops.&lt;/P&gt;
&lt;P&gt;If you didn't realize it, NUnit depends a great deal on the AppDomain model to work its magic.&amp;nbsp; This allows things like the config file to be taken from the DLL's home directory.&amp;nbsp; A completely new AppDomain is created for each run of the tests.&amp;nbsp; So, as a for instance, you had created an in-process cache in one test, that cache wouldn't be there the next time the test was run.&amp;nbsp; New AppDomain = new memory = no old variables.&lt;/P&gt;
&lt;P&gt;But what if you were to change the storage mechanism to a memory mapped file.&amp;nbsp; A mechanism that is specifically designed to share data across AppDomains.&amp;nbsp; So now, NUnit does its AppDomain creation thing and pow!&amp;nbsp; Cached value already exists.&amp;nbsp; Imagine our surprise.&amp;nbsp; Imagine how good you feel not having to go through it.&lt;/P&gt;
&lt;P&gt;As a pointer, using the Flush method in the TestSetup section of NUnit is a good way to avoid this problem in the future.&amp;nbsp; Just something for you to consider.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1102" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Pure Math and Real Life II</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/15/1093.aspx</link><pubDate>Wed, 15 Dec 2004 16:05:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1093</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1093.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1093</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1093</wfw:comment><description>&lt;P&gt;From Raymond Chen's &lt;A href="http://weblogs.asp.net/oldnewthing/archive/2004/12/14/300205.aspx"&gt;blog&lt;/A&gt;, check out this &lt;A href="http://www.vanderbilt.edu/news/releases?id=15880"&gt;article&lt;/A&gt; that describes not only the concepts (in basic terms)&amp;nbsp;behind the uniformly distributed points algorithm, but also some of the practical applications.&amp;nbsp; First of all, the idea behind the algorithm is incredibly elegant.&amp;nbsp; Forgetting about the math necessary to prove that it works for a moment (because that is complex to the extreme), the idea that the points on the surface are like dictators fighting for space is an easy one to visualize.&lt;/P&gt;
&lt;P&gt;Second, the number of applications for what might appear at first glance to be nothing but nonsense will surprise most.&amp;nbsp; That the same algorithm could be applied to everything from baked goods (the perfect poppy-seed bagel) to virus research to computer generated graphics says a lot about how math is the thread the weaves its way through the fabrice of our life.&lt;/P&gt;
&lt;P&gt;Finally, for those you are continually amazed at the interconnectedness of the universe, that the most effective&amp;nbsp;'s' variable (the power of the force between the poinst) is equal to the dimensionality of the shape is mind boggling.&amp;nbsp; I just add this to the &amp;#8220;famous five&amp;#8221; equation as one of those things that make me go hmmm.&lt;/P&gt;
&lt;P&gt;For those who care and don't already know, the famous five equation takes the five most basic values in math (e, i, pi, 1, 0) and combines them to create a single equation: &lt;STRONG&gt;e&lt;/STRONG&gt;&lt;SUP&gt;&lt;STRONG&gt;i&lt;/STRONG&gt; * &lt;B&gt;pi&lt;/B&gt;&lt;/SUP&gt; + 1 = 0.&amp;nbsp; Whoa.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1093" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Waiting for WinFS?  Might want to rethink that.</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/11/1080.aspx</link><pubDate>Sat, 11 Dec 2004 16:06:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1080</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1080.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1080</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1080</wfw:comment><description>&lt;p&gt;For those of you who already have grand plans that require the very cool functionality that will be offered by WinFS, you might want to think about some redesign.&amp;nbsp; Finding out that it wouldn't make it into Longhorn was the first blow.&amp;nbsp; Now, according to this news.com &lt;a href="http://news.com.com/New+file+system+has+long+road+to+Windows/2100-1016_3-5487641.html?part=rss&amp;amp;tag=5487641&amp;amp;subj=news.1016.20" target="_blank"&gt;article&lt;/a&gt;&amp;nbsp;(found thanks to &lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=17f7ed74-9f2a-476a-ab85-326eca90ae34"&gt;Rocky Lhotka&lt;/a&gt;), the wait for WinFS might last until the next decade.&lt;/p&gt;&lt;p&gt;The article confirms that not only will WinFS miss Longhorn client, but also the (scheduled) release in 2007 of Longhorn server.&amp;nbsp; So now WinFS won't likely be included until Blackcomb, which is the next Windows version after Longhorn.&amp;nbsp; Realistically, this means 2010 at a minimum.&amp;nbsp; And that assumes a minimal slippage of schedule,&amp;nbsp;an outcome that is probably one of the few that can be counted on.&amp;nbsp; &lt;/p&gt;&lt;p&gt;One of the downsides of being involved with the leading edge of technology is the teasing that goes on.&amp;nbsp; The promise of &lt;a href="http://www.microsoft.com/belux/nl/msdn/community/columns/jtielens/objectspaces.mspx" target="_blank"&gt;ObjectSpaces&lt;/a&gt; is certainly enticing. But I spend most of my life coding in the here and now, a place that ObjectSpaces won't be invading for quite some time.&amp;nbsp; Too bad, but I'm pretty certain I can make the adjustment. ;)&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1080" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Things C# allows you to do, but shouldn't</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/09/1075.aspx</link><pubDate>Thu, 09 Dec 2004 20:05:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1075</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1075.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1075</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1075</wfw:comment><description>&lt;P&gt;So the offending line of code is as follows:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;string a = String.Empty, b;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;If you can explain what this is doing, you're a better person than I.&amp;nbsp; Just to give you a second hint, the following is also legal syntax.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;string a = b, c = d, e = f;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;So what do these statements do? Give up?&lt;/P&gt;
&lt;P&gt;In the first case, you end up declaring two string variables:&amp;nbsp; a and b.&amp;nbsp; And a is initilized to String.Empty.&amp;nbsp; In the second case, you end up with string variables a, c and e initialized to b, d and f respectively.&amp;nbsp; Sure having multiple declarations on a single line is legal.&amp;nbsp; But should you inflict this upon unsuspecting maintenance developers?&amp;nbsp; I don't think so.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1075" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>The Memory Reclamation Phase</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/09/1074.aspx</link><pubDate>Thu, 09 Dec 2004 18:14:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1074</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1074.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1074</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1074</wfw:comment><description>&lt;P&gt;The project that I have been working on for the past few months has now entered it's performance tuning phase.&amp;nbsp; This means that code is being gone over in great detail, looking for areas where speed gains can be realized.&amp;nbsp; Because there is a high concentration of former C++ developers here (the project is done in C#), I have been getting a number of questions regarding the allocation and deallocation of memory.&amp;nbsp; Questions like when does it happen and how can memory be reclaimed faster.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Whether you are coming from a VB or C++ background, you should be aware of the allocation and garbage collection process in .NET.&amp;nbsp;&amp;nbsp;For no other reason than the&amp;nbsp;things you might have done for optimization in the past may very will be completely wrong.&amp;nbsp; Two examples:&amp;nbsp; Setting variables to null (based on the Set var = Nothing best practice in VB) and implementing finalizers (a common memory deallocation technique in C++).&amp;nbsp; For an excellent description of the reasons behind not doing this (and other practices), check out &lt;A href="http://weblogs.asp.net/ricom/archive/2003/12/02/40780.aspx"&gt;http://weblogs.asp.net/ricom/archive/2003/12/02/40780.aspx&lt;/A&gt;.&amp;nbsp; And if you feel compelled to use the GC.Collect method, read &lt;A href="http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx"&gt;http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx&lt;/A&gt;.&amp;nbsp; Very useful information indeed.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1074" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category></item><item><title>The Case for Unit Testing</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/09/1071.aspx</link><pubDate>Thu, 09 Dec 2004 14:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1071</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1071.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1071</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1071</wfw:comment><description>&lt;P&gt;A posting on &lt;A href="http://weblogs.asp.net/rosherove/archive/2004/12/07/276040.aspx"&gt;Roy Osherove's blog&lt;/A&gt;&amp;nbsp;taking issue with a post by &lt;A href="http://www.joelonsoftware.com/items/2004/12/06.html"&gt;Joel Spolsky&lt;/A&gt;&amp;nbsp;on the failure of methodologies like MSF got me thinking.&amp;nbsp; In particular, I (like Roy) took issue with the following section (which is actually written by Tamir Nitzan, but agreed to by Joel).&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Lastly there's MSF. The author's complaint about methodologies is that they essentially transform people into compliance monkeys. "our system isn't working" -- "but we signed all the phase exits!". Intuitively, there is SOME truth in that. Any methodology that aims to promote consistency essentially has to cater to a lowest common denominator. The concept of a "repeatable process" implies that while all people are not the same, they can all produce the same way, and should all be monitored similarly. For instance, in software development, we like to have people unit-test their code. However, a good, experienced developer is about 100 times less likely to write bugs that will be uncovered during unit tests than a beginner. It is therefore practically useless for the former to write these... but most methodologies would enforce that he has to, or else you don't pass some phase. At that point, he's spending say 30% of his time on something essentially useless, which demotivates him. Since he isn't motivated to develop aggressively, he'll start giving large estimates, then not doing much, and perform his 9-5 duties to the letter. Project in crisis? Well, I did my unit tests. The rough translation of his sentence is: "methodologies encourage rock stars to become compliance monkeys, and I need everyone on my team to be a rock star".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The problem I have is that the rock stars that are being discussed are not at all like that. Having had the opportunity to work with a number of very, very good developers, I found that they embrace unit tests with enthusiasm.&amp;nbsp; And their rationale has little to do with the fact that they might be create a bug that needs to be exposed.&amp;nbsp; While that might be part of the equation, it is not the real reason for creating a unit test.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The good developers that I've encountered are lovers of good code.&amp;nbsp; They believe that well crafted code has a beauty all of its own.&amp;nbsp; They strive to write elegant, performant classes because, well, that's what craftsmen do.&amp;nbsp; But when put under the time constraints of business, it is not always possible to create the 'best' solution every single time.&amp;nbsp; An imminent deadline might require that&amp;nbsp;'good enough' classes be checked into production.&amp;nbsp; Such is the life of a paid developer.&lt;/P&gt;
&lt;P&gt;But you and I both know these good developers are many times more productive than their 'average' conterparts.&amp;nbsp; As a result, they frequently have time within a project schedule to refactor previously completed classes.&amp;nbsp; In fact, they enjoy going back to those 'good enough' classes and improving on them.&amp;nbsp; This attitude is one of the things I've found separates the good developers from the pack.&amp;nbsp; They are actually embarrassed by some of the 'good enough' code and feel the need to make them right.&lt;/P&gt;
&lt;P&gt;This is where the unit tests come in.&amp;nbsp; If the completed classes are supported by a solid set of unit test, then this refactoring process can be done with a low risk to the project.&amp;nbsp; The developers know that when a modified class passes the unit tests, it is much less likely to introduce further bugs. So, rather than thinking them a waste of time, the good developers I know relish the idea of creating unit tests.&amp;nbsp;Perhaps this is one of the characteristics that the rest of us would do well to emulate.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1071" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Pack Your Bags</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/08/1067.aspx</link><pubDate>Wed, 08 Dec 2004 14:30:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1067</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1067.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1067</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1067</wfw:comment><description>&lt;P&gt;A couple of conference announcements over the past few days help put my travel plans for next year on more solid footing.&lt;/P&gt;
&lt;P&gt;VSLive is coming back to Toronto from April 13-16.&amp;nbsp; This time around, the conference will be held much closer to the heart of Toronto.&amp;nbsp; The Westin Harbour Castle is right on the lake and an easy walk from all of the downtown attractions.&amp;nbsp; Will probably make the &lt;A href="http://www.objectsharp.com"&gt;ObjectSharp&lt;/A&gt; &lt;A href="http://www.geekswithblogs.net/mflasko/archive/2004/05/07/4710.aspx"&gt;party&lt;/A&gt; &lt;A href="http://msmvps.com/windsor/archive/2004/05/18/6705.aspx"&gt;bus&lt;/A&gt; less logistically challenging. Check out &lt;A href="https://werner.objectsharp.com/exchweb/bin/redir.asp?URL=http://linktrack.fawcette.com/trk/click?ref=zp07fidc0_0-4c9x32e7bx163" target=_blank&gt;www.vslive.com/2005/to&lt;/A&gt;&amp;nbsp;for more details.&lt;/P&gt;
&lt;P&gt;I saw via &lt;A href="http://www.thedatafarm.com/blog/"&gt;Julia Lerman's blog&lt;/A&gt; that Microsoft has scheduled &lt;A href="http://msdn.microsoft.com/events/pdc/"&gt;PDC 2005&lt;/A&gt; to be in Los Angeles in Sept. Would rather it be some time when travelling someplace warmer would be more beneficial (like, say, the winter), but I'll take what I can get.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1067" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Improving the Performance of Asynchronous Web Service Calls</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/12/06/1059.aspx</link><pubDate>Mon, 06 Dec 2004 12:19:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1059</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1059.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1059</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1059</wfw:comment><description>&lt;P&gt;Notice that the name of this post doesn't say that web service performance can be improved through asynchronous calls.&amp;nbsp; That is on purpose.&amp;nbsp; This particular post deals with a limitation that impacts applications that utilize async web service methods.&amp;nbsp; Actually, it has the potential to&amp;nbsp;impact any application that interacts with the Internet.&amp;nbsp; This is actually one time I wish my blog was more widely read, because I can pretty much guarantee that there are thousands of developers who are unaware that the nice async design they've implemented isn't having the performance boosting effect that they expected.&amp;nbsp; And thanks to Marc Durand for pointing this out to me.&lt;/P&gt;
&lt;P&gt;The limitation I'm talking about is one that is buried in the HTTP/1.1 specification (RFC2616).&amp;nbsp; The spec says that, to prevent a single computer from overrunning a server,&amp;nbsp;the limit to the maximum number of connections that can be made to a server is two.&amp;nbsp; What this means is that if your application makes three async calls to the same server, the third&amp;nbsp;call will be blocked until one of the first two is finished.&amp;nbsp; I know that this came as a big surprise to me.&lt;/P&gt;
&lt;P&gt;Fortunately, there is a configuration setting that can adjust this number without requiring any coding changes.&amp;nbsp; In the app.config (or machine.config) file, add a connectionManagement tag.&amp;nbsp; Within connectionManagement, the add tag is used to specify the optional server and the maximum connections allowed.&amp;nbsp; The following example allows up to 10 simultaneous connections to be made to 216.221.85.164 and 40 to any server.&lt;/P&gt;
&lt;P&gt;&amp;lt;configuration&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;system.net&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;connectionManagement&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add address="216.221.85.164" maxconnection="10" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add address="*" maxconnection="40" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/connectionManagement&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/system.net&amp;gt;&lt;BR&gt;&amp;lt;/configuration&amp;gt;&lt;BR&gt;&lt;BR&gt;For those who like to program, you can accomplish the same behavior on a temporary basis using the ServicePointManager.DefaultConnectionLimit property.&amp;nbsp; But I was never big into adding code when I didn't have to.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1059" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Dogs and cats, living together. Mass hysteria.</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/30/1044.aspx</link><pubDate>Tue, 30 Nov 2004 15:58:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1044</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1044.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1044</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1044</wfw:comment><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;For a while now, this has been my catch phrase for situations where stuff is about to hit the fan.&amp;nbsp; Thanks to a &lt;/FONT&gt;&lt;A href="http://www.objectsharp.com/blogs/dan"&gt;&lt;FONT face=Arial size=2&gt;colleague&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;, it turns out that the end really is closer than I thought.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;A href="http://tv.ksl.com/index.php?nid=5&amp;amp;sid=135591"&gt;http://tv.ksl.com/index.php?nid=5&amp;amp;sid=135591&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;For the culturally stiffled, the quote is from Ghostbusters.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1044" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Web Services and Proxy Servers</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/22/1029.aspx</link><pubDate>Mon, 22 Nov 2004 17:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1029</guid><dc:creator>bruce</dc:creator><slash:comments>21</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1029.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1029</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1029</wfw:comment><description>&lt;P&gt;I'm currenting working with a team that is putting the finishing touches on a commercial application that uses web services as a major component of the infrastructure.&amp;nbsp; As part of putting the client portion through its paces, an environment that included a proxy server was tested.&amp;nbsp; The initial result was not surprising to anyone who has significant experience with web services:&amp;nbsp; a connection could not be made exception was thrown. The reason for this problem is that the method for defining a proxy server to the web service proxy class on the client side is a little unexpected.&amp;nbsp; And I apologize in advance for having to use the same word (proxy) to describe to separate items (the server and the web service class).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If you are running Internet Explorer, then the place where the the proxy server settings are configured is in the Tools&amp;nbsp;| Internet Options dialog.&amp;nbsp; Within the dialog, click on the Connections tab and the LAN Settings button.&amp;nbsp; Here you can specify whether proxy server settings are required and which server and port are used.&amp;nbsp; You can also identify whether local addresses are exempt from the proxy process.&amp;nbsp; This is fairly well known information, especially if you normally operate from behind a proxy server.&lt;/P&gt;
&lt;P&gt;The disconnect occurs when you make calls to web services from this same machine.&amp;nbsp; Under the covers, the HttpWebRequest class is used to transmit the call to the desired server.&amp;nbsp; However, even when the proxy server information has been specified as just described, those details are &lt;STRONG&gt;NOT&lt;/STRONG&gt; used by HttpWebRequest.&amp;nbsp; Instead, by default, no proxy is used to handle the request.&amp;nbsp; This is what causes the connection exception. I know the first time I ran into this issue was a surprise to me.&lt;/P&gt;
&lt;P&gt;There are two possible solutions to this problem.&amp;nbsp; The first is to assign a WebProxy object to the Proxy property on the web service proxy class.&amp;nbsp; You can programmatically specify the proxy server information, but that is very difficult to modify.&amp;nbsp; Instead of creating the WebProxy object on the fly, use the GetDefaultProxy static method on the System.Net.WebProxy object.&amp;nbsp; This method reads &amp;#8220;the nondynamic proxy settings stored by Internet Explorer 5.5&amp;#8221; and returns them as a WebProxy object that can be assigned to the Proxy property .&amp;nbsp; This technique works fine assuming that your client has IE installed and that none of the scripts run at login time have modified the proxy&amp;nbsp;settings.&lt;/P&gt;
&lt;P&gt;There is an alternative that is a little more flexible.&amp;nbsp; There is a app.config element called defaultProxy that is part of the System.Net configuration section.&amp;nbsp; Within this element, the details of the proxy server can be specified independently of the IE settings.&amp;nbsp; The basic format of the defaultProxy element can be seen below.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#a52a2a size=2&gt;&amp;lt;system.net&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;defaultProxy&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;proxy&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxyaddress = "http://proxyserver:80"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bypassonlocal = "true"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/defaultProxy&amp;gt;&lt;BR&gt;&amp;lt;/system.net&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The proxy element also includes an attribute called usesystemdefault which, when set to true, causes the IE settings to be used.&amp;nbsp; The benefit of this approach is that no additional coding is required.&amp;nbsp; The settings defined in defaultProxy are use by HttpWebRequest (and, therefore, web service calls) with no change to the application required.&lt;/P&gt;
&lt;P&gt;As an added benefit, this element can be added to machine.config, which allows it to be applied to every HttpWebRequest made from the client machine regardless of the application.&amp;nbsp; Keeping in mind that an uneducated developer could assign the Proxy object in code, overriding this nice, easily configurable default.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1029" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Deserializing Objects</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/17/1020.aspx</link><pubDate>Wed, 17 Nov 2004 20:18:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1020</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1020.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1020</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1020</wfw:comment><description>&lt;P&gt;Another post about the deserialization of objects after a web service call.&amp;nbsp; In this particular scenario, the web service method was returning an ArrayList.&amp;nbsp; On the client side, I was expecting to see a number of different types of objects.&amp;nbsp; But one of the objects, a custom class, was being returned as an array instead of an instance of the expected class.&amp;nbsp; And inside that array was an XmlAttribute and two XmlElement objects.&amp;nbsp; These were, it turned out, the XML nodes that were being returned from the web service method.&amp;nbsp; It's just that they weren't being converted into the desired object.&lt;/P&gt;
&lt;P&gt;After&amp;nbsp;a couple of hours of digging, I found out the cause.&amp;nbsp; Many of you are probably aware of the XmlInclude attribute that is used to decorate web methods to indicate that the schema for a particular class should be included in the WSDL for a web service.&amp;nbsp; That is not, strictly speaking, it's only purpose.&amp;nbsp; To be precise, it is used by the XmlSerializer to identify the types that are recognized during the serialization &lt;STRONG&gt;and deserialization&lt;/STRONG&gt; process. It's this second piece that was the solution to my problem.&lt;/P&gt;
&lt;P&gt;Because the web service being developed is intended to be used in an intranet environment, the same assembly was available on both sides of the fence.&amp;nbsp; To support this, the generated proxy class was modified to reference the shared assembly instead of using the class that is automatically included by WSDL.EXE.&amp;nbsp; It also meant that we didn't want to perform an Update Web Reference when the web service was modified...it would have meant making the manual changes to the proxy class again (Rich Turner might not remember me from the MVP Summit, but I was the one who was most excited when he described the ability to customize the proxy class generation being available come Whidbey).&amp;nbsp; The down side of this manual process is that, when objects of this type were added to the ArrayList that was returned, the proxy was not updated with the appropriate XmlInclude attribute.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;That's right.&amp;nbsp; The proxy class gets the same XmlInclude attribute.&amp;nbsp; WSDL.EXE generates the class with the appropriate attributes.&amp;nbsp; But if you're like me, then it's something you need to be aware of the next time an array of XmlElements appears unexpectedly on the client side.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1020" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Moving DataSets across Web Service Boundaries</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/17/1019.aspx</link><pubDate>Wed, 17 Nov 2004 15:30:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1019</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1019.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1019</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1019</wfw:comment><description>&lt;P&gt;A situation last week had me looking deep into the bowels of how DataSets are marshaled across web service methods.&amp;nbsp; The situation is as follows.&lt;/P&gt;
&lt;P&gt;For programming ease, the typed DataSet that was automatically generated was modified to include a custom object as one of the column types.&amp;nbsp; If you've ever taken a close look at the code that gets generated when a DataSet is created from an XSD diagram, you'll realize that this is not a difficult thing to accomplish.&amp;nbsp; And, for the most part, there is little reason to modify the generated code. But that being said, there are times when doing so can make the life of the DataSet user a little easier.&amp;nbsp; And this isn't really the point of the blog, only the motivation for digging into DataSet marshaling.&lt;/P&gt;
&lt;P&gt;The modified DataSet was being returned to the client by a web service method.&amp;nbsp; When the hacked column on the returned object was accessed on the client side, a StrongTypingException is thrown.&amp;nbsp; Another look at the DataSet generated code shows that the cause of this exception is a casting error in the property.&amp;nbsp; Further examination showed that the name of the class associated with the column was being returned.&amp;nbsp; As a string.&amp;nbsp; Naturally when the literal &amp;#8220;This.Namespace.Class&amp;#8221; is converted to an object of type This.Namespace.Class, casting exceptions are the result.&lt;/P&gt;
&lt;P&gt;This behavior begged the question &amp;#8220;why wasn't the object being XML serialized with the rest of the DataSet&amp;#8221;.&amp;nbsp; After all, though I haven't mentioned it yet, This.Namespace.Class is completely serializable.&amp;nbsp; In particular, why was the name of the class being returned???&amp;nbsp; That didn't make any sense.&lt;/P&gt;
&lt;P&gt;At this point, I broke out .NET Reflector and took at look at the details of the DataSet.&amp;nbsp; First of all, if a DataSet is returned across a web service boundary, it is not XML serialized in the same manner as other objects.&amp;nbsp; Instead of converting the contents of the DataSet to XML, a diffgram of the DataSet is generated.&amp;nbsp; More accurately, the WriteXml method is called with a WriteMode of Diffgram. Within the DataSet class, there is a method called GenerateDiffgram.&amp;nbsp; This method walks across each of the tables in the DataSet, followed by walks, in turn,&amp;nbsp;through the DataTables and DataRows.&amp;nbsp; When it gets to an individual column, it loads up a DataStorage object.&amp;nbsp; More accurately, since DataStorage is an abstract class, it instantiates a DataStorage derived class, using the column type to pick the appropriate class.&amp;nbsp; A veritable DataStorage factory.&amp;nbsp; When the column type is one of the&amp;nbsp;non-intrinsic types, the ObjectStorage class is used.&amp;nbsp; On the ObjectStorage class, the ObjectToXml method is called.&amp;nbsp; This is where the unexpected happens. At least, it was unexpected for me.&amp;nbsp; The ObjectToXml method does not XML Serialize the object! &lt;/P&gt;
&lt;P&gt;In the case of the ObjectStorage class, what actually happens is that a check is performed&amp;nbsp;to see if the object is a byte array.&amp;nbsp; If it is a base64 encoding of the array is returned.&amp;nbsp; Otherwise the ToString() method on the object is called. When it comes to re-hydration on the client side, a similar process occurs.&amp;nbsp; The difference is that the XmlToObject method in the ObjectStorage class instantiates the desired object by passing the string representation of the object (as emitted by the ObjectToXml method) into the constructor.&lt;/P&gt;
&lt;P&gt;So what is the point of all this?&amp;nbsp; First, it explains why the name of the class was appearing in the generated XML.&amp;nbsp; Unless overridden, the output of ToString() for an arbitrary class is the name of the class.&amp;nbsp; It also explains why no object was being created on the client side, as the class I was working with didn't have the appropriate constructor.&amp;nbsp; My solution, which I freely admit is a bit of a hack, is to give the diffgram generation process what it's looking for.&amp;nbsp; I overloaded ToString() to return an XML document containing the values of the class, a poor man's version of the WriteXml method that is part of the IXmlSerializable interface.&amp;nbsp; I also created a constructor that took a string as a parameter and repopulated the properties of the class (the ReadXml portion of the process).&amp;nbsp; Problem solved.&amp;nbsp; But still, I have to wonder why ToString was used and not the IXmlSerializable interface methods in the first pace.&amp;nbsp; Here's hoping someone more knowledgeable than me will provide some insight.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1019" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>ASP.NET 2.0 hits ZBB</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/16/1018.aspx</link><pubDate>Tue, 16 Nov 2004 12:16:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1018</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1018.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1018</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1018</wfw:comment><description>&lt;P&gt;I don't know about you, but I am eagerly anticipating the beta 2 release of ASP.NET.&amp;nbsp; Why, you say?&amp;nbsp; Because it's the one that contains a go-live license.&amp;nbsp; The go-live license gives the ability for production systems to use the technology outside of the development environment.&amp;nbsp; Now I'm not suggesting that a beta 2 release is suitable for every production environment.&amp;nbsp; That would be patently silly.&amp;nbsp; However, there are some instances where running a beta&amp;nbsp;version in production is not a big deal.&amp;nbsp; Like when we redesign the &lt;A href="http://www.objectsharp.com"&gt;ObjectSharp&lt;/A&gt; web site in ASP.NET 2.0.&amp;nbsp; Which will be done as soon as the go-live license is received.&amp;nbsp; So you understand my desire to get to beta 2.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/A&gt;, the source of much goodness about the inner workings of the ASP.NET 2.0 development team, &lt;A href="http://weblogs.asp.net/scottgu/archive/2004/11/14.aspx"&gt;announced&lt;/A&gt; that beta 2 hit&amp;nbsp;&lt;A href="http://weblogs.asp.net/release_team/archive/2004/08/16/215139.aspx"&gt;zero bug bounce&lt;/A&gt;&amp;nbsp;this past Saturday. In terms of release dates, it means that we're probably looking at 8-10 weeks from now.&amp;nbsp; I'm keeping my fingers crossed.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1018" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>An offer you can't refuse</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/08/1000.aspx</link><pubDate>Mon, 08 Nov 2004 17:00:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:1000</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/1000.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=1000</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=1000</wfw:comment><description>Tomorrow is Halo2 day.&amp;nbsp; And why would you want to spend the evening being shown the goodness that is Visual Studio Team System by my colleague &lt;A href="http://www.objectsharp.com/blogs/barry"&gt;Barry Gervin&lt;/A&gt;?&amp;nbsp; Because at the end of it, you get a change to win not only an XBox console, but also a copy of Halo2.&amp;nbsp; Check out Barry's &lt;A href="http://objectsharp.com/Blogs/barry/archive/2004/11/08/999.aspx"&gt;post&lt;/A&gt; for more information.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=1000" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Refactoring for VB.NET 2005 Going Away?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/02/995.aspx</link><pubDate>Tue, 02 Nov 2004 18:41:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:995</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/995.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=995</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=995</wfw:comment><description>&lt;P&gt;Well, not completely.&amp;nbsp; You have to read a little bit into this &lt;A href="http://blogs.msdn.com/vbteam/archive/2004/10/29/249816.aspx"&gt;post&lt;/A&gt;, but it appears that the only support for refactoring in VB.NET Whidbey is the Rename Symbol function.&amp;nbsp;To me, this means that one of the major differences between C# and VB.NET&amp;nbsp;in Whidbey will be refactoring support, as C# Refactoring implements a few more functions.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;By the way, this shouldn't completely surprise anyone.&amp;nbsp; Check out the following &lt;A href="http://scottwater.com/blog/archive/2003/10/28/10415.aspx"&gt;post&lt;/A&gt; from a year ago.&amp;nbsp; It describes the refactoring features that C# Whidbey will support (subject to change, of course).&amp;nbsp; But in one of the comments from Scott Wiltamuth (a C# Product Unit Manager) it is suggested even then the VB.NET might not get much more than Rename Symbol.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Very prescient.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=995" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>Random ASP.NET AppDomain Restarts</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/01/992.aspx</link><pubDate>Mon, 01 Nov 2004 13:43:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:992</guid><dc:creator>bruce</dc:creator><slash:comments>19</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/992.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=992</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=992</wfw:comment><description>&lt;P&gt;Are you having a problem with apparently random application restarts in your ASP.NET application?&amp;nbsp; Does your session information mystically disappear with no discernable pattern?&amp;nbsp; Well, the following may help you out.&lt;/P&gt;
&lt;P&gt;One of the things that ASP.NET does to help make it easier for developers to modify running web sites is to keep an eye on files that are part of the virtual directory.&amp;nbsp; If you drop a new version of a DLL into the bin directory, it takes effect from the next request on.&amp;nbsp; If you make a change to an ASPX file, it too is detected and becomes 'live' with any subsequent request.&amp;nbsp; No question that this is useful functionality.&lt;/P&gt;
&lt;P&gt;A little known fact about this process is that ASP.NET is also aware of the amount of memory that maintaining two versions of the same assembly takes.&amp;nbsp; If changes were allowed to be made without a restart, eventually it could become detrimental to the overall performance ogf ASP.NET. To combat this, ASP.NET also tracks the number of files that are changed and after a certain number, performs an Application Restart.&amp;nbsp; As with any other restart, this causes the current session information to be lost.&amp;nbsp; By default, the number of changes before a restate&amp;nbsp;is 15.&amp;nbsp; To modify this, you can change the numRecompilesBeforeApprestart attribute in the machine.config file.&lt;/P&gt;
&lt;P&gt;While all of this is useful information, there is a small twist that can make our life more difficult.&amp;nbsp; The files that ASP.NET is watching while looking for a change is not limited to those with an .aspx extension. In fact, it is any file in the virtual directory.&amp;nbsp; Also, the name of the setting implies that the Recompiles are what is being counted.&amp;nbsp; It's not.&amp;nbsp; What is being counted is the &lt;STRONG&gt;number of files that change&lt;/STRONG&gt;.&amp;nbsp; Or, more accurately, the number of changes to any file in the virtual directory.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;How can this cause problems?&amp;nbsp; What if you were to put a log file into the virtual directory of a web site.&amp;nbsp; What if that log file were opened and kept open while the information was written to it.&amp;nbsp; When that log file filled up, it is closed and a new one opened.&amp;nbsp; Of course, this close counts as a file change.&amp;nbsp; That would mean that after 15 log files are created (assuming no other changes to the web site), the virtual directory would automatically reset.&amp;nbsp; And since the amount of information written to the log file will be different depending on which pages/web methods are called, the frequency of the reset is dependent on factors that are not immediately apparent.&amp;nbsp; Imagine the joy of trying to discover why ASP.NET applications are being randomly reset without the benefit of this blog.&lt;/P&gt;
&lt;P&gt;The moral of this story:&amp;nbsp; Don't put any non-static files into an ASP.NET virtual directory.&amp;nbsp;My good deed for the day is done.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=992" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Moving Data Across Service Boundaries</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/11/01/990.aspx</link><pubDate>Mon, 01 Nov 2004 04:53:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:990</guid><dc:creator>bruce</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/990.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=990</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=990</wfw:comment><description>&lt;p&gt;Yet another question that has come across my inbox more than once in the past week.&amp;nbsp; Which is a good enough reason to become the topic of a blog.&amp;nbsp; The question:&lt;/p&gt;&lt;p&gt;"Can a SqlDataReader by return by a web service method?"&lt;/p&gt;&lt;p&gt;The short answer:&amp;nbsp; No&lt;/p&gt;&lt;p&gt;If you attempt to do so, you will get an InvalidOperationException indicating that the SqlDataReader could not be serialized because it doesn't have a public constructor.&amp;nbsp; And while that is the technical result, the true reason&amp;nbsp;is slightly different.&lt;/p&gt;&lt;p&gt;The SqlDataReader class is stream based.&amp;nbsp; That is to say that the connection to the database that feeds the SqlDataReader is kept open and busy for as long as the reader is working with data. If an instance of SqlDataReader were to be returned from a web service method, the client would attempt to do a Read.&amp;nbsp; Which would use the connection to retrieve data from a database that is no longer around.&amp;nbsp; And certainly not where the connection expects it to be.&amp;nbsp; Not a situation that's amenable to success.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=990" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>My head-shaking moment for the day</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/10/29/987.aspx</link><pubDate>Fri, 29 Oct 2004 18:43:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:987</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/987.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=987</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=987</wfw:comment><description>&lt;P&gt;Talk about telling a fascinating story.&amp;nbsp; In &lt;A href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie's&lt;/A&gt; most recent &lt;A href="http://weblogs.asp.net/scottgu/archive/2004/10/28/249458.aspx"&gt;post&lt;/A&gt;, he continues on with a description of the testing process for ASP.NET.&amp;nbsp; 100,000 test cases?&amp;nbsp; Yawn.&amp;nbsp; 500,000 test scenarios?&amp;nbsp; Sure it's a big number, but what have you done for me lately.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;But his description of Maddog had my jaw hitting the floor.&amp;nbsp; An application that automatically formats and re-images systems.&amp;nbsp; And builds on them And coordinates test results.&amp;nbsp; Now that's something you don't see every day.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=987" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>A look inside the process</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/10/27/979.aspx</link><pubDate>Wed, 27 Oct 2004 14:22:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:979</guid><dc:creator>bruce</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/979.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=979</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=979</wfw:comment><description>&lt;P&gt;For the past few months, I have been working as part of a large team of developers working on the new release of a product.&amp;nbsp; By large, I mean that there are probably over 100 working on various pieces of the code.&amp;nbsp; Going through the process has given me a great deal of respect for the issues that must face any large team of developers.&amp;nbsp;For some reason, the efforts that must be going on at Microsoft as they prep for Whidbey, Longhorn, et al came to mind. Check out the following &lt;A href="http://weblogs.asp.net/scottgu/archive/2004/10/23/246709.aspx"&gt;post&lt;/A&gt; by &lt;A href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/A&gt; about the process that the ASP.NET team is going through as they get ready for Whidbey Beta 2.&amp;nbsp; Quite enlightening.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=979" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/General+Rants/default.aspx">General Rants</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/VS2005/default.aspx">VS2005</category></item><item><title>When is a cache not really a cache</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/10/26/978.aspx</link><pubDate>Wed, 27 Oct 2004 03:39:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:978</guid><dc:creator>bruce</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/978.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=978</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=978</wfw:comment><description>&lt;P&gt;I spent a large portion of the day inside of the Caching Application Block.&amp;nbsp; Specifically, a colleague and I were tracking down what appeared to be&amp;nbsp;a nasty threading bug caused by having the creation of&amp;nbsp;two different cached objects that were related to one another.&amp;nbsp; As it turned out, the bug that existed couldn't explain away all of the behaviors that we observed. &lt;/P&gt;
&lt;P&gt;As it turns out, there was what appears to be a poorly documented aspect of the Caching Application Block that was causing us grief.&amp;nbsp; The problem is that the default number of objects that the cache can store before scavenging begins is set very low.&amp;nbsp; Specifically, it is set to 5.&amp;nbsp; As well, there is a UtilizationForScavenging setting (by default, it is 80) that lowers this number ever more.&amp;nbsp; Once the cache contains the (maximum * utilization / 100) items, the scavenger starts to remove the excess items from the cache, trying to keep the number of items below the calculated value.&amp;nbsp; With the default values, this means that no more than 3 elements will be saved in the cache at a time.&amp;nbsp; The scavenging class uses a least recently used algorithm, however if you're using an absolute time expiration, there is no 'last used' information saved.&amp;nbsp; So the scavenger appears to remove the last added item.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;That's right.&amp;nbsp; Unless you make some changes to the default config, only three elements are kept in the cache.&amp;nbsp; Probably not the performance enhancer that you were looking for from a cache.&amp;nbsp; Fortunately, the values can easily be changed.&amp;nbsp; The can be found in the ScavengingInfo tag in app.config. And there is no reason not to set the maximum value much higher, as there is no allocations performed until actual items are cached. It was just the initial surprise (and subsequent fallout) that caused me to, once again, question how closely related the parents of the designers were.&amp;nbsp; But only for a moment. ;)&lt;/P&gt;
&lt;P&gt;As one further word of warning, if there is no ScavengingInfo tag in the config class, then the default class (the same LruScavenging class just described) is used. And instead of getting the maximum cache information from the config file,&amp;nbsp;a file called CacheManagerText.resx is used.&amp;nbsp; In that file, the entries called RES_MaxCacheStorageSize and&amp;nbsp;RES_CacheUtilizationToScavenge are used to determine how many items to keep in the cache.&amp;nbsp; Out of the box, these values are set to the same 5 and 80 that the config file contains.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=978" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Solving the "No such interface is supported" problem</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/10/25/965.aspx</link><pubDate>Tue, 26 Oct 2004 02:55:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:965</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/965.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=965</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=965</wfw:comment><description>&lt;p&gt;I was asked a question today about a fairly common error that occurs when serviced components are used in conjunction with ASP.NET. Specifically, a COM+ component (one that is derived from ServicedComponent) was being used on an ASP.NET page.  When the page was loaded, an error of "No such interface is supported" was raised.&lt;/p&gt;&lt;p&gt;To understand the why of this error requires a little bit on knowledge about COM+.  When a serviced component is first instantiated, the CLR checks the COM+ catalog for information about the runtime requirements of the class. But if the class had not previously been registered, then no information will be available.  To correct this discrepancy, the CLR automatically creates a type library for the class and uses that information to populate the COM+ catalog. This mechanism is called lazy registration. &lt;/p&gt;&lt;p&gt;But wait.  It requires a privileged account in order to register a component in the COM+ catalog.  In particular, you need to be a machine admin.  And, unless you have been silly enough to grant the ASP.NET user admin rights to your machine, the update of the COM+ catalog fails.  No catalog information, no instantiation.  An unsuccessful instantiation means an exception.  An exception that includes an error message of "No such interface is supported". Go figure.&lt;/p&gt;&lt;p&gt;So ultimately, the solution is not to depend upon lazy registration of COM+ components that are deployed for use in ASP.NET.  Instead, perform the registration using the regsvcs.exe command manually.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=965" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/SOAP/default.aspx">SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Halo2 is coming, eh?</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/10/24/964.aspx</link><pubDate>Sun, 24 Oct 2004 13:54:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:964</guid><dc:creator>bruce</dc:creator><slash:comments>24</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/964.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=964</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=964</wfw:comment><description>For those of you who are Halo fans, check out the following link (&lt;a href="http://www.techstuff.ca/archives/915.html"&gt;http://www.techstuff.ca/archives/915.html&lt;/a&gt;)&amp;nbsp;describing what is different between the American and Canadian versions of Halo 2.&amp;nbsp; Thanks to &lt;a href="http://radio.weblogs.com/0001011/" target="_blank"&gt;Scoble&lt;/a&gt; for the link.&amp;nbsp; And I'd be happy to answer questions from Americans explaining why it's funny.&amp;nbsp; I'm familiar with discussing stuff like this with my American wife. ;)&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=964" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category></item><item><title>Cookieless Sessions and Security</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/10/18/945.aspx</link><pubDate>Mon, 18 Oct 2004 16:59:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:945</guid><dc:creator>bruce</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/945.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=945</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=945</wfw:comment><description>&lt;P&gt;In a previous &lt;A href="http://objectsharp.com/Blogs/bruce/archive/2004/10/08/921.aspx"&gt;blog&lt;/A&gt;, I pointed out that Microsoft had created an &lt;A href="http://www.microsoft.com/security/incident/aspnet.mspx"&gt;HttpModule&lt;/A&gt; that mitigated the ASP.NET cannonicalization issue that was first described a couple of weeks ago. In one of the comments, Amir asked about the security issues surrounding the use of cookieless sessions.&amp;nbsp; Specifically, he was wondering if ASP.NET could tell if a request containing a cookieless session component&amp;nbsp;was coming from a different browser instance or even a different location.&amp;nbsp; In brief, the answer is &amp;#8220;No&amp;#8220;.&lt;/P&gt;
&lt;P&gt;When used as part of a plain text web site (i.e. no SSL), cookieless sessions are not secure at all. The session id is placed into the URL&amp;nbsp;in every local link on a page.&amp;nbsp; The form of the URLs would not be as follows:&amp;nbsp; http://domain.com/(sessionid)/Page.aspx. This session id is not automatically tied to a specific browser instance or even the IP address of the initial request.&amp;nbsp; There is no way that I'm aware of to tie the request to a browser (other then using cookies ;). And while a session can be associated to an IP address, this requires some additional work on your part, in the form of an HTTP Module.&amp;nbsp;&amp;nbsp;The association between session Id and IP address could be done by generating a hash of the IP address for the request (Request.ServerVariables ["REMOTE_ADDR"]) and the session id and using the resulting value to access the session variables.&amp;nbsp; However, this solution doesn't take into consideration the case where people are behind a proxy that causes the IP address to change from request to request. For this, you might want to just use the first two components of the IP address, since these are not normally varied by the proxy. But if the spoofer is on the same subnet...&amp;nbsp; As you can see, all in all, this is a difficult problem to solve.&lt;/P&gt;
&lt;P&gt;I should probably mention that cookie-based session suffer from the same problem.&amp;nbsp; There is nothing inherent in how cookied sessions work that makes them safer than their cookieless counterparts.&amp;nbsp; A hacker can easily create a request that includes a spoofed cookies containing a hijacked session identifier.&amp;nbsp; But at least a cookie-based session solution can use SSL to encrypt the entire request.&amp;nbsp; Since the session is not included in the URL directly, it is not easily accessible if the request/response gets hijacked.&lt;/P&gt;
&lt;P&gt;So to summarize, while cookieless sessions are nice in theory, in practice they really should only be used on sites where every page is accessed through SSL.&amp;nbsp; And the implementation should be&amp;nbsp;customized to ensure that&amp;nbsp;a portion of the IP address is used to verify the originating IP address of subsequent requests corresponds to the original request.&lt;/P&gt;&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=945" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Not-so-SOAP/default.aspx">Not-so-SOAP</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Newsletter/default.aspx">Newsletter</category></item><item><title>Remove Those Annoying System Tray Balloons</title><link>http://blogs.objectsharp.com/blogs/bruce/archive/2004/10/17/943.aspx</link><pubDate>Sun, 17 Oct 2004 22:40:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:943</guid><dc:creator>bruce</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.objectsharp.com/blogs/bruce/comments/943.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/blogs/bruce/commentrss.aspx?PostID=943</wfw:commentRss><wfw:comment>http://blogs.objectsharp.com/blogs/bruce/rsscomments.aspx?PostID=943</wfw:comment><description>If you're like me, the system balloons that are automatically popped by system tray application are annoying.  This &lt;a href="http://blogs.imason.com/scott.howlett/archive/2004/09/01/190.aspx" target="_blank"&gt;blog&lt;/a&gt; from &lt;a href="http://blogs.imason.com/scott.howlett/" target="_blank"&gt;Scott Howlett&lt;/a&gt; describes how to eliminate them from your life.&lt;img src="http://blogs.objectsharp.com/aggbug.aspx?PostID=943" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Home/default.aspx">Home</category><category domain="http://blogs.objectsharp.com/blogs/bruce/archive/tags/Tips/default.aspx">Tips</category></item></channel></rss>
