<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Lance's Whiteboard</title><subtitle type="html">Random scribbling about C#, Javascript, Web Development, Architecture, and anything else that pops into my mind.</subtitle><id>http://weblogs.asp.net/lhunt/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/lhunt/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2007-02-22T11:01:51Z</updated><entry><title>My past year as a HTML5/Javascript developer… Part1</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2012/11/25/my-past-year-as-a-html5-javascript-developer.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2012/11/25/my-past-year-as-a-html5-javascript-developer.aspx</id><published>2012-11-26T05:06:00Z</published><updated>2012-11-26T05:06:00Z</updated><content type="html">&lt;p&gt;I’ve been fairly mum on work for the past year, but I figured I should do a brain-dump of some of the things I have learned and experienced as a HTML5/Javascript developer.&lt;/p&gt;  &lt;h3&gt;Before we begin…&lt;/h3&gt;  &lt;p&gt;(feel free to skip this section if you don’t care about my disclaimer or full disclosure)&lt;/p&gt;  &lt;p&gt;I feel like I should start by explaining a bit of my perspective.&amp;#160; I’m not a traditional front-end web developer.&amp;#160; I come from a long history of server-side rendered web development primarily using Microsoft technologies such as ASP classic, ASP.NET, et al.&lt;/p&gt;  &lt;p&gt;Having said that, I have spent over 15 years jockeying around HTML, images, css, and yes, lots of Javascript.&amp;#160;&amp;#160; Back in the days when IE 4/5 won the browser wars, I was fairly successful building Javascript frameworks to power enterprise apps and extranet sites of varying sorts.&amp;#160;&amp;#160; Not that javascript/html development was great (it was quite bad actually) but everything got much worse after that once Microsoft lost their way and then the browser-wars erupted anew.&amp;#160; During those bleak years I dabbled here and there with client-side dev but overall I was generally jaded towards treating JavaScript as nothing more than glue and spackling to smooth the cracks in my server-side rendering.&amp;#160; Frankly, before this past year I hadn't even really thought of Javascript as a first-class language.&lt;/p&gt;  &lt;p&gt;So, now having built a fairly complex real-time stock trading app targeting only modern browsers using the latest HTML5 &amp;amp; Node.js features (and no Microsoft technology in sight), I want to break it down a bit and think about what I have seen &amp;amp; done.&lt;/p&gt;  &lt;h3&gt;State of HTML5&lt;/h3&gt;  &lt;p&gt;It amazes me every day how far browsers and client-side webdev have come since the late 90’s when I was involved more with startups.&amp;#160; The problem is that with new features and capabilities comes new compatibility problems.&amp;#160; &lt;/p&gt;  &lt;p&gt;The good:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Enhanced Selectors &lt;/li&gt;    &lt;li&gt;session/localStorage &lt;/li&gt;    &lt;li&gt;Canvas &lt;/li&gt;    &lt;li&gt;SVG &lt;/li&gt;    &lt;li&gt;structural elements &lt;/li&gt;    &lt;li&gt;CSS transformations &lt;/li&gt;    &lt;li&gt;History navigation &lt;/li&gt;    &lt;li&gt;WebSockets &lt;/li&gt;    &lt;li&gt;WebWorkers &lt;/li&gt;    &lt;li&gt;video element (*codec support notwithstanding) &lt;/li&gt;    &lt;li&gt;audio element (*codec support notwithstanding) &lt;/li&gt;    &lt;li&gt;Html Editing &lt;/li&gt;    &lt;li&gt;MathML (*a cautionary ‘good’ at this point) &lt;/li&gt;    &lt;li&gt;WebFonts &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The bad:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;new form fields and validation &lt;/li&gt;    &lt;li&gt;File API &lt;/li&gt;    &lt;li&gt;Drag and Drop (*bad mainly due to its mobile challenges) &lt;/li&gt;    &lt;li&gt;Full Screen (*mainly IE’s fault, but tablets also fail) &lt;/li&gt;    &lt;li&gt;Server-sent events &lt;/li&gt;    &lt;li&gt;Security sandboxing sub-apps &lt;/li&gt;    &lt;li&gt;WebRTC &lt;/li&gt;    &lt;li&gt;WebCam (*very experimental in most browsers) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Sure, there are a handful of really great HTML5 technologies that are functionally equivalent across Mozilla, webkit, and IE10 but the devil is in the details.&amp;#160; If you are building fairly simplistic or single-purpose apps, you are fine, but as soon as you start trying to build something ‘interesting’ for a large audience you will quickly find that there are still important performance issues that arise. Add the shift to mobile and the plethora of new platforms such as Television and Gaming devices and the list of ‘good’ starts to get much shorter and muddled.&lt;/p&gt;  &lt;p&gt;The holy grail of build-once-use-everywhere is still elusive with the need to adjust form factors for mobile devices and pair-down payloads to help meager bandwidth and processors.&amp;#160; Sure, the very latest tablets and phones are now quad-core or better with even more RAM but their performance are still network and IO bound for the most part.&amp;#160;&amp;#160; This, plus the varying CPU performance leads to major issues with race-conditions and other fun device-profile issues.&lt;/p&gt;  &lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9463041" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Patterns" scheme="http://weblogs.asp.net/lhunt/archive/tags/Patterns/default.aspx" /><category term="JavaScript" scheme="http://weblogs.asp.net/lhunt/archive/tags/JavaScript/default.aspx" /><category term="html5" scheme="http://weblogs.asp.net/lhunt/archive/tags/html5/default.aspx" /><category term="web development" scheme="http://weblogs.asp.net/lhunt/archive/tags/web+development/default.aspx" /><category term="mvc" scheme="http://weblogs.asp.net/lhunt/archive/tags/mvc/default.aspx" /></entry><entry><title>The pitfalls of GDD.</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2010/08/10/the-pitfalls-of-gdd-addiction.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2010/08/10/the-pitfalls-of-gdd-addiction.aspx</id><published>2010-08-10T23:18:00Z</published><updated>2010-08-10T23:18:00Z</updated><content type="html">&lt;p&gt;Over the years, I have sampled approaches to software development ranging from &lt;a href="http://en.wikipedia.org/wiki/Rapid_application_development" target="_blank"&gt;RAD&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Extreme_programming" target="_blank"&gt;XP&lt;/a&gt;, &lt;a href="http://www.waterfall2006.com/" target="_blank"&gt;Waterfall&lt;/a&gt;, &lt;a href="http://agilemanifesto.org/" target="_blank"&gt;Agile&lt;/a&gt;, &lt;a href="http://www.scrumalliance.org/resource_download/339" target="_blank"&gt;Scrum&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture" target="_blank"&gt;SOA&lt;/a&gt;, &lt;a href="http://amzn.to/cgYTKt" target="_blank"&gt;TDD&lt;/a&gt;, and have recently started looking more seriously at the &lt;a href="http://behaviour-driven.org/" target="_blank"&gt;BDD&lt;/a&gt;/&lt;a href="http://domaindrivendesign.org/" target="_blank"&gt;DDD&lt;/a&gt;(D) camps.&amp;#160;&amp;#160; However, throughout my forays into this potpourri of acronyms and metaphors for programming, I continue to find myself falling back on the crutch of GDD – the least Agile and productive approach of all.&lt;/p&gt;  &lt;p&gt;Yes, I’m referring to none other than the ubiquitous Google-Driven Development (GDD).&amp;#160; &lt;/p&gt;  &lt;p&gt;Its like when I first realized how dependent upon &lt;a href="http://en.wikipedia.org/wiki/Intellisense" target="_blank"&gt;Intellisense&lt;/a&gt; I had become, except now I find that GDD is far worse since it is simultaneously more subtle, insidious, and disruptive.&amp;#160;&amp;#160;&amp;#160; At least Intellisense tries (yet arguably fails) to help you get things done faster, but GDD despite its popularity and benign appearance is truly the greatest time-sucking vortex in the universe.&amp;#160; &lt;/p&gt;  &lt;p&gt;GDD dulls the developer’s mind, lulls us into a complacency about trying to solve problems ourselves – since by simply Googling, you can let others provide an answer for you.&amp;#160; GDD is like dark-matter obscuring developers from &lt;a href="http://en.wikipedia.org/wiki/Grok" target="_blank"&gt;grokking&lt;/a&gt; quality software engineering.&amp;#160; It is the elusive &lt;a href="http://en.wikipedia.org/wiki/Higgs_boson" target="_blank"&gt;Higgs-Boson particle&lt;/a&gt; of development that is driving us toward anti-productivity and mediocrity.&amp;#160; It is the reason why aspiring developers’ growth often stalls mid-career, becomes stunted and eventually causes them to revert to (MS-style) demoware quality development rather than maturing into true software engineers, craftsmen, and thought-leaders of the industry.&amp;#160; GDD is more subtle than the common-cold and a greater pandemic than H1N1, and it must be eradicated. [1]&lt;/p&gt;  &lt;p&gt;Inevitably if we continue to abuse GDD, we may one day be faced with a future similar to that depicted in the fictional (yet highly plausible) movie &lt;a href="http://www.imdb.com/title/tt0387808/" target="_blank"&gt;Idiocracy&lt;/a&gt; where our development communities are filled with below-average developers and hacks who are ruled by a few barely-average people and their well &lt;a href="http://en.wikipedia.org/wiki/Search_engine_optimization" target="_blank"&gt;SEO&lt;/a&gt; implemented code repositories.&lt;/p&gt;  &lt;h3&gt;Diagnosis&lt;/h3&gt;  &lt;p&gt;I implore you to perform this self-diagnostic test today to see if you too have acquired the GDD addiction:&lt;/p&gt;  &lt;p&gt;Ban yourself from Google (and/or Bing) for 1 day…If you find that you struggle to produce code without searching for 3rd party libraries &amp;amp; open-source, notice a sense anxiety at being unable to find blog code samples, feel concerned that you cannot validate your ideas against posts in forums and sample apps, or cannot make coding progress without seeking out online API’s and reference sheets, then you too may suffer from Google Driven Development. [2]&lt;/p&gt;  &lt;h3&gt;Remedy&lt;/h3&gt;  &lt;p&gt;GDD is difficult to completely eradicate from our lives, however here is a proven 7-step&amp;#160; approach that helps to reduce its harmful affects; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Blank Browser&lt;/strong&gt; - Change your browser start-page to about:blank (or equivalent) rather than a search page. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Cleansing Period&lt;/strong&gt; - Perform a 1 week cleansing period of total search abstinence. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Moderation&lt;/strong&gt; - Afterward, slowly reintroduce Google and other search tools with extreme moderation. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Reward Abstinence&lt;/strong&gt; - Reward yourself each time you successfully complete a task without search that normally you would have. (note: don't use GDD as a reward for GDD abstinence) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Cheat Hour&lt;/strong&gt; - Schedule one timed GDD Cheat Hour each week where you allow yourself to indulge in unadulterated hard-core GDD.&amp;#160; (Note: make sure the 1 hour isn't exceeded) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;GDD Diary&lt;/strong&gt; - Keep a log of how much time you use search tools for development. (Tools like &lt;a href="http://rescuetime.com/ref/107018" target="_blank"&gt;RescueTime.com&lt;/a&gt; may help) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;GDD Monitoring&lt;/strong&gt; - After 21 days of intense anti-GDD focus &amp;amp; moderation, open up your calendar and schedule 1-2 days of GDD abstinence each month to measure your progress.&amp;#160;&amp;#160; If abstinence of GDD still causes excessive anxiety, repeat these 7-steps. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Note: beware that its common to see GDD sufferers seek-out alternatives, or shift habits towards &lt;a href="http://www.Twitter.com" target="_blank"&gt;Twitter&lt;/a&gt;, &lt;a href="http://www.StackOverflow.com" target="_blank"&gt;StackOverflow&lt;/a&gt;, and other social networking sites.&amp;#160; These are just variants on GDD, each with its own set of problems, thus should be avoided. [3]&lt;/p&gt;  &lt;p&gt;Good luck!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[1] Okay, I’m not really saying never reuse code, but hey, try writing some stuff yourself first and at least you will better understand the problem rather than taking other developers’ word on how to solve it.&lt;/p&gt;  &lt;p&gt;[2] There is obviously some truth in this post, but I really hope you don’t think that I’m totally serious and off my rocker with all this stuff.&amp;#160; Its just a fun way of pointing out something we all know already, which is that we tend to go down rabbit-holes when we google anything, and waste more time googling and digging than it might have taken to write it ourselves in the first place.&lt;/p&gt;  &lt;p&gt;[3] This is also a belated partial-rebuttal of Phil Haack’s 2007 post “&lt;a href="http://haacked.com/archive/2007/03/16/increase-productivity-with-search-driven-development.aspx" target="_blank"&gt;Increase Productivity With Search Driven Development&lt;/a&gt;” in which he argues the value of Search for code/solution discovery.&amp;#160; I don't even mention the risks to Intellectual Property and job security if you are a commercial product developer…&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7587423" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Philosophy 101" scheme="http://weblogs.asp.net/lhunt/archive/tags/Philosophy+101/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/lhunt/archive/tags/General+Software+Development/default.aspx" /><category term="Worst Practices" scheme="http://weblogs.asp.net/lhunt/archive/tags/Worst+Practices/default.aspx" /><category term="Methodology" scheme="http://weblogs.asp.net/lhunt/archive/tags/Methodology/default.aspx" /><category term="humor" scheme="http://weblogs.asp.net/lhunt/archive/tags/humor/default.aspx" /><category term="Productivity" scheme="http://weblogs.asp.net/lhunt/archive/tags/Productivity/default.aspx" /></entry><entry><title>T4 Template error - Assembly Directive cannot locate referenced assembly in Visual Studio 2010 project.</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2010/05/04/t4-template-error-assembly-directive-cannot-locate-referenced-assembly-in-visual-studio-2010-project.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2010/05/04/t4-template-error-assembly-directive-cannot-locate-referenced-assembly-in-visual-studio-2010-project.aspx</id><published>2010-05-05T04:26:50Z</published><updated>2010-05-05T04:26:50Z</updated><content type="html">&lt;p&gt;I ran into the following error recently in Visual Studio 2010 while trying to port &lt;a href="http://haacked.com/" target="_blank"&gt;Phil Haack&lt;/a&gt;’s excellent &lt;a href="http://haacked.com/archive/2009/12/02/t4-template-for-less-css.aspx" target="_blank"&gt;T4CSS template&lt;/a&gt; which was originally built for Visual Studio 2008.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;h3&gt;The Problem&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Error Compiling transformation: Metadata file 'dotless.Core' could not be found&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In “T4 speak”, this simply means that you have an Assembly directive in your T4 template but the T4 engine was not able to locate or load the referenced assembly.&lt;/p&gt;  &lt;p&gt;In the case of the T4CSS Template, this was a showstopper for making it work in Visual Studio 2010.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;On a side note:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The T4CSS template is a sweet little wrapper to allow you to use &lt;a href="http://dotlesscss.com/" target="_blank"&gt;&lt;strong&gt;DotLessCss&lt;/strong&gt;&lt;/a&gt; to generate static .css files from .less files rather than using their default &lt;em&gt;HttpHandler&lt;/em&gt; or command-line tool.&amp;#160;&amp;#160;&amp;#160; If you haven't tried &lt;strong&gt;DotLessCSS&lt;/strong&gt; yet, go &lt;a href="http://dotlesscss.com/" target="_blank"&gt;check it out &lt;/a&gt;now!&amp;#160; &lt;/p&gt;    &lt;p&gt;In short, it is a tool that allows you to templatize and program your CSS files so that you can use variables, expressions, and mixins within your CSS which enables rapid changes and a lot of developer-flexibility as you evolve your CSS and UI.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Back to our regularly scheduled program…&lt;/h3&gt;  &lt;p&gt;Anyhow, this post isn't about DotLessCss, its about the T4 Templates and the errors I ran into when converting them from Visual Studio 2008 to Visual Studio 2010.&lt;/p&gt;  &lt;p&gt;In VS2010, there were &lt;a href="http://blogs.msdn.com/garethj/archive/2010/04/15/what-s-new-in-t4-in-visual-studio-2010.aspx" target="_blank"&gt;quite a few changes&lt;/a&gt; to the T4 Template Engine; most were excellent changes, but this one bit me with T4CSS:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Project assemblies are no longer used to resolve template assembly directives.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In VS2008, if you wanted to reference a custom assembly in your T4 Template (.tt file) you would simply right click on your project, choose &lt;strong&gt;Add Reference&lt;/strong&gt; and select that assembly.&amp;#160; Afterwards you were allowed to use the following syntax in your T4 template to tell it to look at the local references:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;#@ assembly name=&amp;quot;dotless.Core.dll&amp;quot; #&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This told the engine to look in the “usual place” for the assembly, which is your project references.&lt;/p&gt;  &lt;p&gt;However, this is exactly what they changed in VS2010.&amp;#160; They now basically sandbox the T4 Engine to keep your T4 assemblies separate from your project assemblies.&amp;#160; This can come in handy if you want to support different versions of an assembly referenced both by your T4 templates and your project.&lt;/p&gt;  &lt;h3&gt;Who broke the build?&amp;#160; Oh, Microsoft Did!&lt;/h3&gt;  &lt;p&gt;In our case, this change causes a problem since the templates are no longer compatible when upgrading to VS 2010 – thus its a breaking change.&amp;#160; So, how do we make this work in VS 2010?&lt;/p&gt;  &lt;p&gt;Luckily, Microsoft now offers several options for referencing assemblies from T4 Templates:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;GAC your assemblies&lt;/strong&gt; and use Namespace Reference or Fully Qualified Type Name &lt;/li&gt;    &lt;li&gt;Use a &lt;strong&gt;hard-coded&lt;/strong&gt; Fully Qualified UNC path &lt;/li&gt;    &lt;li&gt;Copy assembly to Visual Studio &amp;quot;&lt;strong&gt;Public Assemblies Folder&lt;/strong&gt;&amp;quot; and use Namespace Reference or Fully Qualified Type Name.&amp;#160; &lt;/li&gt;    &lt;li&gt;Use or Define a &lt;strong&gt;Windows Environment Variable&lt;/strong&gt; to build a Fully Qualified UNC path. &lt;/li&gt;    &lt;li&gt;Use a&lt;strong&gt; Visual Studio Macro&lt;/strong&gt; to build a Fully Qualified UNC path. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Option #1 &amp;amp; 2 were already supported in Visual Studio 2008, so if you want to keep your templates compatible with both Visual Studio versions, then you would have to adopt one of these approaches.&lt;/p&gt;  &lt;h3&gt;Yakkety Yak, use the GAC!&lt;/h3&gt;  &lt;p&gt;Option #1 requires an additional pre-build step to GAC the referenced assembly, which could be a pain.&amp;#160; But, if you go that route, then after you GAC, all you need is a simple type name or namespace reference such as:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;#@ assembly name=&amp;quot;dotless.Core&amp;quot; #&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Hard Coding aint that hard!&lt;/h3&gt;  &lt;p&gt;The other option of using hard-coded paths in Option #2 is pretty impractical in most situations since each developer would have to use the same local project folder paths, or modify this setting each time for their local machines as well as for production deployment.&amp;#160; However, if you want to go that route, simply use the following assembly directive style:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;#@ assembly name=&amp;quot;C:\Code\Lib\dotless.Core.dll&amp;quot; #&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Lets go Public!&lt;/h3&gt;  &lt;p&gt;Option #3, the &lt;strong&gt;Visual Studio Public Assemblies Folder,&lt;/strong&gt; is the recommended place to put commonly used tools and libraries that are only needed for Visual Studio.&amp;#160; Think of it like a VS-only GAC.&amp;#160; This is likely the best place for something like &lt;strong&gt;dotLessCSS&lt;/strong&gt; and is my preferred solution.&amp;#160; However, you will need to either use an installer or a pre-build action to copy the assembly to the right folder location.&amp;#160;&amp;#160; Normally this is located at:&amp;#160; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Once you have copied your assembly there, you use the type name or namespace syntax again:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;#@ assembly name=&amp;quot;dotless.Core&amp;quot; #&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Save the Environment!&lt;/h3&gt;  &lt;p&gt;Option #4, using a &lt;strong&gt;Windows Environment Variable,&lt;/strong&gt; is interesting for enterprise use where you may have standard locations for files, but less useful for demo-code, frameworks, and products where you don't have control over the local system.&amp;#160; The syntax for including a environment variable in your assembly directive looks like the following, just as you would expect:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;#@ assembly name=&amp;quot;&lt;strong&gt;%mypath%&lt;/strong&gt;\dotless.Core.dll&amp;quot; #&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;“mypath” is a Windows environment variable you setup that points to some fully qualified UNC path on your system.&amp;#160; In the right situation this can be a great solution such as one where you use a msi installer for deployment, or where you have a pre-existing environment variable you can re-use.&lt;/p&gt;  &lt;h3&gt;OMG Macros!&lt;/h3&gt;  &lt;p&gt;Finally, Option #5 is a very nice option if you want to keep your T4 template’s assembly reference local and relative to the project or solution without muddying-up your dev environment or GAC with extra deployments.&amp;#160; An example looks like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;#@ assembly name=&amp;quot;&lt;strong&gt;$(SolutionDir)&lt;/strong&gt;lib\dotless.Core.dll&amp;quot; #&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In this example, I’m using the “SolutionDir” VS macro so I can reference an assembly in a “/lib” folder at the root of the solution.&amp;#160;&amp;#160; This is just one of the many macros you can use.&amp;#160; If you are familiar with creating Pre/Post-build Event scripts, you can use its dialog to look at all of the different VS macros available.&lt;/p&gt;  &lt;p&gt;This option gives the best solution for local assemblies without the hassle of extra installers or other setup before the build.&amp;#160;&amp;#160; However, its still not compatible with Visual Studio 2008, so if you have a T4 Template you want to use with both, then you may have to create multiple .tt files, one for each IDE version, or require the developer to set a value in the .tt file manually.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;I’m not sure if T4 Templates support any form of compiler switches like “#if (VS2010)”&amp;#160; statements, but it would definitely be nice in this case to switch between this option and one of the ones more compatible with VS 2008.&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;As you can see, we went from 3 options with Visual Studio 2008, to 5 options (plus one problem) with Visual Studio 2010.&amp;#160; As a whole, I think the changes are great, but the short-term growing pains during the migration may be annoying until we get used to our new found power.&lt;/p&gt;  &lt;p&gt;Hopefully this all made sense and was helpful to you.&amp;#160; If nothing else, I’ll just use it as a reference the next time I need to port a T4 template to Visual Studio 2010.&amp;#160; &lt;/p&gt;  &lt;p&gt;Happy T4 templating, and “May the fourth be with you!”&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7470720" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/lhunt/archive/tags/.NET/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/lhunt/archive/tags/Visual+Studio/default.aspx" /><category term="CodeGen" scheme="http://weblogs.asp.net/lhunt/archive/tags/CodeGen/default.aspx" /><category term="Debugging" scheme="http://weblogs.asp.net/lhunt/archive/tags/Debugging/default.aspx" /><category term="Developer Tools" scheme="http://weblogs.asp.net/lhunt/archive/tags/Developer+Tools/default.aspx" /><category term="T4 Templates" scheme="http://weblogs.asp.net/lhunt/archive/tags/T4+Templates/default.aspx" /></entry><entry><title>Minimum &amp; Maximum Dates in code</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2008/06/19/minimum-amp-maximum-dates-in-code.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2008/06/19/minimum-amp-maximum-dates-in-code.aspx</id><published>2008-06-19T16:35:56Z</published><updated>2008-06-19T16:35:56Z</updated><content type="html">&lt;p&gt;When updating Sql columns that need a minimum or maximum date, consider using the defaults from the System.Data.SqlType namespace:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;DateTime minDate = SqlDateTime.MinValue.Value&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;// and&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;DateTime maxDate = SqlDateTime.MaxValue.Value&lt;/pre&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;This can be a lot safer than putting hard-coded &amp;quot;magic date&amp;quot; constants in your code.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6296330" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/lhunt/archive/tags/.NET/default.aspx" /><category term="Best Practices" scheme="http://weblogs.asp.net/lhunt/archive/tags/Best+Practices/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/lhunt/archive/tags/C_2300_/default.aspx" /></entry><entry><title>What we dont know "will" hurt us...</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2008/06/05/what-we-dont-know-quot-will-quot-hurt-us.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2008/06/05/what-we-dont-know-quot-will-quot-hurt-us.aspx</id><published>2008-06-05T17:17:53Z</published><updated>2008-06-05T17:17:53Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;I like this article by &lt;a href="http://simplyagile.blogspot.com" target="_blank"&gt;Nathan Henkel&lt;/a&gt;, its essentially about assessing risk and scope of projects and strikes me as&amp;nbsp;a simple truth about the uncertainties you encounter in every project: &lt;blockquote&gt; &lt;p&gt;&lt;i&gt;Information about any project can be divided into four categories:&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;br&gt;1. Things we know (and know we know)&lt;br&gt;2. Things we know we don't know&lt;br&gt;3. Things we think we know, but don't (i.e. things we're wrong about)&lt;br&gt;4. Things we don't know we don't know&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Obviously, if you were to try to actually figure out where everything falls, you would put everything into 1 or 2. Everything that should be in 3, you would put in 1 (you're not going to have known mistakes in your information), and everything that should be in 4 would simply be missing.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;br&gt;However, without dealing with specific items, I do think that &lt;b&gt;it's possible to guess at how much "stuff" goes in each category&lt;/b&gt;. You can take into account your history ("I tend to often be mistaken about X"), or a general feeling of ignorance ("I've never used framework Y before") to guess how much goes in each category.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://simplyagile.blogspot.com/2007/10/classifying-information-or-what-we-know.html"&gt;http://simplyagile.blogspot.com/2007/10/classifying-information-or-what-we-know.html&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Sometimes, I think we get so wrapped up with what we “know” about a project that we fail to quantify what we don’t know, or the degree of certainty to which we actually know what we think we know.&amp;nbsp; As with solving any problem, the first step is to find a way to quantify&amp;nbsp;and measure&amp;nbsp;uncertainty and risk&amp;nbsp;in order to minimize it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;If you track this measurement over time, it should also help your&amp;nbsp;estimation and planning&amp;nbsp;on future projects.&lt;/p&gt; &lt;p&gt;Good stuff!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6250619" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Best Practices" scheme="http://weblogs.asp.net/lhunt/archive/tags/Best+Practices/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/lhunt/archive/tags/General+Software+Development/default.aspx" /><category term="Project Management" scheme="http://weblogs.asp.net/lhunt/archive/tags/Project+Management/default.aspx" /></entry><entry><title>Argotic Syndication Framework 2008 released</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2008/03/27/argotic-syndication-framework-2008-released.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2008/03/27/argotic-syndication-framework-2008-released.aspx</id><published>2008-03-27T16:59:12Z</published><updated>2008-03-27T16:59:12Z</updated><content type="html">&lt;p&gt;I got an email yesterday that&amp;nbsp;a major update to the &lt;a href="http://www.codeplex.com/Argotic"&gt;Argotic Syndication Framework&lt;/a&gt;&amp;nbsp;was released.&amp;nbsp;&amp;nbsp; I have used the older versions of this&amp;nbsp;framework several times for projects that need basic RSS &amp;amp; Atom parsing/generating so I'm looking forward to digging-in to the new release.&lt;/p&gt; &lt;p&gt;If you are not familiar with it, here is a quick blurb:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The Argotic Syndication Framework is a Microsoft .NET class library framework that enables developers to easily consume and/or generate syndicated content from within their own applications. The framework makes the reading and writing syndicated content in common formats such as RSS, Atom, OPML, APML, BlogML, and RSD very easy while still remaining extensible enough to support common/custom extensions to the syndication publishing formats. The framework includes out-of-the-box implementations of 19 of the most commonly used syndication extensions, network clients for sending and receiving peer-to-peer notification protocol messages; as well as HTTP handlers and controls that provide rich syndication functionality to ASP.NET developers.&lt;/p&gt; &lt;p&gt;To learn more about the capabilities of this powerful and extensible .NET web content syndication framework and download the latest release, visit the project web site at &lt;a href="http://www.codeplex.com/argotic"&gt;http://www.codeplex.com/argotic&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Also, here are some of the new features in this release:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;a) Targeting of both the &lt;i&gt;.NET 2.0 &lt;/i&gt;and&lt;i&gt; .NET 3.5&lt;/i&gt; platforms&lt;/p&gt; &lt;p&gt;b) Implementation of the &lt;b&gt;APML&lt;/b&gt; 0.6 specification &lt;p&gt;c) Implementation of the &lt;b&gt;BlogML&lt;/b&gt; 2.0 specification &lt;p&gt;d) Native support of the &lt;b&gt;Microsoft FeedSync&lt;/b&gt; 1.0 syndication extension &lt;p&gt;e) Simplified programming API and better online/offline examples&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Brian has done an amazing job on this project from the start.&amp;nbsp; I had intended (and still hope) to jump in and contribute some of my own work, so its great to see how far it has evolved from its first releases.&lt;/p&gt; &lt;p&gt;If you work with RSS, ATOM, or any other syndication format/protocol, you should&amp;nbsp;definitely take a look at this framework for your next project.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6037780" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/lhunt/archive/tags/.NET/default.aspx" /><category term="Blogs &amp;amp; Bloggars" scheme="http://weblogs.asp.net/lhunt/archive/tags/Blogs+_2600_amp_3B00_+Bloggars/default.aspx" /></entry><entry><title>I love ClearContext!!</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/12/18/i-love-clearcontext.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/12/18/i-love-clearcontext.aspx</id><published>2007-12-18T19:40:04Z</published><updated>2007-12-18T19:40:04Z</updated><content type="html">&lt;p&gt;After several months of using the&amp;nbsp;Free version of the &lt;a href="http://www.clearcontext.com/"&gt;ClearContext&lt;/a&gt; addon for Microsoft Outlook, I just cant imagine what I would do without it.&amp;nbsp; It has reduced my email time, kept me more organized, and uncluttered my Inbox better &amp;amp; faster than any ad-hoc system I have devised in the past.&lt;/p&gt; &lt;p&gt;As a developer, I hate it when I have to "code in Outlook".&amp;nbsp; If it were up to me, I would ban all email during a project and deal with all communication&amp;nbsp;via instant messenging, Scrum meetings,&amp;nbsp;and whiteboards, but the truth is that email is a neccessary evil especially as a Tech Lead who needs to interface with the Project Manager, Customer, and IT personnel.&lt;/p&gt; &lt;p&gt;Enter ClearContext Information Management System... &lt;/p&gt; &lt;p&gt;First, I set it up to flag emails from my bosses in &lt;font color="#ff0000"&gt;Red&lt;/font&gt;, so I dont miss them.&amp;nbsp; Plus, for good measure, I have an Outlook rule that sets a FollowUp flag to make sure I dont overlook them.&amp;nbsp; Also, ClearContext automagically ranks emails based upon my prior history with this person, so I know what to do when I get some nice &lt;font color="#0000ff"&gt;blue&lt;/font&gt; and &lt;font color="#008000"&gt;green&lt;/font&gt; colored mail too.&lt;/p&gt; &lt;p&gt;If I receive an email relating to my current project, I simply hit &lt;strong&gt;ALT-P&lt;/strong&gt; to&amp;nbsp;popup the CC dialog and flag it with the topic "projects/MyProject" then&amp;nbsp;either leave it in the inbox for further review, or hit &lt;strong&gt;ALT-M&lt;/strong&gt; to file the message&amp;nbsp;for future reference.&amp;nbsp;&amp;nbsp;&amp;nbsp; Accordingly, if I receive some corporate or administrative relating email, then I assign it's topic&amp;nbsp;appropriately and file the message to send it to its respective holding area.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;The act of assigning a Topic (ALT-P), automatically creates&amp;nbsp;subfolders within my Inbox (e.g.&amp;nbsp; inbox/projects/MyProject) matching the topic name (Note the trick of adding a "/" to the topic name to create a nested subfolder at the same time).&amp;nbsp; The act of filing a message (ALT-M), moves it to the subfolder identified by the topic name.&amp;nbsp; This is great because the messages are nolonger visible in the Inbox listing, but are still within the Inbox via the subfolder.&lt;/p&gt; &lt;p&gt;At that point, my AutoArchive settings will take care of moving it off on a monthly basis in case I need it later.&lt;/p&gt; &lt;p&gt;At some point, I want to look at the full product, which has features for deferring emails, converting them to tasks &amp;amp; appointments, assigning them to other people, etc.&amp;nbsp;&amp;nbsp; See their &lt;a href="http://www.clearcontext.com/products/index.html" rel="tag"&gt;Features Overview&lt;/a&gt; section for more on these areas.&lt;/p&gt; &lt;p&gt;If these features are nearly as useful as the ones I use now, then I could *gasp*&amp;nbsp;become even more productive!&amp;nbsp; woot!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5469786" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Technology" scheme="http://weblogs.asp.net/lhunt/archive/tags/Technology/default.aspx" /><category term="Miscellaneous" scheme="http://weblogs.asp.net/lhunt/archive/tags/Miscellaneous/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/lhunt/archive/tags/General+Software+Development/default.aspx" /></entry><entry><title>Manual CRUD operations with the Telerik RadGrid control</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/10/17/manual-crud-operations-with-the-telerik-radgrid-control.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/10/17/manual-crud-operations-with-the-telerik-radgrid-control.aspx</id><published>2007-10-17T15:33:00Z</published><updated>2007-10-17T15:33:00Z</updated><content type="html">&lt;p&gt;I have been working on a project lately that was already using the &lt;a href="http://www.telerik.com" mce_href="http://www.telerik.com" target="_blank" rel="nofollow"&gt;Telerik&lt;/a&gt; ASP.NET Rad Controls suite.&amp;nbsp; One of the new&amp;nbsp;features was a fully editable web-grid, so I chose to use the existing ajax-enabled RadGrid control to speed my&amp;nbsp;development.&amp;nbsp; I chose to use a 3rd party control, mostly due to time constraints since&amp;nbsp;the project required a grid with inline-editing, full CRUD operations, plus custom column templates, all with heavy Ajax support to avoid postbacks and excessive page size.&lt;/p&gt; &lt;p&gt;I soon discovered, the Telerik controls are nice tool for simple uses where you can use asp.net DataSource controls and automatic databinding, but not so much if you need to get "fancy" with your implementation.&amp;nbsp; In&amp;nbsp;my case I needed to do 2 things that cross over into the grey area where these controls excel.&lt;/p&gt; &lt;p&gt;First, I'm using an early 2.0 version of &lt;a href="http://www.nettiers.org" mce_href="http://www.nettiers.org" target="_blank" rel="nofollow"&gt;NetTiers&lt;/a&gt; for the DAL (with Service Layer implementation) with custom mods to the entities as the datasource,&amp;nbsp; and second, I'm doing some aggregate custom ItemTemplates that require custom data-binding.&lt;/p&gt; &lt;p&gt;This lead to&amp;nbsp;extreme complexity in the implementation because, A) this version of NetTiers' had problems with properly generating CRUD operations for its EntityDataSource controls (NetTiers entities mapped onto a custom ObjectDataSource style control) which prevented me from using the declarative model, and B) the RadGrid control simply&amp;nbsp;sucks if you cannot use automatic databinding and if you require custom databinding logic.&lt;/p&gt; &lt;p&gt;It would be great if I could upgrade NetTiers and/or Teleriki RadControls to the latest versions, but it wasnt possible in this situation, nor is it likely that this would have solved my problems.&lt;/p&gt; &lt;p&gt;Anyhow, all this discussion is basically just to share you this one link to a user-contributed example I found incredibly useful after 3 days of searching their forums, demos, and 3rd party blogs.&amp;nbsp;&amp;nbsp; This example shows how to manually&amp;nbsp;implement Insert/Update/Delete functionality within the RadGrid control by handling the events &lt;b&gt;OnNeedDataSource&lt;/b&gt;,&amp;nbsp;&lt;b&gt;OnItemCommand&lt;/b&gt;, &lt;b&gt;OnInsertCommand&lt;/b&gt;, &lt;b&gt;OnUpdateCommand&lt;/b&gt;, and &lt;b&gt;OnDeleteCommand&lt;/b&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.telerik.com/community/code-library/submission/b311D-mmdbh.aspx" mce_href="http://www.telerik.com/community/code-library/submission/b311D-mmdbh.aspx"&gt;http://www.telerik.com/community/code-library/subm...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The reason this link is important is because the Telerik website, with all of its dozens of examples, consistently shows very basic scenarios, even in samples labeled "advanced".&amp;nbsp; Also, not all of the API features are fully or well documented to help you figure this out on your own.&lt;/p&gt; &lt;p&gt;Hopefully this simple link (which should be promoted to Telerik's demos/samples page) will help someone else as much as it did me.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4607004" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="ASP.NET" scheme="http://weblogs.asp.net/lhunt/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>VPC 2007 Dual Monitor support</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/10/11/vpc-2007-dual-monitor-support.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/10/11/vpc-2007-dual-monitor-support.aspx</id><published>2007-10-11T17:11:00Z</published><updated>2007-10-11T17:11:00Z</updated><content type="html">&lt;p&gt;I have been trying to find a way to&amp;nbsp;allow you to run Virtual PC 2007 with multiple monitors.&amp;nbsp; Natively VPC 2007 doesnt support more than 1 monitor, however you can "trick" it by using various techniques that expand the desktop area into a larger virtual desktop.&lt;/p&gt;
 
&lt;p&gt;I tried using&amp;nbsp;the awesome &lt;a href="http://www.maxivista.com" mce_href="http://www.maxivista.com" target="_blank" rel="tag"&gt;MaxiVista tool&lt;/a&gt; which can extend your screen across separate PC's (think "push" remote desktop), but the &lt;a href="http://blogs.msdn.com/virtual_pc_guy/archive/2007/02/20/multi-monitor-fullscreen-mode-compatibility-with-virtual-pc-2007.aspx" mce_href="http://blogs.msdn.com/virtual_pc_guy/archive/2007/02/20/multi-monitor-fullscreen-mode-compatibility-with-virtual-pc-2007.aspx" target="_blank" rel="nofollow"&gt;new multi-monitor compatibility feature of VPC 2007&lt;/a&gt; (which inexplicably does not add multi-monitor support) made this difficult since it ensures that your desktop recaptures your mouse when you move it outside of the VPC window thus preventing the extended screen from being accessible.&lt;/p&gt;
 
&lt;p&gt;So, instead I tried the Remote Desktop approach mentioned in &lt;a href="http://stevenharman.net/blog/archive/2007/04/03/Using-Virtual-PC-with-Multiple-Monitors-Sort-Of.aspx" mce_href="http://stevenharman.net/blog/archive/2007/04/03/Using-Virtual-PC-with-Multiple-Monitors-Sort-Of.aspx" target="_blank" rel="nofollow"&gt;Steven Harman's blog post&lt;/a&gt;.&amp;nbsp;&amp;nbsp; &lt;/p&gt;
 
&lt;p&gt;Here is a quick rundown on how it works:&lt;/p&gt;
 
&lt;p&gt;Connect 2 monitors to your&amp;nbsp;PC (more than 2 typically don't work with this approach).&amp;nbsp;&amp;nbsp; Make sure to extend your desktop onto the 2nd screen via &lt;b&gt;Display Properties -&amp;gt; Settings.&lt;/b&gt;&amp;nbsp; Then launch Remote Desktop (mstsc.exe) with the "/span" flag:&lt;/p&gt;

&lt;pre style="background-color: White;"&gt;&lt;div&gt;&lt;!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;mstsc &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;b&gt;span&lt;/b&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;Then just use Remote Desktop as usual by specifying your VPC's computer name in the connection dialog.&lt;/p&gt;

&lt;p&gt;When I first tried this, it still didnt work exactly right.&amp;nbsp; It kept giving me annoying scrollbars instead of going full screen, so I added this extra flag to force it into fullscreen:&lt;/p&gt;


&lt;pre style="background-color: White;"&gt;&lt;div&gt;&lt;!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;mstsc &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;span &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;b&gt;f&lt;/b&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;Also, since I didnt want VPC to have the extra overhead of maintaining 2 sessions (the console and my new RDP session), I threw in one more flag to make it simply take-over the initial console window:&lt;/p&gt;


&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:5c2c3e8b-49c7-4bde-af5d-7154253db7a4" contenteditable="false" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
&lt;pre style="background-color: White;"&gt;&lt;div&gt;&lt;!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;mstsc &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;span &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;f &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;b&gt;console&lt;/b&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;NOTE&lt;/b&gt;: The &lt;b&gt;&lt;i&gt;/span&lt;/i&gt;&lt;/b&gt; flag is only present on the very latest version of Remote Desktop Connection.&amp;nbsp; Therefore, you must either be running Vista on both PC's, or install the update specified here:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/925876" mce_href="http://support.microsoft.com/kb/925876"&gt;http://support.microsoft.com/kb/925876&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are limitations on how your&amp;nbsp; monitors must be configured in order for this flag to work.&lt;/p&gt;

&lt;p&gt;Also, keep in mind that this technique only enlarges your desktop area sufficiently large enouch to span both monitors, but it DOES NOT behave exactly like the native dual-monitor support you may be accustomed to.&amp;nbsp; For example, when you maximize a window, it maximizes across BOTH monitors instead of maximizing within the confines of a single monitor.&amp;nbsp;&amp;nbsp; For now, I'm just dealing with that by avoiding maximizing and just manually resizing windows to fit 1 screen.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Advanced Users:&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;One way to avoid having to arrange windows each time is to use a cryptic,&amp;nbsp;yet&amp;nbsp;incredible tool called &lt;a href="http://www.hawkeyetech.com/products/freeware.htm#hsi" mce_href="http://www.hawkeyetech.com/products/freeware.htm#hsi" target="_blank" rel="nofollow"&gt;Hawkeye ShellInit.&lt;/a&gt; ShellInit is a small application that helps you manipulate your desktop &amp;amp; application windows via script.&amp;nbsp;&amp;nbsp; Here is a small script that will move Visual Studio over the right-hand screen (assuming 1280x1024 resolution) and enlarge it to the correct size.
&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;br&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9faff421-cf10-4f33-8da4-64c3b1501425" contenteditable="false" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;&lt;pre style="background-color: White;"&gt;&lt;div&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Position Window, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Microsoft Visual Studio, wndclass_desked_gsk, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1280&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1288&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1002&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you decide to use this tool, make sure and read the readme.txt file for some good sample scripts and ideas.&lt;b&gt;&lt;/b&gt; &lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4524121" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Virtualization" scheme="http://weblogs.asp.net/lhunt/archive/tags/Virtualization/default.aspx" /></entry><entry><title>Reporting Services administration changes in Katmai (v.Next)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/04/24/reporting-services-administration-changes-in-katmai-v-next.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/04/24/reporting-services-administration-changes-in-katmai-v-next.aspx</id><published>2007-04-24T17:02:23Z</published><updated>2007-04-24T17:02:23Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/bwelcker/archive/2007/04/24/watusi-ssrs-mangament-tools-changes-for-katmai.aspx" target="_blank" rel="tag"&gt;Brian Welcker posts&lt;/a&gt; some information on changes they are consindering&amp;nbsp;to&amp;nbsp;how you will administer Sql Server Reporting Services in the next version, codenamed Katmai.&lt;/p&gt; &lt;p&gt;Right now, administering Report Models exposed to Report Builder requires you to launch Sql Server Management Studio tool, while other features require you to launch the Report Manager website.&amp;nbsp;&amp;nbsp; Also, there are some features&amp;nbsp;that you&amp;nbsp;rarely use,&amp;nbsp;yet are exposed&amp;nbsp;from the&amp;nbsp;Report Manager portal, such as Job Management and System Wide Role &amp;amp; Security configuration.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;It appears that the end result of the proposed&amp;nbsp;tool changes will be to correct these inconsistencies by consolidating server and system-wide configuration and administration tasks into Sql Server Management Studio, and moving some of the more user-facing admin features to the Report Manager.&lt;/p&gt; &lt;p&gt;Not a bad idea overall, now I just hope they fix support for FormsAuth throughout the entire solution (ReportBuilder, nudge nudge).&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2362282" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Sql Reporting Services" scheme="http://weblogs.asp.net/lhunt/archive/tags/Sql+Reporting+Services/default.aspx" /><category term="SQL Server" scheme="http://weblogs.asp.net/lhunt/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>Find your Sql Server Version and Edition</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/04/16/find-your-sql-server-version-and-edition.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/04/16/find-your-sql-server-version-and-edition.aspx</id><published>2007-04-17T01:49:00Z</published><updated>2007-04-17T01:49:00Z</updated><content type="html">&lt;p&gt;When working with Sql Reporting Services or other features that are version-specific, I often need to know what version of Sql Server is running on the target server.&lt;/p&gt;&lt;p&gt;For Sql 2000 and newer, you can simply query:&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:5ee17758-80bc-4a31-b852-766e707d4d21" style="display: inline; float: none; margin: 0px; padding: 0px"&gt;&lt;pre style="background-color: white"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000"&gt;SELECT SERVERPROPERTY(&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color: #000000"&gt;productversion&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color: #000000"&gt;), SERVERPROPERTY (&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color: #000000"&gt;productlevel&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color: #000000"&gt;), SERVERPROPERTY (&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color: #000000"&gt;edition&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color: #000000"&gt;)
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For Sql 7.0 and earlier, you can query:&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:72422ca8-e57e-42bc-b705-b2f1d3cbe6a9" style="display: inline; float: none; margin: 0px; padding: 0px"&gt;&lt;pre style="background-color: white"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000"&gt;SELECT @@VERSION&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the results arent obvious, you can see this KB article for details on what each result means:&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/321185"&gt;http://support.microsoft.com/kb/321185&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2257532" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Sql Reporting Services" scheme="http://weblogs.asp.net/lhunt/archive/tags/Sql+Reporting+Services/default.aspx" /><category term="SQL Server" scheme="http://weblogs.asp.net/lhunt/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>RSS and ATOM libraries?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/03/29/rss-and-atom-libraries.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/03/29/rss-and-atom-libraries.aspx</id><published>2007-03-30T01:19:40Z</published><updated>2007-03-30T01:19:40Z</updated><content type="html">&lt;p&gt;Today, I was out Googling&amp;nbsp;for a good ATOM library to add to a project I am working on so I can support&amp;nbsp;both RSS &amp;amp; ATOM.&amp;nbsp; Thus far, I have been using the excellent &lt;a href="http://www.codeplex.com/ASPNETRSSToolkit" rel="tag"&gt;ASP.NET RSS Toolkit&lt;/a&gt;, but I&amp;nbsp;was disappointed to find&amp;nbsp;very few .NET solutions for ATOM available in the open-source community.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;The &lt;a href="http://atomnet.sourceforge.net/" target="_blank" rel="tag"&gt;ATOM.NET&lt;/a&gt; (&amp;amp; &lt;a href="http://rss-net.sourceforge.net/" target="_blank" rel="tag"&gt;RSS.NET&lt;/a&gt;) libraries appear to nolonger be actively supported/developed.&amp;nbsp; As a result, ATOM.NET&amp;nbsp;still only supports ATOM v0.3.&amp;nbsp; This pretty much renders it useless for general use since Blogger and many other services have shifted everything to ATOM v1.0.&lt;/p&gt; &lt;p&gt;I found another interesting library, &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=4cd32ea2-c4be-400e-9391-caf05c0d273a" rel="tag"&gt;Atomizer&lt;/a&gt;, on GotDotNet but it contained a lot of unneccessary tangential code and inexplicably adhered to the "put-all-twenty-classes-in-one-file" methodology which made sifting and filtering the chaffe a bit more annoying.&lt;/p&gt; &lt;p&gt;Seeing as how &lt;a href="http://www.gotdotnet.com/"&gt;GotDotNet&lt;/a&gt; is being eliminated I thought it wise to forego projects on there anyhow, so&amp;nbsp;I decided to check out its chosen successor; &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt;.&amp;nbsp;&amp;nbsp; I did a quick search for "ATOM" which came up with 2 likely hits;&amp;nbsp; &lt;a href="http://www.codeplex.com/feedlib" rel="tag"&gt;Feed Library&lt;/a&gt;, and &lt;a href="http://www.codeplex.com/WebFeedFactory" rel="tag"&gt;WebFeedFactory&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/feedlib" rel="tag"&gt;Feed Library&lt;/a&gt; said all the right things;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Feed Library is a .net library written in c# to allow reading, creation, manipulation popular feeds (rss and atom) with common, easy to use api.&lt;br&gt;Expect initial release somewhere in the middle of spring.&lt;br&gt;For now, I'm collecting ideas, feature requests and applications from people that may help.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ufortunately that's all there is too that project - just text.&amp;nbsp;&amp;nbsp; There is no source code&amp;nbsp;&amp;amp;&amp;nbsp;no releases!&amp;nbsp;&amp;nbsp;Oh well, I'll bookmark that one and maybe&amp;nbsp;check back in a few months to see where it goes.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The &lt;a href="http://www.codeplex.com/WebFeedFactory" rel="tag"&gt;WebFeedFactory&lt;/a&gt; actually had source-code AND text:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;The goal of this project is to create a reusable library for parsing both Atom and RSS feeds and provide a common interface for working with either type of feed.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I loved what it said, and the code looked promising, eventhough it too had not been updated in a while and lacked ATOM 1.0 support.&amp;nbsp; However, the kiss of death was when I saw that it was GPL'd.&amp;nbsp;&amp;nbsp; Game over, bye bye now.&lt;/p&gt; &lt;p&gt;So, my journey continued...&lt;/p&gt; &lt;p&gt;I began&amp;nbsp;pulling down numerous libraries&amp;nbsp;packaged as&amp;nbsp;articleware, blogsamplings, and even a few commercial products.&amp;nbsp; Most were the usual glut of StrongTypedXmlDom&amp;nbsp;implementations, or suffered from XmlSerialization disorder.&amp;nbsp;&amp;nbsp;Finally, I&amp;nbsp;discovered &lt;a href="http://oppositionallydefiant.com" target="_blank" rel="tag"&gt;Brian Kuhn&lt;/a&gt;'s &lt;a href="http://argotic.oppositionallydefiant.com/" rel="tag"&gt;Argotic&amp;nbsp;Web Content Syndication&amp;nbsp;library&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://argotic.oppositionallydefiant.com/" rel="tag"&gt;Argotic&lt;/a&gt;&amp;nbsp;appears full featured, thoughtfully composed, extensible, permissively licensed...and, most importantly, free!&amp;nbsp; It even supports almost every known RSS extension including ITunes.&amp;nbsp; The only downside I can see so far is that it is apparrently "closed-source" since only binaries are available on the website.&amp;nbsp;&amp;nbsp; I think I'll go ahead and play with his API a bit before deciding&amp;nbsp;whether or not its worthwhile to persue the elusive sourcecode.&lt;/p&gt; &lt;p&gt;I'm not sure if its what I'm looking for, but it looks damn close.&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;While I continue to search for ATOMtopia, please leave a comment if you have a suggestion for a good, simple, and preferably free (opensource) library - or at least tell me what you use.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2149177" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/lhunt/archive/tags/.NET/default.aspx" /><category term="Blogs &amp;amp; Bloggars" scheme="http://weblogs.asp.net/lhunt/archive/tags/Blogs+_2600_amp_3B00_+Bloggars/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/lhunt/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>RSBuild deployment tool for Sql Server Reporting Services</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/03/01/rsbuild-deployment-tool-for-sql-server-reporting-services.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/03/01/rsbuild-deployment-tool-for-sql-server-reporting-services.aspx</id><published>2007-03-01T20:58:00Z</published><updated>2007-03-01T20:58:00Z</updated><content type="html">&lt;p&gt;I just discovered&amp;nbsp;this promising project named &lt;a href="http://www.codeplex.com/RSBuild/" rel="tag" target="_blank"&gt;RSBuild&lt;/a&gt; on CodePlex for scripting the deploy of Stored Procedures &amp;amp; Sql Reporting artifacts.&amp;nbsp; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;RSBuild is a deployment tool for SQL Server Reporting Service. It currently supports two types of tasks: executing SQL Server scripts and publishing SQL Server Reporting Serivce reports and shared data sources.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;It uses ADO.NET to execute database scripts in batch. Database script can be specified in the configuration file with specific database connection. (This tool can be extended to support other database provider) &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;To publish reports and data sources to SQL Server Reporting Services, it uses the generic web service interface provided by SQL Server Reporting Services. By specifying data sources and report files in the configuration file, it will publish them to the designated location on the report server. &lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;Besdes the simple command-line interface, the thing I liked most about it is that it isnt just the typical MSBuild wrapper to OSQL.exe and RS.EXE.&amp;nbsp;&amp;nbsp; Instead it uses ADO.NET and wrappers to the Reporting Services management web services.&lt;/p&gt;&lt;p&gt;Since it is open source, I think I&amp;#39;ll try and modify it to address a problem that often&amp;nbsp;prevents me from using Microsoft&amp;#39;s deploy tool. The RS.EXE tool that ships with Sql Reporting does not support custom security extensions such as Forms Auth and there is currently no work around other than writing your own replacement for the tool.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1853811" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Sql Reporting Services" scheme="http://weblogs.asp.net/lhunt/archive/tags/Sql+Reporting+Services/default.aspx" /></entry><entry><title>Requests for Sql Reporting Services v.Next team:</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/02/22/requests-for-sql-reporting-services-v-next-team.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/02/22/requests-for-sql-reporting-services-v-next-team.aspx</id><published>2007-02-22T17:43:43Z</published><updated>2007-02-22T17:43:43Z</updated><content type="html">&lt;p&gt;I recently completed a project in which I think I utilized every API and every extensibility point available within Sql Server 2005 Reporting Services and walked away from the experience feeling soiled, smelly, and dirty.&amp;nbsp; This wasnt my first time exploring this territory, since my last job utilized Sql Server 2000 Reporting Services, and involved several custom data extensions and some custom "function assemblies" for creating barcodes an other custom functionality within&amp;nbsp;from reports.&amp;nbsp; However, this time I think i really gained a better sense of how close the whole system is to being really good and how disappointing it is that the Sql Server 2005 team seemed to focus more on new features than on improving the integration and extension story.&lt;/p&gt; &lt;p&gt;This time, my main area of interest and eventual angst was the Security Extension framework.&amp;nbsp;&amp;nbsp; I really like the ACL-based solution they went with.&amp;nbsp;&amp;nbsp; I can't speak highly of its performance, but from an integration viewpoint, I really like how it really decouples the eventual authentication and authorization framework from how it is mapped-on to the underlying Catalog Item's.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;However, this framework quickly becomes incredibly chatty and expensive (frequent deserialization &amp;amp; lack of much caching) due to how granular and limited they made the API and eventual webservice methods that utilize this framework.&amp;nbsp; If you throw a debugger on the Report Manager &amp;amp; Report Server websites&amp;nbsp;and watch how many times it calls the LogonUser, GetPermissions,&amp;nbsp;and CheckAccess methods for a single report-listing, its pretty incredible.&amp;nbsp;&amp;nbsp; I imagine that with a little work on the webservice API, you could include support for batching multiple requests, and potentially add a bit of smart-caching of ACL maps.&amp;nbsp; Sadly, none of this appears to have improved from v1.0.&lt;/p&gt; &lt;p&gt;In addition,&amp;nbsp;it shocked me was that there is no "in-box" support for Forms-Authentication.&amp;nbsp; The best they could offer was a prebuilt sample extension that really is barely even a useful start beyond offering "an" example of how to build a Security Extension.&amp;nbsp;&amp;nbsp; Without the help from Teo Lachev's "&lt;a href="http://www.devx.com/dotnet/Article/26759/0/page/1" target="_blank" rel="tag"&gt;Harden MS Reporting Services Using Custom Extensions&lt;/a&gt;"&amp;nbsp;articles (especially &lt;a href="http://www.devx.com/dotnet/Article/27133/1763/page/1" target="_blank" rel="tag"&gt;Part 2&lt;/a&gt;) on &lt;a href="http://www.devx.com/" target="_blank" rel="tag"&gt;DevX&lt;/a&gt;, I would have given up.&lt;/p&gt; &lt;p&gt;So, my first&amp;nbsp;request to the Dev team at Microsoft is:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;"Address the extension &amp;amp; integration story in the next version instead of just layering on more and more new features!!!"&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Dont get me wrong, I think they did a great job with the concepts and implementation around&amp;nbsp;SSAS integration, Custom Report Items, Report Models &amp;amp; Report Builder - in fact, I hope these technologies evolve into something really fantastic in the next version.&amp;nbsp; BUT, the team's seemingly insatiable desire to catchup with the competing &lt;a href="http://www.businessobjects.com/" target="_blank" rel="tag"&gt;Business Objects&lt;/a&gt;' featureset appears to be causing them to neglect the core system.&amp;nbsp;&amp;nbsp; I respect Brian Welcker and what his teams have accomplished in such a short time, but someone please keep your eye on the ball here.&lt;/p&gt; &lt;p&gt;Another major concern I have is with the "Enterprise Focus" of Sql Reporting.&amp;nbsp;&amp;nbsp; Okay, I "get it" that Microsoft has focused on delivering for the Enterprise in a real way.&amp;nbsp; But, some of these same enterprises also run internet sites, extranet sites, and other nontraditional intranet sites that could benefit from a reporting engine too.&amp;nbsp;&amp;nbsp; Yeah, I know your gonna say that the focus right now is on Office, Sharepoint, and intranet integration for workflow apps like those from &lt;a href="http://www.k2.net/" target="_blank" rel="tag"&gt;K2&lt;/a&gt;&amp;nbsp;but why limit it to these areas?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The engine just needs some tweaking to address the neccessary performance and scaleability neccessary to support using it on internet websites.&amp;nbsp; If you accomplish that, then you have taken your customer base from just a few thousand enterprise clients, to hundreds of thousands of clients.&amp;nbsp; Right now, the product's success is limited by; A) the number of Sql Server licensees, and B) the number of enterprise-level intranet sites that need reporting.&amp;nbsp;&amp;nbsp; My argument is that there are plenty of other customers who could benefit that you are ignoring by being so single-mindedly focused on your limited view of the "Enterprise space".&lt;/p&gt; &lt;p&gt;So, my second request is:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;"Change your strategy from building only a enterprise intranet service to building a core engine for ANY reporting need in any sphere."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Okay, I can probably go on and on and on, but you get the point....&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1759172" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Rants &amp;amp; Raves" scheme="http://weblogs.asp.net/lhunt/archive/tags/Rants+_2600_amp_3B00_+Raves/default.aspx" /><category term="Sql Reporting Services" scheme="http://weblogs.asp.net/lhunt/archive/tags/Sql+Reporting+Services/default.aspx" /></entry><entry><title>Virtual Disk Conversions</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/lhunt/archive/2007/02/22/virtual-disk-conversions.aspx" /><id>http://weblogs.asp.net/lhunt/archive/2007/02/22/virtual-disk-conversions.aspx</id><published>2007-02-22T17:01:51Z</published><updated>2007-02-22T17:01:51Z</updated><content type="html">&lt;p&gt;I recently wanted to retry the idea of using virtual development environments instead of developing locally on my PC so that I can have several pre-built development and test environments that are tailored to each deployment target.&amp;nbsp;&amp;nbsp; Having dabbled at this a couple times before, I already had&amp;nbsp;some images available to use.&lt;/p&gt; &lt;p&gt;In the past, I was mostly using &lt;a href="http://www.vmware.com/" target="_blank" rel="tag"&gt;VMWare&lt;/a&gt; Workstation and the, now free, VMWare GSK Server.&amp;nbsp; However, now that the equally free &lt;a href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx" target="_blank" rel="tag"&gt;Virtual PC 2007&lt;/a&gt; has RTM'd, I wanted to give it a try again.&amp;nbsp; The only problem is that I dread the time required to install the OS, Sql Server 2005, VisualStudio.NET 2005, and various other dev tools again.&amp;nbsp; So, I started looking for a way to convert my old VMWare images to Virtual PC images.&lt;/p&gt; &lt;p&gt;It seems that I'm not the only one to run into this problem.&amp;nbsp; Solutions are now available via the &lt;a href="http://vmtoolkit.com/blogs/announcements/archive/2006/11/20/vmdk-to-vhd-converter-available.aspx" target="_blank" rel="tag"&gt;VMDK to VHD Converter&lt;/a&gt; at &lt;a href="http://vmtoolkit.com" target="_blank" rel="tag"&gt;vmToolkit.com&lt;/a&gt;, and an article by &lt;a href="http://RoudyBob.NET" target="_blank" rel="tag"&gt;RoudyBob.NET&lt;/a&gt; on how to "&lt;a href="http://www.roudybob.net/?p=75" target="_blank" rel="tag"&gt;Convert VMWare Images to VirtualPC 2004&lt;/a&gt;" that shows several methods of conversion mostly involving installing one virtualization technology within another virtual instance, or using a PC imaging software like Ghost from within the virtual instance.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;Also, for going the opposite direction, VMWare Workstation 5(+)&amp;nbsp;offers a VPW Image converter, or you can download the free&amp;nbsp;&lt;a href="http://www.vmware.com/download/converter" target="_blank" rel="tag"&gt;VMWare Converter&lt;/a&gt; to convert any "real" PC to a VMWare image.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1758917" width="1" height="1"&gt;</content><author><name>CodeSniper</name><uri>http://weblogs.asp.net/members/CodeSniper.aspx</uri></author><category term="Technology" scheme="http://weblogs.asp.net/lhunt/archive/tags/Technology/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/lhunt/archive/tags/General+Software+Development/default.aspx" /></entry></feed>