<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Josh Heyse</title>
	
	<link>http://heyse.us/blog</link>
	<description>Thoughts Defragmented</description>
	<lastBuildDate>Fri, 19 Jun 2009 17:12:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/JoshHeyse" type="application/rss+xml" /><item>
		<title>Microsoft SharedView on Windows 7 x64 Beta Build 7000</title>
		<link>http://heyse.us/blog/?p=93</link>
		<comments>http://heyse.us/blog/?p=93#comments</comments>
		<pubDate>Fri, 30 Jan 2009 05:05:00 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:7295</guid>
		<description><![CDATA[We use Microsoft SharedView a lot at Catalyst.&#160; Is a quick, free tool which allows us to do desktop sharing.&#160; Yesterday one of my co-workers sent me an invitation to join a session.&#160; I followed the link in the email which allowed me to download and install SharedView. When I attempted to install, I was [...]]]></description>
			<content:encoded><![CDATA[<p>We use <a href="http://www.microsoft.com/downloads/details.aspx?familyid=95AF94BA-755E-4039-9038-63005EE9D33A&amp;displaylang=en">Microsoft SharedView</a> a lot at Catalyst.&nbsp; Is a quick, free tool which allows us to do desktop sharing.&nbsp; Yesterday one of my co-workers sent me an invitation to join a session.&nbsp; I followed the link in the email which allowed me to download and install SharedView. When I attempted to install, I was presented with this message:</p>
<p><a href="http://heyse.us/blog/wp-content/uploads/SharedViewError_7B4CC3E2.png"><img src="http://heyse.us/blog/wp-content/uploads/SharedViewError_thumb_4B427261.png" style="border-width:0px;display:inline;" title="SharedViewError" alt="SharedViewError" width="437" border="0" height="336"></a> </p>
<p>This forced me to resort back to my Vista partition which didn’t make me happy.&nbsp; I’ve been extremely happy living in my Windows 7 world and I didn’t want to leave just to use SharedView.&nbsp; I took a quick minute this evening to dig deeper into the issue.&nbsp; I downloaded a copy of <a href="http://support.microsoft.com/kb/255905">Microsoft Ocra</a>, which allows you to edit the MSI database.&nbsp; When I checked out the installation conditions the problem was clear. The conditional statement below was used several times.&nbsp; It seems that SharedView is forward compatible as long as you are running the 32 bit version of Windows XP or greater, but only valid if you are running Vista x64.</p>
<p>NOT(((NOT VersionNT64) AND VersionNT&gt;=501) OR (VersionNT64 AND VersionNT = 600))</p>
<p><a href="http://heyse.us/blog/wp-content/uploads/orcas_705FBCCD.png"><img src="http://heyse.us/blog/wp-content/uploads/orcas_thumb_34537B18.png" style="border-width:0px;display:inline;" title="orcas" alt="orcas" width="496" border="0" height="312"></a></p>
<p>I modified the conditions to allow for forward compatibility saved and tried to re-install again.&nbsp; Success!&nbsp; I am attaching a copy of the modified MSI, but with the following disclaimer.</p>
<p>DISCLAIMER:&nbsp; I am attaching this as an example of how to modify an MSI to allow for forward compatibility not for you to install it.&nbsp; If you choose to install it anyway, I am not responsible for what happens to your system.&nbsp; By downloading the following attachment you agree to this disclaimer.</p>
<p> Download:
<div style="margin:0px;padding:0px;display:inline;float:none;" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:160c0969-241f-4b6e-9a9c-7535076f8f12" class="wlWriterEditableSmartContent">
<p> <a href="http://heyse.us/blog/wp-content/uploads/Windows7_SharedView_314BAAA8.msi" target="_blank">Windows7_SharedView</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=93</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS 401 Error Using Windows Auth Locally</title>
		<link>http://heyse.us/blog/?p=94</link>
		<comments>http://heyse.us/blog/?p=94#comments</comments>
		<pubDate>Fri, 23 Jan 2009 03:35:00 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[IIS7]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:7215</guid>
		<description><![CDATA[Today, Chris came to me with one of those WTF issues… He is developing a SharePoint application which communicates with WCF services hosted in a separate IIS Web Site on the same physical machine.&#160; Both websites are bound to the same IP Address and are using host headers to distinguish themselves. Also, both Web Sites [...]]]></description>
			<content:encoded><![CDATA[<p>Today, Chris came to me with one of those WTF issues… He is developing a SharePoint application which communicates with WCF services hosted in a separate IIS Web Site on the same physical machine.&#160; Both websites are bound to the same IP Address and are using host headers to distinguish themselves. Also, both Web Sites disallow anonymous access and enforce Windows Authentication.&#160; Chris was working on deploying his services and invoking them from the SharePoint site.&#160; He first tested the services from his local dev machine and everything worked.&#160; When he published the code to the SharePoint instance on server the code was failing with a HTTP 401.1 error.&#160; Invalid credentials…</p>
<p>To get the root of the problem we created a simple HTML file and placed it in the root of the directory.&#160; We were still getting the same error.&#160; The next step was to enable logging in IIS which provided us with a little more information, including the exact error 401.1 / 2148074252.&#160; After some head scratching and googling, we ran across this knowledge base article <a href="http://support.microsoft.com/kb/896861">KB896861</a>.&#160; A quick modification to the registry, a reset and we were back in business.&#160; </p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=94</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 7 Beta (Build 7000) available for MSDN Subscribers</title>
		<link>http://heyse.us/blog/?p=95</link>
		<comments>http://heyse.us/blog/?p=95#comments</comments>
		<pubDate>Thu, 08 Jan 2009 06:08:27 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:7065</guid>
		<description><![CDATA[Today at CES Microsoft&#8217;s Steve Ballmer (yes, the chair thrower) announced that they will be making the Windows 7 Beta available for download on January 9th.&#160; The Windows team said to watch their RSS feed for the release notice and download instructions.&#160; Being the optimistic type I decided to check out the MSDN subscription site [...]]]></description>
			<content:encoded><![CDATA[<p>Today at CES Microsoft&#8217;s Steve Ballmer (yes, the chair thrower) <a href="http://www.microsoft.com/presspass/events/ces/">announced</a> that they will be making the Windows 7 Beta available for download on January 9th.&#160; The Windows team said to watch their <a href="http://windowsteamblog.com/blogs/MainFeed.aspx">RSS feed</a> for the release notice and download instructions.&#160; Being the optimistic type I decided to check out the MSDN subscription site and there it was Windows 7 Beta (builds x86 and x64).&#160; It looks like the download is going to take roughly 1 hour.&#160; Looks like it is going to be a long installation night.&#160; With some luck, I will be giving my ASP.NET Dynamic Data Presentation at IndyNDA on a newly build Windows 7 build.</p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=95</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSDN Developer Conference</title>
		<link>http://heyse.us/blog/?p=96</link>
		<comments>http://heyse.us/blog/?p=96#comments</comments>
		<pubDate>Tue, 06 Jan 2009 06:19:06 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Speaking]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:7067</guid>
		<description><![CDATA[The MSDN Developer Conference is just around the corner (see event details below).&#160; The MSDN Developer Conference brings the best of PDC 2008 to Chicago.&#160; The event has 3 different tracks covering Cloud Services, Presentation, and Developer Tools.&#160; The speakers for the events are mostly Microsoft evangelists with several community members.&#160; I am extremely happy [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.msdndevcon.com/Pages/Chicago.aspx">MSDN Developer Conference</a> is just around the corner (see event details below).&#160; The MSDN Developer Conference brings the best of PDC 2008 to Chicago.&#160; The event has 3 different tracks covering Cloud Services, Presentation, and Developer Tools.&#160; The speakers for the events are mostly Microsoft evangelists with several community members.&#160; I am extremely happy to say that I will be one of those community speakers.&#160; I will be co-presenting with Patrick Foley, an Architectural Evangelist with Microsoft on Developing Line of Business Applications in Silverlight.&#160; When not presenting, I will be hanging out around the open spaces area.</p>
<p><strong>Location</strong> </p>
<p>Hyatt Regency Chicago   <br />151 East Wacker Drive    <br />Chicago, IL, 60601</p>
<p><strong>Date</strong></p>
<p>January 13th 2009</p>
<p><strong><a href="https://www.blueroosteronline.com/events/msdndevcon/chicago">Register</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=96</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentation: ASP.NET Dynamic Data @ IndyNDA</title>
		<link>http://heyse.us/blog/?p=97</link>
		<comments>http://heyse.us/blog/?p=97#comments</comments>
		<pubDate>Mon, 29 Dec 2008 06:07:35 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Dynamic Data]]></category>
		<category><![CDATA[Speaking]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:7066</guid>
		<description><![CDATA[While at PDC, Dan Rigsby, invited me down to give a presentation and IndyNDA.&#160; I thought that this would be an excellent opportunity to talk about my favorite feature in .NET 3.6 SP1, ASP.NET Dynamic Data.&#160; I plan to make this presentation extremely code based and create a web site based on the AdventureWorks database.&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>While at PDC, Dan Rigsby, invited me down to give a presentation and <a href="http://indynda.org/">IndyNDA</a>.&#160; I thought that this would be an excellent opportunity to talk about my favorite feature in .NET 3.6 SP1, ASP.NET Dynamic Data.&#160; I plan to make this presentation extremely code based and create a web site based on the AdventureWorks database.&#160; The abstract for the presentation is located below, along with details on the event.&#160; I will be posting the power point slides and code samples here, after the presentation.</p>
<h4>Presentation Abstract</h4>
<p>ASP.NET Dynamic Data is a new framework released with the .NET Framework 3.5 SP1 that lets you create data-driven ASP.NET Web applications easily. It does this by automatically discovering data-model metadata at run time and deriving UI behavior from it.&#160; A scaffolding framework provides a functional Web site for viewing and editing data. You can easily customize the scaffolding framework by changing elements or creating new ones to override the default behavior.&#160; Come see how ASP.NET Dynamic Data can drastically reduce development time, while still giving you the flexibility necessary to create rich data driven web applications.</p>
<h4>Meeting Time &amp; Location</h4>
<p>Date: January 8th, 2009   <br />Time: 6:00 pm</p>
<p>Doors open at 5:30pm and the meeting starts at 6:00pm. Everyone is welcome to join us, and the admission is free. Presentations are targeted towards developers and IT professionals. </p>
<p>Thanks to our sponsors, we will again be having <b><i>FREE PIZZA and cokes</i></b> beginning at 5:30 (while supplies last). </p>
<p>Location:</p>
<p>The Gene B. Glick Junior Achievement Education Center    <br />7435 North Keystone Ave    <br />Indianapolis, IN 46240</p>
<p><a href="http://indynda.org/Directions/tabid/478/Default.aspx">Map and directions</a></p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=97</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Miniblog: Nerd Humor</title>
		<link>http://heyse.us/blog/?p=98</link>
		<comments>http://heyse.us/blog/?p=98#comments</comments>
		<pubDate>Tue, 04 Nov 2008 21:04:36 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:4607</guid>
		<description><![CDATA[So, I was just talking to one of my coworkers over IM and we were discussing WCF.&#160; During the conversation I said:
Josh Heyse: programming WCF for 90% of developers is just interfaces and classes marked with ServiceContract and DataContract   Josh Heyse: the rest is in the configuration    Josh Heyse: and [...]]]></description>
			<content:encoded><![CDATA[<p>So, I was just talking to one of my coworkers over IM and we were discussing WCF.&#160; During the conversation I said:</p>
<p>Josh Heyse: programming WCF for 90% of developers is just interfaces and classes marked with ServiceContract and DataContract   <br />Josh Heyse: the rest is in the configuration    <br />Josh Heyse: and if you&#8217;re a huge nerd you&#8217;ll get that pun</p>
<p>Made me smile and figured others might enjoy it as well. <img src='http://heyse.us/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=98</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VSTS User Group Presentation – VSTS for Database Developers</title>
		<link>http://heyse.us/blog/?p=99</link>
		<comments>http://heyse.us/blog/?p=99#comments</comments>
		<pubDate>Sat, 18 Oct 2008 14:29:03 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[Application Lifecycle Management]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:4365</guid>
		<description><![CDATA[I&#8217;ll be presenting at the Visual Studio Team System User Group next month on the features Visual Studio Database Edition provides and how it makes developers more productive.&#160; Recently Microsoft announced it would combine VSTS Database and VSTS Developer since most developers also interact with the Database.&#160; I think this is an extremely smart move [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be presenting at the Visual Studio Team System User Group next month on the features Visual Studio Database Edition provides and how it makes developers more productive.&#160; Recently Microsoft announced it would combine VSTS Database and VSTS Developer since most developers also interact with the Database.&#160; I think this is an extremely smart move on their part because it allows developers to build databases better.&#160; I will be presenting at the Chicago Loop meeting and <a target="_blank" href="http://phacker.wordpress.com/">Paul Hacker</a> will be presenting in Downers Grove.</p>
<h3>Official Announcement</h3>
<p>On September 29, 2008, Microsoft announced that <b><u>Visual Studio Team System Development Edition will be combined with the Visual Studio Team System Database Edition</u> </b>in Visual Studio Team System 2010.&#160; Microsoft recognized that many developers write front end code in addition to working deeply with database code and database tables. Bringing the feature of Team Development Edition and Team Database Edition together sets together enables you to take advantage of the core tools for application development as well as the necessary tools for database development, including performance profiling, code analysis, code metrics, code coverage, database refactoring, Schema Compare, Data Compare, and more.&#160; You may also be happy to know there is a way to take advantage of this 2 for 1 deal <b><u>TODAY</u></b>.&#160; Really, no joke!</p>
<p>Want to hear more about it?&#160; Maybe even see these two incredibly powerful tools together?&#160; Join the <strong>Chicago Visual Studio Team System User Group</strong> to hear more about how to get your hands on this awesome duo of tools, talk to field experts about how these tools have improved their overall quality of life (OK, maybe just their work environment), and to see them in action!.&#160; We have decided to hold this session in <b>both the Chicago Loop and Downers Grove offices</b> to ensure everyone has a chance to learn about this terrific new opportunity.</p>
<p><b>To sign up, please email <a href="mailto:Laskowski.Dave@gmail.com">Laskowski.Dave@gmail.com</a>. Please indicate which meeting you plan to attend.</b></p>
<p><b>Meeting Agenda     <br /></b>5:30pm &#8211; Pizza     <br />6:00pm &#8211; Introductions    <br />6:15pm &#8211; Presentation and Demo    <br />7:30pm &#8211; Q&amp;A and Raffle </p>
<p><b>Chicago Loop Meeting Details:     <br /></b>Wednesday <b>November 5<sup>th</sup></b>, 2008    <br />77 West Wacker Drive, 23<sup>rd</sup> Floor, Chicago, IL    <br /><b><a href="http://maps.live.com/?mkt=en-us#JnE9eXAuNzcrdyt3YWNrZXIrZHJpdmUlMmMrY2hpY2FnbyUyYytpbCU3ZXNzdC4wJTdlcGcuMSZiYj01OS4xMzA4NjMwOTcyNTU5JTdlLTQzLjY4MTY0MDYyNSU3ZTE2LjY5MDkyMTE0NDM5MTclN2UtMTMxLjY2MDE1NjI1">Map</a></b></p>
<p><b></b></p>
<p><b>Downers Grove Meeting Details:     <br /></b>Wednesday <b>October 29<sup>th</sup></b>, 2008    <br />3025 Highland Parkway, 3<sup>rd</sup> Floor, Downers Grove IL    <br /><b><a href="http://maps.live.com/?mkt=en-us#JnE9eXAuMzAyNStoaWdobGFuZCtwYXJrd2F5JTJjK2Rvd25lcnMrZ3JvdmUlMmMraWwlN2Vzc3QuMCU3ZXBnLjEmYmI9NDEuODk2NTI3MzU3NjI0MSU3ZS04Ny42MDkwNTc0MjY0NTI2JTdlNDEuODc1ODc2OTM1OTM0MyU3ZS04Ny42NTIwMTU2ODYwMzUy">Map</a></b></p>
<p><b>Speaker Bios:</b></p>
<p><b>(Downers Grove)     <br /></b>Paul Hacker is a Principle Consultant at Polaris Solutions, LLC in Indianapolis, with a passion for Team System. He has been working with the product since beta 3. Paul has implemented Team System/TFS in numerous organizations. When not spending time with his family, you can find him presiding over the Indianapolis TFS SIG, Podcasting on Radio TFS or writing tools to enhance Team System. You can reach Paul at <a href="mailto:paul.hacker@polarissolutions.com">paul.hacker@polarissolutions.com</a></p>
<p><b>(Chicago Loop)     <br /></b>Josh Heyse is a Senior Solution Architect with Catalyst Software Solutions. He has always focused on staying ahead of the technology curve, investigating Microsoft technologies before they are available to the general public. Josh began developing on beta versions the .NET Framework when they were released in early 2001. Josh is currently focused on WPF, LINQ, and most recently Silverlight 2.0.&#160; As an architect Josh spends a lot of time improving the software development lifecycle by implementing pattern &amp; practices, continuous integration and ALM tools such as Team Foundation Server. MCSD, MCDBA, MCPD</p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=99</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamic Data Filtering – Table Text Search</title>
		<link>http://heyse.us/blog/?p=100</link>
		<comments>http://heyse.us/blog/?p=100#comments</comments>
		<pubDate>Sat, 18 Oct 2008 00:11:38 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Dynamic Data]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:4357</guid>
		<description><![CDATA[I&#8217;m pretty happy with the number of people who have been downloading and trying out Dynamic Data Filtering.&#160; On average there are about 20 downloads a day with around 50 page views.&#160; There has been a lot of good feedback on both the ASP.NET forums and on the CodePlex project site 5over the last week [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m pretty happy with the number of people who have been downloading and trying out Dynamic Data Filtering.&#160; On average there are about 20 downloads a day with around 50 page views.&#160; There has been a lot of good feedback on both the <a target="_blank" href="http://forums.asp.net/1145.aspx">ASP.NET forums</a> and on the <a target="_blank" href="http://www.codeplex.com/DynamicDataFiltering">CodePlex</a> project site 5over the last week or so.&#160; So much actually that I am having trouble keeping up with answering the questions coming in.&#160; </p>
<p>One question did catch my eye though.&#160; It was a member of the ASP.NET forum asking about being able to search on all of the columns within a given table.&#160; <a target="_blank" href="http://forums.asp.net/p/1330264/2690228.aspx">[View the Post]</a>&#160; Dynamic Data doesn&#8217;t support this functionality out of the box, but it is flexible enough to write something yourself to do it.&#160; The main things that makes this possible is that a single FilterTemplate can return one ore more DynamicFilterParameters which produce lambda predicates. </p>
<p>In this case, you can accomplish this logic of searching multiple columns in a table by saying where ProductName LIKE [Value] or ProductNumber LIKE [Value] etc&#8230;&#160; To accomplish this in Dynamic Data Filtering you would utilize the OrExpressionParameter to create a collection of LikeExpressionParameters to do the predicate for each individual column.</p>
<p>I spent a little time creating a simple example which performs this logic.&#160; I also implemented a Columns property which allows you to specify using a comma separated list the columns you want searched.&#160; If Columns is left null or empty all columns are searched.&#160; The aspx for the user control only contains a single asp:TextBox with the Id=TextBox1.</p>
<div class="codeblock">
<pre style="margin:0px;"><span style="color:blue;">public</span> <span style="color:blue;">partial</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">TableTextSearch</span> : Catalyst.Web.DynamicData.<span style="color:#2b91af;">FilterTemplateUserControlBase</span></pre>
<pre style="margin:0px;">{</pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">string</span> Columns { <span style="color:blue;">get</span>; <span style="color:blue;">set</span>; }</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">private</span> <span style="color:#2b91af;">MetaTable</span> Table</pre>
<pre style="margin:0px;">&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">get</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:#2b91af;">IDynamicDataSource</span> source = <span style="color:blue;">this</span>.FindDataSourceControl();</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">if</span> (source != <span style="color:blue;">null</span>)</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">return</span> source.GetTable();</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">return</span> <span style="color:blue;">null</span>;</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">override</span> <span style="color:#2b91af;">IEnumerable</span>&lt;<span style="color:#2b91af;">Parameter</span>&gt; GetWhereParameters(System.Web.DynamicData.<span style="color:#2b91af;">IDynamicDataSource</span> dataSource)</pre>
<pre style="margin:0px;">&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:#2b91af;">OrExpressionParameter</span> parameter = <span style="color:blue;">new</span> <span style="color:#2b91af;">OrExpressionParameter</span>();</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">string</span>[] cols = <span style="color:blue;">null</span>;</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">if</span> (!<span style="color:blue;">string</span>.IsNullOrEmpty(Columns))</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; cols = Columns.Split(<span style="color:#a31515;">','</span>);</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">for</span> (<span style="color:blue;">int</span> i = 0; i &lt; cols.Length; i++)</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; cols[i] = cols[i].Trim().ToUpper();</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">var</span> columns = (<span style="color:blue;">from</span> c <span style="color:blue;">in</span> Table.Columns</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">where</span> cols == <span style="color:blue;">null</span> || cols.Length == 0 || cols.Contains(c.Name)</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">group</span> c <span style="color:blue;">by</span> c.TypeCode).ToDictionary(g =&gt; g.Key, g =&gt; g);</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">foreach</span> (<span style="color:blue;">var</span> column <span style="color:blue;">in</span> columns[<span style="color:#2b91af;">TypeCode</span>.String])</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; parameter.Parameters.Add(<span style="color:blue;">new</span> <span style="color:#2b91af;">LikeExpressionParameter</span>()</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Type = <span style="color:#2b91af;">TypeCode</span>.String,</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Name = column.Name,</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Value = TextBox1.Text,</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Like = <span style="color:#2b91af;">LikeExpressionParameter</span>.<span style="color:#2b91af;">LikeType</span>.Contains</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; });</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">yield</span> <span style="color:blue;">return</span> parameter;</pre>
<pre style="margin:0px;">&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">override</span> <span style="color:blue;">void</span> LoadQueryStringParameters(System.Collections.Specialized.<span style="color:#2b91af;">NameValueCollection</span> parameters)</pre>
<pre style="margin:0px;">&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; TextBox1.Text = parameters[<span style="color:#a31515;">&quot;TableTextSearch&quot;</span>];</pre>
<pre style="margin:0px;">&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">override</span> System.Collections.Specialized.<span style="color:#2b91af;">NameValueCollection</span> SaveQueryStringParameters()</pre>
<pre style="margin:0px;">&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">return</span> <span style="color:blue;">new</span> <span style="color:#2b91af;">NameValueCollection</span>() { { <span style="color:#a31515;">&quot;TableTextSearch&quot;</span>, TextBox1.Text } };</pre>
<pre style="margin:0px;">&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">&#160;</pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">public</span> <span style="color:blue;">override</span> <span style="color:blue;">void</span> Clear()</pre>
<pre style="margin:0px;">&#160;&#160;&#160; {</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; TextBox1.Text = <span style="color:blue;">string</span>.Empty;</pre>
<pre style="margin:0px;">&#160;&#160;&#160; }</pre>
<pre style="margin:0px;">}</pre>
</div>
<p>To implement filters like this one you must use the DynamicFilterForm as opposed to the DynamicFilterRepeater.&#160; The reason is that the TableTextSearch filter control is associated with any column/property in particular but the entire table instead.&#160; It may make sense to allow the FilterAttribute to be annotated at the class level to address this.</p>
<div class="codeblock">
<pre style="margin:0px;"><span style="color:blue;">&lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">DynamicFilterForm</span> <span style="color:red;">ID</span><span style="color:blue;">=&quot;DynamicFilterForm1&quot;</span> <span style="color:red;">runat</span><span style="color:blue;">=&quot;server&quot;</span> <span style="color:red;">DataSourceID</span><span style="color:blue;">=&quot;GridDataSource&quot;&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">&lt;</span><span style="color:#a31515;">FilterTemplate</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">&lt;</span><span style="color:#a31515;">div</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Search</pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">&lt;/</span><span style="color:#a31515;">div</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">&lt;</span><span style="color:#a31515;">div</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Keyword: </pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">&lt;</span><span style="color:#a31515;">dd</span><span style="color:blue;">:</span><span style="color:#a31515;">TableTextSearch</span> <span style="color:red;">runat</span><span style="color:blue;">=&quot;server&quot;</span> <span style="color:red;">ID</span><span style="color:blue;">=&quot;TableTextSearch&quot;</span> <span style="color:blue;">/&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">&lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">LinkButton</span> <span style="color:red;">ID</span><span style="color:blue;">=&quot;LinkButton4&quot;</span> <span style="color:red;">runat</span><span style="color:blue;">=&quot;server&quot;</span> <span style="color:red;">CommandName</span><span style="color:blue;">=&quot;Search&quot;&gt;</span>Search<span style="color:blue;">&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">LinkButton</span><span style="color:blue;">&gt;</span><span style="color:red;">&amp;nbsp;&amp;nbsp;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">&lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">LinkButton</span> <span style="color:red;">ID</span><span style="color:blue;">=&quot;LinkButton5&quot;</span> <span style="color:red;">runat</span><span style="color:blue;">=&quot;server&quot;</span> <span style="color:red;">CommandName</span><span style="color:blue;">=&quot;Clear&quot;&gt;</span>Clear<span style="color:blue;">&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">LinkButton</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color:blue;">&lt;/</span><span style="color:#a31515;">div</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0px;">&#160;&#160;&#160; <span style="color:blue;">&lt;/</span><span style="color:#a31515;">FilterTemplate</span><span style="color:blue;">&gt;</span></pre>
<pre style="margin:0px;"><span style="color:blue;">&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">DynamicFilterForm</span><span style="color:blue;">&gt;</span></pre>
</div>
<p>To build upon this example it would be nice to be able to search the DisplayText of foreign columns and potentially non text values.&#160; For example if the user entered a string which can be converted to a date, search all DateTime columns.</p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=100</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight 2 At Last</title>
		<link>http://heyse.us/blog/?p=101</link>
		<comments>http://heyse.us/blog/?p=101#comments</comments>
		<pubDate>Tue, 14 Oct 2008 10:03:27 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:4306</guid>
		<description><![CDATA[After what seems like forever, Microsoft has released the final bits for Silverlight 2.&#160; The product has come an extremely long way since it&#8217;s code name of WPF/E and its formal introduction as Silverlight 1.1 during Mix 07.&#160; I am ecstatic about the concept of Silverlight and the RIA potential it brings developers.&#160; While my [...]]]></description>
			<content:encoded><![CDATA[<p>After what seems like forever, Microsoft has released the final bits for <a target="_blank" href="http://silverlight.net/">Silverlight 2</a>.&#160; The product has come an extremely long way since it&#8217;s code name of WPF/E and its formal introduction as Silverlight 1.1 during Mix 07.&#160; I am ecstatic about the concept of Silverlight and the RIA potential it brings developers.&#160; While my professional development roots started with the web, I&#8217;ve always felt that HTML &amp; Javascript based applications have always been a kludge.&#160; The stateless, scripted environment built on what started as a linkable document format quickly outgrew it&#8217;s original architecture. </p>
<p>Silverlight 2 brings us that green field development experience all developers dream of.&#160; The &quot;I could do this so much better only if I didn&#8217;t have to worry about &#8230;&quot; feeling we all get when digging into an existing code base.&#160; Now that Microsoft has released the technology it is up to us, the developer community, to start creating best practices around developing on this new technology.&#160; It is looking to be an excellent next year for Rich Internet Application space.</p>
<p><a target="_blank" href="http://timheuer.com/blog/">Tim Heuer</a> has an excellent <a target="_blank" href="http://timheuer.com/blog/archive/2008/10/14/silverlight-2-released-officially.aspx">blog post</a> on what you need to get started with Silverlight 2 development.&#160; On a very interesting side note, <a target="_blank" href="http://www.eclipse4sl.org/">Eclipse will have support for Silverlight 2</a>&#8230; cross browser, cross platform and cross IDE.</p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=101</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ALM – Source Control</title>
		<link>http://heyse.us/blog/?p=102</link>
		<comments>http://heyse.us/blog/?p=102#comments</comments>
		<pubDate>Tue, 07 Oct 2008 02:09:11 +0000</pubDate>
		<dc:creator>jheyse</dc:creator>
				<category><![CDATA[Application Lifecycle Management]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">8849ae14-9cac-4852-9711-a9836a9b55b4:4242</guid>
		<description><![CDATA[Source control, or revision control, is part of almost every developers daily activities.&#160; Some days, it is their only activity.&#160; Especially those still using Visual Source Safe.   Yet it seems that many of us have an extremely hard time with this vital software development tool. I believe this is because of two reasons: [...]]]></description>
			<content:encoded><![CDATA[<p>Source control, or revision control, is part of almost every developers daily activities.&#160; Some days, it is their only activity.&#160; Especially those still using Visual Source Safe. <img src='http://heyse.us/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Yet it seems that many of us have an extremely hard time with this vital software development tool. I believe this is because of two reasons: 1) it is hard! 2) we are never really taught source control in school.&#160; </p>
<p>My first experience with source control was when I started my internship during freshman winter break.&#160;&#160; Never once in the next 6 years of schooling was source control taught.&#160; We had a few classes which used source control, but it was assumed that everyone knew how to use it.&#160; In my experience, developers typically are shown how to use source control during their first day or two on the job by another developer, after that it&#8217;s &quot;don&#8217;t break the build&quot;.&#160; </p>
<p>So why is source control so hard?&#160; Well you have a lot going on.&#160; Ask any developer who has ever worked on a project with an occasionally connected system and they will tell you that the master to master synchronization between the two data sources was the most complicated aspect of the system.&#160; What was meant to change? How do I handle conflict?&#160; Was this deleted from one system or created in another?&#160; To manage this the developer usually tries to accomplish a small set of synchronization rules, but leaves the rest to the user to decide what the intention of the synchronization was.&#160; This means that the users need to be taught how to use the tool.&#160; In our case, as developers, there are very few rules and the onus is on us to correct anything the system can&#8217;t figure out.</p>
<p>In addition to source control being hard, we have made it harder by implementing it two different ways, exclusive check-out/in and version merging repositories.</p>
<p>Visual Source Safe is an exclusive source control system which means that the system only allows one person to check-out a file; all other users can read the file but not write to it.&#160; Once the user is done they check-in their change set. This is the &#8217;safest&#8217; form of source control to prevent against unwanted sides effects within a single file.&#160; Most developers on the Microsoft platform are used to this version.</p>
<p>Team Foundation Server (by default) and Subversion are version merging repositories.&#160; This means that everyone has the ability to write to their local files.&#160; When the developer is done with their changes they merge them with the current version within the repository.&#160; Because you do not exclusively check out files you aren&#8217;t ensured that the file hasn&#8217;t changed since you started working with it.&#160; The developer, that&#8217;s you, must carefully merge the two files together.&#160; The source control merge tool checks for conflicts at the line level.&#160; This means that if a given line is changed in either the local or server copy the source control will accept the change automatically.&#160; If both lines have changed, a merge conflict is logged and the user will be prompted to correct the issue.&#160; I will be going into more detail on how to handle merge conflicts in a later post.</p>
<p>One of my roles within Catalyst as an architect and our TFS admin has been to define a source control process for projects moving forward.&#160; I will also be working to educate our developers on that process and to depend their knowledge of source control usage.&#160; This is going to be done through my blog and several presentations given during Lunch &amp; Learns.&#160; These presentations are also available to our clients, if they would like to attend.</p>
<p>When I first create a project in Team Foundation Server, I immediately create the following folders under the root of that source control repository:</p>
<ul>
<li>trunk</li>
<li>branches</li>
<li>releases</li>
</ul>
<p>The trunk is where you build and deploy from, no development is done in the trunk.&#160; Developers when assigned a task create a branch under branches, sometimes called dev, for their development.&#160; This is where they begin to code.&#160; This allows them to check code into the server before they have completed their tasks and it will not impact other developers or the build.&#160; This also gives architects or team leads to ability to review code before it is merged into the trunk. </p>
<p>After a developer is done with a task, they merge their branch back into the trunk.&#160; During this time they check to ensure that the code they are checking in doesn&#8217;t reference any code that has changed, due to other developers merging into the trunk. Building and running automated unit tests are the easiest ways to due a quick gut check.&#160; In larger projects, someone or even a team is responsible merging into the trunk.&#160; </p>
<p>When the deployment team goes to make a release build they branch the trunk to releases.&#160; QA and support begin working with the release branches so not to impact new development.&#160; Subsequent patches when released are then branched using a majorminorrevision hierarchy.&#160; If a bug is identified to affect the trunk, the code which resolved the bug is also merged with the trunk.&#160; </p>
<p>From a testing point of view, unit testing is performed at the branch level before merges can be performed. Complete unit testing and functional testing is done on the trunk nightly.&#160; The trunk is also where most of the reporting is performed such as static code analysis, code churn, etc&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://heyse.us/blog/?feed=rss2&amp;p=102</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
