<?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:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Thomas Williams Tech Blog</title>
        <link>http://theruntime.com/blogs/thomasswilliams/Default.aspx</link>
        <description>SQL Server, Reporting Services and a dash of .NET from Down Under</description>
        <language>en-AU</language>
        <copyright>Thomas Williams</copyright>
        <managingEditor>thomasswilliams@hotmail.com</managingEditor>
        <generator>Subtext Version 1.9.5.0</generator>
        <image>
            <title>Thomas Williams Tech Blog</title>
            <url>http://theruntime.com/blogs/images/RSS2Image.gif</url>
            <link>http://theruntime.com/blogs/thomasswilliams/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/thomasswilliams-tech" type="application/rss+xml" /><feedburner:emailServiceId>thomasswilliams-tech</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>Setting Focus to Control in an IFRAME using JQuery</title>
            <category>Web Development (inc. ASP.NET)</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/hfo3OT7clnU/setting-focus-to-control-in-an-iframe-using-jquery.aspx</link>
            <description>Had a gnarly problem this afternoon, while trying to set focus to a control in an IFRAME.  &lt;br /&gt;
&lt;br /&gt;
Using JQuery, I had created the IFRAME with the JQuery plugin &lt;a href="http://jquery.com/demo/thickbox/"&gt;ThickBox&lt;/a&gt;. ThickBox provides functionality that can simulate a modal dialog using an IFRAME, loading a page from a URL into the IFRAME (&lt;a href="http://jquery.com/demo/thickbox/#examples"&gt;check out the demo here&lt;/a&gt; - scroll down to "Inline Content"). The page loaded inside the IFRAME contained code to set the focus which was actually being called, but &lt;strong&gt;after&lt;/strong&gt; the page loaded something else was stealing the focus.  &lt;br /&gt;
&lt;br /&gt;
I began to look at the javascript code in the parent that created the IFRAME.  &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://alexking.org/blog/2006/01/17/iframe-element-focus"&gt;I discovered to set the focus to a control in an IFRAME that has already been loaded, you need to set the focus to the IFRAME first (thanks Alex King).&lt;/a&gt; &lt;a href="http://simple.procoding.net/2008/03/21/how-to-access-iframe-in-jquery/"&gt;I also benefited from "How to access IFRAME in JQuery" over at ProCoding (thanks Taras Ilnytskyy).&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Here's the code to set focus to a control in an IFRAME using JQuery (called from the parent window, after the IFRAME has been loaded and shown):
&lt;pre class="javascript"&gt;	&lt;br /&gt;	//get the IFRAME element - note no hashes in the name, we're using browser functionality &lt;br /&gt;	var iframeRef = document.getElementById("IFRAMEID"); &lt;br /&gt;	//focus the IFRAME element &lt;br /&gt;	$(iframeRef).focus(); &lt;br /&gt;	//use JQuery to find the control in the IFRAME and set focus &lt;br /&gt;	$(iframeRef).contents().find("#CONTROLID").focus(); &lt;/pre&gt;
I hope this helps someone! &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic; font-weight: bold; color: rgb(255, 0, 0);"&gt;UPDATE: Fixed formatting.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tag/jquery"&gt;jquery&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/javascript"&gt;javascript&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/web"&gt;web&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/iframe"&gt;iframe&lt;/a&gt;&lt;/em&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2801.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=hfo3OT7clnU:X-vFE5h7lqo:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=hfo3OT7clnU:X-vFE5h7lqo:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=hfo3OT7clnU:X-vFE5h7lqo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=hfo3OT7clnU:X-vFE5h7lqo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=hfo3OT7clnU:X-vFE5h7lqo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/hfo3OT7clnU" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/05/28/setting-focus-to-control-in-an-iframe-using-jquery.aspx</guid>
            <pubDate>Thu, 28 May 2009 04:58:54 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/thomasswilliams/comments/2801.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/05/28/setting-focus-to-control-in-an-iframe-using-jquery.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2801.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/05/28/setting-focus-to-control-in-an-iframe-using-jquery.aspx</feedburner:origLink></item>
        <item>
            <title>Firefox vs Flock</title>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/Vn4lOUUDlMY/firefox-vs-flock.aspx</link>
            <description>I've blogged &lt;a href="http://theruntime.com/blogs/thomasswilliams/archive/2007/11/25/flock-the-social-web-browser.aspx"&gt;previously&lt;/a&gt; about how I use the &lt;a href="http://flock.com/"&gt;Flock web  browser&lt;/a&gt;, but recently decided to try my luck at the latest release of &lt;a href="http://theruntime.com/blogs/thomasswilliams/archive/2009/05/14/5-firefox-add-ons-i-cant-live-without.aspx"&gt; Firefox&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Flock had several features that enticed me to adopt it in late 2007:  social media sidebar integrated with Facebook, blog post editor, in-built image  uploader which connected to Flickr and Picasa, media bar, and one-click access  to services I constantly used (like Delicious).&lt;br /&gt;&lt;br /&gt;My biggest gripe with  Flock was that the user interface was not customisable enough. Also, the browser had more features than I'd ever  need.&lt;br /&gt;&lt;br /&gt;Buying a widescreen  monitor with very limited vertical space was the straw that finally made me  switch from Flock to Firefox, permanently. Here's a comparison between the  two (the red highlights represent the menu &amp;amp; toolbar space used):&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://lh3.ggpht.com/_Ln7LRKt4zEw/ShpY2BI8ZOI/AAAAAAAABM4/t4qtLGZ1taA/s800/firefox-vs-flock.jpg" /&gt;&lt;br /&gt;I use a couple of Firefox add-ons to reduce the vertical space  used (that's the other thing...Firefox has an unbelievable collection of add-ons):&lt;br /&gt;&lt;ul style="list-style-type: none;"&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3895"&gt;Personal Menu&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1272"&gt;Status Buttons&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5890"&gt;Tree Style Tabs&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Flock was good to me. Now, I just need the screen space, and don't need a lot of its features.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Tags: &lt;a class="performancingtags" href="http://technorati.com/tag/flock" rel="tag"&gt;flock&lt;/a&gt;, &lt;a class="performancingtags" href="http://technorati.com/tag/browser" rel="tag"&gt;browser&lt;/a&gt;, &lt;a class="performancingtags" href="http://technorati.com/tag/firefox" rel="tag"&gt;firefox&lt;/a&gt;&lt;/em&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2799.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Vn4lOUUDlMY:ockz79EAXdc:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=Vn4lOUUDlMY:ockz79EAXdc:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Vn4lOUUDlMY:ockz79EAXdc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=Vn4lOUUDlMY:ockz79EAXdc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Vn4lOUUDlMY:ockz79EAXdc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/Vn4lOUUDlMY" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/05/25/firefox-vs-flock.aspx</guid>
            <pubDate>Mon, 25 May 2009 08:54:26 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/thomasswilliams/comments/2799.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/05/25/firefox-vs-flock.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2799.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/05/25/firefox-vs-flock.aspx</feedburner:origLink></item>
        <item>
            <title>5 Firefox Add-Ons I Can't Live Without</title>
            <category>Windows</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/9oGsskvLMlI/5-firefox-add-ons-i-cant-live-without.aspx</link>
            <description>&lt;p&gt;Inspired by &lt;a href="http://www.ghacks.net/2009/05/13/5-essential-firefox-extensions/"&gt;Martin over at gHacks&lt;/a&gt;, here's my list of Firefox browser add-ons that I consider essential:&lt;/p&gt;
&lt;ol style=""&gt;
    &lt;li style="padding-bottom: 10px;"&gt;&lt;img height="21" width="32" border="0" alt="" src="http://lh4.ggpht.com/_Ln7LRKt4zEw/SguAxgWOq-I/AAAAAAAABK4/knmDMckisXA/s800/mouse-gestures-32x32.png" style="float: left; padding-right: 4px;" /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/39"&gt;Mouse Gestures Redox&lt;/a&gt;&lt;span style="display: block;"&gt;Navigate back and forward, close windows, and more with just the mouse. I turn on "mouse trails" to make it easier to see what I'm doing.&lt;/span&gt;&lt;/li&gt;
    &lt;li style="padding-bottom: 10px;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/6639"&gt;Easy DragToGo&lt;/a&gt;&lt;span style="display: block;"&gt;Drag a link to open it in a new background or foreground tab.&lt;/span&gt;&lt;/li&gt;
    &lt;li style="padding-bottom: 10px;"&gt;&lt;img height="32" width="32" border="0" alt="" src="http://lh6.ggpht.com/_Ln7LRKt4zEw/SguAxeudaSI/AAAAAAAABKw/rk9w-z2HH-U/s800/adblock-plus-32x32.png" style="float: left; padding-right: 4px;" /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1865"&gt;Adblock Plus&lt;/a&gt;&lt;span style="display: block;"&gt;Blocks ads, and is very configurable. Having a little "block" link I can click next to images and flash is extremely handy.&lt;/span&gt;&lt;/li&gt;
    &lt;li style="padding-bottom: 10px;"&gt;&lt;img height="32" width="32" border="0" alt="" src="http://lh5.ggpht.com/_Ln7LRKt4zEw/SguAxeHw39I/AAAAAAAABK0/v1MmzQP29U4/s800/firebug-32x32.png" style="float: left; padding-right: 4px;" /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;Firebug&lt;/a&gt;&lt;span style="display: block;"&gt;Indispensable for web development, especially the ability to edit, "live", any part of a page. Also has some of its own add-ons available.&lt;/span&gt;&lt;/li&gt;
    &lt;li style="padding-bottom: 10px;"&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8182"&gt;SingletonFox&lt;/a&gt;, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8004"&gt;ChromaTabs Plus&lt;/a&gt;&lt;span style="display: block;"&gt;OK, that's two items at number 5, but I couldn't decide which one was more useful - making sure only a single instance of Firefox is open, or slight tab coloring depending on the site to make for easy identification of tabs.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These are fairly stock-standard add-ons, particularly numbers 1-3 which I've been using in some form or another since 2002 and MyIE. In addition, they're all very unintrusive - between the 6 add-ons, only 1 toolbar button is added (I like to keep my toolbars, menus and status bar lean).&lt;/p&gt;
&lt;p&gt;Any browser add-ons that &lt;u&gt;you&lt;/u&gt; couldn't live without?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tag/firefox"&gt;firefox&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/browser"&gt;browser&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/addon"&gt;addon&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2794.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=9oGsskvLMlI:G8WlQMXX1dA:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=9oGsskvLMlI:G8WlQMXX1dA:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=9oGsskvLMlI:G8WlQMXX1dA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=9oGsskvLMlI:G8WlQMXX1dA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=9oGsskvLMlI:G8WlQMXX1dA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/9oGsskvLMlI" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/05/14/5-firefox-add-ons-i-cant-live-without.aspx</guid>
            <pubDate>Thu, 14 May 2009 02:31:11 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/thomasswilliams/comments/2794.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/05/14/5-firefox-add-ons-i-cant-live-without.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2794.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/05/14/5-firefox-add-ons-i-cant-live-without.aspx</feedburner:origLink></item>
        <item>
            <title>Ever wanted to turn off Windows Beep?</title>
            <category>Windows</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/ZXDm1YLZfjI/ever-wanted-to-turn-off-windows-beep.aspx</link>
            <description>&lt;p&gt;The other day my PC started beeping at me. Every "Are you sure?" message box was accompanied by a "beep". I don't know how or why this started...I only wanted to make it go away.&lt;/p&gt;
&lt;p&gt;First check, Control Panel -&amp;gt; Sounds. I confirmed that I had my sound scheme set to "No Sounds", but the beep stubbornly refused to budge.&lt;/p&gt;
&lt;p&gt;Next, Google. Did you know there's a "Beep" driver? Neither did I! The &lt;a href="http://www.howtogeek.com/howto/windows/turn-off-the-annoying-windows-xp-system-beeps/"&gt;HowToGeek has a nice article on disabling this driver on XP&lt;/a&gt;, only issue is you have to be admin.&lt;/p&gt;
&lt;p&gt;I rolled up my sleeves, ran an elevated command prompt using &lt;a href="http://blogs.msdn.com/aaron_margosis/archive/2004/07/24/193721.aspx"&gt;MakeMeAdmin&lt;/a&gt;, then ran System Properties from the command prompt using "sysdm.cpl", and finally followed all the instructions in HowToGeek's article to stop the driver, disable the driver, and disable startup of the driver.&lt;/p&gt;
&lt;p&gt;Now, I'm beep free - fan-beeping-tastic!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tag/windows"&gt;windows&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/annoyances"&gt;annoyances&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/beep"&gt;beep&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2785.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=ZXDm1YLZfjI:4Natr7Iw9fs:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=ZXDm1YLZfjI:4Natr7Iw9fs:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=ZXDm1YLZfjI:4Natr7Iw9fs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=ZXDm1YLZfjI:4Natr7Iw9fs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=ZXDm1YLZfjI:4Natr7Iw9fs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/ZXDm1YLZfjI" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/04/22/ever-wanted-to-turn-off-windows-beep.aspx</guid>
            <pubDate>Wed, 22 Apr 2009 03:14:26 GMT</pubDate>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/04/22/ever-wanted-to-turn-off-windows-beep.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2785.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/04/22/ever-wanted-to-turn-off-windows-beep.aspx</feedburner:origLink></item>
        <item>
            <title>The Story Of WordPerfect: Almost Perfect</title>
            <category>Review</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/Uwv_fUEYcdM/the-story-of-wordperfect-almost-perfect.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.codinghorror.com/blog/archives/001252.html"&gt;Jeff Atwood&lt;/a&gt; blogged about the free online book &lt;a href="http://www.wordplace.com/ap/index.shtml"&gt;Almost Perfect&lt;/a&gt; earlier this week. Author Pete Peterson was part of WordPerfect for 12 years and opens a window into development process, marketing, competition, and highs and lows of the company, from a small starter to a big corporation.&lt;/p&gt;
&lt;p&gt;I think the broader themes in this book are still applicable today - the enthusiastic team learning on its feet, finding creative ways to compete, dealing with customers and incorporating feedback, handling "feature creep" and release schedules, and the culture of an organisation (in this case, run by programmers). Pete doesn't come across as a particularly sympathetic guy, but tells an interesting tale and gives an insight into the IT culture of the mid 80's to the early 90's.&lt;/p&gt;
&lt;p&gt;I was never a WordPerfect user but remember seeing it in shops and magazines; amazingly, WordPerfect was available on almost every operating system under the sun - DOS, AmigaOS, Windows, OS/2, Apple IIe, Apple IIGS, Apricot, Tandy, even Atari (with the enormous differences in architecture and capabilities, that almost equates to &lt;span style="font-style: italic;"&gt;x&lt;/span&gt; number of different products, aside from all the different versions!)&lt;/p&gt;
&lt;p&gt;I'm glad Jeff posted about &lt;a href="http://www.wordplace.com/ap/index.shtml"&gt;Almost Perfect&lt;/a&gt;. It's well worth the read.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tag/book"&gt;book&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/review"&gt;review&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2781.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Uwv_fUEYcdM:46cF763UW8A:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=Uwv_fUEYcdM:46cF763UW8A:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Uwv_fUEYcdM:46cF763UW8A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=Uwv_fUEYcdM:46cF763UW8A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Uwv_fUEYcdM:46cF763UW8A:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/Uwv_fUEYcdM" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/04/09/the-story-of-wordperfect-almost-perfect.aspx</guid>
            <pubDate>Thu, 09 Apr 2009 05:51:44 GMT</pubDate>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/04/09/the-story-of-wordperfect-almost-perfect.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2781.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/04/09/the-story-of-wordperfect-almost-perfect.aspx</feedburner:origLink></item>
        <item>
            <title>OT: I’m 10% (or so) April Fool</title>
            <category>OT</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/f9dV9NMtVrU/ot-im-10-or-so-april-fool.aspx</link>
            <description>&lt;p&gt;OK, I’ll admit I got got by a couple of the April Fool’s pranks around on Wednesday. &lt;a href="http://dubiousquality.blogspot.com/2009/04/startling-discovery.html"&gt;I was duped by Bill Harris at newly-subscribed Dubious Quality blog with his corker post on asthma and gravity&lt;/a&gt;. &lt;a href="http://feedproxy.google.com/~r/TheRuntime/~3/B6X0ya6LhYw/theruntime.com-is-no-morehellip-hello-alt.net.aspx"&gt;I was suckered by TheRuntime’s own Jay Kimble who had me worried when he blogged about closing this site&lt;/a&gt;. I only raised an eyebrow at the phoney &lt;a href="http://www.saveie6.com"&gt;SaveIE6&lt;/a&gt; campaign...at least I think it’s phoney...&lt;/p&gt;
&lt;p&gt;I feel like about 10% of an April Fool. I’d better pay more attention next year :-)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tag/april+fool"&gt;april fool&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/funny"&gt;funny&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2779.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=f9dV9NMtVrU:KMlTKSzsvrM:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=f9dV9NMtVrU:KMlTKSzsvrM:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=f9dV9NMtVrU:KMlTKSzsvrM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=f9dV9NMtVrU:KMlTKSzsvrM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=f9dV9NMtVrU:KMlTKSzsvrM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/f9dV9NMtVrU" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/04/03/ot-im-10-or-so-april-fool.aspx</guid>
            <pubDate>Fri, 03 Apr 2009 02:09:53 GMT</pubDate>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/04/03/ot-im-10-or-so-april-fool.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2779.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/04/03/ot-im-10-or-so-april-fool.aspx</feedburner:origLink></item>
        <item>
            <title>Enhancing Visualisation of Common Elements Across Groups Using Color in Reporting Services 2005, Part 2</title>
            <category>SQL Server</category>
            <category>Reporting Services</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/Pp53nIsOyZg/enhancing-visualisation-of-common-elements-across-groups-using-color-in-again.aspx</link>
            <description>&lt;p&gt;As I discussed &lt;a href="http://theruntime.com/blogs/thomasswilliams/archive/2009/03/10/enhancing-visualisation-of-common-elements-across-groups-using-color-in.aspx"&gt;last week in part 1 of this article&lt;/a&gt;, color can be used to highlight common elements across groups. As promised, here's the necessary code to achieve this effect in Reporting Services 2005 (&lt;a href="http://thomasswilliams.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24491"&gt;or you can download the finished report here&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Create a new report, and add a query.&lt;/strong&gt; I've used AdventureWorks and a simple query that returns employees and years of service:&lt;/p&gt;
&lt;div style="BORDER-RIGHT: #ececec 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ececec 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px 20px; BORDER-LEFT: #ececec 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #ececec 1px solid; BACKGROUND-COLOR: #fcfcfc"&gt;
&lt;pre style="BACKGROUND: #fcfcfc; COLOR: #000000"&gt;&lt;span style="COLOR: #808080"&gt;--get employees by Department, with years of service from AdventureWorks&lt;/span&gt;
&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;SELECT&lt;/span&gt;  &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;TOP&lt;/span&gt; 50 D.[Name] &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;AS&lt;/span&gt; [DepartmentName], 
        EMP.[EmployeeId], &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;C&lt;/span&gt;.[FirstName] + &lt;span style="COLOR: #0000ff"&gt;' '&lt;/span&gt; + &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;C&lt;/span&gt;.[LastName] &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;AS&lt;/span&gt; [EmployeeName], 
        &lt;span style="COLOR: #808080"&gt;--just an example: really simple, bogus calculation for years of service &lt;/span&gt;
        &lt;span style="COLOR: #808080"&gt;--from start date till now &lt;/span&gt;
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;DATEDIFF&lt;/span&gt;(&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;year&lt;/span&gt;, EMP.[HireDate], &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;GETDATE&lt;/span&gt;()) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;AS&lt;/span&gt; [YearsOfService] 
&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;FROM&lt;/span&gt;    &lt;span style="COLOR: #808080"&gt;--Employees &lt;/span&gt;
        HumanResources.[Employee] EMP &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;WITH&lt;/span&gt; (&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;NOLOCK&lt;/span&gt;) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;INNER&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;JOIN&lt;/span&gt; 
            &lt;span style="COLOR: #808080"&gt;--Person details (name) &lt;/span&gt;
            Person.[Contact] &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;C&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;WITH&lt;/span&gt; (&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;NOLOCK&lt;/span&gt;) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;ON&lt;/span&gt; 
                EMP.[ContactID] = &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;C&lt;/span&gt;.[ContactID] &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;INNER&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;JOIN&lt;/span&gt; 
            &lt;span style="COLOR: #808080"&gt;--current/last Department &lt;/span&gt;
            HumanResources.[EmployeeDepartmentHistory] EDH &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;WITH&lt;/span&gt; (&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;NOLOCK&lt;/span&gt;) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;ON&lt;/span&gt; 
                EMP.[EmployeeId] = EDH.[EmployeeId] &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;AND&lt;/span&gt; 
                EDH.[EndDate] &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;IS&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;NULL&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;INNER&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;JOIN&lt;/span&gt; 
            &lt;span style="COLOR: #808080"&gt;--Department details &lt;/span&gt;
            HumanResources.[Department] D &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;WITH&lt;/span&gt; (&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;NOLOCK&lt;/span&gt;) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;ON&lt;/span&gt; 
                EDH.[DepartmentID] = D.[DepartmentID] 
&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;ORDER&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;BY&lt;/span&gt; D.[Name], EMP.[EmployeeId]&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. Create a table in the report.&lt;/strong&gt; For my AdventureWorks sample, I've listed the employee's name and years of service by department groups.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Add the code for assigning a random color based on a passed value.&lt;/strong&gt; This goes under "Properties", "Code". The code is fairly self-explanatory; it creates an empty dictionary called &lt;code&gt;m_dic_KeyAndColors&lt;/code&gt; and each time &lt;code&gt;GetBackgroundColor&lt;/code&gt; is called, checks if the passed item is already in the dictionary. If the passed item is in the dictionary, the color associated with it is returned. If not, new random color is assigned and added to the dictionary before being returned:&lt;/p&gt;
&lt;div style="BORDER-RIGHT: #ececec 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ececec 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px 20px; BORDER-LEFT: #ececec 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #ececec 1px solid; BACKGROUND-COLOR: #fcfcfc"&gt;
&lt;pre style="BACKGROUND: #fcfcfc; COLOR: #000000"&gt;&lt;span style="COLOR: #808080"&gt;''' &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' Dictionary of passed string and matching colors, populated as it is used&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Private&lt;/span&gt; m_dic_KeyAndColors &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;New&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;System&lt;/span&gt;.Collections.Generic.Dictionary(Of &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;String&lt;/span&gt;, &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;String&lt;/span&gt;)

&lt;span style="COLOR: #808080"&gt;''' &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' New random object, based on code at http://www.developerfusion.co.uk/show/3940/ &lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Private&lt;/span&gt; objRandom &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;New&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;System&lt;/span&gt;.Random(CType(&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;System&lt;/span&gt;.DateTime.&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Now&lt;/span&gt;.Ticks Mod &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;System&lt;/span&gt;.Int32.MaxValue, &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt;))

&lt;span style="COLOR: #808080"&gt;''' &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' Returns a set color based on the passed string.&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Public&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Function&lt;/span&gt; GetBackgroundColor(&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;ByVal&lt;/span&gt; s &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;String&lt;/span&gt;) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;String&lt;/span&gt; 

    Try

        &lt;span style="COLOR: #808080"&gt;' does the dictionary have an entry with the passed string and matching color?&lt;/span&gt;
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt; m_dic_KeyAndColors.ContainsKey(s) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Then&lt;/span&gt;
            &lt;span style="COLOR: #808080"&gt;' return the pre-stored color&lt;/span&gt;
            &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Return&lt;/span&gt; m_dic_KeyAndColors(s)
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Else&lt;/span&gt;
            &lt;span style="COLOR: #808080"&gt;' get a new random color by calling "GetRandomBackgroundColor", add it and the &lt;/span&gt;
            &lt;span style="COLOR: #808080"&gt;' passed string to the dictionary, and return the color&lt;/span&gt;
            m_dic_KeyAndColors.Add(s, GetRandomBackgroundColor())
            &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Return&lt;/span&gt; m_dic_KeyAndColors(s)
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;End&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt;
    Catch ex &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; Exception
        &lt;span style="COLOR: #808080"&gt;' return neutral color&lt;/span&gt;
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Return&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;"#ececed"&lt;/span&gt;
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;End&lt;/span&gt; Try

&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;End&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Function&lt;/span&gt;

&lt;span style="COLOR: #808080"&gt;''' &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' Return a random web color where 2 of R, G or B are fixed by the passed&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' "Highest" and "Lowest" hues, and a random value between the two is generated&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' for the remaining. Which values get assigned to R, G and B is also randomised.&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' For .NET-centric explanation of colors, see Dave Lean's blog post at  &lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' http://blogs.msdn.com/davidlean/archive/2009/02/17/sql-reporting-how-to-conditional-color-2-4-functions-for-tables-charts.aspx &lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;param name="Highest"&amp;gt;Highest hue value (0-255), set to light color with low saturation by default&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;param name="Lowest"&amp;gt;Lowest hue value (0-255), set to light color with low saturation by default&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;returns&amp;gt;Hex color string in he format "#RRGGBB"&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;span style="COLOR: #808080"&gt;''' &amp;lt;remarks&amp;gt;Adapted from http://www.perlmonks.org/?node_id=305209 &amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Public&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Function&lt;/span&gt; GetRandomBackgroundColor(Optional &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;ByVal&lt;/span&gt; Highest &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt; = 215, Optional &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;ByVal&lt;/span&gt; Lowest &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt; = 153) &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;String&lt;/span&gt;

    &lt;span style="COLOR: #808080"&gt;' sanity check: ensure "highest" and "lowest" are between 0-255 &lt;/span&gt;
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt; Highest &amp;gt; 255 &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Then&lt;/span&gt; Highest = 255
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt; Highest &amp;lt; 0 &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Then&lt;/span&gt; Highest = 0
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt; Lowest &amp;gt; 255 &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Then&lt;/span&gt; Lowest = 255
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt; Lowest &amp;lt; 0 &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Then&lt;/span&gt; Lowest = 0
    &lt;span style="COLOR: #808080"&gt;' sanity check: is "highest" higher than "lowest"&lt;/span&gt;
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt; Highest &amp;lt; Lowest &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Then&lt;/span&gt;
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Dim&lt;/span&gt; temp &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt;
        temp = Lowest
        Lowest = Highest
        Highest = temp
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;End&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;If&lt;/span&gt;

    &lt;span style="COLOR: #808080"&gt;' get a random number in the middle of highest and lowest &lt;/span&gt;
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Dim&lt;/span&gt; Middle &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt; = objRandom.[&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Next&lt;/span&gt;](Lowest, Highest + 1)

    &lt;span style="COLOR: #808080"&gt;' create an array with the 3 values - Highest, Lowest and Middle &lt;/span&gt;
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Dim&lt;/span&gt; a() &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt; = &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;New&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt;() {Highest, Lowest, Middle}

    &lt;span style="COLOR: #808080"&gt;' randomise the order of the 3 values with Fisher-Yates shuffle &lt;/span&gt;
    &lt;span style="COLOR: #808080"&gt;' see also http://www.codinghorror.com/blog/archives/001015.html &lt;/span&gt;
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;For&lt;/span&gt; i &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt; = 2 &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;To&lt;/span&gt; 0 Step -1
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Dim&lt;/span&gt; n &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt; = objRandom.[&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Next&lt;/span&gt;](i + 1)
        &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Dim&lt;/span&gt; temp &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;As&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Integer&lt;/span&gt; = a(i)
        a(i) = a(n)
        a(n) = temp
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Next&lt;/span&gt;

    &lt;span style="COLOR: #808080"&gt;' return a web color string using hex/"X2" formatting&lt;/span&gt;
    &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Return&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;String&lt;/span&gt;.&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Format&lt;/span&gt;(&lt;span style="COLOR: #0000ff"&gt;"#{0:X2}{1:X2}{2:X2}"&lt;/span&gt;, a(0), a(1), a(2))

&lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;End&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold; COLOR: #000084"&gt;Function&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;4. In the background color expression for the table cell to be colored, call "=Code.GetBackgroundColor([YourFieldValue])".&lt;/strong&gt; In my example, the background color expression is &lt;code&gt;"=Code.GetBackgroundColor(Fields!YearsOfService.Value)"&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here's the end result, &lt;a href="http://thomasswilliams.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24491"&gt;downloadable from CodePlex&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.co.uk/lh/photo/0e-wwR9nP9_wH0mJRNQT6A?feat=embedwebsite"&gt;&lt;img border="0" alt="" src="http://lh5.ggpht.com/_Ln7LRKt4zEw/SbXVQ_A83PI/AAAAAAAABCU/y_IlM-vLw7Y/s400/color-sample-end-result.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px 20px; PADDING-TOP: 5px; BACKGROUND-COLOR: #ffffce"&gt;&lt;strong&gt;Aside: Why Did I Randomly Generate the Colors?&lt;/strong&gt;&lt;br /&gt;
Initially I had an array of pastel colors that I'd already selected. That was until I came across &lt;a href="http://blogs.msdn.com/davidlean/archive/2009/01/30/sql-reporting-how-to-color-coding-based-on-data-values-for-tables-charts-1-n.aspx"&gt;Dave Lean's series on generating random colors for reports&lt;/a&gt; which explains how to generate random colors and convert decimal to hex. Suitably inspired, I looked around and found a useful snippet to generate light random colors only at &lt;a href="http://www.perlmonks.org/?node_id=305209"&gt;this PERL forum posting&lt;/a&gt; (which forms the basis for my &lt;code&gt;GetRandomBackgroundColor&lt;/code&gt; function).&lt;/p&gt;
&lt;h2&gt;Optional Steps&lt;/h2&gt;
&lt;p&gt;Repeating text can be turned off so that the color "groups" the data together.&lt;/p&gt;
&lt;h2&gt;Limitations&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;Color should not be used as the sole indicator to make distinctions for important data, as there's a percentage of the population who have trouble telling colors apart (color blindness or color deficiency). You can find more information &lt;a href="http://www.toledo-bend.com/colorblind/ishihara.html"&gt;here&lt;/a&gt;. &lt;/li&gt;
    &lt;li&gt;This technique only makes sense on a small scale and I would not use it on large amounts of data. For large amounts of data, groups and sub-groups identify relationships in data better than color alone. Also, with many distinct items, you run the risk of having very similar colors that makes highlighting by color less effective. &lt;/li&gt;
    &lt;li&gt;This technique has only been tested in Visual Studio 2005. &lt;/li&gt;
    &lt;li&gt;As you can see from the finished result, this is not a heatmap. Each item is assigned a new totally random color. &lt;/li&gt;
    &lt;li&gt;Every time the report is run, different random colors will be generated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tag/reporting+services"&gt;reporting services&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/visual"&gt;visual&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/group"&gt;group&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/color"&gt;color&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2768.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Pp53nIsOyZg:KDTXw3awu1o:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=Pp53nIsOyZg:KDTXw3awu1o:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Pp53nIsOyZg:KDTXw3awu1o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=Pp53nIsOyZg:KDTXw3awu1o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=Pp53nIsOyZg:KDTXw3awu1o:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/Pp53nIsOyZg" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/03/18/enhancing-visualisation-of-common-elements-across-groups-using-color-in-again.aspx</guid>
            <pubDate>Wed, 18 Mar 2009 01:56:52 GMT</pubDate>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/03/18/enhancing-visualisation-of-common-elements-across-groups-using-color-in-again.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2768.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/03/18/enhancing-visualisation-of-common-elements-across-groups-using-color-in-again.aspx</feedburner:origLink></item>
        <item>
            <title>Enhancing Visualisation of Common Elements Across Groups Using Color in Reporting Services 2005, Part 1</title>
            <category>Reporting Services</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/vYFZ3hnsXbY/enhancing-visualisation-of-common-elements-across-groups-using-color-in.aspx</link>
            <description>&lt;p&gt;Often a report must be able to be grouped by one or more categories, depending on the user's requirements.&lt;/p&gt;
&lt;p&gt;Sometimes, across groups, it's helpful to highlight common elements. Imagine that the illustration below lists employees by department (the main grouping), with the last column being a common element to all employees:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.co.uk/lh/photo/cvHd2ki6bxPCQDVbt0Oi9A?feat=embedwebsite"&gt;&lt;img alt="" border="0" src="http://lh4.ggpht.com/_Ln7LRKt4zEw/SbXGkuCg86I/AAAAAAAABCE/yPfFUQWGIpk/s400/color-sample-figure-1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It's difficult to identify common elements across the main group for the last column in figure 1, even though values like "AAAAA" and "ZZZZZ" are repeated. In fact, it's not possible to draw any conclusions about the last column (like how many employees share the common element "ZZZZZ") without physically scanning the entire text of the last column. It would be easier to visualise if the last column was in its own sub-group - although doing so would interrupt the flow of the main group, department.&lt;/p&gt;
&lt;p&gt;Here's a revised illustration where the only change is color to the last column:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.co.uk/lh/photo/aAEmpNfcER1671g5ytha8A?feat=embedwebsite"&gt;&lt;img alt="" border="0" src="http://lh4.ggpht.com/_Ln7LRKt4zEw/SbXGk-yvC7I/AAAAAAAABCM/42MfxIWGwNs/s400/color-sample-figure-2.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From the revised illustration in figure 2, it's easy to see how many "ZZZZZ" employees there are (highlighted in oceanic aqua), and even the fact that there's some in both sets, without really having to read the text.&lt;/p&gt;
&lt;p&gt;Color is being used here as a &lt;a href="http://dashboardspy.com/dashboards/47/intuitive-dashboard-design-preattentive-variables"&gt;"Pre-Attentive Variable": something that may convey information to a user, before they've paid attention to it&lt;/a&gt;. Next week, in part 2 of "Enhancing Visualisation of Common Elements Across Groups Using Color in Reporting Services 2005", I'll demonstrate the code to color Reporting Services table cells without hardcoding the variables, so my technique is re-useable between reports.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tag/reporting+services"&gt;reporting services&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/visual"&gt;visual&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/group"&gt;group&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/color"&gt;color&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2761.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=vYFZ3hnsXbY:u91MN9-9CU8:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=vYFZ3hnsXbY:u91MN9-9CU8:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=vYFZ3hnsXbY:u91MN9-9CU8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=vYFZ3hnsXbY:u91MN9-9CU8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=vYFZ3hnsXbY:u91MN9-9CU8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/vYFZ3hnsXbY" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/03/10/enhancing-visualisation-of-common-elements-across-groups-using-color-in.aspx</guid>
            <pubDate>Tue, 10 Mar 2009 02:09:12 GMT</pubDate>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/03/10/enhancing-visualisation-of-common-elements-across-groups-using-color-in.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2761.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/03/10/enhancing-visualisation-of-common-elements-across-groups-using-color-in.aspx</feedburner:origLink></item>
        <item>
            <title>Index Rebuild, Re-Organise or Just a Statistics Update? Use "IndexOptimise"!</title>
            <category>SQL Server</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/oaopcdktJp0/index-rebuild-re-organise-or-just-a-statistics-update-use-indexoptimise.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blog.ola.hallengren.com/About.html"&gt;Ola Hallengren&lt;/a&gt; recently posted an all-in-one solution for backups, integrity checks and index optimisation for SQL Server 2005 and 2008 &lt;a href="http://blog.ola.hallengren.com/blog/_archives/2008/1/1/3440068.html"&gt;here&lt;/a&gt; (&lt;a href="http://blog.ola.hallengren.com/blog/_archives/2008/1/1/3440068.html"&gt;http://blog.ola.hallengren.com/blog/_archives/2008/1/1/3440068.html&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;I'm particularly interested in Ola's &lt;em&gt;extremely&lt;/em&gt; flexible index optimisation stored procedure, &lt;code&gt;IndexOptimise&lt;/code&gt; (you also need his &lt;code&gt;CommandExecute&lt;/code&gt; and &lt;code&gt;DatabaseSelect&lt;/code&gt; scripts to run it).&lt;/p&gt;&lt;p&gt;By default, &lt;code&gt;IndexOptimise&lt;/code&gt; rebuilds indexes with fragmentation over 30%, re-organises indexes with fragmentation between 5% and 30%, and ignores indexes with fragmentation under 5% or smaller than a configurable size. The level of configurability offered improves on Maintenance Plans - &lt;a href="http://blog.ola.hallengren.com/_attachments/3440068/MaintenancePlans.html"&gt;see Ola's comparison here&lt;/a&gt; - because changes to indexes that don't need changing increase differential backup sizes (and I'm always confused about which to use...a rebuild, re-organise or just a statistics update?)&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.ola.hallengren.com/_attachments/3440068/Documentation.html"&gt;Ola has also gone to the trouble of documenting his solution&lt;/a&gt; and &lt;a href="http://blog.ola.hallengren.com/_attachments/3440068/MaintenanceSolution.sql"&gt;creating a 1-script install&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Well done Ola! (via &lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Search-Engine-QA-10-Rebuilding-Indexes-and-Updating-Statistics.aspx"&gt;Paul Randall&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;em&gt;Tags: &lt;a href="http://technorati.com/tag/sql+server" rel="tag"&gt;sql server&lt;/a&gt;, &lt;a href="http://technorati.com/tag/index" rel="tag"&gt;index&lt;/a&gt;, &lt;a href="http://technorati.com/tag/rebuild" rel="tag"&gt;rebuild&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ola+hallengren" rel="tag"&gt;ola hallengren&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2757.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=oaopcdktJp0:7RI22TKVsJM:XhI0_UKdTUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=oaopcdktJp0:7RI22TKVsJM:XhI0_UKdTUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=oaopcdktJp0:7RI22TKVsJM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?i=oaopcdktJp0:7RI22TKVsJM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thomasswilliams-tech?a=oaopcdktJp0:7RI22TKVsJM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thomasswilliams-tech?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/oaopcdktJp0" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/03/04/index-rebuild-re-organise-or-just-a-statistics-update-use-indexoptimise.aspx</guid>
            <pubDate>Wed, 04 Mar 2009 04:29:04 GMT</pubDate>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/03/04/index-rebuild-re-organise-or-just-a-statistics-update-use-indexoptimise.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2757.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/03/04/index-rebuild-re-organise-or-just-a-statistics-update-use-indexoptimise.aspx</feedburner:origLink></item>
        <item>
            <title>David Lean's Conditional Color in Reporting Services Series</title>
            <category>SQL Server</category>
            <category>Reporting Services</category>
            <link>http://feedproxy.google.com/~r/thomasswilliams-tech/~3/RtV4MWdYgSo/david-leans-conditional-color-in-reporting-services-series.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/davidlean/"&gt;Microsoft's David Lean&lt;/a&gt; has a great series of posts on &lt;a href="http://blogs.msdn.com/davidlean/archive/2009/01/30/sql-reporting-how-to-color-coding-based-on-data-values-for-tables-charts-1-n.aspx"&gt;"heatmapping" and other color-based conditional formatting in Reporting Services tables and charts (link is to part 4 of the series)&lt;/a&gt; (&lt;a href="http://blogs.msdn.com/robertbruckner/archive/2009/02/19/ultimate-guide-to-color-scales-and-conditional-formatting.aspx"&gt;via Robert Bruckner&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Particularly useful are Dave's algorithms that work on colors and shades and conversion to hex values; &lt;a href="http://blogs.msdn.com/davidlean/archive/2009/02/17/sql-reporting-how-to-conditional-color-2-4-functions-for-tables-charts.aspx"&gt;part 2 of the series has how to change hue&lt;/a&gt;, while &lt;a href="http://blogs.msdn.com/davidlean/archive/2009/02/17/sql-reporting-how-to-conditional-color-3-4-tint-shade-functions.aspx"&gt;part 3 details how to change saturation&lt;/a&gt;. And, Dave packs as much useful content into his tips and asides as his main content!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tags: &lt;a rel="tag" href="http://technorati.com/tags/reporting+services"&gt;reporting services&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/sql+server"&gt;sql server&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/color"&gt;color&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/thomasswilliams/aggbug/2754.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/thomasswilliams-tech?a=5pcW7Fof"&gt;&lt;img src="http://feeds.feedburner.com/~f/thomasswilliams-tech?i=5pcW7Fof" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/thomasswilliams-tech?a=uL1Eu4h4"&gt;&lt;img src="http://feeds.feedburner.com/~f/thomasswilliams-tech?i=uL1Eu4h4" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/thomasswilliams-tech?a=4NnLHbOj"&gt;&lt;img src="http://feeds.feedburner.com/~f/thomasswilliams-tech?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/thomasswilliams-tech/~4/RtV4MWdYgSo" height="1" width="1"/&gt;</description>
            <dc:creator>Thomas Williams</dc:creator>
            <guid isPermaLink="false">http://theruntime.com/blogs/thomasswilliams/archive/2009/02/23/david-leans-conditional-color-in-reporting-services-series.aspx</guid>
            <pubDate>Sun, 22 Feb 2009 23:16:28 GMT</pubDate>
            <comments>http://theruntime.com/blogs/thomasswilliams/archive/2009/02/23/david-leans-conditional-color-in-reporting-services-series.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/thomasswilliams/comments/commentRss/2754.aspx</wfw:commentRss>
        <feedburner:origLink>http://theruntime.com/blogs/thomasswilliams/archive/2009/02/23/david-leans-conditional-color-in-reporting-services-series.aspx</feedburner:origLink></item>
    </channel>
</rss>
