<?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:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>Nik's Technology Blog</title>
    <description>Software/Web Development and SEO</description>
    <link>http://www.nikmakris.com/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.5.0.7</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www.nikmakris.com/blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Nik Makris</dc:creator>
    <dc:title>Nik's Technology Blog</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/nikmakris" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="nikmakris" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/nikmakris" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fnikmakris" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
      <title>Debugging Alterian CMC / Immediacy Plug-ins</title>
      <description>&lt;p&gt;Debugging an Alterian CMC/Immediacy plug-in isn’t that straight forward because when they don’t work there isn’t an easy way for a developer to determine the problem.&lt;/p&gt;  &lt;p&gt;In the Editor you generally get an unhelpful pop-up message like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="immediacy editor error" border="0" alt="immediacy editor error" src="http://www.nikmakris.com/images/blog/DebuggingAlterianCMCImmediacyPlugins_B21B/immediacyeditorerror.gif" width="297" height="127" /&gt; &lt;/p&gt;  &lt;p&gt;Which also means none of the plug-ins will be available for use.&lt;/p&gt;  &lt;p&gt;There is an CMC log file that can be viewed by navigating to the following path on your web server.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;C:\Program Files\Alterian\CMC 6.2\CMS\Logging\ViewLogFile.xml&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="immediacy-logs" border="0" alt="immediacy-logs" src="http://www.nikmakris.com/images/blog/DebuggingAlterianCMCImmediacyPlugins_B21B/immediacylogs.gif" width="400" height="371" /&gt; &lt;/p&gt;  &lt;p&gt;But this isn’t as helpful as it may seem because if a plug-in has errors then they won’t generally get logged here or anywhere else it seems.&lt;/p&gt;  &lt;p&gt;The other tool you have at your disposal is a special plug-ins page that enumerates the plug-ins installed or throws an error when one has broken.&amp;#160; This error can sometimes lead you to a fix for the problem.&lt;/p&gt;  &lt;p&gt;Open Internet Explorer on your web server and navigate to:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;http://localhost/_immediacy/editor/plugins.ashx&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; This will only work locally on the web server, and will return some XML defining the properties for each installed plug-in.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="immediacy-plugins" border="0" alt="immediacy-plugins" src="http://www.nikmakris.com/images/blog/DebuggingAlterianCMCImmediacyPlugins_B21B/immediacyplugins.gif" width="500" height="371" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aM_q7hXScLamZb0eAfF7RgpHmws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aM_q7hXScLamZb0eAfF7RgpHmws/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/aM_q7hXScLamZb0eAfF7RgpHmws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aM_q7hXScLamZb0eAfF7RgpHmws/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/nikmakris?a=WlI0N0rA91o:7Qx3B22n8IA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=WlI0N0rA91o:7Qx3B22n8IA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=WlI0N0rA91o:7Qx3B22n8IA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=WlI0N0rA91o:7Qx3B22n8IA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=WlI0N0rA91o:7Qx3B22n8IA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=WlI0N0rA91o:7Qx3B22n8IA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=WlI0N0rA91o:7Qx3B22n8IA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Debugging-Alterian-CMC-Immediacy-Plug-ins.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Debugging-Alterian-CMC-Immediacy-Plug-ins.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=070fff18-10e3-4735-a973-6e3110fa2553</guid>
      <pubDate>Tue, 09 Nov 2010 13:20:00 +0000</pubDate>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=070fff18-10e3-4735-a973-6e3110fa2553</pingback:target>
      <slash:comments>821</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=070fff18-10e3-4735-a973-6e3110fa2553</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Debugging-Alterian-CMC-Immediacy-Plug-ins.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=070fff18-10e3-4735-a973-6e3110fa2553</wfw:commentRss>
    </item>
    <item>
      <title>Ambiguous DLLs</title>
      <description>&lt;p&gt;We&amp;rsquo;ve just been testing an upgrade our CMS and come across a few problems concerning newer versions of assemblies interfering with older versions stored in the GAC.&lt;/p&gt;
&lt;p&gt;The solution is to use a binding redirect in &lt;em&gt;Web.Config&lt;/em&gt; to tell the framework to use the latest version.&amp;nbsp; For more info see &lt;a href="http://msdn.microsoft.com/en-us/library/7wd6ex19%28VS.71%29.aspx"&gt;Redirecting Assembly Versions&lt;/a&gt;.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; text-align: left; padding: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',courier,monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text;"&gt;
&lt;div id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;runtime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;assemblyBinding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="urn:schemas-microsoft-com:asm.v1"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;dependentAssembly&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;assemblyIdentity&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Immediacy.Web"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;publicKeyToken&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="b35b2a186fcebe46"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bindingRedirect&lt;/span&gt; &lt;span style="color: #ff0000"&gt;oldVersion&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="6.1.0.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;newVersion&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="6.2.0.0"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;dependentAssembly&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;assemblyBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;runtime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To get the &lt;strong&gt;publicKeyToken&lt;/strong&gt; for the DLL you need to open a Visual Studio command prompt and navigate to the folder containing the DLL and type:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SN &amp;ndash;T assemblyname.dll&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This will give you the publicKeyToken to put in the assembly identity.&lt;/p&gt;
&lt;p&gt;Alternatively you could remove the old version of the DLL from the GAC by using this command with the &lt;a href="http://msdn.microsoft.com/en-us/library/ex0ss12c%28VS.80%29.aspx"&gt;Global Assembly Cache Tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gacutil /u Immediacy.Web, Version=6.1.0.0, Culture="en",PublicKeyToken=b35b2a186fcebe46&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qUIHxTfTZ54fRzfNXw0RrCgHO68/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qUIHxTfTZ54fRzfNXw0RrCgHO68/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/qUIHxTfTZ54fRzfNXw0RrCgHO68/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qUIHxTfTZ54fRzfNXw0RrCgHO68/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/nikmakris?a=Ttkz9i5pqG8:XYouG9sK9Hk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=Ttkz9i5pqG8:XYouG9sK9Hk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=Ttkz9i5pqG8:XYouG9sK9Hk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=Ttkz9i5pqG8:XYouG9sK9Hk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=Ttkz9i5pqG8:XYouG9sK9Hk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=Ttkz9i5pqG8:XYouG9sK9Hk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=Ttkz9i5pqG8:XYouG9sK9Hk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Ambiguous-DLLs.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Ambiguous-DLLs.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=fd962682-2272-4536-8886-90118be95664</guid>
      <pubDate>Mon, 08 Nov 2010 17:00:00 +0000</pubDate>
      <category>Web Development</category>
      <category>Web Servers</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=fd962682-2272-4536-8886-90118be95664</pingback:target>
      <slash:comments>73</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=fd962682-2272-4536-8886-90118be95664</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Ambiguous-DLLs.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=fd962682-2272-4536-8886-90118be95664</wfw:commentRss>
    </item>
    <item>
      <title>Developing Scheduled Tasks for Immediacy Management Console (Alterian CMC)</title>
      <description>&lt;p&gt;Immediacy Management Console Scheduled Tasks are useful for running tasks that need to occur automatically on a frequent basis which are independent of website visitor actions.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="immediacy-mc" border="0" alt="immediacy-mc" src="http://www.nikmakris.com/images/blog/DevelopingScheduledTasksforImmediacyMana_D90C/immediacymc.gif" width="502" height="377" /&gt; &lt;/p&gt;  &lt;p&gt;These scheduled tasks have the advantage of being able to hook up to the Immediacy API, allowing developers to perform tasks on Immediacy pages etc.&lt;/p&gt;  &lt;p&gt;Scheduled tasks can have public properties if required, which are entered via a Plug-in Settings dialog box.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="immediacy-mc-settings" border="0" alt="immediacy-mc-settings" src="http://www.nikmakris.com/images/blog/DevelopingScheduledTasksforImmediacyMana_D90C/immediacymcsettings.gif" width="502" height="363" /&gt; &lt;/p&gt;  &lt;h2&gt;Plug-in Development&lt;/h2&gt;  &lt;p&gt;Immediacy Management Console plug-ins are simply a .NET class library. The project should contain a C# or VB.NET file containing the plug-in and a separate class which defines the Plug-in Settings dialog.&lt;/p&gt;  &lt;p&gt;The plug-in class needs to reference the following Immediacy namespaces.&lt;/p&gt;  &lt;p&gt;&lt;font color="#008040"&gt;Immediacy.Configuration;     &lt;br /&gt;&lt;/font&gt;&lt;font color="#008040"&gt;Immediacy.Service.Interfaces;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Your plug-in class needs to inherit from: &lt;/p&gt;  &lt;p&gt;&lt;font color="#008040"&gt;Immediacy.Service.Interfaces.Plugin&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;And your class needs to have a few class attributes for Immediacy (CMC) to recognise your plug-in:&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;[&lt;span style="color: #2b91af"&gt;SettingsControlTypeAttribute&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;SiteMapSettings&lt;/span&gt;))]      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;[&lt;span style="color: #2b91af"&gt;GuidAttribute&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;XXXX8D90-XXXX-XXXX-XXXX-A3341127XXXX&amp;quot;&lt;/span&gt;)]      &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;[&lt;span style="color: #2b91af"&gt;PluginDetailsType&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Name of Plug-in&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;span style="mso-no-proof: yes"&gt; &lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Your plug-in class constructor needs to pass the settings to the base class as follows:&lt;/p&gt;  &lt;p style="tab-stops: 93.75pt" class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;public&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt; Sitemap(&lt;span style="color: #2b91af"&gt;ImcFile&lt;/span&gt; imcFile, &lt;span style="color: #2b91af"&gt;StringDictionary&lt;/span&gt; settings) : &lt;span style="color: blue"&gt;base&lt;/span&gt;(imcFile, settings) { } &lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;To build your plug-in you need to override the &lt;b&gt;Execute()&lt;/b&gt; method and put your code in here.&lt;/p&gt;  &lt;h2&gt;Plug-in Settings Dialog Development&lt;/h2&gt;  &lt;p style="tab-stops: 93.75pt" class="MsoNormal"&gt;   &lt;br /&gt;The plug-in settings dialog is created by another class, which inherits from &lt;span style="line-height: 115%; font-family: &amp;#39;Courier New&amp;#39;; font-size: 10pt; mso-no-proof: yes"&gt;Immediacy.Service.Interfaces.&lt;span style="color: #2b91af"&gt;SettingsControl &lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;This class is essentially a Windows Form code file without the form designer, so you’ll need to import the&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;#39;Courier New&amp;#39;; font-size: 10pt; mso-no-proof: yes"&gt;System.Windows.Forms &lt;/span&gt;namespace.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;You’ll need to add Windows.Forms &lt;strong&gt;Labels&lt;/strong&gt; and &lt;strong&gt;TextBoxes&lt;/strong&gt; to the dialog box to capture the public properties from the user who configures the plug-in while scheduling it. &lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes"&gt;Implement the abstract class like the example below: &lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&amp;#160;&lt;/h2&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;namespace&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt; ImmPlugins.Sitemap     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;{     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SettingTest&lt;/span&gt; : Immediacy.Service.Interfaces.&lt;span style="color: #2b91af"&gt;SettingsControl       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; System.Windows.Forms.&lt;span style="color: #2b91af"&gt;TextBox&lt;/span&gt; txtUrl;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;private&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt; System.Windows.Forms.&lt;span style="color: #2b91af"&gt;Label&lt;/span&gt; lblUrl;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;private&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt; System.ComponentModel.&lt;span style="color: #2b91af"&gt;Container&lt;/span&gt; components = &lt;span style="color: blue"&gt;null&lt;/span&gt;;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; SiteMapSettings(&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; pluginType)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;: &lt;span style="color: blue"&gt;base&lt;/span&gt;(pluginType)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;InitializeComponent();      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; System.Collections.Specialized.&lt;span style="color: #2b91af"&gt;StringDictionary&lt;/span&gt; Settings      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;get       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringDictionary&lt;/span&gt; retVal = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StringDictionary&lt;/span&gt;();      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;retVal.Add(&lt;span style="color: #a31515"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;, txtUrl.Text);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; retVal;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;set       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;txtUrl.Text = (&lt;span style="color: blue"&gt;string&lt;/span&gt;)&lt;span style="color: blue"&gt;value&lt;/span&gt;[&lt;span style="color: #a31515"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;];      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; SettingsAreValid      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt; {      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (txtUrl.Text == “”)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin: 0cm 0cm 0pt 108pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;return&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt; &lt;span style="color: blue"&gt;false&lt;/span&gt;;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;else       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;}     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; SettingsAreValidVerbose      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt; {      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin: 0cm 0cm 0pt 72pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;string&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt; errorText = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (txtUrl.Text == &lt;span style="color: #a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin: 0cm 0cm 0pt 120pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;errorText += &lt;span style="color: #a31515"&gt;&amp;quot;Please specify a URL \r\n&amp;quot;&lt;/span&gt;;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin: 0cm 0cm 0pt 72pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;}     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin: 0cm 0cm 0pt 72pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;return&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt; errorText;     &lt;br /&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; InitializeComponent()      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.lblUrl = &lt;span style="color: blue"&gt;new&lt;/span&gt; System.Windows.Forms.&lt;span style="color: #2b91af"&gt;Label&lt;/span&gt;();      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.txtUrl = &lt;span style="color: blue"&gt;new&lt;/span&gt; System.Windows.Forms.&lt;span style="color: #2b91af"&gt;TextBox&lt;/span&gt;();      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.txtUrl.Location = &lt;span style="color: blue"&gt;new&lt;/span&gt; System.Drawing.&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(202, 59);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.txtUrl.Name = &lt;span style="color: #a31515"&gt;&amp;quot;txtUrl&amp;quot;&lt;/span&gt;;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.txtUrl.Size = &lt;span style="color: blue"&gt;new&lt;/span&gt; System.Drawing.&lt;span style="color: #2b91af"&gt;Size&lt;/span&gt;(160, 20);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.txtUrl.TabIndex = 2;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.lblUrl.Location = &lt;span style="color: blue"&gt;new&lt;/span&gt; System.Drawing.&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(8, 59);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.lblUrl.Name = &lt;span style="color: #a31515"&gt;&amp;quot;lblUrl&amp;quot;&lt;/span&gt;;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.lblUrl.Size = &lt;span style="color: blue"&gt;new&lt;/span&gt; System.Drawing.&lt;span style="color: #2b91af"&gt;Size&lt;/span&gt;(188, 16);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.lblUrl.TabIndex = 1;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.lblUrl.Text = &lt;span style="color: #a31515"&gt;&amp;quot;URL:&amp;quot;&lt;/span&gt;;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; text-indent: 36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; color: blue; font-size: 10pt; mso-no-proof: yes"&gt;this&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;.ClientSize = &lt;span style="color: blue"&gt;new&lt;/span&gt; System.Drawing.&lt;span style="color: #2b91af"&gt;Size&lt;/span&gt;(374, 183);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: blue"&gt;this&lt;/span&gt;.lblUrl);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.Controls.Add(&lt;span style="color: blue"&gt;this&lt;/span&gt;.txtUrl);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.Name = &lt;span style="color: #a31515"&gt;&amp;quot;PluginSettings&amp;quot;&lt;/span&gt;;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.ResumeLayout(&lt;span style="color: blue"&gt;false&lt;/span&gt;);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.PerformLayout();      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;     &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Dispose(&lt;span style="color: blue"&gt;bool&lt;/span&gt; disposing)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (disposing)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (components != &lt;span style="color: blue"&gt;null&lt;/span&gt;)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;components.Dispose();      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;base&lt;/span&gt;.Dispose(disposing);      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes"&gt;}     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;Plug-in Installation&lt;/h2&gt;  &lt;p&gt;   &lt;br /&gt;Immediacy Management Console plug-ins are installed in the Immediacy CMS folder path.&lt;/p&gt;  &lt;p&gt;Simply compile your .NET class library to a DLL and copy it to this directory.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;e.g.&lt;/strong&gt; &lt;strong&gt;C:\Program Files\Immediacy\CMS\6.1\Service\Plugins&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;(&lt;u&gt;Note&lt;/u&gt;: This path maybe slightly different on your installation depending on Immediacy version, drive path etc)&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;If all has gone well your plug-in should show up in the list of tasks which can be scheduled in the Immediacy Management Console.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AM5JX9Gt1a9e_3s199V9Z-LUMGY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AM5JX9Gt1a9e_3s199V9Z-LUMGY/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/AM5JX9Gt1a9e_3s199V9Z-LUMGY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AM5JX9Gt1a9e_3s199V9Z-LUMGY/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/nikmakris?a=7DnbulF7UCk:nMaoDvKpAno:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=7DnbulF7UCk:nMaoDvKpAno:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=7DnbulF7UCk:nMaoDvKpAno:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=7DnbulF7UCk:nMaoDvKpAno:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=7DnbulF7UCk:nMaoDvKpAno:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=7DnbulF7UCk:nMaoDvKpAno:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=7DnbulF7UCk:nMaoDvKpAno:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Developing-Scheduled-Tasks-for-Immediacy-Management-Console-(Alterian-CMC).aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Developing-Scheduled-Tasks-for-Immediacy-Management-Console-(Alterian-CMC).aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=f380e66f-9dfe-4b19-b539-1e40c32326f6</guid>
      <pubDate>Wed, 15 Sep 2010 19:31:00 +0000</pubDate>
      <category>Web Development</category>
      <category>Web Servers</category>
      <category>Software Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=f380e66f-9dfe-4b19-b539-1e40c32326f6</pingback:target>
      <slash:comments>220</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=f380e66f-9dfe-4b19-b539-1e40c32326f6</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Developing-Scheduled-Tasks-for-Immediacy-Management-Console-(Alterian-CMC).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=f380e66f-9dfe-4b19-b539-1e40c32326f6</wfw:commentRss>
    </item>
    <item>
      <title>Adsense for Domains - Fasthosts Setup</title>
      <description>&lt;p&gt;Until recently you couldn't take advantage of &lt;strong&gt;Adsense for Domains&lt;/strong&gt; if you registered a domain name with &lt;a href="http://www.fasthosts.co.uk/" rel="nofollow"&gt;Fasthosts&lt;/a&gt;.&amp;#160; However, with the new Fasthosts control panel which now allows you to edit DNS settings, domain name owners can now earn revenue from domain names they don't currently use. &lt;/p&gt;  &lt;p&gt;If you're familiar with &lt;a href="https://www.google.com/adsense/" rel="nofollow"&gt;Google Adsense&lt;/a&gt;, you may have seen the &amp;quot;Adsense for Domains&amp;quot; link on the &amp;quot;Adsense Setup&amp;quot; tab on the Adsense navigation.&amp;#160; Unfortunately the &amp;quot;Quick start guide&amp;quot; Google provides doesn't include instructions for Fasthosts setup and following the generic instructions doesn’t work either.&lt;/p&gt;  &lt;h3&gt;The solution&lt;/h3&gt;  &lt;p&gt;Log-in to your Fasthosts control panel and click on the “DNS” button for the domain you wish to use to park with Adsense for Domains. &lt;/p&gt;  &lt;p&gt;Find your &amp;quot;unique identifier&amp;quot; from the Adsense for Domains page within Adsense and create a CNAME as follows: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Host Name:&lt;/strong&gt; www&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Points to:&lt;/strong&gt; your adsense unique identifier &lt;em&gt;e.g pub-xxxxxxxxxxxxxxafd.ghs.google.com.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;Next create an A record as follows: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Host Name:&lt;/strong&gt; leave blank &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Points to:&lt;/strong&gt; 216.239.32.21 &lt;/p&gt;  &lt;p&gt;See the screenshot below for a finished example…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nikmakris.com/images/blog/AdsenseforDomainsFasthostsSetup_9ADD/fasthosts.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="fasthosts" border="0" alt="fasthosts" src="http://www.nikmakris.com/images/blog/AdsenseforDomainsFasthostsSetup_9ADD/fasthosts_thumb.jpg" width="502" height="297" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MQ0wKbuQtwv4xgbXb7skFv-R230/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MQ0wKbuQtwv4xgbXb7skFv-R230/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/MQ0wKbuQtwv4xgbXb7skFv-R230/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MQ0wKbuQtwv4xgbXb7skFv-R230/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/nikmakris?a=T9TtE-O1EpQ:8BSgHE149oo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=T9TtE-O1EpQ:8BSgHE149oo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=T9TtE-O1EpQ:8BSgHE149oo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=T9TtE-O1EpQ:8BSgHE149oo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=T9TtE-O1EpQ:8BSgHE149oo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=T9TtE-O1EpQ:8BSgHE149oo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=T9TtE-O1EpQ:8BSgHE149oo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Adsense-for-Domains-Fasthosts-Setup.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Adsense-for-Domains-Fasthosts-Setup.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=57144e53-8b82-4347-ad94-e961910fa69f</guid>
      <pubDate>Tue, 07 Sep 2010 18:57:00 +0000</pubDate>
      <category>Google</category>
      <category>eBusiness</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=57144e53-8b82-4347-ad94-e961910fa69f</pingback:target>
      <slash:comments>103</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=57144e53-8b82-4347-ad94-e961910fa69f</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Adsense-for-Domains-Fasthosts-Setup.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=57144e53-8b82-4347-ad94-e961910fa69f</wfw:commentRss>
    </item>
    <item>
      <title>EatonWeb: A Blog Directory to Avoid</title>
      <description>&lt;p&gt;When you start blogging its a good idea to put the word out and let people know your new blog exists, one way to do this is get listed in online blog directories.&lt;/p&gt;  &lt;p&gt;Some directories charge a fee to review your blog, which help pay for the upkeep of the directory and also helps to ensure quality listings.&lt;/p&gt;  &lt;h2&gt;Expect the Unexpected&lt;/h2&gt;  &lt;p&gt;The EatonWeb directory charges a review fee, but &lt;strong&gt;blogger&lt;/strong&gt; &lt;strong&gt;BEWARE&lt;/strong&gt;!&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="paypal" border="0" alt="paypal" src="http://www.nikmakris.com/images/blog/EatonWebABlogDirectorytoAvoid_EDFA/paypal_thumb.jpg" width="502" height="287" /&gt; &lt;/p&gt;  &lt;p&gt;The other day I had an email out-of-the-blue from PayPal saying I’d made an automatic payment for a subscription I’d set-up.&amp;#160; First I thought it was just SPAM. &lt;/p&gt;  &lt;p&gt;I didn’t recall ever setting up a subscription using PayPal, but reading the invoice from PayPal, it turns out that I had been duped into signing up to a recurring annual subscription fee to &lt;a href="http://portal.eatonweb.com/" rel="nofollow"&gt;EatonWeb blog directory&lt;/a&gt;, when at the time I assumed it was a one-off fee to list my blog!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s even worse is the fact I never got my blog listed!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Looking at the EatonWeb submission page (below), it’s not very clear that you are signing up to a recurring annual subscription either, or whether you pay the annual subscription whether they list you or not.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="eaton-web" border="0" alt="eaton-web" src="http://www.nikmakris.com/images/blog/EatonWebABlogDirectorytoAvoid_EDFA/eatonweb_thumb.jpg" width="502" height="390" /&gt; &lt;/p&gt;  &lt;p&gt;There are no website terms and conditions and after emailing EatonWeb about this issue I’ve had no reply whatsoever, so I thought I write this post to alert other bloggers to this dodgy practice.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My advice is to avoid The EatonWeb blog directory!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vBNVXLpWo2QhwCdcTzWncv2JqE0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vBNVXLpWo2QhwCdcTzWncv2JqE0/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/vBNVXLpWo2QhwCdcTzWncv2JqE0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vBNVXLpWo2QhwCdcTzWncv2JqE0/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/nikmakris?a=NTwnSNHnsl8:45T4eN-gipg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=NTwnSNHnsl8:45T4eN-gipg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=NTwnSNHnsl8:45T4eN-gipg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=NTwnSNHnsl8:45T4eN-gipg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=NTwnSNHnsl8:45T4eN-gipg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=NTwnSNHnsl8:45T4eN-gipg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=NTwnSNHnsl8:45T4eN-gipg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/EatonWeb-A-Blog-Directory-to-Avoid.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/EatonWeb-A-Blog-Directory-to-Avoid.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=31a92c99-2f11-4999-98c5-efd6af61e90b</guid>
      <pubDate>Mon, 16 Aug 2010 16:57:21 +0000</pubDate>
      <category>Blogging</category>
      <category>Search Engine Marketing</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=31a92c99-2f11-4999-98c5-efd6af61e90b</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=31a92c99-2f11-4999-98c5-efd6af61e90b</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/EatonWeb-A-Blog-Directory-to-Avoid.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=31a92c99-2f11-4999-98c5-efd6af61e90b</wfw:commentRss>
    </item>
    <item>
      <title>SEO: Ten Link Building Recommendations</title>
      <description>&lt;p&gt;A major and time-consuming part of search engine optimisation (SEO) is link building.&amp;nbsp; If you own a website of any sort, you&amp;rsquo;ve undoubtedly received SPAM emails from dubious companies offering to provide you with SEO services.&lt;/p&gt;
&lt;p&gt;Assuming you decide to outsource your SEO activities and you&amp;rsquo;ve chosen a reputable company to provide this service (preferably one that hasn&amp;rsquo;t spammed you), how do you ensure the link building effort will pay off and give you greater prominence in the top search engines?&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="web" src="http://www.nikmakris.com/images/blog/SEOTenLinkBuildingRecommendations_9238/web.jpg" border="0" alt="web" width="474" height="480" /&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a list of ten link building recommendations.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Only get links from similar themed organisations and websites &lt;/li&gt;
&lt;li&gt;Make the anchor text of the link relevant to the landing page and different on each link obtained. E.g. don&amp;rsquo;t use your website name as the link text all the time &lt;/li&gt;
&lt;li&gt;Try to get deep links into your website, not just to your homepage &lt;/li&gt;
&lt;li&gt;Favour text links over image links &lt;/li&gt;
&lt;li&gt;Avoid getting links on purpose built 'link' pages &lt;/li&gt;
&lt;li&gt;Avoid reciprocal link schemes &lt;/li&gt;
&lt;li&gt;Avoid black hat techniques such as obtaining hidden links, links from sites built specifically for gaining PageRank &lt;/li&gt;
&lt;li&gt;Favour links with decent PageRank &lt;/li&gt;
&lt;li&gt;Links having rel="nofollow" do not count towards inbound links &lt;/li&gt;
&lt;li&gt;Make sure pages that contain your link aren&amp;rsquo;t excluded via robots.txt or robots meta tags &lt;/li&gt;
&lt;li&gt;Avoid links which look like they have been bought, as Google can penalise these &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="http://www.kingish.com/"&gt;Adam&lt;/a&gt; for his helping putting this list together.&amp;nbsp; Image used under Creative Commons by &lt;a href="http://www.flickr.com/photos/saintbob/165829023/"&gt;saintbob&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;EAVB_BSNMKXEWNF&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GmGrRjnGmigCLqXves4_s3xsu1o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GmGrRjnGmigCLqXves4_s3xsu1o/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/GmGrRjnGmigCLqXves4_s3xsu1o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GmGrRjnGmigCLqXves4_s3xsu1o/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/nikmakris?a=CwR619P9zAw:rOR2IgGVuHo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=CwR619P9zAw:rOR2IgGVuHo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=CwR619P9zAw:rOR2IgGVuHo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=CwR619P9zAw:rOR2IgGVuHo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=CwR619P9zAw:rOR2IgGVuHo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=CwR619P9zAw:rOR2IgGVuHo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=CwR619P9zAw:rOR2IgGVuHo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/SEO-Ten-Link-Building-Recommendations.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/SEO-Ten-Link-Building-Recommendations.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=e8f705e5-f0b2-4054-833a-44e307f9b449</guid>
      <pubDate>Tue, 20 Jul 2010 20:11:00 +0000</pubDate>
      <category>Search Engine Marketing</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=e8f705e5-f0b2-4054-833a-44e307f9b449</pingback:target>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=e8f705e5-f0b2-4054-833a-44e307f9b449</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/SEO-Ten-Link-Building-Recommendations.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=e8f705e5-f0b2-4054-833a-44e307f9b449</wfw:commentRss>
    </item>
    <item>
      <title>Creating an Immediacy (Alterian Content Manager) Plug-in</title>
      <description>&lt;p&gt;An Immediacy plug-in is a special type of ASP.NET User Control that allows you to extend the functionality of the core content management system. &lt;a href="http://www.immediacy.net/"&gt;http://www.immediacy.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Follow these instructions to create a custom plug-in for the Immediacy/CMC CMS.&lt;/p&gt;
&lt;h4&gt;Instructions&lt;/h4&gt;
&lt;p&gt;Create a new directory within the Immediacy &lt;strong&gt;plug-ins&lt;/strong&gt; directory for your plug-in. This new directory will hold the .ascx file for your user control plus your Immediacy editor dialogue UI (Which is a special web file that allows you to change the plug-in settings from within the Immediacy editor).&lt;/p&gt;
&lt;p&gt;The name of your plug-in directory should have the same name as the &amp;ldquo;tagName&amp;rdquo; you use to register the User Control in Immediacy&amp;rsquo;s web.config file.&lt;/p&gt;
&lt;p&gt;Build your ASP.NET User Control to perform your custom functionality making sure that you create public properties in your C#/VB.NET code for all the properties you would like configurable from within the Immediacy editor.&lt;/p&gt;
&lt;p&gt;Add a reference to the &lt;strong&gt;Immediacy.Web&lt;/strong&gt; assembly to your project.&lt;/p&gt;
&lt;p&gt;Next, add these attributes to your User Control class.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;[PluginDesigner(PluginDesignerType.Html, "PluginCmsDialogue.aspx", Height = 400, Width = 400)]      &lt;br /&gt;[ToolboxData("&amp;lt;{0}:PluginName runat=server&amp;gt;&amp;lt;/{0}:PluginName&amp;gt;")]       &lt;br /&gt;[PluginInfo("My First Plug-in", "CMS Plug-in Category", Description = "Description of my Plug-in")]       &lt;br /&gt;public partial class Comments : System.Web.UI.UserControl, INamingContainer       &lt;br /&gt;{       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Your plug-in code here       &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t add these class attributes your plug-in properties will not be configurable from within Immediacy, but the plug-in will still work.    &lt;br /&gt;If you don&amp;rsquo;t have public properties that you want editors to be able to change you can skip creating a dialogue box for your plug-in.&lt;/p&gt;
&lt;h4&gt;Create an Editor Dialogue Pop-up&lt;/h4&gt;
&lt;p&gt;Create a CMS dialogue page which will allow Immediacy users to change the properties of your custom plug-in from within the editor. The name of this file is referenced in the class attributes above (&lt;em&gt;e.g. PluginCmsDialogue.aspx&lt;/em&gt;) .&lt;/p&gt;
&lt;p&gt;Your dialogue box can be either an HTML file with JavaScript or an ASP.NET web form. This example uses an HTML page with a .aspx extension, although it doesn&amp;rsquo;t contain any server-side code.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the HTML you need to reference the &lt;strong&gt;Helpers.js&lt;/strong&gt; JavaScript file that resides in the Immediacy &lt;strong&gt;plug-ins&lt;/strong&gt; folder.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;&amp;lt;script type="text/javascript" src="../Helpers.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Create a simple HTML form with form elements to match each public property of your plug-in class.&lt;/p&gt;
&lt;p&gt;Add two HTML buttons, one for &lt;strong&gt;OK&lt;/strong&gt;, one for &lt;strong&gt;Cancel&lt;/strong&gt;. Give them IDs of &lt;strong&gt;ok&lt;/strong&gt; and &lt;strong&gt;cancel&lt;/strong&gt; respectively.&lt;/p&gt;
&lt;p&gt;Create a JavaScript function called &lt;strong&gt;Init()&lt;/strong&gt; as below.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;&amp;lt;script type="text/javascript"&amp;gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;var Dialog;      &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;function Init()      &lt;br /&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; Dialog=new DialogObject("name of plugin", 400, 400); Dialog.UniqueKeys=false;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008040;"&gt;// Load each property and update the dialogue box      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; Dialog.Load("property", function(value){document.getElementById("property").value=value;});&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; // Add functionality to the OK and Cancel HTML buttons      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; document.getElementById("ok").onclick=function(){Dialog.Ok();}      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; document.getElementById("cancel").onclick=function(){Dialog.Cancel();}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; Dialog.Valid=function()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008040;"&gt;// Perform validation here      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; Dialog.Submit=function()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008040;"&gt;// Save each property      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dialog.Save("property",document.getElementById("property ").value);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Update the Immediacy control UI placeholder      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dialog.InnerHTML="&amp;lt;div style='background:#DDDDDD; color:#000000; float:left; padding:10px; clear:both;'&amp;gt;&amp;lt;strong&amp;gt;Comments Enabled : &amp;lt;/strong&amp;gt;Status of Plug-in&amp;lt;/div&amp;gt;";      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;nbsp;&amp;nbsp; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;}      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008040;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;At the bottom of your dialogue HTML call the &lt;strong&gt;Init()&lt;/strong&gt; function as below.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008040;"&gt;&amp;lt;script type="text/javascript"&amp;gt;Init();&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Install the Plug-in&lt;/h4&gt;
&lt;p&gt;Register your ASP.NET User Control to Immediacy&amp;rsquo;s &lt;strong&gt;web.config&lt;/strong&gt; under &lt;strong&gt;&amp;lt;pages&amp;gt;&amp;lt;controls&amp;gt;&lt;/strong&gt; as you would with an ordinary User Control. Ensure the &amp;ldquo;tagName&amp;rdquo; is the same as the plugin directory name for your plugin.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="color: #008040;"&gt;&amp;lt;add tagPrefix="MyUserControls" tagName="PluginName" src="~/plugins/ PluginName /test.ascx"/&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Build your project in Visual Studio.&lt;/p&gt;
&lt;p&gt;Copy the .ascx and your dialogue box HTML file to the /plugins/PluginName folder.&lt;/p&gt;
&lt;p&gt;Copy the .dll file to the Immediacy bin folder.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mAHuHzdDAzdTE8Nz23uQCTBo6k8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mAHuHzdDAzdTE8Nz23uQCTBo6k8/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/mAHuHzdDAzdTE8Nz23uQCTBo6k8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mAHuHzdDAzdTE8Nz23uQCTBo6k8/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/nikmakris?a=wEqzgZMjtKE:8AO6eQoXBnM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=wEqzgZMjtKE:8AO6eQoXBnM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=wEqzgZMjtKE:8AO6eQoXBnM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=wEqzgZMjtKE:8AO6eQoXBnM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=wEqzgZMjtKE:8AO6eQoXBnM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=wEqzgZMjtKE:8AO6eQoXBnM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=wEqzgZMjtKE:8AO6eQoXBnM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Creating-an-Immediacy-(Alterian-Content-Manager)-Plug-in.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Creating-an-Immediacy-(Alterian-Content-Manager)-Plug-in.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=666cc35d-9ddd-4604-b038-040be28bca4a</guid>
      <pubDate>Tue, 27 Apr 2010 17:20:00 +0000</pubDate>
      <category>Software Development</category>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=666cc35d-9ddd-4604-b038-040be28bca4a</pingback:target>
      <slash:comments>32</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=666cc35d-9ddd-4604-b038-040be28bca4a</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Creating-an-Immediacy-(Alterian-Content-Manager)-Plug-in.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=666cc35d-9ddd-4604-b038-040be28bca4a</wfw:commentRss>
    </item>
    <item>
      <title>Configuring FTP for Windows Server 2008</title>
      <description>&lt;p&gt;Setting up FTP on Windows Server 2008 isn’t as easy as in previous versions and the steps you need to take vary depending on what version of IIS you have installed.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unless you upgrade to IIS 7.5, FTP in IIS 7 is still managed with IIS 6 Manager!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="FTP configuration in IIS 7" border="0" alt="FTP configuration in IIS 7" src="http://www.nikmakris.com/images/blog/ConfiguringFTPforWindowsServer2008_FB84/iis7ftp.png" width="500" height="295" /&gt; &lt;/p&gt;  &lt;h2&gt;Failed to Retrieve Directory Listing&lt;/h2&gt;  &lt;p&gt;The first hurdle I encountered when trying to connect using &lt;a href="http://filezilla-project.org/"&gt;Filezilla&lt;/a&gt; was the error message “Failed to Retrieve Directory Listing”.&amp;#160; Filezilla was able to connect but couldn’t list the files in the remote folder.&lt;/p&gt;  &lt;p&gt;A work around to this is to run Filezilla in active mode (&lt;em&gt;Edit &amp;gt; Settings &amp;gt; Connection &amp;gt; FTP &amp;gt; Active&lt;/em&gt;), but some programs that use FTP such as Windows Live Writer can’t be set to use active and prefer passive FTP.&amp;#160; Read more about &lt;a href="http://www.slacksite.com/other/ftp.html"&gt;active and passive FTP&lt;/a&gt;. &lt;/p&gt;  &lt;h2&gt;Configuring Passive FTP on IIS&lt;/h2&gt;  &lt;p&gt;Configuring Passive FTP on IIS essentially involves configuring FTP port ranges in IIS for the passive connection and then opening up those ports in Windows Firewall on the server.&lt;/p&gt;  &lt;p&gt;Depending on what version of IIS you have installed I can verify that both of these methods work.&amp;#160; Although the &lt;strong&gt;c:\Inetpub\adminiscripts&lt;/strong&gt; folder didn’t exist on my server so I ended up getting them from a Windows Server 2003 machine.&lt;/p&gt;  &lt;p&gt;My advice would be to upgrade to IIS 7.5.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.velikan.net/iis-passive-ftp/"&gt;Configuring passive FTP on IIS 6&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/309/configuring-ftp-firewall-settings/"&gt;Configuring passive FTP on IIS 7&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/baauyFRHbXjGQq3qYt4zaIZkEro/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/baauyFRHbXjGQq3qYt4zaIZkEro/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/baauyFRHbXjGQq3qYt4zaIZkEro/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/baauyFRHbXjGQq3qYt4zaIZkEro/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/nikmakris?a=3zkUFlpMvxA:AgwvUgKu5OY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=3zkUFlpMvxA:AgwvUgKu5OY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=3zkUFlpMvxA:AgwvUgKu5OY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=3zkUFlpMvxA:AgwvUgKu5OY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=3zkUFlpMvxA:AgwvUgKu5OY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=3zkUFlpMvxA:AgwvUgKu5OY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=3zkUFlpMvxA:AgwvUgKu5OY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Configuring-FTP-for-Windows-Server-2008.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Configuring-FTP-for-Windows-Server-2008.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=ed404143-1b6f-453f-b532-eecb9146d5aa</guid>
      <pubDate>Wed, 30 Dec 2009 17:50:37 +0000</pubDate>
      <category>Web Servers</category>
      <category>Windows</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=ed404143-1b6f-453f-b532-eecb9146d5aa</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=ed404143-1b6f-453f-b532-eecb9146d5aa</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Configuring-FTP-for-Windows-Server-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=ed404143-1b6f-453f-b532-eecb9146d5aa</wfw:commentRss>
    </item>
    <item>
      <title>Where’s the POP3 Service in Windows Server 2008?</title>
      <description>&lt;p&gt;I’ve recently upgraded my virtual server to a Windows Server 2008 box and to my annoyance noticed that &lt;a href="http://windowsitpro.com/article/articleid/96946/pop3-component-in-windows-server-2008.html"&gt;Microsoft have removed&lt;/a&gt; the &lt;a href="http://www.windowsnetworking.com/articles_tutorials/Windows_POP3_Service.html"&gt;POP3 Service&lt;/a&gt; that shipped with Windows Server 2003.&lt;/p&gt;  &lt;p&gt;I know that POP3 is old and a bit rubbish, but it was perfect for my purposes.&lt;/p&gt;  &lt;p&gt;Rather than shell out for a commercial mail server I suggest you try the free &lt;a href="http://hmailserver.com/"&gt;hMailServer&lt;/a&gt; which is a doddle to install and configure and in my opinion far better than Microsoft’s POP3 Service.&lt;/p&gt;  &lt;p&gt;&lt;a title="hMailServer" href="http://www.hmailserver.com/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="hMailServer" border="0" alt="hMailServer" src="http://www.nikmakris.com/images/blog/WheresthePOP3ServiceinWindowsServer2008_E6DF/hmailserver_logo.jpg" width="222" height="88" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I’m using it for my POP3 and SMTP server.&lt;/p&gt;  &lt;p&gt;Read more about &lt;a href="http://www.hmailserver.com/index.php?page=functionality"&gt;hMailServer’s features&lt;/a&gt; which include SPAM filter and virus scanner integration and pre-configured authentication and relaying security.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NAggJpBNVso8hoUFWKVYTmEc-28/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NAggJpBNVso8hoUFWKVYTmEc-28/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/NAggJpBNVso8hoUFWKVYTmEc-28/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NAggJpBNVso8hoUFWKVYTmEc-28/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/nikmakris?a=6b_IoQwQFDE:4KlV6alho1E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=6b_IoQwQFDE:4KlV6alho1E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=6b_IoQwQFDE:4KlV6alho1E:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=6b_IoQwQFDE:4KlV6alho1E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=6b_IoQwQFDE:4KlV6alho1E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=6b_IoQwQFDE:4KlV6alho1E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=6b_IoQwQFDE:4KlV6alho1E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Wheree28099s-the-POP3-Service-in-Windows-Server-2008.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Wheree28099s-the-POP3-Service-in-Windows-Server-2008.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=b9c6083e-f4fc-4e1b-9ff9-0fe6b8d44af4</guid>
      <pubDate>Thu, 24 Dec 2009 16:27:54 +0000</pubDate>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=b9c6083e-f4fc-4e1b-9ff9-0fe6b8d44af4</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=b9c6083e-f4fc-4e1b-9ff9-0fe6b8d44af4</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Wheree28099s-the-POP3-Service-in-Windows-Server-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=b9c6083e-f4fc-4e1b-9ff9-0fe6b8d44af4</wfw:commentRss>
    </item>
    <item>
      <title>HomePlug Networking Incompatibilities</title>
      <description>&lt;p&gt;&lt;img style="float: right;" src="http://www.nikmakris.com/blog/image.axd?picture=2009%2f11%2fhomeplug-av-logo.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It seems HomePlug certified powerline networking components aren't as interoperable as it would first appear.&amp;nbsp; I've been using &lt;a href="http://www.nikmakris.com/blog/post/Powerline-Networking-Now-Fast-Enough-For-Streaming-HD-Content.aspx"&gt;Devolo Homeplug dLAN 200 desk units for a number of years now&lt;/a&gt; and they have been trouble free and constantly out perform wireless networking in terms of speed.&amp;nbsp; I recently bought another Devolo dLAN 200 unit to expand my network to enable streaming video to a Windows Media Extender.&lt;/p&gt;
&lt;p&gt;I assumed it would be a case of just connecting it to the mains and using the Devolo dLAN configuration wizard to set all the units up with a new encryped password.&amp;nbsp; I soon realised that this wasn't the case.&lt;br /&gt;The dLAN configuration wizard didn't even detect the new unit on the mains network.&amp;nbsp; After looking through the manual for a while scatching my head searching for a non-existant troubleshooting guide, I spotted a paragraph that mentioned that older Devolo products using firmware 1.x need their firmware upgraded in order to work with newer models.&lt;/p&gt;
&lt;p&gt;Upgrading the &lt;a href="http://www.devolo.co.uk/consumer/downloads-21-dlan-200-avdesk.html?l=en"&gt;firmware &lt;/a&gt;has now made all my dLAN 200 &lt;a href="http://www.homeplug.org/home"&gt;HomePlug certified devices&lt;/a&gt; compatible!&amp;nbsp; Thank God for standards &lt;img title="Smile" src="http://nikmakris.com/blog/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" border="0" alt="Smile" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uQTa7B8Wm8qU7Ojk0KUXzzk30jw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQTa7B8Wm8qU7Ojk0KUXzzk30jw/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/uQTa7B8Wm8qU7Ojk0KUXzzk30jw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQTa7B8Wm8qU7Ojk0KUXzzk30jw/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/nikmakris?a=MEgkatFpsVk:5sJzV_3Om1s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=MEgkatFpsVk:5sJzV_3Om1s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=MEgkatFpsVk:5sJzV_3Om1s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=MEgkatFpsVk:5sJzV_3Om1s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=MEgkatFpsVk:5sJzV_3Om1s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=MEgkatFpsVk:5sJzV_3Om1s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=MEgkatFpsVk:5sJzV_3Om1s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/HomePlug-Networking-Incompatibilities.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/HomePlug-Networking-Incompatibilities.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=be82d81f-4140-4b62-bb8f-cf03ff596d85</guid>
      <pubDate>Wed, 11 Nov 2009 14:56:00 +0000</pubDate>
      <category>Networking</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=be82d81f-4140-4b62-bb8f-cf03ff596d85</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=be82d81f-4140-4b62-bb8f-cf03ff596d85</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/HomePlug-Networking-Incompatibilities.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=be82d81f-4140-4b62-bb8f-cf03ff596d85</wfw:commentRss>
    </item>
    <item>
      <title>Installing Hardware RAID on Windows 7</title>
      <description>&lt;p&gt;Like a lot of Windows fans I pre-ordered Windows 7 and built a new PC ready to install it on; I chose a motherboard (MSI DKA790GX) that, like many on the market, has a hardware RAID controller on-board allowing you to take advantage of redundancy with RAID 1 and/or benefit from faster disk access with RAID 0.&amp;#160; &lt;a href="http://www.pcstats.com/articleview.cfm?articleid=830&amp;amp;page=2"&gt;Read more about RAID&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I had already installed Windows 7 before I remembered I wanted to set-up a RAID 1 array.&amp;#160; I tried to get the RAID array working with Windows already installed but soon realised I would have to set it up prior to installing Windows 7 because Windows kept hanging on boot-up because it was lacking the RAID controller drivers.&lt;/p&gt;  &lt;p&gt;The supplied manual doesn’t explain how to get RAID up and running unfortunately.&lt;/p&gt;  &lt;h2&gt;RAID Controller Set-up&lt;/h2&gt;  &lt;p&gt;So here’s a quick guide to installing hardware RAID on a motherboard that features a RAID controller.&amp;#160; These steps assume you are performing a clean Windows 7 install rather than an upgrade, and they might differ depending on your system set-up, but the general principles should be the same.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download the RAID drivers for your motherboard from the manufacturer’s website and save them to a memory stick. &lt;/li&gt;    &lt;li&gt;&lt;strong style="font-size: 18px"&gt;Back up all your important data!&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Turn your PC off and unplug it. &lt;/li&gt;    &lt;li&gt;Install 2 hard disks preferably with identically capacity into your PC. &lt;/li&gt;    &lt;li&gt;Turn on your PC, press the delete key or F2 key when prompted to get to the BIOS menu. &lt;/li&gt;    &lt;li&gt;Find the option to select the RAID mode, save your settings and exit BIOS.&lt;img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BIOS RAID options" border="0" alt="BIOS RAID options" src="http://www.nikmakris.com/blog/image.axd?picture=bios-raid-options.jpg" width="502" height="324" /&gt; &lt;/li&gt;    &lt;li&gt;On reboot you should see a new menu option to enter the RAID controller settings.&amp;#160; Enter the key combination when prompted to get to the RAID controller menu. &lt;img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="AMD RAID controller menu" border="0" alt="AMD RAID controller menu" src="http://www.nikmakris.com/blog/image.axd?picture=amd-raid-menu.jpg" width="502" height="357" /&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://livesupport.asus.com/amdraidhowto.html"&gt;Create a new RAID array selecting either RAID 0, or RAID 1&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Select the disks that will form the array, save the settings and exit. &lt;/li&gt;    &lt;li&gt;On reboot press the delete key or F2 key when prompted to get to the BIOS menu. &lt;/li&gt;    &lt;li&gt;Check the boot sequence of your PC and ensure your optical drive is top of the list.&lt;img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BIOS boot sequence options" border="0" alt="BIOS boot sequence options" src="http://www.nikmakris.com/blog/image.axd?picture=bios-boot-sequence-options.jpg" width="502" height="326" /&gt; &lt;/li&gt;    &lt;li&gt;Insert your Windows 7 disk into the optical drive and exit the BIOS. &lt;/li&gt;    &lt;li&gt;On reboot press any key when prompted to boot from the optical drive. &lt;/li&gt;    &lt;li&gt;Windows 7 should start installing. &lt;/li&gt;    &lt;li&gt;Select your localisation settings and click next.&lt;img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows 7 localization menu" border="0" alt="Windows 7 localization menu" src="http://www.nikmakris.com/blog/image.axd?picture=localisation.jpg" width="502" height="358" /&gt; &lt;/li&gt;    &lt;li&gt;Click “repair your computer” and click the ”load drivers” button.&lt;img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows 7 install menu" border="0" alt="Windows 7 install menu" src="http://www.nikmakris.com/blog/image.axd?picture=windows%207%20repair%20menu.png" width="502" height="370" /&gt; &lt;img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows 7 load drivers menu" border="0" alt="Windows 7 load drivers menu" src="http://www.nikmakris.com/blog/image.axd?picture=load-drivers-option.jpg" width="502" height="361" /&gt; &lt;/li&gt;    &lt;li&gt;Insert your memory stick and browse to the correct driver and install. &lt;/li&gt;    &lt;li&gt;Exit back to the Windows 7 install menu click “Install now” and on the next screen click “Custom (advanced)” to perform a clean install.&lt;a href="http://www.nikmakris.com/blog/image.axd?picture=install-windows-custom.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 5px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="install-windows-custom" border="0" alt="install-windows-custom" src="http://www.nikmakris.com/blog/image.axd?picture=install-windows-custom_thumb.jpg" width="502" height="377" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;When you are asked where you want to install Windows 7 you should see that the 2 RAID hard disks are now visible as just 1 drive. &lt;/li&gt;    &lt;li&gt;Add a partition to the new drive so Windows with be able to recognise it. &lt;/li&gt;    &lt;li&gt;Continue installing Windows as normal. &lt;/li&gt; &lt;/ol&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k_LFA5Zcf_h7SKW0aXMgegNNslg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k_LFA5Zcf_h7SKW0aXMgegNNslg/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/k_LFA5Zcf_h7SKW0aXMgegNNslg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k_LFA5Zcf_h7SKW0aXMgegNNslg/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/nikmakris?a=6m8WC0hNclw:N8Eb5CRpTd0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=6m8WC0hNclw:N8Eb5CRpTd0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=6m8WC0hNclw:N8Eb5CRpTd0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=6m8WC0hNclw:N8Eb5CRpTd0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=6m8WC0hNclw:N8Eb5CRpTd0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=6m8WC0hNclw:N8Eb5CRpTd0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=6m8WC0hNclw:N8Eb5CRpTd0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Installing-Hardware-RAID-on-Windows-7.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Installing-Hardware-RAID-on-Windows-7.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=d100469d-2c48-4626-b867-def8a8aff3db</guid>
      <pubDate>Sat, 24 Oct 2009 20:43:06 +0000</pubDate>
      <category>Windows</category>
      <category>Hardware</category>
      <category>Storage</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=d100469d-2c48-4626-b867-def8a8aff3db</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=d100469d-2c48-4626-b867-def8a8aff3db</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Installing-Hardware-RAID-on-Windows-7.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=d100469d-2c48-4626-b867-def8a8aff3db</wfw:commentRss>
    </item>
    <item>
      <title>IE6 – Why Web Developers Should Support the Browser</title>
      <description>&lt;p&gt;There seems to be so much fuss surrounding support for aging Microsoft browser Internet Explorer 6 lately, both from the web developer community and big corporations such as &lt;a href="http://www.tgdaily.com/content/view/40785/140/"&gt;Google&lt;/a&gt; and &lt;a href="http://ra-ajax.org/facebook-joins-the-war-against-ie6.blog"&gt;Facebook&lt;/a&gt;. There are many websites dedicated to eradicating the browser, a &lt;a href="http://twibbon.com/join/IE6-Must-Die"&gt;Twitter petition&lt;/a&gt;, a &lt;a href="http://saveie6.com/"&gt;joke campaign to save IE6&lt;/a&gt; and a whole lot more…&lt;/p&gt;  &lt;p&gt;While I don’t particularly enjoy spending a considerable amount of time per project making sure websites I build are IE6 compatible, I do see the benefit of supporting the browser.&lt;/p&gt;  &lt;p&gt;I was in Google Analytics recently and looked at my browser statistics for this site.&amp;#160; Visitors to my site are fairly IT literate but Internet Explorer 6 still has a larger user base than Safari, Chrome and Opera with almost 9% share. Looking on the &lt;a href="http://www.w3schools.com/browsers/browsers_stats.asp"&gt;W3C Schools browser statistics&lt;/a&gt;, 12.1% of their users browsed the web with IE6 in September 2009.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;NikMakris.com Web browser market share Sept 2009&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="Web browser market share" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="245" alt="Web browser market share" src="http://www.nikmakris.com/blog/image.axd?picture=browser-share.png" width="497" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;NikMakris.com &lt;/strong&gt;&lt;/em&gt;&lt;em&gt;&lt;strong&gt;Internet Explorer browser share Sept 2009&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="Internet Explorer browser versions" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="Internet Explorer browser versions" src="http://www.nikmakris.com/blog/image.axd?picture=IE-share.png" width="504" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;I could make the decision not to support IE6 for my personal site and about 9% of my visitors would be affected, but if I made that decision on a commercial website, I could end up losing out on business, especially since many of the people still actively using IE6 are businesses or public sector organisations who can’t easily upgrade or install an alternative web browser.    &lt;br /&gt;Many organisations also have legacy applications that do not work with new versions of Internet Explorer and during a recession many organisations will avoid spending money on upgrades and new software if they can afford not to.&lt;/p&gt;  &lt;p&gt;Whilst it might be okay for Google and Facebook to block support for the browser when you visit their own web properties, would a client of yours be happy if you did the same with a website you built, potentially losing them business?&lt;/p&gt;  &lt;p&gt;Internet Explorer 6 may be a dog of a browser in 2009, if you’re a web developer it probably causes you hours of pain creating dedicated style sheets and conditional statements.&amp;#160; You may even have had to make major template changes to deal with the many quirks of the browser rendering engine, but hopefully in the not too distant future it will become such a small percentage of the web browser market that we can all forget about it and start concentrating on new technologies such as HTML 5!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Qy-poC5IJzjGeu4XCpT0qzj-fcE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qy-poC5IJzjGeu4XCpT0qzj-fcE/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/Qy-poC5IJzjGeu4XCpT0qzj-fcE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qy-poC5IJzjGeu4XCpT0qzj-fcE/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/nikmakris?a=FYu3wKEI2-E:NRgnLv29dKQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=FYu3wKEI2-E:NRgnLv29dKQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=FYu3wKEI2-E:NRgnLv29dKQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=FYu3wKEI2-E:NRgnLv29dKQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=FYu3wKEI2-E:NRgnLv29dKQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=FYu3wKEI2-E:NRgnLv29dKQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=FYu3wKEI2-E:NRgnLv29dKQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/IE6-e28093-Why-Web-Developers-Should-Support-the-Browser.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/IE6-e28093-Why-Web-Developers-Should-Support-the-Browser.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=ef02b851-4991-4c36-8265-5370fd2f566c</guid>
      <pubDate>Sat, 03 Oct 2009 17:52:46 +0000</pubDate>
      <category>Web Browsers</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=ef02b851-4991-4c36-8265-5370fd2f566c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=ef02b851-4991-4c36-8265-5370fd2f566c</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/IE6-e28093-Why-Web-Developers-Should-Support-the-Browser.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=ef02b851-4991-4c36-8265-5370fd2f566c</wfw:commentRss>
    </item>
    <item>
      <title>Learning jQuery 1.3 - Book Review</title>
      <description>&lt;p&gt;My first exposure to &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; was using other developer's plugins to create animation effects such as sliders, and accordion menus.     &lt;br /&gt;The highly refactored and compressed production code isn't the easiest to read and understand, especially if you want to alter the code to any great extent. &lt;br /&gt;After reading a few tutorials, I thought I'd buy a book and get more involved with the jQuery library.&lt;/p&gt;
&lt;p&gt;As an ASP.NET developer used to coding with intellisense, I was pleased that jQuery has been incorporated into Visual Studio to allow ease of developing. &lt;br /&gt;I browsed through the jQuery books on Amazon and opted to buy "&lt;strong&gt;&lt;a href="http://www.amazon.co.uk/gp/product/1847196705?ie=UTF8&amp;amp;tag=nikmakriwebde-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=1847196705"&gt;Learning JQuery 1.3&lt;/a&gt;&lt;img style="border-style: none ! important; margin: 0px;" src="http://www.assoc-amazon.co.uk/e/ir?t=nikmakriwebde-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=1847196705" border="0" alt="" width="1" height="1" /&gt;&lt;/strong&gt;" by Jonathon Chaffer and Karl Swedberg after reading the user reviews.&lt;/p&gt;
&lt;p&gt;I've now read most of the book and can highly recommend it.&amp;nbsp; The book assumes the reader has good HTML, CSS knowledge as well as a familiarity with JavaScript and the DOM, but this enables the book to quickly move onto doing useful, everyday tasks with jQuery.&lt;/p&gt;
&lt;p&gt;The first six chapters of the book explore the jQuery library in a series of tutorials and examples focusing on core jQuery components.&amp;nbsp; Chapters 7 to 9 look at real-world problems and show how jQuery can provide solutions to them, and the final two chapters cover using and developing jQuery plugins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web developers should be aware of web accessibility and SEO issues with using client-side scripting&lt;/strong&gt; and it is good to see the book highlighting the concepts of progressive enhancement and graceful degradation where appropriate.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"the inherent danger in making certain functionality, visual appeal, or textual information available only to those with web browsers capable of (and enabled for) using JavaScript.&amp;nbsp; Important information should be accessible to all, not just people who happen to be using the right software." - Learning jQuery 1.3,&amp;nbsp; page 94&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After a brief introduction into the world of jQuery, what it does and how it came about the book moves quickly on to &lt;strong&gt;selectors&lt;/strong&gt;, which are a fundamental part of how jQuery selects element(s) from the DOM.&amp;nbsp; It also covers jQuery's &lt;strong&gt;chaining&lt;/strong&gt; capability, which coming from other programming languages looks odd at the outset, but quickly proves to be a very powerful technique.&lt;/p&gt;
&lt;p&gt;The authors then move on to talk about events.&amp;nbsp; What I particularly like about the way jQuery handles events is that the behavioural code can be cleanly separated away from the HTML mark-up without having to litter tags with &lt;em&gt;onclick&lt;/em&gt; and &lt;em&gt;onload&lt;/em&gt; attributes.&lt;/p&gt;
&lt;p&gt;The examples show how to add functionality on top of your HTML by binding events to elements on the page, which when triggered cause jQuery to modify the HTML to bring the page to life.&amp;nbsp; Techniques are introduced by example, then slowly refactored and improved while introducing new jQuery methods along the way, which is a breeze to follow and learn.&lt;/p&gt;
&lt;p&gt;The fourth chapter covers &lt;strong&gt;effects&lt;/strong&gt; such as fading in and out and custom animations, and jumps straight in to cover a useful example of how text size can be increased on-the-fly for ease of reading.&amp;nbsp; The intro also mentions an important usability example of effects.&lt;/p&gt;
&lt;p&gt;jQuery effects &lt;em&gt;"can also provide important usability enhancements that help orient the user when there is some change on a page (especially common in AJAX applications)."&lt;/em&gt;- Learning jQuery 1.3,&amp;nbsp; page 67&lt;/p&gt;
&lt;p&gt;Chapter 5 is all about &lt;strong&gt;DOM manipulation&lt;/strong&gt; and covers jQuery's many insertion methods such as copying and cloning parts of the page, which it demonstrates with another useful example in the form of dynamically creating CSS styled pull quotes from a page of text used to attract a readers attention.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AJAX&lt;/strong&gt; is the next topic, which interested me enough to create a little tool to &lt;a href="http://www.nikmakris.com/blog/post/jQuery-Blogger-Template-Category-List-Widget.aspx"&gt;load in an XML RSS feed and create a blog category list&lt;/a&gt; from the data.     &lt;br /&gt;The chapter covers the various options of loading partial data from the server including appending a snippet of HTML into the page, JSON, XML and how to choose which method is the most appropriate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table manipulation&lt;/strong&gt; is next on the agenda and the book discusses how to sort table data preventing page refreshing using AJAX as well as client-side sorting, filtering and pagination.&lt;/p&gt;
&lt;p&gt;Chapter 8 delves into &lt;strong&gt;forms&lt;/strong&gt;, using progressive enhancement to improve their appearance and behaviour.&amp;nbsp; It also covers AJAX auto-completion as well as an in-depth look at shopping carts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shufflers and Rotators&lt;/strong&gt; are next and the book starts out by building a headline news feed rotator which gets it's headlines from an RSS feed, typically used by blogs.&amp;nbsp; It also covers carousels, image shufflers and image enlargement.&lt;/p&gt;
&lt;p&gt;Chapter 10 and 11 examine the &lt;strong&gt;plugin architecture of jQuery&lt;/strong&gt; and demonstrate how to use plugins and build your own.&amp;nbsp; I successfully produced my first jQuery plugin from reading this book.&amp;nbsp; You can check out my &lt;a href="http://www.nikmakris.com/projects/BloggerClassicTagCloud/"&gt;tag cloud plugin&lt;/a&gt; and read about &lt;a href="http://www.nikmakris.com/blog/post/Create-a-jQuery-Tag-Cloud-from-RSS-XML-Feed.aspx"&gt;how I originally built it before turning it into a plugin&lt;/a&gt; that other developers can use.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Mcw4DyDNml4fuXwqlJ5kUWz0YfY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mcw4DyDNml4fuXwqlJ5kUWz0YfY/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/Mcw4DyDNml4fuXwqlJ5kUWz0YfY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mcw4DyDNml4fuXwqlJ5kUWz0YfY/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/nikmakris?a=3f_C2WxI4CM:alyL-urpidg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=3f_C2WxI4CM:alyL-urpidg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=3f_C2WxI4CM:alyL-urpidg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=3f_C2WxI4CM:alyL-urpidg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=3f_C2WxI4CM:alyL-urpidg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=3f_C2WxI4CM:alyL-urpidg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=3f_C2WxI4CM:alyL-urpidg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Learning-jQuery-13-Book-Review.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Learning-jQuery-13-Book-Review.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=5dc8e24b-6664-4761-a83e-4f10ac4180cf</guid>
      <pubDate>Sat, 20 Jun 2009 19:05:00 +0000</pubDate>
      <category>Web Development</category>
      <category>Reviews</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=5dc8e24b-6664-4761-a83e-4f10ac4180cf</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=5dc8e24b-6664-4761-a83e-4f10ac4180cf</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Learning-jQuery-13-Book-Review.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=5dc8e24b-6664-4761-a83e-4f10ac4180cf</wfw:commentRss>
    </item>
    <item>
      <title>No defining declaration found for implementing OnValidate(System.Data.Linq.ChangeAction)</title>
      <description>&lt;p&gt;If you happen to be getting an error message like the one below, then read on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Error&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp; No defining declaration found for implementing declaration of partial method 'mvcCMS.Models.WebPage.OnValidate(System.Data.Linq.ChangeAction)'&amp;nbsp;&amp;nbsp;&amp;nbsp; C:\&lt;/strong&gt;&lt;strong&gt;mvcCMS\Models\WebPage.cs&amp;nbsp;&amp;nbsp;&amp;nbsp; 28&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&amp;nbsp;&amp;nbsp;&amp;nbsp; mvcCMS&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I'm using LINQ to SQL designer in Visual Studio to create a database schema and I'm using a &lt;a href="http://csainty.blogspot.com/2008/01/linq-to-sql-extending-data-classes.html"&gt;partial class to extend the code generated by the designer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the example below I am using the pattern used by &lt;a href="http://www.nerddinner.com/"&gt;NerdDinner.com&lt;/a&gt; to add business rules/validation to the model classes LINQ to SQL built based on my database schema.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;namespace mvcCMS.Models      &lt;br /&gt;{       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public &lt;strong&gt;partial &lt;/strong&gt;class WebPage       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool IsValid       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (GetRuleViolations().Count() == 0); }       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IEnumerable&amp;lt;RuleViolation&amp;gt; GetRuleViolations()       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (String.IsNullOrEmpty(Title))       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield return new RuleViolation("Title is required", "Title");       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (String.IsNullOrEmpty(Text))       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield return new RuleViolation("Web copy is required", "Text"); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield break;      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;partial void OnValidate(ChangeAction action)        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {         &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!IsValid)         &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ApplicationException("Rule violations prevent saving");         &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }         &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Where &lt;em&gt;OnValidate()&lt;/em&gt; is a partial method LINQ to SQL provides which enables us to be notified when the object is about to be persisted to the database, so we can check all our business rules have been met before the object is flushed to the database.&lt;/p&gt;
&lt;p&gt;An empty &lt;em&gt;OnValidate()&lt;/em&gt; method is part of the designer generated code for your data class located in the &lt;strong&gt;#region Extensibility Method Definitions&lt;/strong&gt; and it seems that these Extensibility Method Definitions only get added to the designer code when your tables have primary keys.&lt;/p&gt;
&lt;p&gt;When a table is dragged onto the Object Relational Designer in Visual Studio the classes that are generated will only implement &lt;strong&gt;INotifyPropertyChanging&lt;/strong&gt; and &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt; if your tables have primary keys.&amp;nbsp; If the classes don't implement these interfaces the code won't implement the &lt;em&gt;OnValidate()&lt;/em&gt; method, and if the OnValidate() method doesn't exist your partial class won't compile.&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;The solution is simple.&amp;nbsp; Add a primary key to your database table, delete the associated data class from the Object Relational Designer and then drag the database table from Server Explorer back onto the Object Relational Designer surface.&lt;/p&gt;
&lt;p&gt;You should then find the designer generated code now implements INotifyPropertyChanging and INotifyPropertyChanged and the class contains a definition for OnValidate() in the #region Extensibility Method Definitions.&amp;nbsp; Your code should now compile.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6kSN2SVCttLcxly6p-OQBp_1D-I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6kSN2SVCttLcxly6p-OQBp_1D-I/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/6kSN2SVCttLcxly6p-OQBp_1D-I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6kSN2SVCttLcxly6p-OQBp_1D-I/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/nikmakris?a=ZcYO1oxtpe4:aGZHewfH3gI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=ZcYO1oxtpe4:aGZHewfH3gI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=ZcYO1oxtpe4:aGZHewfH3gI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=ZcYO1oxtpe4:aGZHewfH3gI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=ZcYO1oxtpe4:aGZHewfH3gI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=ZcYO1oxtpe4:aGZHewfH3gI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=ZcYO1oxtpe4:aGZHewfH3gI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/No-defining-declaration-found-for-implementing-OnValidate(SystemDataLinqChangeAction).aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/No-defining-declaration-found-for-implementing-OnValidate(SystemDataLinqChangeAction).aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=9ff885ee-4876-40d9-adeb-7ceaad0d505c</guid>
      <pubDate>Fri, 12 Jun 2009 13:04:00 +0000</pubDate>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=9ff885ee-4876-40d9-adeb-7ceaad0d505c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=9ff885ee-4876-40d9-adeb-7ceaad0d505c</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/No-defining-declaration-found-for-implementing-OnValidate(SystemDataLinqChangeAction).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=9ff885ee-4876-40d9-adeb-7ceaad0d505c</wfw:commentRss>
    </item>
    <item>
      <title>Nik Makris is now Google Analytics Qualified!</title>
      <description>&lt;p&gt;I just passed the &lt;a href="https://googlerecords.starttest.com?code=I007BFF71EF78036CFC72F87BF17DB4EBD258"&gt;Google Analytics Individual Qualification (IQ) test&lt;/a&gt; with a score of 88%! I'm now officially qualified in Google Analytics!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://googlerecords.starttest.com?code=I007BFF71EF78036CFC72F87BF17DB4EBD258"&gt;&lt;img title="Nik Makris is Google Analytics qualified" src="http://www.nikmakris.com/images/google-analytics-iq.png" alt="Nik Makris is Google Analytics qualified" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you're interested in taking the test or simply want to learn more about &lt;a href="http://www.google.com/analytics/" target="_blank"&gt;Google Analytics&lt;/a&gt; then visit the &lt;a href="http://www.google.com/support/conversionuniversity/" target="_blank"&gt;Conversion University&lt;/a&gt; and brush up on your knowledge with the tutorials and presentations before taking the test.&lt;/p&gt;
&lt;p&gt;I was actually quite surprised how much there is too Google Analytics and how powerful some of the features actually are, even though I've been using Google Analytics for years I learnt some really useful techniques and tricks.&lt;/p&gt;
&lt;h3&gt;More about the test&lt;/h3&gt;
&lt;p&gt;The test consists of &lt;strong&gt;70 multiple choice questions&lt;/strong&gt; and &lt;strong&gt;costs $50&lt;/strong&gt;.&amp;nbsp; You are given &lt;strong&gt;90 minutes&lt;/strong&gt; to complete the test, and must achieve &lt;strong&gt;75% to pass&lt;/strong&gt;.&amp;nbsp; You are allowed to pause the test and continue later, but you must complete it within 5 days.&amp;nbsp; The whole test is completed online, and you will receive a PDF of your certificate on completion, which will look like the picture of mine above.&amp;nbsp; The qualification is &lt;strong&gt;valid for 18 months&lt;/strong&gt;.&amp;nbsp; &lt;a href="http://www.google.com/support/conversionuniversity/bin/static.py?page=iq_faq.cs" target="_blank"&gt;Read more frequently asked questions about the Google Analytics Individual Qualification FAQ&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nXE1fGTXRPE_V3FTQ_jXiXGCde0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nXE1fGTXRPE_V3FTQ_jXiXGCde0/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/nXE1fGTXRPE_V3FTQ_jXiXGCde0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nXE1fGTXRPE_V3FTQ_jXiXGCde0/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/nikmakris?a=btC8HPQ7jdI:OXC8ojeTQq4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=btC8HPQ7jdI:OXC8ojeTQq4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=btC8HPQ7jdI:OXC8ojeTQq4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=btC8HPQ7jdI:OXC8ojeTQq4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=btC8HPQ7jdI:OXC8ojeTQq4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=btC8HPQ7jdI:OXC8ojeTQq4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=btC8HPQ7jdI:OXC8ojeTQq4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Nik-Makris-is-now-Google-Analytics-Qualified!.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Nik-Makris-is-now-Google-Analytics-Qualified!.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=1e00757b-4c2a-47ce-9608-6bd2899c86f2</guid>
      <pubDate>Thu, 04 Jun 2009 20:03:00 +0000</pubDate>
      <category>Certification</category>
      <category>Google</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=1e00757b-4c2a-47ce-9608-6bd2899c86f2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=1e00757b-4c2a-47ce-9608-6bd2899c86f2</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Nik-Makris-is-now-Google-Analytics-Qualified!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=1e00757b-4c2a-47ce-9608-6bd2899c86f2</wfw:commentRss>
    </item>
    <item>
      <title>Create a jQuery Tag Cloud from RSS XML Feed</title>
      <description>&lt;p&gt;I previously created a &lt;a href="http://www.nikmakris.com/blog/post/jQuery-Blogger-Template-Category-List-Widget.aspx"&gt;jQuery Blogger Template Category List Widget&lt;/a&gt; to retrieve blog categories from a Blogger.com RSS feed and create a list of links which click through to Blogger label pages.&lt;/p&gt;
&lt;p&gt;I've now taken this code a step further and modified it to calculate the number of times each category/tag occurs enabling me to create a tag cloud from the data, like the one below.&lt;/p&gt;
&lt;div id="tagCloud"&gt;&lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;Accessibility&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;Affiliate Programmes&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 33px;"&gt;ASP.NET&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;ASP.NET MVC&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;Blogger&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;Blogging&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 30px;"&gt;C Sharp&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;Certification&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Cloud Services&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Databases&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;E-Commerce&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Fonts&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Google&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 21px;"&gt;Hardware&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;HDTV&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;Home Theatre&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 21px;"&gt;HTML&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;http&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;IIS&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Intellectual Property&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;Internet Explorer&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;jQuery&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Linux&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 21px;"&gt;Microsoft Windows&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Networking&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;NUnit&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 24px;"&gt;OS&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 21px;"&gt;Review&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;RSS&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;Social Networking&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;SPAM&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;U3 Smart Drive&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;upgrade&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 18px;"&gt;User Generated Content&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 30px;"&gt;Visual Studio&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 24px;"&gt;Web Browsers&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 45px;"&gt;Web Development&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;WLAN&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;XML&lt;/span&gt;&lt;/a&gt; &lt;a href="#"&gt;&lt;span style="font-size: 15px;"&gt;XSLT&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Before I explain the code I wrote to make the tag cloud I'll go through the solution to a bug I found with the original categories code.&lt;/p&gt;
&lt;p&gt;You may recall this snippet of code where I iterate through each post and then each category of each post, finally, when all the categories have been added to the array I sort them prior to de-duping them.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;$.get('/blog/rss.xml', function(data) {      &lt;br /&gt;//Find each post       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(data).find('item').each(function() {       &lt;br /&gt;//Get all the associated categories/tags for the post       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $($(this)).find('category').each(function() {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories[categories.length] = $(this).text();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories.sort();&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I later refactored the code removing the &lt;strong&gt;$(data).find('item').each&lt;/strong&gt; iteration which wasn't required since &lt;strong&gt;find('category')&lt;/strong&gt; will find them all anyway.&lt;/p&gt;
&lt;p&gt;I then discovered that the JavaScript &lt;strong&gt;.sort()&lt;/strong&gt; function was case-sensitive which resulted in lower case categories being placed at the end of the list, causing problems when I de-dup them.&lt;/p&gt;
&lt;p&gt;So the rewritten snippet of code became:&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;$.get('blog/rss.xml', function(data) {      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Find each tag and add to an array       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(data).find('category').each(function() {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories[categories.length] = $(this).text();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories.sort(caseInsensitiveCompare);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where &lt;strong&gt;caseInsensitiveCompare&lt;/strong&gt; refers to a JavaScript compare function:&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;function caseInsensitiveCompare(a, b) {      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var anew = a.toLowerCase();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var bnew = b.toLowerCase();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (anew &amp;lt; bnew) return -1;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (anew &amp;gt; bnew) return 1;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;       &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Creating the Tag Cloud jQuery Code&lt;/h2&gt;
&lt;p&gt;I start off as before fetching the XML, adding all the categories/tags from the RSS feed to a JavaScript array, then sorting them.&lt;/p&gt;
&lt;p&gt;But I needed a way to store, not only the tag name, but the number of times that tag is used on the blog (the number of times the category appears in the feed).&amp;nbsp; For this I decided to use a multi-dimensional array which would essentially store the data in a grid fashion e.g.&lt;/p&gt;
&lt;table style="border: 1px solid #000000; width: 300px;" border="1" cellspacing="0" cellpadding="2"&gt;
&lt;thead&gt; 
&lt;tr&gt;
&lt;th valign="top"&gt;&lt;strong&gt;Tag Name&lt;/strong&gt;&lt;/th&gt; &lt;th valign="top"&gt;&lt;strong&gt;Count&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt; 
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;ASP.NET&lt;/td&gt;
&lt;td valign="top"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Accessibility&lt;/td&gt;
&lt;td valign="top"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Blogging&lt;/td&gt;
&lt;td valign="top"&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;jQuery&lt;/td&gt;
&lt;td valign="top"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The de-dup loop from my previous categories script now performs two jobs, it removes the tag duplicates and creates a count of each tag occurrence.&lt;/p&gt;
&lt;p&gt;Once the multi-dimensional array has been populated, all that's left to do is iterate through the array creating the HTML necessary to build the tag cloud, followed by appending it to a DIV tag with an ID="bloggerCloud" on the page.&lt;/p&gt;
&lt;p&gt;Note the calculation I perform to get the tags appearing a reasonable pixel size ((tagCount * 3) + 12).&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;$(document).ready(function() {      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var categories = new Array();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var dedupedCategories = [];       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.get('blog/rss.xml', function(data) {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Find each tag and add to an array       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(data).find('category').each(function() {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories[categories.length] = $(this).text();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories.sort(caseInsensitiveCompare);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Dedup tag list and create a multi-dimensional array to store 'tag' and 'tag count'       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var oldCategory = '';       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var x = 0;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(categories).each(function() {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.toString() != oldCategory) {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Create a new array to put inside the array row&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dedupedCategories[x] = [];       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Store the tag name first&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dedupedCategories[x][0] = this.toString();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Start the tag count&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dedupedCategories[x][1] = 1;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x++;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Increment tag count       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dedupedCategories[x - 1][1] = dedupedCategories[x - 1][1] + 1;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldCategory = this.toString();       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Loop through all unique tags and write the cloud       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var cloudHtml = "";       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(dedupedCategories).each(function(i) {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cloudHtml += "&amp;lt;a href=\"/blog/labels/";       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cloudHtml += dedupedCategories[i][0] + ".html\"&amp;gt;&amp;lt;span style=\"font-size:" + ((dedupedCategories[i][1] * 3) + 12) + "px;\"&amp;gt;"; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cloudHtml += dedupedCategories[i][0] + "&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt; \n";       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('#bloggerCloud').append(cloudHtml);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;       &lt;br /&gt;});&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Since building this script I've now gone one step further and created a jQuery plug-in based on this code.&amp;nbsp; For more details and the source code see my &lt;a href="http://www.nikmakris.com/projects/BloggerClassicTagCloud/"&gt;jQuery Blogger.com Tag Cloud Plugin&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FCv0I1YO2XTdt2agB_XYPj_4t_8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FCv0I1YO2XTdt2agB_XYPj_4t_8/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/FCv0I1YO2XTdt2agB_XYPj_4t_8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FCv0I1YO2XTdt2agB_XYPj_4t_8/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/nikmakris?a=N9n94oimSVQ:wR9S13HR1zY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=N9n94oimSVQ:wR9S13HR1zY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=N9n94oimSVQ:wR9S13HR1zY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=N9n94oimSVQ:wR9S13HR1zY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=N9n94oimSVQ:wR9S13HR1zY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=N9n94oimSVQ:wR9S13HR1zY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=N9n94oimSVQ:wR9S13HR1zY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Create-a-jQuery-Tag-Cloud-from-RSS-XML-Feed.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Create-a-jQuery-Tag-Cloud-from-RSS-XML-Feed.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=03d00767-fb15-4e5a-9aae-72ebf3491a0e</guid>
      <pubDate>Fri, 29 May 2009 20:20:00 +0000</pubDate>
      <category>Blogging</category>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=03d00767-fb15-4e5a-9aae-72ebf3491a0e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=03d00767-fb15-4e5a-9aae-72ebf3491a0e</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Create-a-jQuery-Tag-Cloud-from-RSS-XML-Feed.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=03d00767-fb15-4e5a-9aae-72ebf3491a0e</wfw:commentRss>
    </item>
    <item>
      <title>Setting Up ASP.NET MVC with NUnit for Visual Studio 2008 Standard Edition &amp;amp;amp;amp;amp;amp;amp; Visual Web Developer Express 2008</title>
      <description>&lt;p&gt;I've just spent my lunch hour downloading and installing &lt;a href="http://www.asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt;.&amp;nbsp; I also downloaded the sample chapter from &lt;a href="http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf" target="_blank"&gt;Professional ASP.NET MVC 1.0 (large PDF)&lt;/a&gt; which walks through the development of &lt;a href="http://nerddinner.com/"&gt;NerdDinner.com&lt;/a&gt;.&amp;nbsp; I began to create a test ASP.NET MVC project on Visual Studio 2008 Standard.&lt;/p&gt;
&lt;p&gt;One of the main positives of ASP.NET MVC is that &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven Development&lt;/a&gt; is so much easier than with ASP.NET Webforms.&lt;/p&gt;
&lt;p&gt;I soon realised when I created my first ASP.NET MVC project however that unless you have Visual Studio Professional or higher you don't get &lt;strong&gt;Visual Studio test Unit Framework&lt;/strong&gt;, which means that to create a test project, you first need to install another testing framework such as &lt;a href="http://www.nunit.org/index.php"&gt;NUnit&lt;/a&gt;, and configure Visual Studio or Visual Web Developer 2008 to use it.&lt;/p&gt;
&lt;p&gt;This is an extract from the book Professional ASP.NET MVC 1.0:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;Note: The Visual Studio Unit Test Framework is only available with Visual Studio 2008 Professional and        &lt;br /&gt;higher versions). If you are using VS 2008 Standard Edition or Visual Web Developer 2008 Express you         &lt;br /&gt;will need to download and install the NUnit, MBUnit or XUnit extensions for ASP.NET MVC in order for         &lt;br /&gt;this dialog to be shown. The dialog will not display if there aren't any test frameworks installed.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I already had NUnit installed, so I began my search for an NUnit extension for ASP.NET MVC, which I found here. &lt;a href="http://blogs.msdn.com/webdevtools/archive/2009/04/28/updated-nunit-templates-for-asp-net-mvc-1-0-rtm.aspx"&gt;Updated NUnit Templates for ASP.Net MVC 1.0 RTM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After running &lt;strong&gt;&lt;em&gt;installNUnit.cmd&lt;/em&gt;&lt;/strong&gt; which created the registry entries required by Visual Studio, you need to make sure the registry entries created point to the compressed templates.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;Note:&lt;/span&gt;&lt;/em&gt; If you are using Visual Web Developer 2008, this might be all you need to do.&amp;nbsp; Click on File &amp;gt; New Project and check to see if "Test" appears under "Project types" on the left-hand menu in the dialogue box.&amp;nbsp; If not carry on reading.&lt;/p&gt;
&lt;p&gt;Copy the NUnit test templates from the downloaded directory (in your chosen .NET language) &lt;strong&gt;MvcApplication.NUnit.Tests.zip&lt;/strong&gt; to the following folder on your machine:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;%Program Files%\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Test&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;or here for VWD 2008:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;%Program Files%\Microsoft Visual Studio 9.0\Common7\IDE\VWDExpress\ProjectTemplates\CSharp\Test&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then make sure the registry entry here:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HKEY_LOCAL_MACHINE\SOFTWARE\VisualStudio\9.0\MVC\TestProjectTemplates\NUnit\C#&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;or here for VWD 2008:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VWDExpress\9.0\MVC\TestProjectTemplates\NUnit\C#&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Correctly points to the location of &lt;strong&gt;MvcApplication.NUnit.Tests.zip.&lt;/strong&gt; e.g.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #004a00;"&gt;&lt;strong&gt;Path:&lt;/strong&gt; CSharp\Test\&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Template:&lt;/strong&gt; MvcApplication.NUnit.Tests.zip&lt;/p&gt;
&lt;p&gt;Then close all instances of Visual Studio and open up the command prompt and move to the following location:&lt;/p&gt;
&lt;p&gt;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE&amp;gt;&lt;/p&gt;
&lt;p&gt;and run the following command:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;gt; devenv /setup&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Once this has completed, you should find that when you create an ASP.NET MVC project, you will now get another pop-up menu asking you if you wish to create a unit test project for your application using NUnit.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8e4KUt5ZbOqd1wTp2iYh6zW51OE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8e4KUt5ZbOqd1wTp2iYh6zW51OE/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/8e4KUt5ZbOqd1wTp2iYh6zW51OE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8e4KUt5ZbOqd1wTp2iYh6zW51OE/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/nikmakris?a=O07kxvrzYCw:FSyM_Fo-Od8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=O07kxvrzYCw:FSyM_Fo-Od8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=O07kxvrzYCw:FSyM_Fo-Od8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=O07kxvrzYCw:FSyM_Fo-Od8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=O07kxvrzYCw:FSyM_Fo-Od8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=O07kxvrzYCw:FSyM_Fo-Od8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=O07kxvrzYCw:FSyM_Fo-Od8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Setting-Up-ASPNET-MVC-with-NUnit-for-Visual-Studio-2008-Standard-Edition-Visual-Web-Developer-Express-2008.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Setting-Up-ASPNET-MVC-with-NUnit-for-Visual-Studio-2008-Standard-Edition-Visual-Web-Developer-Express-2008.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=3095898d-806b-4cd9-bc1f-40d45ab32e37</guid>
      <pubDate>Fri, 22 May 2009 13:50:00 +0000</pubDate>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=3095898d-806b-4cd9-bc1f-40d45ab32e37</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=3095898d-806b-4cd9-bc1f-40d45ab32e37</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Setting-Up-ASPNET-MVC-with-NUnit-for-Visual-Studio-2008-Standard-Edition-Visual-Web-Developer-Express-2008.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=3095898d-806b-4cd9-bc1f-40d45ab32e37</wfw:commentRss>
    </item>
    <item>
      <title>jQuery Blogger Template Category List Widget</title>
      <description>&lt;p&gt;&lt;a href="http://www.blogger.com/" target="_blank"&gt;Blogger&lt;/a&gt; is a hosted blogging service which allows you to publish your blog to your own URL and create your own custom HTML templates to match your website design.&amp;nbsp; &lt;br /&gt;I have been using Blogger for this blog for several years, and have been trying to find a good way of displaying a list of categories on each blog page.&lt;/p&gt;
&lt;p&gt;As yet I haven't found an official way of creating a category list using the Blogger mark-up code, so I decided to write my own widget to do the job for me.&lt;/p&gt;
&lt;p&gt;When I say category list I mean a list of all the blog tags/labels in your blog, each linking to a page with posts categorised using that particular tag, just like the examples below.&lt;/p&gt;
&lt;h3&gt;Blog Categories&lt;/h3&gt;
&lt;ul class="niceList"&gt;
&lt;li&gt;&lt;a href="#"&gt;ASP.NET&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Blogger&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Blogging&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Databases&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Google&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;HTML&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;IIS&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Social Networking&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Visual Studio&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Web Browsers&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Web Development&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because Blogger is a hosted blogging service you can't use a server-side language to create the category list for your HTML template, instead you must rely on client-side JavaScript.&lt;/p&gt;
&lt;p&gt;Thankfully the Blogger service publishes XML files to your website along with the post, archive and category HTML pages.&amp;nbsp; These are in ATOM and RSS formats and are there primarily for syndication, but XML files are also fairly straight-forward to parse using most programming languages and contain all the category data we need to build a categories list.&lt;/p&gt;
&lt;p&gt;I chose to use the &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; library because it makes the process even easier.&lt;/p&gt;
&lt;h3&gt;The Blogger XML Format&lt;/h3&gt;
&lt;p&gt;From the Blogger ATOM XML snippet below you can see that each blog &lt;strong&gt;item&lt;/strong&gt; can have multiple &lt;strong&gt;category&lt;/strong&gt; nodes.&amp;nbsp; This means that the code must loop through each blog post, then loop through each category of each post to create our category list, but it also means that we will have duplicate categories, because more than one post can have the same category.&lt;/p&gt;
&lt;p&gt;&amp;lt;item&amp;gt;    &lt;br /&gt;&amp;nbsp; &amp;lt;guid isPermaLink='false'&amp;gt;&amp;lt;/guid&amp;gt;     &lt;br /&gt;&amp;nbsp; &amp;lt;pubDate&amp;gt;Thu, 14 May 2009 18:30:00 +0000&amp;lt;/pubDate&amp;gt;     &lt;br /&gt;&amp;nbsp; &amp;lt;atom:updated&amp;gt;2009-05-15T11:35:03.262+01:00&amp;lt;/atom:updated&amp;gt;     &lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;category domain='&lt;/strong&gt;&lt;strong&gt;http://www.blogger.com/atom/ns#'&lt;/strong&gt;&lt;strong&gt;&amp;gt;C Sharp&amp;lt;/category&amp;gt;      &lt;br /&gt;&amp;nbsp; &amp;lt;category domain='&lt;/strong&gt;&lt;strong&gt;http://www.blogger.com/atom/ns#'&lt;/strong&gt;&lt;strong&gt;&amp;gt;ASP.NET&amp;lt;/category&amp;gt;      &lt;br /&gt;&amp;nbsp; &amp;lt;category domain='&lt;/strong&gt;&lt;strong&gt;http://www.blogger.com/atom/ns#'&lt;/strong&gt;&lt;strong&gt;&amp;gt;Visual Studio&amp;lt;/category&amp;gt;&lt;/strong&gt; &lt;br /&gt;&amp;nbsp; &amp;lt;title&amp;gt;Language Interoperability in the .NET Framework&amp;lt;/title&amp;gt;     &lt;br /&gt;&amp;nbsp; &amp;lt;atom:summary type='text'&amp;gt;.NET is a powerful framework which was built to allow cross-language support...&amp;lt;/atom:summary&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;link&amp;gt;http://www.nikmakris.com/blog/2009/05/language-interoperability-in-net.html&amp;lt;/link&amp;gt;     &lt;br /&gt;&amp;nbsp; &amp;lt;author&amp;gt;Nik&amp;lt;/author&amp;gt;     &lt;br /&gt;&amp;nbsp; &amp;lt;thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'&amp;gt;0&amp;lt;/thr:total&amp;gt;     &lt;br /&gt;&amp;lt;/item&amp;gt;&lt;/p&gt;
&lt;h3&gt;The jQuery Code&lt;/h3&gt;
&lt;p&gt;The jQuery code is fairly easy to follow, but here is a quick explanation.&amp;nbsp; After the DOM is available for use, I create two JavaScript arrays, one to hold the categories and one to hold our de-duped category list.&amp;nbsp; Then I load in the Blogger RSS feed and iterate through each blog post adding each category to the categories array. &lt;br /&gt;Once it reaches the end of the RSS feed, I need to sort the array into alphabetical order so that I can de-duplicate the categories list I just populated, which is what the next jQuery &lt;strong&gt;.each()&lt;/strong&gt; function does.     &lt;br /&gt;All I have left to do is loop through the de-duped categories list, create the HTML link for each category and the append the HTML unordered list to the page.&lt;/p&gt;
&lt;p&gt;$(document).ready(function() {    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var categories = new Array();     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var dedupedCategories = new Array();     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.get('/blog/rss.xml', function(data) {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;//Find each post      &lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(data).find('item').each(function() {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;//Get all the associated categories/tags for the post      &lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $($(this)).find('category').each(function() {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories[categories.length] = $(this).text();     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; categories.sort();     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;//Dedup category/tag list&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var oldCategory = '';     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(categories).each(function() {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.toString() != oldCategory) {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;//Add new category/tag      &lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dedupedCategories[dedupedCategories.length] = this.toString();     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldCategory = this.toString();     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;// Loop through all unique categories/tags and write a link for each      &lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var html = "&amp;lt;h3&amp;gt;Categories&amp;lt;/h3&amp;gt;";     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; html += "&amp;lt;ul class=\"niceList\"&amp;gt;";     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(dedupedCategories).each(function() {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; html += "&amp;lt;li&amp;gt;&amp;lt;a href=\"/blog/labels/";     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; html += this.toString() + ".html\"&amp;gt;";     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; html += this.toString() + "&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;\n";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; html += "&amp;lt;/ul&amp;gt;";     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('#bloggerCategories').append(html);     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;     &lt;br /&gt;});&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Update your Blogger Template HTML to Show Categories&lt;/h3&gt;
&lt;p&gt;The only HTML you need to add to your Blogger template is a call to jQuery, and this script in the head of your page, plus an empty HTML DIV tag, in the place where you want your categories list to appear.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;script type="text/javascript" src="/scripts/jquery.js"&amp;gt;&amp;lt;/script&amp;gt;      &lt;br /&gt;&amp;lt;script type="text/javascript" src="/scripts/blogcategories.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;div id="bloggerCategories"&amp;gt;&amp;lt;/div&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can see the script in action on &lt;a href="http://www.nikmakris.com/blog/" target="_blank"&gt;my blog&lt;/a&gt;, or see this code rewritten to &lt;a href="http://www.nikmakris.com/blog/post/Create-a-jQuery-Tag-Cloud-from-RSS-XML-Feed.aspx"&gt;create a tag cloud&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pv6OkCDXn1dWxP9IeWevcvNI1Ek/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pv6OkCDXn1dWxP9IeWevcvNI1Ek/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/Pv6OkCDXn1dWxP9IeWevcvNI1Ek/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pv6OkCDXn1dWxP9IeWevcvNI1Ek/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/nikmakris?a=DeZZ-NrjyHw:J1cznbQEalU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=DeZZ-NrjyHw:J1cznbQEalU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=DeZZ-NrjyHw:J1cznbQEalU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=DeZZ-NrjyHw:J1cznbQEalU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=DeZZ-NrjyHw:J1cznbQEalU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=DeZZ-NrjyHw:J1cznbQEalU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=DeZZ-NrjyHw:J1cznbQEalU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/jQuery-Blogger-Template-Category-List-Widget.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/jQuery-Blogger-Template-Category-List-Widget.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=6ff9974f-b637-47c0-819f-4586f1c63e96</guid>
      <pubDate>Wed, 20 May 2009 13:27:00 +0000</pubDate>
      <category>Blogging</category>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=6ff9974f-b637-47c0-819f-4586f1c63e96</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=6ff9974f-b637-47c0-819f-4586f1c63e96</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/jQuery-Blogger-Template-Category-List-Widget.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=6ff9974f-b637-47c0-819f-4586f1c63e96</wfw:commentRss>
    </item>
    <item>
      <title>An Introduction to Web Development and Design for Work Experience Students</title>
      <description>&lt;p&gt;We have a school student coming into our agency for work experience shortly, so I'm putting together a programme which will introduce him to the various areas of web development, such as HTML, CSS, client-side and server-side code, databases and XML.&lt;/p&gt;
&lt;p&gt;It is going to be difficult to cover the various different skills involved in web development in a week, and without knowing what sort of web development knowledge the student already possesses it is hard to determine what can be achieved in such a short time.&lt;/p&gt;
&lt;p&gt;However the main goal of work experience is to give the student a flavour of what is involved in the profession, to allow them to make an informed decision on whether such a career is for them.&lt;/p&gt;
&lt;p&gt;I've structured the programme as follows:&lt;/p&gt;
&lt;p&gt;Day 1 - Introduction to Web Design    &lt;br /&gt;Day 2 - Introduction to HTML and CSS     &lt;br /&gt;Day 3 - Understanding web servers, web browsers and HTTP and FTP     &lt;br /&gt;Day 4 - Introduction to server-side and client-side programming     &lt;br /&gt;Day 5 - Overview of databases and XML&lt;/p&gt;
&lt;p&gt;Within each topic I have posed questions and tasks, which will require research and learning.&amp;nbsp; For each subject I have provided links to tutorials and online information.&lt;/p&gt;
&lt;p&gt;I'm also aware that web development is very much a practical and creative skill, so I've also set a project which will run for the whole week and will allow him to put what he has learned into practice by building a simple personal portfolio website.&lt;/p&gt;
&lt;p&gt;I have no idea whether I'm being too ambitious, but surely that will depend on the student's current knowledge and interest in the subject.&amp;nbsp; I think that it can easily be tailored to each student depending on their interests.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have uploaded a PDF of my programme entitled &lt;a href="http://www.nikmakris.com/docs/web-development-introduction-for-work-experience-students.pdf" target="_blank"&gt;An Introduction to Web Development and Design for Work Experience Students&lt;/a&gt; and would appreciate any feedback.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UnxGzQlP90u5MoBG5Nsp7N14J58/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UnxGzQlP90u5MoBG5Nsp7N14J58/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/UnxGzQlP90u5MoBG5Nsp7N14J58/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UnxGzQlP90u5MoBG5Nsp7N14J58/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/nikmakris?a=X0fnX-Fn7SQ:QNX4Llo4rpk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=X0fnX-Fn7SQ:QNX4Llo4rpk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=X0fnX-Fn7SQ:QNX4Llo4rpk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=X0fnX-Fn7SQ:QNX4Llo4rpk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=X0fnX-Fn7SQ:QNX4Llo4rpk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=X0fnX-Fn7SQ:QNX4Llo4rpk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=X0fnX-Fn7SQ:QNX4Llo4rpk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/An-Introduction-to-Web-Development-and-Design-for-Work-Experience-Students.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/An-Introduction-to-Web-Development-and-Design-for-Work-Experience-Students.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=cbe92605-4e66-4e64-8365-299dfa85a443</guid>
      <pubDate>Sun, 17 May 2009 13:36:00 +0000</pubDate>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=cbe92605-4e66-4e64-8365-299dfa85a443</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=cbe92605-4e66-4e64-8365-299dfa85a443</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/An-Introduction-to-Web-Development-and-Design-for-Work-Experience-Students.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=cbe92605-4e66-4e64-8365-299dfa85a443</wfw:commentRss>
    </item>
    <item>
      <title>Language Interoperability in the .NET Framework</title>
      <description>&lt;p&gt;.NET is a powerful framework which was built to allow cross-language support.&amp;nbsp; All .NET code is compiled to Intermediate Language (IL) whether you are developing in C#, VB.NET, J# or any other .NET language.&amp;nbsp; This means it is possible to build applications with modules written in different languages, because when the application is compiled it will all be compiled to a common language, IL.&lt;/p&gt;
&lt;p&gt;This means a class written in one language can inherit from a class written in another language, or an object can directly call a method of another class written in another .NET language.&amp;nbsp; Visual Studio also allows you to step through all the different modules in the debugger.&lt;/p&gt;
&lt;p&gt;To demonstrate the Language Interoperability in .NET, I'm going to call a VB.NET method from the code-behind page of a C# ASP.NET page.&amp;nbsp; This isn't something you would ordinarily want to do, but its an easy way to show the power of .NET.&lt;/p&gt;
&lt;p&gt;In Visual Studio, right-click your website root in Solution Explorer and select add reference.&amp;nbsp; Scroll down the .NET tab until you find &lt;strong&gt;Microsoft.VisualBasic&lt;/strong&gt; and click ok.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.nikmakris.com/images/blog/visual-studio/add-reference-vbnet.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;This will modify your &lt;strong&gt;Web.Config&lt;/strong&gt; file by adding an assembly reference to Microsoft.VisualBasic to the assemblies list.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;assemblies&amp;gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&amp;gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&amp;gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add assembly="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/&amp;gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;add assembly="Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/&amp;gt;&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/assemblies&amp;gt;&lt;/p&gt;
&lt;p&gt;To use the VB.NET language within your C# webform you need to add a &lt;strong&gt;using Microsoft.VisualBasic;&lt;/strong&gt; statement at the top of your code-behind page.&lt;/p&gt;
&lt;p&gt;In my demo example below I am going to use the VB.NET &lt;strong&gt;MonthName&lt;/strong&gt; method of &lt;strong&gt;DateAndTime&lt;/strong&gt; to get the current month's name and display it on my page using a ASP.NET label control.&amp;nbsp; The bold code below is VB.NET interspersed with C#.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;using System;      &lt;br /&gt;using System.Collections.Generic;       &lt;br /&gt;using System.Web;       &lt;br /&gt;using System.Web.UI;       &lt;br /&gt;using System.Web.UI.WebControls;       &lt;br /&gt;using Microsoft.VisualBasic; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;public partial class language_interop : System.Web.UI.Page      &lt;br /&gt;{       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int month = DateTime.Today.Month;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string monthName = &lt;strong&gt;DateAndTime.MonthName&lt;/strong&gt;(month, false);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelMonthName.Text = monthName;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N0-_FvknmVbjRABmhgnrHYrOxUM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N0-_FvknmVbjRABmhgnrHYrOxUM/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/N0-_FvknmVbjRABmhgnrHYrOxUM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N0-_FvknmVbjRABmhgnrHYrOxUM/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/nikmakris?a=Au8K2EgFnDs:qTHJs-e3-e4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=Au8K2EgFnDs:qTHJs-e3-e4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=Au8K2EgFnDs:qTHJs-e3-e4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=Au8K2EgFnDs:qTHJs-e3-e4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=Au8K2EgFnDs:qTHJs-e3-e4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=Au8K2EgFnDs:qTHJs-e3-e4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=Au8K2EgFnDs:qTHJs-e3-e4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Language-Interoperability-in-the-NET-Framework.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Language-Interoperability-in-the-NET-Framework.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=fef8a0f4-9bc2-44e0-adf9-04ad2681c432</guid>
      <pubDate>Thu, 14 May 2009 13:35:00 +0000</pubDate>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=fef8a0f4-9bc2-44e0-adf9-04ad2681c432</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=fef8a0f4-9bc2-44e0-adf9-04ad2681c432</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Language-Interoperability-in-the-NET-Framework.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=fef8a0f4-9bc2-44e0-adf9-04ad2681c432</wfw:commentRss>
    </item>
    <item>
      <title>Does your PC Keeping Forgetting the Date &amp;amp;amp;amp;amp;amp; Time?</title>
      <description>&lt;p&gt;Yesterday my aging desktop PC decided not to boot, and instead displayed this helpful error &lt;strong&gt;"CMOS Checksum Error"&lt;/strong&gt;.    &lt;br /&gt;In order to get it to boot into Windows I had to press Delete to go into the BIOS settings and change the configuration from &lt;em&gt;"Halt on all errors"&lt;/em&gt; to &lt;em&gt;"halt on no errors"&lt;/em&gt;.&amp;nbsp; Upon saving the BIOS settings and restarting the error disappeared.&lt;/p&gt;
&lt;p&gt;Sometimes though a PC with a dead CMOS battery will boot as normal but forget the date and time on each reboot.&amp;nbsp; This can lead to odd effects.&amp;nbsp; For instance I tried to logging into my webmail only to be told the SSL licence wasn't valid, not because it had expired but because my computer thought it was 2001!&lt;/p&gt;
&lt;h2&gt;CMOS Battery at Fault&lt;/h2&gt;
&lt;p&gt;Once I got into Windows I got a few &lt;em&gt;"Windows has found new hardware"&lt;/em&gt; messages and my system clock had reverted to a day in 2001.    &lt;br /&gt;As soon as I saw my clock had forgotten the time and the date, all evidence pointed towards the CMOS battery being at fault.&amp;nbsp; Its funny how a simple little battery that most people don't even realise existed inside their PC can bring a computer to its knees.&lt;/p&gt;
&lt;h3&gt;Locating &amp;amp; Changing the CMOS Battery&lt;/h3&gt;
&lt;p&gt;In a desktop PC the CMOS battery is fairly straight forward to find.&amp;nbsp; They normally look like a large wrist watch battery, with CR2032 lithium batteries being the most common.&amp;nbsp; A simple search on eBay will find you a cheap replacement.&amp;nbsp; Just be careful removing and fitting anything on a motherboard, because any static electricity on your body could fry delicate computer chips.&lt;/p&gt;
&lt;p&gt;&lt;img title="CMOS battery on a desktop PC motherboard" src="http://www.nikmakris.com/images/blog/cmos/desktop-cmos-battery.jpg" alt="CMOS battery on a desktop PC motherboard" /&gt;&lt;/p&gt;
&lt;p&gt;On a laptop or notebook they are more difficult to find and generally more expensive.&amp;nbsp; On my Dell Inspiron you need to lift out the main battery and pull out a small flap to locate the CMOS battery.&lt;/p&gt;
&lt;p&gt;&lt;img title="Dell laptop battery housing" src="http://www.nikmakris.com/images/blog/cmos/dell-laptop-battery-cover.jpg" alt="Dell laptop battery housing" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Location of CMOS battery in Dell Inspiron laptop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title="Dell Inspiron CMOS battery location" src="http://www.nikmakris.com/images/blog/cmos/laptop-cmos-battery-location.jpg" alt="Dell Inspiron CMOS battery location" /&gt;&lt;/p&gt;
&lt;p&gt;My Dell just so happens to take a 7.2V 15mAh Ni-MH CMOS battery, which again, performing a quick search on eBay will find you a replacement.&lt;/p&gt;
&lt;p&gt;Fitting the new battery in either case is very straight forward.&lt;/p&gt;
&lt;p&gt;Read more about &lt;a href="http://www.smartcomputing.com/editorial/article.asp?guid=&amp;amp;bJumpto=true&amp;amp;Isfrm=IN&amp;amp;article=articles/webonly/techsupport/110w10/110w10.asp&amp;amp;ArticleID=31003"&gt;Installing a CMOS Battery&lt;/a&gt; here.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XYphbQX7Oudm9JkKQy837iOMsBs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XYphbQX7Oudm9JkKQy837iOMsBs/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/XYphbQX7Oudm9JkKQy837iOMsBs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XYphbQX7Oudm9JkKQy837iOMsBs/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/nikmakris?a=UchlNhjm25s:X2NCSWcWetY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=UchlNhjm25s:X2NCSWcWetY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=UchlNhjm25s:X2NCSWcWetY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=UchlNhjm25s:X2NCSWcWetY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=UchlNhjm25s:X2NCSWcWetY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=UchlNhjm25s:X2NCSWcWetY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=UchlNhjm25s:X2NCSWcWetY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Does-your-PC-Keeping-Forgetting-the-Date-Time.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Does-your-PC-Keeping-Forgetting-the-Date-Time.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=59d40ddf-18b4-4401-b298-e00f39bf833e</guid>
      <pubDate>Wed, 13 May 2009 13:34:00 +0000</pubDate>
      <category>Hardware</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=59d40ddf-18b4-4401-b298-e00f39bf833e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=59d40ddf-18b4-4401-b298-e00f39bf833e</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Does-your-PC-Keeping-Forgetting-the-Date-Time.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=59d40ddf-18b4-4401-b298-e00f39bf833e</wfw:commentRss>
    </item>
    <item>
      <title>Pictures from Internet World 2009</title>
      <description>&lt;div id="flickr_badge_uber_wrapper"&gt;
&lt;div id="flickr_badge_wrapper"&gt;
&lt;script src="http://www.flickr.com/badge_code_v2.gne?count=10&amp;amp;display=latest&amp;amp;size=t&amp;amp;layout=x&amp;amp;source=user_set&amp;amp;user=9114863%40N02&amp;amp;set=72157617495879161&amp;amp;context=in%2Fset-72157617495879161%2F" type="text/javascript"&gt;&lt;/script&gt;
&lt;div id="flickr_badge_image1" class="flickr_badge_image"&gt;&lt;a href="http://www.flickr.com/photos/9114863@N02/3493670008/in/set-72157617495879161/"&gt;&lt;img title="Red Ant stand" src="http://farm4.static.flickr.com/3544/3493670008_039eb57eb3_t.jpg" alt="A photo on Flickr" width="100" height="75" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id="flickr_badge_image2" class="flickr_badge_image"&gt;&lt;a href="http://www.flickr.com/photos/9114863@N02/3493669598/in/set-72157617495879161/"&gt;&lt;img title="eBizLaw - eCommerce Theatre" src="http://farm4.static.flickr.com/3390/3493669598_058c75b0e1_t.jpg" alt="A photo on Flickr" width="100" height="75" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id="flickr_badge_image3" class="flickr_badge_image"&gt;&lt;a href="http://www.flickr.com/photos/9114863@N02/3492854375/in/set-72157617495879161/"&gt;&lt;img title="Internet World 2009, Earls Court" src="http://farm4.static.flickr.com/3402/3492854375_3859464853_t.jpg" alt="A photo on Flickr" width="100" height="75" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id="flickr_badge_image4" class="flickr_badge_image"&gt;&lt;a href="http://www.flickr.com/photos/9114863@N02/3492853841/in/set-72157617495879161/"&gt;&lt;img title="Peer1 Dancers" src="http://farm4.static.flickr.com/3649/3492853841_044fb78f3c_t.jpg" alt="A photo on Flickr" width="100" height="75" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div id="flickr_badge_image5" class="flickr_badge_image"&gt;&lt;a href="http://www.flickr.com/photos/9114863@N02/3492853411/in/set-72157617495879161/"&gt;&lt;img title="Peer1 Dancers" src="http://farm4.static.flickr.com/3656/3492853411_551efdcc9a_t.jpg" alt="A photo on Flickr" width="100" height="75" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class="flickr_badge_beacon" style="position: absolute; left: -999em; top: -999em; visibility: hidden;"&gt;&lt;img src="http://geo.yahoo.com/p?s=792600102&amp;amp;t=7969b9eca3cd3a0c7c7afc694b0fd9ed&amp;amp;r=http%3A%2F%2Fwww.nikmakris.com%2Fblog%2F2009_05_01_archive.html&amp;amp;fl_ev=0&amp;amp;lang=en&amp;amp;intl=uk" alt="" width="0" height="0" /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;a id="flickr_www" rel="photos" href="http://www.flickr.com/photos/9114863@N02/sets/72157617495879161/"&gt;Pictures from Internet World @ Earls Court, London, 30th April 2009&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/81m-a08X2nY0nXSg-pqyUGWbhEo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/81m-a08X2nY0nXSg-pqyUGWbhEo/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/81m-a08X2nY0nXSg-pqyUGWbhEo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/81m-a08X2nY0nXSg-pqyUGWbhEo/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/nikmakris?a=YWA28GgKFUc:uQmspZTSv84:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=YWA28GgKFUc:uQmspZTSv84:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=YWA28GgKFUc:uQmspZTSv84:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=YWA28GgKFUc:uQmspZTSv84:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=YWA28GgKFUc:uQmspZTSv84:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=YWA28GgKFUc:uQmspZTSv84:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=YWA28GgKFUc:uQmspZTSv84:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Pictures-from-Internet-World-2009.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Pictures-from-Internet-World-2009.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=ff671416-af37-49dc-a7e9-7c93587c97c0</guid>
      <pubDate>Sat, 02 May 2009 09:24:00 +0000</pubDate>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=ff671416-af37-49dc-a7e9-7c93587c97c0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=ff671416-af37-49dc-a7e9-7c93587c97c0</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Pictures-from-Internet-World-2009.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=ff671416-af37-49dc-a7e9-7c93587c97c0</wfw:commentRss>
    </item>
    <item>
      <title>Nike+ SportBand Review</title>
      <description>&lt;p&gt;Last year I decided to get healthy and take up running.&amp;nbsp; Being a gadget lover, I had been researching the &lt;a href="http://www.apple.com/ipod/nike/"&gt;iPod nano and Nike+ sport kit&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I liked the idea of being able to record my progress, set myself challenges and map my routes etc, see &lt;a title="http://nikeplus.nike.com/nikeplus/" href="http://nikeplus.nike.com/nikeplus/"&gt;http://nikeplus.nike.com/nikeplus/&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;The thing was, I already had an iPod classic which was too bulky to run with, and not compatible with the Nike+ kit.&amp;nbsp; I didn't really want to fork out for another iPod just to take out for a run, so I was pleased when Nike released the &lt;a href="http://www.engadget.com/2008/04/02/nike-sportband-coach-gets-official/"&gt;SportBand&lt;/a&gt;, I ordered one and started my training.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;That was about a year ago, and I've been using the Nike+ SportBand for all my runs since, clocking up over 300km in that time.&lt;/p&gt;
&lt;h2&gt;Review&lt;/h2&gt;
&lt;p&gt;I thought I'd write a quick review of the product to share my experience with the SportBand and the Nike+ website, which forms an integral part of the product, since all your stats are uploaded to the site.&lt;/p&gt;
&lt;h3&gt;Hardware&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://www.nikmakris.com/images/blog/nikeplus/nike.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The hardware included consists of a watch and shoe adapter.&amp;nbsp; The shoe adapter is designed to fit into special Nike+ running shoes, which I had already had.&amp;nbsp; If you don't want to purchase Nike+ running shoes search on eBay for "nike+ sensor" you can buy sensor pouches that fit on your shoe laces instead.&lt;/p&gt;
&lt;p&gt;Before each run you have to hold down the big button on the face of the watch to sync the shoe adapter to the watch, then after a few seconds when you are ready to run, you just press the same button again briefly to start and stop the clock.&lt;/p&gt;
&lt;p&gt;After using this for a while you wonder what Nike was thinking when they designed the watch.&amp;nbsp; First of all its not very sturdy, my LED broke after a few months use &lt;em&gt;(see photo, left-hand side)&lt;/em&gt;, the angle of the screen and reversed LED display are not at all easy to read when you are running.&amp;nbsp; Personally I would have been willing to pay a little more for a better watch.&lt;/p&gt;
&lt;h3&gt;Software and Website&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://www.nikmakris.com/images/blog/nikeplus/nikeplus-screen1.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;When you get back from your run, you simply detach the watch from its strap and plug it into your computer's USB port to upload your run data.&amp;nbsp; The software driver that you install on your PC allows you to calibrate your device as well; however I found that its not very accurate and if you increase your pace you need to recalibrate the device.&lt;/p&gt;
&lt;p&gt;The Nike+ website has been produced in Flash and looks visually impressive, but I find it to be a bit cumbersome to use and personally I would prefer an HTML website with embedded Flash graphs etc.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.nikmakris.com/images/blog/nikeplus/nikeplus-screen2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;All your runs appear in a bar chart, with a calendar running across the bottom.&amp;nbsp; When you hover a run you get more details for that particular run.&amp;nbsp; If you click on a run you get a timeline for that run with km/mile marker points and your pace at those positions.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.nikmakris.com/images/blog/nikeplus/nikeplus-screen4.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;You can also map your runs before or after a training session to either gauge how far a route is or to assign certain runs to a particular route.&amp;nbsp; This is useful so you can see your progress over the same route.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.nikmakris.com/images/blog/nikeplus/nikeplus-screen3.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The nike+ website also has a social element to it, allowing you to challenge other nike+ users and run routes others have mapped.&amp;nbsp; However the interface isn't as intuitive as it could be.&amp;nbsp; You can also create widgets to allow you to show your training overview on your blog or social profile, take a look at mine on the "&lt;a href="http://www.nikmakris.com/profile.aspx"&gt;About Me&lt;/a&gt;" page.&amp;nbsp; They also provide a FaceBook app, but I have never managed to get this to work.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Nike+ isn't perfect and I think that professional runners should probably look elsewhere, but for people like me who just run to keep fit and don't take it too seriously I find it helps me keep track of my progress and keeps me motivated.&lt;/p&gt;
&lt;p&gt;Being a developer it would also be nice to get access to my run data through an API.&amp;nbsp; There are &lt;a href="http://www.wroolie.co.uk/?p=13.aspx"&gt;ways to do it&lt;/a&gt;, but it would be nice if Nike were to publish an SDK or API documentation to make this a little easier.&amp;nbsp; Services such as Twitter have thrived on 3rd party applications which leverage the Twitter API, what are you waiting for Nike?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jHYtwyHV05TCJhLiMogqDW1EdbA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jHYtwyHV05TCJhLiMogqDW1EdbA/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/jHYtwyHV05TCJhLiMogqDW1EdbA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jHYtwyHV05TCJhLiMogqDW1EdbA/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/nikmakris?a=SJHR9JgJpq4:VlvFr4i_NW4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=SJHR9JgJpq4:VlvFr4i_NW4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=SJHR9JgJpq4:VlvFr4i_NW4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=SJHR9JgJpq4:VlvFr4i_NW4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=SJHR9JgJpq4:VlvFr4i_NW4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=SJHR9JgJpq4:VlvFr4i_NW4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=SJHR9JgJpq4:VlvFr4i_NW4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/Nike2b-SportBand-Review.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/Nike2b-SportBand-Review.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=2070e6c9-0ae0-4944-b6ef-4a7713a934f1</guid>
      <pubDate>Wed, 29 Apr 2009 13:49:00 +0000</pubDate>
      <category>Gadgets</category>
      <category>Reviews</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=2070e6c9-0ae0-4944-b6ef-4a7713a934f1</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=2070e6c9-0ae0-4944-b6ef-4a7713a934f1</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/Nike2b-SportBand-Review.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=2070e6c9-0ae0-4944-b6ef-4a7713a934f1</wfw:commentRss>
    </item>
    <item>
      <title>TargetInvocationException - Exception has been thrown by the target of an invocation</title>
      <description>&lt;p&gt;This exception isn't very useful because it's a general exception thrown when a method invoked through reflection throws an exception, took me a while to figure out what the issue was.&amp;nbsp; Even though I knew the page causing the error.&lt;/p&gt;
&lt;p&gt;This exception was thrown by a ASP.NET web form which contained a &lt;strong&gt;GridView&lt;/strong&gt; connected to an &lt;strong&gt;ObjectDataSource&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;ObjectDataSource&lt;/strong&gt; references methods in a data access layer class.&amp;nbsp; These methods then call stored procedures in the MS SQL database.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The code worked perfectly in my development environment.&lt;/p&gt;
&lt;p&gt;I have the SQL database set up so that the database user ASP.NET uses only has rights to execute the stored procedures it needs to.&amp;nbsp; The database user cannot run commands against the tables directly, this way I limit the surface area of attack should my application have a weakness that could be exploited.&lt;/p&gt;
&lt;p&gt;I double checked the stored procedures were all up-to-date, then double checked all the permissions on the stored procedures, and everything seemed in order, but I still kept getting the stack trace below in Event Viewer:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack trace:&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp;amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object&amp;amp; instance) &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.WebControls.DataBoundControl.PerformSelect()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.WebControls.GridView.DataBind()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.Control.EnsureChildControls()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.Control.PreRenderRecursiveInternal()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.Control.PreRenderRecursiveInternal()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.Control.PreRenderRecursiveInternal()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.Control.PreRenderRecursiveInternal()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.Control.PreRenderRecursiveInternal()      &lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)      &lt;br /&gt;Custom event details: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I then decided to check the stored procedures.&amp;nbsp; Then it dawned on me that one of the stored procedures used &lt;strong&gt;EXEC sp_executesql&lt;/strong&gt;, which requires the database user to have, in my case, SELECT permissions on the actual table itself.&lt;/p&gt;
&lt;p&gt;Once I granted these permissions to the database user, the web form loaded correctly.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3fjToCQFeUzJSaf9p9YlFbM14hg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3fjToCQFeUzJSaf9p9YlFbM14hg/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/3fjToCQFeUzJSaf9p9YlFbM14hg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3fjToCQFeUzJSaf9p9YlFbM14hg/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/nikmakris?a=bSWf9rBXpCc:BSbKi-tuwME:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=bSWf9rBXpCc:BSbKi-tuwME:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=bSWf9rBXpCc:BSbKi-tuwME:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=bSWf9rBXpCc:BSbKi-tuwME:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=bSWf9rBXpCc:BSbKi-tuwME:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=bSWf9rBXpCc:BSbKi-tuwME:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=bSWf9rBXpCc:BSbKi-tuwME:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/TargetInvocationException-Exception-has-been-thrown-by-the-target-of-an-invocation.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/TargetInvocationException-Exception-has-been-thrown-by-the-target-of-an-invocation.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=18ab3120-0ab6-4765-a2b3-42b81d2435b3</guid>
      <pubDate>Thu, 23 Apr 2009 13:48:00 +0000</pubDate>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=18ab3120-0ab6-4765-a2b3-42b81d2435b3</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=18ab3120-0ab6-4765-a2b3-42b81d2435b3</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/TargetInvocationException-Exception-has-been-thrown-by-the-target-of-an-invocation.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=18ab3120-0ab6-4765-a2b3-42b81d2435b3</wfw:commentRss>
    </item>
    <item>
      <title>ASP.NET Content Disposition Problem in IE7</title>
      <description>&lt;p&gt;I've just spent quite a while debugging a problem with content disposition I was having with Internet Explorer 7, the code works fine in Firefox but causes this error message to occur in IE7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;"Internet Explorer cannot download xxx from xxx."&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;"Internet Explorer was not able to open this Internet site.&amp;nbsp; The requested site is either unavailable or cannot be found.&amp;nbsp; Please try again later."&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="border-width: 0px; display: block; float: none;" title="content-disposition-error" src="http://www.nikmakris.com/images/blog/content-disposition-error.jpg" border="0" alt="content-disposition-error" width="482" height="275" /&gt;&lt;/p&gt;
&lt;p&gt;This was my original snippet of C# code:&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;Response.Buffer = true;      &lt;br /&gt;Response.ClearContent();       &lt;br /&gt;Response.ClearHeaders();       &lt;br /&gt;Response.ContentType = docToDisplay.Type.ContentType.ToString();       &lt;br /&gt;Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(docToDisplay.FileName));       &lt;br /&gt;Response.Cache.SetCacheability(HttpCacheability.NoCache);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #008000;"&gt;Response.BinaryWrite(docToDisplay.FileContent);      &lt;br /&gt;Response.End();       &lt;br /&gt;Response.Flush();       &lt;br /&gt;Response.Close();&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Response.Cache.SetCacheability&lt;/h2&gt;
&lt;p&gt;I eventually figured out that the following line on code was causing the issue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Response.Cache.SetCacheability(HttpCacheability.NoCache);&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I then did a quick search for "Response.Cache.SetCacheability(HttpCacheability.NoCache);" and discovered another developer who have had the same &lt;a href="http://www.velocityreviews.com/forums/t111824-file-download-problem-with-responsecachesetcacheability.html"&gt;Content-Disposition&lt;/a&gt; issue.&amp;nbsp; Unfortunately for me that page didn't get returned when I was searching for the Internet Explorer error message.&lt;/p&gt;
&lt;p&gt;This was the response to the post by Microsoft Online Support:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"Yes, the exporting code you provided is standard one and after some further      &lt;br /&gt;testing, I think the problem is just caused by the httpheader set by       &lt;br /&gt;Response.&lt;a href="http://www.velocityreviews.com/forums/t111824-file-download-problem-with-responsecachesetcacheability.html#"&gt;Cache&lt;/a&gt;.SetCacheability(HttpCacheability.No Cache)       &lt;br /&gt;I just captured the http messages when setting and not setting the above       &lt;br /&gt;"NOCache" option and found that when the http response returned the       &lt;br /&gt;Cache-Control: no-cache       &lt;br /&gt;header. So we can also reproduce the problem when using the following code:       &lt;br /&gt;page_load...       &lt;br /&gt;{       &lt;br /&gt;Response.CacheControl = "no-cache";       &lt;br /&gt;ExportDataGrid(dgSheet,"test.xls");       &lt;br /&gt;}       &lt;br /&gt;IMO, this should be the clientside browser's behavior against "no-cache"       &lt;br /&gt;response with stream content other than the original text/html content. So       &lt;br /&gt;would you try avoid setting the CacheAbility or the "Cache-Control" header       &lt;br /&gt;to "no-cache" when you'd like to output custom binary file stream?       &lt;br /&gt;Thanks,       &lt;br /&gt;Steven Cheng       &lt;br /&gt;Microsoft Online Support"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After removing the &lt;strong&gt;Response.Cache.SetCacheability&lt;/strong&gt; line the file downloads correctly in Internet Explorer.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MAIfsewk5l7V_EM2_j27fe9MGIY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MAIfsewk5l7V_EM2_j27fe9MGIY/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/MAIfsewk5l7V_EM2_j27fe9MGIY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MAIfsewk5l7V_EM2_j27fe9MGIY/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/nikmakris?a=vWUnHtAGxMQ:0OfzD0jdI_I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=vWUnHtAGxMQ:0OfzD0jdI_I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=vWUnHtAGxMQ:0OfzD0jdI_I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=vWUnHtAGxMQ:0OfzD0jdI_I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=vWUnHtAGxMQ:0OfzD0jdI_I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/nikmakris?a=vWUnHtAGxMQ:0OfzD0jdI_I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikmakris?i=vWUnHtAGxMQ:0OfzD0jdI_I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://www.nikmakris.com/blog/post/ASPNET-Content-Disposition-Problem-in-IE7.aspx</link>
      <author>nik.makris</author>
      <comments>http://www.nikmakris.com/blog/post/ASPNET-Content-Disposition-Problem-in-IE7.aspx#comment</comments>
      <guid>http://www.nikmakris.com/blog/post.aspx?id=dff3830a-5a00-49f4-a8ce-d115630e220c</guid>
      <pubDate>Tue, 21 Apr 2009 13:46:00 +0000</pubDate>
      <category>Web Browsers</category>
      <category>Web Development</category>
      <dc:publisher>nik.makris</dc:publisher>
      <pingback:server>http://www.nikmakris.com/blog/pingback.axd</pingback:server>
      <pingback:target>http://www.nikmakris.com/blog/post.aspx?id=dff3830a-5a00-49f4-a8ce-d115630e220c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.nikmakris.com/blog/trackback.axd?id=dff3830a-5a00-49f4-a8ce-d115630e220c</trackback:ping>
      <wfw:comment>http://www.nikmakris.com/blog/post/ASPNET-Content-Disposition-Problem-in-IE7.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.nikmakris.com/blog/syndication.axd?post=dff3830a-5a00-49f4-a8ce-d115630e220c</wfw:commentRss>
    </item>
  </channel>
</rss>

