<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-30582633</id><updated>2011-11-28T01:25:04.044+01:00</updated><category term='sitecore 5.3'/><category term='Vista'/><category term='portals'/><category term='portlets'/><category term='xpress'/><category term='support'/><category term='MVC'/><category term='personal'/><category term='CSS'/><category term='morningstar'/><category term='releases'/><category term='development'/><category term='OpenSearch'/><category term='AJAX'/><category term='Tablet-PC'/><category term='sitecore'/><category term='XNA'/><category term='metamatrix // intefolio'/><category term='google chrome'/><category term='ASP.NET MVC'/><category term='various'/><category term='XAML'/><category term='sql 2005'/><category term='&quot;Atlas&quot;'/><category term='discgolf'/><category term='certification'/><category term='iphone'/><category term='Codename &apos;DiscMaster&apos;'/><category term='RSS'/><category term='sitecore 5.2'/><category term='tutorials'/><category term='SEO'/><category term='WPF/E'/><category term='microsoft'/><category term='sitecore blogs'/><category term='sandcastle'/><category term='sitecore 6'/><category term='WPF'/><category term='ASP.NET 2.0 AJAX Extensions'/><category term='Silverlight'/><title type='text'>d e v e l o p m e n t</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>98</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30582633.post-655644193270538774</id><published>2009-11-03T00:47:00.001+01:00</published><updated>2009-11-03T01:04:38.595+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Using WCF to power a Custom DataTypeAttribute</title><content type='html'>&lt;p&gt;In a previous post i demonstrated the simplicity in which you can create a custom DataTypeAttribute, this post aims to take it one step further, or totally off track depending on how you look at it.&lt;/p&gt;  &lt;h3&gt;the scenario&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;the rule our custom datatypeattribute applies when validating should be supplied from a service, making it available for several different layers all incorporating one and the same basic rule.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The &lt;a href="http://cid-30bd35017610083e.skydrive.live.com/self.aspx/.Public/ValidationService%20sample.zip" target="_blank"&gt;sample project&lt;/a&gt; is complete with a MVC 2 (preview 2) web site, and a WCF service project. Note that it’s created with &lt;a href="http://msdn.microsoft.com/sv-se/vstudio/dd582936(en-us).aspx" target="_blank"&gt;Visual Studio 2010 Ultimate Beta 2&lt;/a&gt;, so you’ll need that as well if you want to run it (you can always re-create it if you so choose).&lt;/p&gt;  &lt;h5&gt;Part 1 – simple WCF service&lt;/h5&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pr5a2BlM4eM/Su9vfe77LZI/AAAAAAAABk4/vm_HDof3SqI/s1600-h/wcf%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="wcf" border="0" alt="wcf" src="http://lh5.ggpht.com/_pr5a2BlM4eM/Su9vf_buyBI/AAAAAAAABk8/G3XOYhzEKG8/wcf_thumb.png?imgmax=800" width="237" height="188" /&gt;&lt;/a&gt;The WCF service in this example holds two simple methods, one for the rule and the other for the error message:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; ValidationServiceWCF&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Rules : IRules&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; maxlength = 2;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; MaxShortTitleLength(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; text)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.IsNullOrEmpty(text))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; text.Length&amp;lt;=maxlength;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; MaxShortTitleLengthErrorMessage()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;&amp;quot;{0} is invalid, can only be up to {1} chars&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;{0}&amp;quot;&lt;/span&gt;, maxlength);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h5&gt;Part 2 – the mvc 2 project&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pr5a2BlM4eM/Su9vgZexA_I/AAAAAAAABlA/PC7as9VW9oo/s1600-h/mvc2proj%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="mvc2proj" border="0" alt="mvc2proj" src="http://lh5.ggpht.com/_pr5a2BlM4eM/Su9vgtBfc1I/AAAAAAAABlE/zY8RDIWGPFc/mvc2proj_thumb.png?imgmax=800" width="148" height="244" /&gt;&lt;/a&gt;The rule created in the WCF service is then applied in a custom datatypeattribute class called MaxLengthAttribute:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; ValidationService.Models.DataAnnotations&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MaxShortTitleLengthAttribute : DataTypeAttribute&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; errortext = &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        RulesService.IRules rulesengine = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RulesService.RulesClient();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; MaxShortTitleLengthAttribute()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            : &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;(DataType.Text)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            errortext = rulesengine.MaxShortTitleLengthErrorMessage();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; IsValid(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (rulesengine.MaxShortTitleLength((&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;value&lt;/span&gt;))&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; FormatErrorMessage(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; name)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(errortext, name);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;that attribute is then applied on our model using the DataTypeAttribute approach we’re now familiar with:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; ValidationService.Models&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    [MetadataType(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(Product_MetaData))]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Product&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;internal&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Product_MetaData&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    { &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        [Required]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        [ScaffoldColumn(&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; ID { get; set; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        [Required]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Title { get; set; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        [Required]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        [MaxShortTitleLength()]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ShortTitle { get; set; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;After that it was just a matter of creating some actions, wiring a few views, setting up a context and repository class and finally wrapping it all up.&lt;/p&gt;

&lt;p&gt;Now when validation is run on the ShortTitle property of the model the custom attribute fires off to the service, calls the validation method and gets the errormessage in case we’ll need it:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pr5a2BlM4eM/Su9vhAJot5I/AAAAAAAABlI/D1E9iSTqzgA/s1600-h/errormessage%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="errormessage" border="0" alt="errormessage" src="http://lh4.ggpht.com/_pr5a2BlM4eM/Su9vhicSyEI/AAAAAAAABlM/zZQkXsad5G8/errormessage_thumb.png?imgmax=800" width="244" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;That’s it, source code available &lt;a href="http://cid-30bd35017610083e.skydrive.live.com/self.aspx/.Public/ValidationService%20sample.zip" target="_blank"&gt;here&lt;/a&gt; (VS 2010 Beta 2).&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Note: this is a simple example and therefore i’ve just used the HomeController to handle everything. The endpoint for the WCF is currently pointing to &lt;em&gt;localhost:7556/rules.svc&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Regards,&lt;/p&gt;

&lt;p&gt;P.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-655644193270538774?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/655644193270538774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=655644193270538774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/655644193270538774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/655644193270538774'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/11/using-wcf-to-power-custom.html' title='Using WCF to power a Custom DataTypeAttribute'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pr5a2BlM4eM/Su9vf_buyBI/AAAAAAAABk8/G3XOYhzEKG8/s72-c/wcf_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3615350164087324547</id><published>2009-10-27T12:31:00.001+01:00</published><updated>2009-10-27T12:32:02.134+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Codename 'DiscMaster' - Implementing a custom DataTypeAttribute</title><content type='html'>In MVC the default validation is provided by DataAnnotations (this is, of course, replaceable) and is fantastic if you ask me. Being able to define the validation principles at the scope of the Model instead of UI makes a much more friendly architecture and enables the controller to present it's data to any view imaginable while still holding together beneath it all.&lt;br /&gt;
&lt;br /&gt;
The DataTypeAttributes available are great, but sometimes you might want to create your own, and so i hope you'll be pleased to learn it's actually really simple to do so:&lt;br /&gt;
&lt;br /&gt;
The example code below is for a custom MaxLength attribute for a text property:&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background: white; color: black; font-family: Courier New; font-size: 10pt;"&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;MaxLength&lt;/span&gt;(Length=2, ErrorMessage=&lt;span style="color: #a31515;"&gt;"Text is to long"&lt;/span&gt;)]&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; sample { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Code:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background: white; color: black; font-family: Courier New; font-size: 10pt;"&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; DiscMaster.Web.Models.DataAnnotations&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;{&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;AttributeUsage&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;AttributeTargets&lt;/span&gt;.Field | &lt;span style="color: #2b91af;"&gt;AttributeTargets&lt;/span&gt;.Property, AllowMultiple = &lt;span style="color: blue;"&gt;false&lt;/span&gt;)]&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;MaxLengthAttribute&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;DataTypeAttribute&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Length { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; MaxLengthAttribute() : &lt;span style="color: blue;"&gt;base&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;DataType&lt;/span&gt;.Text)&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &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; IsValid(&lt;span style="color: blue;"&gt;object&lt;/span&gt; value)&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; str = &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToString(value, &lt;span style="color: #2b91af;"&gt;CultureInfo&lt;/span&gt;.CurrentCulture);&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(str))&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&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; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (str.Length &amp;gt; Length)&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&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; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;}&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
As always, Codename 'DiscMaster' can be found at: &lt;a href="http://discmaster.codeplex.com/"&gt;http://discmaster.codeplex.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Best regards,&lt;br /&gt;
&lt;br /&gt;
P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3615350164087324547?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3615350164087324547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3615350164087324547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3615350164087324547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3615350164087324547'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/codename-discmaster-implementing-custom_27.html' title='Codename &apos;DiscMaster&apos; - Implementing a custom DataTypeAttribute'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1936354835482484267</id><published>2009-10-27T09:05:00.002+01:00</published><updated>2009-10-27T12:14:49.302+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Codename 'DiscMaster' - Implementing custom HtmlHelpers</title><content type='html'>&lt;div&gt;ASP.NET MVC has great support for writing your own HtmlHelpers, here's an example I wrote that takes a model of a player and outputs the profile picture (if any).&lt;br /&gt;
&lt;br /&gt;
So now outputting the profile picture is trivial and from one source:&lt;br /&gt;
&lt;div style="background: white; color: black; font-family: Courier New; font-size: 10pt;"&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="background: #ffee62;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt; Html.ProfileImage(Model, &lt;span style="color: #a31515;"&gt;""&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"70"&lt;/span&gt;, &lt;span style="color: blue;"&gt;new&lt;/span&gt; {style=&lt;span style="color: #a31515;"&gt;"float: left; padding-right: 10px; padding-bottom: 10px;"&lt;/span&gt;})&amp;nbsp; &lt;span style="background: #ffee62;"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
The code below is the entire code that generates my helper. it's&amp;nbsp;actually a extension method on the HtmlHelper class that uses a &lt;em&gt;TagBuilder&lt;/em&gt;. diving further into that you could write class-specific helpers simply by adding the type to the param, like HtmlHelper&amp;lt;Player&amp;gt;..&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div style="background: white; color: black; font-family: Courier New; font-size: 10pt;"&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;using&lt;/span&gt; DiscMaster.Web.Models;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; DiscMaster.Web.Extensions;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; DiscMaster.Web.Helpers&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;{&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ProfileImageHelper&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ProfileImage(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;HtmlHelper&lt;/span&gt; helper, Models.&lt;span style="color: #2b91af;"&gt;Player&lt;/span&gt; player, &lt;span style="color: blue;"&gt;string&lt;/span&gt; alternateText, &lt;span style="color: blue;"&gt;string&lt;/span&gt; width, &lt;span style="color: blue;"&gt;string&lt;/span&gt; height)&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; ProfileImage(helper, player, alternateText, width, height, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ProfileImage(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;HtmlHelper&lt;/span&gt; helper, Models.&lt;span style="color: #2b91af;"&gt;Player&lt;/span&gt; player, &lt;span style="color: blue;"&gt;string&lt;/span&gt; alternateText, &lt;span style="color: blue;"&gt;string&lt;/span&gt; width, &lt;span style="color: blue;"&gt;string&lt;/span&gt; height, &lt;span style="color: blue;"&gt;object&lt;/span&gt; htmlAttributes)&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Create tag builder&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; builder = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TagBuilder&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"img"&lt;/span&gt;);&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Create valid id&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; builder.GenerateId(player.UserName);&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Add attributes&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; format = &lt;span style="color: #a31515;"&gt;"{0}/{1}"&lt;/span&gt;;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(width))&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&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; format = format + &lt;span style="color: #a31515;"&gt;"&amp;amp;width={2}"&lt;/span&gt;;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(height))&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&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; format = format + &lt;span style="color: #a31515;"&gt;"&amp;amp;height={3}"&lt;/span&gt;;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; builder.MergeAttribute(&lt;span style="color: #a31515;"&gt;"src"&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(format,&lt;span style="color: #a31515;"&gt;"/Image.ashx?src=/Content/Media/Images/Players/"&lt;/span&gt;,player.PlayerDetail.profilepicture.IfEmptyThen(&lt;span style="color: #a31515;"&gt;"noprofilepicture.png"&lt;/span&gt;),width,height));&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; builder.MergeAttribute(&lt;span style="color: #a31515;"&gt;"alt"&lt;/span&gt;, alternateText.IfEmptyThen(player.UserName));&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; builder.MergeAttributes(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;RouteValueDictionary&lt;/span&gt;(htmlAttributes));&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Render tag&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; builder.ToString(&lt;span style="color: #2b91af;"&gt;TagRenderMode&lt;/span&gt;.SelfClosing);&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;}&lt;br /&gt;
&lt;br /&gt;
As always, the url to Codename 'DiscMaster': &lt;a href="http://discmaster.codeplex.com/"&gt;http://discmaster.codeplex.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
&lt;br /&gt;
P.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1936354835482484267?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1936354835482484267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1936354835482484267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1936354835482484267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1936354835482484267'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/codename-discmaster-implementing-custom.html' title='Codename &apos;DiscMaster&apos; - Implementing custom HtmlHelpers'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2167319987200859018</id><published>2009-10-18T13:30:00.002+02:00</published><updated>2009-10-18T13:35:26.186+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Codename ‘DiscMaster’ – Implementing MVC’s AJAX functionality</title><content type='html'>&lt;p&gt;Seeing that i didn’t really finish the site 100% i figured i might as well go ahead and implement some additional features.&lt;/p&gt;&lt;p&gt;One of those features on top of my agenda was to implement some of the built-in Ajax features available in ASP.NET MVC.&lt;/p&gt;&lt;p&gt;So, now sporting a fresh new approach, the weather forecast from &lt;a href="http://www.yr.no/" target="_blank"&gt;yr.no&lt;/a&gt; (read &lt;a href="http://usoniandream.blogspot.com/2009/10/integrating-weather-from-yrno.html" target="_blank"&gt;this post&lt;/a&gt; for history) is now AJAX enabled and more ‘MVC’-ish:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pr5a2BlM4eM/Str8T2sl6zI/AAAAAAAABko/RJIDLZfOyYc/s1600-h/mvcajax-final%5B6%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="mvcajax-final" border="0" alt="mvcajax-final" src="http://lh5.ggpht.com/_pr5a2BlM4eM/Str8URv94kI/AAAAAAAABks/mpFwfMSy5-Q/mvcajax-final_thumb%5B4%5D.png?imgmax=800" width="244" height="190" /&gt;&lt;/a&gt; 
This tutorial covers &lt;strong&gt;8&lt;/strong&gt; steps:&lt;/p&gt;&lt;p&gt;1: creating a forecast model
2: moving the forecast fetch routine to the repository
3: extending the courses model
4: adding a Forecast action to the CoursesController
5: adding a Forecast partial view
6: enabling Ajax
7: updating the course details view to use AJAX calls
8: adding some fancy jQueryUI functionality&lt;/p&gt;&lt;h3&gt;step 1: creating a forecast model&lt;/h3&gt;&lt;p&gt;the model for our &lt;strong&gt;Forecast&lt;/strong&gt; object is simple and easy, only thing to note are the three properties in the end that we’ll later use for navigational purposes.&lt;/p&gt;&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Forecast
{
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; DateFrom { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; DateTo { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; SymbolNumber { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Conditions { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Temperature { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Precipitation { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Wind { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; WindSpeed { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; WindDirection { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ForecastsCount { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ForecastIndex { get; set; }
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; NextForecastIndex { get; set; }
}
&lt;/pre&gt;


&lt;/div&gt;

&lt;h3&gt;step 2: moving the forecast fetch routine to the repository&lt;/h3&gt;&lt;p&gt;If you’ve followed the previous posts you’ll have seen that &lt;a href="http://usoniandream.blogspot.com/2009/10/integrating-weather-from-yrno.html" target="_blank"&gt;earlier&lt;/a&gt; we wrote a fetch routine in the partial view that did pretty much everything.. now we’re going to update it, give it some additional features and make it more available throughout the site. The following methods go in the &lt;em&gt;&lt;strong&gt;repository&lt;/strong&gt; layer&lt;/em&gt;:&lt;/p&gt;
&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Forecast GetForecast(Guid courseid, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; forecastindex)
{
    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; GetForecast(courseid.ToString(), forecastindex);
}
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Forecast GetForecast(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; courseid, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; forecastindex)
{
    List&amp;lt;Forecast&amp;gt; forecasts = GetForecasts(courseid);

    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (forecasts!=&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
    {
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; forecasts[forecastindex];
    }

    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;
}
&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;Forecast&amp;gt; GetForecasts(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; courseid)
{
    var course = GetCourse(courseid);

    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(course.CourseDetail.yr_weather))
    {
        List&amp;lt;Forecast&amp;gt; forecasts = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;

        &lt;span style="color:#008000;"&gt;// determine if the forecast is already stored in the cache..&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (System.Web.HttpContext.Current.Cache[System.Web.HttpContext.Current.Server.UrlPathEncode(course.CourseDetail.yr_weather)] != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:#008000;"&gt;// .. if so, fetch it&lt;/span&gt;
            forecasts = (List&amp;lt;Forecast&amp;gt;)System.Web.HttpContext.Current.Cache[System.Web.HttpContext.Current.Server.UrlPathEncode(course.CourseDetail.yr_weather)];
        }
        &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;
        {
            &lt;span style="color:#008000;"&gt;// .. and if not, try to consume the source using a reader..&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;
            {

                &lt;span style="color:#008000;"&gt;// used to read the forecast xml&lt;/span&gt;
                System.Xml.XmlDocument doc = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XmlDocument();
                &lt;span style="color:#008000;"&gt;// our soon-to-be forecast node collection&lt;/span&gt;
                System.Xml.XmlNodeList nodelist = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;

                System.Xml.XmlTextReader reader = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XmlTextReader(System.Web.HttpContext.Current.Server.UrlPathEncode(course.CourseDetail.yr_weather));
                doc.Load(reader);

                &lt;span style="color:#008000;"&gt;// if all is loaded ok and data is there, simple xpath query to get the forecast data..&lt;/span&gt;
                &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (doc != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
                {
                    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (doc.HasChildNodes)
                    {
                        nodelist = doc.SelectNodes(&lt;span style="color:#006080;"&gt;"/weatherdata/forecast/tabular/time"&lt;/span&gt;);
                    }
                }

                &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (nodelist != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
                {
                    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (nodelist.Count &amp;gt; 0)
                    {
                        &lt;span style="color:#008000;"&gt;// iterate each forecast in the current group (day)&lt;/span&gt;

                        var forecastscol = from node &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; nodelist.OfType&amp;lt;XmlNode&amp;gt;()
                                    select &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Forecast
                                    {
                                        DateFrom = DateTime.Parse(node.Attributes[&lt;span style="color:#006080;"&gt;"from"&lt;/span&gt;].Value).ToString(&lt;span style="color:#006080;"&gt;"yyyy-MM-dd HH:MM"&lt;/span&gt;),
                                        DateTo = DateTime.Parse(node.Attributes[&lt;span style="color:#006080;"&gt;"to"&lt;/span&gt;].Value).ToString(&lt;span style="color:#006080;"&gt;"yyyy-MM-dd HH:MM"&lt;/span&gt;),
                                        Conditions = node[&lt;span style="color:#006080;"&gt;"symbol"&lt;/span&gt;].Attributes[&lt;span style="color:#006080;"&gt;"name"&lt;/span&gt;].Value,
                                        SymbolNumber = node[&lt;span style="color:#006080;"&gt;"symbol"&lt;/span&gt;].Attributes[&lt;span style="color:#006080;"&gt;"number"&lt;/span&gt;].Value.PadLeft(2, &lt;span style="color:#006080;"&gt;'0'&lt;/span&gt;),
                                        Precipitation = node[&lt;span style="color:#006080;"&gt;"precipitation"&lt;/span&gt;].Attributes[&lt;span style="color:#006080;"&gt;"value"&lt;/span&gt;].Value,
                                        Temperature = node[&lt;span style="color:#006080;"&gt;"temperature"&lt;/span&gt;].Attributes[&lt;span style="color:#006080;"&gt;"value"&lt;/span&gt;].Value,
                                        Wind = node[&lt;span style="color:#006080;"&gt;"windSpeed"&lt;/span&gt;].Attributes[&lt;span style="color:#006080;"&gt;"name"&lt;/span&gt;].Value,
                                        WindDirection = node[&lt;span style="color:#006080;"&gt;"windDirection"&lt;/span&gt;].Attributes[&lt;span style="color:#006080;"&gt;"code"&lt;/span&gt;].Value,
                                        WindSpeed = node[&lt;span style="color:#006080;"&gt;"windSpeed"&lt;/span&gt;].Attributes[&lt;span style="color:#006080;"&gt;"mps"&lt;/span&gt;].Value
                                    };
                        forecasts = forecastscol.ToList();

                        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (Forecast forecast &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; forecasts)
                        {
                            forecast.ForecastsCount = forecasts.Count();
                            forecast.ForecastIndex = forecasts.IndexOf(forecast);
                            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (forecast.ForecastIndex == forecast.ForecastsCount-1)
                            {
                                forecast.NextForecastIndex = 0;
                            }
                            &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;
                            {
                                forecast.NextForecastIndex = forecast.ForecastIndex + 1;
                            }
                        }

                        &lt;span style="color:#008000;"&gt;// add entry to cache&lt;/span&gt;
                        System.Web.HttpContext.Current.Cache.Add(System.Web.HttpContext.Current.Server.UrlPathEncode(course.CourseDetail.yr_weather), forecasts, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, DateTime.Now.AddMinutes(60), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);
                    }
                }
            }
            &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception ex)
            {
                &lt;span style="color:#008000;"&gt;// just in case something went wrong we allow this to be blank for now..&lt;/span&gt;
            }
        }
        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (forecasts != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; forecasts;
        }
    }
    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;
}
&lt;/pre&gt;


&lt;/div&gt;

&lt;h3&gt;step 3: extending the Course model&lt;/h3&gt;&lt;p&gt;Now we’ll add a simple method to our &lt;strong&gt;Course&lt;/strong&gt; model that takes care of &lt;em&gt;fetching the Forecasts&lt;/em&gt; no matter where we are calling it from:&lt;/p&gt;&lt;p&gt;&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;Forecast&amp;gt; Forecasts
{
    get
    {
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DiscMasterRepository().GetForecasts(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.courseid.ToString());
    }
}
&lt;/pre&gt;


&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;step 4: adding a Forecast action to the CoursesController&lt;/h3&gt;&lt;p&gt;Now it’s time to add the &lt;strong&gt;action&lt;/strong&gt; method that we’ll use in our AJAX-enabled forecast routine:

&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;
&lt;span style="color:#008000;"&gt;// GET: /Courses/Forecast/5&lt;/span&gt;

&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ActionResult Forecast(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; courseid, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; forecastindex)
{
    var forecast = repository.GetForecast(courseid, forecastindex);
    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (forecast!=&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
    {
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; PartialView(&lt;span style="color:#006080;"&gt;"Forecast"&lt;/span&gt;, forecast);
    }
    &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;
    {
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; PartialView(&lt;span style="color:#006080;"&gt;"ForecastNotFound"&lt;/span&gt;);
    }
}
&lt;/pre&gt;


&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;step 5: adding a Forecast partial view&lt;/h3&gt;&lt;p&gt;Now we’ll add a new &lt;strong&gt;Forecast.ascx&lt;/strong&gt; &lt;em&gt;partial view&lt;/em&gt;. Compared to the previous version (weather.ascx) this one is more clean and strongly typed to our Forecast model, thus enabling a much more controlled design:

&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&amp;lt;%@ Control Language=&lt;span style="color:#006080;"&gt;"C#"&lt;/span&gt; Inherits=&lt;span style="color:#006080;"&gt;"System.Web.Mvc.ViewUserControl&amp;lt;DiscMaster.Web.Models.Forecast&amp;gt;"&lt;/span&gt; %&amp;gt;
&amp;lt;div id=&lt;span style="color:#006080;"&gt;"forecast"&lt;/span&gt;&amp;gt;
     &amp;lt;p&amp;gt;
        &amp;lt;strong&amp;gt;&amp;lt;%= DateTime.Parse(Model.DateFrom).ToString(&lt;span style="color:#006080;"&gt;"dddd, dd MMM hh:mm"&lt;/span&gt;) %&amp;gt; - &amp;lt;%= DateTime.Parse(Model.DateTo).ToString(&lt;span style="color:#006080;"&gt;"dddd, dd MMM hh:mm"&lt;/span&gt;)%&amp;gt;&amp;lt;/strong&amp;gt;
        &amp;lt;br /&amp;gt;
        &amp;lt;img alt=&lt;span style="color:#006080;"&gt;'&amp;lt;%= Model.Conditions %&amp;gt;'&lt;/span&gt; style=&lt;span style="color:#006080;"&gt;"float: left;"&lt;/span&gt; src=&lt;span style="color:#006080;"&gt;'&amp;lt;%= String.Format("/Image.ashx?src=/Content/Media/Icons/Weather/{0}.png&amp;amp;width=64", Model.SymbolNumber) %&amp;gt;'&lt;/span&gt; /&amp;gt;
        conditions: &amp;lt;%= Model.Conditions%&amp;gt;
        &amp;lt;br /&amp;gt;
        temperature: &amp;lt;%= Model.Temperature%&amp;gt;&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt;C
        &amp;lt;br /&amp;gt;
        precipitation: &amp;lt;%= Model.Precipitation%&amp;gt;
        &amp;lt;br /&amp;gt;
        wind: &amp;lt;%= Model.Wind%&amp;gt; - &amp;lt;%= Model.WindSpeed%&amp;gt; mps &amp;lt;%= Model.WindDirection%&amp;gt;
       &amp;lt;%= Html.Hidden(&lt;span style="color:#006080;"&gt;"newforecastindex"&lt;/span&gt;, Model.NextForecastIndex) %&amp;gt;
    &amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;
    &amp;lt;em&amp;gt;viewing forecast &amp;lt;%= Model.ForecastIndex+1 %&amp;gt; of &amp;lt;%= Model.ForecastsCount %&amp;gt;&amp;lt;/em&amp;gt;
    &amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;=&lt;span style="color:#006080;"&gt;"forecastfooter"&lt;/span&gt;&amp;gt;
    &amp;lt;small&amp;gt;
        Weather forecast from &amp;lt;a href=&lt;span style="color:#006080;"&gt;"http://www.yr.no"&lt;/span&gt; target=&lt;span style="color:#006080;"&gt;"_blank"&lt;/span&gt;&amp;gt;yr.no&amp;lt;/a&amp;gt; delivered by&amp;lt;br /&amp;gt;the Norwegian Meteorological Institute and the NRK
    &amp;lt;/small&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;


&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;step 6: enabling AJAX&lt;/h3&gt;&lt;p&gt;Enabling AJAX in the project is really easy – all we have to do is to add the following two lines in the &lt;strong&gt;site.Master&lt;/strong&gt; file:

&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&amp;lt;script src=&lt;span style="color:#006080;"&gt;"/Scripts/MicrosoftAjax.js"&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&lt;span style="color:#006080;"&gt;"/Scripts/MicrosoftMvcAjax.js"&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;


&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;step 7: updating the course details view to use AJAX calls&lt;/h3&gt;&lt;p&gt;Making an AJAX call from our ASP.NET MVC view (the built-in way) we’ll be using &lt;strong&gt;Ajax.BeginForm&lt;/strong&gt;:

&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&amp;lt;% &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (Ajax.BeginForm(&lt;span style="color:#006080;"&gt;"Forecast"&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; AjaxOptions() {
                   UpdateTargetId = &lt;span style="color:#006080;"&gt;"forecastContainer"&lt;/span&gt;,
                   LoadingElementId = &lt;span style="color:#006080;"&gt;"forecastLoading"&lt;/span&gt;,
                   OnSuccess=&lt;span style="color:#006080;"&gt;"forecastLoaded"&lt;/span&gt;,
                   InsertionMode = InsertionMode.Replace
               })){ %&amp;gt;&lt;/pre&gt;


&lt;/div&gt;
Below is the entire code part that handles the forecast rendering. The code for our updated Details view now holds the AJAX wrapped request, and a function we’re calling in the end to update forecast index:

&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&amp;lt;script type=&lt;span style="color:#006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;
    function forecastLoaded() {
        $(&lt;span style="color:#006080;"&gt;"#forecastindex"&lt;/span&gt;).get(0).&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; = $(&lt;span style="color:#006080;"&gt;"#newforecastindex"&lt;/span&gt;).get(0).&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;
    }
&amp;lt;/script&amp;gt;
    &amp;lt;h2&amp;gt;&amp;lt;%= Model.CourseDetail.city %&amp;gt;, &amp;lt;%= Model.CourseDetail.country %&amp;gt;&amp;lt;/h2&amp;gt;
    &amp;lt;% &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(Model.CourseDetail.yr_weather)) {
           %&amp;gt;
        &amp;lt;% &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (Ajax.BeginForm(&lt;span style="color:#006080;"&gt;"Forecast"&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; AjaxOptions() {
               UpdateTargetId = &lt;span style="color:#006080;"&gt;"forecastContainer"&lt;/span&gt;,
               LoadingElementId = &lt;span style="color:#006080;"&gt;"forecastLoading"&lt;/span&gt;,
               OnSuccess=&lt;span style="color:#006080;"&gt;"forecastLoaded"&lt;/span&gt;,
               InsertionMode = InsertionMode.Replace
           })){ %&amp;gt;
           &amp;lt;%= Html.Hidden(&lt;span style="color:#006080;"&gt;"courseid"&lt;/span&gt;, Model.courseid) %&amp;gt;
           &amp;lt;%= Html.Hidden(&lt;span style="color:#006080;"&gt;"forecastindex"&lt;/span&gt;, 1) %&amp;gt;
                &amp;lt;h3&amp;gt;Weather forecast&amp;lt;/h3&amp;gt;&amp;lt;input type=&lt;span style="color:#006080;"&gt;"image"&lt;/span&gt; title=&lt;span style="color:#006080;"&gt;"next forecast"&lt;/span&gt; src=&lt;span style="color:#006080;"&gt;"/Image.ashx?src=/Content/Media/Icons/24x24/next.png&amp;amp;width=32"&lt;/span&gt; /&amp;gt;
        &amp;lt;% } %&amp;gt;
        &amp;lt;div id=&lt;span style="color:#006080;"&gt;"forecastContainer"&lt;/span&gt;&amp;gt;
            &amp;lt;% Html.RenderPartial(&lt;span style="color:#006080;"&gt;"~/Areas/Courses/Views/Courses/Forecast.ascx"&lt;/span&gt;, Model.Forecasts[0]); %&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div id=&lt;span style="color:#006080;"&gt;"forecastLoading"&lt;/span&gt; style=&lt;span style="color:#006080;"&gt;"display: none;"&lt;/span&gt;&amp;gt;&amp;lt;img src=&lt;span style="color:#006080;"&gt;"/Content/Media/Icons/load.gif"&lt;/span&gt; alt=&lt;span style="color:#006080;"&gt;"loading.."&lt;/span&gt; /&amp;gt;&amp;lt;/div&amp;gt;
       &amp;lt;%} %&amp;gt;
&lt;/pre&gt;


&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;step 8: adding some fancy jQueryUI functionality&lt;/h3&gt;&lt;p&gt;At &lt;a href="http://www.jqueryui.com/" target="_blank"&gt;jQueryUI&lt;/a&gt; you can generate a custom file with the contents you wish to implement, i went with some of their effects since i think it’s a great library and the implementation is superb.&lt;/p&gt;&lt;p&gt;In the &lt;strong&gt;site.Master&lt;/strong&gt; we’ll now need to add another line to the script includes:

&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&amp;lt;script src=&lt;span style="color:#006080;"&gt;"/Scripts/jquery-ui-1.7.2.custom.min.js"&lt;/span&gt; type=&lt;span style="color:#006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;


&lt;/div&gt;
Now we’ll update the Details view with some animations – i chose the &lt;strong&gt;.hide&lt;/strong&gt; and &lt;strong&gt;.show&lt;/strong&gt; &lt;em&gt;effects&lt;/em&gt; in a &lt;em&gt;horizontal&lt;/em&gt; mode. The code below is the complete code for the forecast part of our course details view:

&lt;div style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; DIRECTION: ltr; MAX-HEIGHT: 200px; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px; BACKGROUND-: 20px 0px 10pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;" id="codeSnippetWrapper"   &gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:'Courier New', courier, monospace;font-size:8pt;color:black;" id="codeSnippet"   &gt;&amp;lt;script type=&lt;span style="color:#006080;"&gt;"text/javascript"&lt;/span&gt;&amp;gt;
    function forecastOnLoad() {
        $(&lt;span style="color:#006080;"&gt;"div#forecastContainer"&lt;/span&gt;).hide(&lt;span style="color:#006080;"&gt;"slide"&lt;/span&gt;, { direction: &lt;span style="color:#006080;"&gt;"horizontal"&lt;/span&gt; }, 1000);
    }
    function forecastLoaded() {
        $(&lt;span style="color:#006080;"&gt;"#forecastindex"&lt;/span&gt;).get(0).&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; = $(&lt;span style="color:#006080;"&gt;"#newforecastindex"&lt;/span&gt;).get(0).&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;
        $(&lt;span style="color:#006080;"&gt;"div#forecastContainer"&lt;/span&gt;).show(&lt;span style="color:#006080;"&gt;"slide"&lt;/span&gt;, { direction: &lt;span style="color:#006080;"&gt;"horizontal"&lt;/span&gt; }, 1000);
    }
&amp;lt;/script&amp;gt;
    &amp;lt;h2&amp;gt;&amp;lt;%= Model.CourseDetail.city %&amp;gt;, &amp;lt;%= Model.CourseDetail.country %&amp;gt;&amp;lt;/h2&amp;gt;
    &amp;lt;% &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(Model.CourseDetail.yr_weather)) {
           %&amp;gt;
        &amp;lt;% &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (Ajax.BeginForm(&lt;span style="color:#006080;"&gt;"Forecast"&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; AjaxOptions() {
               UpdateTargetId = &lt;span style="color:#006080;"&gt;"forecastContainer"&lt;/span&gt;,
               LoadingElementId = &lt;span style="color:#006080;"&gt;"forecastLoading"&lt;/span&gt;,
               OnBegin=&lt;span style="color:#006080;"&gt;"forecastOnLoad"&lt;/span&gt;,
               OnSuccess=&lt;span style="color:#006080;"&gt;"forecastLoaded"&lt;/span&gt;,
               InsertionMode = InsertionMode.Replace
           })){ %&amp;gt;
           &amp;lt;%= Html.Hidden(&lt;span style="color:#006080;"&gt;"courseid"&lt;/span&gt;, Model.courseid) %&amp;gt;
           &amp;lt;%= Html.Hidden(&lt;span style="color:#006080;"&gt;"forecastindex"&lt;/span&gt;, 1) %&amp;gt;
                &amp;lt;h3&amp;gt;Weather forecast&amp;lt;/h3&amp;gt;&amp;lt;input type=&lt;span style="color:#006080;"&gt;"image"&lt;/span&gt; title=&lt;span style="color:#006080;"&gt;"next forecast"&lt;/span&gt; src=&lt;span style="color:#006080;"&gt;"/Image.ashx?src=/Content/Media/Icons/24x24/next.png&amp;amp;width=32"&lt;/span&gt; /&amp;gt;
        &amp;lt;% } %&amp;gt;
        &amp;lt;div id=&lt;span style="color:#006080;"&gt;"forecastContainer"&lt;/span&gt;&amp;gt;
            &amp;lt;% Html.RenderPartial(&lt;span style="color:#006080;"&gt;"~/Areas/Courses/Views/Courses/Forecast.ascx"&lt;/span&gt;, Model.Forecasts[0]); %&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div id=&lt;span style="color:#006080;"&gt;"forecastLoading"&lt;/span&gt; style=&lt;span style="color:#006080;"&gt;"display: none;"&lt;/span&gt;&amp;gt;&amp;lt;img src=&lt;span style="color:#006080;"&gt;"/Content/Media/Icons/load.gif"&lt;/span&gt; alt=&lt;span style="color:#006080;"&gt;"loading.."&lt;/span&gt; /&amp;gt;&amp;lt;/div&amp;gt;
       &amp;lt;%} %&amp;gt;
&lt;/pre&gt;


&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;and now the finished update will be Ajax enabled, fetching one forecast at a time using the built-in AJAX functionality available in ASP.NET MVC with some pretty &lt;a href="http://www.jqueryui.com/" target="_blank"&gt;jQueryUI&lt;/a&gt; effects:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pr5a2BlM4eM/Str8U07Wk6I/AAAAAAAABkw/d18Htws1zAA/s1600-h/mvcajax-final2%5B4%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="mvcajax-final2" border="0" alt="mvcajax-final2" src="http://lh4.ggpht.com/_pr5a2BlM4eM/Str8VT2ogeI/AAAAAAAABk0/Gixx8ZFX4DQ/mvcajax-final2_thumb%5B2%5D.png?imgmax=800" width="244" height="181" /&gt;&lt;/a&gt; 
As always, the source code for the entire project can be downloaded at &lt;a href="http://discmaster.codeplex.com/"&gt;http://discmaster.codeplex.com&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;Take care,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2167319987200859018?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2167319987200859018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2167319987200859018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2167319987200859018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2167319987200859018'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/codename-discmaster-implementing-mvcs.html' title='Codename ‘DiscMaster’ – Implementing MVC’s AJAX functionality'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pr5a2BlM4eM/Str8URv94kI/AAAAAAAABks/mpFwfMSy5-Q/s72-c/mvcajax-final_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-5877391442298882688</id><published>2009-10-13T16:07:00.004+02:00</published><updated>2009-10-14T09:43:58.482+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Codename 'DiscMaster' - now on CodePlex</title><content type='html'>I've published the project on CodePlex:

&lt;a href="http://discmaster.codeplex.com/"&gt;http://discmaster.codeplex.com/&lt;/a&gt;

As of right now it's not in a stable, nor up to date, release. First scheduled publish of the current sourcecode is set to &lt;strong&gt;Thursday, 15th of October 2009&lt;/strong&gt;.

If you want to grab it it's there in it's current (somewhat fragile) state, but i suggest you wait until thursday before trying to run it locally since many changes will be uploaded on that day :)

Regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-5877391442298882688?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/5877391442298882688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=5877391442298882688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5877391442298882688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5877391442298882688'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/codename-discmaster-now-on-codeplex.html' title='Codename &apos;DiscMaster&apos; - now on CodePlex'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-170645414082449128</id><published>2009-10-12T20:50:00.001+02:00</published><updated>2009-10-12T20:50:27.264+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><title type='text'>Catch 22: The Branch that broke while you were standing on it</title><content type='html'>&lt;p&gt;Using Team Foundation Server 2008 (TFS) is fantastic in many ways - it’s reliable, flexible and great for team development. It comes with countless of features right out of the box, and there’s even &lt;a href="http://msdn.microsoft.com/en-us/teamsystem/bb980963.aspx" target="_blank"&gt;power tools&lt;/a&gt; for those that want more.&lt;/p&gt;  &lt;p&gt;One of the (i hope) most widely used features of TFS is Branch &amp;amp; Merge (if you’re not familiar with branching strategies, i suggest you read &lt;a href="http://www.codeplex.com/TFSBranchingGuideII" target="_blank"&gt;this&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;We branch.. constantly.   &lt;br /&gt;We merge.. constantly.&lt;/p&gt;  &lt;p&gt;One time it got a little too hectic and one very interesting scenario occurred: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;What if you want to escape/skip parts of the merge in a FI (forward integration) but still complete the merge?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you’ve ever faced a situation like that i’m sure you’ve noticed that you can’t simply &lt;em&gt;delete a changeset&lt;/em&gt;.. (yes, i know, if you use power tools there’s the rollback, but that’s actually a “destroy” command, not a rollback from what i’ve heard).&lt;/p&gt;  &lt;p&gt;Now, to complicate things even more, imagine that scenario taking place from a “baseline” branch..&lt;/p&gt;  &lt;p&gt;Picture this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pr5a2BlM4eM/StN6aI3U6QI/AAAAAAAABkQ/PO1JQgbSlhc/s1600-h/first%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="first" border="0" alt="first" src="http://lh5.ggpht.com/_pr5a2BlM4eM/StN6atkv-WI/AAAAAAAABkU/tEQ-vwJtCx0/first_thumb%5B1%5D.png?imgmax=800" width="470" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; – branch from a confused main-branch/baseline where the new dev-base is your hope of restoring the functionality and flexibility&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;2&lt;/strong&gt; – branch a dev-track from your dev-base for a project that –might- become part of your dev-base later on (normal project branching)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;3&lt;/strong&gt; – start development on dev-branch&lt;/li&gt;    &lt;li&gt;&lt;font color="#c0c0c0"&gt;&lt;strong&gt;4&lt;/strong&gt; – oh yes, there’s a “4” even though it’s not in the picture :)&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;5&lt;/strong&gt; – normal FI planned&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;6&lt;/strong&gt; – normal RI planned with new project and code incorporated into dev-base&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;7&lt;/strong&gt; – RI the new and fixed “baseline”&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;so far so good, nothing –to- major there that will cause more problems than we can handle.. well, that is if you’re not counting the &lt;em&gt;&lt;u&gt;mysterious hidden/forgotten step 4&lt;/u&gt;&lt;/em&gt; that we accidentally introduced..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pr5a2BlM4eM/StN6a1hYzkI/AAAAAAAABkY/oKgAlSOjZv8/s1600-h/halfway%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="halfway" border="0" alt="halfway" src="http://lh3.ggpht.com/_pr5a2BlM4eM/StN6bp1RrYI/AAAAAAAABkc/ZuQ8FRmXhxA/halfway_thumb%5B1%5D.png?imgmax=800" width="470" height="140" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; – same as before&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;2&lt;/strong&gt; – same as before&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;3&lt;/strong&gt; – same as before&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;4&lt;/strong&gt; – we notice that the project that was supposed to exist only in the branched dev-track is in dev base too, and so &lt;u&gt;we delete it from the dev-base and check in&lt;/u&gt;, thinking that it’s the way it should be and our dev-base is intact.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;5&lt;/strong&gt; – time for a normal FI.. &lt;strong&gt;&lt;font color="#ff0000"&gt;but wait!&lt;/font&gt;&lt;/strong&gt; we’ve actually &lt;strong&gt;deleted&lt;/strong&gt; &lt;strong&gt;the project&lt;/strong&gt; in our dev-base, what happens when we try to complete a FI? the dreadful answer to that question is: &lt;strong&gt;it gets deleted..! &lt;/strong&gt;(and that would make the people working on the project in the dev-track very sad.. and most likely very upset too) at this point we realize this step is not possible..&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;6&lt;/strong&gt; – not possible&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;7&lt;/strong&gt; – not possible&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It’s quite the annoying situation we’ve ended up in, and it’s quite the mess trying to sort it out.&lt;/p&gt;  &lt;p&gt;So, &lt;strong&gt;&lt;u&gt;let’s focus on step 5&lt;/u&gt;&lt;/strong&gt;: the FI.&lt;/p&gt;  &lt;p&gt;instead of running it automatically we’ll &lt;u&gt;choose the other merge option that allows us to merge specific changesets&lt;/u&gt;.&lt;/p&gt;  &lt;p&gt;by merging the specific changesets up to, &lt;u&gt;but not including&lt;/u&gt;, the changeset(s) containing the delete(s) we know we’re doing a safe merge and that so far all is well.. however, &lt;u&gt;the changeset containing the delete(s) still exist&lt;/u&gt; and each time we try to merge it’s still there in the list (and that can create chaos at any given time in the future).&lt;/p&gt;  &lt;p&gt;now, applying the same routine as above and merging specific changesets we make sure that any changesets after, &lt;u&gt;but not including&lt;/u&gt;, the delete(s) are merged too, thus giving us the merge we set out to complete.&lt;/p&gt;  &lt;p&gt;we could stop there.. that would be what we were after.. but there’s still that &lt;strong&gt;&lt;em&gt;annoying&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;sting-in-the-back-of-your-head&lt;/em&gt; changeset containing the actual delete constantly riding in the list of changes waiting to be merged.&lt;/p&gt;  &lt;p&gt;here it comes, the beauty of it all is quite simple:&lt;/p&gt;  &lt;p&gt;we use the command-line &lt;strong&gt;&lt;u&gt;&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/03/09/how-to-use-tf-merge-discard.aspx" target="_blank"&gt;tf merge /discard&lt;/a&gt;&lt;/u&gt;&lt;/strong&gt; option to sort it out.&lt;/p&gt;  &lt;p&gt;without diving to much into tfs details the &lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/03/09/how-to-use-tf-merge-discard.aspx" target="_blank"&gt;/discard&lt;/a&gt; flag tells the merge to keep our local version and not use the server changes (AcceptYours) while still respecting the merge and fully registering the merge as a successful merge in the history – thus removing the dreaded “delete changeset” we never wish to see again..&lt;/p&gt;  &lt;p&gt;now, with those changes in place our workflow has returned to a somewhat normal state and we can move thru it with ease:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pr5a2BlM4eM/StN6b6EIToI/AAAAAAAABkg/mwI-M4ixQD8/s1600-h/final%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="final" border="0" alt="final" src="http://lh5.ggpht.com/_pr5a2BlM4eM/StN6cTlQ_CI/AAAAAAAABkk/oYcJfP2y_6k/final_thumb%5B1%5D.png?imgmax=800" width="470" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;further reading regarding various parts of this article:&lt;/p&gt;  &lt;p&gt;How to: Use tf merge /discard?   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/03/09/how-to-use-tf-merge-discard.aspx" target="_blank"&gt;http://blogs.msdn.com/mohamedg/archive/2009/03/09/how-to-use-tf-merge-discard.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;How to: Port a specific changeset?    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/mohamedg/archive/2009/02/28/how-to-port-a-specific-changeset.aspx" target="_blank"&gt;http://blogs.msdn.com/mohamedg/archive/2009/02/28/how-to-port-a-specific-changeset.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;UI Bug: resolving multiple merge conflicts   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/richardb/archive/2007/06/04/ui-bug-resolving-multiple-merge-conflicts.aspx" target="_blank"&gt;http://blogs.msdn.com/richardb/archive/2007/06/04/ui-bug-resolving-multiple-merge-conflicts.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Regards,&lt;/p&gt;  &lt;p&gt;P.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-170645414082449128?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/170645414082449128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=170645414082449128' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/170645414082449128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/170645414082449128'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/catch-22-branch-that-broke-while-you.html' title='Catch 22: The Branch that broke while you were standing on it'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pr5a2BlM4eM/StN6atkv-WI/AAAAAAAABkU/tEQ-vwJtCx0/s72-c/first_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1413598665339903184</id><published>2009-10-07T09:37:00.005+02:00</published><updated>2009-10-07T09:46:36.919+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>pex (Program EXplorer) - automated white box testing for .NET</title><content type='html'>just stumbled upon this and thought i'd share it with you -

on DevLabs two guys have created what they call &lt;a href="http://msdn.microsoft.com/en-us/devlabs/cc950525.aspx"&gt;PEX&lt;/a&gt; - Program EXplorer - which is a Visual Studio tool that could make testing your (public) code a lot more friendly/helpful as well as intuitive, useful and fast.

it's very interesting and is well worth the time &lt;a href="http://msdn.microsoft.com/en-us/devlabs/cc950525.aspx"&gt;going there&lt;/a&gt; and reading about it as well as watching their introduction video.

way cool if you ask me!

direct link: &lt;a href="http://msdn.microsoft.com/en-us/devlabs/cc950525.aspx"&gt;here&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1413598665339903184?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1413598665339903184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1413598665339903184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1413598665339903184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1413598665339903184'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/pex-program-explorer-automated-white.html' title='pex (Program EXplorer) - automated white box testing for .NET'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4778471306118618256</id><published>2009-10-06T22:47:00.004+02:00</published><updated>2009-10-07T15:14:02.437+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Codename ‘DiscMaster’ – MVC 2 migration and more maps!</title><content type='html'>&lt;p&gt;After following the upgrade instructions in the release notes (see &lt;a href="http://usoniandream.blogspot.com/2009/10/upgrading-aspnet-mvc-to-aspnet-mvc-2.html"&gt;previous post&lt;/a&gt;) i’ve now updated the sourcecode so it’s now based on MVC 2 Preview 2.&lt;/p&gt;&lt;p&gt;First thing to try was the new support for Areas:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pr5a2BlM4eM/Ssus3lBvGPI/AAAAAAAABkA/wU0P9sOcpXU/s1600-h/areas%5B2%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="areas" border="0" alt="areas" src="http://lh6.ggpht.com/_pr5a2BlM4eM/Ssus4OhmcfI/AAAAAAAABkE/BKSQd6IUvog/areas_thumb.png?imgmax=800" width="121" height="244" /&gt;&lt;/a&gt; You’ll find pretty much all the information you need on MSDN and blog articles when it comes to defining your areas and creating the initial code.&lt;/p&gt;&lt;p&gt;I’m convinced the areas addition is one of the key features when it comes to using ASP.NET MVC in the enterprise scope. Scoping your application thru the use of Areas is great when you consider large-scale projects where x number of developers could be working on x number of things, it not only helps the developer but also even branching strategies could benefit from this approach.&lt;/p&gt;&lt;p&gt;After that i had some time to wire up another map, this time it’s a map showing all the registered courses:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pr5a2BlM4eM/Ssus4u8bULI/AAAAAAAABkI/-8DQkP8txX8/s1600-h/courses%5B4%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="courses" border="0" alt="courses" src="http://lh6.ggpht.com/_pr5a2BlM4eM/Ssus4xRjedI/AAAAAAAABkM/Vp4YRlLnFZs/courses_thumb%5B2%5D.png?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;i've decided to release the &lt;u&gt;entire&lt;/u&gt; code on &lt;a href="http://www.codeplex.com/"&gt;codeplex&lt;/a&gt; once i'm done at the project space i've recently set up (&lt;a href="http://discmaster.codeplex.com/"&gt;discmaster.codeplex.com&lt;/a&gt;), figured that's the only decent thing to do to keep it alive since i'm right now without a hosting environment so hopefully someone will pick it up and (ab)use it when it's released :)&lt;/p&gt;&lt;p&gt;until the next post, take care..&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4778471306118618256?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4778471306118618256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4778471306118618256' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4778471306118618256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4778471306118618256'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/codename-discmaster-mvc-2-migration-and.html' title='Codename ‘DiscMaster’ – MVC 2 migration and more maps!'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pr5a2BlM4eM/Ssus4OhmcfI/AAAAAAAABkE/BKSQd6IUvog/s72-c/areas_thumb.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3104324806623805872</id><published>2009-10-06T20:09:00.003+02:00</published><updated>2009-10-06T20:14:49.496+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>upgrading ASP.NET MVC to ASP.NET MVC 2 Preview 2</title><content type='html'>So, in case you missed it, the upgrade instructions as to how you go about moving from ASP.NET MVC to ASP.NET MVC 2 Preview 2 are available on &lt;strong&gt;page 2&lt;/strong&gt; in the &lt;strong&gt;release notes&lt;/strong&gt;.

i think they've done a great job and any reference as to how you go about is better viewed in the context of the actual document instead of any online copy.. so, once again: &lt;strong&gt;page 2 in the release notes for ASP.NET MVC 2 Preview 2&lt;/strong&gt; is where you should look.

direct link to the download page (you'll find the release notes there to): &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=d3f06bb9-5f5f-4f46-91e9-813b3fce2db1"&gt;here&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3104324806623805872?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3104324806623805872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3104324806623805872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3104324806623805872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3104324806623805872'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/upgrading-aspnet-mvc-to-aspnet-mvc-2.html' title='upgrading ASP.NET MVC to ASP.NET MVC 2 Preview 2'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2177545238207093281</id><published>2009-10-06T14:01:00.003+02:00</published><updated>2009-10-06T14:21:11.771+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morningstar'/><category scheme='http://www.blogger.com/atom/ns#' term='releases'/><title type='text'>morningstar sweden sports new look</title><content type='html'>i'm glad to see that one of my former employers -&lt;a href="http://www.morningstar.se/"&gt;morningstar sweden&lt;/a&gt; - has updated their design to sport a more fresh and appealing look n' feel:

&lt;a href="http://1.bp.blogspot.com/_pr5a2BlM4eM/Sss0350gWVI/AAAAAAAABjo/VUzVrBt-We4/s1600-h/start.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 326px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389459514097424722" border="0" alt="" src="http://1.bp.blogspot.com/_pr5a2BlM4eM/Sss0350gWVI/AAAAAAAABjo/VUzVrBt-We4/s400/start.JPG" /&gt;&lt;/a&gt;
by the looks of it they've incorporated quite a lot of jQuery/AJAX, enriched graphing components and also enhanced more on the SEO/meta side as well.

&lt;a href="http://2.bp.blogspot.com/_pr5a2BlM4eM/Sss04vnCjfI/AAAAAAAABj4/InDc0Gf35eE/s1600-h/intgraph.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 289px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389459528536460786" border="0" alt="" src="http://2.bp.blogspot.com/_pr5a2BlM4eM/Sss04vnCjfI/AAAAAAAABj4/InDc0Gf35eE/s400/intgraph.JPG" /&gt;&lt;/a&gt;

&lt;a href="http://2.bp.blogspot.com/_pr5a2BlM4eM/Sss04XZvoeI/AAAAAAAABjw/fjeH7Yl_K7I/s1600-h/minifact.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 293px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389459522038243810" border="0" alt="" src="http://2.bp.blogspot.com/_pr5a2BlM4eM/Sss04XZvoeI/AAAAAAAABjw/fjeH7Yl_K7I/s400/minifact.JPG" /&gt;&lt;/a&gt;
congratulations on a nice remake, i'm sure it's been eagerly awaited by many!

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2177545238207093281?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2177545238207093281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2177545238207093281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2177545238207093281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2177545238207093281'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/morningstar-sweden-sports-new-look.html' title='morningstar sweden sports new look'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pr5a2BlM4eM/Sss0350gWVI/AAAAAAAABjo/VUzVrBt-We4/s72-c/start.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-6367545062312867358</id><published>2009-10-05T00:53:00.005+02:00</published><updated>2009-10-20T23:18:32.940+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Integrating weather from yr.no</title><content type='html'>&lt;p&gt;&lt;span style="color:#cc0000;"&gt;UPDATED&lt;/span&gt;: there's a new implementation post &lt;a href="http://usoniandream.blogspot.com/2009/10/codename-discmaster-implementing-mvcs.html"&gt;here&lt;/a&gt; that uses MVC's built-in AJAX functionality.&lt;/p&gt;&lt;p&gt;a lot of places sell data, and often quite pricy too.. there are however a few that actually gives it away, i like that.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.yr.no/" target="_blank"&gt;yr.no&lt;/a&gt; (the Norwegian Meteorological Institute and the NRK) exposes their weather data in xml format, both in norwegian as well as in english. I figured it was about time i tried it out since i really wanted to have some weather data on the discgolf site.&lt;/p&gt;&lt;p&gt;first, &lt;u&gt;the basics&lt;/u&gt;:&lt;/p&gt;&lt;p&gt;the code i’m demonstrating is written in &lt;a href="http://www.asp.net/mvc" target="_blank"&gt;ASP.NET MVC&lt;/a&gt;, but it’s not anywhere near MVC-specific so you can easily take it all and run in your own solution. &lt;/p&gt;&lt;p&gt;for this example we’re gonna be using the following url:&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.yr.no/place/Sweden/Stockholm/J%c3%a4rva/forecast.xml" href="http://www.yr.no/place/Sweden/Stockholm/J%c3%a4rva/forecast.xml"&gt;http://www.yr.no/place/Sweden/Stockholm/J%c3%a4rva/forecast.xml&lt;/a&gt;&lt;/p&gt;&lt;p&gt;at &lt;a href="http://www.yr.no/" target="_blank"&gt;yr.no&lt;/a&gt; it’s pretty easy to grab the url to the city of your choice (as long as they hold data for that city): just find it on their site and add &lt;strong&gt;forecast.xml&lt;/strong&gt; in the end of the url. &lt;/p&gt;&lt;p&gt;so, after creating a partial view and setting some initial code up we get to consume the data from &lt;a href="http://www.yr.no/" target="_blank"&gt;yr.no&lt;/a&gt; and output it to our site:&lt;/p&gt;&lt;h3&gt;&lt;u&gt;code:&lt;/u&gt;&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl&amp;lt;DiscMaster.Web.Models.Course&amp;gt;" %&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%@ Import Namespace="System.Xml" %&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;
    System.Xml.XmlDocument doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (Cache[Server.UrlPathEncode(&lt;strong&gt;&lt;em&gt;&lt;span style="color:#009900;"&gt;Model.CourseDetail.yr_weather&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;)]!=&lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        doc = (XmlDocument)Cache[Server.UrlPathEncode(&lt;strong&gt;&lt;em&gt;&lt;span style="color:#009900;"&gt;Model.CourseDetail.yr_weather&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;)];
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        &lt;span class="kwrd"&gt;try&lt;/span&gt;
        {
            System.Xml.XmlTextReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(Server.UrlPathEncode(&lt;strong&gt;&lt;em&gt;&lt;span style="color:#009900;"&gt;Model.CourseDetail.yr_weather&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;));
            doc.Load(reader);
            Cache.Add(Server.UrlPathEncode(Model.CourseDetail.yr_weather), doc, &lt;span class="kwrd"&gt;null&lt;/span&gt;, DateTime.Now.AddMinutes(60), Cache.NoSlidingExpiration, CacheItemPriority.Default, &lt;span class="kwrd"&gt;null&lt;/span&gt;);
        }
        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
        {
        
            &lt;span class="kwrd"&gt;throw&lt;/span&gt;;
        }
    }

    System.Xml.XmlNodeList nodelist = doc.SelectNodes(&lt;span class="str"&gt;"/weatherdata/forecast/tabular/time"&lt;/span&gt;);
    &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 4; i++)
    {
     &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;strong&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= DateTime.Parse(nodelist[i].Attributes[&lt;span class="str"&gt;"from"&lt;/span&gt;].Value).ToString(&lt;span class="str"&gt;"yyyy-mm-dd HH:MM"&lt;/span&gt;) &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; - &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= DateTime.Parse(nodelist[i].Attributes[&lt;span class="str"&gt;"to"&lt;/span&gt;].Value).ToString(&lt;span class="str"&gt;"HH:MM"&lt;/span&gt;)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;strong&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;='&amp;lt;%= String.Format("/Image.ashx?src=/Content/Media/Icons/Weather/{0}.png&amp;amp;width=32", nodelist[i]["symbol"].Attributes["number"].Value.PadLeft(2,'&lt;/span&gt;&lt;span class="attr"&gt;0&lt;/span&gt;&lt;span class="kwrd"&gt;')) %&amp;gt;'&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        conditions: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= nodelist[i][&lt;span class="str"&gt;"symbol"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"name"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        temperature: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= nodelist[i][&lt;span class="str"&gt;"temperature"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"value"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;sup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;sup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;C
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        precipitation: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= nodelist[i][&lt;span class="str"&gt;"precipitation"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"value"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        wind: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= nodelist[i][&lt;span class="str"&gt;"windSpeed"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"name"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; - &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= nodelist[i][&lt;span class="str"&gt;"windSpeed"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"mps"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; mps &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= nodelist[i][&lt;span class="str"&gt;"windDirection"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"code"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;    }
     &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;small&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    Weather forecast from &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.yr.no"&lt;/span&gt; &lt;span class="attr"&gt;target&lt;/span&gt;&lt;span class="kwrd"&gt;="_blank"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;yr.no&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; delivered by the Norwegian Meteorological Institute and the NRK
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;small&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;h3&gt;&lt;u&gt;view:&lt;/u&gt;
&lt;/h3&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pr5a2BlM4eM/SskndVPP8jI/AAAAAAAABjY/WTj7Rerkhf4/s1600-h/first%5B4%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: block; FLOAT: none; MARGIN-LEFT: auto; BORDER-TOP: 0px; MARGIN-RIGHT: auto; BORDER-RIGHT: 0px" title="first" border="0" alt="first" src="http://lh6.ggpht.com/_pr5a2BlM4eM/SsknduX6K5I/AAAAAAAABjc/xV5zbeG3EAQ/first_thumb%5B2%5D.png?imgmax=800" width="244" height="177" /&gt;&lt;/a&gt;
nothing major really in that code.. the &lt;strong&gt;&lt;em&gt;&lt;span style="color:#009900;"&gt;green-highlighted&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; text in the example code is where the actual url to the xml data is entered. &lt;/p&gt;&lt;p&gt;a few minutes more and the code is more optimized to handle errors, linq and in the end i even had the time to throw in a little jQuery i found over at &lt;a href="http://www.dynamicdrive.com/" target="_blank"&gt;DynamicDrive&lt;/a&gt; called &lt;a href="http://www.dynamicdrive.com/dynamicindex17/featuredcontentglider.htm" target="_blank"&gt;Featured Content Glider&lt;/a&gt; that i thought would do nicely for what i wanted this forecast to appear as..&lt;/p&gt;&lt;h3&gt;&lt;u&gt;so, now the final code:&lt;/u&gt;&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl&amp;lt;DiscMaster.Web.Models.Course&amp;gt;" %&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%@ Import Namespace="System.Xml" %&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="/scripts/featuredcontentglider.js"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/***********************************************&lt;/span&gt;
&lt;span class="rem"&gt;    * Featured Content Glider script- (c) Dynamic Drive DHTML code library (www.dynamicdrive.com)&lt;/span&gt;
&lt;span class="rem"&gt;    * Visit http://www.dynamicDrive.com for hundreds of DHTML scripts&lt;/span&gt;
&lt;span class="rem"&gt;    * This notice must stay intact for legal use&lt;/span&gt;
&lt;span class="rem"&gt;    ***********************************************/&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt;&amp;gt;

    featuredcontentglider.init({
        gliderid: &lt;span class="str"&gt;"forecast"&lt;/span&gt;, &lt;span class="rem"&gt;//ID of main glider container&lt;/span&gt;
        contentclass: &lt;span class="str"&gt;"glidecontent"&lt;/span&gt;, &lt;span class="rem"&gt;//Shared CSS class name of each glider content&lt;/span&gt;
        togglerid: &lt;span class="str"&gt;"p-select"&lt;/span&gt;, &lt;span class="rem"&gt;//ID of toggler container&lt;/span&gt;
        remotecontent: &lt;span class="str"&gt;""&lt;/span&gt;, &lt;span class="rem"&gt;//Get gliding contents from external file on server? "filename" or "" to disable&lt;/span&gt;
        selected: 0, &lt;span class="rem"&gt;//Default selected content index (0=1st)&lt;/span&gt;
        persiststate: &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="rem"&gt;//Remember last content shown within browser session (true/false)?&lt;/span&gt;
        speed: 500, &lt;span class="rem"&gt;//Glide animation duration (in milliseconds)&lt;/span&gt;
        direction: &lt;span class="str"&gt;"downup"&lt;/span&gt;, &lt;span class="rem"&gt;//set direction of glide: "updown", "downup", "leftright", or "rightleft"&lt;/span&gt;
        autorotate: &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="rem"&gt;//Auto rotate contents (true/false)?&lt;/span&gt;
        autorotateconfig: [5000, 2] &lt;span class="rem"&gt;//if auto rotate enabled, set [milliseconds_btw_rotations, cycles_before_stopping]&lt;/span&gt;
    })

&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="forecast"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="glidecontentwrapper"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;
    &lt;span class="rem"&gt;// used to read the forecast xml&lt;/span&gt;
    System.Xml.XmlDocument doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();
    &lt;span class="rem"&gt;// our soon-to-be forecast node collection&lt;/span&gt;
    System.Xml.XmlNodeList nodelist = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

    &lt;span class="rem"&gt;// determine if the forecast is already stored in the cache..&lt;/span&gt;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (Cache[Server.UrlPathEncode(Model.CourseDetail.yr_weather)]!=&lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        &lt;span class="rem"&gt;// .. if so, fetch it&lt;/span&gt;
        doc = (XmlDocument)Cache[Server.UrlPathEncode(Model.CourseDetail.yr_weather)];
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        &lt;span class="rem"&gt;// .. and if not, try to consume the source using a reader..&lt;/span&gt;
        &lt;span class="kwrd"&gt;try&lt;/span&gt;
        {
            System.Xml.XmlTextReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(Server.UrlPathEncode(Model.CourseDetail.yr_weather));
            doc.Load(reader);
            &lt;span class="rem"&gt;// add entry to cache&lt;/span&gt;
            Cache.Add(Server.UrlPathEncode(Model.CourseDetail.yr_weather), doc, &lt;span class="kwrd"&gt;null&lt;/span&gt;, DateTime.Now.AddMinutes(60), Cache.NoSlidingExpiration, CacheItemPriority.Default, &lt;span class="kwrd"&gt;null&lt;/span&gt;);
        }
        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
        {
            &lt;span class="rem"&gt;// just in case something went wrong we allow this to be blank for now..&lt;/span&gt;
            &lt;span class="kwrd"&gt;throw&lt;/span&gt;;
        }
    }

    &lt;span class="rem"&gt;// if all is loaded ok and data is there, simple xpath query to get the forecast data..&lt;/span&gt;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (doc!=&lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (doc.HasChildNodes)
        {
             nodelist = doc.SelectNodes(&lt;span class="str"&gt;"/weatherdata/forecast/tabular/time"&lt;/span&gt;);
        }
    }

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (nodelist!=&lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (nodelist.Count&amp;gt;0)
        {
            &lt;span class="rem"&gt;// restruct the nodelist to a queryable list, then group by the day of the forecast, and iterate 'em..&lt;/span&gt;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var day &lt;span class="kwrd"&gt;in&lt;/span&gt; nodelist.OfType&amp;lt;XmlNode&amp;gt;().GroupBy(n =&amp;gt; DateTime.Parse(n.Attributes[&lt;span class="str"&gt;"from"&lt;/span&gt;].Value).ToString(&lt;span class="str"&gt;"yyyy-MM-dd"&lt;/span&gt;)))
            {
                &lt;span class="rem"&gt;// iterate each forecast in the current group (day)&lt;/span&gt;
                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (XmlNode node &lt;span class="kwrd"&gt;in&lt;/span&gt; day)
                {
             &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="glidecontent"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                 &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;strong&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= DateTime.Parse(node.Attributes[&lt;span class="str"&gt;"from"&lt;/span&gt;].Value).ToString(&lt;span class="str"&gt;"yyyy-MM-dd HH:MM"&lt;/span&gt;) &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; - &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= DateTime.Parse(node.Attributes[&lt;span class="str"&gt;"to"&lt;/span&gt;].Value).ToString(&lt;span class="str"&gt;"HH:MM"&lt;/span&gt;)&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;strong&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="float: left;"&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;='&amp;lt;%= String.Format("/Image.ashx?src=/Content/Media/Icons/Weather/{0}.png&amp;amp;width=64", node["symbol"].Attributes["number"].Value.PadLeft(2,'&lt;/span&gt;&lt;span class="attr"&gt;0&lt;/span&gt;&lt;span class="kwrd"&gt;')) %&amp;gt;'&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    conditions: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= node[&lt;span class="str"&gt;"symbol"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"name"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    temperature: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= node[&lt;span class="str"&gt;"temperature"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"value"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;sup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;o&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;sup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;C
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    precipitation: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= node[&lt;span class="str"&gt;"precipitation"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"value"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    wind: &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= node[&lt;span class="str"&gt;"windSpeed"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"name"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; - &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= node[&lt;span class="str"&gt;"windSpeed"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"mps"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt; mps &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;= node[&lt;span class="str"&gt;"windDirection"&lt;/span&gt;].Attributes[&lt;span class="str"&gt;"code"&lt;/span&gt;].Value&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
             &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;    }
            }
        }
    }
             &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="p-select"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="glidecontenttoggler"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="#"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="prev"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;="previous forecast"&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="/Image.ashx?src=/Content/Media/Icons/24x24/previous.png&amp;amp;width=32"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="#"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="next"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;="next forecast"&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="/Image.ashx?src=/Content/Media/Icons/24x24/next.png&amp;amp;width=32"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="forecastfooter"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;small&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        Weather forecast from &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.yr.no"&lt;/span&gt; &lt;span class="attr"&gt;target&lt;/span&gt;&lt;span class="kwrd"&gt;="_blank"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;yr.no&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; delivered by&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;the Norwegian Meteorological Institute and the NRK
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;small&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3&gt;&lt;u&gt;and the final view:&lt;/u&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pr5a2BlM4eM/SskneFucFGI/AAAAAAAABjg/LkwYD-Vrab4/s1600-h/final%5B8%5D.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="final" border="0" alt="final" src="http://lh3.ggpht.com/_pr5a2BlM4eM/Sskne3hy_9I/AAAAAAAABjk/hD2nD-E7Dw8/final_thumb%5B6%5D.png?imgmax=800" width="244" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;that’s really all there is to it.. some tweaking of the css and jQuery part to be more what i wanted it to be, but none the less it’s a fairly simple example and could hopefully give you some ideas or lend you some help.&lt;/p&gt;&lt;p&gt;external sources to this article:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dynamicdrive.com/dynamicindex17/featuredcontentglider.htm" target="_blank"&gt;Featured Content Glider&lt;/a&gt; script via &lt;a href="http://www.dynamicdrive.com/" target="_blank"&gt;Dynamic Drive&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.yr.no/place/Sweden/Stockholm/J%c3%a4rva/forecast.xml" target="_blank"&gt;Weather forecast&lt;/a&gt; data via &lt;a href="http://www.yr.no/" target="_blank"&gt;yr.no&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.yr.no/informasjon/1.1940495" target="_blank"&gt;Weather symbols&lt;/a&gt; via &lt;a href="http://www.yr.no/" target="_blank"&gt;yr.no&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-6367545062312867358?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/6367545062312867358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=6367545062312867358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6367545062312867358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6367545062312867358'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/integrating-weather-from-yrno.html' title='Integrating weather from yr.no'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pr5a2BlM4eM/SsknduX6K5I/AAAAAAAABjc/xV5zbeG3EAQ/s72-c/first_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7605660699979060572</id><published>2009-10-01T23:26:00.007+02:00</published><updated>2009-10-02T21:34:14.531+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Codename 'DiscMaster' - weather and maps</title><content type='html'>the project keeps moving forward, and as stated earlier the project now has some initial integration with both maps (via &lt;a href="http://www.bing.com/"&gt;Bing&lt;/a&gt; and some help from the great code in &lt;a href="http://nerddinner.codeplex.com/"&gt;NerdDinner&lt;/a&gt;) and weather (via &lt;a href="http://www.yr.no/"&gt;yr.no&lt;/a&gt;), here are some screenshots:



&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/_pr5a2BlM4eM/SsUfDKs50XI/AAAAAAAABjM/t1JpZULBkfw/s1600-h/lomtjarn_details.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5387746668491428210" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 291px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_pr5a2BlM4eM/SsUfDKs50XI/AAAAAAAABjM/t1JpZULBkfw/s400/lomtjarn_details.jpg" border="0" /&gt;&lt;/a&gt;
&lt;a href="http://3.bp.blogspot.com/_pr5a2BlM4eM/SsUfC5RMhVI/AAAAAAAABjE/QVf1laPbgw8/s1600-h/jarva_details.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5387746663811810642" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 291px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_pr5a2BlM4eM/SsUfC5RMhVI/AAAAAAAABjE/QVf1laPbgw8/s400/jarva_details.jpg" border="0" /&gt;&lt;/a&gt;

future enhancements will continue to be applied, but right now the next step is migrating the solution to &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=d3f06bb9-5f5f-4f46-91e9-813b3fce2db1"&gt;ASP.NET MVC 2 Preview 2&lt;/a&gt; that just came out. &lt;/p&gt;&lt;p&gt;example code and tutorials are coming too, as well as most of the source code.&lt;/p&gt;&lt;p&gt;stay tuned for further updates..&lt;/p&gt;&lt;p&gt;regards,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;p&gt;Previous articles on CodeName 'DiscMaster':&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://usoniandream.blogspot.com/2009/09/codename-discmaster.html"&gt;CodeName 'DiscMaster'&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7605660699979060572?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7605660699979060572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7605660699979060572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7605660699979060572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7605660699979060572'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/codename-discmaster-weather-and-maps.html' title='Codename &apos;DiscMaster&apos; - weather and maps'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pr5a2BlM4eM/SsUfDKs50XI/AAAAAAAABjM/t1JpZULBkfw/s72-c/lomtjarn_details.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1135244982254199162</id><published>2009-10-01T14:47:00.001+02:00</published><updated>2009-10-01T14:48:38.342+02:00</updated><title type='text'>Google Wave</title><content type='html'>just realized i wanna check out Google Wave, but as always it's on invite-only basis right now and sooo... anyone with an invite to Google Wave to spare?

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1135244982254199162?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1135244982254199162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1135244982254199162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1135244982254199162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1135244982254199162'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/google-wave.html' title='Google Wave'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2053580104785340740</id><published>2009-10-01T12:32:00.004+02:00</published><updated>2009-10-01T12:36:29.788+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='releases'/><title type='text'>ASP.NET MVC 2 Preview 2</title><content type='html'>As the title suggests, ASP.NET MVC 2 Preview 2 is now available, go download it &lt;a href="http://tinyurl.com/yamzs2f"&gt;here&lt;/a&gt; or read Phil Haack's post on it &lt;a href="http://haacked.com/archive/2009/10/01/asp.net-mvc-preview-2-released.aspx"&gt;here&lt;/a&gt;.

Preview 2 includes some nice features such as:
&lt;ul&gt;&lt;li&gt;Client-side validation&lt;/li&gt;&lt;li&gt;Areas&lt;/li&gt;&lt;li&gt;Model validation providers&lt;/li&gt;&lt;li&gt;Metadata providers&lt;/li&gt;&lt;/ul&gt;Regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2053580104785340740?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2053580104785340740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2053580104785340740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2053580104785340740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2053580104785340740'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/10/aspnet-mvc-2-preview-2.html' title='ASP.NET MVC 2 Preview 2'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-9158274401204621290</id><published>2009-09-16T14:54:00.011+02:00</published><updated>2009-09-16T16:22:22.405+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Codename &apos;DiscMaster&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='discgolf'/><title type='text'>Codename 'DiscMaster'</title><content type='html'>I get one specific question a lot: &lt;em&gt;what would you develop on your own time if you could choose?&lt;/em&gt;

That question raised has always left me hanging without an answer.. there's too much stuff to try, create, reengineer and analyze. For once i thought i'd actually go ahead and make sense of one of those ideas and turn it into something real.

So, say hello to &lt;strong&gt;codename 'DiscMaster'&lt;/strong&gt;!

Codename 'DiscMaster' is a website/community for those of us that enjoy discgolfing (&lt;em&gt;&lt;span style="color:#666666;"&gt;yes, i'm one of those people that throw a disc/frisbee around on a pseudo-golfcourse and call it fun&lt;/span&gt;&lt;/em&gt;). It's built on ASP.NET MVC, LINQ (including LINQ to SQL), Dynamic Data, Entity Framework and custom providers for Repository and Membership - to name but a few.

Right now registration is per invitation only on a non-disclosed url and will continue that way while in development - this means that each member that is invited and registers can invite up to three more people to join.

Right now registered users can:
&lt;ul&gt;&lt;li&gt;view courses&lt;/li&gt;&lt;li&gt;manage courses&lt;/li&gt;&lt;li&gt;manage course layouts&lt;/li&gt;&lt;li&gt;manage their own profile&lt;/li&gt;&lt;li&gt;manage matches&lt;/li&gt;&lt;li&gt;view personal statistics&lt;/li&gt;&lt;li&gt;view match statistics&lt;/li&gt;&lt;li&gt;view players&lt;/li&gt;&lt;li&gt;generate reports&lt;/li&gt;&lt;li&gt;and much, much more!&lt;/li&gt;&lt;/ul&gt;Below are some screenshots showing (still in a standardized mvc layout) some of the features - names and personal details are crossed-out (&lt;em&gt;&lt;span style="color:#666666;"&gt;ok, ok, i know i missed a spot&lt;/span&gt;&lt;/em&gt;) for privacy reasons but i'm sure you'll get the general idea.


&lt;a href="http://4.bp.blogspot.com/_pr5a2BlM4eM/SrDlGBFtcxI/AAAAAAAABi8/XXH70wveeQw/s1600-h/statistics_ed.PNG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 355px; DISPLAY: block; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5382053446242104082" border="0" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/SrDlGBFtcxI/AAAAAAAABi8/XXH70wveeQw/s400/statistics_ed.PNG" /&gt;&lt;/a&gt;
&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_pr5a2BlM4eM/SrDlCnmyMZI/AAAAAAAABi0/iM-HMwSnQ40/s1600-h/matchresults_ed.PNG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 321px; DISPLAY: block; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5382053387861897618" border="0" alt="" src="http://3.bp.blogspot.com/_pr5a2BlM4eM/SrDlCnmyMZI/AAAAAAAABi0/iM-HMwSnQ40/s400/matchresults_ed.PNG" /&gt;&lt;/a&gt;

&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_pr5a2BlM4eM/SrDk_T2SOKI/AAAAAAAABis/2HDWc3mmBPA/s1600-h/playerdetails.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 246px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5382053331018594466" border="0" alt="" src="http://2.bp.blogspot.com/_pr5a2BlM4eM/SrDk_T2SOKI/AAAAAAAABis/2HDWc3mmBPA/s400/playerdetails.png" /&gt;&lt;/a&gt;
Future updates to this project include:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Weather service integration&lt;/li&gt;&lt;li&gt;Maps service integration&lt;/li&gt;&lt;li&gt;Interactive graphs based on Silverlight&lt;/li&gt;&lt;li&gt;OpenID integration&lt;/li&gt;&lt;li&gt;Social Networks integration&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Also, on a sidetrack, there's development in progress for an iPhone app with score synchronization.. &lt;/div&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;More details, screenshots and thoughts regarding this project will come in later posts..&lt;/div&gt;
Regards,&lt;/div&gt;&lt;div&gt;
P.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-9158274401204621290?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/9158274401204621290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=9158274401204621290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9158274401204621290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9158274401204621290'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/09/codename-discmaster.html' title='Codename &apos;DiscMaster&apos;'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pr5a2BlM4eM/SrDlGBFtcxI/AAAAAAAABi8/XXH70wveeQw/s72-c/statistics_ed.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-6592481181527229210</id><published>2009-05-19T17:34:00.001+02:00</published><updated>2009-05-19T17:34:46.946+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='releases'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Beta: Visual Studio 2010 Professional &amp; .NET Framework 4.0</title><content type='html'>&lt;p&gt;I know, I know.. it’s been forever since I last posted anything. All I can give as a reason is that raising a son isn’t the easiest thing known to man - and my focus has been 100% on that since day one.. however, this I couldn’t resist writing about :)&lt;/p&gt;  &lt;p&gt;So, Visual Studio 2010 Professional and .NET Framework 4.0 are now available as Beta 1 downloads on MSDN.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If installing vs2010 on Windows 7 RC, read the following article: &lt;a title="http://social.msdn.microsoft.com/Forums/en-US/vssetup/thread/6a569376-4207-4184-a8a7-73d5168c787e" href="http://social.msdn.microsoft.com/Forums/en-US/vssetup/thread/6a569376-4207-4184-a8a7-73d5168c787e"&gt;http://social.msdn.microsoft.com/Forums/en-US/vssetup/thread/6a569376-4207-4184-a8a7-73d5168c787e&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Regards,&lt;/p&gt;  &lt;p&gt;P.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-6592481181527229210?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/6592481181527229210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=6592481181527229210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6592481181527229210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6592481181527229210'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2009/05/beta-visual-studio-2010-professional.html' title='Beta: Visual Studio 2010 Professional &amp;amp; .NET Framework 4.0'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2719953654898381095</id><published>2008-09-03T00:02:00.005+02:00</published><updated>2008-09-03T00:15:23.171+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore'/><category scheme='http://www.blogger.com/atom/ns#' term='google chrome'/><title type='text'>Google Chrome</title><content type='html'>So, Google's decided to tango with the other players in the browser ballroom, they've released their &lt;a href="http://www.google.com/chrome"&gt;Google Chrome&lt;/a&gt; browser, and it's fairly interesting.&lt;div&gt;
&lt;/div&gt;&lt;div&gt;built open source and neatly packed with some good utilities for both endusers as well as developers it might very well become an adopted browser in the near future for many people looking for alternatives to the major actors.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;while i've yet to try it out further, i can tell you that sitecore runs very neatly in it (from what i've tested so far), but the login page has the same half-annoying layout issues as firefox has..&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_pr5a2BlM4eM/SL26O96swbI/AAAAAAAABDA/5L_eKWSc3lk/s1600-h/sitecore+chrome.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_pr5a2BlM4eM/SL26O96swbI/AAAAAAAABDA/5L_eKWSc3lk/s400/sitecore+chrome.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5241550307630825906" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;sitecore content editor as seen in google chrome&lt;/div&gt;&lt;div style="text-align: center;"&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;i encourage you to download it and test it, it's interesting.&lt;/div&gt;&lt;div style="text-align: left;"&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;regards,&lt;/div&gt;&lt;div style="text-align: left;"&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;P.&lt;/div&gt;&lt;div style="text-align: left;"&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2719953654898381095?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2719953654898381095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2719953654898381095' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2719953654898381095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2719953654898381095'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2008/09/google-chrome.html' title='Google Chrome'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pr5a2BlM4eM/SL26O96swbI/AAAAAAAABDA/5L_eKWSc3lk/s72-c/sitecore+chrome.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4226060418895467653</id><published>2008-07-01T10:19:00.006+02:00</published><updated>2008-07-01T10:35:08.246+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 6'/><title type='text'>Just released: Sitecore 6</title><content type='html'>So, after some time of waiting it's finally here: &lt;strong&gt;Sitecore v6&lt;/strong&gt;

previously codenamed 'crestone' it's now a full release and man am i eager to get my hands on a running version to play around with it :)

further details &lt;a href="http://alexeyrusakov.com/sitecoreblog/2008/07/01/Sitecore+6.aspx"&gt;here&lt;/a&gt;, &lt;a href="http://sdn5.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://sdn5.sitecore.net/Resources/Sitecore%206.aspx"&gt;here&lt;/a&gt;

congratulations in advance to the great team at sitecore for what i'm sure will be yet another milestone for cms systems going forward.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4226060418895467653?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4226060418895467653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4226060418895467653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4226060418895467653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4226060418895467653'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2008/07/just-released-sitecore-6.html' title='Just released: Sitecore 6'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2152013401034808939</id><published>2008-04-18T19:44:00.004+02:00</published><updated>2008-04-18T19:50:16.165+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>a star is born</title><content type='html'>&lt;div&gt;sorry for the lack of posts lately, it's in no way a sign of me going away or lack of interest, it's just that the past months have been focused on our kid-on-the-way, and that way came to a big stop last weekend when &lt;strong&gt;HE&lt;/strong&gt; decided to come to the world.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;i'm now the proud father of a wonderful baby boy!&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5190643852911615714" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/SAjfFUBcnuI/AAAAAAAABC4/bfX77usEvFI/s400/DSC00183.JPG" border="0" /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;yes, my focus has shifted (for obvious reasons), but i'll still try to write something every now and then.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;oh, funny thing: we share the same birthday (12th April), what are the odds of that? :)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;take care.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;P.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2152013401034808939?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2152013401034808939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2152013401034808939' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2152013401034808939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2152013401034808939'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2008/04/star-is-born.html' title='a star is born'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pr5a2BlM4eM/SAjfFUBcnuI/AAAAAAAABC4/bfX77usEvFI/s72-c/DSC00183.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7611344771711885873</id><published>2008-02-09T11:00:00.000+01:00</published><updated>2008-02-09T11:05:14.526+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Information wants to be free</title><content type='html'>1.1.2 (OTB) 4.6BL unlocked and 100% functional in less than 5 minutes.

tutorial: &lt;a href="http://www.iclarified.com/entry/index.php?enid=649"&gt;http://www.iclarified.com/entry/index.php?enid=649&lt;/a&gt;

this time i tip my hat for &lt;a href="http://iphonejtag.blogspot.com/"&gt;George Hotz&lt;/a&gt;, indeed a talented man worth thanking.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7611344771711885873?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7611344771711885873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7611344771711885873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7611344771711885873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7611344771711885873'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2008/02/information-wants-to-be-free.html' title='Information wants to be free'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-243723700353910373</id><published>2008-02-07T18:08:00.000+01:00</published><updated>2008-02-07T18:11:34.738+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xpress'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore'/><title type='text'>a long time ago in a galaxy far, far away..</title><content type='html'>.. i wrote a (somewhat) lot of posts to this blog. now all of a sudden months have gone by without a post - shame on me.

so, as a result, i've started to put together a few thoughts that i'll hopefully be able to write more about in the near future..

.. until then, go download sitecore for yourself, fully for yourself, 'cause now the Xpress is available to everyone!

more details &amp;amp; download: &lt;a href="http://xpress.sitecore.net/"&gt;http://xpress.sitecore.net&lt;/a&gt;

regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-243723700353910373?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/243723700353910373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=243723700353910373' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/243723700353910373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/243723700353910373'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2008/02/long-time-ago-in-galaxy-far-far-away.html' title='a long time ago in a galaxy far, far away..'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4578686262652209606</id><published>2007-11-01T10:50:00.000+01:00</published><updated>2007-11-01T11:03:04.185+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>It's all about you</title><content type='html'>Since July 4th, 2006 I've posted 76 articles on this blog - that averages to about 5 posts per month.

Looking at the statistics for the past month (October) the first thing that comes to mind is  'thank you'. Your interest, feedback and ideas are always welcome and it's nice to know there are a those of you that keep returning month after month and keep reading my ramblings :)

If you're curious, here's some interesting facts from the October statistics..

Visitors from 45 countries where the top 10 are:
&lt;ol&gt;&lt;li&gt;United States&lt;/li&gt;&lt;li&gt;Sweden&lt;/li&gt;&lt;li&gt;Denmark&lt;/li&gt;&lt;li&gt;United Kingdom&lt;/li&gt;&lt;li&gt;Netherlands&lt;/li&gt;&lt;li&gt;Hungary&lt;/li&gt;&lt;li&gt;Australia&lt;/li&gt;&lt;li&gt;Ukraine&lt;/li&gt;&lt;li&gt;Canada&lt;/li&gt;&lt;li&gt;Norway&lt;/li&gt;&lt;/ol&gt;Top 5 most popular posts:
&lt;ol&gt;&lt;li&gt;Tutorial: implementing lucene.NET search &lt;/li&gt;&lt;li&gt;Tutorial: advanced lucene.NET usage example &lt;/li&gt;&lt;li&gt;Tutorial: Create your own Sitecore Wizard &lt;/li&gt;&lt;li&gt;Catch 22: SQL 2005 and the "MUST_CHANGE" policy&lt;/li&gt;&lt;li&gt;Tutorial: Restore from Archive functionality&lt;/li&gt;&lt;/ol&gt;Average number of unique vistors / day: 29
Average time spent / visit: 2min 50sec.
Average number of pages / visit: 2,65

New visitors: 61%
Returning visitors: 39%

Browser breakdown:
&lt;ol&gt;&lt;li&gt;Internet Explorer 70,89%&lt;/li&gt;&lt;li&gt;Firefox 27,70%&lt;/li&gt;&lt;li&gt;Mozilla 0,47%&lt;/li&gt;&lt;li&gt;Opera 0,47%&lt;/li&gt;&lt;li&gt;Safari 0,47%&lt;/li&gt;&lt;/ol&gt;OS breakdown:
&lt;ol&gt;&lt;li&gt;Windows 98,12%&lt;/li&gt;&lt;li&gt;Mac 1,41%&lt;/li&gt;&lt;li&gt;Linux 0,47%&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Until the next post - take care,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4578686262652209606?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4578686262652209606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4578686262652209606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4578686262652209606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4578686262652209606'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/11/its-all-about-you.html' title='It&apos;s all about you'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-62763200711451680</id><published>2007-10-29T13:09:00.000+01:00</published><updated>2007-10-29T14:05:05.826+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><title type='text'>tutorial: advanced lucene.NET usage example</title><content type='html'>&lt;em&gt;&lt;span style="color:#999999;"&gt;this post applies to Sitecore 5.3.1&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;After the previous post I wrote about the lucene.net search implementation I've had tons of questions about the search and indexes and almost everything inbetween, so I thought I'd make another post on this subject.. this post however uses more of the functionality that's already available and another, more advanced, approach to searching and displaying the results.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#999999;"&gt;(a lot of this code is based on/taken from the simplesearch implemented in sitecore)&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;what you'll end up with is a sublayout somewhat similar to the following screenshot that you can use on your website(s):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://2.bp.blogspot.com/_pr5a2BlM4eM/RyXPafCpCKI/AAAAAAAABCY/Z0sy02pCUEU/s1600-h/lucenesearch_advanced.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5126731804747303074" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_pr5a2BlM4eM/RyXPafCpCKI/AAAAAAAABCY/Z0sy02pCUEU/s400/lucenesearch_advanced.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#999999;"&gt;lucence.net advanced search sublayout&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;this tutorial will cover the following steps:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;create a new &lt;em&gt;custom index&lt;/em&gt; that indexes data from the &lt;em&gt;web database&lt;/em&gt; based on a certain template and indexes selected fields&lt;/li&gt;&lt;br /&gt;&lt;li&gt;create a sublayout that uses the index to search and render output&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#33cc00;"&gt;Step 1:&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt; Create the index&lt;br /&gt;Add the following to the web.config file within the &lt;strong&gt;&amp;lt;indexes&amp;gt;&lt;/strong&gt; section:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;!-- Custom Web Index (created as an example) --&amp;gt;&lt;br /&gt;&amp;lt;index id="&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;webindex&lt;/span&gt;&lt;/strong&gt;" singleInstance="true" type="Sitecore.Data.Indexing.Index, Sitecore.Kernel"&amp;gt;&lt;br /&gt;&amp;lt;param desc="name"&amp;gt;$(id)&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;templates hint="list:AddTemplate"&amp;gt;&lt;br /&gt;&amp;lt;template&amp;gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;Sample Item&lt;/span&gt;&lt;/em&gt;&amp;lt;/template&amp;gt;&lt;br /&gt;&amp;lt;/templates&amp;gt;&lt;br /&gt;&amp;lt;fields hint="raw:AddField"&amp;gt;&lt;br /&gt;&amp;lt;field&amp;gt;&lt;span style="color:#33cc00;"&gt;&lt;em&gt;title&lt;/em&gt;&lt;/span&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;lt;field storage="unstored"&amp;gt;text&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;lt;/fields&amp;gt;&lt;br /&gt;&amp;lt;/index&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Next, locate the definition for the Web database (within the &amp;lt;databases&amp;gt; section) and add the following to that definition after the proxydataprovider one:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;indexes hint="list:AddIndex"&amp;gt;&lt;br /&gt;&amp;lt;index path="indexes/index[@id=&lt;strong&gt;'webindex'&lt;/strong&gt;]" /&amp;gt;&lt;br /&gt;&amp;lt;/indexes&amp;gt;&lt;br /&gt;&amp;lt;Engines.HistoryEngine.Storage&amp;gt;&lt;br /&gt;&amp;lt;obj type="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.$(database)"&amp;gt;&lt;br /&gt;&amp;lt;param desc="connection" ref="connections/$(id)"&amp;gt;&lt;br /&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;EntryLifeTime&amp;gt;30.00:00:00&amp;lt;/EntryLifeTime&amp;gt;&lt;br /&gt;&amp;lt;/obj&amp;gt;&lt;br /&gt;&amp;lt;/Engines.HistoryEngine.Storage&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#33cc00;"&gt;Step 2:&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt; Create the sublayout&lt;br /&gt;&lt;br /&gt;Create a new sublayout/usercontrol and add the following elements:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SearchTextBox - Textbox&lt;/li&gt;&lt;li&gt;SearchButton - Button&lt;/li&gt;&lt;li&gt;SearchResultsPanel - Panel&lt;/li&gt;&lt;li&gt;lblStatus - Label&lt;/li&gt;&lt;/ul&gt;Now, hook up the click event of the button to do the following (note that "&lt;em&gt;webindex"&lt;/em&gt; &amp;amp; "&lt;em&gt;web"&lt;/em&gt; defines the indexname and database to search in):&lt;br /&gt;&lt;blockquote&gt;AdvancedSearch(SearchTextBox.Text, "webindex", "web");&lt;/blockquote&gt;and here's the code for the AdvancedSearch() method:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Searches for a specified string using the built-in lucene.net engine&lt;br /&gt;/// with advanced functionality as like the one seen in sitecore when&lt;br /&gt;/// performing a search..&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="searchstring"&amp;gt;the string to search for&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="indexname"&amp;gt;the name of the index&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name="database"&amp;gt;the database to perform the search within&amp;lt;/param&amp;gt;&lt;br /&gt;private void AdvancedSearch(string searchstring, string indexname, string database)&lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// clear output holders..&lt;br /&gt;this.SearchResultsPanel.Controls.Clear();&lt;br /&gt;this.lblStatus.Text = "";&lt;br /&gt;&lt;br /&gt;// make sure we don't do unwanted empty searches..&lt;br /&gt;if (SearchTextBox.Text == string.Empty)&lt;br /&gt;{&lt;br /&gt;this.lblStatus.Text = "please specify your search..";&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// find the proper culture when comparing later..&lt;br /&gt;System.Globalization.CultureInfo culture = Sitecore.Context.Culture;&lt;br /&gt;if (culture.IsNeutralCulture)&lt;br /&gt;{&lt;br /&gt;culture = System.Globalization.CultureInfo.CreateSpecificCulture(culture.Name);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// timer to use when calculating time taken&lt;br /&gt;HighResTimer timer = new HighResTimer(true);&lt;br /&gt;&lt;br /&gt;// get the specified index&lt;br /&gt;Index searchIndex = Sitecore.Configuration.Factory.GetIndex(indexname);&lt;br /&gt;// get the database to perform the search in..&lt;br /&gt;Database db = Sitecore.Configuration.Factory.GetDatabase(database);&lt;br /&gt;// get a designated indexsearcher that exposes more functionality..&lt;br /&gt;IndexSearcher searcher = searchIndex.GetSearcher(db);&lt;br /&gt;// get a new standard analyser so we can create a query..&lt;br /&gt;Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();&lt;br /&gt;Query query = Lucene.Net.QueryParsers.QueryParser.Parse(searchstring, "_content", analyzer);&lt;br /&gt;// perform the search and get the results back as a Hits list..&lt;br /&gt;Hits hits = searcher.Search(query);&lt;br /&gt;// final timer for calculating time taken&lt;br /&gt;double timeElapsed = timer.Elapsed();&lt;br /&gt;&lt;br /&gt;// output friendly message about how many hits, time taken etc..&lt;br /&gt;this.lblStatus.Text = string.Format(Sitecore.Globalization.Translate.Text("Found {0} {1} that matched query '{2}' ({3}{4})"), new object[] { hits.Length(), (hits.Length() == 1) ? Sitecore.Globalization.Translate.Text("document") : Sitecore.Globalization.Translate.Text("documents"), searchstring, timeElapsed.ToString("0.00"), Sitecore.Globalization.Translate.Text(" ms") });&lt;br /&gt;&lt;br /&gt;// new stringbuilder that we'll be adding the content to prior to final output&lt;br /&gt;StringBuilder sb = new StringBuilder();&lt;br /&gt;// a new highlighter that gives us some abstract text of the item with the hits highlighted&lt;br /&gt;Highlighter highlighter = new Highlighter(new QueryScorer(query));&lt;br /&gt;&lt;br /&gt;// step through each result and format it before returning it to the client&lt;br /&gt;for (int i = 0; i &amp;lt; hits.Length(); i++)&lt;br /&gt;{&lt;br /&gt;// get the actual item&lt;br /&gt;Item itm = Index.GetItem(hits.Doc(i), db);&lt;br /&gt;if (itm != null)&lt;br /&gt;{&lt;br /&gt;string retStr = string.Empty;&lt;br /&gt;// get all the fields of the item..&lt;br /&gt;Sitecore.Collections.FieldCollection fields = itm.Fields;&lt;br /&gt;// .. and step through them so we'll be able to show where the hit was found&lt;br /&gt;for (int j = 0; j &amp;lt; fields.Count; j++)&lt;br /&gt;{&lt;br /&gt;Sitecore.Data.Fields.Field field = itm.Fields[j];&lt;br /&gt;if (field != null)&lt;br /&gt;{&lt;br /&gt;string fieldname = field.DisplayName;&lt;br /&gt;if (string.IsNullOrEmpty(fieldname))&lt;br /&gt;{&lt;br /&gt;fieldname = Sitecore.Globalization.Translate.Text("[Unknown field]");&lt;br /&gt;}&lt;br /&gt;string s = StringUtil.RemoveTags(field.Value);&lt;br /&gt;TokenStream tokenStream = analyzer.TokenStream(new System.IO.StringReader(s));&lt;br /&gt;// use the highlighter to try and get highlighted hit in the text&lt;br /&gt;string highlightedText = highlighter.GetBestFragments(tokenStream, s, 3, "...");&lt;br /&gt;string formattedOutput = retStr;&lt;br /&gt;if (highlightedText.Length &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;retStr = formattedOutput + "&amp;lt;div&amp;gt;&amp;lt;span class=\"scField\"&amp;gt;" + fieldname + ":&amp;lt;/span&amp;gt; \"" + highlightedText + "\"&amp;lt;/div&amp;gt;";&lt;br /&gt;}&lt;br /&gt;else if (s.IndexOf(searchstring, StringComparison.CurrentCultureIgnoreCase) &amp;gt;= 0)&lt;br /&gt;{&lt;br /&gt;retStr = formattedOutput + "&amp;lt;div&amp;gt;&amp;lt;span class=\"scField\"&amp;gt;" + fieldname + ":&amp;lt;/span&amp;gt; \"" + StringUtil.Clip(s, 0x40, true) + "\"&amp;lt;/div&amp;gt;";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;string updated = itm.Statistics.Updated.ToString("d", culture);&lt;br /&gt;string nameandversion = itm.Language.CultureInfo.DisplayName + ", " + itm.Version;&lt;br /&gt;sb.Append("&amp;lt;div style=\"padding:8px 0px 8px 0px\"&amp;gt;&amp;lt;a href=\"" + itm.Paths.GetFriendlyUrl(true) + "\" class=\"scResult\"&amp;gt;" + Sitecore.Resources.Images.GetImage(itm.Appearance.Icon, 0x10, 0x10, "absmiddle", "0px 4px 0px 0px") + itm.DisplayName + "&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;" + retStr + "&amp;lt;div class=\"scResultInfo\"&amp;gt;" + itm.Paths.Path + "[" + nameandversion + "] - " + updated + "&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;");&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;sb.Append("&amp;lt;div class=\"scNotFound\" style=\"padding:8px 0px 8px 0px\"&amp;gt;" + Sitecore.Resources.Images.GetImage("Applications/16x16/error.png", 0x10, 0x10, "absmiddle", "0px 4px 0px 0px") + Sitecore.Globalization.Translate.Text("Item not found") + "&amp;lt;/div&amp;gt;");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;this.SearchResultsPanel.Controls.Add(new LiteralControl(sb.ToString()));&lt;br /&gt;searcher.Close();&lt;br /&gt;}&lt;br /&gt;catch (Exception exception)&lt;br /&gt;{&lt;br /&gt;this.SearchResultsPanel.Controls.Add(new LiteralControl(exception.Message));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;If things go wrong: make sure you have set up the index correctly and that the index is created in the /indexes folder of your installation. to manually trigger the reindexing go via the databases option in the control panel in sitecore (sitecore menu &gt; control panel).&lt;br /&gt;&lt;br /&gt;the full source code for this post and the previous post will be made available here later on, for now you can email or comment if you want the details of the code sent to you..&lt;br /&gt;&lt;br /&gt;feel free to comment or email if you have any ideas or questions.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;&lt;br /&gt;P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-62763200711451680?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/62763200711451680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=62763200711451680' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/62763200711451680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/62763200711451680'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/10/tutorial-advanced-lucenenet-usage.html' title='tutorial: advanced lucene.NET usage example'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pr5a2BlM4eM/RyXPafCpCKI/AAAAAAAABCY/Z0sy02pCUEU/s72-c/lucenesearch_advanced.gif' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8556581857967063648</id><published>2007-10-23T06:11:00.000+02:00</published><updated>2007-10-23T14:32:23.109+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Tutorial: implementing lucene.NET search</title><content type='html'>The following code implements a &lt;u&gt;lucene.NET&lt;/u&gt; search routine, ready to run:

&lt;strong&gt;&lt;u&gt;&lt;span style="color:#33cc00;"&gt;C# Code&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;

&lt;blockquote&gt;/// &amp;lt;summary&amp;gt;
/// Searches for a specified string using the built-in lucene.net engine
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name="searchString"&amp;gt;the string to search for&amp;lt;/param&amp;gt;
/// &amp;lt;param name="indexName"&amp;gt;the name of the index&amp;lt;/param&amp;gt;
/// &amp;lt;param name="databaseName"&amp;gt;the database to perform the search within&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;System.Collections.Generic.List&amp;lt;Sitecore.Data.Items.Item&amp;gt;&amp;lt;/returns&amp;gt;
public List&amp;lt;Item&amp;gt; Search(string searchString, string indexName, string databaseName)
{
// initially set up the returning results list
List&amp;lt;Item&amp;gt; results = new List&amp;lt;Item&amp;gt;();
// make sure string is not empty prior to starting the search
if (searchString != string.Empty)
{
// get the specified index
Index searchIndex = Sitecore.Configuration.Factory.GetIndex(indexName);
// allocate a collection of hits..
Hits hits = null;
// get the database to perform the search in..
Database db = Sitecore.Configuration.Factory.GetDatabase(databaseName);
try
{
// run the search..
hits = searchIndex.Search(searchString, db);
}
catch
(Exception ex)
{
// log error message to the sitecore log file..
Sitecore.Diagnostics.Log.Error("Custom Search failed with the following message: " + ex.Message, this);
// .. and return null..
return null;
}

// iterate thru the hits we got from the search
for (int i = 0; i &amp;lt; hits.Length(); i++)
{
// get a document referrer..
Document document = hits.Doc(i);
// .. so we can get the id..
string itemID = document.Get("_docID");
// .. so we can get a pointer to the item in itself..
ItemPointer pointer = ItemPointer.Parse(itemID);
// .. so we can get the actual item..
Item itm = Sitecore.Configuration.Factory.GetDatabase(databaseName).Items[pointer.ItemID, pointer.Language, pointer.Version];
// .. so we finally can add the item to the returning list
if (itm != null)
{
results.Add(itm);
}
}
&lt;/blockquote&gt;
&lt;span style="color:#33cc00;"&gt;&lt;strong&gt;&lt;u&gt;Usage example&lt;/u&gt;&lt;/strong&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;/span&gt;searching for &lt;em&gt;"sample"&lt;/em&gt; in the &lt;em&gt;system&lt;/em&gt; index in the &lt;em&gt;master&lt;/em&gt; database:

&lt;blockquote&gt;System.Collections.Generic.List&amp;lt;Sitecore.Data.Items.Item&amp;gt; searchresults = Search("sample", "system", "master");&lt;/blockquote&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#33cc00;"&gt;
Extended usage example&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;
To use it on a site you could for example create a sublayout with a simple textbox and button, then hook it up to the routine and you'd be set to go.. something like:

&lt;em&gt;&lt;span style="color:#999999;"&gt;(this example assumes the existance of the SearchButton and SearchTextBox)
&lt;/span&gt;&lt;/em&gt;

&lt;/span&gt;&lt;/u&gt;&lt;blockquote&gt;protected void SearchButton_Click(object sender, EventArgs e)
{
// get search, usually directly from a textbox
string search = SearchTextBox.Text.Trim();
// try to get search results from a specified index
List&amp;lt;Item&amp;gt; searchresults = Search(search, "system", "master");
// validate existing result prior to moving on if
(searchresults!=null &amp;amp;&amp;amp; searchresults.Count&gt;0)
{
// step thru the items we've found in the search
foreach (Item itm in searchresults)
{
// output the search results..
Response.Write(itm.Name + ": " + itm.Paths.GetFriendlyUrl(true));
}
}
}&lt;/blockquote&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#33cc00;"&gt;Other information&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;
Add a reference to:
&lt;blockquote&gt;the Lucene.NET dll&lt;/blockquote&gt;
add using declarations:
&lt;blockquote&gt;using Lucene.Net;
using Lucene.Net.Search;
using Lucene.Net.Documents;&lt;/blockquote&gt;

Regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8556581857967063648?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8556581857967063648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8556581857967063648' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8556581857967063648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8556581857967063648'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/10/tutorial-implementing-lucenenet-search.html' title='Tutorial: implementing lucene.NET search'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-6986937355139612175</id><published>2007-10-04T12:47:00.000+02:00</published><updated>2007-10-04T12:50:07.897+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Microsoft releases the sourcecode for the .NET Framework Libraries</title><content type='html'>According to Scott Guthrie they're releasing the sourcecode of the .NET Framework Libraries when they release .NET 3.5 &amp;amp; Visual Studio 2008.. way cool if you ask me.

further reading: &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-6986937355139612175?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/6986937355139612175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=6986937355139612175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6986937355139612175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6986937355139612175'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/10/microsoft-releases-sourcecode-for-net.html' title='Microsoft releases the sourcecode for the .NET Framework Libraries'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-5575006621970207436</id><published>2007-10-03T16:55:00.001+02:00</published><updated>2007-10-03T17:33:15.677+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore'/><title type='text'>Summary of a really great start</title><content type='html'>&lt;p&gt;It's been quite the hectic couple of days that just passed, but man am I looking forward to more of them!

I guess it's official now, as of the 1:st of October i'm now employed as a &lt;strong&gt;Solution Architect @ Sitecore&lt;/strong&gt;. (input big -yay! and some clapping)..! I've had a really good time in Copenhagen at Sitecore's HQ and the things we've talked about and the things I've seen all have one major thing in common: &lt;u&gt;it's gonna be a fantastic future&lt;/u&gt; :)

My mind's racing a bit right now, but that's the way it should be when you take on challenges like these (or it could just be the &lt;em&gt;way-to-many&lt;/em&gt; cups of coffee too), and once I've just had some time to sleep and go over everything in more detail it looks like it's off to a &lt;em&gt;flying&lt;/em&gt; start (seriously) next week and a very interesting couple of days in Budapest.&lt;/p&gt;&lt;p&gt;I'm really excited about this job and what it brings and proud to join the great people at Sitecore! &lt;/p&gt;&lt;p&gt;Oh, and a big, big &lt;strong&gt;'thanks!'&lt;/strong&gt; to all the amazing people working at Sitecore that really made me feel welcome when i arrived yesterday!&lt;/p&gt;&lt;p&gt;Right now I'm on the train back to Stockholm, so in some 30 hours or so i've managed to cover quite some distance.. stockholm &gt; copenhagen &gt; malmö &gt; helsingborg &gt; malmö &gt; stockholm..&lt;/p&gt;&lt;p&gt;Expect some more Sitecore-related posts appearing in the near future :)&lt;/p&gt;&lt;p&gt;Regards,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-5575006621970207436?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/5575006621970207436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=5575006621970207436' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5575006621970207436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5575006621970207436'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/10/summary-of-realy-great-start.html' title='Summary of a really great start'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3365234490318777016</id><published>2007-10-02T06:41:00.000+02:00</published><updated>2007-10-02T06:50:50.910+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>The battle for the capital of Scandinavia</title><content type='html'>some say Copenhagen, some say Stockholm.. two sides but only one may prevail, and i'm on my way to find out what defines the Capital of Scandinavia (well, maybe not, but i like the idea)..

it's -way- to early in the morning right now, and considering i've already been up for about 2 hours there must be something seriously wrong with me. I'm on the train from Stockholm to Copenhagen, eager and restless like a little kid, on my way to draw out the details of my new job.

yes, &lt;u&gt;&lt;strong&gt;i'm starting a new job&lt;/strong&gt;&lt;/u&gt;!

tomorrow afternoon i'm gonna make another (better) post about it, right now i'm gonna kick it back on the train and maybe even get some (much needed) sleep..

take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3365234490318777016?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3365234490318777016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3365234490318777016' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3365234490318777016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3365234490318777016'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/10/battle-for-capital-of-scandinavia.html' title='The battle for the capital of Scandinavia'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2505506168163234678</id><published>2007-09-17T08:50:00.000+02:00</published><updated>2007-09-17T08:55:24.909+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>I Spy Silverlight</title><content type='html'>some things  tend to be true: taking things apart to see how they're built is always fun, regardless of age.

i'm sure a lot of you know of, and use, the .NET Reflector (if you don't know what it is, find out, it'll make coding a lot more interesting at times).

What you might not have heared of is the Silverlight Spy. Similar to the IE Dev Toolbar and Reflector you can get a glimse at what happens under the hood of a Silverlight app.

With built in support for navigating the underlying XAML and easy access to properties it's really quite a cool app to have, so go check it out if you're curious..

Further reading &amp;amp; Download: &lt;a href="http://www.firstfloorsoftware.com/SilverlightSpy"&gt;http://www.firstfloorsoftware.com/SilverlightSpy&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2505506168163234678?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2505506168163234678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2505506168163234678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2505506168163234678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2505506168163234678'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/09/i-spy-silverlight.html' title='I Spy Silverlight'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3266552227499244213</id><published>2007-09-05T14:56:00.000+02:00</published><updated>2007-09-05T14:59:35.390+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Silverlight 1.0 released</title><content type='html'>if i had to mention one blog/blogger that constantly keeps me interested, it's got to be Scott Guthrie and the posts he make.

like the title for this post says Silverlight 1.0 is now released, and all the details about it, about Moonlight (silverlight on linux) and more is right there in his post for you to read..

read more: &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/09/04/silverlight-1-0-released-and-silverlight-for-linux-announced.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2007/09/04/silverlight-1-0-released-and-silverlight-for-linux-announced.aspx&lt;/a&gt;

oh, yeah: i'm back from vacation. it was awesome and -so- much have happened in the last month (i'll post more once i'm able to/allowed).

until next post,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3266552227499244213?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3266552227499244213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3266552227499244213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3266552227499244213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3266552227499244213'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/09/silverlight-10-released.html' title='Silverlight 1.0 released'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1756906158296043541</id><published>2007-07-25T13:23:00.000+02:00</published><updated>2007-07-25T13:34:23.621+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Sitecore Search Engine Optimization (SEO) Module</title><content type='html'>well, alongside with the previous post this to is simply a heads-up reference to another (pre-)release that quietly got published yesterday: &lt;a href="http://sdn5.sitecore.net/Resources/Free%20Modules/Seo%20Toolkit.aspx"&gt;Sitecore SEO Toolkit&lt;/a&gt; (Search Engine Optimization module).

SEO is quite the &lt;em&gt;buzz&lt;/em&gt; and as hot as ever so a module like this comes really handy for people i'm sure.

do note that it's a preview release and expires january 1st, 2008.. but hey, that still gives you quite some time to have a go at it and provide them with feedback :)

More details:
&lt;a href="http://sdn5.sitecore.net/Resources/Free%20Modules/Seo%20Toolkit.aspx"&gt;http://sdn5.sitecore.net/Resources/Free%20Modules/Seo%20Toolkit.aspx&lt;/a&gt;
Documentation:
&lt;a href="http://sdn5.sitecore.net/Resources/Free%20Modules/Seo%20Toolkit/Documentation.aspx"&gt;http://sdn5.sitecore.net/Resources/Free%20Modules/Seo%20Toolkit/Documentation.aspx&lt;/a&gt;

Thanks for a very useful add-on!

Regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1756906158296043541?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1756906158296043541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1756906158296043541' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1756906158296043541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1756906158296043541'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/07/sitecore-search-engine-optimization-seo.html' title='Sitecore Search Engine Optimization (SEO) Module'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-9217116318304219673</id><published>2007-07-24T11:25:00.000+02:00</published><updated>2007-07-24T11:49:08.073+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><title type='text'>Sitecore Wizard Module</title><content type='html'>a while ago i wrote a small &lt;a href="http://usoniandream.blogspot.com/2007/02/tutorial-create-your-own-sitecore.html"&gt;tutorial&lt;/a&gt; detailing how to create your own sitecore wizard, some might have read it and used it, some not. that doesn't really matter anymore since sitecore has as of yesterday released their &lt;a href="http://sdn5.sitecore.net/resources/free%20modules/wizard.aspx"&gt;Sitecore Wizard Module&lt;/a&gt; which does a brilliant job at explaining it.

as a module it's a bit unlike all the others since it doesn't really do anything but help you understand the structure of sitecore wizards, but it's great at that and i strongly suggest you read the -really good- &lt;a href="http://sdn5.sitecore.net/Resources/Free%20Modules/Wizard/AdminGuide.aspx"&gt;admin guide&lt;/a&gt; and install it.

in the &lt;a href="http://sdn5.sitecore.net/Resources/Free%20Modules/Wizard/AdminGuide.aspx"&gt;Admin guide&lt;/a&gt; you'll find pretty much everything you ever wanted to know about Sitecore Wizards - and a lot more as well.

oh, and by the way: it's even &lt;a href="http://sdn5.sitecore.net/Products/Sitecore%20V5/SBSK.aspx"&gt;Sitecore Starter Kit&lt;/a&gt; &lt;em&gt;Plug and Play&lt;/em&gt;!

great job by Sitecore and &lt;a href="http://kerrybellerose.blogspot.com/"&gt;Kerry Bellerose&lt;/a&gt; - this will surely help a lot of people!

Go check it out: &lt;a href="http://sdn5.sitecore.net/resources/free%20modules/wizard.aspx"&gt;http://sdn5.sitecore.net/resources/free%20modules/wizard.aspx&lt;/a&gt;

Also, don't forget to check out the &lt;a href="http://sdn5.sitecore.net/Resources/Free%20Modules/Extranet.aspx"&gt;Extranet Module&lt;/a&gt;, another useful add-on available for you to grab &amp; use.

Further reading:
&lt;a href="http://kerrybellerose.blogspot.com/2007/07/bringing-wizards-to-desktop.html"&gt;http://kerrybellerose.blogspot.com/2007/07/bringing-wizards-to-desktop.html&lt;/a&gt;


Regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-9217116318304219673?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/9217116318304219673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=9217116318304219673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9217116318304219673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9217116318304219673'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/07/sitecore-wizard-module.html' title='Sitecore Wizard Module'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2274095812522176755</id><published>2007-07-12T17:15:00.000+02:00</published><updated>2007-07-12T17:22:12.612+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Christmas in February?</title><content type='html'>Microsoft has announced that Windows Server 2008,  SQL Server 2008 &amp; Visual Studio 2008 are all gonna be released on the 27th of February 2008..

can't wait :)


&lt;u&gt;further reading: &lt;/u&gt;

Johan Lindfors (SWE): &lt;a href="http://blogs.msdn.com/johanl/archive/2007/07/11/lanseringsdatum-annonserade.aspx"&gt;http://blogs.msdn.com/johanl/archive/2007/07/11/lanseringsdatum-annonserade.aspx&lt;/a&gt;

Kevin Turner (ENG): &lt;a href="http://www.microsoft.com/presspass/press/2007/jul07/07-10WPCDay1PartnersPR.mspx"&gt;http://www.microsoft.com/presspass/press/2007/jul07/07-10WPCDay1PartnersPR.mspx&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2274095812522176755?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2274095812522176755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2274095812522176755' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2274095812522176755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2274095812522176755'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/07/christmas-in-february.html' title='Christmas in February?'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4102747172501386739</id><published>2007-07-05T16:10:00.000+02:00</published><updated>2007-07-06T12:08:55.137+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Tutorial: Restore from Archive functionality</title><content type='html'>&lt;em&gt;&lt;span style="color:#666666;"&gt;this post applies to Sitecore v5.3.1&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;the archive database in sitecore is a feature that's easily missed and not taken full advantage of. how it can work best for you and your solution i'll leave to you to decide, but there is one thing you might get frustrated at, and that's the fact that there's no real Restore functionality available from the content editor.. well, that is, until now :)&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://2.bp.blogspot.com/_pr5a2BlM4eM/Ro0AZy9rUoI/AAAAAAAAADU/zksMwnWZD8Q/s1600-h/restorenow.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5083719997548352130" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_pr5a2BlM4eM/Ro0AZy9rUoI/AAAAAAAAADU/zksMwnWZD8Q/s400/restorenow.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Follow these steps and you'll have your very own Restore Now functionality for the archive.&lt;br /&gt;&lt;br /&gt;we're gonna: &lt;ul&gt;&lt;li&gt;Create a new command that will handle the restore functionality&lt;/li&gt;&lt;li&gt;Add the command to the config&lt;/li&gt;&lt;li&gt;Add a button to the Archive menu that will allow us to trigger the new command&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;step 1:&lt;/span&gt;&lt;/strong&gt; creating the code for the command&lt;/p&gt;&lt;p&gt;Create a new C# class and name it &lt;strong&gt;ArchiveRestoreCommand&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;add this code:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;using Sitecore;&lt;br /&gt;using Sitecore.Configuration;&lt;br /&gt;using Sitecore.Data;&lt;br /&gt;using Sitecore.Data.Archiving;&lt;br /&gt;using Sitecore.Shell;&lt;br /&gt;using Sitecore.Shell.Framework;&lt;br /&gt;using Sitecore.Shell.Framework.Commands;&lt;br /&gt;using Sitecore.SecurityModel;&lt;br /&gt;using Sitecore.Tasks;&lt;br /&gt;namespace usoniandream.extensions&lt;br /&gt;{&lt;br /&gt;[Serializable]&lt;br /&gt;public class&lt;br /&gt;ArchiveRestoreCommand : Command&lt;br /&gt;{&lt;br /&gt;public&lt;br /&gt;ArchiveRestoreCommand()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;public override void Execute(CommandContext context)&lt;br /&gt;{&lt;br /&gt;// make sure we only run this if we're in the archive database..&lt;br /&gt;if&lt;br /&gt;(Sitecore.Context.ContentDatabase==Sitecore.Configuration.Factory.GetDatabase("archive"))&lt;br /&gt;{&lt;br /&gt;//&lt;br /&gt;disable security to allow restoration of item..&lt;br /&gt;using (SecurityDisabler disabler = new SecurityDisabler())&lt;br /&gt;{&lt;br /&gt;// find archive item submitted&lt;br /&gt;ArchiveItem archiveItem =&lt;br /&gt;Sitecore.Context.ContentDatabase.GetItem(ID.Parse(context.Parameters[0]));&lt;br /&gt;if&lt;br /&gt;(archiveItem != null)&lt;br /&gt;{&lt;br /&gt;// reassure the archive is correct..&lt;br /&gt;Sitecore.Data.Archiving.Archive archive = archiveItem.Archive;&lt;br /&gt;if (archive!=null)&lt;br /&gt;{&lt;br /&gt;// restore item from the archive without removing it from the archive.. (change 'false' to 'true' to remove it)&lt;br /&gt;archive.RestoreItem(archiveItem, false);&lt;br /&gt;// broadcast success information..&lt;br /&gt;Context.ClientPage.ClientResponse.Alert("Item restored.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;// broadcast informative error for not being in the correct database..&lt;br /&gt;Context.ClientPage.ClientResponse.Alert("Restoring an item can only be done from the archive database.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public override CommandState QueryState(CommandContext context)&lt;br /&gt;{&lt;br /&gt;// only show this action if we're actually in the archive database&lt;br /&gt;if (Sitecore.Context.Database.Name!="archive")&lt;br /&gt;{&lt;br /&gt;return CommandState.Hidden;&lt;br /&gt;}&lt;br /&gt;return base.QueryState(context);&lt;br /&gt;}&lt;br /&gt;protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 2:&lt;/span&gt;&lt;/strong&gt; Add the command&lt;/p&gt;&lt;p&gt;compile the newly created code and open the &lt;em&gt;App_Config\commands.config&lt;/em&gt; file and add the following line to it:&lt;/p&gt;&lt;blockquote&gt;&amp;lt;command name="item:restore" type="usoniandream.extensions.ArchiveRestoreCommand,usoniandream.extensions"/&amp;gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 3:&lt;/span&gt;&lt;/strong&gt; Customizing the Sitecore archive menu&lt;/p&gt;&lt;p&gt;so, now that the above is all taken care of, go into Sitecore and switch to the &lt;em&gt;&lt;strong&gt;Core&lt;/strong&gt;&lt;/em&gt; database, then:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Navigate to &lt;u&gt;Sitecore\Content\Globals\Archives Menu&lt;/u&gt;&lt;/li&gt;&lt;li&gt;Duplicate the &lt;em&gt;Archive Now&lt;/em&gt; item and name the new one &lt;strong&gt;Restore Now&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Change the appropriate texts.. nice icon would be &lt;em&gt;Network\16x16\server_out.png&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Change the click to &lt;strong&gt;item:restore(id=$Target)&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Save!&lt;/u&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Hope you'll find this useful, next archive addition will hopefully be more useful, like a Preview or something.. &lt;/p&gt;&lt;p&gt;Take care,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4102747172501386739?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4102747172501386739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4102747172501386739' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4102747172501386739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4102747172501386739'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/07/tutorial-restore-from-archive.html' title='Tutorial: Restore from Archive functionality'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pr5a2BlM4eM/Ro0AZy9rUoI/AAAAAAAAADU/zksMwnWZD8Q/s72-c/restorenow.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-9070309029632622072</id><published>2007-07-01T12:21:00.001+02:00</published><updated>2007-07-01T12:26:26.432+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><title type='text'>WPF Showcase</title><content type='html'>I'm quite impressed by the Family.Show application written by the team at at Vertigo.

it's cool, clever and uses a lot of the neat things you'll love in WPF like templates, resources, animations, bindings and a lot more. furthermore the code is really well documented and well written, so for anyone that want's to learn more about it it's a good application to check out.

Family.Show info: &lt;a href="http://www.vertigo.com/familyshow.aspx"&gt;http://www.vertigo.com/familyshow.aspx&lt;/a&gt;
Family.Show source: &lt;a href="http://www.vertigo.com/downloads/familyshow/FamilyShowSource.zip"&gt;http://www.vertigo.com/downloads/familyshow/FamilyShowSource.zip&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-9070309029632622072?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/9070309029632622072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=9070309029632622072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9070309029632622072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9070309029632622072'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/07/wpf-showcase.html' title='WPF Showcase'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3834544475746527832</id><published>2007-07-01T12:12:00.000+02:00</published><updated>2007-07-01T12:13:48.872+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Debugging ASP.NET in IIS 7.0</title><content type='html'>Yeah, i know the posts have been short and not-so-frequent for a while now, sorry about that. guess one reason would be that i can barely use my right arm at the moment (long &amp; quite funny story). another reason is that there's a lot going on at the moment, but i'll get back into posting-mode in the near future.

If you're developing on Vista and debugging your ASP.NET applications that run on IIS 7.0 you've either had this problem a lot, or you'll soon run into it.

Without going into the details of it all i'll just say that once again it's Scott Guthrie to the rescue :)

Read more: Scott Guthrie on &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/06/27/public-hotfix-patch-available-for-debugging-asp-net-on-iis7.aspx"&gt;Public Hotfix Patch Available for Debugging ASP.NET on IIS7&lt;/a&gt;

if you've had problems debugging on Vista / IIS 7.0, read that post.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3834544475746527832?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3834544475746527832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3834544475746527832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3834544475746527832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3834544475746527832'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/07/debugging-aspnet-in-iis-70.html' title='Debugging ASP.NET in IIS 7.0'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1071693251787692995</id><published>2007-06-11T00:08:00.000+02:00</published><updated>2007-06-11T21:00:57.974+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='portals'/><title type='text'>Learning by doing</title><content type='html'>so.. it's sunday past midnight and i can't sleep at all - the heat is killing me (not that i'm complaining, i really like temperatures a lot above 0 than below). well, i thought i'd go give the Sitecore Intranet Portal a run for it's money and see what score i'd give it.

so, after downloading it, installing it (with it's own installer - always a nice thing) and then - finally - logging in to it to see it in action.. to see 'Required license missing'!

bah! i probably would've known that if i had taken a second or two to think about it before installing it, but this is the first time i've ever seen it happen when it's not caused by the fact that the license hasn't expired.. but hey - at least the installer ran smooth and neat and all that..

oh well, at least the weather is great. now i'll go try some other ideas i've been thinking about for 5.3 and leave the Intranet Portal for another day.

lessons learned:

#1: it installs great and easy and also has a lot of extra 'goodies'
#2: make sure your license covers what you're about to install

and finally: congratulations to Sitecore for being awarded the &lt;a href="http://www.sitecore.net/News/Breaking%20News/2007/6/InfoTech%20Research%20awards%20Sitecore%20with%20Leadership%20award.aspx"&gt;Leadership award for Web Content Management for Small Enterprises&lt;/a&gt; by Info-Tech Research!

&lt;span style="color:#990000;"&gt;&lt;u&gt;update&lt;/u&gt;&lt;/span&gt;: well, it's exactly like it should be: the license i use needs to be updated. it's as simple as that. so, for now i'll leave the Intranet Portal alone until i have a license compatible with it. (which, i hope, isn't gonna be too far in the future)

take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1071693251787692995?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1071693251787692995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1071693251787692995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1071693251787692995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1071693251787692995'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/06/learning-by-doing.html' title='Learning by doing'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3560025207581489466</id><published>2007-06-07T21:37:00.000+02:00</published><updated>2007-06-07T21:48:57.397+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><title type='text'>The big question finally answered?</title><content type='html'>well, maybe not.. but, i really like &lt;a href="http://allantech.blogspot.com"&gt;Allan Thræns blog&lt;/a&gt; - clever, fun &amp; really interesting posts. now he's written a 'Meaning of Life' quote generator that i could sit and watch all day.. check it out &lt;a href="http://allantech.blogspot.com/2007/06/meaning-of-life.html"&gt;here&lt;/a&gt;.

the full context of it is wicked, and he does a lot better job at explaining it than i could ever try to, so i'll just go with 'it rocks' and let you decide for yourself :)

Here's one of my all-time-fav's so far: 'Any intelligent fool can enjoy life'

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3560025207581489466?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3560025207581489466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3560025207581489466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3560025207581489466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3560025207581489466'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/06/big-question-finally-answered.html' title='The big question finally answered?'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-6454548781138134958</id><published>2007-06-06T23:48:00.000+02:00</published><updated>2007-06-06T23:53:28.716+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><title type='text'>Sitecore Small Business Starter Kit Update</title><content type='html'>The starter kit i blogged about earlier has gotten a fast overhaul and now has it's first update made available. for more info i suggest you read &lt;a href="http://kerrybellerose.blogspot.com/2007/06/starter-kit-update-rev-070531.html"&gt;this post&lt;/a&gt; by Kerry Bellerose.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-6454548781138134958?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/6454548781138134958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=6454548781138134958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6454548781138134958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6454548781138134958'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/06/sitecore-small-business-starter-kit.html' title='Sitecore Small Business Starter Kit Update'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-6322967385273560710</id><published>2007-05-30T01:55:00.000+02:00</published><updated>2007-05-30T03:03:25.436+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sitecore 5.3 AutoLink add-on</title><content type='html'>&lt;em&gt;&lt;span style="color:#999999;"&gt;this post applies to Sitecore v5.3.1&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So, i was thinking about the pipelines and processors available in Sitecore, and more specifically the availability of hooking into them and how it could be used on the rich text fields.. there's actually a great processor to use called uiSaveHtml that you can hook into - and so i wrote a small module/add-on that can be used to automatically convert word(s) to links, all specified in a sitecore structure and easily managed.&lt;br /&gt;&lt;br /&gt;Here's what i ended up doing, and if you follow these steps you'll have a working AutoLink add-on:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#009900;"&gt;step 1:&lt;/span&gt;&lt;/u&gt; creating the autolink item template and sample item&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;create a new template called '&lt;em&gt;&lt;strong&gt;autolinkitem&lt;/strong&gt;&lt;/em&gt;'. this template we will use to define each of the substituting 'autolinks'. now, go ahead and add the following fields to it:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;AutoLink&lt;/strong&gt; - text&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Target&lt;/strong&gt; - link&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;NewWindow&lt;/strong&gt; - checkbox&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;after that - save, build &amp; publish it.&lt;br /&gt;&lt;br /&gt;now we're going to wanna create a sample item so we'll know if it's working or not, so first create a folder somewhere called 'Autolinks' and then create a new autolinkitem (based on the above created template) in that folder (i've went with /sitecore/content/global/autolinks as the path for my folder) and set the fields to something nice..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_pr5a2BlM4eM/RlzIIbSB0lI/AAAAAAAAAC8/04k_7Ja6j6k/s1600-h/autolinks_1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5070147327600218706" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_pr5a2BlM4eM/RlzIIbSB0lI/AAAAAAAAAC8/04k_7Ja6j6k/s400/autolinks_1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;screenshot #1: the template &amp;amp; sample item&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#009900;"&gt;step 2:&lt;/span&gt;&lt;/u&gt; create the processor&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;create a new C# class library (or add to an existing one) that we'll use to store our code in and reference in the processor later on. throughout this post the namespace will be 'usoniandream.autolink' but you can of course name it whatever you wish.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;add a reference to System.Web (nice to have)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;add a reference to Sitecore.Kernel (don't copy local).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;add an empty class called &lt;em&gt;&lt;strong&gt;AutoLinkProcessor.cs&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;now, go ahead and add the following code to your new processor:&lt;br /&gt;&lt;blockquote&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using Sitecore;&lt;br /&gt;using Sitecore.Data.Items;&lt;br /&gt;using Sitecore.Data.Fields;&lt;br /&gt;using&lt;br /&gt;Sitecore.Pipelines;&lt;br /&gt;using Sitecore.Pipelines.SaveHtml;&lt;br /&gt;using&lt;br /&gt;Sitecore.SecurityModel;&lt;br /&gt;using System.Text;&lt;br /&gt;using&lt;br /&gt;System.Text.RegularExpressions;&lt;br /&gt;namespace usoniandream.autolink.pipelines&lt;br /&gt;{&lt;br /&gt;public class AutoLinkProcessor&lt;br /&gt;{&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;///&lt;br /&gt;processor for handling the autolink replacement of words to links&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="args"&gt;SaveHtmlArgs&lt;/param&gt;&lt;br /&gt;public void&lt;br /&gt;Process(Sitecore.Pipelines.SaveHtml.SaveHtmlArgs args)&lt;br /&gt;{&lt;br /&gt;// make sure we&lt;br /&gt;only do this for the items that actually has some body html to parse&lt;br /&gt;if&lt;br /&gt;(args.Body!="")&lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// find our root folder for the autolink&lt;br /&gt;items&lt;br /&gt;Item autolinkfolder =&lt;br /&gt;Sitecore.Context.ContentDatabase.Items[Sitecore.Configuration.Settings.GetSetting("usoniandream.autolinks.rootfolder")];&lt;br /&gt;if (autolinkfolder != null)&lt;br /&gt;{&lt;br /&gt;// try to get the autolink items&lt;br /&gt;Item[] itms = autolinkfolder.Axes.SelectItems(autolinkfolder.Paths.Path +&lt;br /&gt;"/*[@@templatekey='autolinkitem']");&lt;br /&gt;if (itms != null)&lt;br /&gt;{&lt;br /&gt;// log it&lt;br /&gt;for informational purposes&lt;br /&gt;Sitecore.Diagnostics.Log.Info("found " +&lt;br /&gt;itms.Length.ToString() + " autolinks to try and patch with..", "AutoLinks");&lt;br /&gt;// handle it as a List instead of an array (simply easier)&lt;br /&gt;List&lt;item&gt;&lt;br /&gt;autolinks = new List&lt;item&gt;(itms);&lt;br /&gt;// make sure we got some autolinks to&lt;br /&gt;parse with&lt;br /&gt;if (autolinks != null &amp;&amp;amp; autolinks.Count &gt; 0)&lt;br /&gt;{&lt;br /&gt;// perform the replacement(s)&lt;br /&gt;args.Body = AutoLink(args.Body,&lt;br /&gt;autolinks);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;// log that we didn't find any items&lt;br /&gt;Sitecore.Diagnostics.Log.Info("unable to find autolink items..",&lt;br /&gt;"autolink");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;// log that the folder is missing&lt;br /&gt;Sitecore.Diagnostics.Log.Info("unable to find autolink items root folder..",&lt;br /&gt;"autolink");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch (Exception exception)&lt;br /&gt;{&lt;br /&gt;// add the&lt;br /&gt;message to the argument and log it for informational purposes&lt;br /&gt;args.AddMessage(exception.ToString(),PipelineMessageType.Warning);&lt;br /&gt;Sitecore.Diagnostics.Log.Error("autolink error:", exception, "autolink");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Initiates the process of iterating&lt;br /&gt;through the autolink items&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="text"&gt;the body&lt;br /&gt;to link within&lt;/param&gt;&lt;br /&gt;/// &lt;param name="autolinks"&gt;Generic List of items&lt;br /&gt;containing autolink information&lt;/param&gt;&lt;br /&gt;/// &lt;returns&gt;the finished body html&lt;br /&gt;now with linked words&lt;/returns&gt;&lt;br /&gt;private string AutoLink(string text,&lt;br /&gt;List&lt;item&gt; autolinks)&lt;br /&gt;{&lt;br /&gt;LinkField lf;&lt;br /&gt;foreach (Item itm in&lt;br /&gt;autolinks)&lt;br /&gt;{&lt;br /&gt;lf = (LinkField)itm.Fields["target"];&lt;br /&gt;if (lf!=null)&lt;br /&gt;{&lt;br /&gt;text = ReplaceWithAutoLinks(text, itm["autolink"], lf.Url,&lt;br /&gt;itm["newwindow"]);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;return text;&lt;br /&gt;}&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;///&lt;br /&gt;Replaces all occurances of a word with the specified link text&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="text"&gt;body html to replace within&lt;/param&gt;&lt;br /&gt;/// &lt;param name="search"&gt;the word to search for&lt;/param&gt;&lt;br /&gt;/// &lt;param name="link"&gt;the url to link to&lt;/param&gt;&lt;br /&gt;/// &lt;param name="newWindow"&gt;taken&lt;br /&gt;from the checkbox field&lt;/param&gt;&lt;br /&gt;/// &lt;returns&gt;System.String&lt;/returns&gt;&lt;br /&gt;private string ReplaceWithAutoLinks(string text, string search, string link,&lt;br /&gt;string newWindow)&lt;br /&gt;{&lt;br /&gt;// make sure we don't parse any uneccessary item&lt;br /&gt;data that isn't properly entered..&lt;br /&gt;if (text!=string.Empty &amp;&amp;amp;&lt;br /&gt;search!=string.Empty &amp;&amp;amp; link!=string.Empty)&lt;br /&gt;{&lt;br /&gt;// build our&lt;br /&gt;replacement link&lt;br /&gt;string replacewith = " &amp;lt;a href="/" alt="'\"&amp;gt;"&lt;br /&gt;+ search + "&amp;lt;/a&amp;gt; ";&lt;br /&gt;// define our (sorry, but extremely weak)&lt;br /&gt;regex pattern that'll match our words with whitespaces before and after it..&lt;br /&gt;string pattern = @"\s" + search + @"\s";&lt;br /&gt;// redefine the replacement&lt;br /&gt;link if it's for a new window&lt;br /&gt;if (newWindow == "1")&lt;br /&gt;{&lt;br /&gt;replacewith =&lt;br /&gt;" &amp;lt;a href="/" target="'\" alt="'\"&amp;gt;" + search +&lt;br /&gt;"&amp;lt;/a&amp;gt; ";&lt;br /&gt;}&lt;br /&gt;// log it so we know what's happening..&lt;br /&gt;Sitecore.Diagnostics.Log.Info("autolink pattern '" + pattern + "' will be&lt;br /&gt;replaced with '" + replacewith, "autolink");&lt;br /&gt;// return the parsed text&lt;br /&gt;text = System.Text.RegularExpressions.Regex.Replace(text, pattern,&lt;br /&gt;replacewith, RegexOptions.IgnoreCase);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;Sitecore.Diagnostics.Log.Error("autolink couldn't parse since the input data&lt;br /&gt;wasn't properly supplied", "autolink");&lt;br /&gt;}&lt;br /&gt;return text;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;once that's done we're gonna have to &lt;u&gt;compile it and make sure it ends up in the bin folder&lt;/u&gt; so the system can find it when we're gonna call it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#009900;"&gt;step 3:&lt;/span&gt;&lt;/u&gt; editing the web.config file and hooking into the processor&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;now that we're ready to go and have our code put to use we'll need to tell sitecore that it should, so here's what we're gonna do:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;locate the &lt;strong&gt;uiSaveHtml&lt;/strong&gt; processor element in the web.config file&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;add the following line within it as the first processor in the list:&lt;br /&gt;&lt;br /&gt;&amp;lt;processor type="usoniandream.autolink.pipelines.AutoLinkProcessor, usoniandream.autolink" mode="on"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;add a setting so we can easily find our autolinks root folder&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;add the following line anywhere within the Settings section:&lt;br /&gt;&lt;br /&gt;&amp;lt;setting name="usoniandream.autolinks.rootfolder" value="/sitecore/content/global/autolinks"&amp;gt;&lt;br /&gt;&lt;br /&gt;as you can see that setting points to a folder i mentioned earlier in the post, but as always you can name it anything you like and have it point anywhere you like.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;save the web.config file&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#33cc00;"&gt;&lt;u&gt;step 4:&lt;/u&gt;&lt;/span&gt; the finished product&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;now you're all set and ready to run the finished add-on! Open the content editor and go to any item that has a rich &lt;em&gt;text field&lt;/em&gt; on it, double click it so it opens in the editor, write the autolink word(s) that you specified in your sample item (created in step 1) somewhere and click on &lt;em&gt;Accept.&lt;/em&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_pr5a2BlM4eM/RlzIPLSB0mI/AAAAAAAAADE/kdNS0FYrx84/s1600-h/autolinks_2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5070147443564335714" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/RlzIPLSB0mI/AAAAAAAAADE/kdNS0FYrx84/s400/autolinks_2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;screenshot #2: text before it's automatically converted (just plain text in a richtext field)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Assuming you've followed the above steps correctly you should now see that the word has been replaced with a link instead.&lt;br /&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_pr5a2BlM4eM/RlzIUbSB0nI/AAAAAAAAADM/ajT48poigjE/s1600-h/autolinks_3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5070147533758648946" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_pr5a2BlM4eM/RlzIUbSB0nI/AAAAAAAAADM/ajT48poigjE/s400/autolinks_3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;screenshot #3: automatically converted the word 'sitecore' to a link to the sitecore website&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color:#009900;"&gt;step 5:&lt;/span&gt;&lt;/u&gt; go to bed..&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;well, that's it for me. time for some much needed sleep.&lt;br /&gt;&lt;br /&gt;take care,&lt;br /&gt;&lt;br /&gt;P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-6322967385273560710?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/6322967385273560710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=6322967385273560710' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6322967385273560710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6322967385273560710'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/05/sitecore-53-autolink-add-on.html' title='Sitecore 5.3 AutoLink add-on'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pr5a2BlM4eM/RlzIIbSB0lI/AAAAAAAAAC8/04k_7Ja6j6k/s72-c/autolinks_1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8760797512270076863</id><published>2007-05-25T21:17:00.000+02:00</published><updated>2007-05-28T14:05:34.429+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sitecore Small Business Starter Kit</title><content type='html'>Well, the title pretty much says it all.. Sitecore has, as of today (i think), released a version of the installer for v5.3.1 called &lt;a href="http://sdn5.sitecore.net/Products/Sitecore%20V5/SBSK.aspx"&gt;Sitecore Small Business Starter kit&lt;/a&gt;  and it is the kind of istaller that you'd love to have on you everywhere you go - and as soon as you get the question 'so, how great is it?', all you'll have to do from now on is to run the setup and show off the result..&lt;br /&gt;&lt;br /&gt;weighting in at 238MB it's a big installer and could be argued that it's way to big to even consider downloading - but man it really does pull it off!&lt;br /&gt;&lt;br /&gt;&lt;u&gt;short version: &lt;/u&gt;there's now an installer that installs sitecore v5.3.1 just as it used to, but above that is the treat: a fully functioning, multi-purpose, highly customizable and easy to manage site that you can deploy to a customer in hours instead of days/weeks/months.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#666666;"&gt;(i sure hope i can actually post the screenshots of this, because i really think it's something you all should download and try for yourselves.. and, if it turns out i'm not allowed to, well, then the screenshots will go away... )&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;what the heck am i talking about? i'm talking about this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_pr5a2BlM4eM/Rlc_LLSB0gI/AAAAAAAAACU/LqPrGQpCZKo/s1600-h/installer.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5068589366868300290" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_pr5a2BlM4eM/Rlc_LLSB0gI/AAAAAAAAACU/LqPrGQpCZKo/s400/installer.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Your regular, out-of-the-box, fully functional sitecore installer..&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://4.bp.blogspot.com/_pr5a2BlM4eM/Rlc_RbSB0hI/AAAAAAAAACc/EIWXZ-MQGrU/s1600-h/sitecore.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5068589474242482706" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/Rlc_RbSB0hI/AAAAAAAAACc/EIWXZ-MQGrU/s400/sitecore.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;.. that gives you your regular, out-of-the-box, fully functional sitecore cms..&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://1.bp.blogspot.com/_pr5a2BlM4eM/Rlc_crSB0iI/AAAAAAAAACk/3_tY0he24mc/s1600-h/sitecore_yoursite.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5068589667516011042" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_pr5a2BlM4eM/Rlc_crSB0iI/AAAAAAAAACk/3_tY0he24mc/s400/sitecore_yoursite.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;but there's more! it also gives you your very own, ready-to-run, fully-functional website..&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_pr5a2BlM4eM/Rlc_kbSB0jI/AAAAAAAAACs/InTDtOAEh8Y/s1600-h/sitecore_samplesite.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5068589800659997234" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/Rlc_kbSB0jI/AAAAAAAAACs/InTDtOAEh8Y/s400/sitecore_samplesite.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;.. complete with your very own, not so standard, sample site to see how it all can come together..&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_pr5a2BlM4eM/Rlc_qbSB0kI/AAAAAAAAAC0/KOdoXlZf49c/s1600-h/sitecore_helpsite.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5068589903739212354" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/Rlc_qbSB0kI/AAAAAAAAAC0/KOdoXlZf49c/s400/sitecore_helpsite.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;.. and finally, your very own, just like you'd like to have it, fully functional help site that describes just about all there is to know and do about the Sitecore Small Business Startup Kit!&lt;/div&gt;&lt;br /&gt;oh, don't get fooled by the resolution - all the screenshots are from my tablet-pc, and they just don't grant you the luxury of a fantastic screen size, so you'll have to live with that.&lt;br /&gt;&lt;br /&gt;Ok, i'll admit it, i'm a 100% certified Sitecore fanatic, but man - this is really a installer that you can bring to the customer and prove the many benefits the product has - all without having to write a single line of code and it's all available there for you to grab and start using!&lt;br /&gt;&lt;br /&gt;conclusion: an awesome job that really makes a tedious task incredibly easy &amp;amp; eye-catching!&lt;br /&gt;&lt;br /&gt;and on that note i'll end this sitecore-praise post.&lt;br /&gt;&lt;br /&gt;take care,&lt;br /&gt;&lt;br /&gt;P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8760797512270076863?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8760797512270076863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8760797512270076863' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8760797512270076863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8760797512270076863'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/05/sitecore-small-business-starter-kit.html' title='Sitecore Small Business Starter Kit'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pr5a2BlM4eM/Rlc_LLSB0gI/AAAAAAAAACU/LqPrGQpCZKo/s72-c/installer.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3204725559138838629</id><published>2007-05-21T15:19:00.000+02:00</published><updated>2007-05-21T15:32:36.592+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>EXIF data from MediaItem</title><content type='html'>Reading EXIF data from sitecore media items is probably gonna be -a lot- easier in the future, but as far as i can tell there's no easy way of doing it so far..

Hopefully there's a better (and easier) way of getting EXIF information, but i didn't have time to find it, and this works, so it'll do for now :)

The following code will return the resolution specific EXIF information of a passed in MediaItem:

&lt;blockquote&gt;public string GetImageResolution(Sitecore.Data.Items.MediaItem mi)
{
//
check item before we begin
if (mi != null)
{
// inject the stream from
the media item to an image (needed to get exif reader
running)
System.Drawing.Image img =
System.Drawing.Image.FromStream(mi.GetMediaStream());
if
(img!=null)
{
// init a new exif reader
Sitecore.Drawing.Exif.Reader
ExifReader = new Sitecore.Drawing.Exif.Reader(img);
if (ExifReader !=
null)
{
// allocate the different types of properties we're gonna be
using
Sitecore.Drawing.Exif.Properties.Property
prop;
Sitecore.Drawing.Exif.Properties.UInt16Property
u16prop;
Sitecore.Drawing.Exif.Properties.RationalProperty rprop;
// start
fetching properties..
prop =
ExifReader.GetProperty((int)Sitecore.Drawing.Exif.Properties.Tag.ResolutionUnit);
if
(prop != null)
{
// first is a UInt16 property that we'll step through and
see what type it is..
u16prop =
(Sitecore.Drawing.Exif.Properties.UInt16Property)prop;
if
(u16prop!=null)
{
// get the resolution unit
string resUnit =
"dpi";
switch (u16prop[0])
{
case 1:
resUnit =
"n/a";
break;
case 2:
resUnit = "dpi";
break;
case 3:
resUnit
= "dpcm";
break;
}
// now go fetch the two remaining properties
(they're both rational properties)
// horizontal resolution
string
horzRes = "1/72";
prop =
ExifReader.GetProperty((int)Sitecore.Drawing.Exif.Properties.Tag.XResolution);
if
(prop != null)
{
// cast it to rational property
rprop =
(Sitecore.Drawing.Exif.Properties.RationalProperty)prop;
if (rprop !=
null)
{
if (rprop.Values[0].ToString() != "")
{
horzRes =
rprop.Values[0].ToString();
// try to calculate it appropriately.. (sucks,
but we gotta do it unless we want mumbo jumbo text to appear..)..
string[]
hstrs = rprop.Values[0].ToString().Split('/');
if
(hstrs.Length&gt;0)
{
// format the string
horzRes =
string.Format("{0}", (double.Parse(hstrs[0].Trim()) /
double.Parse(hstrs[1].Trim())));
}
}
}
}
// repeat for
vertical
string vertRes = "1/72";
prop =
ExifReader.GetProperty((int)Sitecore.Drawing.Exif.Properties.Tag.YResolution);
if
(prop != null)
{
// cast it to rational property
rprop =
(Sitecore.Drawing.Exif.Properties.RationalProperty)prop;
if (rprop !=
null)
{
if (rprop.Values[0].ToString() != "")
{
vertRes =
rprop.Values[0].ToString();
// try to calculate it appropriately.. (sucks,
but we gotta do it unless we want mumbo jumbo text to appear..)..
string[]
vstrs = rprop.Values[0].ToString().Split('/');
if (vstrs.Length &gt;
0)
{
// format the string
vertRes = string.Format("{0}",
(double.Parse(vstrs[0].Trim()) /
double.Parse(vstrs[1].Trim())));
}
}
}
}
// finally format the
output and return it
return string.Format("{0} {1} x {2} {3}", horzRes,
resUnit, vertRes, resUnit);
}
}
}
}
}
return "";
}&lt;/blockquote&gt;
The resulting output will give you a string along the lines of &lt;strong&gt;'300 dpi x 300 dpi&lt;/strong&gt;'

Regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3204725559138838629?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3204725559138838629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3204725559138838629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3204725559138838629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3204725559138838629'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/05/exif-data-from-mediaitem.html' title='EXIF data from MediaItem'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-5303262254649246926</id><published>2007-05-10T11:54:00.000+02:00</published><updated>2007-05-10T11:56:58.178+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Barcelona</title><content type='html'>well, i'm off for Barcelona where i'll be enjoying the sun and some great Formula-1 action.

sorry for the lack of interesting posts lately - when i get back i'm gonna start another series of posts and tutorials to make up for it.

Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-5303262254649246926?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/5303262254649246926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=5303262254649246926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5303262254649246926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5303262254649246926'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/05/barcelona.html' title='Barcelona'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7407260400694593276</id><published>2007-04-25T16:48:00.000+02:00</published><updated>2007-04-25T17:04:37.266+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>london calling</title><content type='html'>watch out - here we come.
tomorrow evening we're back in london again.

awesome.

it's been &lt;em&gt;-way-&lt;/em&gt; to long since our last visit, so this trip feels extra special in many ways.

camden town. soho. shoreditch. - bring it on.
fry up. beer at lunchtime. walks along the thames. - bring it on.
the white horse. the lock tavern. catch. - bring it on.

this weekend is gonna rock!


adios,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7407260400694593276?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7407260400694593276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7407260400694593276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7407260400694593276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7407260400694593276'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/04/london-calling.html' title='london calling'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-5852224700965570302</id><published>2007-04-20T10:53:00.000+02:00</published><updated>2007-04-20T10:57:45.535+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Visual Studio Code Name "Orcas"</title><content type='html'>for those of you interested, Visual Studio Code Name "Orcas" is now available in Beta 1 download - and even as VPC downloads for the people that like to try it without installing it..

download link: &lt;a href="http://msdn2.microsoft.com/en-GB/vstudio/aa700831.aspx"&gt;http://msdn2.microsoft.com/en-GB/vstudio/aa700831.aspx&lt;/a&gt;

whitepaper: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=17319EB4-299C-43B8-A360-A1C2BD6A421B&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=17319EB4-299C-43B8-A360-A1C2BD6A421B&amp;amp;displaylang=en&lt;/a&gt;

regards,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-5852224700965570302?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/5852224700965570302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=5852224700965570302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5852224700965570302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5852224700965570302'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/04/visual-studio-code-name-orcas.html' title='Visual Studio Code Name &quot;Orcas&quot;'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7075612875332477440</id><published>2007-04-03T15:32:00.000+02:00</published><updated>2007-04-03T16:11:29.685+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sitecore 5.3.1 - UI changes</title><content type='html'>While a lot of changes took place in the config files Sitecore has really made improvements to the UI as well.&lt;br /&gt;&lt;br /&gt;After first installing the 5.3.1 version what hits you right away is the new login page. With an improved appearance and additional features such as browser identification and phishing filter detection, along with the easy (and understandable) selections you can make this is really a step forward and will make many customers happy.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_pr5a2BlM4eM/RhJa6ZAWjNI/AAAAAAAAABs/9GYNnXKIgA0/s1600-h/login.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5049198091427024082" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/RhJa6ZAWjNI/AAAAAAAAABs/9GYNnXKIgA0/s400/login.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;new login screens&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;(on a sidenote i personally find it a bit annoying that if you login to the &lt;em&gt;content editor&lt;/em&gt; directly there's really no easy way to log out or access the sitecore 'start' menu, but hey - that's just me i suppose - you can always wait for it to time out or hit the sitecore logo and close the content editor)&lt;br /&gt;&lt;br /&gt;Given i haven't yet had a chance to dig deeper into the new version i'll just leave you with some screenshots &amp;amp; comments. however, one thing i did notice (and really like) is that the ribbon is now easily configurable via both a context menu and it's very own wizard/application. good stuff!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_pr5a2BlM4eM/RhJcepAWjOI/AAAAAAAAAB0/b3g_yw8bbEo/s1600-h/ribbon_context_1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5049199813708909794" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_pr5a2BlM4eM/RhJcepAWjOI/AAAAAAAAAB0/b3g_yw8bbEo/s400/ribbon_context_1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ribbon context menu&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_pr5a2BlM4eM/RhJce5AWjPI/AAAAAAAAAB8/1IDtmCpqPXs/s1600-h/ribbon_context_2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5049199818003877106" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_pr5a2BlM4eM/RhJce5AWjPI/AAAAAAAAAB8/1IDtmCpqPXs/s400/ribbon_context_2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;developer ribbon (with options to copy Item ID or Path to the clipboard)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_pr5a2BlM4eM/RhJce5AWjQI/AAAAAAAAACE/45LWpZhJMm8/s1600-h/ribbon_editor_2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5049199818003877122" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_pr5a2BlM4eM/RhJce5AWjQI/AAAAAAAAACE/45LWpZhJMm8/s400/ribbon_editor_2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;the ribbon editor&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;there is one more thing i noticed, and it really struck a curious nerve in me - there's now a &lt;em&gt;__inherits security&lt;/em&gt; field on the edit user wizard.. for what i'm not sure, but it did indeed make me curious..&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_pr5a2BlM4eM/RhJeDZAWjRI/AAAAAAAAACM/jKamQklSgcU/s1600-h/edit_user_inherit_security_highlight.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5049201544580730130" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_pr5a2BlM4eM/RhJeDZAWjRI/AAAAAAAAACM/jKamQklSgcU/s400/edit_user_inherit_security_highlight.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt; inherit security field in user editor&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So what's the verdict? well.. given the improvements seen so far and the anticipation i have on future releases, i too will give this release an 8. Excellent work by the lads indeed.&lt;br /&gt;&lt;br /&gt;well, that's it for now.&lt;br /&gt;&lt;br /&gt;take care,&lt;br /&gt;&lt;br /&gt;P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7075612875332477440?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7075612875332477440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7075612875332477440' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7075612875332477440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7075612875332477440'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/04/sitecore-531-ui-changes.html' title='Sitecore 5.3.1 - UI changes'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_pr5a2BlM4eM/RhJa6ZAWjNI/AAAAAAAAABs/9GYNnXKIgA0/s72-c/login.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2118358685675368760</id><published>2007-04-03T15:09:00.000+02:00</published><updated>2007-04-03T15:31:29.070+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sitecore 5.3.1 - Config changes</title><content type='html'>Since there are -quite a lot more- changes from 5.3.0 to 5.3.1 than the actual release notes says, i thought i'd put together a list of what has happened in the web.config and commands.config files.

All together the changes are very nice and there's a lot of new additions regarding various media parts.

&lt;u&gt;&lt;strong&gt;Commands.Config changes:&lt;/strong&gt;&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;&lt;em&gt;clipboard:copyidtoclipboard&lt;/em&gt; command added&lt;/li&gt;&lt;li&gt;&lt;em&gt;clipboard:copypathtoclipboard&lt;/em&gt; command added&lt;/li&gt;&lt;li&gt;&lt;em&gt;webedit:edit&lt;/em&gt; command added&lt;/li&gt;&lt;li&gt;&lt;em&gt;webedit:save&lt;/em&gt; command added&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Web.Config changes:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;forceDownload&lt;/em&gt; option added to the MimeTypes sections&lt;/li&gt;&lt;li&gt;2 new customHandlers:
"~/rest/" for sitecore_rest.ashx
"~/icon/" for sitecore_icon.ashx&lt;/li&gt;&lt;li&gt;Hook for MemoryMonitorHook has the following added:
&amp;lt;ClearCaches&amp;gt;true&amp;lt;/ClearCaches&amp;gt;
&amp;lt;GarbageCollect&amp;gt;true&amp;lt;/GarbageCollect&amp;gt;
&amp;lt;AdjustLoadFactor&amp;gt;true&amp;lt;/AdjustLoadFactor&amp;gt;&lt;/li&gt;&lt;li&gt;Agent added to clean up publishing queue:
&lt;em&gt;Sitecore.Tasks.CleanupPublishQueue&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;renderLayout&lt;/em&gt; pipeline has the following processors added:
InsertPlaceholders
CreateDynamicChildControls
BuildPage&lt;/li&gt;&lt;li&gt;&lt;em&gt;uiUpload&lt;/em&gt; pipeline has the following processor added:
CheckSize&lt;/li&gt;&lt;li&gt;&amp;lt;sites&amp;gt; configuration has an additional &lt;em&gt;masterDatabase&lt;/em&gt; param that defines the database containing the data to be shown in preview and web edit modes.&lt;/li&gt;&lt;li&gt;&lt;em&gt;AutomaticDataBind&lt;/em&gt; setting changed from "true" to "false"&lt;/li&gt;&lt;li&gt;&lt;em&gt;Caching.DefaultClientDataCacheSize&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;EnableXslDocumentFunction&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Login.SitecoreUrl&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;MaxItemNameLength&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.BaseFolder&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.IncludeExtensionsInItemNames&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.InterpolationMode&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.MaxSizeInDatabase&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.MaxSizeInMemory&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.UploadAsFiles&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.UploadAsVersionableByDefault&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.UseLegacyResizing&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.UseResourceAssembly&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Media.WhitespaceReplacement&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Tasks.EmailReminderSubject&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Tasks.EmailReminderText&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Templates.DefaultTemplateEditor&lt;/em&gt; setting removed&lt;/li&gt;&lt;li&gt;&lt;em&gt;UI.CalendarTimeOfDay&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;Upload.UserSelectableDestination&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;UnlockAfterCopy&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;&lt;em&gt;VersionFilePath&lt;/em&gt; setting added&lt;/li&gt;&lt;li&gt;"sc" &lt;em&gt;tagPrefix&lt;/em&gt; added to the &amp;lt;controls&amp;gt; section of &amp;lt;pages&amp;gt;&lt;/li&gt;&lt;li&gt;3 new &lt;em&gt;httpHandlers&lt;/em&gt; added:
sitecore_rest.ashx
sitecore_xaml.ashx
sitecore_icon.ashx&lt;/li&gt;&lt;li&gt;System, System.Web, System.Configuration, System.Drawing, System.Xml, System.Data, System.Web.Services, System.DirectoryServices, System.DirectoryServices.Protocols, System.EnterpriseServices, System.Design, System.ServiceProcess, System.Windows.Forms, System.Web.RegularExpressions added to the &lt;em&gt;compilation&lt;/em&gt; &lt;em&gt;&amp;lt;assemblies&amp;gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;and last but not least - the &lt;em&gt;MimeTypes.config&lt;/em&gt; file is now included in the App_Config folder

 &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2118358685675368760?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2118358685675368760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2118358685675368760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2118358685675368760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2118358685675368760'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/04/sitecore-531-config-changes.html' title='Sitecore 5.3.1 - Config changes'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8158291315797831244</id><published>2007-03-28T23:33:00.000+02:00</published><updated>2007-03-28T23:35:50.351+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><title type='text'>Sitecore 5.3.1</title><content type='html'>Once again Alex is first-in-line noticing all the sweet stuff ;) so, this time i'm just gonna point you to something -really- worth reading: &lt;a href="http://sitecore.alexiasoft.nl/2007/03/28/just-released-531"&gt;http://sitecore.alexiasoft.nl/2007/03/28/just-released-531&lt;/a&gt;

how many points it'll get from me will have to wait until i'm back from prague:)

Have a great weekend,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8158291315797831244?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8158291315797831244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8158291315797831244' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8158291315797831244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8158291315797831244'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/03/sitecore-531.html' title='Sitecore 5.3.1'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2935772513388559691</id><published>2007-03-16T10:39:00.000+01:00</published><updated>2007-03-21T10:26:13.244+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Five things you might not know about me</title><content type='html'>In response to &lt;a href="http://sitecore.alexiasoft.nl"&gt;Alex&lt;/a&gt;'s tag (sorry, better late than never) and the "&lt;a href="http://sitecore.alexiasoft.nl/2007/01/01/january-welcome-five-thing-you-might-not-know-about-me"&gt;five things you might not know about me&lt;/a&gt;" post he made, i'll step up to the plate: five things you might not know about &lt;em&gt;me&lt;/em&gt;:
&lt;ol&gt;&lt;li&gt;I was born on the 12th of april 1980 in a small town called Piteå, which is located -really- far up in the northern parts of Sweden. On that same day, just 8 minutes later, my twin brother was born. yep, identical twins.&lt;/li&gt;&lt;li&gt;At school i didn't really care much, all i wanted to do involved either photography or music, and from that time in my life i fully mastered the art of... um.. drinking tons of coffee.&lt;/li&gt;&lt;li&gt;I've lived in a few different countries, but the most memorable time was when i lived and worked in London for 18 months - probably the craziest and best 18 months ever. Today i'm back in Stockholm, Sweden.&lt;/li&gt;&lt;li&gt;I'm an addict when it comes to: guitars, music, nicotine, techology, party, discgolf, code, architecture &amp; extreme sports of various forms.&lt;/li&gt;&lt;li&gt;After all the years at my previous employment (Morningstar) i know way to much about mutual funds, equities and all that fancy financial lingo. Not really of much use to me today but it was still an amazing time spent where i had the privelege of getting to know a lot of great and skilled people all over the world. How many investments have i got in mutual funds today? the answer to that is simple: none at all ;)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;that's it: five things you might not know about me.&lt;/p&gt;&lt;p&gt;have a great weekend,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2935772513388559691?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2935772513388559691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2935772513388559691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2935772513388559691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2935772513388559691'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/03/five-thing-you-might-not-know-about-me.html' title='Five things you might not know about me'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7189101643658955141</id><published>2007-03-09T15:02:00.000+01:00</published><updated>2007-03-09T16:19:48.727+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><title type='text'>Tutorial: Making use of Ribbons and Galleries</title><content type='html'>&lt;em&gt;This post applies to Sitecore 5.3&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;What really rocks when it comes to Sitecore 5.3 is a lot, but one of the greatest user features must surely be &lt;em&gt;Ribbons&lt;/em&gt;, and especially the &lt;strong&gt;&lt;em&gt;Galleries&lt;/em&gt; &lt;/strong&gt;(well, at least in my opinion) and so, that's what i'm gonna cover in this post.&lt;br /&gt;&lt;br /&gt;Galleries are, in sitecore, &lt;em&gt;XAML / Sheer UI controls&lt;/em&gt; that enable you to have a lot more flexible content in the menu than traditional menus would allow. They're based on the &lt;em&gt;&amp;lt;gallery&amp;gt; &lt;/em&gt;control with the base of &lt;em&gt;GalleryForm&lt;/em&gt; and are easy enough to create - the real trick is to know when you want to have a gallery and when a button/combo button is more appropriate.&lt;br /&gt;&lt;br /&gt;The relations between ribbons, chunks &amp; strips can be awkward at a first look, but they're really not chaotic at all..&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ribbons contain Strips&lt;/li&gt;&lt;li&gt;Strips contain Chunks&lt;/li&gt;&lt;li&gt;Chunks contain, well, whatever you want..&lt;/li&gt;&lt;/ul&gt;Easiest way to go about making our own are to go through the list in reverse and create a Chunk, then a Strip and then add the Strip to a Ribbon.&lt;br /&gt;&lt;br /&gt;Theoretically you could add whatever you want to the Chunk, but button-wise the commonly used ones are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Large Button&lt;/li&gt;&lt;li&gt;Large Combo Button&lt;/li&gt;&lt;li&gt;Large Gallery Button&lt;/li&gt;&lt;li&gt;Small Button&lt;/li&gt;&lt;li&gt;Small Combo Button&lt;/li&gt;&lt;li&gt;Small Gallery Button&lt;/li&gt;&lt;/ul&gt;and actually, you can break it down even further since Large and Small are just variations of the same buttons but appear different, so what we're left with is:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Button&lt;/li&gt;&lt;li&gt;Combo Button&lt;/li&gt;&lt;li&gt;Gallery Button&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For this tutorial let's use a scenario where we want to have easy access to a userlist that would enable us to have a fast way to toggle a users write permission on the current item.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_pr5a2BlM4eM/RfF6042AWTI/AAAAAAAAABg/ood2e4d79NU/s1600-h/toggleaccess2.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5039944507034982706" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_pr5a2BlM4eM/RfF6042AWTI/AAAAAAAAABg/ood2e4d79NU/s400/toggleaccess2.gif" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So, the approach to creating this gallery is the same as when creating any sitecore control, and that is: &lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;create the layout&lt;/li&gt;&lt;li&gt;create the code&lt;/li&gt;&lt;li&gt;hook it up to sitecore&lt;/li&gt;&lt;/ol&gt;and, specifically for this gallery that means:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;create the xml layout of the control&lt;/li&gt;&lt;li&gt;create the necessary codebeside for it&lt;/li&gt;&lt;li&gt;assign it to a gallery button &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 1:&lt;/span&gt; code of the Gallery.ToggleAccess xml layout: &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt; &amp;lt;control&lt;br /&gt;xmlns:def="Definition"&lt;br /&gt;xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense"&lt;br /&gt;xmlns:shell="http://www.sitecore.net/shell"&amp;gt;&lt;br /&gt;&amp;lt;Gallery.ToggleAccess&amp;gt;&lt;br /&gt;&amp;lt;Gallery&amp;gt;&lt;br /&gt;&amp;lt;CodeBeside&lt;br /&gt;Type="Interfolio.ToggleAccess.ToggleAccessGalleryForm,Interfolio.ToggleAccess"/&amp;gt; &amp;lt;input type="hidden" id="reloadOnShow" value="1" /&amp;gt;&lt;br /&gt;&amp;lt;DataContext ID="EntityDataContext" DataViewName="Domain"&lt;br /&gt;DefaultItem="/" Root="/sitecore/users"/&amp;gt;&lt;br /&gt;&amp;lt;GridPanel&lt;br /&gt;Width="100%" Height="100%"&amp;gt;&lt;br /&gt;&amp;lt;MenuHeader&lt;br /&gt;Header="Users"/&amp;gt;&lt;br /&gt;&amp;lt;Scrollbox Height="100%" Padding="0px"&lt;br /&gt;Border="none" Background="transparent" GridPanel.Height="100%"&amp;gt;&lt;br /&gt;&amp;lt;DataTreeview ID="EntityTreeview" Width="100%"&lt;br /&gt;DataContext="EntityDataContext" Root="false" AllowDragging="false"&lt;br /&gt;DblClick="ToggleAccess"/&amp;gt;&lt;br /&gt;&amp;lt;/Scrollbox&amp;gt;&lt;br /&gt;&amp;lt;Gallery.Grip/&amp;gt;&lt;br /&gt;&amp;lt;/GridPanel&amp;gt;&lt;br /&gt;&amp;lt;/Gallery&amp;gt;&lt;br /&gt;&amp;lt;/Gallery.ToggleAccess&amp;gt;&lt;br /&gt;&amp;lt;/control&amp;gt; &lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 2:&lt;/span&gt; code for the ToggleAccessGalleryForm C# class:&lt;/strong&gt; &lt;/p&gt;&lt;blockquote&gt;namespace Interfolio.ToggleAccess&lt;br /&gt;{&lt;br /&gt;public class ToggleAccessGalleryForm :&lt;br /&gt;GalleryForm&lt;br /&gt;{&lt;br /&gt;protected DataContext EntityDataContext;&lt;br /&gt;protected&lt;br /&gt;DataTreeview EntityTreeview;&lt;br /&gt;public&lt;br /&gt;ToggleAccessGalleryForm()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;private static ID&lt;br /&gt;GetCurrentEntityID()&lt;br /&gt;{&lt;br /&gt;string text1 = StringUtil.GetString(new string[] {&lt;br /&gt;WebUtil.GetQueryString("en") });&lt;br /&gt;if (ID.IsID(text1))&lt;br /&gt;{&lt;br /&gt;return&lt;br /&gt;ID.Parse(text1);&lt;br /&gt;}&lt;br /&gt;return ID.Null;&lt;br /&gt;}&lt;br /&gt;private static string&lt;br /&gt;GetEntityName(Domain domain, ID entityID)&lt;br /&gt;{&lt;br /&gt;if (entityID ==&lt;br /&gt;ItemIDs.AnonymousUser)&lt;br /&gt;{&lt;br /&gt;return "anonymous";&lt;br /&gt;}&lt;br /&gt;UserItem ui =&lt;br /&gt;domain.GetUser(entityID);&lt;br /&gt;if (ui != null)&lt;br /&gt;{&lt;br /&gt;return&lt;br /&gt;ui.DisplayName;&lt;br /&gt;}&lt;br /&gt;return Translate.Text("[unknown]");&lt;br /&gt;}&lt;br /&gt;private&lt;br /&gt;static string GetIcon(Domain domain, ID entityID)&lt;br /&gt;{&lt;br /&gt;UserItem ui =&lt;br /&gt;domain.GetUser(entityID);&lt;br /&gt;if (ui != null)&lt;br /&gt;{&lt;br /&gt;return&lt;br /&gt;ui.Icon;&lt;br /&gt;}&lt;br /&gt;RoleItem ri = domain.GetRole(entityID);&lt;br /&gt;if (ri !=&lt;br /&gt;null)&lt;br /&gt;{&lt;br /&gt;return ri.Icon;&lt;br /&gt;}&lt;br /&gt;return&lt;br /&gt;"People/24x24/user1.png";&lt;br /&gt;}&lt;br /&gt;protected override void OnLoad(EventArgs&lt;br /&gt;e)&lt;br /&gt;{&lt;br /&gt;base.OnLoad(e);&lt;br /&gt;if (!Context.ClientPage.IsEvent)&lt;br /&gt;{&lt;br /&gt;string&lt;br /&gt;querydomain =&lt;br /&gt;Sitecore.StringUtil.GetString(WebUtil.GetQueryString("do"),"sitecore");&lt;br /&gt;Domain&lt;br /&gt;domain = Factory.GetDomain(querydomain);&lt;br /&gt;this.EntityDataContext.Parameters =&lt;br /&gt;"domain=" + domain.Name;&lt;br /&gt;string folder = WebUtil.GetQueryString("en");&lt;br /&gt;if&lt;br /&gt;(!string.IsNullOrEmpty(folder))&lt;br /&gt;{&lt;br /&gt;this.EntityDataContext.Folder =&lt;br /&gt;folder;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;protected void ToggleAccess()&lt;br /&gt;{&lt;br /&gt;UserItem ui =&lt;br /&gt;Sitecore.Context.Domain.GetUser(this.EntityTreeview.GetSelectionItem().ID);&lt;br /&gt;Error.AssertNotNull(ui,&lt;br /&gt;"failed to initialize user item");&lt;br /&gt;Item itm =&lt;br /&gt;Sitecore.Context.ContentDatabase.GetItem(WebUtil.GetQueryString("id"));&lt;br /&gt;Error.AssertNotNull(itm,&lt;br /&gt;"failed to initialize content item");&lt;br /&gt;if (ui != null &amp;&amp;amp; itm !=&lt;br /&gt;null)&lt;br /&gt;{&lt;br /&gt;using (new SecuritySwitcher(ui))&lt;br /&gt;{&lt;br /&gt;if&lt;br /&gt;(itm.Access.CanWrite())&lt;br /&gt;{&lt;br /&gt;using (new&lt;br /&gt;SecurityDisabler())&lt;br /&gt;{&lt;br /&gt;itm.Editing.BeginEdit();&lt;br /&gt;itm.SecurityField.SetRights(ui,&lt;br /&gt;ItemRights.DenyWrite);&lt;br /&gt;itm.Editing.EndEdit();&lt;br /&gt;Sitecore.Context.ClientPage.ClientResponse.Alert("Denied&lt;br /&gt;write to " + itm.Name + " for " + ui.Name);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;using (new&lt;br /&gt;SecurityDisabler())&lt;br /&gt;{&lt;br /&gt;itm.Editing.BeginEdit();&lt;br /&gt;itm.SecurityField.SetRights(ui,&lt;br /&gt;ItemRights.AllowWrite);&lt;br /&gt;itm.Editing.EndEdit();&lt;br /&gt;Sitecore.Context.ClientPage.ClientResponse.Alert("Allowed&lt;br /&gt;write to " + itm.Name + " for " + ui.Name);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;Now that that's all taken care of, all that's left is to make sure the control can be found, and then create a gallery button in a chunk in a strip in a ribbon (see, not that hard to understand) and then finally assign the gallery control to the gallery button.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 3:&lt;/span&gt; Adding the button and wrapping up&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add the location of the control to the &lt;em&gt;&amp;lt;controlsources&amp;gt; &lt;/em&gt;section in the web.config file and save it.&lt;/li&gt;&lt;li&gt;Go into Sitecore and switch to &lt;strong&gt;Core &lt;/strong&gt;DB&lt;/li&gt;&lt;li&gt;Navigate to the &lt;em&gt;Ribbons&lt;/em&gt; content (/sitecore/system/ribbons)&lt;/li&gt;&lt;li&gt;Create a Large/Small &lt;u&gt;Gallery&lt;/u&gt; Button somewhere in a chunk&lt;/li&gt;&lt;li&gt;Set the properties of the button and finally set the &lt;em&gt;Gallery field &lt;/em&gt;to the name of the gallery control, in this case &lt;strong&gt;Gallery.ToggleAccess&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Save&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now your new gallery button will be in the chunk where you placed it, and clicking it will launch the gallery and you can go out the door, realize it's friday and have a well-deserved, cold pint of lager.&lt;/p&gt;&lt;p&gt;Take care,&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7189101643658955141?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7189101643658955141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7189101643658955141' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7189101643658955141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7189101643658955141'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/03/tutorial-making-use-of-ribbons-and.html' title='Tutorial: Making use of Ribbons and Galleries'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pr5a2BlM4eM/RfF6042AWTI/AAAAAAAAABg/ood2e4d79NU/s72-c/toggleaccess2.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-713140821859437252</id><published>2007-02-15T10:01:00.000+01:00</published><updated>2007-02-16T13:04:13.527+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><title type='text'>Tutorial: Create your own Sitecore Wizard</title><content type='html'>&lt;em&gt;This post applies to Sitecore 5.3
&lt;/em&gt;
It's really quite logical - &lt;strong&gt;if you're writing your own wizards for sitecore they always look better if they are real sitecore wizards&lt;/strong&gt;, so here's a quick tutorial on how to make your own.

We're gonna go thru this in &lt;strong&gt;&lt;span style="color:#009900;"&gt;5&lt;/span&gt;&lt;/strong&gt; steps:
&lt;ul&gt;&lt;li&gt;Create a custom wizard sheer ui / xaml code &lt;/li&gt;&lt;li&gt;Create the CodeBeside class for our wizard &lt;/li&gt;&lt;li&gt;Create a Command that we can later use to launch it with &lt;/li&gt;&lt;li&gt;Edit the Web.Config and Commands.Config file &lt;/li&gt;&lt;li&gt;Create a context menu extension that launches our wizard &lt;/li&gt;&lt;/ul&gt;Still interested? well, let's start then!

&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 1: Wizard XML code&lt;/span&gt;&lt;/strong&gt;

Create a folder somewhere beneath &lt;em&gt;\sitecore modules\shell&lt;/em&gt; where you're going to store the code to your new wizard. The sheer ui / xaml code for the wizard is built using Sitecores &lt;em&gt;WizardForm, WizardFormFirstPage, WizardFormPage &amp; WizardFormLastPage&lt;/em&gt; controls so it'll look great and take advantage of all the existing features they provide, like intro &amp;amp; exit pages, navigation, events and so on.

&lt;u&gt;here's the code&lt;/u&gt;:

&lt;blockquote&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;
&amp;lt;control
xmlns:def="Definition"
xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense"&amp;gt;
&amp;lt;ExampleWizard&amp;gt;
&amp;lt;WizardForm
CodeBeside="Interfolio.Examples.ExampleWizardForm,Interfolio.Examples"&amp;gt;
&amp;lt;WizardFormFirstPage
ID="FirstPage" Icon="People/48x48/user1.png"&amp;gt;
&amp;lt;Border
Class="scWizardWelcomeTitle"&amp;gt;
&amp;lt;Literal Text="Example
Wizard"/&amp;gt;
&amp;lt;/Border&amp;gt;
&amp;lt;Literal Text="This wizard
will help
you:"/&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;Literal
Text="Create your own
wizard."/&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;Literal
Text="Understand the sitecore
wizard."/&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/WizardFormFirstPage&amp;gt;
&amp;lt;WizardFormPage
ID="WizardPageOne" Header="Page 1" Text="Select one of the available options.
When done, click next to continue."
Icon="People/48x48/user1.png"&amp;gt;
&amp;lt;WizardFormIndent&amp;gt;
&amp;lt;GridPanel
ID="FieldsAction" Columns="2" Width="100%"
CellPadding="2"&amp;gt;
&amp;lt;Literal Text="I want to.."
GridPanel.NoWrap="true" Width="100%" /&amp;gt;
&amp;lt;Combobox
ID="SelectActions" GridPanel.Width="100%"
Width="100%"&amp;gt;
&amp;lt;ListItem ID="create" Header="Keep looking at
this example" Value="newsite" /&amp;gt;
&amp;lt;ListItem ID="edit" Header="Do
something, somewhere else" Value="editsite" /&amp;gt;
&amp;lt;ListItem
ID="delete" Header="Yeah, you get the idea.." Value="deletesite"
/&amp;gt;
&amp;lt;/Combobox&amp;gt;
&amp;lt;/GridPanel&amp;gt;
&amp;lt;/WizardFormIndent&amp;gt;
&amp;lt;/WizardFormPage&amp;gt;
&amp;lt;WizardFormPage
ID="WizardPageTwo" Header="Page 2" Text="Specify some information. Name needs to
be set before moving on. When done, click next to continue."
Icon="People/48x48/user1.png"&amp;gt;
&amp;lt;WizardFormIndent&amp;gt;
&amp;lt;GridPanel
ID="FieldsInformation" Columns="2" Width="100%"
CellPadding="2"&amp;gt;
&amp;lt;Literal Text="Name:"
GridPanel.NoWrap="true"/&amp;gt;
&amp;lt;Edit ID="Name" Width="100%"
Change="OnNameChanged" GridPanel.Width="100%"/&amp;gt;
&amp;lt;Literal
Text="Location:" GridPanel.NoWrap="true"/&amp;gt;
&amp;lt;Edit ID="Location"
Width="100%" GridPanel.Width="100%"/&amp;gt;
&amp;lt;hr GridPanel.ColSpan="2"
/&amp;gt;
&amp;lt;Literal Text="URL:"
GridPanel.NoWrap="true"/&amp;gt;
&amp;lt;Edit ID="URL" Disabled="true"
Width="100%" GridPanel.Width="100%"/&amp;gt;
&amp;lt;hr GridPanel.ColSpan="2"
/&amp;gt;
&amp;lt;Literal Text="Checks:" GridPanel.NoWrap="true"
/&amp;gt;
&amp;lt;Checkbox ID="Check1" Header="Check one"
/&amp;gt;
&amp;lt;Literal Text="" GridPanel.NoWrap="true"
/&amp;gt;
&amp;lt;Checkbox ID="Check2" Header="Another check"
/&amp;gt;
&amp;lt;/GridPanel&amp;gt;
&amp;lt;/WizardFormIndent&amp;gt;
&amp;lt;/WizardFormPage&amp;gt;
&amp;lt;WizardFormPage
ID="WizardPageThree" Header="Page 3" Text="More things to do here. When done,
click next to continue."
Icon="People/48x48/user1.png"&amp;gt;
&amp;lt;WizardFormIndent&amp;gt;
&amp;lt;GridPanel
ID="FieldsOthers" Columns="2" Width="100%"
CellPadding="2"&amp;gt;
&amp;lt;Literal Text="Something else:"
GridPanel.NoWrap="true"/&amp;gt;
&amp;lt;Edit ID="SomethingElse" Width="100%"
Change="OnNameChanged" GridPanel.Width="100%"/&amp;gt;
&amp;lt;Literal
Text="More text:" GridPanel.NoWrap="true"/&amp;gt;
&amp;lt;Edit ID="MoreText"
Width="100%"
GridPanel.Width="100%"/&amp;gt;
&amp;lt;/GridPanel&amp;gt;
&amp;lt;/WizardFormIndent&amp;gt;
&amp;lt;/WizardFormPage&amp;gt;
&amp;lt;WizardFormLastPage
ID="LastPage"
Icon="People/48x48/user1.png"&amp;gt;
&amp;lt;Border&amp;gt;
&amp;lt;Literal
Text="The wizard has
completed."/&amp;gt;
&amp;lt;/Border&amp;gt;
&amp;lt;/WizardFormLastPage&amp;gt;
&amp;lt;/WizardForm&amp;gt;
&amp;lt;/ExampleWizard&amp;gt;
&amp;lt;/control&amp;gt;&lt;/blockquote&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 2: Wizard C# code&lt;/span&gt;&lt;/strong&gt;

Now, for our wizard to even show and do, well, anything, we need to define it and handle some example events, like validating a Edit control and enable/disable buttons. The class is based on sitecores own &lt;em&gt;WizardForm&lt;/em&gt; in order to get all the already-existing (and &lt;u&gt;great&lt;/u&gt;) functionality.

&lt;u&gt;here's the code&lt;/u&gt;:

&lt;blockquote&gt;namespace Interfolio.Examples
{
public class ExampleWizardForm :
WizardForm
{
// specify each control we need to access from the xml as
'protected' and it'll be available
protected Edit Name;
public
ExampleWizardForm()
{
}
protected override void OnLoad(EventArgs
e)
{
base.OnLoad(e);
if (!Context.ClientPage.IsEvent)
{
// handle
initial code here
}
}
protected void OnNameChanged()
{
// check
to make sure the name Edit is not empty (in a negative boolean style)
bool
IsOk = (this.Name.Value == null) (this.Name.Value.Length ==
0);
base.NextButton.Disabled = IsOk;
if
(IsOk)
{
Context.ClientPage.ClientResponse.Focus("Name");
}
Context.ClientPage.ClientResponse.SetReturnValue(true);
}
protected
override void ActivePageChanged(string page, string
oldPage)
{
base.ActivePageChanged(page, oldPage);
if (page ==
"WizardPageTwo")
{
// make sure next button is disabled unless the Name is
entered
this.OnNameChanged();
}
else if (page ==
"LastPage")
{
base.BackButton.Disabled = true;
}
}
protected
override bool ActivePageChanging(string page, ref string newpage)
{
if
(newpage == "LastPage")
{
// disable the back button since we've finished
the wizard
base.BackButton.Disabled = true;
// return the boolean status
of our 'commit' method
return this.WhatWeWantToDo();
}
return
base.ActivePageChanging(page, ref newpage);
}
private bool
WhatWeWantToDo()
{
// really do something else here, this is just an
example..
return true;
}
}
}&lt;/blockquote&gt;
&lt;strong&gt;&lt;span style="color:#009900;"&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 3: Command C# code&lt;/span&gt;&lt;/strong&gt;

The purpose of this command is to make your newly created wizard launchable from pretty much anywhere you want. It is based on sitecores own Command.

&lt;u&gt;here's the code&lt;/u&gt;:

&lt;blockquote&gt;namespace Interfolio.Examples
{
[Serializable]
public class OpenWizard
: Command
{
public OpenWizard()
{
}
public override void
Execute(CommandContext context)
{
// get the uri of our wizard by finding
the control using Sitecore's UIUtil
string controlUrl =
Sitecore.UIUtil.GetUri("control:ExampleWizard");
// broadcast the need to
show the wizard to the sitecore shell
Context.ClientPage.ClientResponse.Broadcast(Context.ClientPage.ClientResponse.ShowModalDialog(controlUrl),
"Shell");
}
public override CommandState QueryState(CommandContext
context)
{
return base.QueryState(context);
}
protected void
Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args)
{
}
}
}&lt;/blockquote&gt;
&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 4: Config Additions&lt;/span&gt;&lt;/strong&gt;

Before using our code anywhere we need to tell Sitecore that it's available, which is normal since it's new code.

In the &lt;em&gt;&lt;u&gt;Web.Config&lt;/u&gt;&lt;/em&gt; file, locate the section &lt;em&gt;&amp;lt;controlsources&amp;gt;&lt;/em&gt; and add the source folder of your new code:

&lt;blockquote&gt;&amp;lt;source mode="on" namespace="Interfolio.Examples"
folder="/sitecore modules/shell/interfolio/Examples" deep="true"&amp;gt;
&amp;lt;/source&amp;gt;&lt;/blockquote&gt;
In the &lt;u&gt;&lt;em&gt;Commands.config&lt;/em&gt;&lt;/u&gt; file (located at &lt;em&gt;\App_Config&lt;/em&gt;), add the following:

&lt;blockquote&gt;&amp;lt;command name="interfolio:examplewizard"
type="Interfolio.Examples.OpenWizard,Interfolio.Examples" /&amp;gt;
&lt;/blockquote&gt;
Save both files.

As you may have noticed the example is located in interfolio\Examples, this is just where i stored it for this tutorial, you can have any folder you wish, just make sure that if you change the namespace or assembly or folders that you refactor the change onto the rest of your code.

&lt;strong&gt;&lt;span style="color:#009900;"&gt;Step 5: Launching the wizard&lt;/span&gt;&lt;/strong&gt;

Now all the code is complete and we only need to have a way of launching it within sitecore. While this approach isn't really that durable unless your wizard is &lt;u&gt;extremely&lt;/u&gt; generic it's still an easy way to quickly try something you've done.

&lt;ul&gt;&lt;li&gt;Open Sitecore in your browser, login and switch database to &lt;em&gt;'core'&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Navigate to &lt;em&gt;Sitecore/System/Context Menus/Default&lt;/em&gt; and duplicate the &lt;em&gt;'New'&lt;/em&gt; item and name it '&lt;strong&gt;&lt;em&gt;ExampleWizard&lt;/em&gt;&lt;/strong&gt;'&lt;/li&gt;&lt;li&gt;Change the fields &lt;em&gt;DisplayName&lt;/em&gt; to '&lt;strong&gt;&lt;em&gt;ExampleWizard&lt;/em&gt;&lt;/strong&gt;' and &lt;em&gt;Message&lt;/em&gt; to '&lt;strong&gt;&lt;em&gt;interfolio:examplewizard(id=$Target)&lt;/em&gt;&lt;/strong&gt;'&lt;/li&gt;&lt;li&gt;Save it and switch back to the &lt;em&gt;'master'&lt;/em&gt; database &lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;&lt;span style="color:#009900;"&gt;That's it! &lt;/span&gt;&lt;/strong&gt;

If you've followed these steps correctly you should by now be able to right click an item in the Content Editor and click ExampleWizard which will launch your newly created wizard.

Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-713140821859437252?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/713140821859437252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=713140821859437252' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/713140821859437252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/713140821859437252'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/02/tutorial-create-your-own-sitecore.html' title='Tutorial: Create your own Sitecore Wizard'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-552180550348871850</id><published>2007-02-02T14:10:00.000+01:00</published><updated>2007-02-02T14:25:13.471+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Tablet-PC'/><title type='text'>Sitecore 5.3 &amp; Tablet-PC &amp; Vista Ultimate</title><content type='html'>I guess there's something good in everything - even getting your laptop stolen, 'cause then you got a pseudo-legitimate reason to finally get a tablet-pc notebook.

ok, so i've been glancing at one for quite some time, but i just could justify the change, but now i had no choice but to get a replacement for the one that was stolen..

The thing is that after (way to many hours of) installing vista and updating drivers i had to see what sitecore would look like when it's 'just a screen', and i reckon it's finally shining in it's true colors. It more or less like a part of the operating system (in some strange way even more so than on a normal laptop/pc running vista), and showing it off like this is quite neat (and really cool).

Now to see if there's a way to write cool stuff that you can take advantage of the stylus with..

Oh yeah, i'm back. posts have been short and empty (i know), but i've been kinda lost without a laptop, so now hopefully things are back to normal once again.. and, it's friday, so there's really no reason to complain anymore - so gonna go for an afterwork beer today.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-552180550348871850?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/552180550348871850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=552180550348871850' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/552180550348871850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/552180550348871850'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/02/sitecore-53-tablet-pc-vista-ultimate.html' title='Sitecore 5.3 &amp; Tablet-PC &amp; Vista Ultimate'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8393126064411044544</id><published>2007-02-01T11:28:00.000+01:00</published><updated>2007-02-01T11:31:45.814+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0 AJAX Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>ASP.NET 2.0 AJAX 1.0 Source Code</title><content type='html'>Ever wondered how the heck they wrote it all? well, according to Scott Guthrie they're releasing the full code for you to growl through.

more info: &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/01/30/asp-net-ajax-1-0-source-code-released.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2007/01/30/asp-net-ajax-1-0-source-code-released.aspx&lt;/a&gt;

I'm gonna blog more now since my new laptop will (hopefully) arrive today.

Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8393126064411044544?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8393126064411044544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8393126064411044544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8393126064411044544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8393126064411044544'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/02/aspnet-20-ajax-10-source-code.html' title='ASP.NET 2.0 AJAX 1.0 Source Code'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8641164903703358751</id><published>2007-01-24T11:57:00.000+01:00</published><updated>2007-01-24T12:01:24.752+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0 AJAX Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>ASP.NET 2.0 AJAX Extensions v1.0</title><content type='html'>it's finally released! ASP.NET 2.0 AJAX Extensions v1.0 is ready and waiting for you to make awesome stuff with. Personally i love this extension, hope you do to.

Go grab it at &lt;a href="http://ajax.asp.net/downloads/default.aspx?tabid=47"&gt;http://ajax.asp.net/downloads/default.aspx?tabid=47&lt;/a&gt;

Alex, you beat me to it :)

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8641164903703358751?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8641164903703358751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8641164903703358751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8641164903703358751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8641164903703358751'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/01/aspnet-20-ajax-extensions-v10.html' title='ASP.NET 2.0 AJAX Extensions v1.0'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3920142663680119334</id><published>2007-01-19T12:54:00.000+01:00</published><updated>2007-01-22T10:30:35.390+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sitecore 5.3: Adding values to the Properties view in the Content Manager</title><content type='html'>As seen on SDN5 Forum there was a question about properties for the selected item, and specifically to see a count of how many children that item had. Unfortunately that property isn't shown by default, but, you can always add it yourself (gotta l ove sitecore).

Here's what you do:
&lt;ul&gt;&lt;li&gt;Locate SystemMenu Information.xml (it's in sitecore\shell\Applications\Content Manager\Galleries\SystemMenu)&lt;/li&gt;&lt;li&gt;Add the following two lines right beneath &lt;em&gt;"&amp;lt;Border def:ID="Template" /&amp;gt;"&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&amp;lt;Literal GridPanel.Class="scKey" Text="Children:"/&amp;gt; &amp;lt;Literal GridPanel.Class="scValue" def:ID="Children" Text='${Sitecore.UIUtil.GetItemFromQueryString(Sitecore.Context.Database)==null?"unable to list":Sitecore.StringUtil.GetString(Sitecore.UIUtil.GetItemFromQueryString(Sitecore.Context.Database).Children.Count,"unknown").ToString()}' /&amp;gt;
&lt;p&gt;That's pretty much it, now you'll get a count of how many children (if any) that exist on a selected item.&lt;/p&gt;&lt;p&gt;"Hacking" sitecore can sometimes really be that simple, ain't it awesome? :)&lt;/p&gt;&lt;p&gt;&lt;span style="color:#990000;"&gt;EDIT:&lt;/span&gt;
Actually you probably want to swap the database part for something else to make it more robust, either get the DB by name or through the use of Sitecore.Context.ContentDatabase instead.&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3920142663680119334?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3920142663680119334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3920142663680119334' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3920142663680119334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3920142663680119334'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/01/sitecore-53-adding-values-to-properties.html' title='Sitecore 5.3: Adding values to the Properties view in the Content Manager'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-820384090384552068</id><published>2007-01-18T11:10:00.000+01:00</published><updated>2007-01-18T12:11:36.594+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql 2005'/><title type='text'>Catch 22: SQL 2005 and the "MUST_CHANGE" policy</title><content type='html'>Gotcha! It's really is a catch 22 situation, and it's damn annoying.

DB User X has a password set to Y, and when created that user was created with the default settings - thus automatically checking the little attribute on the user telling the server that the user has to change the password at first login.

Let's say you're migrating a solution/db to SQL 2005. In this case you probably don't wanna change the password since this user, along with the associated password, is likely used in an application somewhere somehow.. so, what do you do? you go to the server, find the user in the management studio, and you try to edit it since this user should not have a password policy at all, we know the username and password should be what is set. well, sorry, but if this happened to you then you probably noticed that if you try to uncheck the "Enforce password policy" and/or "Enforce password expiration" and click "ok" you'll be hit with an error saying the changes can't be made due to the "MUST_CHANGE" flag is set on the user..

This really annoyed me a lot, so here's a little workaroud that might help you:

&lt;ul&gt;&lt;li&gt;Open the management studio and connect to the server with sufficient rights&lt;/li&gt;&lt;li&gt;start a blank query&lt;/li&gt;&lt;li&gt;run "ALTER LOGIN X WITH PASSWORD = 'Y' UNLOCK" (replace X &amp;amp; Y with username and password of course)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;By following the above steps you should now be able to go back to the user and uncheck the checkboxes without any trouble.&lt;/p&gt;&lt;p&gt;To make the changes without using the management studio you can run the following in a query..&lt;/p&gt;&lt;p&gt;To change the password and keep the MUST_CHANGE flag:
ALTER LOGIN X WITH PASSWORD = 'Y' UNLOCK MUST_CHANGE&lt;/p&gt;&lt;p&gt;To uncheck the checkboxes for expiration and/or policy (change "OFF" to "ON" to check):
ALTER LOGIN X WITH CHECK_EXPIRATION = OFF
ALTER LOGIN X WITH CHECK_POLICY = OFF&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-820384090384552068?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/820384090384552068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=820384090384552068' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/820384090384552068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/820384090384552068'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/01/catch-22-sql-2005-and-mustchange-policy.html' title='Catch 22: SQL 2005 and the &quot;MUST_CHANGE&quot; policy'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-5131595856151116555</id><published>2007-01-15T12:04:00.000+01:00</published><updated>2007-01-15T12:31:25.623+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><title type='text'>system archeologist</title><content type='html'>technology is moving at an incredible rate, we all know that.

things we thought we'd be ok with for a while has suddenly turned into yesterday's news..

just take the introduction of .NET as a quality example - everything turned .NET over night, and it was the new hype everyone wanted to master and everyone even said they did.

In reality we all know people that still think we'd be better off without .NET, and there will always be people like that. People that strive to prevent changes instead of embracing them. People that take one step back when the path is right there before them. This is the same for other changes, like .NET 1.1 to 2.0, and now 3.0.

While the fact that these people exist today and most likely will exist in the future as well is a known fact, the technologies will continue to evolve and introduce new ways of thinking.

During the last decade the evolution of code and technologies has been incredible, so just imagine the coming decade..

For these reasons, and more, I think there will be more accepted roles coming our way, and one (maybe the most important one of all) will be the &lt;strong&gt;System Archeologist&lt;/strong&gt;.

The System Archeologist will know how 'old' code can interact with 'new' code, how 'old' systems can communicate with 'new' systems and how 'old' architecture relates to 'new' architecture. Perhaps they will be the Architects of today, or maybe they will spring from a totally different source, who knows?

This thought kept me up last night, i just couldn't shake it, 'cause the more i think about it the clearer it becomes.

Today we embrace the evolution of software 'cause it moves us forward and the bridges aren't yet that many to cross - but what about our children and the number of technologies available to them when they grow old?

I'm intrigued, in a conspiracy-theory kinda way..

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-5131595856151116555?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/5131595856151116555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=5131595856151116555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5131595856151116555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5131595856151116555'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/01/system-archeologist.html' title='system archeologist'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-221027061664721295</id><published>2007-01-08T12:59:00.000+01:00</published><updated>2007-01-08T13:07:51.741+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>break in - break out - freak out</title><content type='html'>so, first day back and well i hoped this year was going to start with a blast, just not the kinda blast that met me walking through the doors to the office (well, actually, what's left of them).

if you've ever lost or had your laptop stolen, you know it sucks. big time. now, try that feeling and double it. yep, &lt;strong&gt;second time my laptop gets stolen&lt;/strong&gt;. from the office.

&lt;u&gt;gone:&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;millions of lines of code&lt;/li&gt;&lt;li&gt;thousands of pictures&lt;/li&gt;&lt;li&gt;probably countless of somewhat important documents&lt;/li&gt;&lt;li&gt;one hell of a laptop&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;found:&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;anger&lt;/li&gt;&lt;li&gt;dissapointment&lt;/li&gt;&lt;/ul&gt;i really hope the year started in a better way for you than it did for me..

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-221027061664721295?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/221027061664721295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=221027061664721295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/221027061664721295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/221027061664721295'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2007/01/break-in-break-out-freak-out.html' title='break in - break out - freak out'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-821924691630725921</id><published>2006-12-18T09:00:00.000+01:00</published><updated>2006-12-18T09:02:37.375+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>PhotoSynth Technology Preview</title><content type='html'>Personally i love seeing technology be presented to the public prior to it being finished, no matter if it works or not.

This TP however works quite well and i think it's -really- cool.

Check out PhotoSynth at &lt;a href="http://labs.live.com/photosynth"&gt;http://labs.live.com/photosynth&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-821924691630725921?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/821924691630725921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=821924691630725921' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/821924691630725921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/821924691630725921'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/photosynth-technology-preview.html' title='PhotoSynth Technology Preview'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7847568558247404643</id><published>2006-12-15T14:29:00.000+01:00</published><updated>2006-12-15T14:33:19.783+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Visual Studio 2005 SP1</title><content type='html'>Also, on the topic of releases today, Service Pack 1 for Visual Studio 2005 is here.

I was going to install it right away (i'm a sucker for installing new stuff as fast as possible), but then Alex's &lt;a href="http://sitecore.alexiasoft.nl/2006/12/15/installing-vs2005-sp1-a-bloody-hell/" target="_blank"&gt;post&lt;/a&gt; made me think of a better reason, and that's to install it from home.

'cause, if it's going to be like Alex's installation, that way i can have a valid reason for playing gears of war while the installation runs, and that's always a good thing ;)

Download links &amp;amp; further info:
&lt;a href="http://msdn.microsoft.com/vstudio/support/vs2005sp1/default.aspx"&gt;http://msdn.microsoft.com/vstudio/support/vs2005sp1/default.aspx&lt;/a&gt;

Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7847568558247404643?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7847568558247404643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7847568558247404643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7847568558247404643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7847568558247404643'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/visual-studio-2005-sp1.html' title='Visual Studio 2005 SP1'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1466597119346647865</id><published>2006-12-15T14:23:00.000+01:00</published><updated>2006-12-15T14:24:16.795+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0 AJAX Extensions'/><title type='text'>ASP.NET 2.0 AJAX Extensions RC1</title><content type='html'>Yep, RC1 is now available.

Grab it at: &lt;a href="http://go.microsoft.com/fwlink/?LinkID=77296"&gt;http://go.microsoft.com/fwlink/?LinkID=77296&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1466597119346647865?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1466597119346647865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1466597119346647865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1466597119346647865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1466597119346647865'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/aspnet-20-ajax-extensions-rc1.html' title='ASP.NET 2.0 AJAX Extensions RC1'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3234409615197294396</id><published>2006-12-15T10:59:00.000+01:00</published><updated>2006-12-15T11:15:05.059+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>another year passed</title><content type='html'>&lt;p&gt;so, this post is really about 2 weeks old, but i thought i'd write it anyway.&lt;/p&gt;&lt;p&gt;I found myself thinking about the last couple of years that passed by, and it struck me like a blow to the head: this year has been fantastic!&lt;/p&gt;&lt;u&gt;The last year included:&lt;/u&gt; &lt;ul&gt;&lt;li&gt;working for &lt;a href="http://www.metamatrix.se" target="_blank"&gt;metamatrix&lt;/a&gt; // &lt;a href="http://www.interfolio.se" target="_blank"&gt;interfolio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;working with &lt;a href="http://www.sitecore.net" target="_blank"&gt;sitecore&lt;/a&gt; cms (which you all by now know i love)&lt;/li&gt;&lt;li&gt;went to tech ed in barcelona&lt;/li&gt;&lt;li&gt;living in stockholm&lt;/li&gt;&lt;li&gt;drinking beer&lt;/li&gt;&lt;li&gt;playing music&lt;/li&gt;&lt;li&gt;stopped smoking&lt;/li&gt;&lt;li&gt;started going to the gym &lt;span style="color:#666666;"&gt;(if you knew me a year ago you'd be laughing right about now)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;bought an apartment&lt;/li&gt;&lt;li&gt;bought a car&lt;/li&gt;&lt;li&gt;started this blog&lt;/li&gt;&lt;li&gt;found what i was hoping i'd find in a company that develop top-of-the-line solutions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now, for those of you that don't know me personally, let's just compare this year to some previous:&lt;/p&gt;&lt;p&gt;&lt;u&gt;1 year ago i was..&lt;/u&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;living in stockholm &lt;/li&gt;&lt;li&gt;working for morningstar &lt;/li&gt;&lt;li&gt;drinking beer &lt;/li&gt;&lt;li&gt;smoking cigarettes &lt;/li&gt;&lt;li&gt;playing music&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;2 years ago i was..&lt;/u&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;living in london &lt;/li&gt;&lt;li&gt;working for morningstar &lt;/li&gt;&lt;li&gt;drinking beer &lt;/li&gt;&lt;li&gt;smoking cigarettes &lt;/li&gt;&lt;li&gt;playing music&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;3 years ago i was..&lt;/u&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;living in london &lt;/li&gt;&lt;li&gt;working for morningstar &lt;/li&gt;&lt;li&gt;drinking beer &lt;/li&gt;&lt;li&gt;smoking cigarettes &lt;/li&gt;&lt;li&gt;playing music&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;4 years ago i was..&lt;/u&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;living in stockholm &lt;/li&gt;&lt;li&gt;working for morningstar &lt;/li&gt;&lt;li&gt;drinking beer &lt;/li&gt;&lt;li&gt;smoking cigarettes &lt;/li&gt;&lt;li&gt;playing music&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;see a repetative pattern evolving here? well, for the &lt;u&gt;first time&lt;/u&gt; that pattern is &lt;u&gt;gone&lt;/u&gt;, completely &lt;span style="color:#666666;"&gt;(ok, so not -really- completely, i still like my beers, stockholm and my music).&lt;/span&gt; &lt;/p&gt;&lt;p&gt;morningstar was great working for, don't get me wrong, and london was a fantastic city to live in. the friends i have there i'll keep for life, without doubt. the thing that separates those years from today is that today i'm loving it. &lt;u&gt;100% loving it.&lt;/u&gt;&lt;/p&gt;&lt;p&gt;and yeah, it's true: i'm going to the gym these days
and yeah, it's true: i've stopped smoking &lt;span style="color:#666666;"&gt;(so far anyway)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;time sure flies..&lt;/p&gt;&lt;p&gt;i'm &lt;strong&gt;-so-&lt;/strong&gt; looking forward to &lt;u&gt;another great year&lt;/u&gt;!&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3234409615197294396?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3234409615197294396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3234409615197294396' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3234409615197294396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3234409615197294396'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/another-year-passed.html' title='another year passed'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3134434894545107751</id><published>2006-12-15T09:01:00.000+01:00</published><updated>2006-12-15T10:12:28.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore blogs'/><title type='text'>Extending the RSS Module</title><content type='html'>the RSS module i really like. it's a good example of a great module that does what it's supposed to be doing. &lt;a href="http://www.alexeyrusakov.com/sitecoreblog/default.aspx" target="_blank"&gt;Alexey Rusakov&lt;/a&gt; is a wizard, can't put it any other way. his last posts about deletion workflow are really interesting and if you've ever thought about custom workflows i encourage you to read (apart from all the stuff at SDN5) &lt;a href="http://www.alexeyrusakov.com/sitecoreblog/default.aspx" target="_blank"&gt;Alexey&lt;/a&gt;'s Deletion Workflow Part 1 &amp; 2, and also &lt;a href="http://sitecoresupport.blogspot.com" target="_blank"&gt;Alex Shyba&lt;/a&gt;'s Workflow with unpublishing article.

now, with that said, i just thought i'd share a little example of how you can easily make your pages 'advertise' that there's feed content available on the page. modern browsers 'light up' to indicate a feed is present, and it's really, really, really simple - it's just a link in the header to the atual rss istelf.

you don't need to have the RSS module, you can of course create your own, but i strongly recommend that you use the module.

so, assuming you have the module installed &amp;amp; running you'd have a node somewhere that stores your feeds, here's what you do:

&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;1)&lt;/span&gt;&lt;/strong&gt; add a new Tree list field (i -so- &lt;u&gt;love&lt;/u&gt; this field, i use it all the time) called "RSS_Feeds" to your content templates (even better if you got a sitewide template your content templates inherit from) and set the source of that field to your Feeds node (like '/sitecore/content/global/rss feeds' or something).

&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;2)&lt;/span&gt;&lt;/strong&gt; create a new class called RssAlternativeRenderer - this class will output the alternative links to the header of your page

&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;3)&lt;/span&gt;&lt;/strong&gt; add the following code to your new class

&lt;blockquote&gt;
public static void GetRssUrls()
{
Item root = Sitecore.Context.Item;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
if (root != null)
{
if (root.Fields["Rss_Feeds"]!=null)
{
Sitecore.Data.Fields.MultilistField mf = root.Fields["Rss_Feeds"];
if (mf != null)
{
if (mf.Count &amp;gt; 0)
{
foreach (Item itm in mf.GetItems())
{
sb.AppendLine("&amp;lt;link rel=\"alternate\" type=\"application/rss+xml\" title=\"" + itm.Fields["Title"].Value.ToString() + "\" href=\"" + itm.Paths.GetFriendlyUrl() + "\" /&amp;gt;");
}
}
}
Sitecore.Context.Page.Page.Header.Controls.Add(new LiteralControl(sb.ToString()));
}
}
}
&lt;/blockquote&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;4)&lt;/span&gt;&lt;/strong&gt; add the following code to your Page_Load event

&lt;blockquote&gt;&lt;p&gt;
protected void Page_Load(object sender, EventArgs e)
{
RssAlternativeRenderer.GetRssUrls();
} &lt;/p&gt;&lt;/blockquote&gt;that's it. now compatible browsers will 'light up' all shiny and stuff when you select a feed that will be available on a page - ain't that great for christmas?

finally, wrapping up, &lt;a href="http://sitecore.alexiasoft.nl" target="_blank"&gt;Alex de Groot&lt;/a&gt; just posted his &lt;a href="http://sitecore.alexiasoft.nl/2006/12/13/1-year-of-blogging/" target="_blank"&gt;1-year-blogging-anniversary post&lt;/a&gt;. Congratulations!

today is friday - today is afterwork - today is gonna be one more day that i forget to go buy gifts.. but hey, at least it's friday..

take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3134434894545107751?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3134434894545107751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3134434894545107751' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3134434894545107751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3134434894545107751'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/extending-rss-module.html' title='Extending the RSS Module'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-99979150901455059</id><published>2006-12-13T11:00:00.000+01:00</published><updated>2006-12-13T11:48:59.718+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSearch'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>10 steps to adding search providers to a sitecore website using OpenSearch specifications</title><content type='html'>&lt;p&gt;
 yep, &lt;strong&gt;&lt;span style="color:#ff0000;"&gt;10&lt;/span&gt;&lt;/strong&gt; steps to adding search providers to a sitecore website using OpenSearch specifications. ok, so there's a lot of sub-steps and some code, but at least the highlighted parts are only 10 :)

here we go!
&lt;/p&gt;
&lt;p&gt;
 &lt;strong&gt;&lt;span style="color:#ff0000;"&gt;1)&lt;/span&gt; &lt;/strong&gt;create a new layout called OpenSearch
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;2)&lt;/span&gt;&lt;/strong&gt; create a new template called OpenSearchSource
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1) add the following fields to this template
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.1) OpenSearchDescription : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.2) ShortName : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.3) LongName : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.4) Description : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.5) Tags : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.6) Contact : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.7) URL_RSS : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.8) URL_Atom : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.9) URL_HTTP : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.10) Attribution : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.11) Language: text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.12) AdultContent : checkbox
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.13) inputEncoding : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.14) outputEncoding : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.15) count : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.16) Icon_Large : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.1.17) Icon_Small : text
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2) set the standard values of the fields accordingly (without the qoutes):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.1) OpenSearchDescription : "http://a9.com/-/spec/opensearch/1.1/"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.2) ShortName : "MyExample" (set your site name or something)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.3) LongName : "Search using MyExample Search" (just a more detailed name)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.4) Description : "Use our own search engine to search our site"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.5) Tags : "example web"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.6) Contact : "peter@interfolio.se" (your email would be better)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.7) URL_RSS : "http://www.interfolio.se/search.aspx?q={searchTerms}&amp;amp;view=rss" (set this to the result querystring of your rss search page (if any) and add the {searchTerms} to the query param, or leave empty)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.8) URL_Atom : "http://www.interfolio.se/search.aspx?q={searchTerms}&amp;amp;view=atom" (set this to the result querystring of your atom search page (if any) and add the {searchTerms} to the query param, or leave empty)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.9) URL_HTTP : "http://www.interfolio.se/search.aspx?q={searchTerms"} (set this to the result querystring of your search page and add the {searchTerms} to the query param)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.10) Attribution : "Copyright 2006, Peter Johansson, All Rights Reserved."
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.11) Language: "*" (can be set to a desired language, like sv-SE)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.12) AdultContent : unchecked :)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.13) inputEncoding : "UTF-8"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.14) outputEncoding : "UTF-8"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.15) count : 10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.16) Icon_Large : "http://www.interfolio.se/images/find.png" (or leave blank to show no icon)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.2.17) Icon_Small : "http://www.interfolio.se/images/find.png" (or leave blank to show no icon)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.3) create a master for the newly created template
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;3)&lt;/span&gt;&lt;/strong&gt; add a folder where you'll store your OpenSearch specification items (perhaps /sitecore/content/global/OpenSearch)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.1) assing the master created in 2.4 to the newly created folder
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.2) assing the layout we created at step 1 to the standard values of our OpenSearchSource template
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;4)&lt;/span&gt; &lt;/strong&gt;add a dummy specification item that we can change later, i'm naming mine OpenSearchExample, but you can name it what you want.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;5)&lt;/span&gt;&lt;/strong&gt; here you can approach it from many angles, but since this is my tutorial we're gonna look at it my way :),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5.1) create a template that your site-specific templates will inherit from (make sure it inherits Standard template), maybe even name it SitewideSettings like i'm doing.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5.2) add a Tree list field to that template, name it OpenSearch_Sources and specify it's source to be your newly created folder at step 3, and finally check the shared checkbox.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5.3) make your site-specific templates inherit from the SitewideSettings template created at step 4.1.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;6)&lt;/span&gt;&lt;/strong&gt; edit an item (or create a new one) and select the dummy item we created at step 4 in the OpenSearch_Sources tree list
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;7)&lt;/span&gt;&lt;/strong&gt; commit a full publish
&lt;/p&gt;
&lt;p&gt;
That's it for sitecore desktop stuff.. for now.. next up, let's change the OpenSearch layout file.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;8)&lt;/span&gt;&lt;/strong&gt; Create a new class called OpenSearchPage
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8.1) Set the Inherits attribute of the layout to the newly created class, like Inherits="OpenSearch.OpenSearchPage"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8.2) make the new class inherit from the standard Page class
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8.3) override the OnLoad event
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8.4) create code to output our OpenSearch specification. Instead of doing this the really fancy way i'll just show a really simple way to output it. What should really be done is to make use of an xmltextwriter and an actual xml document to make sure the output is nice all follows standards, but to save time i've simply sent the format straight to the page and made sure the ContentType is text/xml. to make this better, go ahead and change all this, it should be made better so if you use any of this think about that :) anyway, here's really all of the code needed for (the not-so-correct-way-of) returning the output:
&lt;/p&gt;
&lt;blockquote&gt;
    public class OpenSearchPage : Page
    {
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (Sitecore.Context.Item != null)
            {
                this.Context.Response.Clear();
                this.Context.Response.ContentType = "text/xml";
                System.Text.StringBuilder sb = new System.Text.StringBuilder();

                sb.AppendLine("&amp;lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&amp;gt;");
                sb.AppendLine("&amp;lt;OpenSearchDescription xmlns=\"" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["OpenSearchDescription"].Value, "") + "\"&amp;gt;");
                sb.AppendLine("&amp;lt;ShortName&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Shortname"].Value, "") + "&amp;lt;/ShortName&amp;gt;");
                sb.AppendLine("&amp;lt;Description&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Description"].Value, "") + "&amp;lt;/Description&amp;gt;");
                sb.AppendLine("&amp;lt;Tags&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Tags"].Value, "") + "&amp;lt;/Tags&amp;gt;");
                sb.AppendLine("&amp;lt;Contact&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Contact"].Value, "") + "&amp;lt;/Contact&amp;gt;");
                if (Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["URL_RSS"].Value, "") != "")
                    sb.AppendLine("&amp;lt;Url type=\"application/rss+xml\" template=\"" + Server.HtmlEncode(Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["URL_RSS"].Value)) + "\"/&amp;gt;");
                if (Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["URL_Atom"].Value, "") != "")
                    sb.AppendLine("&amp;lt;Url type=\"application/atom+xml\" template=\"" + Server.HtmlEncode(Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["URL_Atom"].Value)) + "\"/&amp;gt;");
                if (Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["URL_HTTP"].Value, "") != "")
                    sb.AppendLine("&amp;lt;Url type=\"text/html\" method=\"get\" template=\"" + Server.HtmlEncode(Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["URL_HTTP"].Value)) + "\"/&amp;gt;");
                if (Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["LongName"].Value, "") != "")
                    sb.AppendLine("&amp;lt;LongName&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["LongName"].Value) + "&amp;lt;/LongName&amp;gt;");
                if (Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Icon_Large"].Value, "") != "")
                    sb.AppendLine("&amp;lt;Image height=\"64\" width=\"64\" type=\"image/png\"&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Icon_Large"].Value) + "&amp;lt;/Image&amp;gt;");
                if (Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Icon_Small"].Value, "") != "")
                    sb.AppendLine("&amp;lt;Image height=\"16\" width=\"16\" type=\"image/png\"&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Icon_Small"].Value) + "&amp;lt;/Image&amp;gt;");
                sb.AppendLine("&amp;lt;Attribution&amp;gt;");
                sb.AppendLine(Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["Attribution"].Value, "Copyright, All rights reserved."));
                sb.AppendLine("&amp;lt;/Attribution&amp;gt;");
                sb.AppendLine("&amp;lt;AdultContent&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["AdultContent"].Value, "false") + "&amp;lt;/AdultContent&amp;gt;");
                sb.AppendLine("&amp;lt;Language&amp;gt;" + Server.HtmlEncode(Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["language"].Value, "*")) + "&amp;lt;/Language&amp;gt;");
                sb.AppendLine("&amp;lt;OutputEncoding&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["outputEncoding"].Value, "UTF-8") + "&amp;lt;/OutputEncoding&amp;gt;");
                sb.AppendLine("&amp;lt;InputEncoding&amp;gt;" + Sitecore.StringUtil.GetString(Sitecore.Context.Item.Fields["inputEncoding"].Value, "UTF-8") + "&amp;lt;/InputEncoding&amp;gt;");
                sb.AppendLine("&amp;lt;/OpenSearchDescription&amp;gt;");

                this.Context.Response.Write(sb.ToString());
                this.Context.Response.End();
            }
        }
    }
&lt;/blockquote&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;9)&lt;/span&gt;&lt;/strong&gt; add functionality to add content to the header. all we really need now is a way to tell the browser that there's a search provider available on the site, and here's a little code snippet for that as well
&lt;/p&gt;
&lt;blockquote&gt;
    public class OpenSearchRenderer
    {
        public static void GetOpenSearchUrls()
        {
            Item root = Sitecore.Context.Item;
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            if (root != null)
            {
                if (root.Fields["OpenSearch_Sources"] != null)
                {
                    Sitecore.Data.Fields.MultilistField mf = root.Fields["OpenSearch_Sources"];
                    if (mf != null)
                    {
                        if (mf.Count &amp;gt; 0)
                        {
                            foreach (Item itm in mf.GetItems())
                            {
                                sb.AppendLine("&amp;lt;link title=\"" + itm.Fields["ShortName"].Value.ToString() + "\" rel=\"search\" type=\"application/opensearchdescription+xml\" href=\"http://localhost" + itm.Paths.GetFriendlyUrl() + "\"&amp;gt;");
                            }
                        }
                    }
                    Sitecore.Context.Page.Page.Header.Controls.Add(new LiteralControl(sb.ToString()));
                }
            }
        }
    }
&lt;/blockquote&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;10)&lt;/span&gt;&lt;/strong&gt; output the header information. to finalize the entire thing and actually get the output to the page, all you have to do is add a call to the GetOpenSearchUrls method on the pages, so for example just add a call to it in the Page_Load event;
&lt;/p&gt;
&lt;blockquote&gt;
        protected void Page_Load(object sender, EventArgs e)
        {
            OpenSearch.OpenSearchRenderer.GetOpenSearchUrls();
        }

&lt;/blockquote&gt;
&lt;p&gt;
now, to wrap it all up you should have a working example of how to add OpenSearch information that will enable your site to 'tell' the browser there's one or more search providers available on your site, it should light up the down arrow to the right of the magnifying glass in the top-right search area part of your IE7 toolbar and if you expand it it should show your newly added search provider. you could also extend the definition of the xml output to include mozilla specific resources (like xmlns:moz="&lt;a href="http://www.mozilla.org/2006/browser/search/"&gt;http://www.mozilla.org/2006/browser/search/&lt;/a&gt;") and even further extend the functionality in a lot of customized ways since OpenSearch has many ways to extend the specifications and results.
&lt;/p&gt;
&lt;p&gt;
further reading:

OpenSearch:
&lt;a href="http://www.opensearch.org/"&gt;http://www.opensearch.org/&lt;/a&gt;
OpenSearch Specifications 1.1:
&lt;a href="http://www.opensearch.org/Specifications/OpenSearch/1.1"&gt;http://www.opensearch.org/Specifications/OpenSearch/1.1&lt;/a&gt;
Search Provider Extensibility in Internet Explorer 7:
&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/external/overview/ie7_opensearch_ext.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/external/overview/ie7_opensearch_ext.asp&lt;/a&gt;
Adding Search providers to IE 7 using OpenSearch 1.1:
&lt;a href="http://blogs.msdn.com/ie/archive/2005/09/14/466186.aspx"&gt;http://blogs.msdn.com/ie/archive/2005/09/14/466186.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
well, i guess that's that. Sorry for the bad formatting, one of these days i'll actually change the design, but right now this will have to do.

take care,

P.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-99979150901455059?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/99979150901455059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=99979150901455059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/99979150901455059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/99979150901455059'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/10-steps-to-adding-search-providers-to.html' title='10 steps to adding search providers to a sitecore website using OpenSearch specifications'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7468719551317845840</id><published>2006-12-12T12:17:00.000+01:00</published><updated>2006-12-12T12:24:45.801+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='sandcastle'/><title type='text'>December 2006 Sandcastle CTP</title><content type='html'>What actually should (and probably will) be another post from &lt;a href="http://sitecore.alexiasoft.nl" target="_blank"&gt;Alex&lt;/a&gt; is this: The December 2006 CTP version for &lt;a href="http://blogs.msdn.com/sandcastle" target="_blank"&gt;Sandcastle&lt;/a&gt; is now available for download.

After reading &lt;a href="http://sitecore.alexiasoft.nl/2006/10/10/sandcastle-your-sitecore-world" target="_blank"&gt;his article about it&lt;/a&gt;, i had to check it out.. and, i really like it.

So, if you're interested you can read more about the December CTP at &lt;a href="http://blogs.msdn.com/sandcastle/archive/2006/12/10/announcing-december-sandcastle-ctp.aspx" target="_blank"&gt;http://blogs.msdn.com/sandcastle/archive/2006/12/10/announcing-december-sandcastle-ctp.aspx&lt;/a&gt;, and make sure to read Alex's article too.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7468719551317845840?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7468719551317845840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7468719551317845840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7468719551317845840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7468719551317845840'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/december-2006-sandcastle-ctp.html' title='December 2006 Sandcastle CTP'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8262703869216697676</id><published>2006-12-06T08:48:00.000+01:00</published><updated>2006-12-06T08:56:08.868+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>XNA Game Studio Express Launch</title><content type='html'>Microsoft has announced that Monday the 11th of December signals the launch of XNA Game Studio Express.

Some of you might think that posting about XNA is not really for this blog, but hey, i'm a die-hard xbox360 fan, so this is fantastic news if you ask me.

I've tried the beta of XNA Game Studio Express, and it really is great fun creating your own games, take my word for it.

Further reading &amp; details on the event: &lt;a href="http://blogs.msdn.com/xna/archive/2006/12/05/xna-game-studio-express-launch-event-open-house.aspx"&gt;http://blogs.msdn.com/xna/archive/2006/12/05/xna-game-studio-express-launch-event-open-house.aspx&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8262703869216697676?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8262703869216697676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8262703869216697676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8262703869216697676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8262703869216697676'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/xna-game-studio-express-launch.html' title='XNA Game Studio Express Launch'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7416490359748532234</id><published>2006-12-05T09:19:00.000+01:00</published><updated>2006-12-05T09:25:38.962+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>ASP.NET 2.0 CSS Friendly Control Adapters 1.0</title><content type='html'>Well, it's not a brand-new release (1.0 was released 20th of November), but i still felt like writing a little about it.

ASP.NET 2.0 CSS Friendly Control Adapters 1.0 is a great add-on to visual studio for those of you out there that develop websites and keep to css styled sites.

Basically, what it does is that it hooks on to existing controls as a control adapter and instead of generating annoying table/tr/td etc tags it transforms the output into css friendly elements.

Really good addition to your visual studio installation.

More info &amp; download: &lt;a href="http://www.asp.net/CSSAdapters/Default.aspx"&gt;http://www.asp.net/CSSAdapters/Default.aspx&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7416490359748532234?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7416490359748532234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7416490359748532234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7416490359748532234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7416490359748532234'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/aspnet-20-css-friendly-control-adapters.html' title='ASP.NET 2.0 CSS Friendly Control Adapters 1.0'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3767124995682400385</id><published>2006-12-05T09:04:00.000+01:00</published><updated>2006-12-05T09:10:46.879+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>"WPF/E" CTP</title><content type='html'>Seems Microsoft just announced the first CTP of "WPF/E" (codename), their new cross-platform/xaml/wpf combo.. thingy.. something..

If you find it interesting (like i do), you'll find it at &lt;a href="http://msdn.microsoft.com/wpfe"&gt;http://msdn.microsoft.com/wpfe&lt;/a&gt;

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3767124995682400385?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3767124995682400385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3767124995682400385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3767124995682400385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3767124995682400385'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/wpfe-ctp.html' title='&quot;WPF/E&quot; CTP'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-5904759070474013203</id><published>2006-12-04T16:15:00.000+01:00</published><updated>2006-12-04T16:20:08.625+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>The Panel</title><content type='html'>I like microsoft's "The Panel" initiative, it's quite cool to see different XAML applications and also to get your hands on the sourcecode to see how it's implemented.

Gathered that some require massive CPU &amp; RAM it's still awesome and enjoyable to test it, if your computer is XAML capable that is.

Right now i'm trying the UniveRSS application, and yep, it's cool alright.
http://www.microsoft.com/emea/msdn/thepanel/featured/universs.aspx

The Panel:
http://www.microsoft.com/emea/msdn/thepanel/default.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-5904759070474013203?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/5904759070474013203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=5904759070474013203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5904759070474013203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/5904759070474013203'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/12/panel.html' title='The Panel'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1445817873406965910</id><published>2006-11-24T11:50:00.000+01:00</published><updated>2006-11-24T12:02:58.582+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0 AJAX Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='metamatrix // intefolio'/><title type='text'>first 5.3 site launched</title><content type='html'>we've just launched our new website for &lt;strong&gt;metamatrix // interfolio&lt;/strong&gt;  built on Sitecore 5.3.

after working with 5.3 for some time now I can't help but to, yet again, be amazed at what they team at sitecore can accomplish. the site includes hooking asp.net 2.0 ajax extensions directly into sitecore, and even that went extremely painless.

really the only thing that caused worry was the usual '&lt;em&gt;damn, i knew i shoul've checked the layout on a Mac earlier to avoid this headache&lt;/em&gt;' issue, but once that was solved the development was moving forward yet again.

now i can't wait to move all my ideas over to 5.3 modules, but i doubt i'll have time for that in the near future..

Now, seeing that it's friday, what better way to celebrate a launch than with a few beers after work? :)

Have a great weekend,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1445817873406965910?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1445817873406965910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1445817873406965910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1445817873406965910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1445817873406965910'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/first-53-site-launched.html' title='first 5.3 site launched'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4223535006691707869</id><published>2006-11-21T12:56:00.000+01:00</published><updated>2006-11-21T13:20:15.077+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Making the Media Library F.O.B.A.R</title><content type='html'>who else but me manages to completely mess up the 5.3 media library less than 2 hours after installing a new site?

it's a gift. pure talent.

for some strange reason i now get a broken image instead of a working one. &lt;strong&gt;but&lt;/strong&gt;: this is only for the published site and the actual image editor, when browsing the media library the image appears and everything's neat and nice and cozy.

so, right now to make images work i've resorted to clearing the assigned image from the item i want to publish so that it doesn't show up in the image field, and then re-enter only the text value of the path - making sure not to look it up.

needless to say this is -extremely- frustrating..

&lt;strong&gt;&lt;span style="color:#990000;"&gt;UPDATE:&lt;/span&gt;&lt;/strong&gt;

well, it seems that it's not outputting the db parameter (&lt;strong&gt;&amp;db=master&lt;/strong&gt;) anymore when it's 'visually' assigned.

frustration just got a touch of annoyance..

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4223535006691707869?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4223535006691707869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4223535006691707869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4223535006691707869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4223535006691707869'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/making-media-library-fobar.html' title='Making the Media Library F.O.B.A.R'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-6825581865104783609</id><published>2006-11-14T15:50:00.000+01:00</published><updated>2006-11-14T15:52:44.044+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='certification'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore'/><title type='text'>Sitecore Certified Developer</title><content type='html'>well, I passed. Yay!

Was fun and interesting and Kim Hornung was great at holding the certification and presentation. Bring on the next level!

Also, now that i know that Kim is at Sitecore, i'll add his blog (&lt;a href="http://sitecorekh.blogspot.com"&gt;http://sitecorekh.blogspot.com&lt;/a&gt;) to the bloglist.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-6825581865104783609?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/6825581865104783609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=6825581865104783609' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6825581865104783609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6825581865104783609'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/sitecore-certified-developer.html' title='Sitecore Certified Developer'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1753408644316629148</id><published>2006-11-12T20:07:00.000+01:00</published><updated>2006-11-13T09:06:18.036+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>A new day dawning</title><content type='html'>Besides the fact that my keyboard kept switching back and forth between swedish &amp; english, and that for some reason blogger kept defaulting my language to spanish (really wierd) there ability to communicate from TechEd was fantastic and really quite impressive. Countless of connected vista computers available, wi-fi in the entire complex and even public laptops and wi-fi at our hotel.

Yep, i know. Bizarre way to start a post, but i just thought i'd get it out into the open and make it clear that i'm not going to blame the communication standards in barcelona (even tho it'd been an easy way out) for the lack of a proper post. Well, here goes:

Tuesday:
Keynote
Developing rich Web Applications with ASP.NET Ajax
ASP.NET Developer and Designer Ajax bliss with Visual studio and Expression
ASP.NET Ajax Tips and Tricks
Understanding the Service Modelling Language (SML)

Wednesday:
ASP.NET: Developing data-driven web applications with .NET Language Integrated Query
Windows Presentation Foundation (WPF): Creating Windows and Browser Applications with WPF
Connected Systems - Part 4: Presentation and Interactivity
Extending ASP.NET 2.0 with Custom Providers
C# 3.0: Future directions in Language Innovation from Anders Hejlsberg

Thursday:
Connected Systems - Part 5: Identity and Access Management
An implementation of Windows CardSpace
.NET Hidden Treasures
Building WebParts the Smart way

Friday:
Windows Vista for Managed Developers: Beyond .NET 3.0
Microsoft XNA and the Future of Game Development
AJAX Patterns with the Microsoft AJAX Library
Iron Architect finals

The above list defines the sessions i went to, and it was quite the handful of things to see and consider for the future, but more on that later.

Now - A special message to Sitecore (seeing they're danish and will probably want strong coffee):
Don't go for the coffee inside the building, it tastes a bit like iron combined with cherry, and it was really more like tea than coffee. However, there is a place outside that sells proper coffee, even espresso, and it's just outside between the two buildings. Take my word for it - that coffee will save your day.

That's it for now, i'll update this post later to reflect on all the sessions, but now it's time to get Sitecore certified.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1753408644316629148?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1753408644316629148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1753408644316629148' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1753408644316629148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1753408644316629148'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/new-day-dawning.html' title='A new day dawning'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4202511560864681426</id><published>2006-11-09T15:25:00.000+01:00</published><updated>2006-11-09T19:52:44.585+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore'/><title type='text'>TechEd - All about the Experience!</title><content type='html'>Author: Dennis Skantz

After spending a couple of days on TechEd in Barcelona it is clear to me that Microsoft now is all about the Experience... User experience for system users (Vistas awesome UI) and deleveloper experience for developers (geat designer tools)... and also... conference experience for delegates to the TechEd Conference... and here I'm thinking about the well planned and executed conference. Microsoft has thought about everything... If you feel thirsty, there are cold drinks everywhere. If you feel cold, they give you a warm nice sweater and to top it all off there are over 250 sessions to choose from!

Thats really the only problem here right now. How to select 18 out of 250 all (almost all.. anyway) compelling sessions.

Here is what I've learnt so far...

&lt;strong&gt;Sitecore is way way way ahead!&lt;/strong&gt; We've been XAMLing now for about a year. Now MS is releasing Windows Presentation Foundation wich is really XAML for windows apps. So for us to adopt WPF is not a hard thing to do. Thank you for that Sitecore!

&lt;strong&gt;AJAX, AJAX, AJAX!&lt;/strong&gt; I think I counted 11 sessions about AJAX, that means you could basically spend the whole week just listening to AJAX seminars... This is nothing new to Sitecore partner. Sitecore's been using AJAX for ages. What new now is Microsoft standard framework för AJAX. Comes with a nifty library of clientside scripts guaranteed to work on IE, Mozilla, Firefox and soon Opera (wich can be used stand alone from the Asp.Net Framework) and a lot of AJAX controls to be dragged onto your standard aspx and ascx controls. AJAX is exciting, yes... But is it worth 11 sessions? No. Can we even speak about a AJAX hype? Yes... But still AJAX is cool, and the AJAX library is a good start.

&lt;strong&gt;For pattern freaks&lt;/strong&gt; I have good news in the patterns for logics department. You only have to learn three patterns; Call, Queue and Sub/Pub... All other patterns are just variations of these. Of course this is my highly simplified intrepretation of Steve Swarts and Clemens Vasters presentation about Communication, Flow and Logic.

&lt;strong&gt;For SOA preachers&lt;/strong&gt;... SOA is not the solutions to all future system design. SOA should be used only in those places in the system where it doesn't relly really slow down the user interface... because... we don't want to spoil the user experience... ;-)

&lt;strong&gt;For security concerned&lt;/strong&gt; (arent we all?) I've recently irritated myself on the fact that Sitecore doesnt lock out accounts after x number of failed login attempts. Turns out, thats actually just what the experts suggests. If you have a lock-out function in place, it is really easy to stage a DNS attack against the system. All you have to do is try to login to all accounts and fail doing so and you have soon locked out all editors and administrators from ever reaching the system. So hats of to you Sitecore for that... However, there is still an area where Sitecore (in my opinion) must change and thats in the auditing. It is bad practice not to log failed login attempts. How should you otherwise be able to detect attempted attacks? Sitecore could easily add a bundle of Auditing, and they should, for sake of traceability!

Well, thats it for now. My beer is going flat... and there are 50 sessions left to choose between....
/Dennis&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4202511560864681426?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4202511560864681426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4202511560864681426' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4202511560864681426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4202511560864681426'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/teched-all-about-experience.html' title='TechEd - All about the Experience!'/><author><name>Dennis S.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-7480902603039642064</id><published>2006-11-09T13:04:00.000+01:00</published><updated>2006-11-09T13:05:51.226+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sitecore 5.3</title><content type='html'>Well, seems it's released now (at least on SDN5).

For those of you (like me) that have been eagerly waiting i hope you've already installed it.. seeing i'm currently in barcelona right now i however have a few obstacles to tackle prior to installing it (like getting a hold of a decent bandwith for starters)..

oh well... way to go Sitecore!

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-7480902603039642064?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/7480902603039642064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=7480902603039642064' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7480902603039642064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/7480902603039642064'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/sitecore-53.html' title='Sitecore 5.3'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-631002056029307659</id><published>2006-11-08T13:11:00.000+01:00</published><updated>2006-11-08T13:12:25.511+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>TechEd: middle of day 2</title><content type='html'>So far so damn awesome it's sick.. this messes with your mind a lot and you'll surely notice it later when i finish up this post.. right now it's back to the sessions.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-631002056029307659?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/631002056029307659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=631002056029307659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/631002056029307659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/631002056029307659'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/teched-middle-of-day-2.html' title='TechEd: middle of day 2'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4897533267215565610</id><published>2006-11-05T10:53:00.000+01:00</published><updated>2006-11-05T10:56:52.446+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>TechEd</title><content type='html'>Well, tomorrow I'm off for Barcelona where we're going to attend the TechEd conf. It's going to be 5 days of brainmelting-ideainspiring-codecrazy madness, but that's why we're going there :)

More posts to come i'm sure once we've arrived and all.

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4897533267215565610?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4897533267215565610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4897533267215565610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4897533267215565610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4897533267215565610'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/11/teched.html' title='TechEd'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1385172475019764647</id><published>2006-10-27T14:22:00.000+02:00</published><updated>2006-10-27T14:45:26.985+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Atlas&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0 AJAX Extensions'/><title type='text'>waiting / writing</title><content type='html'>It's friday so I'll keep this short: I really like the new package designer in Sitecore 5.3. It's heaps better than the old one, and even tho this is pretty much identical to a solution a collegue of mine wrote last spring (so he's probably gonna have to come up with something even better yet again) I like the way things are moving forward..

Haven't had a chance to do all the things I hoped to accomplish this week since a middle-hand has been keeping me from completing a milestone in one of my current projects. Oh well, guess that's life. Not much to do there but hope that next week will be better.

However, since I've been waiting a lot this week I've kept myself busy testing out the new release of ASP.NET 2.0 AJAX Extensions (or "Atlas" if you're like me and still use that name since it's -heaps- easier to say). First thing that still strikes me when working with it is how easy it is to implement. I'm really impressed at the dedication and level of development that has gone into this project. Good stuff!

My next post will probably be a tutorial on the new release of ASP.NET 2.0 AJAX Extensions, but more on that when I do so..

Good stuff, bring on the beers (and the final release of Sitecore 5.3, please?).

Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1385172475019764647?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1385172475019764647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1385172475019764647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1385172475019764647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1385172475019764647'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/10/waiting-writing.html' title='waiting / writing'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1377599418414538628</id><published>2006-10-21T11:37:00.000+02:00</published><updated>2006-10-21T11:43:04.324+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Atlas&quot;'/><title type='text'>Microsoft ASP.NET AJAX v1.0 Beta</title><content type='html'>Yesterday Microsoft made the Microsoft ASP.NET AJAX v1.0 Beta (previously known under codename "atlas") available to the public, it's up for grabs at &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=90E0CCDF-D246-4929-A027-D5EE6F806851&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=90E0CCDF-D246-4929-A027-D5EE6F806851&amp;amp;displaylang=en&lt;/a&gt;

Also, alongside the release of that beta version, the new ASP.NET AJAX Control Toolkit (previously known as Atlas Control Toolkit) was also made public, and you'll find it at &lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=AtlasControlToolkit"&gt;http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=AtlasControlToolkit&lt;/a&gt;

Have fun!

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1377599418414538628?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1377599418414538628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1377599418414538628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1377599418414538628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1377599418414538628'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/10/microsoft-aspnet-ajax-v10-beta.html' title='Microsoft ASP.NET AJAX v1.0 Beta'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-922755962337692100</id><published>2006-10-18T08:37:00.000+02:00</published><updated>2006-10-18T08:52:28.178+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><title type='text'>IE7 roll-out</title><content type='html'>Well, actually it seems that some people -still- get the same errors (KB918899 related), even if they install the update. Wierd. For these people (and for the rest of you/us all) the perhaps good news is that a majority of clients will get &lt;strong&gt;Internet Explorer 7 as an automatic update -&lt;/strong&gt; &lt;strong&gt;today&lt;/strong&gt;.

To read more about this see the excellent &lt;a href="http://blogs.msdn.com/ie"&gt;IEBlog&lt;/a&gt;, including posts &lt;a href="http://blogs.msdn.com/ie/archive/2006/07/26/678149.aspx"&gt;IE7 to be distributed via Automatic Updates&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/ie/archive/2006/10/06/IE7-Is-Coming-This-Month_2E002E002E00_Are-you-Ready_3F00_.aspx"&gt;IE7 Is Coming This Month...Are you Ready?&lt;/a&gt;)

Now, there's -always- a catch (I feel like a broken record, but there usually is): This automatic update is only available for the users running on english/american locale. Seems the swedish version will be ready for roll-out as an automatic update sometime during december. Oh well. (You could always change your/your clients/whomever's locale to english in the system since that'll tell IE to use the same, and then it'll get updated..)

Personally I like the idea that IE7 has been made an "update" since it's a lot better and it gives more to the people developing websites.

That's all folks - Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-922755962337692100?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/922755962337692100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=922755962337692100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/922755962337692100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/922755962337692100'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/10/ie7-roll-out.html' title='IE7 roll-out'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-1806075948252048183</id><published>2006-10-16T14:12:00.000+02:00</published><updated>2006-10-16T14:21:32.025+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore'/><title type='text'>Annoying KB918899 issue resolved</title><content type='html'>As -many- have noticed the Cumulative Security Update for Internet Explorer (KB918899) that came a while ago caused major problems with IE6 (Internet Explorer 6) on XP and 2003 Server. Well, there's another fix now available (KB923996) that you can download directly (instead of the previous one where you actually had to get microsoft to send it to you).

Update for Microsoft Windows XP (SP2), English version
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ff9bc431-01f3-48e8-9a58-d701d2e60c1d&amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=ff9bc431-01f3-48e8-9a58-d701d2e60c1d&amp;amp;DisplayLang=en&lt;/a&gt;

Update for Microsoft Windows XP (SP2), Swedish version
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ff9bc431-01f3-48e8-9a58-d701d2e60c1d&amp;DisplayLang=sv"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=ff9bc431-01f3-48e8-9a58-d701d2e60c1d&amp;amp;DisplayLang=sv&lt;/a&gt;

Update for Windows Server 2003 Service Pack 1 x64 Edition, English version
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2b7b1d5b-0b08-432a-b552-857997513476&amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=2b7b1d5b-0b08-432a-b552-857997513476&amp;amp;DisplayLang=en&lt;/a&gt;

Hopefully this helps to make your experience smooth once again,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-1806075948252048183?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/1806075948252048183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=1806075948252048183' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1806075948252048183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/1806075948252048183'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/10/annoying-kb918899-issue-resolved.html' title='Annoying KB918899 issue resolved'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-2740234324163397780</id><published>2006-10-16T08:38:00.000+02:00</published><updated>2006-10-16T12:12:47.332+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sneaky, sneaky..</title><content type='html'>Seems Sitecore has released a new version of 5.3, namely &lt;strong&gt;Sitecore 5.3 RC3&lt;/strong&gt;.

Interesting.. feels like the final version will be arriving shortly.

&lt;strong&gt;&lt;span style="color:#990000;"&gt;UPDATE&lt;/span&gt;&lt;/strong&gt;

The installer is a lot friendlier now, and it didn't crash once for me when installing it on my laptop that runs Vista. Good stuff!

However, might just be my setup, but i was unable to create a new website in my IIS7, I just had the option to install it on the already existing website.

Oh well, that's a really petty problem anyway since you can change it manually anyway you want.

Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-2740234324163397780?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/2740234324163397780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=2740234324163397780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2740234324163397780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/2740234324163397780'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/10/sneaky-sneaky.html' title='Sneaky, sneaky..'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-9038753132299673319</id><published>2006-10-11T09:47:00.000+02:00</published><updated>2006-10-16T11:22:25.275+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><title type='text'>Sitecore 5.3 &amp; Vista RC2</title><content type='html'>So, i've been running Vista RC2 now on my laptop and I have to say that all this fuzz about bugs and crashes and whatever people keep screeming about all over the net seems -way- exaggerated.. well, either that or these people are trying to install it on a pc that was outdated even back when bellbottoms were cool.. Anyway, that's not the point. What i was getting to is that, for me, Vista is a huge improvement compared to todays systems, and that's good.

However, there's always a catch, otherwise there's no point in writing about it, but considering that it's still just RC2 -hopefully- these issues will be fixed when it's released.

Configuring things like IIS7, or even installing Web Applications Projects update for Visual Studio 2005, or "Atlas"/ASP.NET AJAX is anything but easy and user-friendly. After hours of failed installations I finally got them all running the way they should, and then I proceeded to my final goal, installing Sitecore 5.3.. Again, another no-go-zone (at least, for me). The installer crashed, bigtime, and pretty much won't let me do anything.. First up it crashes in the background after selecting the licence file, I get a notification saying that InstallDriver Module has stopped working.. What's interesting though is that I'm simply able to close the popup and continue with the installation. At this stage i'm going "Heeey, that's neat." but unfortunately that only lasts a minute until it throws another error: Error 1609:.. ASPNET user is not a valid user or group..

And that's where I'm at right now. Might have to manually configure the ASPNET user (shouldn't tho, but who knows?).

If/When I get this up and running i'll post again..

&lt;span style="color:#990000;"&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/span&gt;

Well, here's what has to be done:


&lt;ol&gt;&lt;li&gt;Make sure Vista is configured to recognize IIS6 actions/scripts etc. This can be done by checking the appropriate boxes under the IIS part of the "Turn Windows features on or off".&lt;/li&gt;&lt;li&gt;Install .NET Framework 1.1 (and updates).&lt;/li&gt;&lt;li&gt;Turn the UAP off (not sure if this really is needed, but that's what I did).&lt;/li&gt;&lt;li&gt;Run the installer as administrator (right click the installer, "Run as Administrator").&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For me it still crashes in the beginning with that InstallDriver Module error, but after that the installer runs (read "is now running" since i'm installing right now) smoothly.. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;UPDATE 2:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Well, the happiness of the first update was not kept alive for long. After the installation finished (which it did and that was nice) I'm now stuck at the next obstacle - When trying to access localhost all I got at first was an error message saying it couldn't read the config file and a wierd "Could not load all ISAPI filters for site". So, like every other time something goes wrong, I added Network Service and the other system roles to the website and it's content, allowing full access for ease of use. Voila, time to see the next error, and this one is regarding changes made to the handling of the actual web.config file itself. This part was a little more tricky since it's not at all that well documented.. &lt;/p&gt;&lt;p&gt;Below is what i've done so far (and as of right now I'm not at all sure about this solution, maybe there's a best-practice way to go about all this, but since I haven't seen one yet I'll keep on trying).&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a system.webServer node&lt;/li&gt;&lt;li&gt;Move HttpModules and HttpHandlers from system.web to system.webServer&lt;/li&gt;&lt;li&gt;Rename HttpModules to modules&lt;/li&gt;&lt;li&gt;Rename HttpHandlers to handlers&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;So far all I get is that it's missing a http handler and nothing will load, but perhaps I'll have it fixed soon..&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;UPDATE 3:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Well, this is a situation with IIS7 having two options to run the site in: "Classic .NET Mode" or "Integrated .NET mode", the later of the two is what they recommend for IIS7 and future versions. Fine, they want us to move up, that's alright. But right now I don't care, I just want it to run. So, if you want to try and load it into the Integrated .NET mode (which I'm trying to), keep thinking and comment, otherwise you can run a command in the command promt to switch it to Classic .NET mode.&lt;/p&gt;&lt;blockquote&gt;%systemroot%\system32\inetsrv\appcmd.exe set app "SITENAMEHERE/"
/applicationPool:"Classic .NET AppPool"&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;FINAL UPDATE:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;When all else fails, admit you've probably done something stupid and save yourself the worry by simply scrapping the old installation and do a new one. Lesson learned.&lt;/p&gt;&lt;p&gt;Hope this will help you install it on Vista if you run across these problems as well. &lt;/p&gt;Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-9038753132299673319?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/9038753132299673319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=9038753132299673319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9038753132299673319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/9038753132299673319'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/10/sitecore-53-vista-rc2.html' title='Sitecore 5.3 &amp; Vista RC2'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8741073498303580584</id><published>2006-09-27T10:23:00.000+02:00</published><updated>2006-12-15T10:10:16.722+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Atlas&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0 AJAX Extensions'/><title type='text'>Atlas Example</title><content type='html'>&lt;p&gt;Right, down to business then: Sitecore and "Atlas".

&lt;p&gt;"Atlas" is pretty much microsofts approach to AJAX and the hype surrounding it, so it's quite obvious that it was not going to go away but instead turn into a new part of the framework (see Scott Guthrie's blog on the matter at &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Downloads:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;"Atlas": &lt;a href="http://go.microsoft.com/fwlink/?LinkId=52384"&gt;http://go.microsoft.com/fwlink/?LinkId=52384&lt;/a&gt;&lt;/li&gt;&lt;li&gt;"Atlas" Control Toolkit: &lt;a href="http://atlas.asp.net/atlastoolkit"&gt;http://atlas.asp.net/atlastoolkit&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;Now, there's more or less two ways of going about using "Atlas" to power your website, either you build your own custom extender, or you could go with the really easy way - use the UpdatePanel. For now, let's just go with the UpdatePanel approach.

If you haven't installed "Atlas" on a already existing site that you want to enable "Atlas" on, don't worry, it's pretty easy to set up:

&lt;ol&gt;&lt;li&gt;Install "Atlas" (make sure the checkboxes are ticked to also install Visual Studio project template and to register the .asbx extension in IIS). &lt;/li&gt;&lt;li&gt;Copy the "Atlas" run-time assembly (Microsoft.Web.Atlas.dll) from its installation folder to your site's Bin folder. &lt;/li&gt;&lt;li&gt;Open the Web.config file &lt;/li&gt;&lt;li&gt;Add these elements as children to the &amp;lt;configuration&amp;gt; element

&amp;lt;configSections&amp;gt;
&amp;lt;sectionGroup name="microsoft.web" type="Microsoft.Web.Configuration.MicrosoftWebSectionGroup"&amp;gt;
&amp;lt;section name="converters" type="Microsoft.Web.Configuration.ConvertersSection"/&amp;gt;
&amp;lt;/sectionGroup&amp;gt;
&amp;lt;/configSections&amp;gt;

&amp;lt;microsoft.web&amp;gt;
&amp;lt;converters&amp;gt;
&amp;lt;add type="Microsoft.Web.Script.Serialization.Converters.DataSetConverter"/&amp;gt;
&amp;lt;add type="Microsoft.Web.Script.Serialization.Converters.DataRowConverter"/&amp;gt;
&amp;lt;add type="Microsoft.Web.Script.Serialization.Converters.DataTableConverter"/&amp;gt;
&amp;lt;/converters&amp;gt;
&amp;lt;/microsoft.web&amp;gt;
&lt;/li&gt;&lt;li&gt;Add/Integrate these elements as children to the &amp;lt;system.web&amp;gt; element

&amp;lt;pages&amp;gt;
&amp;lt;controls&amp;gt;
&amp;lt;add namespace="Microsoft.Web.UI" assembly="Microsoft.Web.Atlas" tagPrefix="atlas"/&amp;gt;
&amp;lt;add namespace="Microsoft.Web.UI.Controls" assembly="Microsoft.Web.Atlas" tagPrefix="atlas"/&amp;gt;
&amp;lt;/controls&amp;gt;
&amp;lt;/pages&amp;gt;

&amp;lt;!-- ASMX is mapped to a new handler so that proxy javascripts can also be served. --&amp;gt;
&amp;lt;httpHandlers&amp;gt;
&amp;lt;remove verb="*" path="*.asmx"/&amp;gt;
&amp;lt;add verb="*" path="*.asmx" type="Microsoft.Web.Services.ScriptHandlerFactory" validate="false"/&amp;gt;
&amp;lt;/httpHandlers&amp;gt;
&amp;lt;httpModules&amp;gt;
&amp;lt;add name="ScriptModule" type="Microsoft.Web.Services.ScriptModule"/&amp;gt;
&amp;lt;/httpModules&amp;gt;
&lt;/li&gt;&lt;li&gt;Save the Web.config file. &lt;/li&gt;&lt;li&gt;Add a reference to the "Atlas" run-time assembly (Microsoft.Web.Atlas.dll). &lt;/li&gt;&lt;li&gt;(Optional) You can now also add "Atlas" to the Toolbox in Visual Studio. Right click the Toolbox, chose "add tab", name it, then right click, "choose items..", and browse to the "Atlas" run-time assembly (Microsoft.Web.Atlas.dll).
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Phew! Ok, that's about it for the installation and messing with a already existing site, now on to the fun stuff. &lt;/p&gt;&lt;p&gt;If you've never tried it before you're going to have fun, "Atlas" is neat and easy to use (note tho that it's still not a full release, so if it for whatever reason does crash, well, sorry, not much to do then but to re-install it). &lt;/p&gt;&lt;p&gt;&lt;strong&gt;1: Adding a ScriptManager &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Add this to the page you want to enable "Atlas" on.&lt;/p&gt;&lt;div    style="font-family:Monospace;font-size:10pt;color:white;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="MyScriptManager"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;EnablePartialRendering&lt;/span&gt;&lt;span style="color:blue;"&gt;="true"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:#000000;"&gt;Now, there's more stuff to add here if you want to, like automated error handling etc:&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="MyScriptManager"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;EnablePartialRendering&lt;/span&gt;&lt;span style="color:blue;"&gt;="true"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ErrorTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;="width: 450px; height: 300px; padding: 10px; border: solid 1px black; background: gray; text-align: left;"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;h1&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;Site error detected&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;h1&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;An unhandled exception with the following message has occured on the server:&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;span&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="Span1"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;We're sorry for any trouble this has caused you and will fix the problem as soon as possible.&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;input&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="Button1"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="button"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;="OK"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ErrorTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Play around with it, you'll find more things to use i'm sure.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2: Adding a UpdatePanel&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;An UpdatePanel is pretty much a content-wrapper that will allow you to reload parts of the page (AJAX styled content refreshing instead of reloading an entire page) so let's look at that one. First up, we need to wrap our area with the tags.&lt;/p&gt;&lt;p&gt;&lt;div    style="font-family:Monospace;font-size:10pt;color:white;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="UpdateExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;="Always"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:#000000;"&gt;Next up, adding a ContentTemplate to define what within this UpdatePanel that's our actual content area.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="UpdateExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;="Always"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="Div1"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:#000000;"&gt;Now, let's add a nice looking UpdateProgress as well to show that something's going on when it loads&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="UpdateExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;="Always"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="Div1"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdateProgress&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="UpdateProgress1"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ProgressTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="Div2"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Image&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="Image2"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:blue;"&gt;="/images/loading2.gif"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;GenerateEmptyAlternateText&lt;/span&gt;&lt;span style="color:blue;"&gt;="True"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;AlternateText&lt;/span&gt;&lt;span style="color:blue;"&gt;="Loading.."&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ProgressTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdateProgress&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;strong&gt;3: Refreshing the content&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It's nice to have the possibility to update content on the page, but unless we actually activate it there's no point, so let's add an automated update of the content using a TimerControl.&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TimerControl&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="tcExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Interval&lt;/span&gt;&lt;span style="color:blue;"&gt;="10000"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;="true"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;OnTick&lt;/span&gt;&lt;span style="color:blue;"&gt;="tcExample_Tick"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TimerControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:#000000;"&gt;Next we need to add the tick event to the UpdatePanel so that it knows when to update itself. This is done using a Trigger that we'll connect to the Tick event of the newly created TimerControl. Add the following code within the UpdatePanel section:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ControlEventTrigger&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ControlID&lt;/span&gt;&lt;span style="color:blue;"&gt;="tcExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;EventName&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tick"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;

&lt;strong&gt;4: Defining what to refresh/update&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Well, now that we have automated updating partially set up, let's add something to actually refresh/update. For this example we'll use an image (simple, i know, but it's just for example purposes). Add the following image tag within the &amp;lt;ContentTemplate&amp;gt; section of the UpdatePanel&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Image&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="ExampleImage"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"/&amp;gt;

&lt;/span&gt;&lt;strong&gt;5: The code so far&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now, if you've followed the steps above somewhat down each line your page should look something like this:&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="MyScriptManager"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;EnablePartialRendering&lt;/span&gt;&lt;span style="color:blue;"&gt;="true"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ErrorTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;="width: 450px; height: 300px; padding: 10px; border: solid 1px black; background: gray; text-align: left;"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;h1&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;Site error detected&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;h1&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;An unhandled exception with the following message has occured on the server:&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;span&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="errorMessageLabel"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;We're sorry for any trouble this has caused you and will fix the problem as soon as possible.&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;input&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="okButton"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="button"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;="OK"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ErrorTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="UpdateExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Mode&lt;/span&gt;&lt;span style="color:blue;"&gt;="Always"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdateProgress&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="UpdateProgress1"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ProgressTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Image&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="Image1"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:blue;"&gt;="/images/loading2.gif"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;GenerateEmptyAlternateText&lt;/span&gt;&lt;span style="color:blue;"&gt;="True"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;AlternateText&lt;/span&gt;&lt;span style="color:blue;"&gt;="Loading.."&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ProgressTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdateProgress&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;Image&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;="ExampleImage"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"/&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ControlEventTrigger&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ControlID&lt;/span&gt;&lt;span style="color:blue;"&gt;="tcExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;EventName&lt;/span&gt;&lt;span style="color:blue;"&gt;="Tick"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TimerControl&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;="tcExample"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;="server"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Interval&lt;/span&gt;&lt;span style="color:blue;"&gt;="10000"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;="true"&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;OnTick&lt;/span&gt;&lt;span style="color:blue;"&gt;="tcExample_Tick"&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;atlas&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TimerControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;strong&gt;6: Adding the final code&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Almost done now, just one thing left, and that's to add the actual code we use behind the scenes.
For this example i've used a simple sitecore structure to attach images to an existing item
Sitecore
- Content
-- Home
--- AtlasExample
---- Image 1
---- Image 2
---- Image Whatever
---- ...
&lt;/p&gt;&lt;p&gt;The template that holds the images simply holds a Image field named "image", nothing more. The reason for having them located under one item is just for easy access through sitecore.&lt;/p&gt;&lt;p&gt;In the code we're gonna be using a ItemCollection and IEnumerator to move through the items and get the content.&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;span style="color:black;"&gt; System.Collections.&lt;/span&gt;&lt;span style="color:teal;"&gt;IEnumerator&lt;/span&gt;&lt;span style="color:black;"&gt; images;
&lt;/span&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:teal;"&gt;ItemCollection&lt;/span&gt;&lt;span style="color:black;"&gt; imageItems;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;First up, load the content into the collection when the page is first loaded: &lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;span style="color:black;"&gt; Page_Load(&lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;&lt;span style="color:black;"&gt; sender, &lt;/span&gt;&lt;span style="color:teal;"&gt;EventArgs&lt;/span&gt;&lt;span style="color:black;"&gt; e)
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (!Page.IsPostBack)
{
InitColl();
}
}
&lt;/span&gt;
&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;span style="color:black;"&gt; InitColl()
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (Sitecore.&lt;/span&gt;&lt;span style="color:teal;"&gt;Context&lt;/span&gt;&lt;span style="color:black;"&gt;.Item.HasChildren)
{
imageItems = &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:teal;"&gt;ItemCollection&lt;/span&gt;&lt;span style="color:black;"&gt;();
&lt;/span&gt;&lt;span style="color:teal;"&gt;Item&lt;/span&gt;&lt;span style="color:black;"&gt; imageFolder = Sitecore.&lt;/span&gt;&lt;span style="color:teal;"&gt;Context&lt;/span&gt;&lt;span style="color:black;"&gt;.Item.Children[&lt;/span&gt;&lt;span style="color:maroon;"&gt;"AtlasExample"&lt;/span&gt;&lt;span style="color:black;"&gt;];
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (imageFolder!=&lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&lt;span style="color:black;"&gt;)
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:teal;"&gt;Item&lt;/span&gt;&lt;span style="color:black;"&gt; itm &lt;/span&gt;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&lt;span style="color:black;"&gt; imageFolder.Children)
{
imageItems.Add(itm);
}
images = imageItems.GetEnumerator();
SelectNextImage();
}
&lt;/span&gt;&lt;span style="color:blue;"&gt;else
&lt;/span&gt;&lt;span style="color:black;"&gt;{
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;&lt;span style="color:black;"&gt;.ExampleImage.Visible = &lt;/span&gt;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&lt;span style="color:black;"&gt;;
Sitecore.&lt;/span&gt;&lt;span style="color:teal;"&gt;Context&lt;/span&gt;&lt;span style="color:black;"&gt;.ClientPage.ClientResponse.Refresh(&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;&lt;span style="color:black;"&gt;.ExampleImage);
}
}
}

&lt;/span&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;span style="color:black;"&gt; SelectNextImage()
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (imageItems!=&lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&lt;span style="color:black;"&gt;)
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (imageItems.Count&amp;gt;0)
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (images != &lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&lt;span style="color:black;"&gt;)
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (!images.MoveNext())
{
images.Reset();
images.MoveNext();
}
&lt;/span&gt;&lt;span style="color:teal;"&gt;Item&lt;/span&gt;&lt;span style="color:black;"&gt; next = (&lt;/span&gt;&lt;span style="color:teal;"&gt;Item&lt;/span&gt;&lt;span style="color:black;"&gt;)images.Current;
Sitecore.Data.Fields.&lt;/span&gt;&lt;span style="color:teal;"&gt;ImageField&lt;/span&gt;&lt;span style="color:black;"&gt; image = (Sitecore.Data.Fields.&lt;/span&gt;&lt;span style="color:teal;"&gt;ImageField&lt;/span&gt;&lt;span style="color:black;"&gt;)next.Fields[&lt;/span&gt;&lt;span style="color:maroon;"&gt;"image"&lt;/span&gt;&lt;span style="color:black;"&gt;];
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;&lt;span style="color:black;"&gt;.ExampleImage.ImageUrl = &lt;/span&gt;&lt;span style="color:maroon;"&gt;"~/media library/Images/"&lt;/span&gt;&lt;span style="color:black;"&gt; + image.Src;
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;&lt;span style="color:black;"&gt;.ExampleImage.AlternateText = &lt;/span&gt;&lt;span style="color:maroon;"&gt;"AtlasExample"&lt;/span&gt;&lt;span style="color:black;"&gt;;
}
}
}
}

&lt;/span&gt;Next, add the tick event that we stated in the TimerControl earlier.&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;span style="color:black;"&gt; tcExample_Tick(&lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;&lt;span style="color:black;"&gt; sender, &lt;/span&gt;&lt;span style="color:teal;"&gt;EventArgs&lt;/span&gt;&lt;span style="color:black;"&gt; e)
{
SelectNextImage();
}
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black;"&gt;Now go ahead and build it and watch the results on your site.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;8: Moving on&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As you can see extending a site, even a sitecore powered one, with "Atlas" is really a piece of cake and is there for everyone's taking. Check out the Atlas control toolkit and the samples there for more details on how to extend with "Atlas" using custom extenders.&lt;/p&gt;&lt;p&gt;Further reading: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Roadmap to ASP.NET "Atlas" Documentation and Resources: &lt;a href="http://atlas.asp.net/docs/Default.aspx"&gt;http://atlas.asp.net/docs/Default.aspx&lt;/a&gt; &lt;/li&gt;&lt;li&gt;"Atlas" Control Toolkit: &lt;a href="http://atlas.asp.net/default.aspx?tabid=47&amp;subtabid=477"&gt;http://atlas.asp.net/default.aspx?tabid=47&amp;amp;subtabid=477&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Scott Guthrie's blog: &lt;a href="http://weblogs.asp.net/scottgu/default.aspx"&gt;http://weblogs.asp.net/scottgu/default.aspx&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Take care, and have fun!&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8741073498303580584?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8741073498303580584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8741073498303580584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8741073498303580584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8741073498303580584'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/09/atlas-example.html' title='Atlas Example'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-8732419196481164340</id><published>2006-09-19T09:01:00.000+02:00</published><updated>2006-09-19T09:06:46.979+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Atlas&quot;'/><title type='text'>Atlas loves Sitecore</title><content type='html'>Well, the title pretty much says it all. I've played around a bit with Atlas now, which b.t.w. is now called Microsoft AJAX Library and ASP.NET 2.0 AJAX Extensions, so scrap the whole "Atlas" namning thing, it's going to be incorporated into the asp: namespace by the looks of it.

Moving on then: Including Microsoft AJAX Library / ASP.NET 2.0 AJAX Extensions was actually a lot easier than i thought, it's pretty much just install &amp; use.

I've started on an article (not finished yet) that will detail the steps/outlines of how you can do this in a few easy steps.. might have time to publish it later today, we'll see..

&lt;span style="color:#990000;"&gt;UPDATE:&lt;/span&gt;
I'm afraid i don't have the time to finish the article, and seeing that i'm heading to New York tomorrow i'll either finish it there or when i get back.

Take care!

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-8732419196481164340?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/8732419196481164340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=8732419196481164340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8732419196481164340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/8732419196481164340'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/09/atlas-loves-sitecore.html' title='Atlas loves Sitecore'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-6764071697147670831</id><published>2006-09-15T13:26:00.000+02:00</published><updated>2006-09-15T13:30:04.074+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Bugs?</title><content type='html'>Seems there's a bug in the template handling - it's impossible to add a external link via the link field.

Try this:
&lt;ol&gt;&lt;li&gt;Create a template&lt;/li&gt;&lt;li&gt;Add a Link field&lt;/li&gt;&lt;li&gt;Save&lt;/li&gt;&lt;li&gt;Create an Item based on the newly created template&lt;/li&gt;&lt;li&gt;Try to add a external link using the link field&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Notice that the dialog that opens up is in fact the dialog for Internal Link?&lt;/p&gt;&lt;p&gt;Hopefully this'll get fixed, or is already fixed perhaps?&lt;/p&gt;&lt;p&gt;&lt;span style="color:#990000;"&gt;UPDATE:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Keeping an eye open proves to be priceless at times, and this time i'm soooo proven wrong (the dropdown to the right, on the side of "insert link" includes the option to add a &lt;strong&gt;external&lt;/strong&gt; link). Well, you live and learn. There's no bug what-so-ever, i'm the bug :)&lt;/p&gt;&lt;p&gt;P.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-6764071697147670831?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/6764071697147670831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=6764071697147670831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6764071697147670831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/6764071697147670831'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/09/bugs.html' title='Bugs?'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-3577168418965429170</id><published>2006-09-13T16:43:00.000+02:00</published><updated>2006-09-13T16:46:53.929+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Sitecore 5.3</title><content type='html'>Well well well, quite the surprise for SDN5 users to see is the change from 5.3 Beta to simply 5.3 (RC2).

This i've been waiting for with the restlessness of a child, so I'll post more later after I've used it for a while.

To quote myself:

&lt;blockquote&gt;For those of you with access to sdn5 and curiosity to satisfy, run on over there and download it..&lt;/blockquote&gt;

&lt;span style="color:#cc0000;"&gt;UPDATE:&lt;/span&gt;
Well, the installer works better than before, but i still hope they will add the option to specify the prefix when installing on SQL, 'cause if they don't it'll be a pain to install on a server with existing solutions..

That's it for now,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-3577168418965429170?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/3577168418965429170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=3577168418965429170' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3577168418965429170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/3577168418965429170'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/09/sitecore-53.html' title='Sitecore 5.3'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-4030635368649701767</id><published>2006-08-25T14:16:00.001+02:00</published><updated>2006-08-25T14:22:54.933+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.2'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore blogs'/><title type='text'>Items and their security</title><content type='html'>Security is a tricky thing, no matter what application or layer you're trying to manipulate/access.

First up, sitecore has awesome security, and with each release it keeps getting better and better, so that's a really big + for them, and that's why i'm just gonna relay this post to Alexey Rusakov instead since he's worked on this a lot (i only wrote a work-around).

So, go read: &lt;a href="http://www.alexeyrusakov.com/sitecoreblog/Trackback.aspx?guid=07290459-e2d2-4cca-a9fe-2019292b8044"&gt;Alexey Rusakov - More on 'Hidden' Items&lt;/a&gt;

that's it for me today, it's friday and almost time for after-work beer :)

have a great weekend,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-4030635368649701767?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/4030635368649701767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=4030635368649701767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4030635368649701767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/4030635368649701767'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/08/items-and-their-security_25.html' title='Items and their security'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115623119607499456</id><published>2006-08-22T09:00:00.000+02:00</published><updated>2006-08-22T09:19:56.136+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='support'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore blogs'/><title type='text'>Tthe importance of looking ahead</title><content type='html'>&lt;p&gt;First release has seen daylight and now (i think) i can finally breathe again. &lt;/p&gt;&lt;p&gt;It's been interesting, that i can't argue, but it's also proven to be quite challenging at times. Had to figure out a lot of new ways to do things you know you somehow should be able to do. Next in line will probably be updates and enhancements and what-not but that's all in the coming so i reckon for this very moment i'm quite happy with the release i've made and the chance to breathe again.&lt;/p&gt;&lt;p&gt;Ever thought about the way blogs and articles help you think outside the box? Well, i have.&lt;/p&gt;&lt;p&gt;There are people that do a lot more for others that they think. People that don't just develop solutions, they also develop other people. They are, in lack of better words, people developers.&lt;/p&gt;&lt;p&gt;Think about it: Who hasn't glanced at pieces of code in articles from the various sitecore blogs? or adapted the code from sdn5 to suit their needs? I know i have.&lt;/p&gt;&lt;p&gt;All these authors, thinkers and futurists make a difference if you ask me - They're part of a new breed of developers, of teachers. &lt;/p&gt;&lt;p&gt;You know what? let's dub them &lt;em&gt;knights&lt;/em&gt; of sitecore. Along with the awesome code in sitecore their ways of adaptation and use of it make damn sure that people, like me &amp; you, keep looking ahead, looking for more &amp;amp; striving to improve.&lt;/p&gt;&lt;p&gt;Sitecore, and their &lt;em&gt;knights&lt;/em&gt;, are one step ahead, and from what i'm seeing people are running as fast as they can to catch up.&lt;/p&gt;&lt;p&gt;This time my hat's off to you all, and hopefully you know who you are.&lt;/p&gt;&lt;p&gt;That my friends, is the importance of looking ahead.&lt;/p&gt;P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115623119607499456?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115623119607499456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115623119607499456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115623119607499456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115623119607499456'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/08/tthe-importance-of-looking-ahead.html' title='Tthe importance of looking ahead'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115571714310150891</id><published>2006-08-16T10:25:00.000+02:00</published><updated>2006-08-17T08:33:12.250+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='portals'/><category scheme='http://www.blogger.com/atom/ns#' term='portlets'/><title type='text'>Murphy's 1st Law: If anything can go wrong, it will</title><content type='html'>2 days to deadline i installed a package with some updates to parts that shouldn't affect the solution at all, but now all my portals have stopped loading and instead only gives me the below error message no matter what i do to the IDs all over the place.

&lt;blockquote&gt;Server Error in '/' Application.

Multiple controls with the same ID '_menu' were found. FindControl requires that controls have unique IDs.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Multiple controls with the same ID '_menu' were found. FindControl requires that controls have unique IDs.
&lt;/blockquote&gt;
Not the ideal scenario to start my day with, but hopefully i'll have it fixed soon (otherwise it's going to be a loooooong day)..

P.

&lt;span style="color:#990000;"&gt;UPDATE:&lt;/span&gt;
well, i don't really know if it was from lack of sleep or stress or something else, but after moving a few more IDs around it's back to normal again.. 2 days &amp;amp; counting..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115571714310150891?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115571714310150891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115571714310150891' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115571714310150891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115571714310150891'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/08/murphys-1st-law-if-anything-can-go.html' title='Murphy&apos;s 1st Law: If anything can go wrong, it will'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115528535193593400</id><published>2006-08-11T10:26:00.000+02:00</published><updated>2006-08-11T10:36:35.613+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='portals'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.2'/><category scheme='http://www.blogger.com/atom/ns#' term='portlets'/><title type='text'>Hook, line &amp; sinker</title><content type='html'>I think the first week of being back from vacation is a pseudo-realistic experience:

you wake up each morning thinking &lt;i&gt;'damn, i so wanna stay in bed'&lt;/i&gt;, then you get up, go to work and somehow there's tons of stuff to do that wasn't there when you left. Then, as fast as you thought you'd like a couple of weeks more, the first couple of days go by and you're back in the net: hook, line &amp; sinker.

Right now i'm in the process of finalizing the, by far, biggest sitecore solution i've ever built. 100% XAML/Sheer UI based on a number of portals and -tons- of portlets, custom applications, controls, wizards, events, messages, workflows &amp;amp; pipelines (i won't even try to count the number of templates, masters and items). And you know what? &lt;b&gt;i'm loving it&lt;/b&gt;. Working with the sitecore adaptation of xaml is damn cool and at times it's been keeping me up at nights (something i thought nothing anymore could ever get me to). It's built on 5.2, not 5.3, but as soon as 5.3 gets a final release i'd like to port it over 'cause i've noticed a lot of things in there that this solution could benefit from. Once the solution is live (and if i get the &lt;i&gt;'ok'&lt;/i&gt; from the &lt;i&gt;captains&lt;/i&gt;) i'll post more on it.

Although i haven't slept much this week, come end of next week i'm damn sure gonna make up for it (if there's still a hint of summer outside the walls that is).

Take care,

P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115528535193593400?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115528535193593400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115528535193593400' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115528535193593400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115528535193593400'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/08/hook-line-sinker.html' title='Hook, line &amp; sinker'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115450842201380165</id><published>2006-08-02T10:28:00.000+02:00</published><updated>2006-08-02T10:47:02.053+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Vacation: Week #2</title><content type='html'>Well, it's been awesome so far.

Managed to go up to the northern parts of Sweden where i'm from, and the sun never sets up there. &lt;a href="http://www.pitea.se" target="_blank"&gt;Piteå&lt;/a&gt; and the cities close by are interesting during the summer: daylight 24/7, tons of stuff to do and more than enough beer to drink. Even managed to try the new &lt;a href="http://www.pdg.se" target="_blank"&gt;discgolf&lt;/a&gt; course they're building up there, and by the looks of it that course is gonna rock.

After a couple of days up there we headed down to Copenhagen (yes, Denmark) for a chance to get away from the everyday life and stuff. Actually walked past the Sitecore HQ, but didn't really manage to pop in and say hello. Now afterwards i kinda wish i had.. oh well.. another time perhaps (when someone invites me instead of crashing). Copenhagen is an amazing city tho, so relaxed and interesting. Managed to walk for more than i'd hoped to walk for in a lifetime, but it was well worth it.

After that we headed up back thru sweden and stopped by Skummeslövstrand for a few days, driving around to Halmstad, Båstad and a lot of other places i don't remember the name of but they pretty much all ends with -arp something something. All things considered, a very nice couple of days spent relaxing and feeling like i'm actually on vacation.

Back in Stockholm now, so for this week (which is also my last week of vacation) i'm gonna focus on the important things in life: discgolf, volleyball, beer and poker.

Next post will probably be a lot more tech orientated, but this one is comepletely clean from all things tech (hey, i'm on vacation damnit).

Take care.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115450842201380165?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115450842201380165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115450842201380165' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115450842201380165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115450842201380165'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/08/vacation-week-2.html' title='Vacation: Week #2'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115269425040410869</id><published>2006-07-12T10:27:00.000+02:00</published><updated>2006-07-12T11:01:10.150+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>First impressions..</title><content type='html'>Well, it didn't dissapoint me at all i have to say. 5.3 looks like it's going to be awesome. Had a bit of trouble installing it to my regular sql server, so for attempt #2 i went for the sqllite option instead and it works like a charm after setting a few additional security permissions.

Don't know where to start really, so i'll just drop a few things on here for now.

The layout of the content editor is heaps better than 5.2. no more waste of space here, in fact, it's quite clever how they've managed to squeze so much information and still keeping it easy to access. Working with this editor will make us, and clients, save a lot of time. Also, on the note of the content editor: it's fast. way faster than the one in 5.2.

Probably for the above reason alone i'd jump at the chance to upgrade everything we have to 5.3, but that'll have to wait until a full version is available and we're asked to upgrade :)

Some other things that jump at you right away:
There's now an easy way to set SubItems Sorting of an item, very neat &amp;amp; useful.
Validation is also very easy to access and will make clients happy indeed.
Even Icon assigning is made easy with new panels showing the icons and smart positioning.

The Developer Center is an interesting idea, and can indeed prove useful in the future, but i hope it gets a bit more options to it, or a way to easily define your own custom options without stepping into the code. The idea is great tho, gathering common things under one umbrella.

The Template Editor has also gotten a big overhaul and i can't say i'm sorry for that. The new one is great and will also make working with it a lot easier. Things like setting Standard values and Masters are neatly accessible now. Also, the way you can add things to the template and edit the template from the content editor is quite cool.

I hate to sound like an evangelist, but it's hard not to. It's awesome. So it's still a Beta version and has it's share of bugs, but i'm impressed, and that doesn't happen very often.

Hat's off to the team at Sitecore, this version will shake the foundations of CMS systems for a long time.

Haven't yet written a portal for this version, but that's probably going to be tonight then since i can't sleep in this heat. Don't get me wrong tho, summer is heaps better than the cold of winter, but i wouldn't mind having a full nights rest every now and then.. oh well..

more updates later..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115269425040410869?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115269425040410869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115269425040410869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115269425040410869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115269425040410869'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/07/first-impressions.html' title='First impressions..'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115254241911361083</id><published>2006-07-10T16:37:00.000+02:00</published><updated>2006-07-10T16:43:01.583+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>5.3 Beta</title><content type='html'>Well, it's here, the beta release of v5.3. Time to see if it lives up to my expectations or not, but something tells me it will.. and more.

For those of you with access to sdn5 and curiosity to satisfy, run on over there and download it..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115254241911361083?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115254241911361083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115254241911361083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115254241911361083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115254241911361083'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/07/53-beta.html' title='5.3 Beta'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115226630625085016</id><published>2006-07-07T11:27:00.000+02:00</published><updated>2006-07-07T12:05:22.773+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='portals'/><category scheme='http://www.blogger.com/atom/ns#' term='portlets'/><title type='text'>5.3 - Follow Up</title><content type='html'>Lars Nielsen at Sitecore just made my day (and, seeing that it's friday today it couldn't have been done much better), so, i reckon i'll have to have a beer later in his honor.

My plans for a few days of r&amp;r (some call it vacation, but i think vacation is when you have to much time on your hands to know what to do with) are safe and in no apparent danger.

Quick thing about portlets: if you've ever added a contextmenu to a listview in the xaml itself and then used it, you'll notice it magically vanishes after the list is refreshed. well, there's a work-around for that as well.

Assuming the code looks something like the following:
&lt;blockquote&gt;
protected Listview BudgetList;
// more nice stuff that you're using..
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);

if (!Sitecore.Context.ClientPage.IsEvent)
{
// some code here to load it all if you have any..
}
}
&lt;/blockquote&gt;

All you'll actually really have to do here, for now (i'm sure it'll be fixed and even improved by the rate they're developing) is to add one line to the OnLoad() event:
&lt;blockquote&gt;
protected Listview BudgetList;
// more nice stuff that you're using..
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);

if (!Sitecore.Context.ClientPage.IsEvent)
{
&lt;strong&gt;BudgetList.ContextMenu = "show:BudgetContextMenu";&lt;/strong&gt;
// some code here to load it all if you have any..
}
}
&lt;/blockquote&gt;
(sorry for the crappy layout of the text, don't really have the time to edit it properly).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115226630625085016?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115226630625085016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115226630625085016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115226630625085016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115226630625085016'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/07/53-follow-up.html' title='5.3 - Follow Up'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115217033218897422</id><published>2006-07-06T09:10:00.000+02:00</published><updated>2006-07-07T08:57:38.056+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>5.3</title><content type='html'>Everything i've read, seen &amp; heared about v5.3 is a step forward. It's going to be faster, better &amp;amp; smarter. Things are going to work better in regards to user experience. I could go on &amp;amp; on about all the benefits, but that'd probably be like preaching to the choir so i won't do that.

There's one thing that cought my eye tho, and that one thing has me pinned against the wall:

&lt;blockquote&gt;Sitecore’s portal framework is replaced with the ASP .NET 2.0 embedded portal framework.&lt;/blockquote&gt;
Perhaps for many a minor thing that'll pass without much notice, but right now that same change/update/migration, if it won't support the previous portal, only says one thing to me: cancel any upcoming vacations..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115217033218897422?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115217033218897422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115217033218897422' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115217033218897422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115217033218897422'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/07/53.html' title='5.3'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115212199613920651</id><published>2006-07-05T19:50:00.000+02:00</published><updated>2006-07-12T12:40:13.643+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='various'/><title type='text'>Internet Explorer Developer Toolbar</title><content type='html'>If you haven't tried it yet, give it a shot. Quite neat application that can prove useful when developing websites and solutions for the web in general.

Some of the features: View DOM, Disable Cache/Images/Css etc, Outline Div/Table/Images etc, Resize, Clear cache for domain/all etc and a ruler.

&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;DisplayLang=en&lt;/a&gt;

Update: If you're a heavy firefox user, go get Firebug for firefox at &lt;a href="https://addons.mozilla.org/firefox/1843/"&gt;https://addons.mozilla.org/firefox/1843/&lt;/a&gt; which offers the same functionality (if not better) for Firefox.
Thanks crashie!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115212199613920651?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115212199613920651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115212199613920651' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115212199613920651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115212199613920651'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/07/internet-explorer-developer-toolbar.html' title='Internet Explorer Developer Toolbar'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115209958036788752</id><published>2006-07-05T13:29:00.000+02:00</published><updated>2006-07-06T10:08:31.156+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.2'/><title type='text'>Get children sorted from a specific Item</title><content type='html'>Often you get stuck with things you don't want to do again and again, one of them is to bang your head against the wall trying to figure out where you wrote a icomparer that you can easily use to get a sorted ChildList. Well, after banging my head enough i wrote a small workaround using a DataContext instead.

The method is pretty straight-forward, so just use it as it is or modify it to any need.

&lt;blockquote&gt;
&lt;div    style="font-family:Monospace;font-size:10pt;color:white;"&gt;
&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;span style="color:black;"&gt; Sitecore.Collections.&lt;/span&gt;&lt;span style="color:teal;"&gt;ItemCollection&lt;/span&gt;&lt;span style="color:black;"&gt; GetChildrenSorted(Item parent, &lt;/span&gt;&lt;span style="color:teal;"&gt;String&lt;/span&gt;&lt;span style="color:black;"&gt; sortby, &lt;/span&gt;&lt;span style="color:blue;"&gt;bool&lt;/span&gt;&lt;span style="color:black;"&gt; sortascending, &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:black;"&gt; offset, &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:black;"&gt; range, &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt; filter)
{
Sitecore.Web.UI.HtmlControls.&lt;/span&gt;&lt;span style="color:teal;"&gt;DataContext&lt;/span&gt;&lt;span style="color:black;"&gt; dc = &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span style="color:black;"&gt; DataContext();
dc.DataViewName = &lt;/span&gt;&lt;span style="color:maroon;"&gt;"Master"&lt;/span&gt;&lt;span style="color:black;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&lt;span style="color:black;"&gt; dc.DataView.GetChildren(parent, sortby, sortascending, offset, range, filter);
}
&lt;/span&gt;&lt;/div&gt;
&lt;/blockquote&gt;
So, whenever you need to get a list of items sorted a specific way just use the method in the appropriate way, maybe like the example below?

&lt;blockquote&gt;
&lt;div    style="font-family:Monospace;font-size:10pt;color:white;"&gt;
&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;span style="color:black;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;span style="color:black;"&gt; FillSomeListOrSomething()
{
&lt;/span&gt;&lt;span style="color:green;"&gt;// Parent Item that you want to get the children from..
&lt;/span&gt;&lt;span style="color:black;"&gt;Item parent = Sitecore.Configuration.&lt;/span&gt;&lt;span style="color:teal;"&gt;Factory&lt;/span&gt;&lt;span style="color:black;"&gt;.GetDatabase(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"master"&lt;/span&gt;&lt;span style="color:black;"&gt;).Items[&lt;/span&gt;&lt;span style="color:maroon;"&gt;"/sitecore/content/home"&lt;/span&gt;&lt;span style="color:black;"&gt;];
&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (parent.HasChildren)
{
&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (Item itm &lt;/span&gt;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&lt;span style="color:black;"&gt; GetChildrenSorted(parent, &lt;/span&gt;&lt;span style="color:maroon;"&gt;"__created"&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&lt;span style="color:black;"&gt;, 0, 0, &lt;/span&gt;&lt;span style="color:maroon;"&gt;""&lt;/span&gt;&lt;span style="color:black;"&gt;))
{
&lt;/span&gt;&lt;span style="color:green;"&gt;// whatever you want to do with the sorted list of items you got back..
&lt;/span&gt;&lt;span style="color:black;"&gt;}
}
}&lt;/span&gt;&lt;/div&gt;
&lt;/blockquote&gt;

Maybe this is a really bad way to approach this problem, but it works for me so i'll use it for now (or until this functionality is implemented in Sitecore).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115209958036788752?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115209958036788752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30582633&amp;postID=115209958036788752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115209958036788752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30582633/posts/default/115209958036788752'/><link rel='alternate' type='text/html' href='http://usoniandream.blogspot.com/2006/07/get-children-sorted-from-specific-item.html' title='Get children sorted from a specific Item'/><author><name>Peter</name><uri>http://www.blogger.com/profile/05899036156321107860</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_pr5a2BlM4eM/TQihJkD_bWI/AAAAAAAABnU/UDB1c2qI7pQ/S220/08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30582633.post-115199525229747159</id><published>2006-07-04T08:39:00.000+02:00</published><updated>2006-12-15T10:11:06.483+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='portals'/><category scheme='http://www.blogger.com/atom/ns#' term='sitecore 5.2'/><category scheme='http://www.blogger.com/atom/ns#' term='portlets'/><title type='text'>Problem with DataTreeview &amp; DataContext in a portlet</title><content type='html'>If you've ever tried writing a portlet containing a DataTreeview &amp;amp; DataContext with the normal DefaultPortletWindow control you've probably noticed that it doesn't work all that well (surely will be fixed in a later release we hope). The problem is that you when you try to expand a node in the DataTreeview you get an error saying &lt;strong&gt;DataContext ”” not found. (Method: Sitecore.Web.UI:HtmlControls.Treeview.Toggle(String id)).&lt;/strong&gt;
&lt;strong&gt;&lt;/strong&gt;
For anyone that has actually been affected by this issue or will be in the future, there are two ways to address this issue, either programmatically or via a work-around.

The programmatical approach for this by issue would be to implement all of the code relating to the DataContext and DataTreeview and, for ex, adding it to a Border control or similar in your C# code. This solution though isn't that friendly to use again in another portlet since it involves you writing all the code for yourself.

The work-around is a lot more user-friendly and a solution you might want to adapt instead of writing the same code over and over again each time. In this case, all you have to do is copy the PortletWindow control, rename the control to something else, like myPortletWindow, and save it with a new name where your custom controls are located. After that, apply the new window control to your portlet xml layout replacing the standard one, and save.

So, step by step:
1 – Open PortletWindow control (located at \sitecore\shell\Controls\Portal\Portlet window.xml)
2 – Change the name of the control to something else (in this case myPortletWindow)
3 – Save it somewhere (in this case I’m saving the controls under \sitecore modules\Shell\Example\Controls)
4 – Apply the new window control to the portlet xml layout that you had trouble with and save it

Once you've done this you can use this window control instead of the default control without further need to manage it programmatically.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30582633-115199525229747159?l=usoniandream.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usoniandream.blogspot.com/feeds/115199525229747159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?bl
