<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/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>Loren Halvorson's Blog</title><link>http://weblogs.asp.net/lorenh/default.aspx</link><description>If your only tool is a hammer...</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>MSBuild trick for making &lt;Exec&gt; calls more maintainable</title><link>http://weblogs.asp.net/lorenh/archive/2008/12/11/msbuild-trick-for-making-lt-exec-gt-calls-more-maintainable.aspx</link><pubDate>Thu, 11 Dec 2008 19:52:37 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6778575</guid><dc:creator>lorenh</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6778575</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/12/11/msbuild-trick-for-making-lt-exec-gt-calls-more-maintainable.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;One of my pet peeves with MSBuild&amp;#8217;s &amp;lt;Exec&amp;gt; task is how long the lines get when you have lots of arguments.&lt;/p&gt;  &lt;p&gt;I ran across a trick yesterday in a &lt;a href="http://morten.lyhr.dk/2008/06/how-to-make-self-extracting-exe-for.html#c1745026790875913074"&gt;blog comment&lt;/a&gt; made by someone named Romain and thought it was a very nice solution to this problem. When you expand items using this form @(items, &amp;#8216;DELIMITER&amp;#8217;), it allows you to specify a delimiter to use between the items. In the case of a command line, you use a space. Thanks Romain.&lt;/p&gt;  &lt;p&gt;&amp;lt;ItemGroup&amp;gt;   &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/nologo&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/v&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/x:&amp;amp;quot;$(InstallDir)\Environments\$(ApplicationName).EnvironmentSettings.xml&amp;amp;quot;&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/i:&amp;amp;quot;$(InstallDir)\UI.Shell.exe.config%3B$(InstallDir)\ClientLogging.config&amp;amp;quot;&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;XmlPreprocessArgs Include=&amp;quot;/e:&amp;amp;quot;$(Environment)&amp;amp;quot;&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;lt;/ItemGroup&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;lt;Exec Command=&amp;quot;&amp;amp;quot;$(InstallDir)\Environments\XmlPreprocess.exe&amp;amp;quot; @(XmlPreprocessArgs,' ')&amp;quot;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WorkingDirectory=&amp;quot;$(InstallDir)\Environments&amp;quot; /&amp;gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6778575" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/MSBuild/default.aspx">MSBuild</category></item><item><title>Comparing XML Files with Beyond Compare 3...Brilliant</title><link>http://weblogs.asp.net/lorenh/archive/2008/11/19/comparing-xml-files-with-beyond-compare-3-brilliant.aspx</link><pubDate>Wed, 19 Nov 2008 20:37:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6746783</guid><dc:creator>lorenh</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6746783</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/11/19/comparing-xml-files-with-beyond-compare-3-brilliant.aspx#comments</comments><description>&lt;P&gt;I bought a new laptop and was loading it with the tools I use every day. When it came to installing one of my favorites, Beyond Compare 2, I thought I'd check &lt;A href="http://www.scootersoftware.com/" mce_href="http://www.scootersoftware.com/"&gt;the Scooter web site&lt;/A&gt; to see if I had the latest version. I was happy to see they now had a version 3 with &lt;A href="http://www.scootersoftware.com/moreinfo.php?zz=newfeatures" mce_href="http://www.scootersoftware.com/moreinfo.php?zz=newfeatures"&gt;plenty of new features&lt;/A&gt;. I immediately reached for my credit card to buy a license. Folks, this is honestly one of the tools I don't even hesitate paying for...it's that good, and that invaluable. I don't work for them, I'm just a very happy customer.&lt;/P&gt;
&lt;P&gt;The base tool itself is great, but I was &lt;STRONG&gt;&lt;EM&gt;really&lt;/EM&gt;&lt;/STRONG&gt; thrilled when I followed the link on the Download page to &lt;A href="http://www.scootersoftware.com/download.php?zz=kb_moreformats" mce_href="http://www.scootersoftware.com/download.php?zz=kb_moreformats"&gt;Additional file format downloads for version 3&lt;/A&gt;.&amp;nbsp; There I found something I've been looking for years...and in fact a while ago had written a plug-in for BC2 to do...the ability to compare Tidied XML.&lt;/P&gt;
&lt;P&gt;How many times have you tried to compare two dense XML files to find out their differences only to be faced with a block of differences that looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.thedivers.com/loren/beyondcompare-ugly.gif" mce_src="http://www.thedivers.com/loren/beyondcompare-ugly.gif"&gt; &lt;/P&gt;
&lt;P&gt;Beyond Compare notices that there are differences in there somewhere, but can't really show you where with any precision. Further inspection is going to be needed, and forget merging selected changes over from one side to the other.&lt;/P&gt;
&lt;P&gt;If you install the &lt;STRONG&gt;XML Tidied&lt;/STRONG&gt; and &lt;STRONG&gt;XML tidied with attributes sorted&lt;/STRONG&gt; file formats, you can now tell Beyond Compare to tidy up your documents, putting each attribute on its own line, so the differences stand out. You can now see exactly which attributes differ. Absolutely brilliant.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.thedivers.com/loren/beyondcompare-pretty.gif" mce_src="http://www.thedivers.com/loren/beyondcompare-pretty.gif"&gt; &lt;/P&gt;
&lt;P&gt;This is a fantastic feature that's already saved me a bunch of time. I see there is a similar add-in for &lt;STRONG&gt;HTML tidied&lt;/STRONG&gt; files that also will come in handy.&lt;/P&gt;
&lt;P&gt;A couple of other features in Beyond Compare that I've come to rely on over the years:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Beyond Compare has great "low-friction" integration with Windows Explorer. For example to compare two files, you just right click on one file and choose "Select Left Side For Compare", then right click on the other file and say "Compare to {file...}".&amp;nbsp; This works for folders too.&lt;/LI&gt;
&lt;LI&gt;Beyond Compare has great FTP integration. I use it to deploy changed files to FTP sites very painlessly.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I also see it supports doing &lt;A href="http://www.scootersoftware.com/moreinfo.php?zz=moreinfo_merge" mce_href="http://www.scootersoftware.com/moreinfo.php?zz=moreinfo_merge"&gt;3-way merging&lt;/A&gt; from most version control systems. I haven't tried this yet, but I'm going to see how hard it is to plug into TFS.&amp;nbsp; If anyone has pointers on how to set this up, let me know.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;Update: &lt;/EM&gt;&lt;A class="" href="http://www.scootersoftware.com/support.php?c=kb_vcs.php" mce_href="http://www.scootersoftware.com/support.php?c=kb_vcs.php"&gt;&lt;EM&gt;Scooter's website shows how to set it up here&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;They have a 30 day trial, so if you aren't so sure, you can give it a try for a while. Highly recommended.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6746783" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/Productivity/default.aspx">Productivity</category></item><item><title>New Release of XmlPreprocess</title><link>http://weblogs.asp.net/lorenh/archive/2008/11/05/new-release-of-xmlpreprocess.aspx</link><pubDate>Wed, 05 Nov 2008 18:55:09 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6721947</guid><dc:creator>lorenh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6721947</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/11/05/new-release-of-xmlpreprocess.aspx#comments</comments><description>&lt;p&gt;I finally got around to updating the XmlPreprocess tool with some changes I'm really excited about. For those of you not familiar with XmlPreprocess, it's a command line tool I wrote many years ago that can modify specially annotated XML files much like a code preprocessor. It is useful for deploying XML configuration files to many environments. I've blogged about it in the &lt;a href="http://weblogs.asp.net/lorenh/archive/2004/12/14/307144.aspx"&gt;past&lt;/a&gt; as have &lt;a href="http://www.hanselman.com/blog/XmlPreprocessIsAnElegantHackOrTheHackIsInTheEyeOfTheBeholder.aspx"&gt;others&lt;/a&gt;, and it's achieved a fair amount of use (albeit hidden below the surface) in my good friend Scott Colestock's &lt;a href="http://www.codeplex.com/biztalkdeployment"&gt;Biztalk deployment framework&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The first thing I did was &lt;a href="http://www.codeplex.com/xmlpreprocess"&gt;move it to a CodePlex project&lt;/a&gt; which replaces the prior &lt;a href="http://xmlpreprocess.sourceforge.net/"&gt;SourceForge&lt;/a&gt; project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=xmlpreprocess&amp;amp;DownloadId=48433" target="_blank"&gt;&lt;img src="http://www.thedivers.com/loren/XmlPreprocessConceptualSmaller.gif" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Changes in this release&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;New &lt;a href="http://www.codeplex.com/xmlpreprocess"&gt;Codeplex&lt;/a&gt; home with updated documentation and samples. &lt;/li&gt;    &lt;li&gt;Requires .NET 2.0 or newer runtime. &lt;/li&gt;    &lt;li&gt;Adds the ability to import spreadsheets directly thanks to Tom Abraham's excellent work on the &lt;a href="http://www.codeplex.com/EnvSettingsManager"&gt;Environment Settings Manager&lt;/a&gt; project. This is a really nice feature, and I thank Tom for giving me permission to use his spreadsheet reading code. &lt;/li&gt;    &lt;li&gt;Adds a command line switch (/f or /fixfalse) to fix the behavior of &amp;quot;False&amp;quot; values. This has been a long-standing request and tripped up many people for example &lt;a href="http://bencops.blogspot.com/2007/03/xmlpreprocess-false-values-are.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.thehiddenlines.com/projects/xmlpreprocess-reloaded/"&gt;here&lt;/a&gt;.&amp;#160; For the anguish and consternation this has caused to you all, I sincerely apologize, and hope you forgive me. If you want to explicitly undefine a property, use the value &amp;quot;#undef&amp;quot; instead.&amp;#160; (Note: that for backward compatibility, this behavior is off by default, and you will need to add the /f or /fixfalse switch to enable it). &lt;/li&gt;    &lt;li&gt;Adds a new command line switch (/v) to validate tokens, so if any replacement tokens are missing, it will report an error message identifying the missing tokens, return a nonzero error code and not write out the file. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I left the current release as Beta 1 in case anyone finds any issues right away, but we've been using the new version on a project without any issues yet.&amp;#160; It &lt;em&gt;should&lt;/em&gt; be a drop-in backward compatible replacement for the old version (except for the new dependency on .NET 2.0 instead of 1.1).&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6721947" width="1" height="1"&gt;</description></item><item><title>Introducing Birch Cove Software</title><link>http://weblogs.asp.net/lorenh/archive/2008/09/23/introducing-birch-cove-software.aspx</link><pubDate>Tue, 23 Sep 2008 20:19:59 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6639457</guid><dc:creator>lorenh</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6639457</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/09/23/introducing-birch-cove-software.aspx#comments</comments><description>&lt;p&gt;A few days into a 3 week vacation with my family I received a call that I wasn't surprised to receive. The company where I had worked for 6 years was downsizing and my position, along with many others in our department, was eliminated. Since downsizing (or worse) was happening across the entire sector, I didn't take it personally. In fact, I took it as a sign that I should try something different. A friend recently said that &amp;quot;getting laid off is one of the best thing that ever happened to him&amp;quot;, and I hope to look back and say the same some day.&lt;/p&gt;  &lt;p&gt;So I am officially hanging out my shingle and becoming an independent contractor. I've worked as a full time employee for the entirety of my 18 years in the industry, so working for myself is going to be something completely new. So here begins a new chapter in my life: &lt;a href="http://www.birchcovesoftware.com"&gt;Birch Cove Software, LLC&lt;/a&gt;. Wish me luck, and let me know if you have any tips or resources for getting a consulting business off the ground.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6639457" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Red Gate will take over development of Lutz Roeder's .NET Reflector</title><link>http://weblogs.asp.net/lorenh/archive/2008/08/20/red-gate-will-take-over-development-of-lutz-roeder-s-net-reflector.aspx</link><pubDate>Wed, 20 Aug 2008 13:46:49 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6542517</guid><dc:creator>lorenh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6542517</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/08/20/red-gate-will-take-over-development-of-lutz-roeder-s-net-reflector.aspx#comments</comments><description>&lt;p&gt;I just received a newsletter from Red Gate, and nestled in the headlines was this interesting tidbit. If you haven't heard of .NET Reflector, it's one of my favorites, and I encourage you to check this invaluable tool out. It's what you reach for when you have to know what's going on inside that assembly but don't have the source.&lt;/p&gt;  &lt;p&gt;Here's the announcement on Red Gate's site: &lt;a title="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/" href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/"&gt;http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;James Moore who is the general manager of .NET Developer Tools at Red Gate states:&lt;/p&gt;  &lt;p&gt;&amp;#8220;I think we can provide a level of resources that will move the tool forward in a big way.&amp;#160; The first thing we are doing is continuing to offer the software to the community for free downloading.&amp;#160; The second thing is giving our product management and usability teams the task of going out into the community to get suggestions on how we can make this amazing tool even better.&amp;quot;&lt;/p&gt;  &lt;p&gt;I'm hopeful that Red Gate won't mess anything up. I've been using their ANTS profiler for years, and more recently discovered their wonderful SQL tools, and they are all excellent. For now they've promised to continue to give it away for free, but you know there will need to be some way to make money coming.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6542517" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/Productivity/default.aspx">Productivity</category></item><item><title>Subversion 1.5.1 Windows install is available</title><link>http://weblogs.asp.net/lorenh/archive/2008/08/19/subversion-1-5-1-windows-install-is-available.aspx</link><pubDate>Tue, 19 Aug 2008 15:27:57 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6538779</guid><dc:creator>lorenh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6538779</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/08/19/subversion-1-5-1-windows-install-is-available.aspx#comments</comments><description>&lt;p&gt;I've been working on a presentation for our next &lt;a href="http://www.mankatodotnet.com/"&gt;User Group&lt;/a&gt; meeting on Continuous Integration, and wanted to set up a local Subversion server.&amp;#160; Of course I wanted to use the latest and greatest versions of everything. So I've been checking back daily for the appearance of the installer for Subversion 1.5.1 for Windows.&amp;#160; &lt;strong&gt;Setup-Subversion-1.5.1.en-us.msi&lt;/strong&gt; showed up on August 15, 2008.&lt;/p&gt;  &lt;p&gt;You can find it on the &lt;a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&amp;amp;expandFolder=91&amp;amp;folderID=260"&gt;Subversion download site&lt;/a&gt;&amp;#160; When you couple this with the latest &lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt; you are cookin' with gas!&lt;/p&gt;  &lt;p&gt;I found this CoDe Magazine article by Rick Strahl very helpful for setting things up initially. &lt;a href="http://www.code-magazine.com/Article.aspx?quickid=0807081"&gt;Setting Up and Running Subversion and Tortoise SVN with Visual Studio and .NET&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6538779" width="1" height="1"&gt;</description></item><item><title>Automatic Properties Work in .NET 2.0</title><link>http://weblogs.asp.net/lorenh/archive/2008/08/19/automatic-properties-work-in-net-2-0.aspx</link><pubDate>Tue, 19 Aug 2008 15:17:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6538733</guid><dc:creator>lorenh</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6538733</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/08/19/automatic-properties-work-in-net-2-0.aspx#comments</comments><description>&lt;P&gt;This was sort of an accidental discovery, I'm not the first to stumble on it, but it doesn't seem to be widely known. A colleague of mine asked me about an interesting behavior he noticed after switching to Visual Studio 2008.&amp;nbsp; He was still targeting the .NET 2.0 framework, but noticed the automatic property feature worked.&lt;/P&gt;
&lt;P&gt;Automatic properties are where you can just say&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public string SomeProperty { get; set; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The compiler provides the backing field and implements the get and set for you. It's a very nice shorthand syntax for a common pattern. We were all under the impression that it was a new C# 3.0 language feature and could only be used if you targeted version 3.5 of the .NET Framework. After searching around for why it was still working on a .NET 2.0 app, I found many who verified what we were seeing. Indeed it does work, because it's a compiler feature, and 2008 uses the latest compiler even if you are targeting 2.0. Cool.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6538733" width="1" height="1"&gt;</description></item><item><title>IE 7 and Firefox browsing tip...open links in new tab by clicking your mouse scroll wheel</title><link>http://weblogs.asp.net/lorenh/archive/2008/05/23/ie-7-and-firefox-browsing-tip-open-links-in-new-tab-by-clicking-your-mouse-scroll-wheel.aspx</link><pubDate>Fri, 23 May 2008 16:58:10 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6214382</guid><dc:creator>lorenh</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6214382</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/05/23/ie-7-and-firefox-browsing-tip-open-links-in-new-tab-by-clicking-your-mouse-scroll-wheel.aspx#comments</comments><description>&lt;p&gt;This is widely known, but I still run across people who use IE 7, and/or Firefox but don't use this little trick. On most mice, the scroll wheel is a button as well as a wheel. Click on links using the scroll wheel, and the browser will open that page in a new tab in the background without taking focus away from the current page.&lt;/p&gt;  &lt;p&gt;I find this extremely handy when browsing results from a search engine. As you visually scan through the search results, click the links that look promising using the scroll wheel. The browser will set to work to load those pages in the background as you continue to scan.&amp;#160; After you've got a good batch of pages loaded in your tabs, you can skip through the tabs quickly.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6214382" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/Productivity/default.aspx">Productivity</category></item><item><title>We're starting a .NET user group in south-central Minnesota</title><link>http://weblogs.asp.net/lorenh/archive/2008/05/22/we-re-starting-a-net-user-group-in-south-central-minnesota.aspx</link><pubDate>Thu, 22 May 2008 14:23:25 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6210323</guid><dc:creator>lorenh</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6210323</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/05/22/we-re-starting-a-net-user-group-in-south-central-minnesota.aspx#comments</comments><description>&lt;p&gt;We are starting a .NET user group in Mankato, which is in south-central Minnesota. Hopefully we can attract developers in the area that (like me) sometimes find it hard to make the 1-1/2 hour drive to the nearest .NET user group in Minneapolis. They're doing a great job up there in the Twin Cities, and I'll still try to make it to some of their meetings, but I just have a feeling there is a community of developers here that don't get much of a chance to hang out with geeks and talk shop.&lt;/p&gt;  &lt;p&gt;So we have set up a &lt;a href="http://www.mankatodotnet.com"&gt;web site&lt;/a&gt;, and set the date and time for our kickoff meeting.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mankato .NET User Group Kickoff Meeting&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When: Tuesday, June 10, 7:00 - 9:00&lt;/p&gt;  &lt;p&gt;Where: Bethany College, &lt;a href="http://maps.live.com/?v=2&amp;amp;where1=700%20Luther%20Dr%2C%20Mankato%2C%20MN%2056001-6192&amp;amp;encType=1"&gt;700 Luther Dr, Mankato, Minnesota&lt;/a&gt; We'll be meeting in Meyer Hall room 130. If you park in the Meyer Hall lot, room 130 is the first door on the right when entering from the lower level entrance. Map can be found here, &lt;a href="http://www.blc.edu/facilities/map/"&gt;http://www.blc.edu/facilities/map/&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Agenda: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Introductions&lt;/li&gt;    &lt;li&gt;Discuss regular meeting times &amp;amp; format&lt;/li&gt;    &lt;li&gt;Discuss how to spread the word&lt;/li&gt;    &lt;li&gt;Brainstorm topics and presenters&lt;/li&gt;    &lt;li&gt;Presentation on new features in Visual Studio 2008 that make it a compelling upgrade&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Web site: &lt;a href="http://www.mankatodotnet.com"&gt;http://www.mankatodotnet.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you are a developer in south-central Minnesota, consider joining us. If you know a developer in our area, we'd much appreciate if you pass this on to them.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6210323" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/Community/default.aspx">Community</category></item><item><title>Evoluent Vertical Mouse now available in wireless model</title><link>http://weblogs.asp.net/lorenh/archive/2008/05/15/evoluent-vertical-mouse-now-available-in-wireless-model.aspx</link><pubDate>Thu, 15 May 2008 15:02:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6192717</guid><dc:creator>lorenh</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6192717</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/05/15/evoluent-vertical-mouse-now-available-in-wireless-model.aspx#comments</comments><description>&lt;P&gt;I've praised this mouse &lt;A href="http://weblogs.asp.net/lorenh/archive/2008/01/07/evoluent-verticalmouse-is-a-great-product.aspx" mce_href="http://weblogs.asp.net/lorenh/archive/2008/01/07/evoluent-verticalmouse-is-a-great-product.aspx"&gt;before&lt;/A&gt;, but just discovered that the &lt;A href="http://www.evoluent.com/vm3w.html" mce_href="http://www.evoluent.com/vm3w.html"&gt;wireless model of the Evoluent Vertical Mouse is now available&lt;/A&gt;. I have the wired version, and it is without a doubt the most comfortable mouse I've ever used. I throw it in my bag and drag it back and forth between the office and home. (I wonder how long before the cord gets a short?).&lt;/P&gt;
&lt;P&gt;The only modification I made was to physically disable the large bottom button closest to the desk by inserting a small rolled up piece of paper behind it because I kept hitting it inadvertently while just moving the mouse.&lt;/P&gt;
&lt;P&gt;The wireless one would be nice if anyone wants to buy it for me, my birthday is coming up.&amp;nbsp; Anybody have one yet?&amp;nbsp; How does it work?&amp;nbsp; How is the battery life?&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6192717" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Visual Studio Industry Partners (VSIP) program not needed to build a Domain Specific Languages (DSL)</title><link>http://weblogs.asp.net/lorenh/archive/2008/05/15/visual-studio-industry-partners-vsip-program-not-needed-to-build-a-domain-specific-languages-dsl.aspx</link><pubDate>Thu, 15 May 2008 14:44:22 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6192652</guid><dc:creator>lorenh</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6192652</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/05/15/visual-studio-industry-partners-vsip-program-not-needed-to-build-a-domain-specific-languages-dsl.aspx#comments</comments><description>&lt;p&gt;After listening to a DotNetRocks podcast that interviewed &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=329"&gt;Kevin McNeish on DSLs and Software Factories&lt;/a&gt;, I was curious to check out the DSL toolkit for internal use by our developers. After installing the &lt;a href="http://msdn2.microsoft.com/en-au/vsx/default.aspx"&gt;Visual Studio 2008 SDK&lt;/a&gt;, I started seeing a &amp;#8220;VSIP License Required&amp;#8221; in the Visual Studio &lt;strong&gt;2005&lt;/strong&gt; splash screen, and &amp;#8220;A VSIP license is required to use this version of Microsoft Visual Studio&amp;#8221; in the about box of Visual Studio &lt;strong&gt;2005&lt;/strong&gt;.&amp;#160; However, within Visual Studio 2008&amp;#8217;s about box I see &amp;#8220;Visual Studio SDK License&amp;#8221;.&amp;#160; I was confused and wondered exactly when a VSIP license is required. I contacted someone at Microsoft and received clarification on this.&lt;/p&gt;  &lt;p&gt;The Microsoft person verified that it is &lt;strong&gt;not&lt;/strong&gt; necessary to join the VSIP program in order to build and use your own DSL implementation, internally or externally.&amp;#160; Apparently when Visual Studio 2005 was first released, extending Visual Studio was only allowed by licensed partners, but this restriction was later lifted, and licenses aren't necessary anymore. Unfortunately the messages in the splash screen and about box were not updated. Good to know.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6192652" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/DSL/default.aspx">DSL</category></item><item><title>MSBuild 3.5 just made my day</title><link>http://weblogs.asp.net/lorenh/archive/2008/03/27/msbuild-3-5-just-made-my-day.aspx</link><pubDate>Thu, 27 Mar 2008 18:57:13 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6038080</guid><dc:creator>lorenh</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=6038080</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/03/27/msbuild-3-5-just-made-my-day.aspx#comments</comments><description>&lt;p&gt;While doing some troubleshooting on a project I needed to manually copy some debug assemblies around after every build. But there were a lot of them, and whenever I need to do something repeatedly I try automate it with a script of some sort...because I'm lazy of course. There are a lot of choices today for a little quick and dirty script like this, Batch files, VBScript, Powershell, NAnt, but I thought I'd give MSBuild a try because I figured it would be the least amount of hassle, since moving files around is one of it's main duties during a build. The script was simple to write, but I hit a snag...the destination files were read only, and the copy errored out. MSBuild 2.0's copy task doesn't have an option to overwrite read only files. But MSBuild 3.5 does, so I learned a couple of tricks.&lt;/p&gt;  &lt;p&gt;1. Run MSBuild.exe from C:\Windows\Microsoft.NET\Framework\v3.5 (instead of C:\Windows\Microsoft.NET\Framework\v2.0.50727). I have an external tool macro set up in my text editor (Textpad) to run the script currently being edited with a shortcut key, so this was simple to re-point.&lt;/p&gt;  &lt;p&gt;2. Tell MSBuild you are using 3.5 features by adding ToolsVersion=&amp;quot;3.5&amp;quot; to the Project element.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Project&lt;/span&gt; &lt;span class="attr"&gt;DefaultTargets&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Copy&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/developer/msbuild/2003&amp;quot;&lt;/span&gt;
        &lt;strong&gt;&lt;span class="attr"&gt;ToolsVersion&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;/strong&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Assembly&lt;/span&gt; &lt;span class="attr"&gt;Include&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Project1\bin\Debug\Project1.*&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Assembly&lt;/span&gt; &lt;span class="attr"&gt;Include&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Project2\bin\Debug\Project2.*&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;&amp;lt;!-- etc... --&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Copy&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Copy&lt;/span&gt; &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(Assembly)&amp;quot;&lt;/span&gt;
            &lt;span class="attr"&gt;DestinationFolder&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Destination\bin&amp;quot;&lt;/span&gt;
            &lt;strong&gt;&lt;span class="attr"&gt;OverwriteReadOnlyFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;/strong&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Project&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&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;pre&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;/pre&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6038080" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/MSBuild/default.aspx">MSBuild</category></item><item><title>Two things I learned tonight moving an ASP.NET site from IIS6 to IIS7</title><link>http://weblogs.asp.net/lorenh/archive/2008/03/11/two-things-i-learned-tonight-moving-an-asp-net-site-from-iis6-to-iis7.aspx</link><pubDate>Wed, 12 Mar 2008 04:07:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5954512</guid><dc:creator>lorenh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=5954512</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/03/11/two-things-i-learned-tonight-moving-an-asp-net-site-from-iis6-to-iis7.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Tonight I moved moved an ASP.NET site from IIS6 to IIS7.&amp;nbsp;Things seemed broken pretty badly at first, and I wondered if I was making a mistake to leave the comfort of IIS6. However, it turned out to be minor changes to the web.config. I'm sure they're already well known and well documented, but I figured I would scribble them down in case I ever need to do it again.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;1. Remove the built-in Membership, Role and Profile providers&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;If you are configuring your own Membership, Role or Profile providers with your own database connection string, make sure you remove the built-in ones.or you may get an exception about not being able to connect to "LocalSqlServer".&amp;nbsp; Which is the connection string used in machine.config for the stock providers. This did not happen under IIS6. So it turns out the bolded lines become very important under IIS7.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;membership defaultProvider="MembershipSqlProvider"...&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;providers&amp;gt;&lt;BR&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;remove name="AspNetSqlMembershipProvider"/&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="MembershipSqlProvider"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&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; connectionStringName="MyDatabaseConnection"/&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/providers&amp;gt;&lt;BR&gt;&amp;lt;/membership&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;roleManager defaultProvider="RoleManagerSqlProvider"...&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;providers&amp;gt;&lt;BR&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;remove name="AspNetSqlRoleProvider"/&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="RoleManagerSqlProvider"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&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; connectionStringName="MyDatabaseConnection"/&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/providers&amp;gt;&lt;BR&gt;&amp;lt;/roleManager&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;profile defaultProvider="SqlProfileProvider"&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;providers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&amp;lt;remove name="AspNetSqlProfileProvider"/&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="SqlProfileProvider"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&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; connectionStringName="MyDatabaseConnection"/&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/providers&amp;gt;&lt;BR&gt;&amp;lt;/profile&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;2. Move your Modules and Handlers to the &amp;lt;system.webServer&amp;gt; section&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;This one took me a while to figure out, but it shouldn't have.&amp;nbsp;I had a custom module that was &lt;A class="" href="http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx" mce_href="http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx"&gt;redirecting to secure&amp;nbsp;pages&lt;/A&gt; when necessary,&amp;nbsp;and it was not firing under IIS7. So I instrumented it up with log statements, and still nothing. Hmm. A quick search turned up &lt;A class="" href="http://www.west-wind.com/WebLog/posts/6075.aspx" mce_href="http://www.west-wind.com/WebLog/posts/6075.aspx"&gt;Rick Strahl's post on this&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;configuration&amp;gt;&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;httpModules&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRIKE&gt;MODULES DON'T GO HERE ANYMORE&lt;/STRIKE&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/httpModules&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;httpHandlers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRIKE&gt;HANDLERS DON'T GO HERE ANYMORE&lt;/STRIKE&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/httpHandlers&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp; &amp;lt;system.webServer&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;modules&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;FOR IIS7, MODULES GO HERE NOW&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/modules&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;handlers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;FOR IIS7 HANDLERS GO HERE NOW&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/handlers&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/system.webServer&amp;gt;&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;lt;configuration&amp;gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5954512" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/ASP.NET+IIS7/default.aspx">ASP.NET IIS7</category></item><item><title>Just for fun, controlling a Lego Mindstorms NXT robot with Windows Workflow Foundation</title><link>http://weblogs.asp.net/lorenh/archive/2008/03/06/just-for-fun-controlling-a-lego-mindstorms-nxt-robot-with-windows-workflow-foundation.aspx</link><pubDate>Thu, 06 Mar 2008 21:09:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5928887</guid><dc:creator>lorenh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=5928887</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/03/06/just-for-fun-controlling-a-lego-mindstorms-nxt-robot-with-windows-workflow-foundation.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Recently I was asked to give a presentation on Windows Workflow Foundation to some developers. Unfortunately I had never worked with it.&amp;nbsp;So last week while I was reading an article about workflow, it occurred to me that the designer seemed very similar to the NXT-G programming environment my kids use to program their Lego (R) Mindstorms (R) NXT robot. There's no better way to learn something than to actually try to do something real with it, so&amp;nbsp;I decided to try to write my own custom activities to control a robot through Bluetooth connection.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Now this is a silly little app that doesn't do anything useful, but I thought it was too interesting to let the code just languish on my hard-drive only to be cleaned up someday when I'm low on space. It served it's purpose for me to learn Workflow Foundation better. I just posted the code to the MSDN Code Gallery here:&amp;nbsp;&lt;A href="http://code.msdn.microsoft.com/NXTWorkflow"&gt;http://code.msdn.microsoft.com/NXTWorkflow&lt;/A&gt;. There's plenty of room for improvement, but it was sure fun to write. &lt;/P&gt;
&lt;P mce_keep="true"&gt;It includes a console driver program, as well as a Winforms based application that hosts the Workflow designer. The designer hosted version is based on the excellent MSDN hosting example by Vihang Dalal found at &lt;A class=externalLink href="http://msdn2.microsoft.com/en-us/library/aa480213.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa480213.aspx&lt;SPAN class=externalLinkIcon&gt;&lt;/SPAN&gt;&lt;/A&gt;. The bluetooth communication uses a wrapper called NXT# written by Bram Fokke at &lt;A class=externalLink href="http://nxtsharp.fokke.net/"&gt;http://nxtsharp.fokke.net&lt;SPAN class=externalLinkIcon&gt;&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=NXTWorkflow&amp;amp;DownloadId=1111" mce_src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=NXTWorkflow&amp;amp;DownloadId=1111"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;The robot I used to develop the application:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=NXTWorkflow&amp;amp;DownloadId=1109" mce_src="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=NXTWorkflow&amp;amp;DownloadId=1109"&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5928887" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/Robotics/default.aspx">Robotics</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/WWF/default.aspx">WWF</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Speed up load time of AJAX Control Toolkit controls while debugging</title><link>http://weblogs.asp.net/lorenh/archive/2008/02/15/speed-up-load-time-of-ajax-control-toolkit-controls-while-debugging.aspx</link><pubDate>Fri, 15 Feb 2008 20:05:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5795749</guid><dc:creator>lorenh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/lorenh/rsscomments.aspx?PostID=5795749</wfw:commentRss><comments>http://weblogs.asp.net/lorenh/archive/2008/02/15/speed-up-load-time-of-ajax-control-toolkit-controls-while-debugging.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;This is probably already well known and well documented, but I still occasionally see people &lt;A class="" href="http://www.codeplex.com/AtlasControlToolkit/WorkItem/View.aspx?WorkItemId=9730" mce_href="http://www.codeplex.com/AtlasControlToolkit/WorkItem/View.aspx?WorkItemId=9730"&gt;bemoaning the slow load time of some of the controls in the AJAX Control Toolkit&lt;/A&gt;. The slow loading problem is particularly noticable when you are debugging pages that have many calendar controls, at least that's where I first noticed it.&lt;/P&gt;
&lt;P mce_keep="true"&gt;In a post from Scott Guthrie, he explains why you should ..."&lt;A class="" href="http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx"&gt;never run production ASP.NET Applications with debug=true enabled&lt;/A&gt;". In this article, reason #4 states that "Scripts and images downloaded from the WebResources.axd handler are not cached". My&amp;nbsp;theory is that this is&amp;nbsp;the reason for the slow loading of the calendar control-laden pages when debugging your application. And sure enough when you set debug=false, the page loads faster thanks to the caching, but then you give up the ability to debug through your code. What should you do?&lt;/P&gt;
&lt;P mce_keep="true"&gt;Well, there's a middle-ground that worked nicely for me. You can set the ScriptManager on pages with lots of AJAX Control Toolkit controls to run in release mode like this:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp; &amp;lt;asp:ScriptManager ID="ScriptManager" runat="Server" &lt;STRONG&gt;ScriptMode="Release"&lt;/STRONG&gt;/&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Then you can leave Debug="true" in your web.config while you are developing without suffering the slow load time.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Another thing you should consider doing is utilize the &lt;A class="" href="http://blogs.msdn.com/delay/archive/2007/06/11/script-combining-made-easy-overview-of-the-ajax-control-toolkit-s-toolkitscriptmanager.aspx" mce_href="http://blogs.msdn.com/delay/archive/2007/06/11/script-combining-made-easy-overview-of-the-ajax-control-toolkit-s-toolkitscriptmanager.aspx"&gt;script combining&lt;/A&gt; feature introduced in build 10618 of the AJAX control toolkit, &lt;A class="" href="http://blogs.msdn.com/delay/archive/2007/06/20/script-combining-made-better-overview-of-improvements-to-the-ajax-control-toolkit-s-toolkitscriptmanager.aspx" mce_href="http://blogs.msdn.com/delay/archive/2007/06/20/script-combining-made-better-overview-of-improvements-to-the-ajax-control-toolkit-s-toolkitscriptmanager.aspx"&gt;which is documented here&lt;/A&gt;. This can reduce the number of requests your page needs to make for all of the individual scripts. It's been a while since I set this up, but I think this was all that was necessary:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;Add this file to your web site:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;- - CombineScriptsHandler.ashx - -&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;%@ WebHandler Language="C#" Class="CombineScriptsHandler" %&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;using System;&lt;BR&gt;using System.Web;&lt;BR&gt;using AjaxControlToolkit;&lt;/P&gt;
&lt;P mce_keep="true"&gt;public class CombineScriptsHandler : IHttpHandler&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// ProcessRequest implementation outputs the combined script file&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="context"&amp;gt;&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void ProcessRequest(HttpContext context)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!ToolkitScriptManager.OutputCombinedScriptFile(context))&lt;BR&gt;&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; throw new InvalidOperationException("Combined script file output failed unexpectedly.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// IsReusable implementation returns true since this class is stateless&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool IsReusable&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return true; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;
&lt;P mce_keep="true"&gt;- - - &lt;BR&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Then use the ToolkitScriptManager instead of the straight ScriptManager in your pages, specifying the CombineScriptsHandlerUrl to point to the handler you just added, similar to this (note: the ScriptMode="Release" trick works here too).&lt;/P&gt;
&lt;P mce_keep="true"&gt;- - MyPage.aspx - -&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;%@ Page ..%&amp;gt;&amp;nbsp;&lt;BR&gt;&amp;lt;%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;:&lt;BR&gt;&amp;lt;ajaxToolkit:ToolkitScriptManager ID="ScriptManager" runat="Server" EnablePartialRendering="true" &lt;STRONG&gt;ScriptMode="Release" CombineScriptsHandlerUrl="~/CombineScriptsHandler.ashx"&lt;/STRONG&gt;/&amp;gt;&lt;BR&gt;:&lt;/P&gt;
&lt;P mce_keep="true"&gt;- - -&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5795749" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lorenh/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/lorenh/archive/tags/AJAX/default.aspx">AJAX</category></item></channel></rss>