<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" version="2.0">
    <channel>
        <title>Dan Matthews</title>
        <link>http://blogs.interakting.co.uk/danmatthews/Default.aspx</link>
        <description>.NET / SharePoint / EPiServer / SOA / Use Cases</description>
        <language>en-GB</language>
        <copyright>Dan Matthews</copyright>
        <managingEditor>dan_d_matthews@hotmail.com</managingEditor>
        <generator>Subtext Version 1.9.5.177</generator>
        <image>
            <title>Dan Matthews</title>
            <url>http://blogs.interakting.co.uk/images/RSS2Image.gif</url>
            <link>http://blogs.interakting.co.uk/danmatthews/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/DanMatthews" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>Pastures new...</title>
            <category>EPiServer</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2009/02/09/pastures-new.aspx</link>
            <description>&lt;p&gt;My time at Interakting / Business &amp;amp; Decision has come to an end and I am emigrating to South Africa in order to work with the EPiServer office in Cape Town. I'll make sure that all my blog posts here are kept up as long as possible, and be assured that once I've got myself sorted over there I'll carry on blogging directly on the &lt;a href="http://labs.episerver.com/en/Blogs"&gt;EPiServer Labs&lt;/a&gt; site.&lt;/p&gt;
&lt;p&gt;Until then - thanks for reading and, for the moment, this is me signing out!&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/375.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2009/02/09/pastures-new.aspx</guid>
            <pubDate>Mon, 09 Feb 2009 11:44:23 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/375.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2009/02/09/pastures-new.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/375.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Error 0x80070003 when installing an EPiServer Site</title>
            <category>.NET/C#</category>
            <category>EPiServer</category>
            <category>Techie</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2009/01/30/error-0x80070003-when-installing-an-episerver-site.aspx</link>
            <description>&lt;p&gt;I was recently working with a client to deploy an EPiServer site and we came across a rather strange problem. The EPiServer Manager installed fine, but when I tried to set up a web site (with a database or not it doesn't matter) we were getting the following error reported:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;System.InvalidOperationException: The installation failed, and the rollback has been performed. ---&amp;gt; System.IO.DirectoryNotFoundException: The system cannot find the path specified. (Exception from HRESULT: 0x80070003)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.PutEx(Int32 lnControlCode, String bstrName, Object vProp)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.DirectoryServices.PropertyValueCollection.OnClearComplete()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Collections.CollectionBase.Clear()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at EPiServer.Install.IIS6.DirectoryEntryExtension.SetValue(DirectoryEntry entry, String propertyName, String value)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at EPiServer.Install.IIS6.DirectoryEntryExtension.CreateSite(String siteName)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at EPiServer.Install.IIS6.Installers.NewWebAppInstaller.Install(IDictionary stateSaver)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Configuration.Install.Installer.Install(IDictionary stateSaver)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Configuration.Install.TransactedInstaller.Install(IDictionary savedState)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   --- End of inner exception stack trace ---&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Configuration.Install.TransactedInstaller.Install(IDictionary savedState)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at EPiServer.Install.InstallationManager.DoInstall()Error - System.Management.Automation.CmdletInvocationException: The system cannot find the path specified. (Exception from HRESULT: 0x80070003) ---&amp;gt; System.IO.DirectoryNotFoundException: The system cannot find the path specified. (Exception from HRESULT: 0x80070003)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at EPiServer.Install.InstallationManager.DoInstall()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at EPiServer.Install.InstallationManager.CommitBulkInstall()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at EPiServer.Install.Common.Cmdlets.CommitBulkInstallCmdlet.ProcessRecord()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Management.Automation.Cmdlet.DoProcessRecord()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Management.Automation.CommandProcessor.ProcessRecord()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   --- End of inner exception stack trace ---&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input, Hashtable errorResults, Boolean enumerate)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Management.Automation.Parser.PipelineNode.Execute(Array input, Pipe outputPipe, ArrayList&amp;amp; resultList)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#ff0000" size="2"&gt;   at System.Management.Automation.Parser.StatementListNode.Execute(Array input, Pipe outputPipe, ArrayList&amp;amp; resultList)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The last line that had worked before the error was thrown was 'Copied connectionStrings.config' and after some digging around it became apparent that the error was being thrown after the EPiServer Manager had finished copying files to the web site folder and when it was trying to create the actual web site in IIS. It was an extremely frustrating problem to track down and we tried security permissions and all sorts with no luck. There is a fair bit on the web about this error (default site missing in IIS and similar things like that) but nothing was helping.&lt;/p&gt;  &lt;p&gt;I was pretty sure it was not EPiServer itself at fault so I dug in the EPiServer and System.DirectoryServices assemblies with Reflector and figured out what was going on, then built a small test app in .Net. This also failed with exactly the same error... when .Net tried to access the IIS Metabase it was failing.&lt;/p&gt;  &lt;p&gt;Turns out that System.DirectoryServices uses COM Interop to clear and set values within the IIS Metabase. This is what was breaking. There is a way of manipulating them using AD-style classes and that seemed to work fine, so that meant it must be something up with the way .Net was talking to IIS via COM.&lt;/p&gt;  &lt;p&gt;The client helped out here because one of their technical guys on the server team had the brainwave of reinstalling Component Services. Hey presto, it worked - thanks Jeremy :) So if you have a similar problem, I suggest you try reinstalling COM and IIS first before getting serious with permissions and things.&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/373.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2009/01/30/error-0x80070003-when-installing-an-episerver-site.aspx</guid>
            <pubDate>Fri, 30 Jan 2009 12:12:18 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/373.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2009/01/30/error-0x80070003-when-installing-an-episerver-site.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/373.aspx</wfw:commentRss>
        </item>
        <item>
            <title>The EPiServer 'triangle'</title>
            <category>EPiServer</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2009/01/16/the-episerver-triangle.aspx</link>
            <description>&lt;p&gt;I've been thinking a bit about why EPiServer hits the 'sweet spot' for companies so nicely, and I think maybe the answer lies in its balance of feature coverage and market position. It knows where its strong point is - Content Management - but doesn't ignore the other areas. It also aims at the mid-market but is capable of scaling up or down, which is a sadly neglected approach. So many companies are being forced to choose between an self-declared 'Enterprise' solution or a self-confessed 'Entry Level' solution. Problem is, the Enterprise solutions are over-specified and over-priced for their needs, and the Entry Level solutions might meet the budget but don't meet the requirements. This can be summed up in this diagram:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.interakting.co.uk/images/blogs_interakting_co_uk/danmatthews/WindowsLiveWriter/TheEPiServertriangle_A033/The_EPiServer_Triangle_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="454" alt="The_EPiServer_Triangle" width="604" border="0" src="http://blogs.interakting.co.uk/images/blogs_interakting_co_uk/danmatthews/WindowsLiveWriter/TheEPiServertriangle_A033/The_EPiServer_Triangle_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;What do you think? Do you think this is a good summary or do you entirely disagree?&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/372.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2009/01/16/the-episerver-triangle.aspx</guid>
            <pubDate>Fri, 16 Jan 2009 11:23:31 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/372.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2009/01/16/the-episerver-triangle.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/372.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Property Data Injection in EPiServer</title>
            <category>.NET/C#</category>
            <category>EPiServer</category>
            <category>Techie</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2008/12/09/property-data-injection-in-episerver.aspx</link>
            <description>&lt;p&gt;I am currently working on a project where it was necessary to conditionally inject some content into certain properties on some pages. Dynamic Content didn't really help me because what I wanted to do was replace entire properties with content from a property on another page and do it in a nice way for the editor. Linking the page with a shortcut to another page didn't help me because it needed to be only a partial replace and also conditional.&lt;/p&gt;
&lt;p&gt;Here's an example - and I know there are better ways to do this but I want an example that won't compromise the Intellectual Property of what I am actually doing :)&lt;/p&gt;
&lt;p&gt;Lets say you have a news article at &lt;a href="http://myepisite/News/SomeArticle"&gt;http://myepisite/News/SomeArticle&lt;/a&gt;. The article has a nice big image on it and you want to be able to swap the image out with a different one (lets forget the fact that you'd probably just do this with two properties). You have a sub-page storing the smaller image in a property at &lt;a href="http://myepisite/News/SomeArticle/LowImagery"&gt;http://myepisite/News/SomeArticle/LowImagery&lt;/a&gt;, which is hidden from the site. The way that you trigger the load of the low image is by URL QueryString, e.g. &lt;a href="http://myepisite/News/SomeArticle?bandwidth=lo"&gt;http://myepisite/News/SomeArticle?bandwidth=lo&lt;/a&gt;. (If you want some more tips on achieving this URL neatly, see my posts or other posts on URL rewriting.) Anyway, you could write a custom property type etc. to do this, but that's a fair whack of work and you'll need to create a new custom property for every content type that you might want to replace.&lt;/p&gt;
&lt;p&gt;So how do I achieve this in a neat, generic way? EPiServer provides a nice way, but it's not the most well documented route and neither do they really recommend it. Still, I think it can work well if properly implemented. The way I implemented to achieve this was using a custom Property Get Handler.&lt;/p&gt;
&lt;p&gt;When EPiServer asks for a page, it builds a PropertyDataCollection of all the properties on that page, along with their values. This PropertyDataCollection contains all the user-defined properties along with some that EPiServer add in as well such as PageLink, PageLanguageBranch and others. These are absolute lifesavers, although they are not well documented. The PropertyDataCollection has a default indexer which, when called, calls to a helper method to get the actual PropertyData for a property. The default helper method is a static method called 'DefaultPropertyHandler' on EPiServer.Core.PropertyGetHandler. This helper method looks for the the actual property data in four stages:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;It looks at the property on the current page and the current language &lt;/li&gt;
    &lt;li&gt;If that is empty, it checks to see whether the property is language specific and, if it is, whether the current language is the master language. If not, then it grabs the master language page and returns the value from that property. &lt;/li&gt;
    &lt;li&gt;If language isn't an issue, then it tries to get the property value from the linked page, if any. &lt;/li&gt;
    &lt;li&gt;If there is not data on a linked page, then it tries to return a dynamic property value with that property name. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This works well and is the default that probably fits 99% of EPiServer installations. However, EPiServer kindly allow us to replace this default Property Get Handler. All you need to do is write your own method that matches the delegate for the handler, and then set an EPiServer property like so:&lt;/p&gt;
&lt;p&gt;EPiServer.Core.PropertyDataCollection.GetHandler = new GetPropertyDelegate(Test.BandwidthPropertyGetHandler.BandwidthPropertyHandler); &lt;/p&gt;
&lt;p&gt;I'm sure you can set this in most places where you need it, but I just put it into the Application_Start of Global.asax.cs. So we can see how easy it is to override the property handling, but what does our custom method actually look like? The following code is incomplete, untested and partially commented out, but it should give the idea. The two parameters coming in are the property name being queried for data and the property data collection for the current page/language. Notice that rather than use the default indexer for properties, when asking for a property data value I am explicitly calling the 'Get' method - this prevents nasty infinite loops where my custom handler keeps calling itself.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Test
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BandwidthPropertyGetHandler
    {
        &lt;span class="rem"&gt;// Methods&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; PropertyData BandwidthPropertyHandler(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;br /&gt;						PropertyDataCollection properties)
        {
            &lt;span class="rem"&gt;// check querystring to see if we need to replace property (where possible)&lt;/span&gt;

            HttpRequest Request = System.Web.HttpContext.Current.Request;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Request.QueryString[&lt;span class="str"&gt;"bandwidth"&lt;/span&gt;] == &lt;span class="str"&gt;"lo"&lt;/span&gt;)
            {
                &lt;span class="rem"&gt;// we need to swap low bandwidth if it's the right property name&lt;/span&gt;
                &lt;span class="rem"&gt;// you could drive this any way you like - don't hardcode it in production :)&lt;/span&gt;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (name == &lt;span class="str"&gt;"ArticleImage"&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;// lets reach out and grab the data from the sub-page&lt;/span&gt;

                    PageReference ThisPageReference = (PageReference)properties.&lt;br /&gt;							Get(&lt;span class="str"&gt;"PageLink"&lt;/span&gt;).Value;

                    PageDataCollection ChildPages = EPiServer.DataFactory.Instance.&lt;br /&gt;			GetChildren(ThisPageReference, LanguageSelector.MasterLanguage());

                    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (PageData ChildPage &lt;span class="kwrd"&gt;in&lt;/span&gt; ChildPages)
                    {
                        &lt;span class="rem"&gt;// find an article subpage&lt;/span&gt;

                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (ChildPage.PageTypeName.ToLower() == &lt;span class="str"&gt;"article subpage"&lt;/span&gt;)
                        {
                            &lt;span class="rem"&gt;// grab our property and return it&lt;/span&gt;

                            &lt;span class="kwrd"&gt;return&lt;/span&gt; ChildPage.Property.Get(&lt;span class="str"&gt;"ArticleImageLow"&lt;/span&gt;);
                        }
                    }
                }
            }

            &lt;span class="rem"&gt;// just return the default handler&lt;/span&gt;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; PropertyGetHandler.DefaultPropertyHandler(name, properties);
        }
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;In my actual implementation I handle languages properly, error handling, null property values and all sorts of other things, but it should be fairly obvious how that would work. In essence, this is a very simple way of customising properties to make them do fairly clever things without customising property types themselves. In fact, this would be a nice way to retro-fit a feature such as bandwidth tailoring or other targeted content to an existing type. Just remember that if it's not a special case you should be handling, call the default handler to do it's stuff with that property! Also, it might be best to try to keep your injected property types the same as the property type on the owner page. Not sure what would happen if you messed with that.&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/370.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2008/12/09/property-data-injection-in-episerver.aspx</guid>
            <pubDate>Tue, 09 Dec 2008 12:42:03 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/370.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2008/12/09/property-data-injection-in-episerver.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/370.aspx</wfw:commentRss>
        </item>
        <item>
            <title>File Extensions and URL Rewriting in EPiServer</title>
            <category>.NET/C#</category>
            <category>Techie</category>
            <category>EPiServer</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2008/12/05/file-extensions-and-url-rewriting-in-episerver.aspx</link>
            <description>&lt;p&gt;I needed to throw together a quick geolocalisation demo for EPiServer v5 R2 the other day and to do that it was necessary to override some of the default URL rewriting behaviour of EPiServer. I knew it could be done, but I'd never actually had to write a custom URL provider before, so &lt;a href="http://labs.episerver.com/en/Blogs/Ted-Nyberg/Dates/112276/7/Implementing-a-custom-URL-rewrite-provider-for-EPiServer/"&gt;Ted Nyberg's blog post&lt;/a&gt; on rewriting in EPiServer gave me a good kick-start.&lt;/p&gt;
&lt;p&gt;My geolocalisation changes worked a treat (maybe I'll blog about that another time) but I did come across one really nasty 'feature' in EPiServer. I did find a workaround though, so I'll share it with you. Some background first though.&lt;/p&gt;
&lt;p&gt;As you may know, EPiServer has the nice ability to add a file extension on to pages. Before you rush off and try this out on your live site, be aware that it does change the default behaviour a little, for example it stops trailing slashes from working on the URL, e.g. this works:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://myepisite/SomePage/"&gt;http://myepisite/SomePage/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;...but this does not...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://myepisite/SomePage.htm/"&gt;http://myepisite/SomePage.htm/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In fact, I like this feature because when using an external cache provider (such as Akamai), page extensions are A Good Thing as it knows how to treat them, and it also reduces the number of a URL 'possibilities' for a single page, so reducing the cache usage. As a bonus, it can also help with security as it slightly abstracts the page engine from the URL. Why not use the extension 'cfm' and then watch and laugh as all the ColdFusion-specific attacks roll in :)&lt;/p&gt;
&lt;p&gt;So I set an extension on my geolocalisation demo of '.htm' (done in the urlRewriteExtension property of the site settings element in Web.Config, make sure you put the dot in the extension as well otherwise you'll get SomePagehtm). So far, so good, and the out-the-box demo templates site appeared to run fine. But then I noticed a weird quirk. On the menu across the top, the various links made sense, for the most part:&lt;/p&gt;
&lt;p&gt;News -&amp;gt; &lt;a href="http://myepisite/en/News.htm"&gt;http://myepisite/en/News.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Events -&amp;gt; &lt;a href="http://myepisite/en/Events.htm"&gt;http://myepisite/en/Events.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and so on... but the Start link was all messed up:&lt;/p&gt;
&lt;p&gt;Start -&amp;gt; &lt;a href="http://myepisite/en.htm"&gt;http://myepisite/en.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What was strangest of all though was that this link actually worked! This made no sense on any level, and it was obvious that some internal fudge in the default URL rewriter was catching this as a special case. This was confirmed when I found &lt;a href="http://world.episerver.com/Forum/Pages/Thread.aspx?id=15768&amp;amp;epslanguage=en"&gt;this post from EPiServer support&lt;/a&gt;. They'd obviously found this 404'ing so built a special case for it.&lt;/p&gt;
&lt;p&gt;So why do I care? Because this breaks the URL model and breaks my geolocalisation scheme quite badly. That link should 404 or else I have an issue. Ideally, I want to actually write out the proper link. So I started digging. It turns out that you get a link like this when you have an EPiServer Start Page and ask for the LinkURL for it. The default URL rewriter seems to munge it up and spit out this crazy short URL rather than a nicely formatted link. This is the same for any language, for example the Swedish start page gives sv.htm. Ideally though, I would want it to write out something like this (the page is actually called Public in the English version):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://myepisite/en/Public.htm"&gt;http://myepisite/en/Public.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I mean OK, it looks like any other page rather than a start page but surely that's better than en.htm! So... how do we go about getting the right page link rendered out and bypassing EPiServer's little 'fix'? Well, we can do it with the URL rewriter. I'll let Ted's post explain how to actually create the URL rewrite provider, but once you have the rewrite provider ready, you can override the ConvertToExternalInternal method as follows:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; ConvertToExternalInternal(UrlBuilder url, &lt;span class="kwrd"&gt;object&lt;/span&gt; internalObject, Encoding toEncoding)
{
    &lt;span class="rem"&gt;// apply default rewriting first&lt;/span&gt;
    &lt;span class="kwrd"&gt;bool&lt;/span&gt; bRewriteSuccess = &lt;span class="kwrd"&gt;base&lt;/span&gt;.ConvertToExternalInternal(url, internalObject, toEncoding);

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (bRewriteSuccess)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt;[] urlSplit = url.Path.Split(&lt;span class="str"&gt;'/'&lt;/span&gt;);
        
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (urlSplit.Length == 2)
        {
            &lt;span class="rem"&gt;// default page&lt;/span&gt;

            &lt;span class="kwrd"&gt;string&lt;/span&gt; DestinationCountryCode = urlSplit[1].Substring(0, 2);

            EPiServer.Core.PageData StartPage;

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                StartPage = EPiServer.DataFactory.Instance.GetPage(&lt;br /&gt;&lt;span class="kwrd"&gt;	new&lt;/span&gt; EPiServer.Core.PageReference(EPiServer.Configuration.Settings.Instance.PageStartId), &lt;br /&gt;	&lt;span class="kwrd"&gt;new&lt;/span&gt; LanguageSelector(DestinationCountryCode));
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt;
            {
                &lt;span class="rem"&gt;// no page with that language, just grab the link anyway and it will&lt;br /&gt;		 still work just with the current language name&lt;/span&gt;

                StartPage = EPiServer.DataFactory.Instance.GetPage(&lt;br /&gt;	&lt;span class="kwrd"&gt;new&lt;/span&gt; EPiServer.Core.PageReference(EPiServer.Configuration.Settings.Instance.PageStartId));
            }

            url.Path = &lt;span class="str"&gt;"/"&lt;/span&gt; + DestinationCountryCode + &lt;span class="str"&gt;"/"&lt;/span&gt; + StartPage.URLSegment + &lt;br /&gt;			EPiServer.Configuration.Settings.Instance.UrlRewriteExtension;
        }
    }
    
    &lt;span class="kwrd"&gt;return&lt;/span&gt; bRewriteSuccess;
}      &lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;This is not a fully-tested solution and it might need more work, but it shows that it is possible to fix this troublesome default behaviour. My geolocalisation demo then wrote out links as I would expect, and seemed to work perfectly across languages too. Hope this is of some use to anyone with similar issues even if it only gets you started on a fix!&lt;font face="Courier New"&gt;&lt;br /&gt;
&lt;/font&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/369.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2008/12/05/file-extensions-and-url-rewriting-in-episerver.aspx</guid>
            <pubDate>Fri, 05 Dec 2008 11:53:04 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/369.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2008/12/05/file-extensions-and-url-rewriting-in-episerver.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/369.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiCode Awards</title>
            <category>EPiServer</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2008/11/17/epicode-awards.aspx</link>
            <description>&lt;p&gt;EPiServer Norway are associated with an EPiServer community project called &lt;a href="https://www.coderesort.com/p/epicode"&gt;EPiCode&lt;/a&gt; which had its annual awards on the 12th of November as part of the Christmas Tech Forum. I was really pleased to see the Module of the Year award went to my pals over at &lt;a href="http://www.networkedplanet.com/"&gt;NetworkedPlanet&lt;/a&gt; for their &lt;a href="https://www.coderesort.com/p/epicode/wiki/EasySearch"&gt;EasySearch&lt;/a&gt; module. Unlike some of the other modules on EPiCode, it isn't free to use commercially - but it is free to download and try out and fills a nice gap in the EPiServer search space.&lt;/p&gt;
&lt;p&gt;A bunch of other 'active contributors' were lucky enough to get an iPod Shuffle in the awards - including me for contributing &lt;a href="https://www.coderesort.com/p/epicode/wiki/CloudCuckoo"&gt;CloudCuckoo&lt;/a&gt; and &lt;a href="https://www.coderesort.com/p/epicode/wiki/HyperThumbnail"&gt;HyperThumbnail&lt;/a&gt; on behalf of &lt;a href="http://www.interakting.co.uk"&gt;Interakting&lt;/a&gt;. Thank you EPiServer Norway!&lt;/p&gt;
&lt;p&gt;You can read more &lt;a href="https://www.coderesort.com/p/epicode/blog"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/362.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2008/11/17/epicode-awards.aspx</guid>
            <pubDate>Mon, 17 Nov 2008 12:35:04 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/362.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2008/11/17/epicode-awards.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/362.aspx</wfw:commentRss>
        </item>
        <item>
            <title>EPiServer vs. Open Source</title>
            <category>.NET/C#</category>
            <category>EPiServer</category>
            <category>ADXSTUDIO</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2008/11/11/episerver-vs.-open-source.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Interakting use both Open Source and proprietary products to deliver solutions for many companies. We always try to select the best tool for the job, and when it comes to Content Management it is no different. We have a range of tools we consider using including various Open Source tools (e.g. &lt;a href="http://www.nuxeo.com/"&gt;Nuxeo&lt;/a&gt;, &lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt;) and also our proprietary offerings (&lt;a href="http://www.episerver.com/"&gt;EPiServer&lt;/a&gt;, &lt;a href="http://www.adxstudio.com/"&gt;ADXSTUDIO&lt;/a&gt;). In the context of many projects it would certainly be possible to deliver a ‘successful’ project in either a proprietary or an Open Source solution. However, when we consider budgetary, functionality, deadline, support and longevity constraints, all of these areas are problematic in the Open Source arena, whereas proprietary systems such as EPiServer can provide an arguably better and more cost-effective solution. This article discusses some of the reasons for this. The majority of 'pure CMS' sites we deliver are on the EPiServer platform and so this will form the basis of our discussion. Interakting is an EPiServer Solution Partner.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Budgetary&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With a proprietary CMS such as EPiServer, the main costs are ‘up front’. The client would be buying a licence to use EPiServer CMS, and the cost of this covers the effort and time taken by the vendor to develop and support the product. This means that the vendor does not need to find other ways to recoup their costs beyond the licence fee and an optional small annual support fee. The client can therefore budget for the outright licence as a clearly transparent and defined cost.&lt;/p&gt;
&lt;p&gt;Open Source costs are far less clear, as companies who ‘own’ an Open Source initiative may give the software away ‘free’ but then seek to recoup their costs, even if only running costs. This is usually done by support contracts, consulting or selling additional ‘modules’. It is easy to be trapped into a ‘free’ product and then find that the actual cost is far higher.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Functionality&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As proprietary systems are designed to be sold as widely as possible to reach the maximum number of customers, functionality in proprietary systems is usually excellent and if additional functionality would assist their sales then the company owning the product will often update their core product or provide value-add modules at low or no cost. This is very much the case with EPiServer, who have grown rapidly due to their responsiveness to customer demands and now have many thousands of seats worldwide. The CMS is particularly user-friendly and intutitive and can be used by novice users without the need for costly training.&lt;/p&gt;
&lt;p&gt;In the Open Source arena this becomes more complex. The popular view is that the community ‘works together’ to build a product for the good of the community. This works well, to a point, but ultimately people are not entirely altruistic. Sooner or later (and sometimes always) they only contribute to things that benefit themselves. This means that the ‘out of the box’ product is often minimal functionality, and even if it is fairly well featured then those features are often not very flexible and designed for the use of the company that commissioned them with specific needs. It is unlikely the community will help add or update functionality and therefore it is left to the project team to do so, which can be fairly hard and time consuming. User training is likely to be required, particularly post deplyoment when users change jobs and new users need to work with the CMS. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deadline&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As a general rule, any proprietary systems must be designed to provide a very rapid solution as this is a key selling point since the market is very competitive and unforgiving. In this regard EPiServer stands up very well which is one of the many reasons that Interakting has selected this tool. The well-featured out of the box nature of EPiServer, together with the well-documented and supported APIs, mean that a robust solution can be built rapidly and efficiently. The tools are built with the clients business needs clearly in mind as much as the developers.&lt;/p&gt;
&lt;p&gt;In an Open Source project, it has generally built by developers with a very code-centric approach. There is an expectation that the basic product will be customised by developers as needed, and the out-of-the-box functionality capability is usually minimal. Even with ‘starter’ kits for a particular tool, there is often a large amount of code and customisation to be done. Agencies promoting open source solutions capitalise on this aspect as it is very lucrative to develop the added functionality needed for more complex reqirements such as multi-lingual non-Latin support &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With EPiserver, as part of the licence agreement, the vendor undertakes to provide support and their reputation relies on this support being accessible and effective. The support is also usually rapid and efficient to respond with managed Help Desks staffed by knowledgeble individuals. They are able to respond with authority on support issues as they designed, wrote, maintain and own the codebase.&lt;/p&gt;
&lt;p&gt;For an Open Source tool, the support is either an expensive add-on from the company providing the tool or is community based. If a company is supporting a tool this is often not so much of a problem, although there is an issue that they are supporting code that they quite possibly did not write. From our experience (remember that we also work with Open Source solutions when we feel it appropriate), support from the community is often slow and inadequate for projects that have a critical path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Longevity&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;EPiServer is committed to the products they sell and even if they discontinue a product will generally provide migration or upgrade paths. Generally speaking, it will also be clear in advance whether a product will be passing out of support and therefore a proper exit or migration strategy can be planned well in advance. EPiServer is also helpful in that, in the event of it ceasing to trade, it has made its code available to its licensees through an escrow arrangement at a nominal annual cost (although this is optional).&lt;/p&gt;
&lt;p&gt;Open Source projects are often left unfinished or unsupported once the community using them has moved onto something different. As a general rule, Open Source projects have a limited time in which they are actively updated and maintained and once a critical inactivity threshold is reached then they effectively become ‘legacy’, are taken into closed source or amalgamated into something larger. It can also be harder to plan an exit strategy as the ‘lifetime’ of a product is usually unclear.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In summary, we believe that for the many projects, the unknowns and variables involved in taking the Open Source route will result in a slightly higher initial cost of development and deployment and a significantly higher cost of ownership over a two year period following the initial go-live.&lt;/p&gt;
&lt;p&gt;By choosing to use a well-proven CMS which uses the .NET framework, a project is grounded on a solid, well defined and tightly costed product and the real cost of deployment and support over a 2-5 year lifetime can be estimated with a far higher degree of accuracy. Ongoing maintenance, functional enhancements and support will also be easier to define and budget. Finally, a large pool of .NET developers able to work with EPiServer and are readily available at competitive day rates meaning the client has total flexibility and would not be locked into any single supplier in the future.&lt;/p&gt;
&lt;p&gt;If you're looking for a CMS solution for your web site, &lt;a href="http://www.interakting.co.uk/en-gb/additional-menu/contact-us/"&gt;shouldn't we be talking&lt;/a&gt;?&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/360.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2008/11/11/episerver-vs.-open-source.aspx</guid>
            <pubDate>Tue, 11 Nov 2008 10:58:05 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/360.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2008/11/11/episerver-vs.-open-source.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/360.aspx</wfw:commentRss>
        </item>
        <item>
            <title>WINWIN When Negotiating</title>
            <category>Methodologies</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2008/10/16/winwin-when-negotiating.aspx</link>
            <description>&lt;p&gt;Last night I was at a &lt;a href="http://www.bcs.org/server.php?show=nav.9223"&gt;BCS Young Professionals Group&lt;/a&gt; meeting at the BCS offices in Southampton Street, London. The meeting was part of a 'SkillCentre' series being run with the help of a consultant called Anthony Rees facilitating, and the subject last night was &lt;a href="SkillCentre: Negotiation Skills"&gt;'Negotiation Skills'&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The session itself was excellent, culminating in groups coming up with a simple mnemonic to remember some basic concepts for negotiating. The group I was in came up with the mnemonic 'winwin':&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;W&lt;/em&gt;hat&lt;/strong&gt; do you want&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;I&lt;/em&gt;nvestigate&lt;/strong&gt; feasibility&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;N&lt;/em&gt;ote &lt;/strong&gt;it down&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;W&lt;/em&gt;alk&lt;/strong&gt; in their shoes&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;I&lt;/em&gt;dentify &lt;/strong&gt;tactics&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;N&lt;/em&gt;egotiate!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Another group came up with the 'winning' mnemonic of 'KPMG', which raised a chuckle. I'm not sure I can remember it exactly, but it went something like:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;K&lt;/em&gt;now&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;P&lt;/em&gt;repare&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;M&lt;/em&gt;aximum &lt;/strong&gt;(&amp;amp; minimum)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;G&lt;/em&gt;oals&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Personally, I found it memorable but less useful. But that's probably just me being biased. Following the main session there was a chance to network over wine and nibbles which was just as valuable as the session itself. And kudos to the BCS for putting on a nice Chilean Merlot :)&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/358.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2008/10/16/winwin-when-negotiating.aspx</guid>
            <pubDate>Thu, 16 Oct 2008 09:36:57 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/358.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2008/10/16/winwin-when-negotiating.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/358.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Syncing Outlook with a Windows Mobile device in Vista</title>
            <category>Techie</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2008/10/01/syncing-outlook-with-a-windows-mobile-device-in-vista.aspx</link>
            <description>&lt;p&gt;My XP laptop had ground to a halt - 6 months without a rebuild and it had got so clogged that it literally took 5 minutes just to boot. I needed to wipe it and start again but the head of our technical team offered me a fresh laptop with a clean Vista Business build. Deciding that being a guinea pig was a nice idea, I accepted it. The 4 gig of ram (up from 2 gig) was the sweetener that made up my mind for sure :)&lt;/p&gt;  &lt;p&gt;As I was setting it up just how I wanted it, one of the things I needed to do was sync my two mobile phones with it. I have both an HTC 4350 (Herald) from work and my own personal HTC TyTN II. On my XP laptop I used ActiveSync to sync up my calendar, tasks and contacts.&lt;/p&gt;  &lt;p&gt;Knowing that ActiveSync has been replaced on Vista, I was hoping for an easy experience. After plugging in my TyTN II, Vista offered to sync my media files. Fine, but I wanted to sync with Outlook so I cancelled the dialog and started my hunt. In Control Panel I found 'Sync Centre' which offered to sync my media files again. This was getting annoying. Contacts and/or Outlook were mentioned nowhere.&lt;/p&gt;  &lt;p&gt;Maybe the 'Windows Mobile Device Centre' in Control Panel was my best bet? Nope. That just had settings on whether I wanted to connect via USB and Bluetooth or not. Nothing about syncing. Googling didn't help me that much. There doesn't seem to be much info about this. Is it that obvious? Am I missing something?&lt;/p&gt;  &lt;p&gt;Actually, I was missing something. The latest download of &lt;a href="http://www.microsoft.com/windowsmobile/en-us/help/synchronize/device-center.mspx"&gt;Windows Mobile Device Centre&lt;/a&gt; (currently 6.1 as I write). This is basically what ActiveSync used to be, and syncs up all the bits and pieces you'd expect with Outlook. In fact, it's very smart and clean and appears to be a nice improvement on ActiveSync.&lt;/p&gt;  &lt;p&gt;I thought it worth blogging this for two reasons. Firstly, hopefully this will get indexed so that it can be a quick help to others who were in the same boat as me. Secondly, is this part of the problem with Vista? It's not exactly intuitive that you have to install an updated version of a Control Panel applet to be able to sync (although behind the scenes it's more than that, of course). It almost seems that the out-the-box install is half baked. And the help isn't much help.&lt;/p&gt;  &lt;p&gt;It's possible that I still missed a trick, of course, and if I have done then please feel free to comment here and set me straight!&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/353.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2008/10/01/syncing-outlook-with-a-windows-mobile-device-in-vista.aspx</guid>
            <pubDate>Wed, 01 Oct 2008 09:37:39 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/353.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2008/10/01/syncing-outlook-with-a-windows-mobile-device-in-vista.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/353.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Google Chrome and McAfee Anti Virus</title>
            <category>Techie</category>
            <link>http://blogs.interakting.co.uk/danmatthews/archive/2008/09/03/google-chrome-and-mcafee-anti-virus.aspx</link>
            <description>&lt;p&gt;Chrome threw the following error when posting to a forum:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.interakting.co.uk/images/blogs_interakting_co_uk/danmatthews/WindowsLiveWriter/GoogleChromeandMcAfeeAntiVirus_BB9D/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="288" alt="image" src="http://blogs.interakting.co.uk/images/blogs_interakting_co_uk/danmatthews/WindowsLiveWriter/GoogleChromeandMcAfeeAntiVirus_BB9D/image_thumb_1.png" width="634" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(my login name and domain is deliberately blanked)&lt;/p&gt;  &lt;p&gt;This warning 'Exploit-ObscuredHtml' isn't thrown when doing exactly the same in Internet Explorer, so I'd be interested to know why it's throwing the virus alert. Possibly because it's running the javascript in a separate process to the HTML? Unlikely. More inclined to think it's because it's in the unsecure 'Documents and Settings' folder whereas IE uses the rather more locked-down Temporary Internet Files folder.&lt;/p&gt;  &lt;p&gt;Either way, I can imagine lots of sites would use Javascript that would trigger this and I'd imagine other AV tools would flag it too. Surely the AV vendors and/or Google need to address this somehow? Isn't it a bad place to put files that you will run script? If you have seen this behaviour as well then feel free to post the Url and the name of your AV tool.&lt;/p&gt;&lt;img src="http://blogs.interakting.co.uk/danmatthews/aggbug/343.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dan Matthews</dc:creator>
            <guid>http://blogs.interakting.co.uk/danmatthews/archive/2008/09/03/google-chrome-and-mcafee-anti-virus.aspx</guid>
            <pubDate>Wed, 03 Sep 2008 12:19:29 GMT</pubDate>
            <wfw:comment>http://blogs.interakting.co.uk/danmatthews/comments/343.aspx</wfw:comment>
            <comments>http://blogs.interakting.co.uk/danmatthews/archive/2008/09/03/google-chrome-and-mcafee-anti-virus.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.interakting.co.uk/danmatthews/comments/commentRss/343.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
