<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dougv.com « Doug Vanderweide &#187; Visual Studio</title>
	<atom:link href="http://www.dougv.com/tag/visual-studio/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dougv.com</link>
	<description>ASP.NET, PHP, XML, JavaScript, Web geekery, Entrepreneurship</description>
	<lastBuildDate>Thu, 17 May 2012 22:33:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Disable Windows Antivirus When Installing aspell English Dictionary</title>
		<link>https://www.dougv.com/2012/02/29/disable-windows-antivirus-when-installing-aspell-english-dictionary/</link>
		<comments>https://www.dougv.com/2012/02/29/disable-windows-antivirus-when-installing-aspell-english-dictionary/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 19:49:35 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[Help Desk]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[notepad++]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.dougv.com/?p=4244</guid>
		<description><![CDATA[When installing Kevin Atkison's English dictionary for aspell, disable your antivirus program, or the install will silently fail.<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2008/04/21/adobe-creative-suite-3-automatic-updates-and-windows-vista-issues/" rel="bookmark">Adobe Creative Suite 3 Automatic Updates And Windows Vista Issues</a> (15.2)</li>
				<li><a href="https://www.dougv.com/2008/12/29/how-to-take-a-screen-shot-windows-mac-os-x-and-linux/" rel="bookmark">How To Take A Screen Shot: Windows, Mac OS X And Linux</a> (14.1)</li>
				<li><a href="https://www.dougv.com/2008/01/01/a-windows-shell-script-to-automatically-rename-and-move-images-to-a-new-folder/" rel="bookmark">A Windows Shell Script To Automatically Rename And Move Images To A New Folder</a> (13.5)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>A lesson I learned the hard way today, while installing <a href="http://aspell.net/win32/" target="_blank">aspell</a> support for Notepad++:</p>
<p>If you&#8217;re installing <a href="http://wordlist.sourceforge.net/" target="_blank">Kevin Atkison&#8217;s English dictionary</a> for aspell, you need to disable your antivirus program (at least, if you&#8217;re using <a href="http://www.avast.com/en-us/index" target="_blank">Avast</a>, as I am). </p>
<p>If you don&#8217;t, the dictionary installer can&#8217;t write its unpacked files to disk and will fail silently. As in, it just plain closes, and Notepad++ will report something along the lines of &#8220;Aspell and/or dictionaries are missing.&#8221;</p>
<p>FYI.</p>
<p>Also, if you haven&#8217;t heard of <a href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a>, you should check it out. It&#8217;s an open-source, GPL-licensed Win32 text editor. (It runs perfectly fine in Win64).</p>
<p>Highly extensible via plugins, translated to all kinds of languages, exceptionally powerful, with support for syntax highlighting in just about every programming language under the Sun and syntax checking for a fair number of them, too. </p>
<p>It&#8217;s pretty much the only tool I use any more for Web coding, even when writing <a href="http://www.asp.net/web-forms" target="_blank">ASP.NET Web Forms</a>. (I still use <a href="http://msdn.microsoft.com/en-us/vstudio/aa718325" target="_blank">Visual Studio</a> for some Windows coding. But Notepad++ has completely replaced <a href="http://www.adobe.com/products/dreamweaver.html" target="_blank">Dreamweaver</a>.)</p>
<p>All links in this post on delicious: <a href="http://delicious.com/dougvdotcom/disable-windows-antivirus-when-installing-aspell-english-dictionary" target="_blank">http://delicious.com/dougvdotcom/disable-windows-antivirus-when-installing-aspell-english-dictionary</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2008/04/21/adobe-creative-suite-3-automatic-updates-and-windows-vista-issues/" rel="bookmark">Adobe Creative Suite 3 Automatic Updates And Windows Vista Issues</a> (15.2)</li>
				<li><a href="https://www.dougv.com/2008/12/29/how-to-take-a-screen-shot-windows-mac-os-x-and-linux/" rel="bookmark">How To Take A Screen Shot: Windows, Mac OS X And Linux</a> (14.1)</li>
				<li><a href="https://www.dougv.com/2008/01/01/a-windows-shell-script-to-automatically-rename-and-move-images-to-a-new-folder/" rel="bookmark">A Windows Shell Script To Automatically Rename And Move Images To A New Folder</a> (13.5)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/developer-tools/" title="developer tools" rel="tag">developer tools</a>, <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/notepad/" title="notepad++" rel="tag">notepad++</a>, <a href="https://www.dougv.com/tag/open-source/" title="open source" rel="tag">open source</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2012/02/29/disable-windows-antivirus-when-installing-aspell-english-dictionary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New England GiveCamp 2011: What A Weekend!</title>
		<link>https://www.dougv.com/2011/05/03/new-england-givecamp-2011-what-a-weekend/</link>
		<comments>https://www.dougv.com/2011/05/03/new-england-givecamp-2011-what-a-weekend/#comments</comments>
		<pubDate>Tue, 03 May 2011 22:40:04 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Transact-SQL]]></category>
		<category><![CDATA[crowdsourcing]]></category>
		<category><![CDATA[ethics]]></category>
		<category><![CDATA[GiveCamp]]></category>
		<category><![CDATA[GoDaddy]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[graphic design]]></category>
		<category><![CDATA[Jim O'Neil]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.dougv.com/?p=3849</guid>
		<description><![CDATA[New England GiveCamp 2011 was a great experience! Here's how the weekend went for my team.<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/06/10/at-new-england-givecamp-this-weekend/" rel="bookmark">At New England GiveCamp This Weekend</a> (30.9)</li>
				<li><a href="https://www.dougv.com/2010/06/16/new-england-givecamp-2010-what-a-great-experience/" rel="bookmark">New England GiveCamp 2010: What A Great Experience</a> (21.7)</li>
				<li><a href="https://www.dougv.com/2010/05/13/designers-and-developers-donate-your-time-talent-at-new-england-give-camp-june-11-13-2010/" rel="bookmark">Designers And Developers: Donate Your Time, Talent At New England GiveCamp, June 11-13, 2010</a> (21.1)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>Last weekend was <a href="http://newenglandgivecamp.org/" target="_blank">New England GiveCamp</a> <a href="http://newenglandgivecamp.org/category/give-camp-2011/" target="_blank">2011</a>, in which 100+ developers, designers and other volunteers gathered to donate time and skills to some 30 charities who needed IT help.</p>
<p>This year, I was project lead for <a href="http://www.alexsteamfoundation.com/" target="_blank"><strong>Alex&#8217;s Team Foundation</strong></a>, based in Andover, Mass. Our team was <a href="https://twitter.com/#!/saush11" target="_blank"><strong>Saurabh Moondhra</strong></a> and <a href="http://dirigosoftwaresolutions.com" target="_blank"><strong>William Wade</strong></a>, both experienced ASP.NET developers.</p>
<p>Alex&#8217;s Team Foundation, named after 16-year-old Alex Miliotis, who passed away from leukemia in 2002, raises money to support nurses and other oncology professionals, and supports youth sports. The foundation is largely the labors of <strong>Patti Rae Miliotis</strong>, Alex&#8217;s mother, and a handful of reliable volunteers. Like every small nonprofit, Alex&#8217;s Team doesn&#8217;t have a lot of money.</p>
<div id="attachment_3853" class="wp-caption alignnone" style="width: 710px"><img class="size-full wp-image-3853" title="Alex's Team Foundation at New England GiveCamp 2011" src="http://www.dougv.com/wp-content/uploads/2011/05/negc2011_08.png" alt="Alex's Team Foundation at New England GiveCamp 2011" width="700" height="245" /><p class="wp-caption-text">From the right to left: William Wade, Doug Vanderweide, Saurabh Moondhra and Patti Rae Miliotis of Alex&#39;s Team Foundation. The lady with her feet up is Deanna Lohnes, who worked on another project; the woman in green, whose name I do not know, was her charity&#39;s contact person.</p></div>
<p>Like every other leader of a small nonprofit, Patti is pulled in a lot of different directions and has all she can do to keep track of the people with whom she comes in contact, nonetheless all the donations she gets. Patti also hosts a few events every year. She basically needs a way to keep track of who attends those events or otherwise supports her organization, and to mail merge thank-you notes.</p>
<p>So that was the project I led this weekend: Converting a bunch of data stored in (of course!) Excel spreadsheets into a more relational database, with the ability to export that data in order to mail merge thank-you and fundraising letters.</p>
<p><span id="more-3849"></span></p>
<h3>CiviCRM: Too Much, Too Late</h3>
<p>At first, I thought we could use <a href="http://civicrm.org/" target="_blank">CiviCRM</a>, which is a Joomla / Drupal extension to manage membership, events, capital campaigns, email lists and the like.</p>
<p>The primary benefit in it, to my thinking, was that it does most of what Patti needed done; so, if she could use it, most of the work would already be done. That would allow us not only to import her spreadsheets, but also pay some attention to re-skinning the foundation&#8217;s current Web site (which is sorely needed).</p>
<p>CiviCRM&#8217;s biggest drawback is a huge learning curve. It is not easy to understand out of the box, especially if someone doesn&#8217;t have prior experience with customer relation management software. That was Patti&#8217;s problem: It was too daunting, much like the system she had tried previously.</p>
<p>So our task played directly to our strengths: Make an easy-to-use contact database on the Web, which could also track donations and event registrations.</p>
<h3>Friday: Three Ways To Skin A Cat</h3>
<p>Patti asked that we use Access to make her database, since she has some experience with it. Unfortunately, nobody on our team knew much about Access, and at least two of us have had negative experiences with it.</p>
<p>At last year&#8217;s GiveCamp, William wound up having to become an on-the-spot Access developer, and it left something of a sour taste. I&#8217;ve never had much success building standalone Access databases, largely because I find its visual query and form designers extremely limiting. Saurabh said he had little to no experience with Access.</p>
<p>The one thing we all knew was <a href="http://www.asp.net/web-forms" target="_blank">ASP.NET Web Forms</a>. Well, to be specific, we knew three different versions of ASP.NET Web Forms. Saurabh programs in C#. William and I prefer VB.NET. William likes using <a href="http://msdn.microsoft.com/en-us/netframework/aa904594" target="_blank">Linq</a>; I prefer old-school stored procedures; Saurabh likes inline SQL statements.</p>
<p>The good thing in that is, an ASP.NET Web application doesn&#8217;t need to run under just one language, and so long as the connections and queries are good, you can mix and match database layers to your hearts&#8217; content.</p>
<p>So we settled in to design a database schema that could record contacts, donations and events. That consumed most of Friday night&#8217;s efforts. Here&#8217;s how it looked on the whiteboard. <em>(Saurabh took this with his cell phone camera. Click it for full-size, which is easier to read.)</em></p>
<p><a href="http://www.dougv.com/wp-content/uploads/2011/05/Photo_CB6DA206-0E0E-C34E-DADC-2CD1B7D8C086.jpg"><img class="alignnone size-large wp-image-3858" title="Our database schema" src="http://www.dougv.com/wp-content/uploads/2011/05/Photo_CB6DA206-0E0E-C34E-DADC-2CD1B7D8C086-728x545.jpg" alt="Our database schema" width="728" height="545" /></a></p>
<h3>Saturday: Tackling The Obstacles</h3>
<p>Saturday started with a lot of little hiccups.</p>
<p><a href="http://discountasp.net/" target="_blank">DiscountASP.NET</a> very kindly donated the Web hosting for our application. However, they require a domain name in order to host a site, and wouldn&#8217;t donate that. Because we weren&#8217;t redesigning the Alex&#8217;s Team site, which needed to remain on its current server, we couldn&#8217;t use the one domain name Patti had. So I popped on over to GoDaddy and bought a special domain for the occasion.</p>
<p>With a domain in hand, we could go ahead and create our application. Except that DiscountASP.NET, which would also donate a SQL Server database, has a separate ordering process for add-on services, which meant we would be delayed for several hours while we waited for the database to be set up.</p>
<p>Since our entire application was basically just a GUI to a relational database, we really couldn&#8217;t get much done without a database. So I tried to use one of my free GoDaddy Web hosting credits to set up service sufficient to get us started.</p>
<p>Unfortunately, I couldn&#8217;t use the newly registered domain to access any free service, because I guess the registration was too new; also, all the other domains I have registered through GoDaddy point to something, so I couldn&#8217;t use one of those.</p>
<p>Thankfully, GoDaddy will sell Web hosting for $8 for one month without need for a contract, so I just went ahead with that; and within 30 minutes, we were able to build our database and start making forms.</p>
<div class="aside">For the record, DiscountASP.NET came through for us completely by early Saturday afternoon. It was only my panic, lack of timely preparation / organization and impatience that made me use GoDaddy. This application will soon be moved to DiscountASP.NET, where it will permanently reside. I&#8217;ve used DiscountASP.NET for Web hosting in the past and in terms of features and reliability, they simply cannot be outdone.</div>
<ul>
<li>I didn&#8217;t pre-install Visual Studio on my crappy laptop; that took two hours out of Saturday morning. A new laptop will definitely be in the offing for next year.</li>
<li>While waiting for that install to finish, I went on a wild goose chase for a convenience store in Cambridge. Suffice it to say, the one nearest to NERD is a 7-Eleven about a half-mile away; but I wound up hanging around for about 45 minutes outside <a href="http://store.thecoop.com/" target="_blank">the Coop</a>, waiting for it to open, because I was mistakenly led to believe it sold tobacco. (I fell off the no-smoking wagon for the weekend; I knew there would be some stress, and nicotine definitely keeps me calm.) So what should have been a 20-minute break turned in to an hour and a half.</li>
</ul>
<div id="attachment_3862" class="wp-caption alignnone" style="width: 717px"><img class="size-full wp-image-3862" title="Saurabh accuses me of being high. It's not an unreasonable assumption." src="http://www.dougv.com/wp-content/uploads/2011/05/tweet01.jpg" alt="Saurabh accuses me of being high. It's not an unreasonable assumption." width="707" height="378" /><p class="wp-caption-text">I was gone so long in search of smokes, Saurabh accused me of going to get stoned. It was a reasonably accurate portrayal.</p></div>
<ul>
<li>Somewhere around 1 pm, I mistakenly thought we would have to work in ASP.NET 2.0 in order to resolve some namespace and other issues, and I communicated as much to my team. This led them to delete what they had made to that point. Within 5 minutes, William had corrected my error. Saurabh was nonplussed.</li>
<li>After dinner, we were ready to start integrating our files. Non unexpectedly, we ran into a number of small issues. It took a little while to get William&#8217;s files working on my laptop, but try as we might, we just couldn&#8217;t get Saurabh&#8217;s C#-based solution to work. So he wound up converting them to VB.NET. I went back to the hotel to finish my part of the solution.</li>
</ul>
<p>On Saturday night, I gave a quick overview on WordPress for the non-profits that I fear was a real snoozer. (Memo to self: Never host a seminar after dinner.) During that, I won my choice of a number of software prizes; but what was left available in the first-come, first-served prize pool didn&#8217;t really thrill me.</p>
<p>William had his eye on a copy of <a href="http://www.devexpress.com/Subscriptions/DXperience/editionEnt.xml" target="_blank">DevExpress DXPerience Enterprise</a>, a bunch of .NET controls, worth about $1,300 on the retail market. I seldom program in Windows and he does all the time, so I transferred my winnings to him.</p>
<h3>A Word About The Royal Sonesta</h3>
<p>While many GiveCampers &#8212; William and Saurabh among them &#8212; spent the night at NERD, I stayed at a hotel, because I&#8217;m too old and fussy to be sleeping on hard floors. Also, I&#8217;m in Cambridge, which is quite a treat for me, and I wanted a chance to spend at least a little time in the city each night, even if it was just walking a half-mile to the hotel and having a drink or two in the lounge. So I opted to stay at the <a href="http://www.sonesta.com/boston/" target="_blank">Royal Sonesta</a>, which had the best rates.</p>
<p><iframe src="http://maps.google.com/maps/ms?hl=&amp;ie=UTF8&amp;msa=0&amp;msid=208401827101352337890.0004a2659aa672a475969&amp;ll=42.364727,-71.085362&amp;spn=0.011098,0.031242&amp;z=15&amp;output=embed" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="728" height="350"></iframe><br />
<small>View <a style="color: #0000ff; text-align: left;" href="http://maps.google.com/maps/ms?hl=&amp;ie=UTF8&amp;msa=0&amp;msid=208401827101352337890.0004a2659aa672a475969&amp;ll=42.364727,-71.085362&amp;spn=0.011098,0.031242&amp;z=15&amp;source=embed">New England GiveCamp 2011</a> in a larger map</small></p>
<p>This simple plot was foiled, however, by the Royal Sonesta&#8217;s unfathomable renting out of the first-floor lounge on both Friday and Saturday night. On Friday, I was able to get a single beer, but it felt very strange crashing a private event and I wound up calling it a night early. On Saturday, they just turned me away, period, because a wedding reception was being held there.</p>
<p>Also, while the Sonesta loudly advertised its local shuttle service, they require you to register for it; and nobody saw fit to remind me of it at the concierge desk, when I asked for a shuttle schedule. As a result, I stood outside for a half-hour on Friday night, waiting for a shuttle that never showed up.</p>
<p>Overall, the Sonesta&#8217;s staff was courteous and friendly; especially the front desk, porters and valets. But the concierges were inexplicably surly, brusque, unapologetic and unhelpful.</p>
<p>So while the price was great ($144 per night, amazingly good for Cambridge), the hotel was clean and the room / amenities nice, I cannot recommend the place. I mean, what kind of hotel closes its lounge to guests? And has concierge service that basically looks to do as little as possible, and that with a frown on its face?</p>
<h3>Sunday: It All Comes Together, Like Magic</h3>
<p>The great benefit of having competent, skilled and motivated team members is that their sense of urgency and their ability to adapt and overcome adversity are both fine-tuned. That was certainly the case with William and Saurabh; they were pretty much done by Sunday morning, and all we had to do was take one more crack at getting all three parts to play nicely with one another.</p>
<p>I let that task fall to William, and he did an extraordinary job getting everything to work; certainly, a much better job than I would have done. Meanwhile, Saurabh settled in to help Patti make some upgrades to her Web site, notably in getting her Paypal donation button working again, adding in some alternative donation options and adding Google Analytics to her site.</p>
<p>Saurabh also won an instant drawing on Sunday and scored a copy of Age of Empires III for PC. I had my heart set on winning a WiFi-enabled Kindle, which was being given away at the end of GiveCamp; but that didn&#8217;t happen.</p>
<p>Not to say we didn&#8217;t get some great swag:</p>
<ul>
<li>A full-boat copy of Microsoft Office 2010 Professional. Awesome!</li>
<li>A thumb drive. You can never have too many of those.</li>
<li>A set of jewelers&#8217; screwdrivers. Again, you can never have too many of them.</li>
<li>A screw-top sippy cup with durable straw. Which is exactly what my spill-prone self needs to have on his work desk.</li>
<li>A miniature Nerf football. Awesome stress reliever.</li>
<li>A pen and pad of paper. Again, never can have enough of either.</li>
<li>A puzzle book. Not that I had time during the weekend to mess with puzzles.</li>
<li>A GiveCamp T-shirt. I like T-shirts as mementos.</li>
</ul>
<p>During the weekend, Jim O&#8217;Neil dropped scores of additional treats on a giveaway table, many of which were O&#8217;Reilly books. I managed to get a spare puzzle book, several notepads, a <a href="http://www.amazon.com/Oracle-Language-Pocket-Reference-OReilly/dp/0596514042/" target="_blank">PL/SQL quick pocket reference</a>, <a href="http://www.amazon.com/Access-2010-Missing-Matthew-MacDonald/dp/1449382371/" target="_blank">Access 2010: the missing manual</a> and <a href="http://www.amazon.com/Microsoft®-Visual-Basic®-2010-Microsoft/dp/0735626693/" target="_blank">Visual Basic 2010 Step By Step</a>. There were a number of other books available but I was too slow to score them. However, I understand I am allowed a free ebook from O&#8217;Reilly, as well.</p>
<p>The bottom line is that we got our project done, it works, Patti seems fairly pleased with it and we had a great time this weekend. It&#8217;s definitely renewed my commitment; I&#8217;ll be a GiveCamper until I can&#8217;t do it any more.</p>
<p>All links in this post on delicious: <a href="http://www.delicious.com/dougvdotcom/new-england-givecamp-2011-what-a-weekend" target="_blank">http://www.delicious.com/dougvdotcom/new-england-givecamp-2011-what-a-weekend</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/06/10/at-new-england-givecamp-this-weekend/" rel="bookmark">At New England GiveCamp This Weekend</a> (30.9)</li>
				<li><a href="https://www.dougv.com/2010/06/16/new-england-givecamp-2010-what-a-great-experience/" rel="bookmark">New England GiveCamp 2010: What A Great Experience</a> (21.7)</li>
				<li><a href="https://www.dougv.com/2010/05/13/designers-and-developers-donate-your-time-talent-at-new-england-give-camp-june-11-13-2010/" rel="bookmark">Designers And Developers: Donate Your Time, Talent At New England GiveCamp, June 11-13, 2010</a> (21.1)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/crowdsourcing/" title="crowdsourcing" rel="tag">crowdsourcing</a>, <a href="https://www.dougv.com/tag/ethics/" title="ethics" rel="tag">ethics</a>, <a href="https://www.dougv.com/tag/givecamp/" title="GiveCamp" rel="tag">GiveCamp</a>, <a href="https://www.dougv.com/tag/godaddy/" title="GoDaddy" rel="tag">GoDaddy</a>, <a href="https://www.dougv.com/tag/google/" title="Google" rel="tag">Google</a>, <a href="https://www.dougv.com/tag/graphic-design/" title="graphic design" rel="tag">graphic design</a>, <a href="https://www.dougv.com/tag/jim-oneil/" title="Jim O&#039;Neil" rel="tag">Jim O&#039;Neil</a>, <a href="https://www.dougv.com/tag/marketing/" title="marketing" rel="tag">marketing</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2011/05/03/new-england-givecamp-2011-what-a-weekend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatically Hash Tagging Text With ASP.NET Web Forms (VB.NET)</title>
		<link>https://www.dougv.com/2011/04/24/automatically-hash-tagging-text-with-asp-net-web-forms-vb-net/</link>
		<comments>https://www.dougv.com/2011/04/24/automatically-hash-tagging-text-with-asp-net-web-forms-vb-net/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 01:14:41 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Transact-SQL]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[hashtags]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[regular expression]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.dougv.com/?p=3836</guid>
		<description><![CDATA[Code and algorithm to hashtag a string in ASP.NET Web Forms. Written in VB.NET, includes working demo.<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2011/04/12/automatically-hash-tagging-text-with-php-and-mysql-part-2-adding-new-hash-tags-to-the-database-table/" rel="bookmark">Automatically Hash Tagging Text With PHP And MySQL Part 2: Adding New Hash Tags To The Database Table</a> (49.1)</li>
				<li><a href="https://www.dougv.com/2011/04/11/automatically-hash-tagging-text-with-php-and-mysql/" rel="bookmark">Automatically Hash Tagging Text With PHP And MySQL</a> (46.1)</li>
				<li><a href="https://www.dougv.com/2007/07/13/getting-plain-text-from-an-aspnet-20-page-for-use-as-an-ajax-data-source/" rel="bookmark">Getting Plain Text From An ASP.NET 2.0 Page For Use As An AJAX Data Source</a> (20.3)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>I had previously blogged <a href="http://www.dougv.com/2011/04/11/automatically-hash-tagging-text-with-php-and-mysql/">a solution in PHP to automatically hash tag an input string</a> with various terms stored in a database. Here&#8217;s an ASP.NET Web Forms version of the same solution (this one should work for ASP.NET 2, 3.5 and 4).</p>
<p>To review, a <a href="http://en.wikipedia.org/wiki/Tag_%28metadata%29">hash tag</a> is a bit of text, led with a hash mark (#), that serves to indicate to some Web sites / services &#8212; <a href="http://support.twitter.com/entries/49309-what-are-hashtags-symbols">notably, Twitter</a> &#8212; that the word thus marked should be treated as a tag. This code will take some piece of input text, search it for terms we generally want to tag, and mark the instances in that input string with hash tags.</p>
<p>As in the previous solution, we&#8217;ll define a &#8220;word&#8221; for the purposes of this demo to be any alphanumeric character sequence that is followed by a space or a newline. Also, this demo will only tag text; it won&#8217;t automatically add new terms to the database. That will be the subject of an upcoming post.</p>
<p>I&#8217;m going to use three <a href="http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx" target="_blank">ArrayLists</a> as the workhorses for this solution. One will hold the terms from the database; the second will contain all the distinct words in the input string; and the third, the words from the input string that are hashtag terms.<br />
<span id="more-3836"></span></p>
<h4>The HTML / ASP.NET Controls</h4>
<p>For the purposes of this demo, we&#8217;ll just have a form with a <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.label.aspx" target="_blank">Label</a> (to show results or error messages), <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.aspx" target="_blank">TextBox</a> (to provide the input text), a <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.requiredfieldvalidator.aspx" target="_blank">RequiredFieldValidator</a> and a <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.aspx" target="_blank">Button</a>. I&#8217;ll also output in a <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.aspx" target="_blank">DetailsView</a>, bound to a <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.aspx" target="_blank">SqlDataSource</a>, all the terms stored in the database at the moment.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;h2&gt;Automatically Hashtagging An Input String&lt;/h2&gt;
&lt;p&gt;&lt;asp:Label runat=&quot;server&quot; ID=&quot;lblResult&quot; Text='Enter some text in the box, then click the submit button. Results will be shown here.' /&gt;&lt;/p&gt;
&lt;asp:TextBox runat=&quot;server&quot; ID=&quot;tbInput&quot; TextMode=&quot;MultiLine&quot; Rows=&quot;10&quot; Columns=&quot;50&quot; Text=&quot;Amazon uses HTML5 and JavaScript; Google owns YouTube.&quot;  /&gt;
&lt;asp:RequiredFieldValidator runat=&quot;server&quot; ID=&quot;rfvInput&quot; ControlToValidate=&quot;tbInput&quot; ErrorMessage='&lt;br /&gt;Please provide some text.' CssClass=&quot;warning&quot; Display=&quot;Dynamic&quot; /&gt;
&lt;br /&gt;
&lt;asp:Button runat=&quot;server&quot; ID=&quot;btnSubmit&quot; Text=&quot;Submit&quot; /&gt;

&lt;h4&gt;Terms in the database&lt;/h4&gt;
&lt;asp:DataList runat=&quot;server&quot; ID=&quot;dlTerms&quot; DataSourceID=&quot;sqlTerms&quot; RepeatColumns=&quot;10&quot; RepeatDirection=&quot;Horizontal&quot; CellPadding=&quot;5&quot; CellSpacing=&quot;0&quot; ItemStyle-BorderColor=&quot;Black&quot; ItemStyle-BorderWidth=&quot;1&quot;&gt;
	&lt;ItemTemplate&gt;
		&lt;%#Eval(&quot;term_text&quot;)%&gt;
	&lt;/ItemTemplate&gt;
&lt;/asp:DataList&gt;

&lt;asp:SqlDataSource runat=&quot;server&quot; ID=&quot;sqlTerms&quot; SelectCommand=&quot;your stored procedure&quot; SelectCommandType=&quot;StoredProcedure&quot; ConnectionString=&quot;&lt;%$ ConnectionStrings:your connection string%&gt;&quot; /&gt;
</pre>
<h4>The GetAllTerms Function</h4>
<p>First up, a function that retrieves from the database all the hashtag terms and returns them as an array.</p>
<pre class="brush: vb; title: ; notranslate">Function GetAllTerms() As ArrayList
	'retrieves all terms from the database
	'returns empty ArrayList on error,
	'populated ArrayList on success

	Dim arrOut As New ArrayList()

	Dim objConn As New SqlConnection(ConfigurationManager.ConnectionStrings(&quot;your connections string&quot;).ConnectionString)
	Dim objCmd As New SqlCommand(&quot;your stored procedure&quot;, objConn)
	objCmd.CommandType = CommandType.StoredProcedure

	Dim objReader As SqlDataReader
	objConn.Open()
	objReader = objCmd.ExecuteReader()
	While objReader.Read()
		arrOut.Add(objReader(0))
	End While
	objConn.Close()
	objCmd.Dispose()
	objConn.Dispose()

	Return arrOut
End Function</pre>
<h4>The ExtractTerms Function</h4>
<p>Now we need to get all the potentially taggable words in our input string.</p>
<pre class="brush: vb; title: ; notranslate">Function ExtractTerms(ByVal strInput As String) As ArrayList
	'extracts all words from textbox
	'returns them as ArrayList, empty ArrayList on error
	'words are any alphanumeric sequence before a space or newline

	Dim arrOut As New ArrayList()

	Dim reWords As New Regex(&quot;\w+(\s|$)&quot;, RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant)
	Dim reMatches As MatchCollection = reWords.Matches(tbInput.Text)

	For Each reMatch As Match In reMatches
		arrOut.Add(reMatch.Value.Trim)
	Next

	Return arrOut
End Function</pre>
<h4>The CompareLists Function</h4>
<p>Now that we have ArrayLists with all terms and all words, we can compare the two, and create an ArrayList that contains the words we intend to tag.</p>
<p>Note that we take care to cast the terms and words to lower-case, and return the input text version of any terms found. That&#8217;s because we want to preserve case in the input string. That&#8217;s also why I can&#8217;t use the <a href="http://msdn.microsoft.com/en-us/library/system.collections.arraylist.contains.aspx">ArrayList.Contains </a>method; it&#8217;s case-sensitive when comparing strings. (Actually, that can be overridden or worked around; but it&#8217;s involved and somewhat complicated, so it&#8217;s also a subject for some other column).</p>
<pre class="brush: vb; title: ; notranslate">Function CompareLists(ByVal arrTerms As ArrayList, ByVal arrWords As ArrayList) As ArrayList
	'compares term list against word list
	'returns ArrayList with all words found in terms
	'maintains case

	Dim arrOut As New ArrayList()

	For Each strWord As String In arrWords
		For Each strTerm As String In arrTerms
			If strTerm.ToLower = strWord.ToLower Then
				arrOut.Add(strWord)
				Exit For
			End If
		Next
	Next

	Return arrOut
End Function</pre>
<h4>The AutoTagSubject Function</h4>
<p>Finally, we need a function that will take the words we want autotagged, and apply the autotagging to the input string.</p>
<p>Note that before we proceed with tagging, we remove all current hash marks from the input string. That&#8217;s to avoid double-hashing words that may have been tagged in the input text.</p>
<pre class="brush: vb; title: ; notranslate">Function AutoTagSubject(ByVal strInput As String, ByVal arrTerms As ArrayList) As String
	'applies arrTerms as hashtags to strInput
	'removes hashtags first to avoid double-tagging

	Dim strOut As String = strInput
	strOut = strOut.Replace(&quot;#&quot;, &quot;&quot;)

	For Each strTerm As String In arrTerms
		strOut = strOut.Replace(strTerm, &quot;#&quot; &amp; strTerm)
	Next

	Return strOut
End Function</pre>
<h4>The btnSubmit_click Subroutine</h4>
<p>We now need a simple subroutine to invoke our functions and autotag the input text.</p>
<pre class="brush: vb; title: ; notranslate">Sub btnSubmit_click(ByVal Sender As Object, ByVal E As EventArgs) Handles btnSubmit.Click
	'get terms from database
	Dim arrTerms As New ArrayList()
	arrTerms = GetAllTerms()

	'get unique words from input text
	Dim arrWords As New ArrayList()
	arrWords = ExtractTerms(tbInput.Text)

	If arrTerms.Count &lt; 1 Then
		lblResult.Text = &quot;There are no terms in the database, or there was an error retrieving the terms.&quot;
		lblResult.CssClass = &quot;warning&quot;
	ElseIf arrWords.Count &lt; 1 Then
		lblResult.Text = &quot;There are no words in the string to be tagged.&quot;
		lblResult.CssClass = &quot;warning&quot;
	Else
		'get matches between terms and input words
		Dim arrHashes As New ArrayList()
		arrHashes = CompareLists(arrTerms, arrWords)

		If arrHashes.Count &lt; 1 Then
			lblResult.Text = &quot;There were no matches between the input text and the terms in the database.&quot;
			lblResult.CssClass = &quot;&quot;
		Else
			'display found terms
			Dim sbMsg As New StringBuilder(&quot;The following terms were found: &quot;)
			For Each strTerm As String In arrHashes
				sbMsg.Append(strTerm)
				sbMsg.Append(&quot;, &quot;)
			Next
			sbMsg.Remove(sbMsg.Length - 2, 2)
			lblResult.Text = sbMsg.ToString()
			lblResult.CssClass = &quot;&quot;

			'autotag input string
			tbInput.Text = AutoTagSubject(tbInput.Text, arrHashes)
		End If
	End If

End Sub</pre>
<p>And that&#8217;s all there is to it. You can see a working demo at <a href="http://www.dougv.net/demos/auto_hashtag/">http://www.dougv.net/demos/auto_hashtag/</a></p>
<p>You can also <a href="http://www.dougv.com/wp-content/uploads/2011/04/auto_hashtag.zip">download the demo code</a>. I distribute code under the GNU GPL.</p>
<p>All links in this post on delicious: <a href="http://www.delicious.com/dougvdotcom/automatically-hash-tagging-text-with-asp-net-web-forms-vb-net">http://www.delicious.com/dougvdotcom/automatically-hash-tagging-text-with-asp-net-web-forms-vb-net</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2011/04/12/automatically-hash-tagging-text-with-php-and-mysql-part-2-adding-new-hash-tags-to-the-database-table/" rel="bookmark">Automatically Hash Tagging Text With PHP And MySQL Part 2: Adding New Hash Tags To The Database Table</a> (49.1)</li>
				<li><a href="https://www.dougv.com/2011/04/11/automatically-hash-tagging-text-with-php-and-mysql/" rel="bookmark">Automatically Hash Tagging Text With PHP And MySQL</a> (46.1)</li>
				<li><a href="https://www.dougv.com/2007/07/13/getting-plain-text-from-an-aspnet-20-page-for-use-as-an-ajax-data-source/" rel="bookmark">Getting Plain Text From An ASP.NET 2.0 Page For Use As An AJAX Data Source</a> (20.3)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/arrays/" title="arrays" rel="tag">arrays</a>, <a href="https://www.dougv.com/tag/hashtags/" title="hashtags" rel="tag">hashtags</a>, <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/regular-expression/" title="regular expression" rel="tag">regular expression</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2011/04/24/automatically-hash-tagging-text-with-asp-net-web-forms-vb-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating An ASP.NET RSS Feed, Using Data From SQL Server And HTTP WebHandler</title>
		<link>https://www.dougv.com/2010/12/11/creating-an-asp-net-rss-feed-using-data-from-sql-server-and-http-webhandler/</link>
		<comments>https://www.dougv.com/2010/12/11/creating-an-asp-net-rss-feed-using-data-from-sql-server-and-http-webhandler/#comments</comments>
		<pubDate>Sat, 11 Dec 2010 06:14:35 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Transact-SQL]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.dougv.com/blog/?p=3463</guid>
		<description><![CDATA[There are a couple of ways to create an RSS feed from a SQL database store. Over at 4GuysFromRolla.com, there&#8217;s a post explaining how to create an RSS feed using a regular old ASP.NET Web Form. Another option would be to write a script that creates an actual XML file on some periodic basis (probably [...]<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2008/08/21/displaying-an-image-stored-in-a-sql-server-database-on-an-aspnet-page-using-vbnet/" rel="bookmark">Displaying An Image Stored In A SQL Server Database On An ASP.NET Page Using VB.NET</a> (30.4)</li>
				<li><a href="https://www.dougv.com/2010/10/04/backing-up-your-sql-server-database-to-sql-files-with-management-studio-express/" rel="bookmark">Backing Up Your SQL Server Database To SQL Files With Management Studio Express</a> (28.8)</li>
				<li><a href="https://www.dougv.com/2010/03/29/rss-feeds-now-show-full-entries/" rel="bookmark">RSS Feeds Now Show Full Entries</a> (19.7)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>There are a couple of ways to create an RSS feed from a SQL database store. Over at 4GuysFromRolla.com, there&#8217;s a post explaining how to create an RSS feed <a href="http://www.4guysfromrolla.com/articles/021804-1.aspx" target="_blank">using a regular old ASP.NET Web Form</a>.</p>
<p>Another option would be to write a script that creates an actual XML file on some periodic basis (probably just before the recommended &#8220;time to live&#8221; setting of the feed). The benefit of that is, one taxes the database server a little every now and then, and a &#8220;real&#8221; XML file does the work.</p>
<p>But as a rule, for ASP.NET applications, <a href="http://msdn.microsoft.com/en-us/library/bb398986.aspx" target="_blank">Microsoft recommends using HTTP handlers or modules</a> whenever one wants to present data other than HTML.</p>
<div class="aside">A <em>handler </em>is a special ASP.NET Web page; a <em>module </em>is a plug-in one can install in <a href="http://msdn.microsoft.com/en-us/library/bb757040.aspx" target="_blank">Internet Information Server</a>. If you&#8217;ve got a lot of different, special-case Web processing, or one need that is near-constant &#8212; such as processing images stored in a database every time a specific page is called &#8212; then you&#8217;ll want to consider a module. For occasional or lightweight processing, such as serving up a low-use RSS stream, a handler will do fine.</div>
<p>So that&#8217;s what we&#8217;ll use here. Let&#8217;s begin by creating an ASP.NET HTTP handler, which is written in the same way one would write the code behind for an ASP.NET page, but uses the file extension .ashx.<br />
<span id="more-3463"></span></p>
<h3>Creating An ASP.NET HTTP Handler</h3>
<p>Fortunately, handlers are very easy to create, especially if you&#8217;re using <a href="http://www.microsoft.com/visualstudio/en-us/" target="_blank">Visual Studio</a> / <a href="http://www.asp.net/vwd/" target="_blank">Visual Web Developer Express</a> as your <a href="http://en.wikipedia.org/wiki/Integrated_development_environment" target="_blank">IDE</a>. You can select it (&#8220;Generic Handler&#8221;) right from the Add New Item menu:</p>
<p><a href="http://www.dougv.com/wp-content/uploads/2010/12/addnewitem1.jpg"><img class="alignnone size-medium wp-image-3490" title="Visual Studio 2008 Add New Item Dialog Box" src="http://www.dougv.com/wp-content/uploads/2010/12/addnewitem1-500x327.jpg" alt="Visual Studio 2008 Add New Item Dialog Box" width="500" height="327" /></a></p>
<pre class="brush: vb; title: ; notranslate">&lt;@ WebHandler Language=&quot;VB&quot; Class=&quot;Handler&quot;; &gt;

Imports System
Imports System.Web

Public Class Handler : Implements IHttpHandler

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        context.Response.ContentType = &quot;text/plain&quot;
        context.Response.Write(&quot;Hello World&quot;)
    End Sub

    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class</pre>
<p>What this really does is create a special class for handling our request. And since we may well have several different kinds of handlers in our Web application, we ought to change the name of the class to be more meaningful &#8212; that is, to better reflect what the class is actually doing.</p>
<p>In the case of our handler, we&#8217;re creating an RSS feed. So, let&#8217;s rename the handler to RSSFeed.ashx. If we do that at the time we create the handler, Visual Studio will make the necessary changes for us. However, if we&#8217;re making this file by hand, we need to declare the class name in our WebHander directive declaration:</p>
<pre class="brush: vb; title: ; notranslate">&lt;%@ WebHandler Language=&quot;VB&quot; Class=&quot;RSSFeed&quot; &gt;</pre>
<p>We also want to change the class declaration:</p>
<pre class="brush: vb; first-line: 6; title: ; notranslate">Public Class RSSFeed : Implements IHttpHandler</pre>
<h3>Add Required Namespaces</h3>
<p>With our HTTP handler created, we can move on to programming the specific solution. Let&#8217;s add the namespaces we need. I&#8217;m going to use an <a href="http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.aspx" target="_blank">XMLTextWriter</a> to create the feed, and SQL Server to provide the data. Therefore, I need the <a href="http://msdn.microsoft.com/en-us/library/system.text.aspx" target="_blank">System.Text</a>, <a href="http://msdn.microsoft.com/en-us/library/system.xml.aspx" target="_blank">System.Xml</a>, <a href="http://msdn.microsoft.com/en-us/library/system.data.aspx" target="_blank">System.Data</a> and <a href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.aspx" target="_blank">System.Data.SqlClient</a> namespaces:</p>
<pre class="brush: vb; title: ; notranslate">&lt;@ WebHandler Language=&quot;VB&quot; Class=&quot;RSSFeed&quot; &gt;

Imports System
Imports System.Web
Imports System.Xml
Imports System.Text
Imports System.Data
Imports System.Data.SqlClient

Public Class RSSFeed : Implements IHttpHandler</pre>
<h3>Create Function To Retrieve Records From Database</h3>
<p>To help abstract this solution, I&#8217;m going to break out the process of getting the records from the database into a function. This function will return a <a href="http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx" target="_blank">DataSet</a>, which I will consume in the ProcessRequest subroutine.</p>
<pre class="brush: vb; first-line: 69; title: ; notranslate">Private Function GetArticles() As DataSet
	Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings(&quot;my_connection_string&quot;).ConnectionString)
	Dim cmd As New SqlCommand(&quot;my_stored_procedure&quot;, conn)
	cmd.CommandType = CommandType.StoredProcedure

	Dim ds As New DataSet

	conn.Open()
	Dim da As New SqlDataAdapter(cmd)
	da.Fill(ds)
	conn.Close()
	cmd.Dispose()
	conn.Dispose()

	Return ds
End Function</pre>
<p>Note that I am not checking for errors here. That&#8217;s because I don&#8217;t know what might be an acceptable error-catching scheme for you, and I don&#8217;t want to complicate this post with error-trapping methodologies you cannot use. But you should definitely check for errors.</p>
<p>If anything goes wrong, the DataSet as written won&#8217;t have any <a href="http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx" target="_blank">DataTable</a> objects;  you could always test for that, but I agree with <a href="http://twitter.com/#!/jsonmez" target="_blank">John Sonmez</a> at ElegantCode.com that <a href="http://elegantcode.com/2010/05/01/say-no-to-null/" target="_blank">throwing a null instead of an exception is a form of laziness</a>.</p>
<p>If I were writing this handler for production, I would add a <a href="http://msdn.microsoft.com/en-us/library/fk6t46tz.aspx" target="_blank">Try-Catch block</a>. How you trap DB errors is up to you, but again, you should definitely trap them.</p>
<h3>Prepare The Handler To Cache Results And Respond With The Proper Type</h3>
<p>I need to instruct the handler as to what content type it&#8217;s creating. And I also want to cache these results, so that I don&#8217;t call upon the database every time someone wants to access the feed.</p>
<p>I&#8217;ll set the handler to produce XML, with UTF-8 encoding, and to cache results for one hour.</p>
<pre class="brush: vb; first-line: 12; title: ; notranslate">Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
	'send document as response
	context.Response.ContentType = &quot;text/xml&quot;
	context.Response.ContentEncoding = System.Text.Encoding.UTF8
	context.Response.Cache.SetExpires(DateTime.Now.AddSeconds(3600))
	context.Response.Cache.SetCacheability(HttpCacheability.Public)</pre>
<p>Sure, I could have used <a href="http://msdn.microsoft.com/en-us/library/system.datetime.addhours.aspx" target="_blank">AddHours</a> instead of <a href="http://msdn.microsoft.com/en-us/library/system.datetime.addseconds.aspx" target="_blank">AddSeconds</a> here. That would have been better, but I&#8217;m a bit too lazy to change it now. I program a lot in PHP / JavaScript, too, so when working with time, I tend to go the <a href="http://en.wikipedia.org/wiki/Unix_time" target="_blank">Unix timestamp</a> route by default, which generally means working in seconds.</p>
<p>(<em>Aside on caching DB results:</em> If I wanted to get all fancy, I could set the handler&#8217;s cache expiration to whenever there are changes to the underlying SQL Server data, via the <a href="http://msdn.microsoft.com/en-us/library/ms178604.aspx" target="_blank">SqlCacheDependency</a> class. But that requires extra code and confuses the process to some extent, so I&#8217;ve simply fixed the cache time to one hour, which is the same as my feed&#8217;s <a href="http://cyber.law.harvard.edu/rss/rss.html#ltttlgtSubelementOfLtchannelgt" target="_blank">TTL</a>. <em>End of aside.</em>)</p>
<h3>Use XmlTextWriter To Create The RSS Feed</h3>
<p>With our records on hand, we can go ahead and create the feed. I do that with an XmlTextWriter that is set to become the output stream for the handler. (That is, I tell the handler, &#8220;Take a look at this here XmlTextWriter I&#8217;m making. You and it are the effectively same thing. Whatever it does, that&#8217;s what you&#8217;re doing.&#8221;)</p>
<p>I set the XmlTextWriter to encode its XML file in UTF-8, and then I create the opening <channel> data:</p>
<pre class="brush: vb; first-line: 19; highlight: [34,37]; title: ; notranslate">'create RSS xml document
Dim xml As New XmlTextWriter(context.Response.OutputStream, Encoding.UTF8)
xml.Formatting = Formatting.Indented

xml.WriteStartDocument()
xml.WriteStartElement(&quot;rss&quot;)
xml.WriteAttributeString(&quot;version&quot;, &quot;2.0&quot;)

'create feed header section
xml.WriteStartElement(&quot;channel&quot;)
xml.WriteElementString(&quot;title&quot;, &quot;ASP.NET RSS Feed - Web Handler Demo&quot;)
xml.WriteElementString(&quot;link&quot;, &quot;http://www.dougv.net&quot;)
xml.WriteElementString(&quot;description&quot;, &quot;A demonstration of using an ASP.NET Web Handler to create an RSS feed of SQL Server data&quot;)
xml.WriteElementString(&quot;language&quot;, &quot;en-us&quot;)
xml.WriteElementString(&quot;pubDate&quot;, DateTime.UtcNow.ToString(&quot;r&quot;))
xml.WriteElementString(&quot;lastBuildDate&quot;, DateTime.UtcNow.ToString(&quot;r&quot;))
xml.WriteElementString(&quot;managingEditor&quot;, &quot;dougvanderweide@gmail.com&quot;)
xml.WriteElementString(&quot;webMaster&quot;, &quot;dougvanderweide@gmail.com&quot;)
xml.WriteElementString(&quot;ttl&quot;, &quot;60&quot;)</pre>
<p>Note that, at Line 34, I use UTC time and output it in RFC1123 format. That&#8217;s the RSS standard.</p>
<p>Because I want to ensure as many RSS readers as possible access this file as little as necessary, I ensure that the last build date is easily understood, and provide my time-to-live value at Line 37. That way, a well-made RSS reader should locally cache the RSS feed until the last build date / TTL values indicate it&#8217;s time to get a fresh copy.</p>
<h3>Iterate Through The DataSet&#8217;s Records And Add Them As Items</h3>
<p>With that out of the way, we can now focus on the ProcessRequest subroutine. First, we create a local DataSet that calls the GetArticles() function, previously described. Once that&#8217;s loaded, we go ahead and iterate the results, adding each as an <item> of the feed:</p>
<pre class="brush: vb; first-line: 39; highlight: [50,51,52,54]; title: ; notranslate">'get top stories
Dim ds As DataSet = GetArticles()

'add stories to feed
Dim row As DataRow
For Each row In ds.Tables(0).Rows
	xml.WriteStartElement(&quot;item&quot;)
	xml.WriteElementString(&quot;title&quot;, row(&quot;article_title&quot;))
	xml.WriteElementString(&quot;link&quot;, row(&quot;article_link&quot;))

	'output story as cdata
	xml.WriteStartElement(&quot;description&quot;)
	xml.WriteCData(row(&quot;article_text&quot;))
	xml.WriteEndElement()

	xml.WriteElementString(&quot;pubDate&quot;, CType(row(&quot;article_date&quot;), DateTime).ToString(&quot;r&quot;))
	xml.WriteEndElement()
Next</pre>
<p>Some of the data I intend to output contains HTML entities (i.e., HTML markup). When you create an XML document that contains entities, you must output that data as <a href="http://www.w3schools.com/xml/xml_cdata.asp" target="_blank">CDATA</a>. So where before, I was using the <a href="http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writeelementstring.aspx" target="_blank">WriteElementString</a> method to output quick-and-dirty child tags, Lines 50-52 use the necessarily much more verbose methods <a href="http://msdn.microsoft.com/en-us/library/t8t5yhhk.aspx" target="_blank">WriteStartElement</a>, <a href="http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writecdata.aspx" target="_blank">WriteCdata</a> and <a href="http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writeendelement.aspx" target="_blank">WriteEndElement</a>.</p>
<p>Lastly, note that at Line 54, I intentionally cast the database&#8217;s date value to <a href="http://msdn.microsoft.com/en-us/library/system.datetime.aspx" target="_blank">DateTime</a>, so that I can be absolutely certain that when I use <a href="http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx" target="_blank">ToString</a> to format it, I get the result I want.</p>
<h3>Close Tags, Flush The Buffer And Close The XmlTextWriter</h3>
<p>Now we can go ahead and close all open XML tags, flush the XmlTextWriter&#8217;s buffer (that is, go ahead and output the document), and close the XmlTextWriter. We can also declare the end of the ProcessRequest subroutine:</p>
<pre class="brush: vb; first-line: 58; title: ; notranslate">	'close channel
	xml.WriteEndElement()
	'close rss
	xml.WriteEndElement()
	'close document
	xml.WriteEndDocument()
	xml.Flush()
	xml.Close()

End Sub</pre>
<p>I use both the <a href="http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.flush.aspx" target="_blank">Flush</a> and <a href="http://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.close.aspx" target="_blank">Close</a> methods on the XmlTextWriter to ensure that the handler is entirely clear that it can go ahead and send its response.</p>
<p>This is almost certainly overkill; I could probably get away with just calling Close. However, I don&#8217;t like chancing that the buffer will output completely to the handler&#8217;s response stream without an explicit instruction to do so, and that&#8217;s the primary purpose of Flush. So that&#8217;s why I call both.</p>
<h3>Demo, Download And Links</h3>
<p>And just like that, we have an RSS feed. You can see a working demo at <a href="http://www.dougv.net/demos/rss_web_handler/" target="_blank">http://www.dougv.net/demos/rss_web_handler/</a></p>
<p>I distribute this code under the GNU GPL version 3. Download the ASHX file: <a href="http://www.dougv.com/wp-content/uploads/2010/12/rssfeed.zip">Creating An ASP.NET RSS Feed, Using Data From SQL Server And HTTP WebHandler Sample Code</a></p>
<p>All links in this post on delicious: <a href="http://www.delicious.com/dougvdotcom/creating-an-asp-net-rss-feed-using-data-from-sql-server-and-http-webhandler" target="_blank">http://www.delicious.com/dougvdotcom/creating-an-asp-net-rss-feed-using-data-from-sql-server-and-http-webhandler</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2008/08/21/displaying-an-image-stored-in-a-sql-server-database-on-an-aspnet-page-using-vbnet/" rel="bookmark">Displaying An Image Stored In A SQL Server Database On An ASP.NET Page Using VB.NET</a> (30.4)</li>
				<li><a href="https://www.dougv.com/2010/10/04/backing-up-your-sql-server-database-to-sql-files-with-management-studio-express/" rel="bookmark">Backing Up Your SQL Server Database To SQL Files With Management Studio Express</a> (28.8)</li>
				<li><a href="https://www.dougv.com/2010/03/29/rss-feeds-now-show-full-entries/" rel="bookmark">RSS Feeds Now Show Full Entries</a> (19.7)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/google-reader/" title="Google Reader" rel="tag">Google Reader</a>, <a href="https://www.dougv.com/tag/iis/" title="IIS" rel="tag">IIS</a>, <a href="https://www.dougv.com/tag/metadata/" title="metadata" rel="tag">metadata</a>, <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/rss/" title="RSS" rel="tag">RSS</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="https://www.dougv.com/tag/web-server/" title="web server" rel="tag">web server</a>, <a href="https://www.dougv.com/tag/web-services/" title="Web Services" rel="tag">Web Services</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2010/12/11/creating-an-asp-net-rss-feed-using-data-from-sql-server-and-http-webhandler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting QueryString Values From A Rewritten URL / ASP.NET Routing URL</title>
		<link>https://www.dougv.com/2010/12/10/getting-querystring-values-from-a-rewritten-url-asp-net-routing-url/</link>
		<comments>https://www.dougv.com/2010/12/10/getting-querystring-values-from-a-rewritten-url-asp-net-routing-url/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 03:15:51 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[web server]]></category>

		<guid isPermaLink="false">http://www.dougv.com/blog/?p=3445</guid>
		<description><![CDATA[During today&#8217;s similcast of the ASP.NET Firestarter in Atlanta, G. Andrew Duthie discussed .NET 4&#8242;s new support for routing &#8212; or, what everyone in Web development calls &#8220;URL rewriting.&#8221; * Someone online asked, &#8220;If I use routing, can I access query string variables using JavaScript?&#8221; The question isn&#8217;t as confused as it sounds on the [...]<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2007/06/22/going-to-a-new-url-via-a-drop-down-list-javascript-and-dom-php-aspnet/" rel="bookmark">Going To A New URL Via A Drop-Down List: JavaScript And DOM, PHP, ASP.NET</a> (25.2)</li>
				<li><a href="https://www.dougv.com/2009/08/12/new-url-for-asp-net-demos-dougv-net/" rel="bookmark">New URL For ASP.NET Demos: dougv.net</a> (24.6)</li>
				<li><a href="https://www.dougv.com/2009/06/13/retaining-values-in-a-form-following-php-postback-and-clearing-form-values-after-successful-php-form-processing/" rel="bookmark">Retaining Values In A Form Following PHP Postback And Clearing Form Values After Successful PHP Form Processing</a> (19)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>During today&#8217;s <a href="http://www.microsoft.com/events/series/simulcasts.aspx?tab=videos&amp;id=43352">similcast of the ASP.NET Firestarter in Atlanta</a>, <a href="http://www.devhammer.net" target="_blank">G. Andrew Duthie</a> discussed .NET 4&#8242;s new support for routing &#8212; or, what everyone in Web development calls &#8220;<a href="http://en.wikipedia.org/wiki/Rewrite_engine" target="_blank">URL rewriting</a>.&#8221; *</p>
<p>Someone online asked, &#8220;If I use routing, can I access query string variables using JavaScript?&#8221;</p>
<p>The question isn&#8217;t as confused as it sounds on the surface. Of course, if one uses routing / URL rewriting, it&#8217;s to remove query string variable and make them part of what appears to be a permanent file structure.</p>
<p>In other words, this:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">http://www.server.com/path/to/file.aspx?v1=foo&amp;v2=bar</pre>
<p>Becomes this:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">http://www.server.com/path/to/file/v1/foo/v2/bar/</pre>
<p>The questioner really means, is there a way, after rewriting a URL, to extract key-&gt;value pairs from it via JavaScript? The answer is yes; rather than using the <a href="http://w3schools.com/jsref/prop_loc_search.asp" target="_blank">location.search</a> property, which allows JavaScript to get the querystring parameters of a URL, we use <a href="http://w3schools.com/jsref/prop_loc_pathname.asp" target="_blank">location.pathname</a> to get the part of the URL that follows the domain, and use that to create our key-&gt;value pairs.</p>
<p><span id="more-3445"></span>In the case of query strings, one can, in JavaScript, use location.search to get query string pairs from the current URL.</p>
<pre class="brush: jscript; title: ; notranslate">alert(location.search);</pre>
<p>If we invoke this JavaScript on the first URL, we get the entire query string, including the question mark:</p>
<p><img class="alignnone size-full wp-image-3448" title="Query string alert" src="http://www.dougv.com/wp-content/uploads/2010/12/alert01.jpg" alt="" width="355" height="117" /></p>
<p>Then, to get the key-value pairs, we&#8217;d simply strip off the leading question mark, then split the remaining string into an associative array, like so:</p>
<pre class="brush: jscript; title: ; notranslate">
//get key-&gt;value pairs
var qs = location.search;
qs = qs.substring(1);
var a = qs.split('&amp;');

var b;
var i;
var output = new Array();

for(i = 0; i &lt; a.length; i++) {
	//split each key-&gt;value pair
	b = a[i].split('=');
	//add each pair to output array
	output[b[0]] = b[1];
}
</pre>
<p>Of course, we can&#8217;t use location.search to get query string variables if we&#8217;ve made those variables part of the file path, as in a URL rewrite / Routing. We get a null string if we try:</p>
<p><img class="alignnone size-full wp-image-3449" title="No query string" src="http://www.dougv.com/wp-content/uploads/2010/12/alert02.jpg" alt="" width="355" height="117" /></p>
<p>But we can use location.pathname to get the URL to our file, and modify our JavaScript to create key-&gt;value pairs from that URL:</p>
<pre class="brush: jscript; title: ; notranslate">
//get key-&gt;value pairs from URL
var qs = location.pathname;
//strip leading path slash
qs = qs.substring(1);

var a = qs.split('/');
var i;
var output = new Array();

for(i = 0; i &lt; a.length; i += 2) {
	//append key-&gt;value pairs to output array
	output[a[i]] = a[i + 1];
}
</pre>
<h3>Alternative: A URL That Does Not Begin With Key-&gt;Value Pairs</h3>
<p>The example above assumes that we have a URL patterned specifically after key-value pairs, and that those pairs begin at the start of the URL. In other words, the above rewritten / routed URL and JavaScript would create an array like:</p>
<pre class="brush: jscript; title: ; notranslate">
output['v1'] == 'foo';
output['v2'] == 'bar';
</pre>
<p>So we&#8217;d need to modify this JavaScript if the rewritten / routed URL does not begin immediately with key-&gt;value pairs. For example, suppose this is our rewritten URL:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">http://www.server.com/store/category/toys/type/dolls/maker/mattel/</pre>
<p>In this case, let&#8217;s suppose that &#8220;store&#8221; isn&#8217;t part of the key-&gt;value chain we want. Or, to make it plainer, if we were using a query string, this is how the URL would look:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">http://www.server.com/store.php?category=toys&amp;type=dolls&amp;maker=mattel/</pre>
<p>In that case, we&#8217;d need to adjust our for loop to skip over &#8220;store,&#8221; since it isn&#8217;t relevant to the key-&gt;value pair extraction. We can do that quite easily by simply starting the for loop at 1, rather than zero:</p>
<pre class="brush: jscript; title: ; notranslate">
//get key-&gt;value pairs from URL
var qs = location.pathname;
//strip leading path slash
qs = qs.substring(1);

var a = qs.split('/');
var i;
var output = new Array();

for(i = 1; i &lt; a.length; i += 2) {
	//append key-&gt;value pairs to output array
	output[a[i]] = a[i + 1];
}
</pre>
<p>If the URL looked like this:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">http://www.server.com/site/store/category/toys/type/dolls/maker/mattel/</pre>
<p>And &#8220;site&#8221; and &#8220;store&#8221; aren&#8217;t part of the key-&gt;value array we want to build, then we would start the for loop at 2, rather than 0.</p>
<p>Note that we can also end the for loop early, if the URL has trailing path information that shouldn&#8217;t be considered part of the key-&gt;values array.</p>
<h3>Keyless Array</h3>
<p>Another option here is to rewrite / route our URLs without keys.</p>
<p>Let&#8217;s look at the store URL sample, above. We know that we want to get values for category, type and maker. But probably every URL our JavaScript will process is always going to have those elements in the same order.</p>
<p>In other words, every URL that comes to our page is going to have category first, then type, then maker. So do we even need keys? Our URL could be much shorter and simpler if we eliminated them:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">http://www.server.com/toys/dolls/mattel/</pre>
<p>Our JavaScript is also much simpler: We can now use the initial split of the filepath variable.</p>
<pre class="brush: jscript; title: ; notranslate">
//get key-&gt;value pairs from URL
var qs = location.pathname;
//strip leading path slash
qs = qs.substring(1);

var output = qs.split('/');
//output[0] == 'toys'
//output[1] == 'dolls'
//output[2] == 'mattel'
</pre>
<h3>The Right Rewriting / Routing Rules Make A Big Difference</h3>
<p>If you&#8217;ve chosen the proper URL rewrite / routing rules, you shouldn&#8217;t have to even work this hard to extract your former query string key-&gt;value pairs. The right pattern is key.</p>
<p>I distribute this code under the GNU GPL version 3.</p>
<p>All links in this post on delicious: <a href="http://www.delicious.com/dougvdotcom/getting-querystring-values-from-a-rewritten-url-asp-net-routing-url" target="_blank">http://www.delicious.com/dougvdotcom/getting-querystring-values-from-a-rewritten-url-asp-net-routing-url</a></p>
<p><em>* Why Microsoft feels the need to re-brand common technologies is beyond me. It took them forever to adopt URL rewriting officially; and while &#8220;routing&#8221; is technically a correct description of what a rewrite engine does, it only makes it harder for developers to discuss patterns and practices with others when Microsoft insists on calling roses by other names.</em></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2007/06/22/going-to-a-new-url-via-a-drop-down-list-javascript-and-dom-php-aspnet/" rel="bookmark">Going To A New URL Via A Drop-Down List: JavaScript And DOM, PHP, ASP.NET</a> (25.2)</li>
				<li><a href="https://www.dougv.com/2009/08/12/new-url-for-asp-net-demos-dougv-net/" rel="bookmark">New URL For ASP.NET Demos: dougv.net</a> (24.6)</li>
				<li><a href="https://www.dougv.com/2009/06/13/retaining-values-in-a-form-following-php-postback-and-clearing-form-values-after-successful-php-form-processing/" rel="bookmark">Retaining Values In A Form Following PHP Postback And Clearing Form Values After Successful PHP Form Processing</a> (19)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/rest/" title="REST" rel="tag">REST</a>, <a href="https://www.dougv.com/tag/rewrite/" title="rewrite" rel="tag">rewrite</a>, <a href="https://www.dougv.com/tag/seo/" title="SEO" rel="tag">SEO</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="https://www.dougv.com/tag/web-server/" title="web server" rel="tag">web server</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2010/12/10/getting-querystring-values-from-a-rewritten-url-asp-net-routing-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FAQ Released For Microsoft ASP.NET CryptographicException Attack</title>
		<link>https://www.dougv.com/2010/09/21/faq-released-for-microsoft-asp-net-cryptographicexception-attack/</link>
		<comments>https://www.dougv.com/2010/09/21/faq-released-for-microsoft-asp-net-cryptographicexception-attack/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 05:19:01 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[Scott Guthrie]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://www.dougv.com/blog/?p=3328</guid>
		<description><![CDATA[Scott Guthrie, Microsoft&#8217;s corporate vice president for the .NET platform, posted on his blog late Monday a FAQ about the ASP.NET CryptographicException vulnerability. Highlights: All versions of ASP.NET are affected. That includes WebForms and MVC versions 1 and 2. Sharepoint is affected, too. A workaround on how to employ a new generic error document for [...]<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" rel="bookmark">Live From The Microsoft Launch 2010 Event In Boston</a> (18.3)</li>
				<li><a href="https://www.dougv.com/2010/09/18/major-security-hole-in-asp-net-requires-error-redirect-workaround/" rel="bookmark">Major Security Hole In ASP.NET Requires Error Redirect Workaround</a> (18.3)</li>
				<li><a href="https://www.dougv.com/2006/11/11/using-national-weather-service-xml-feeds-with-aspnet-adonet-and-xsl/" rel="bookmark">Using National Weather Service XML Feeds With ASP.NET, ADO.NET And XSL</a> (11.7)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>Scott Guthrie, Microsoft&#8217;s corporate vice president for the .NET platform, posted on his blog late Monday <a href="http://weblogs.asp.net/scottgu/archive/2010/09/20/frequently-asked-questions-about-the-asp-net-security-vulnerability.aspx" target="_blank">a FAQ</a> about <a href="http://www.microsoft.com/technet/security/advisory/2416728.mspx" target="_blank">the ASP.NET CryptographicException vulnerability</a>.</p>
<p>Highlights:</p>
<ul>
<li><strong>All versions of ASP.NET are affected.</strong> That includes WebForms and MVC versions 1 and 2.</li>
<li><strong>Sharepoint is affected, too.</strong> A workaround on how to employ a new generic error document for Sharepoint is <a href="http://blogs.msdn.com/b/sharepoint/archive/2010/09/21/security-advisory-2416728-vulnerability-in-asp-net-and-sharepoint.aspx" target="_blank">detailed at that team&#8217;s blog</a>.</li>
<li><strong>Everyone should employ the recommended workarounds</strong>.</li>
<li><strong>You have to route all HTTP errors to the workaround&#8217;s generic error page. </strong>Otherwise, the hack still works.</li>
<li><strong>A patch will be released as a Windows Update hotfix</strong>, but no release date has been set yet.</li>
<li><strong>Check your logs for CryptographicException errors.</strong> If you see them, it&#8217;s possible you are being probed.</li>
</ul>
<p>I take this very seriously. There&#8217;s a tool and <a href="http://threatpost.com/en_us/blogs/demo-aspnet-padding-oracle-attack-091710" target="_blank">video tutorial</a> out there detailing how to run this exploit, so every script kiddie in the world is looking for sites to exploit, I am sure.</p>
<p>All links in this post on delicious: <a href="http://www.delicious.com/dougvdotcom/faq-released-for-microsoft-asp-net-cryptographicexception-attack" target="_blank">http://www.delicious.com/dougvdotcom/faq-released-for-microsoft-asp-net-cryptographicexception-attack</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" rel="bookmark">Live From The Microsoft Launch 2010 Event In Boston</a> (18.3)</li>
				<li><a href="https://www.dougv.com/2010/09/18/major-security-hole-in-asp-net-requires-error-redirect-workaround/" rel="bookmark">Major Security Hole In ASP.NET Requires Error Redirect Workaround</a> (18.3)</li>
				<li><a href="https://www.dougv.com/2006/11/11/using-national-weather-service-xml-feeds-with-aspnet-adonet-and-xsl/" rel="bookmark">Using National Weather Service XML Feeds With ASP.NET, ADO.NET And XSL</a> (11.7)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/hacking/" title="hacking" rel="tag">hacking</a>, <a href="https://www.dougv.com/tag/iis/" title="IIS" rel="tag">IIS</a>, <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/scott-guthrie/" title="Scott Guthrie" rel="tag">Scott Guthrie</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="https://www.dougv.com/tag/web-server/" title="web server" rel="tag">web server</a>, <a href="https://www.dougv.com/tag/web-services/" title="Web Services" rel="tag">Web Services</a>, <a href="https://www.dougv.com/tag/windows-server/" title="Windows Server" rel="tag">Windows Server</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2010/09/21/faq-released-for-microsoft-asp-net-cryptographicexception-attack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Major Security Hole In ASP.NET Requires Error Redirect Workaround</title>
		<link>https://www.dougv.com/2010/09/18/major-security-hole-in-asp-net-requires-error-redirect-workaround/</link>
		<comments>https://www.dougv.com/2010/09/18/major-security-hole-in-asp-net-requires-error-redirect-workaround/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 14:44:26 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[Scott Guthrie]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://www.dougv.com/blog/?p=3316</guid>
		<description><![CDATA[A major security flaw in ASP.NET was announced on Friday &#8212; one that affects all versions and can allow an attacker to see ViewState and web.config data in clear text. As such, everyone who has made an ASP.NET Web site should take this threat very seriously. Microsoft is putting together a patch. Until then, they [...]<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/09/13/xkcd-nails-the-real-security-threat/" rel="bookmark">xkcd Nails The Real Security Threat</a> (14.5)</li>
				<li><a href="https://www.dougv.com/2006/12/09/fixing-a-bad-minute-error-message-when-trying-to-use-crontab-with-certain-unix-text-editors/" rel="bookmark">Fixing A &quot;Bad Minute&quot; Error Message When Trying To Use Crontab With Certain Unix Text Editors</a> (13.5)</li>
				<li><a href="https://www.dougv.com/2008/06/10/fixing-an-unterminated-string-literal-error-in-an-ajax-javascript-httprequest/" rel="bookmark">Fixing An &quot;Unterminated String Literal&quot; Error In An AJAX JavaScript HttpRequest</a> (12.9)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://www.microsoft.com/technet/security/advisory/2416728.mspx" target="_blank">major security flaw</a> in ASP.NET was announced on Friday &#8212; one that <a href="http://blogs.technet.com/b/srd/archive/2010/09/17/understanding-the-asp-net-vulnerability.aspx" target="_blank">affects all versions</a> and can allow an attacker to see <a href="http://msdn.microsoft.com/en-us/library/ms972976.aspx" target="_blank">ViewState</a> and web.config data in clear text.</p>
<p>As such, everyone who has made an ASP.NET Web site should take this threat very seriously.</p>
<p>Microsoft is putting together a patch. Until then, they <a href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" target="_blank">suggest a workaround of turning <em>on</em> customErrors</a>, and having it point to a single error file.</p>
<p>For ASP.NET versions 1.x, 2.0 and 3.5, create a single HTML-based error page, upload it to the root directory of your Web site, then add or change the <a href="http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx" target="_blank">customErrors</a> section in your web.config file with the following:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;configuration&gt;
   &lt;system.web&gt;
      &lt;customErrors mode=&quot;On&quot; defaultRedirect=&quot;~/error.html&quot; /&gt;
   &lt;/system.web&gt;
&lt;/configuration&gt;
</pre>
<p>Where, of course, error.html is the name of the error page you made.</p>
<p>If your site uses ASP.NET 3.5 SP1 or ASP.NET 4.0, use the custom ASPX error page located on Scott Guthrie&#8217;s blog (VB and C# versions), and change the customErrors section of your web.config file thus:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;configuration&gt;
   &lt;system.web&gt;
     &lt;customErrors mode=&quot;On&quot; redirectMode=&quot;ResponseRewrite&quot; defaultRedirect=&quot;~/error.aspx&quot; /&gt;
   &lt;/system.web&gt;
&lt;/configuration&gt;
</pre>
<p>Where, of course, error.aspx is the name of the error page you created.</p>
<p>To make things easier, I have <a href='http://www.dougv.com/wp-content/uploads/2010/09/aspnet_error_files.zip'>zipped up copies of the three error documents</a>  &#8212; error.html, and the VB.NET / C# versions of the ASP.NET error files &#8212; for download. I distribute all code under the GNU GPL.</p>
<p>I&#8217;m taking this threat very seriously and have patched all my ASP.NET sites as advised.</p>
<p>All links in this post on delicious: <a href="http://www.delicious.com/dougvdotcom/major-security-hole-in-asp-net-requires-error-redirect-workaround">http://www.delicious.com/dougvdotcom/major-security-hole-in-asp-net-requires-error-redirect-workaround</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/09/13/xkcd-nails-the-real-security-threat/" rel="bookmark">xkcd Nails The Real Security Threat</a> (14.5)</li>
				<li><a href="https://www.dougv.com/2006/12/09/fixing-a-bad-minute-error-message-when-trying-to-use-crontab-with-certain-unix-text-editors/" rel="bookmark">Fixing A &quot;Bad Minute&quot; Error Message When Trying To Use Crontab With Certain Unix Text Editors</a> (13.5)</li>
				<li><a href="https://www.dougv.com/2008/06/10/fixing-an-unterminated-string-literal-error-in-an-ajax-javascript-httprequest/" rel="bookmark">Fixing An &quot;Unterminated String Literal&quot; Error In An AJAX JavaScript HttpRequest</a> (12.9)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/hacking/" title="hacking" rel="tag">hacking</a>, <a href="https://www.dougv.com/tag/iis/" title="IIS" rel="tag">IIS</a>, <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/rewrite/" title="rewrite" rel="tag">rewrite</a>, <a href="https://www.dougv.com/tag/scott-guthrie/" title="Scott Guthrie" rel="tag">Scott Guthrie</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="https://www.dougv.com/tag/web-server/" title="web server" rel="tag">web server</a>, <a href="https://www.dougv.com/tag/windows-server/" title="Windows Server" rel="tag">Windows Server</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2010/09/18/major-security-hole-in-asp-net-requires-error-redirect-workaround/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designers And Developers: Donate Your Time, Talent At New England GiveCamp, June 11-13, 2010</title>
		<link>https://www.dougv.com/2010/05/13/designers-and-developers-donate-your-time-talent-at-new-england-give-camp-june-11-13-2010/</link>
		<comments>https://www.dougv.com/2010/05/13/designers-and-developers-donate-your-time-talent-at-new-england-give-camp-june-11-13-2010/#comments</comments>
		<pubDate>Fri, 14 May 2010 00:49:33 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Transact-SQL]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Plugins]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[crowdsourcing]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.dougv.com/blog/?p=3150</guid>
		<description><![CDATA[One of the things I found out about at Tuesday&#8217;s MSDN Northeast Roadshow stop in Augusta is the first New England GiveCamp, June 11-13 at Microsoft&#8217;s Northeast Research and Development center in Cambridge, MA. I&#8217;m attending, and I&#8217;d urge you to do so. A GiveCamp is basically a gathering of developers, DBAs, project managers, designers [...]<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/04/14/visual-studio-2010-net-4-events-for-maine-based-developers/" rel="bookmark">Visual Studio 2010 / .NET 4 Events For Maine-Based Developers</a> (33.8)</li>
				<li><a href="https://www.dougv.com/2010/05/12/msdn-northeast-roadshow-augusta-me-may-11-2010-recap/" rel="bookmark">MSDN Northeast Roadshow, Augusta, ME, May 11, 2010 Recap</a> (17.1)</li>
				<li><a href="https://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" rel="bookmark">Live From The Microsoft Launch 2010 Event In Boston</a> (16.1)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>One of the things I found out about at <a href="http://www.dougv.com/2010/05/12/msdn-northeast-roadshow-augusta-me-may-11-2010-recap/">Tuesday&#8217;s MSDN Northeast Roadshow stop in Augusta</a> is the <a href="http://newenglandgivecamp.org/about/" target="_blank">first New England GiveCamp, June 11-13</a> at <a href="http://microsoftcambridge.com/Default.aspx" target="_blank">Microsoft&#8217;s Northeast Research and Development center</a> in Cambridge, MA.</p>
<p><a href="http://newenglandgivecamp.org/" target="_blank"><img class="alignleft" title="New England GiveCamp" src="http://eventbrite-s3.s3.amazonaws.com/eventlogos/3133703/658584845.png" alt="New England GiveCamp" width="305" height="200" /></a>I&#8217;m attending, and I&#8217;d urge you to do so.</p>
<p>A <a href="http://givecamp.org/" target="_blank">GiveCamp</a> is basically a gathering of developers, DBAs, project managers, designers and other IT folks in a given place, to donate their time and skills to charitable projects.</p>
<p>In the case of the New England GiveCamp, <a href="http://newenglandgivecamp.org/the-people-youd-be-helping/" target="_blank">typical projects</a> include upgrading Access databases, or converting Excel spreadsheets to Access; integrating open-source tools, such as Joomla, Drupal and Django, into existing Web sites; adding various gizmos to and tuning up existing Web sites; and several requests to spruce up the look of various types of collateral.</p>
<p>I believe the biggest mistake you could make in deciding whether to participate is thinking that you don&#8217;t have the kind of skills needed. From what&#8217;s been said at the GiveCamp&#8217;s Web site, there&#8217;s going to be plenty to do, whether you&#8217;re <a href="http://torvalds-family.blogspot.com/" target="_blank">Linus Torvalds</a> or <a href="http://comics.com/reality_check/2000-06-05/" target="_blank">Linus Van Pelt</a>.</p>
<p>I think this goes doubly for graphic designers. Trust me, if you are an artistic person, no matter how little you think of your work, your worst effort is 10 times better than the best design ever produced by a programmer. I am speaking from extensive personal experience here. We&#8217;re the people who gave the Internet <a href="http://bancomicsans.com/main/" target="_blank">Comic Sans</a>, animated GIFs and the &lt;marquee&gt; tag, remember. Please, save us from ourselves.</p>
<p>As the Northeast GiveCamp put it, &#8220;<strong></strong>If you  have the passion, we’ll find a place for you.&#8221;</p>
<blockquote><p>In addition to the technical work on site, there are a myriad other  volunteer opportunities both before and during the event, including  registration, sponsor solicitation, organizing the development teams and  matching them to non-profit organizations, handling logistics for food  and snacks, and others we’ll discover along this journey!</p></blockquote>
<p><span id="more-3150"></span>And, of course, <a href="http://newenglandgivecamp.org/sponsors/" target="_blank">businesses can help, too</a>. The GiveCamp says they&#8217;re not so much interested in money as they are services: Donation of meals and promotional items (mugs / T-shirts) are specifically mentioned.</p>
<p>Microsoft will make sure you get fed during the event. They will also provide crash space in NERD, provided you bring your own sleeping bag / air mattress; and they have showers on site (BYO toiletries). If you don&#8217;t like that idea, NERD is very near the Kendall / MIT MBTA station.</p>
<p>The only specific demands the GiveCamp has are, if you&#8217;re providing technical help to a project, commit to doing the entire weekend; and bring your own laptop (read: any needed software, such as Visual Studio / Dreamweaver, too; how you&#8217;ll tackle the project to which you have been assigned will be determined by a conference call before the event).</p>
<p>If you can&#8217;t commit to the whole weekend, the GiveCamp could still use your help, and will work within your schedule.</p>
<p>I really do hope you consider participating. <a href="http://newenglandgivecamp.eventbrite.com/" target="_blank">Register at the GiveCamp&#8217;s EventBrite page</a>.</p>
<p>Look at it as giving back, or paying forward; either way, you&#8217;ll help people who need the help, and meet people who can help you, in turn.</p>
<p>All links in this post on delicious: <a href="http://delicious.com/dougvdotcom/designers-and-developers-donate-your-time-talent-at-new-england-give-camp-june-11-13-2010" target="_blank">http://delicious.com/dougvdotcom/designers-and-developers-donate-your-time-talent-at-new-england-give-camp-june-11-13-2010</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/04/14/visual-studio-2010-net-4-events-for-maine-based-developers/" rel="bookmark">Visual Studio 2010 / .NET 4 Events For Maine-Based Developers</a> (33.8)</li>
				<li><a href="https://www.dougv.com/2010/05/12/msdn-northeast-roadshow-augusta-me-may-11-2010-recap/" rel="bookmark">MSDN Northeast Roadshow, Augusta, ME, May 11, 2010 Recap</a> (17.1)</li>
				<li><a href="https://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" rel="bookmark">Live From The Microsoft Launch 2010 Event In Boston</a> (16.1)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/crowdsourcing/" title="crowdsourcing" rel="tag">crowdsourcing</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2010/05/13/designers-and-developers-donate-your-time-talent-at-new-england-give-camp-june-11-13-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSDN Northeast Roadshow, Augusta, ME, May 11, 2010 Recap</title>
		<link>https://www.dougv.com/2010/05/12/msdn-northeast-roadshow-augusta-me-may-11-2010-recap/</link>
		<comments>https://www.dougv.com/2010/05/12/msdn-northeast-roadshow-augusta-me-may-11-2010-recap/#comments</comments>
		<pubDate>Wed, 12 May 2010 20:23:36 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[Chris Bowen]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Jim O'Neil]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://www.dougv.com/blog/?p=3125</guid>
		<description><![CDATA[After the nearly complete disappointment of Launch 2010 Boston, I had given serious thought to not going to the MSDN Northeast Roadshow stop in Augusta, ME on Tuesday, May 11. I figured it would be little more than a regurgitation of what happened at last month&#8217;s event. I&#8217;m glad I decided to go. What a [...]<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2009/08/14/msdn-northeast-roadshow-sept-24-in-augusta-me/" rel="bookmark">MSDN Northeast Roadshow: Sept. 24 in Augusta, ME</a> (67.1)</li>
				<li><a href="https://www.dougv.com/2009/03/05/msdn-roadshow-in-augusta-march-19-well-worth-the-time/" rel="bookmark">MSDN Roadshow In Augusta, March 19: Well Worth The Time</a> (50.1)</li>
				<li><a href="https://www.dougv.com/2010/04/14/visual-studio-2010-net-4-events-for-maine-based-developers/" rel="bookmark">Visual Studio 2010 / .NET 4 Events For Maine-Based Developers</a> (28.7)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" target="_blank">the nearly complete disappointment of Launch 2010 Boston</a>, I had given serious thought to not going to the MSDN Northeast Roadshow stop in Augusta, ME on Tuesday, May 11. I figured it would be little more than a regurgitation of what happened at last month&#8217;s event.</p>
<p>I&#8217;m glad I decided to go. What a huge difference.</p>
<p>In  half the time, <a href="http://blogs.msdn.com/jimoneil/" target="_blank">Jim O&#8217;Neil</a> and <a href="http://blogs.msdn.com/cbowen/" target="_blank">Chris Bowen</a> provided immeasurably more valuable and interesting information about <a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx" target="_blank">Visual Studio 2010</a> and changes to <a href="http://www.silverlight.net" target="_blank">Silverlight</a>, multithreading, <a href="http://www.asp.net" target="_blank">ASP.NET</a> and an overview of <a href="http://developer.windowsphone.com" target="_blank">Windows Phone 7</a>. Here&#8217;s a recap.</p>
<div id="attachment_3126" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-3126 " title="MSDN Northeast Roadshow, May 11, 2010, Augusta, ME" src="http://www.dougv.com/wp-content/uploads/2010/05/2010-05-11-13.30.57.jpg" alt="MSDN Northeast Roadshow, May 11, 2010, Augusta, ME" width="600" height="286" /><p class="wp-caption-text">Jim O&#39;Neil describes Silverlight 4&#39;s new video / webcam support features.</p></div>
<p><strong>Silverlight 4</strong>: Lately, listening to Microsoft describe a new Web technology brings to mind the phrase &#8220;a day late and a dollar short.&#8221; That&#8217;s certainly the case with Silverlight 4.</p>
<p>Admittedly, Microsoft has shifted the emphasis behind Silverlight to be less a clone of <a href="http://www.adobe.com/devnet/flash/" target="_blank">Flash</a> and more an extension to the Web of <a href="http://msdn.microsoft.com/en-us/library/ms754130.aspx" target="_blank">Windows Presentation Foundation</a>. But the &#8220;new features&#8221; O&#8217;Neil described on Tuesday were very much old technologies for Flash, and pretty much obsolete tech given <a href="http://en.wikipedia.org/wiki/HTML5" target="_blank">HTML5</a>.</p>
<p>Specifically, Silverlight 4 supports Web cams and microphones; TCP/UDP; printing; and a multiple-trust-level model that includes access to the file system, cross-domain requests and COM integration. Additionally, the <a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx" target="_blank">XAML</a> one writes to render Silverlight, while still different from WPF XAML, is a lot more like WPF.</p>
<p>Silverlight is, therefore, weaker than Flash and stronger than it at the same time. But it seems mostly moot, given that Flash itself is falling out of favor in response to the HTML5 specification&#8217;s API support for audio, video and other complex objects. Admittedly, there are things one can do in Silverlight &#8212; namely, presenting stored data and integrating existing COM components, such as text-to-speech or an interface to a proprietary business object / program &#8212; that one cannot do directly in HTML5.</p>
<p>That seems to me more likely to matter when making a corporate intranet or the like. I didn&#8217;t see much hope for Silverlight when it was introduced in 2007, and I still don&#8217;t see a future for it.</p>
<p><span id="more-3125"></span><strong>Parallel Programming:</strong> I admit I&#8217;m not as up-to-speed as I should be with <a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx" target="_blank">parallel programming</a>, largely because 99 out of 100 things I program are Web apps. So maybe Bowen&#8217;s presentation on .NET 4&#8242;s revisions to multithreading aren&#8217;t that exciting, but I found them fascinating.</p>
<p>One of the most interesting things .NET does is employ local work-stealing queues. In other words, each thread can queue, specific to it, tasks to perform; but if a neighboring thread has nothing to do, it can reach into that other thread&#8217;s queue and process the job, too. Basically, that means optimizing each thread to work almost constantly, which is, of course, a wholesale improvement in processing efficiency.</p>
<p>A couple of neat tricks Bowen showed that can be easily integrated into a current .NET project are <a href="http://www.lovethedot.net/2009/02/parallelfor-deeper-dive-parallel.html" target="_blank">Parallel.For</a> and <a href="http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.invoke.aspx" target="_blank">Parallel.Invoke</a>. Parallel.For effectively lets you multithread a standard for loop; Parallel.Invoke lets you multithread a series of method / function calls.</p>
<p><strong>ASP.NET 4 and Windows Azure:</strong> Once again, I get the feeling that Microsoft is a bit behind the times when it comes to Web development technologies. And while integrating <a href="http://www.microsoft.com/windowsazure/getstarted/" target="_blank">Azure</a>, Microsoft&#8217;s cloud computing service, into Web development is pretty progressive, the rest of the improvements to ASP.NET, especially Web forms, is more fixing things that were broken than making things better.</p>
<p>Notable in ASP.NET 4 Web forms is the ability to disable viewstate at the page level, but enable it on a per-control level; previously, one could disable viewstate for a specific control while enabling it on the page level.</p>
<p><a href="http://www.iis.net/" target="_blank">IIS 7</a> also more closely integrates the ASP.NET engine, so that services such as membership can be extended to plain HTML pages.</p>
<p>Web forms also has a slightly improved client-side naming convention for rendered controls, but in all honesty, it&#8217;s still a mess to address, via JavaScript, individual elements of, say, a GridView.</p>
<p><a href="http://msdn.microsoft.com/en-us/library/cc488469.aspx" target="_blank">Dynamic Data</a> sites are improved by adding <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.entitydatasource.aspx" target="_blank">EntityDataSource</a> to the list of available data sources; and the MVC aspects of ASP.NET have been improved, although a lack of time prevented O&#8217;Neil from getting into them in detail.</p>
<p>He did have an opportunity to briefly go over using Azure to host both the application and data for a Web site, which looks interesting; but given how cheap Web hosting is, and that most Web apps can happily live on a shared hosting solution, or on a third-hand server that would otherwise be junked, I don&#8217;t see Azure Web programming being of much use to most folks.</p>
<p><strong>Windows Phone 7: </strong>Due to previous presentations running long, Bowen ran short of time to talk about Windows Phone 7; I think &#8220;abortive&#8221; is a good one-word description of how this presentation went.</p>
<p>Fortunately, Windows Phone 7 won&#8217;t hit the market until Christmas time, so maybe he&#8217;ll get another crack at it before then. Until then, check out <a href="http://developer.windowsphone.com" target="_blank">developer.windowsphone.com</a> to get the tools (including an emulator), see tutorials, etc.</p>
<p><strong>Swag And Final Thoughts:</strong> This event included the same T-shirt and VS 2010 Ultimate trial disc as Launch 2010 Boston, but an upgraded notebook and pen. I declined them. But I did win an awesome, insulated lunch bag at the end of the event:</p>
<div id="attachment_3134" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-3134" title="The &quot;Heroes Happen Here&quot; insulated lunch bag I won" src="http://www.dougv.com/wp-content/uploads/2010/05/2010-05-12-12.51.15.jpg" alt="The &quot;Heroes Happen Here&quot; insulated lunch bag I won" width="600" height="461" /><p class="wp-caption-text">The &quot;Heroes Happen Here&quot; lunch bag I won at the end of the May 11, 2010 MSDN Northeast Roadshow event in Augusta.</p></div>
<p>Note the &#8220;Heroes Happen Here&#8221; tag, which indicates this was a giveaway related to the VS 2008 / <a href="http://www.microsoft.com/windowsserver2008/en/us/default.aspx" target="_blank">Windows Server 2008</a> / <a href="http://www.microsoft.com/sqlserver/2008/en/us/" target="_blank">SQL Server 2008</a> launch. Oh, the irony.</p>
<p>I swear my shining opinion of this Roadshow event has nothing to do with winning the lunch bag. Statistically speaking, it was difficult <em>not </em>to win; I&#8217;d put the ratio of prizes to people at 4-1. The giveaways included two copies of VS 2010 Professional, several Windows mobile mouses, books, totes and other very cool stuff.</p>
<p>So yes, it&#8217;s nice to have won something cool (no pun intended), but it&#8217;s far better to have had my time rewarded with useful information. This event really renewed my faith in MSDN support for developers and took a lot of the sting out of the disappointment of Launch 2010 Boston.</p>
<p>Let&#8217;s hope Microsoft continues to support the Northeast Roadshow for a long time to come, because it is, by far, the most valuable resource I&#8217;ve found for learning about Microsoft tools and technologies.</p>
<p><strong>Materials and Links:</strong> You can get the Powerpoints O&#8217;Neil and Bowen used at <a href="http://tinyurl.com/NERDShow0510" target="_blank">http://tinyurl.com/NERDShow0510</a>. Eventually, screencasts will be available at <a href="http://code.msdn.microsoft.com/northeast" target="_blank">http://code.msdn.microsoft.com/northeast</a>.</p>
<p>I recommend joining the <a href="http://www.facebook.com/group.php?gid=4825423963" target="_blank">Northeast Roadshow&#8217;s Facebook group</a>. But remember, group Wall posts aren&#8217;t included in your news stream, so you have to physically go to the group&#8217;s page to see what&#8217;s happening.</p>
<p>All links in this post on delicious: <a href="http://delicious.com/dougvdotcom/msdn-northeast-roadshow-augusta-me-may-11-2010-recap" target="_blank">http://delicious.com/dougvdotcom/msdn-northeast-roadshow-augusta-me-may-11-2010-recap</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2009/08/14/msdn-northeast-roadshow-sept-24-in-augusta-me/" rel="bookmark">MSDN Northeast Roadshow: Sept. 24 in Augusta, ME</a> (67.1)</li>
				<li><a href="https://www.dougv.com/2009/03/05/msdn-roadshow-in-augusta-march-19-well-worth-the-time/" rel="bookmark">MSDN Roadshow In Augusta, March 19: Well Worth The Time</a> (50.1)</li>
				<li><a href="https://www.dougv.com/2010/04/14/visual-studio-2010-net-4-events-for-maine-based-developers/" rel="bookmark">Visual Studio 2010 / .NET 4 Events For Maine-Based Developers</a> (28.7)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/chris-bowen/" title="Chris Bowen" rel="tag">Chris Bowen</a>, <a href="https://www.dougv.com/tag/cloud-computing/" title="cloud computing" rel="tag">cloud computing</a>, <a href="https://www.dougv.com/tag/coding-standards/" title="coding standards" rel="tag">coding standards</a>, <a href="https://www.dougv.com/tag/developer-tools/" title="developer tools" rel="tag">developer tools</a>, <a href="https://www.dougv.com/tag/iis/" title="IIS" rel="tag">IIS</a>, <a href="https://www.dougv.com/tag/jim-oneil/" title="Jim O&#039;Neil" rel="tag">Jim O&#039;Neil</a>, <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/mobile/" title="mobile" rel="tag">mobile</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/productivity/" title="productivity" rel="tag">productivity</a>, <a href="https://www.dougv.com/tag/rest/" title="REST" rel="tag">REST</a>, <a href="https://www.dougv.com/tag/sharepoint/" title="Sharepoint" rel="tag">Sharepoint</a>, <a href="https://www.dougv.com/tag/silverlight/" title="Silverlight" rel="tag">Silverlight</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="https://www.dougv.com/tag/windows-phone/" title="Windows Phone" rel="tag">Windows Phone</a>, <a href="https://www.dougv.com/tag/windows-server/" title="Windows Server" rel="tag">Windows Server</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2010/05/12/msdn-northeast-roadshow-augusta-me-may-11-2010-recap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Visual Studio Launch 2010 Boston Event, Reconsidered</title>
		<link>https://www.dougv.com/2010/05/01/the-visual-studio-launch-2010-boston-event-reconsidered/</link>
		<comments>https://www.dougv.com/2010/05/01/the-visual-studio-launch-2010-boston-event-reconsidered/#comments</comments>
		<pubDate>Sat, 01 May 2010 07:33:39 +0000</pubDate>
		<dc:creator>Doug Vanderweide</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Customer Relations]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Chris Bowen]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[ethics]]></category>
		<category><![CDATA[Jim O'Neil]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[reputation]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://www.dougv.com/blog/?p=3059</guid>
		<description><![CDATA[Now that I&#8217;m a day or so removed from the Visual Studio &#8220;Launch 2010&#8243; event in Boston, have plenty of sleep under my belt, and the benefit of hindsight, I&#8217;d like to recap my impressions. I still consider Launch 2010 a significant disappointment, especially compared to the &#8220;Heroes Happen Here&#8221; launch of Visual Studio 2008 [...]<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" rel="bookmark">Live From The Microsoft Launch 2010 Event In Boston</a> (65.4)</li>
				<li><a href="https://www.dougv.com/2008/07/23/recursively-listing-files-in-a-directory-and-adding-their-names-to-a-text-file-in-visual-basic-net/" rel="bookmark">Recursively Listing Files In A Directory And Adding Their Names To A Text File In Visual Basic .NET</a> (14.6)</li>
				<li><a href="https://www.dougv.com/2006/10/04/dynamically-adding-javascript-to-aspnet-20-templated-master-pages/" rel="bookmark">Dynamically Adding JavaScript onLoad Event-Driven Scripts To ASP.NET 2.0 Templated / Master Page Content Pages</a> (14.3)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.
	</div>
]]></description>
			<content:encoded><![CDATA[<p>Now that I&#8217;m a day or so removed from the <a href="http://www.microsoft.com/business/2010events/DevEvents.aspx" target="_blank">Visual Studio &#8220;Launch 2010&#8243; event</a> in Boston, have plenty of sleep under my belt, and the benefit of hindsight, I&#8217;d like to recap my impressions.</p>
<p>I still consider Launch 2010 a significant disappointment, especially compared to the &#8220;Heroes Happen Here&#8221; launch of Visual Studio 2008 / SQL Server 2008 / Windows Server 2008 that was held in Manchester, NH, two years ago. But I should explain why, and maybe at least put in context, if not rephrase, <a href="http://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" target="_blank">my criticisms of Thursday</a>.</p>
<p><strong>Attendance: </strong>I need to clarify my attendance estimates from Thursday.</p>
<p>I&#8217;m guessing there were about 1,000 people in attendance at Launch 2010, which had three tracks: two all-day tracks for developers and IT professionals, and a half-day track for managers / decision makers. Of the total number of attendees, well over half  &#8212; at least 500 &#8212; were in the developer track. I don&#8217;t have an exact count because I don&#8217;t know who to ask for one, and I doubt there is an accurate count in any event, because Microsoft was allowing walk-ins throughout the event.</p>
<p>However many people were there, it was too many, at least for the developer track. They ran out of seats by 9:30 AM and it only got worse until 3:30 PM, after the ASP.NET session, after which a large number of people left. I did pop in on the IT pro track, after I couldn&#8217;t regain my seat following lunch; there were a few empty seats available there.</p>
<p>Allowing such a significant overflow is a huge kick in the balls. I took the time to register ahead of time. I took great pains to ensure I would arrive on time. If you&#8217;re letting people filter in six hours after they were supposed to show up, you&#8217;re not being fair to me &#8212; especially if I can&#8217;t fully enjoy the event.</p>
<p><span id="more-3059"></span>To me, this is straightforward: If you want people to come and go at their pleasure, don&#8217;t bother with preregistration.</p>
<p>Otherwise, start the event on time. If, say, 100 preregistered guests don&#8217;t show up, then allow 100 walk-ins to attend &#8212; and make them wait for a break, just like if they walked in late to a play or opera. In other words, Microsoft, have respect for the people who demonstrated their interest and sincerity by taking pains to follow the preregistration requirement and honor the schedule.</p>
<p>There were a lot of people at Heroes Happen Here, too; several hundred people went to the developer track. But I don&#8217;t recall people having to sit on the floor, or losing my seat, or being swept away by a human wave every time there was a break.</p>
<p><strong>Event staff and organization:</strong> The event staff was friendly, but their organization was awful.</p>
<p>I registered for the developer track. When I checked in, I received the developer track evaluation form. But my name tag said I was in the IT professional track, and the agenda they gave me was for the IT decision maker track. As I noted previously, lots of us got the wrong agenda, which &#8212; coupled with the hotel serving lunch early &#8212; caused a mixup that helped to ruin an already boring seminar on <a href="http://sharepoint2010.microsoft.com/Pages/default.aspx" target="_blank">SharePoint</a>.</p>
<p>When I asked for the proper agenda, immediately after the first seminar ended (about two hours after the event started), they told me they had run out.</p>
<p>At Heroes Happen Here, I received all the proper materials. It appears Microsoft used the same contractor to manage both events (<a href="http://www.crgevents.com/CRG/Content/Home.aspx" target="_blank">CRG Events</a>), so how things got so messed up is beyond me.</p>
<p><strong>The hotel and its staff: </strong>As I said before, the <a href="http://www.starwoodhotels.com/westin/property/overview/index.html?propertyID=1035" target="_blank">Westin Copley Place</a> is a very nice hotel. And the hotel staff was excellent, from the housekeepers to the managers.</p>
<p>Trash was policed often (which was critical, given the mess created by soda cans, coffee cups, plastic cups, bag lunches and a bunch of worthless papers shoved into the event packet); the management was constantly checking with event staff, and on their own accord, to ensure things were going well; I did not see or hear a single problem related to the facility.</p>
<p>The food served was excellent and plentiful. Even the coffee &#8212; Starbucks &#8212; was of considerably better quality than one normally encounters at a continental breakfast.</p>
<p>The <a href="http://www.radisson.com/manchesternh" target="_blank">Radisson in Manchester, NH</a> is also a nice hotel and also had a good staff, but it&#8217;s the difference between a Camry and a <a href="http://www.maybachusa.com/" target="_blank">Maybach</a>.</p>
<p><strong>The swag:</strong> Yes, much of my disappointment is with Microsoft not offering fully functional copies of <a href="http://www.microsoft.com/visualstudio/en-us/products" target="_blank">Visual Studio 2010</a>. And I don&#8217;t think it&#8217;s too much to ask, in exchange for giving them my audience for eight hours and evangelizing on their behalf, to get a useful copy of the thing they&#8217;re flogging.</p>
<p>At Heroes Happen Here, they not only gave away copies of VS 2008 Professional, they also gave away a copy of Windows Vista Ultimate and evaluation copies of Windows Server 2008. Additionally, because SQL Server 2008 wasn&#8217;t ready by the time of Heroes Happen Here, Microsoft sent us, later, fully functional copies of SQL Server 2008 Standard.</p>
<p>I really have to believe that the same could have been done here. At best, Microsoft shouldn&#8217;t set an expectation like this and not follow through later. Or, they should state in the event FAQ that evaluation software only will be distributed, rather than saying that &#8220;information is not available at this time.&#8221;</p>
<p>The Heroes Happen Here software offering generated tremendous amounts of goodwill, at least from me. Launch 2010&#8242;s paltry 90-day evaluation disc, and the <a href="http://www.diraction.ch/shopdocs/files/DOPdatasheet-faqs.pdf" target="_blank">Desktop Optimization disc (PDF file)</a> that I&#8217;ve already thrown in the trash, pretty much destroyed that goodwill in a fell swoop.</p>
<p>I&#8217;m not saying Microsoft needed to be as generous with software now as it was then. I would have been happy just getting a copy of VS 2010 Professional. I am saying that having three copies of VS 2010 Ultimate to give away, via drawing, to well over 500 people is actually counterproductive; it just rubs salt in the wound.</p>
<p><strong>The presentations: </strong>Microsoft hires interesting and smart people to promote and support its products. It&#8217;s always great to hear from <a href="http://blogs.msdn.com/cbowen/" target="_blank">Chris Bowen</a>, <a href="http://blogs.msdn.com/jimoneil/" target="_blank">Jim O&#8217;Neil</a> and <a href="http://blogs.msdn.com/bobfamiliar/" target="_blank">Bob Familiar</a>. And the remaining presenters &#8212; I&#8217;d tell you who they were, but I didn&#8217;t take notes at the time and I don&#8217;t have the right agenda to review &#8212; were affable and knowledgeable.</p>
<p>The keynote was a marketing pitch, plain and simple. The first session, on application lifecycle management, was entertaining but thin on practical examples. And the first SharePoint presentation was heavy on details about integrating old ASP.NET Web form applications, and completely deficient on <a href="http://msdn.microsoft.com/en-us/office/default.aspx" target="_blank">Office programming</a>.</p>
<p>Which was made more amusing since about three people, again out of about 500, held up their hands when the presenter asked who works in SharePoint. I was not one of them. Had he asked who does Office programming, I would have held up my hand &#8212; and I bet at least half the room would have, as well.</p>
<p>In other words, Microsoft wasted a lot of people&#8217;s time with that presentation; and even more with a second presentation on SharePoint that followed lunch.</p>
<p>Things got much better once Familiar, O&#8217;Neil and Bowen were allowed to do <a href="http://code.msdn.microsoft.com/northeast" target="_blank">MSDN Northeast Roadshow</a>-style presentations. But by then, my humor had largely turned.</p>
<p><strong>Networking:</strong> As I said, opportunities to mix and mingle weren&#8217;t that great before or during the event, because there were simply too many people going in too many directions.</p>
<p>There was a mixer announced after the event, in the form of a Microsoft employee shouting it across the lobby and into the elevators. I wish they had told me about that ahead of time, so I could have planned for it. I would have come to Boston a day ahead and stayed over. At the very least, I wish they had not sapped all my patience by that time.</p>
<p>The building of relationships is what these events are supposed to be all about. But Microsoft completely forgot to structure the event to make that even possible.</p>
<p><strong>What I take back: </strong>On Thursday, my exhaustion and exasperation came off as angry. In all honesty, at that time, that&#8217;s what I was: Angry. It was over as soon as I got to <a href="http://www.south-station.net/" target="_blank">South Station</a>, but I shouldn&#8217;t have been angry, period.</p>
<p>No one was operating with malice; at least, no one set out to make me wish I hadn&#8217;t attended. I am sure there are lots of reasons for things not going the way I wish they had; I am sure others consider Launch 2010 a major success; I am certain my perspective is neither authoritative nor omniscient. But I would be very interested in seeing the evaluation form results.</p>
<p><strong>What I stand by:</strong> Pretty much everything. It wasn&#8217;t a very good event. It won&#8217;t make me quit .NET programming, and I did learn some useful stuff. But it sure lowered my opinion of Microsoft.</p>
<p>All links in this post on delicious: <a href="http://www.delicious.com/dougvdotcom/the-visual-studio-launch-2010-boston-event-reconsidered" target="_blank">http://www.delicious.com/dougvdotcom/the-visual-studio-launch-2010-boston-event-reconsidered</a></p>
<div class="yarpp">
	<h5>Related Posts</h5>
		<ol>
				<li><a href="https://www.dougv.com/2010/04/29/live-from-the-microsoft-launch-2010-event-in-boston/" rel="bookmark">Live From The Microsoft Launch 2010 Event In Boston</a> (65.4)</li>
				<li><a href="https://www.dougv.com/2008/07/23/recursively-listing-files-in-a-directory-and-adding-their-names-to-a-text-file-in-visual-basic-net/" rel="bookmark">Recursively Listing Files In A Directory And Adding Their Names To A Text File In Visual Basic .NET</a> (14.6)</li>
				<li><a href="https://www.dougv.com/2006/10/04/dynamically-adding-javascript-to-aspnet-20-templated-master-pages/" rel="bookmark">Dynamically Adding JavaScript onLoad Event-Driven Scripts To ASP.NET 2.0 Templated / Master Page Content Pages</a> (14.3)</li>
			</ol>
	<p class="note">The numbers inside parentheses are relevance scores. Scoring is based, in order of priority, on title, category, content and tags. The higher the score, the more likely that post relates to this post.</p>
	</div>

	Tags: <a href="https://www.dougv.com/tag/chris-bowen/" title="Chris Bowen" rel="tag">Chris Bowen</a>, <a href="https://www.dougv.com/tag/cloud-computing/" title="cloud computing" rel="tag">cloud computing</a>, <a href="https://www.dougv.com/tag/developer-tools/" title="developer tools" rel="tag">developer tools</a>, <a href="https://www.dougv.com/tag/ethics/" title="ethics" rel="tag">ethics</a>, <a href="https://www.dougv.com/tag/jim-oneil/" title="Jim O&#039;Neil" rel="tag">Jim O&#039;Neil</a>, <a href="https://www.dougv.com/tag/marketing/" title="marketing" rel="tag">marketing</a>, <a href="https://www.dougv.com/tag/microsoft/" title="Microsoft" rel="tag">Microsoft</a>, <a href="https://www.dougv.com/tag/mobile/" title="mobile" rel="tag">mobile</a>, <a href="https://www.dougv.com/tag/msdn/" title="MSDN" rel="tag">MSDN</a>, <a href="https://www.dougv.com/tag/reputation/" title="reputation" rel="tag">reputation</a>, <a href="https://www.dougv.com/tag/sharepoint/" title="Sharepoint" rel="tag">Sharepoint</a>, <a href="https://www.dougv.com/tag/silverlight/" title="Silverlight" rel="tag">Silverlight</a>, <a href="https://www.dougv.com/tag/visual-studio/" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="https://www.dougv.com/tag/windows-phone/" title="Windows Phone" rel="tag">Windows Phone</a>, <a href="https://www.dougv.com/tag/windows-server/" title="Windows Server" rel="tag">Windows Server</a><br />
]]></content:encoded>
			<wfw:commentRss>https://www.dougv.com/2010/05/01/the-visual-studio-launch-2010-boston-event-reconsidered/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

