<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Ryan Rinaldi</title><link>http://ryanrinaldi.com/</link><description>.net development served with a slice of sarcasm</description><generator>Graffiti CMS 1.1 (build 1.1.0.1114)</generator><lastBuildDate>Wed, 28 Oct 2009 23:04:26 GMT</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/RyanRinaldi" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Research and Prototyping with Scrum.</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/IohzBx9ECUI/</link><pubDate>Wed, 28 Oct 2009 13:04:26 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/lisle-to-union/research-and-prototyping-with-scrum/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanrinaldi.com/blog/lisle-to-union/">Lisle to Union</category><description>&lt;p&gt;Today is day 3 of our first Sprint. Yesterday was our first Daily Scrum and so far I’m digging it but I don’t have enough experience to really know if Scrum “is working” yet.&lt;/p&gt;  &lt;p&gt;When we were doing our Sprint Planning meeting it became exceptionally clear to me that it’s really, really hard to create 4-16 hour tasks when a lot of a Sprint involves research &amp;amp; prototyping.&amp;#160; We are working on implementing an &lt;a href="http://en.wikipedia.org/wiki/Enterprise_service_bus"&gt;Enterprise Service Bus&lt;/a&gt; and for this first Sprint a lot of us have to spend some time just learning the tooling.&amp;#160; How do you plan tasks effectively when you have no real idea how long something is going to take?&amp;#160; We wound up actually trying to plan how we will go about doing our research and how long we will spend on prototypes but it just feels like those sprint tasks are wild ass guesses.&amp;#160; &lt;/p&gt;  &lt;p&gt;In the future I’m going to advocate that we break the 4-16 hour task rule when we don’t know the potential solution and use &lt;a href="http://www.gettingagile.com/2007/10/22/research-spikes-tracer-bullets-oh-my/"&gt;“Spikes”, “Tracer Bullets”, and “Research”&lt;/a&gt; to wrap our heads around the Product Backlog before we do a Sprint Planning.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b9rD0jyPaA26JkIg179Xe39fxp0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b9rD0jyPaA26JkIg179Xe39fxp0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b9rD0jyPaA26JkIg179Xe39fxp0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b9rD0jyPaA26JkIg179Xe39fxp0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=IohzBx9ECUI:NrBa6ttmCB0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=IohzBx9ECUI:NrBa6ttmCB0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=IohzBx9ECUI:NrBa6ttmCB0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=IohzBx9ECUI:NrBa6ttmCB0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/lisle-to-union/research-and-prototyping-with-scrum/</feedburner:origLink></item><item><title>Scrum: One team multiple projects?</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/W87QNTdCrUU/</link><pubDate>Mon, 26 Oct 2009 03:05:29 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/scrum-one-team-multiple-projects/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>1</slash:comments><category domain="http://ryanrinaldi.com/blog/">Blog</category><description>&lt;p&gt;At work we are in the process of implementing Scrum (actually tomorrow is our first Sprint Planning meeting. Really looking forward to it.)&lt;/p&gt;  &lt;p&gt;Everybody on the team has read the books on Scrum and we are all very excited to finally be formalizing our processes but we are in disagreement about how best to actually implement Scrum.&lt;/p&gt;  &lt;p&gt;The problem is that we are a small team responsible for a set of pretty independent applications.&amp;#160; All of these applications are in various states: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“Done” – These apps only see bug fixes and very small feature work. Until the business processes around them change there will be little to no work required to maintain them.&lt;/li&gt;    &lt;li&gt;“Maintenance” – Apps that are recently released. As the business adopts them they will require small feature changes and bug fixes.&lt;/li&gt;    &lt;li&gt;“Greenfield” – Brand new apps that haven’t yet reached 1.0. Lots of work.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Greenfield apps have more than enough work to fill a sprint. Maintenance and Done apps, not so much. So how do you fit work on projects into a sprint if each app has it’s own backlog but might not have enough work for a full sprint?&amp;#160; &lt;/p&gt;  &lt;p&gt;I’ve searched for an answer and I’ve found the following sites that address it but nobody seems to be in complete agreement.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a title="http://blog.xebia.com/2008/08/21/agile-maintenance-one-team-multiple-projects/" href="http://blog.xebia.com/2008/08/21/agile-maintenance-one-team-multiple-projects/"&gt;http://blog.xebia.com/2008/08/21/agile-maintenance-one-team-multiple-projects/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.infoq.com/news/2007/12/multiple-projects-one-agile-team" href="http://www.infoq.com/news/2007/12/multiple-projects-one-agile-team"&gt;http://www.infoq.com/news/2007/12/multiple-projects-one-agile-team&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="http://stackoverflow.com/questions/412525/how-does-scrum-work-when-you-have-multiple-projects" href="http://stackoverflow.com/questions/412525/how-does-scrum-work-when-you-have-multiple-projects"&gt;http://stackoverflow.com/questions/412525/how-does-scrum-work-when-you-have-multiple-projects&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We have tentatively agreed that we will have one Product Backlog for all of our projects and a sprint can (and probably will) include work for multiple projects. We will have one person that will manage the Product Backlog and will work with the various Product Owners to make sure they understand how and why the work for their projects is placed in the Product Backlog.&lt;/p&gt;  &lt;p&gt;So to all the Scrum people out there, is this a common scenario? Is one Product Backlog for multiple projects seem like a reasonable idea? If not how else can we address our situation?&amp;#160; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0Rhgb5DXgxYxyafkglDqyDgTp8I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Rhgb5DXgxYxyafkglDqyDgTp8I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0Rhgb5DXgxYxyafkglDqyDgTp8I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Rhgb5DXgxYxyafkglDqyDgTp8I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=W87QNTdCrUU:rjI9VZje7ss:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=W87QNTdCrUU:rjI9VZje7ss:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=W87QNTdCrUU:rjI9VZje7ss:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=W87QNTdCrUU:rjI9VZje7ss:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/scrum-one-team-multiple-projects/</feedburner:origLink></item><item><title>Running the asp.net compiler after build</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/dZFvBLymhCQ/</link><pubDate>Thu, 26 Feb 2009 17:45:41 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/running-the-asp-net-compiler-after-build/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanrinaldi.com/blog/">Blog</category><description>&lt;p&gt;Found this trick today and it saved me a lot of pain. I was renaming/reorganizing a bunch of classes and almost every page I went to greeted me with this error: &lt;p&gt;&lt;a href="http://ryanrinaldi.com/files/media/image/WindowsLiveWriter/Runningtheasp.netcompilerafterbuild_A563/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="86" alt="image" src="http://ryanrinaldi.com/files/media/image/WindowsLiveWriter/Runningtheasp.netcompilerafterbuild_A563/image_thumb_1.png" width="549" border="0"&gt;&lt;/a&gt;  &lt;p&gt;To make life easier I added an After Build target to my web project to run the asp.net compiler. This will catch all the same errors which would normally require you to go to each page of the site. &lt;p&gt;Add this to the bottom of your .csproj file:&lt;/p&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Target&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="AfterBuild"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;AspNetCompiler&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #ff0000"&gt;VirtualPath&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="temp"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #ff0000"&gt;PhysicalPath&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="$(ProjectDir)..\$(ProjectName)"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Target&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aeMtKpXCJ8baEeRVRNMmSKZFmFQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aeMtKpXCJ8baEeRVRNMmSKZFmFQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aeMtKpXCJ8baEeRVRNMmSKZFmFQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aeMtKpXCJ8baEeRVRNMmSKZFmFQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=dZFvBLymhCQ:HkFcbSUefv0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=dZFvBLymhCQ:HkFcbSUefv0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=dZFvBLymhCQ:HkFcbSUefv0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=dZFvBLymhCQ:HkFcbSUefv0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/running-the-asp-net-compiler-after-build/</feedburner:origLink></item><item><title>Mobile broadband FTW!</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/qQsv3qZ9ubc/</link><pubDate>Wed, 18 Feb 2009 14:46:45 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/lisle-to-union/mobile-broadband-ftw/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>1</slash:comments><category domain="http://ryanrinaldi.com/blog/lisle-to-union/">Lisle to Union</category><description>&lt;p&gt;I was telling a coworker the other day how awesome it is to fire up the internet on my way into work on the train.&amp;#160; Since he also takes the train and has a longer commute then me I suggested he give it a try.&amp;#160; First question that came up was “Is it really fast enough to get work done?” &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ryanrinaldi.com/files/media/image/WindowsLiveWriter/MobilebroadbandFTW_7B79/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ryanrinaldi.com/files/media/image/WindowsLiveWriter/MobilebroadbandFTW_7B79/image_thumb.png" width="244" height="134" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It’s not cable modem speeds but it sure is fast enough for most things!&amp;#160; I’m able to pull down code from svn repositories, I’ve done svn commits, twittered, googled all without a hitch. I’m loving it.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BK7Mlro6EMLnuKHIQA2sPHx5rmM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BK7Mlro6EMLnuKHIQA2sPHx5rmM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BK7Mlro6EMLnuKHIQA2sPHx5rmM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BK7Mlro6EMLnuKHIQA2sPHx5rmM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=qQsv3qZ9ubc:w5hxOdofVbY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=qQsv3qZ9ubc:w5hxOdofVbY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=qQsv3qZ9ubc:w5hxOdofVbY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=qQsv3qZ9ubc:w5hxOdofVbY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/lisle-to-union/mobile-broadband-ftw/</feedburner:origLink></item><item><title>SQL Server full text indexing of HTML content</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/aZ1hpREjqN8/</link><pubDate>Mon, 29 Dec 2008 21:40:19 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/sql-server-full-text-indexing-of-html-content/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>1</slash:comments><category domain="http://ryanrinaldi.com/blog/">Blog</category><description>&lt;p&gt;Sorry for the long and boring title, but I wanted to make it easy for Google to find this post.&lt;/p&gt; &lt;p&gt;If you happen to have a site that is storing &lt;strong&gt;Unicode&lt;/strong&gt; (that's bold because it's important, as you will see later!) HTML content in a SQL Server database and you want to enable full text indexing there are a few hoops you have to jump through that aren't obvious.&lt;/p&gt; &lt;p&gt;First of all, you can't store your content as varchar, nvarchar or text.&amp;nbsp; The assumption is that the text in those columns is plain text so the indexer uses a vanilla iFilter instead of the iFilter for HTML.&amp;nbsp; To use the HTML iFilter you will need to create a pair of columns.&amp;nbsp; One "Document Type" column and another varbinary column to store your content.&amp;nbsp; What I did was create a document type column and a persisted calculated varbinary column that was the column actually indexed (not the column that the application edits).&lt;/p&gt; &lt;p&gt;In the end I had 3 columns:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;[Content] -&amp;gt; This is the varchar(max) column that my application updates  &lt;li&gt;[IndexedContent] -&amp;gt; This is the varbinary(max) column that is indexed  &lt;li&gt;[ContentDocumentType] -&amp;gt; This is the (obviously) Document Type column that tells SQL Server to use the HTML iFilter.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Here is the code to setup full text indexing (let's assume you wanted to index some content in a CMS):&lt;/p&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;EXEC&lt;/span&gt; sp_fulltext_catalog @ftcat= &lt;span style="color: #006080"&gt;'ContentManagementSystem'&lt;/span&gt; , &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     @&lt;span style="color: #0000ff"&gt;action&lt;/span&gt;= &lt;span style="color: #006080"&gt;'Create'&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;EXEC&lt;/span&gt; sp_fulltext_table &lt;span style="color: #006080"&gt;'dbo.Entries'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'create'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'ContentManagementSystem'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'PK_Entries_EntryID'&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;EXEC&lt;/span&gt; sp_fulltext_service @&lt;span style="color: #0000ff"&gt;action&lt;/span&gt;=&lt;span style="color: #006080"&gt;'load_os_resources'&lt;/span&gt;, @&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;=1;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; Entries&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;ADD&lt;/span&gt; IndexedContent &lt;span style="color: #0000ff"&gt;AS&lt;/span&gt; (0xFFFE+&lt;span style="color: #0000ff"&gt;CONVERT&lt;/span&gt;([varbinary](&lt;span style="color: #0000ff"&gt;max&lt;/span&gt;),[Content],0))&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; Entries&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;ADD&lt;/span&gt; ContentDocumentType &lt;span style="color: #0000ff"&gt;AS&lt;/span&gt; &lt;span style="color: #006080"&gt;'htm'&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;EXEC&lt;/span&gt; sp_fulltext_column &lt;span style="color: #006080"&gt;'dbo.Entries'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'IndexedContent'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'add'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'ContentDocumentType'&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;EXEC&lt;/span&gt; sp_fulltext_table &lt;span style="color: #006080"&gt;'dbo.Entries'&lt;/span&gt;,&lt;span style="color: #006080"&gt;'start_change_tracking'&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;EXEC&lt;/span&gt; sp_fulltext_table &lt;span style="color: #006080"&gt;'dbo.Entries'&lt;/span&gt;,&lt;span style="color: #006080"&gt;'activate'&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;GO&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The key part is where you see 0xFFEE.&amp;nbsp; When you are storing Unicode content in a varbinary field, the field needs to start with those magic bits or else the indexer doesn't index the field properly and you will get ZERO results back.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Jzd45gnAhN3cThxinvS7VfLTWZg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jzd45gnAhN3cThxinvS7VfLTWZg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Jzd45gnAhN3cThxinvS7VfLTWZg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jzd45gnAhN3cThxinvS7VfLTWZg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=aZ1hpREjqN8:EKVVHO49oQ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=aZ1hpREjqN8:EKVVHO49oQ8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=aZ1hpREjqN8:EKVVHO49oQ8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=aZ1hpREjqN8:EKVVHO49oQ8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/sql-server-full-text-indexing-of-html-content/</feedburner:origLink></item><item><title>Stupid SQL Tricks</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/YUVSf5h9j5k/</link><pubDate>Wed, 19 Nov 2008 22:41:14 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/stupid-sql-tricks/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanrinaldi.com/blog/">Blog</category><description>&lt;p&gt;Don't ask why I needed this, but here is a SQL function that will abbreviate a string:&lt;/p&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 246px; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;create&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; dbo.fnAbbreviate(@source nvarchar(100))&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;returns&lt;/span&gt; nvarchar(100)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;begin&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; charindex(&lt;span style="color: #006080"&gt;' '&lt;/span&gt;, @source) = 0&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; @source&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;declare&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;result&lt;/span&gt; nvarchar(100)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;declare&lt;/span&gt; @i &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;declare&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;char&lt;/span&gt; nvarchar(1)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;result&lt;/span&gt; = &lt;span style="color: #006080"&gt;''&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; @i = 0;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; @i &amp;lt; len(@source)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;begin&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;char&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;substring&lt;/span&gt;(@source, @i, 1)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CONVERT&lt;/span&gt;(varbinary, @&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;) = &lt;span style="color: #0000ff"&gt;CONVERT&lt;/span&gt;(varbinary, &lt;span style="color: #0000ff"&gt;UPPER&lt;/span&gt;(@&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;))&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;begin&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;result&lt;/span&gt; = @&lt;span style="color: #0000ff"&gt;result&lt;/span&gt; + @&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; @i = @i + 1&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;result&lt;/span&gt; = REPLACE(@&lt;span style="color: #0000ff"&gt;result&lt;/span&gt;, &lt;span style="color: #006080"&gt;' '&lt;/span&gt;, &lt;span style="color: #006080"&gt;''&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; @&lt;span style="color: #0000ff"&gt;result&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;end&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pCuuz7rLFgLn3052rmAUk2KbkNw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pCuuz7rLFgLn3052rmAUk2KbkNw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pCuuz7rLFgLn3052rmAUk2KbkNw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pCuuz7rLFgLn3052rmAUk2KbkNw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=YUVSf5h9j5k:hvcBz-a2-Sw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=YUVSf5h9j5k:hvcBz-a2-Sw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=YUVSf5h9j5k:hvcBz-a2-Sw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=YUVSf5h9j5k:hvcBz-a2-Sw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/stupid-sql-tricks/</feedburner:origLink></item><item><title>Tooling</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/ltV_Fx4Lsl4/</link><pubDate>Mon, 17 Nov 2008 15:11:14 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/lisle-to-union/tooling/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanrinaldi.com/blog/lisle-to-union/">Lisle to Union</category><description>&lt;p&gt;What tools do you use? If you are reading this I bet you use some flavor of Visual Studio and some form of source control, but like most developers your tooling stops there.&amp;nbsp; Why?&amp;nbsp; Have you tried the various Visual Studio add-ins like ReSharper or CodeRush?&amp;nbsp; How about SQL Schema diff tools like SQL Compare from Red-Gate? How about a build server like Team Build or Cruise Control?&lt;/p&gt; &lt;p&gt;Most developers I know would answer no to most of those questions.&amp;nbsp; And honestly, I don't get it.&amp;nbsp; Do you like spending time writing reams of similar code?&amp;nbsp; Manually diffing schema? Figuring out why a build doesn't work in a new environment?&lt;/p&gt; &lt;p&gt;"Ryan, those things are too expensive.&amp;nbsp; I could never get those things approved!" I call bull.&amp;nbsp; Have you tried to use them? Have you seen productivity gains?&amp;nbsp; If so, I bet it would be a rather easy sell to your manager.&amp;nbsp; Do a simple ROI on it and you'll be amazed at how &lt;strong&gt;cheap&lt;/strong&gt; most of these tools are!&lt;/p&gt; &lt;p&gt;If you are looking for the quick win, create a build server.&amp;nbsp; Once you see how easier deployment is when you can xcopy a build to a new environment you'll be sold.&amp;nbsp; Then you add in things like unit tests and longer running build verification tests and you'll be amazed.&amp;nbsp; You'll start to &lt;strong&gt;trust&lt;/strong&gt; your builds and rollouts to new environments won't be feared.&lt;/p&gt; &lt;p&gt;Here is another thing I don't get.&amp;nbsp; Developers, as a whole, put up with a lot of friction before doing something about it and I'm not sure why.&amp;nbsp; We spend all day writing applications that make other people's lives more productive yet we will put up with friction at almost ever step of the way. &lt;/p&gt; &lt;p&gt;"But that's the way it is. Writing software is hard and this is the way it's always been." &lt;/p&gt; &lt;p&gt;Yeah, writing software is hard, but that doesn't mean we can't write software to make it easier!&amp;nbsp; There are two tools that I use everyday that you can't buy anywhere.&amp;nbsp; OutWit, a Outlook add-in that creates TFS work items and IntelliPages, a small applications that lets us search our company directory/quick dialer.&amp;nbsp; Both of these applications make my life easier and neither one existed until a developer on the team decided it to make time to bring it life. (I made OutWit and &lt;a href="http://ray.jez.net/"&gt;Ray&lt;/a&gt; made IntelliPages, which has been so successful internally it's now part of our standard desktop image across the organization. :))&lt;/p&gt; &lt;p&gt;Another tool I build/use is a simple command line app that is part of each solution and is tasked with knowing how to promote builds from one environment to the next. Get the build from the build server, put in environment, update Team Build with new environment information, that sort of thing.&lt;/p&gt; &lt;p&gt;My point is that as developers you need to look outside of Visual Studio more often and find tools that lower the amount of friction you deal with daily.&amp;nbsp; If you are adamant that there is no way you can buy a tool, then build it.&amp;nbsp; You have the power. :)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DezA_LDFmgfnWqI7vbN2pE8UOf4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DezA_LDFmgfnWqI7vbN2pE8UOf4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DezA_LDFmgfnWqI7vbN2pE8UOf4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DezA_LDFmgfnWqI7vbN2pE8UOf4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=ltV_Fx4Lsl4:PLiXbKiJkgE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=ltV_Fx4Lsl4:PLiXbKiJkgE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=ltV_Fx4Lsl4:PLiXbKiJkgE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=ltV_Fx4Lsl4:PLiXbKiJkgE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/lisle-to-union/tooling/</feedburner:origLink></item><item><title>CRM 4.0 Plug-ins: Handling Entity Merges</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/bjcqUZvBNTs/</link><pubDate>Wed, 12 Nov 2008 20:05:51 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/crm-4-0-plug-ins-handling-entity-merges/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>0</slash:comments><category domain="http://ryanrinaldi.com/blog/">Blog</category><description>&lt;p&gt;In a recent post, &lt;a href="http://ryanrinaldi.com/blog/lisle-to-union/lisle-to-union-crm-4-0-plugins/"&gt;CRM 4.0 Plugins&lt;/a&gt;, I said I would post an example of a plug-in that handles entity merges.&amp;nbsp; Here is that sample! :)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MergeHandler : IPlugin&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;{&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; MergeHandler (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; unsecureConfig, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; secureConfig)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Execute(IPluginExecutionContext context)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (context.MessageName == &lt;span style="color: #006080"&gt;"Merge"&lt;/span&gt; &amp;amp;&amp;amp;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                context.PrimaryEntityName == &lt;span style="color: #006080"&gt;"account"&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;                &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; targetCrmId = ((Moniker)context.InputParameters[ParameterName.Target]).Id.ToString();&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;                &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; subOrdinateId = context.InputParameters[ParameterName.SubordinateId].ToString();&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        }    &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InvalidPluginExecutionException(ex.Message, ex);&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It's actually a lot easier than I thought.&amp;nbsp; It just took me awhile to understand what values were going to be passed into Execute method of the plug-in.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hTlx8FK0S4Xu-L46t6VjjnxxYrw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hTlx8FK0S4Xu-L46t6VjjnxxYrw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hTlx8FK0S4Xu-L46t6VjjnxxYrw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hTlx8FK0S4Xu-L46t6VjjnxxYrw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=bjcqUZvBNTs:h0pnHXOnKss:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=bjcqUZvBNTs:h0pnHXOnKss:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=bjcqUZvBNTs:h0pnHXOnKss:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=bjcqUZvBNTs:h0pnHXOnKss:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/crm-4-0-plug-ins-handling-entity-merges/</feedburner:origLink></item><item><title>Staying Technically Relevant</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/zQCXD-C3fK0/</link><pubDate>Tue, 11 Nov 2008 18:57:22 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/lisle-to-union/staying-technically-relevant/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>4</slash:comments><category domain="http://ryanrinaldi.com/blog/lisle-to-union/">Lisle to Union</category><description>&lt;p&gt;In the comments to my post yesterday (comments meaning the only one I got), my friend and coworker &lt;a href="http://blogs.geekdojo.net/richard"&gt;Richard Lowe&lt;/a&gt; pointed out that working with new technology also adds business value.&amp;nbsp; I have to agree with him.&amp;nbsp; Staying up to date with technology, whatever technology you use day to day, does increase business value. I took that as a given because, in my opinion, if you don't stay up to date then you become technically irrelevant and technical irrelevancy adds negative business value.&lt;/p&gt; &lt;p&gt;Negative business value?&amp;nbsp; Yeah, negative business value.&amp;nbsp; You actually becoming a liability to the company by &lt;strong&gt;not&lt;/strong&gt; introducing new technology.&amp;nbsp; Tool sets, frameworks and programming languages all have an expiration date (within reason. I know COBOL is still alive and kicking). When they expire, your company is now in a horrible situation (especially if that expired technology is running a core business application).&amp;nbsp; Staying technically relevant removes that liability.&lt;/p&gt; &lt;p&gt;"So Ryan?&amp;nbsp; What is technically relevant?"&lt;/p&gt; &lt;p&gt;Glad you asked!&amp;nbsp; In my opinion there are a few things that every developer should be aware of right now.&amp;nbsp; Take note that I didn't say you should be using, you should know or you should be competent in.&amp;nbsp; These are things that should have at least crossed your radar so if somebody talked to you about it you would have some basis for discussion.&lt;/p&gt; &lt;p&gt;1.) Unit Testing&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Unit testing is pretty much beyond mainstream.&amp;nbsp; The tools to do unit testing are now shipping with Visual Studio.&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;2.) Model-View-Controller/Model-View-Presenter&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;These patterns have been around a long, long time (so long in fact that they have been renamed, but nobody goes by those names yet). A lot of web and windows frameworks that are coming out (or in the Java world have been out for a long time) use these patterns.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;3.) Object-Relational Mapping&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;I don't care what tools you use.&amp;nbsp; If you are a developer you owe it to yourself to at least know about O/RM.&amp;nbsp; It will save you boatloads of time and money. (See: NHibernate, LINQ to Entities, LLBLGEN, iBatis, etc.)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;4.) Dynamic versus Static languages&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;With languages like Ruby and Python being mainstream, C# adding dynamic support (Dynamic via Static) and the addition of the DLR to the .NET runtime, you need to have some understanding of why people even cared about the issue to begin with.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;5.) Messaging&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;With the push to create isolated systems and cloud computing being "The Next Big Thing", messaging and messaging patterns are starting to get more press.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;These 5 things are items that I feel that developers need to have at least &lt;em&gt;heard of&lt;/em&gt;. I'm not claiming to be a guru in any of these (especially &lt;a href="http://ryanrinaldi.com/blog/lisle-to-union/lisle-to-union-messaging/"&gt;messaging&lt;/a&gt;!) and I'm sure other developers have the 5 areas that they feel everybody should be aware of.&amp;nbsp; What technologies am I missing?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/twvtnQafBRwy2-yUm62ctjTs7Zs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/twvtnQafBRwy2-yUm62ctjTs7Zs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/twvtnQafBRwy2-yUm62ctjTs7Zs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/twvtnQafBRwy2-yUm62ctjTs7Zs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=zQCXD-C3fK0:uIXj7EdQm_Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=zQCXD-C3fK0:uIXj7EdQm_Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=zQCXD-C3fK0:uIXj7EdQm_Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=zQCXD-C3fK0:uIXj7EdQm_Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/lisle-to-union/staying-technically-relevant/</feedburner:origLink></item><item><title>Business Value</title><link>http://feedproxy.google.com/~r/RyanRinaldi/~3/rOpLC2MyLMA/</link><pubDate>Mon, 10 Nov 2008 15:28:09 GMT</pubDate><guid isPermaLink="false">http://ryanrinaldi.com/blog/lisle-to-union/business-value/</guid><dc:creator>Ryan Rinaldi</dc:creator><slash:comments>1</slash:comments><category domain="http://ryanrinaldi.com/blog/lisle-to-union/">Lisle to Union</category><description>&lt;p&gt;(Side note: The Metra is all screwed up this morning.&amp;nbsp; I'm told trains are running 20 mins late then the 7:51 pulls up going from Chicago on the to Chicago tracks.&amp;nbsp; Sigh....)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Anybody that has worked with me knows that I tend to be an early adopter of technology.&amp;nbsp; I love playing with Beta, Alpha, CTP and "Here is my bin folder" builds. But sometimes as an early adopter I run into trouble.&amp;nbsp; Not the kind of "This build borked my machine" types of trouble, but more along the lines of "Boy this is neat but what value does it give me?" kind of trouble.&amp;nbsp; If I can't find the business value in a piece of code or new technology it's nothing more than a geeky toy.&lt;/p&gt; &lt;p&gt;As a developer it's our job not to just write really awesome code, but to make sure that code adds value to the core business.&amp;nbsp; Sometimes I struggle with that.&amp;nbsp; When I'm adding some lame excel exporting feature instead of playing with Aspect Oriented Programming or when I'm fixing some edge case bug instead of doing some crazy Meta-Programming I have to remind myself that the things I am doing are increasing productivity in some other part of the business.&lt;/p&gt; &lt;p&gt;Sometimes though, we need to take a step back and look at those new technologies (I just came back from PDC so my brain is FILLED with new stuff).&amp;nbsp; Do these new technologies increase business value?&amp;nbsp; How-so?&amp;nbsp; Sometimes the question is easy enough to answer (Windows will crash less), other times it's harder (Oslo will help you create textual DSLs).&amp;nbsp; Whenever I'm in this position, the first thing I do is play with the technology.&amp;nbsp; How long is taking me to understand it?&amp;nbsp; Is it lowering the amount of code that I have to write, or just moving it around (C# to Xml configuration)? Is it lowering the amount of friction in my day-to-day life?&amp;nbsp; Once I can answer those questions I can move forward and confidently promote new technologies to the business (or not as the case may be).&lt;/p&gt; &lt;p&gt;When you start to think of terms of business value interesting changes start to take place.&amp;nbsp; When you are what feels like a death march project you start to ask around.&amp;nbsp; What value are we providing?&amp;nbsp; Who needs this software?&amp;nbsp; What is this application going to do for them day-to-day? Are we really making work easier?&amp;nbsp; The answer to those questions will either motivate you because you know you are providing value, or the questions start to float up the chain of command and project goals start to get re-aligned.&amp;nbsp; There have been a few projects in my life that as stake-holders and priorities changed no one was really sure why the application was being built.&amp;nbsp; Asking questions has helped to get those projects back on the right tracks.&lt;/p&gt; &lt;p&gt;In the end, my point is simply that when you are implementing a new feature, fixing a bug or working with brand new technology try to keep your focus on business value and not what shiny new toys you want to play with.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oSc_WggD_ARGCcqZQNu5Z8_PnQo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oSc_WggD_ARGCcqZQNu5Z8_PnQo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oSc_WggD_ARGCcqZQNu5Z8_PnQo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oSc_WggD_ARGCcqZQNu5Z8_PnQo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=rOpLC2MyLMA:cLKoCdLW-9I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=rOpLC2MyLMA:cLKoCdLW-9I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=rOpLC2MyLMA:cLKoCdLW-9I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=rOpLC2MyLMA:cLKoCdLW-9I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><feedburner:origLink>http://ryanrinaldi.com/blog/lisle-to-union/business-value/</feedburner:origLink></item></channel></rss>
