<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ILearnable .Net</title>
	<atom:link href="http://ilearnable.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://ilearnable.net</link>
	<description>If I can learn .Net, anyone can!</description>
	<lastBuildDate>Thu, 05 Jan 2012 07:33:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ilearnable.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>ILearnable .Net</title>
		<link>http://ilearnable.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ilearnable.net/osd.xml" title="ILearnable .Net" />
	<atom:link rel='hub' href='http://ilearnable.net/?pushpress=hub'/>
		<item>
		<title>The specified service has been marked for deletion</title>
		<link>http://ilearnable.net/2011/09/02/the-specified-service-has-been-marked-for-deletion/</link>
		<comments>http://ilearnable.net/2011/09/02/the-specified-service-has-been-marked-for-deletion/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 10:50:03 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=217</guid>
		<description><![CDATA[After stopping a windows service (.Net 3.5) through the GUI, I uninstalled it using installutil.exe (commandline), then I tried to install the same service using a newer version of the framework (.Net 4.0). No such luck. &#8220;The specified service has been marked for deletion&#8221; Turns out that the GUI still holds a reference to the service [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=217&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>After stopping a windows service (.Net 3.5) through the GUI, I uninstalled it using installutil.exe (commandline), then I tried to install the same service using a newer version of the framework (.Net 4.0). No such luck.</div>
<div>&#8220;The specified service has been marked for deletion&#8221;</div>
<div>Turns out that the GUI still holds a reference to the service even though it&#8217;s technically uninstalled, so I needed to shut down the windows service GUI window, then I could reinstall the service.</div>
<div>FFS MS!</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=217&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2011/09/02/the-specified-service-has-been-marked-for-deletion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>Bug in PageTypeBuilder 1.3.0 and 1.3.1</title>
		<link>http://ilearnable.net/2011/08/03/bug-in-pagetypebuilder-1-3-0-and-1-3-1/</link>
		<comments>http://ilearnable.net/2011/08/03/bug-in-pagetypebuilder-1-3-0-and-1-3-1/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 08:19:37 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=214</guid>
		<description><![CDATA[Quite a while back I convinced Joel to include a feature in PTB 1.3 which enabled putting PageTypeProperty attributes on interface declarations, which has made my life using PTB a heckuva lot easier, Instead of having to use inheritance to get properties onto pages I now mostly use interfaces, especially for &#8220;side-features&#8221; like stuff that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=214&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Quite a while back I convinced Joel to include a feature in PTB 1.3 which enabled putting PageTypeProperty attributes on interface declarations, which has made my life using PTB a heckuva lot easier,</p>
<p>Instead of having to use inheritance to get properties onto pages I now mostly use interfaces, especially for &#8220;side-features&#8221; like stuff that is supposed to go into the sidebar of a site it doesn&#8217;t always make sense to specify this using inheritance, sooner or later you end up with a page which needs the side-feature, but have nothing else in common with the other pages, and inheritance trees based on side-feature is an antipattern only until you add side-feature number two, then it becomes impossible.</p>
<p>Now for years I have preferred to use PTB *only* for defining the pages at startup-time, and not for extracting the data from them during run-time. (I have found that the convenience of specifying prop names as strings to EPiServer:Property far outweighs the potential for harm during refactoring) And if this is all you are doing then both 1.3.0 and 1.3.1 will work fine for you.</p>
<p>It wasn&#8217;t until some collegues of mine started using the new interface features that I became aware that I had introduced a bug into PTB: <strong>Whenever you declare page type properties using interfaces you cannot get those properties back using the same interface. </strong>As I said I never used PTB for this purpose, that&#8217;s my excuse and I&#8217;m sticking to it.</p>
<p>10 minutes after being made aware of this defect I had created a fix for it and shipped it to Joel.</p>
<p>That&#8217;s where it stopped. Joel never did release a fixed version of PTB 1.3.0, and when 1.3.1 came out it had the same bug in it.</p>
<p>I asked Joel why during NDC2011 and he claimed that he had found some problem with the fix but couldn&#8217;t remember what that was exactly.</p>
<p>This means that whenever I start up a new project I always have to use my special-build PTB and not the official one.</p>
<p>Anyhoo, I thought more people might be interested in the fix, so here goes, all you need to change the implementation of one method in PageTypeBuilder/Reflection/MethodInfoExtensions.cs:</p>
<p><pre class="brush: csharp;">

...
public static bool IsGetterOrSetterForPropertyWithAttribute(this MethodInfo propertyGetterOrSetter, Type attributeType)
        {
            if (!propertyGetterOrSetter.IsGetterOrSetter())
                return false;

            string propertyName = propertyGetterOrSetter.GetPropertyName();
            PropertyInfo property = propertyGetterOrSetter.DeclaringType.GetAllValidPageTypePropertiesFromClassAndImplementedInterfaces().FirstOrDefault(p=&gt;p.Name.Equals(propertyName));

            if (property == null)
                return false;

            return property.HasAttribute(attributeType);
        }
...

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=214&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2011/08/03/bug-in-pagetypebuilder-1-3-0-and-1-3-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing EPiLang</title>
		<link>http://ilearnable.net/2011/05/22/introducing-epilang/</link>
		<comments>http://ilearnable.net/2011/05/22/introducing-epilang/#comments</comments>
		<pubDate>Sun, 22 May 2011 17:28:43 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=198</guid>
		<description><![CDATA[A while back I wrote about how to get strongly typed globalization handling for EPiServer CMS. In the time since I have been playing around with ways to empower administrators of EPiServer sites to change the globalization texts themselves without having to involve developers directly. I don&#8217;t have know how many times the customer has [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=198&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A while back I wrote about how to get <a title="rework of strongly typed access to language files in EPiServer" href="http://ilearnable.net/2010/08/06/rework-of-strongly-typed-access-to-language-files-in-episerver/">strongly typed globalization handling</a> for EPiServer CMS.</p>
<p>In the time since I have been playing around with ways to empower administrators of EPiServer sites to change the globalization texts themselves without having to involve developers directly. I don&#8217;t have know how many times the customer has come to me and requested that this string should be that and required me to circumvent our standard deployment routine so that &#8220;we can get the new string out immediately&#8221;</p>
<p>What I have come up with is basically a framework that allows each text used to be persistently overridden in runtime by an administrator. Combined with the T4-goodness from my previous post I believe I have made something that could turn out to be useful for some other sites. I Have decided to call it EPiLang (yes, I am inspired by the awesome EPiImage framework)</p>
<p>Under normal conditions you can access globalized strings in three different ways in EPiServer:</p>
<ol>
<li>&lt;%= LanguageManager.Instance.Translate(&#8220;/xpath/to/string&#8221;) %&gt;</li>
<li>&lt;EPiServer:Translate runat=&#8221;server&#8221;  Text=&#8221;/xpath/to/string&#8221; /&gt;</li>
<li>&lt;%$ Resources: EPiServer, xpath.to.string%&gt;</li>
</ol>
<div>Each of these methods require you to spell the path to the text correctly and also requires a fair bit of looking up the xml file(s) going &#8220;where did I put that string&#8230;.&#8221; .</div>
<div>With EPiLang you can access strings this way</div>
<ul>
<li>&lt;%= LanguageService.Translate(&#8220;/xpath/to/string&#8221;) %&gt;</li>
<li>&lt;EPiLang:Translate runat=&#8221;server&#8221;  Text=&#8221;/xpath/to/string&#8221; /&gt;</li>
<li>&lt;%$ Resources: EPiServer, xpath.to.string%&gt;</li>
<li>&lt;%= EPiLang.xpath.to.string.Text %&gt;</li>
</ul>
<div>The first three are as you can see remarkably like the originals, but the last one is the one you&#8217;ll find yourself using over and over again since it is strongly typed and gives you compiler support and intellisense.</div>
<div>No matter which of these you use, after adding the webcontrol &lt;EPiLang:Editor runat=&#8221;server&#8221; /&gt; to the very end of your master page, any administrator surfing the site will get a new item on his/her EPiServer context menu:</div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/1_context1.png"><img class="alignnone size-full wp-image-202" title="1_context" src="http://andreascode.files.wordpress.com/2011/05/1_context1.png" alt="" width="651" height="635" /></a></div>
<div></div>
<div>When they click that item a list of all overrideable texts used for that page rendering will be shown in the lower right hand corner of the page:</div>
<div></div>
<div></div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/2_list1.png"><img class="alignnone size-full wp-image-203" title="2_list" src="http://andreascode.files.wordpress.com/2011/05/2_list1.png" alt="" width="1024" height="673" /></a></div>
<div>If the administrator clicks on one of the texts then an editor is shown in a lightbox:</div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/3_editor1.png"><img class="alignnone size-full wp-image-204" title="3_editor" src="http://andreascode.files.wordpress.com/2011/05/3_editor1.png" alt="" width="750" height="381" /></a></div>
<div></div>
<div>Now the administrator may input a new string into the textbox and click save</div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/4_save_ok.png"><img class="alignnone size-full wp-image-205" title="4_save_ok" src="http://andreascode.files.wordpress.com/2011/05/4_save_ok.png" alt="" width="549" height="284" /></a></div>
<div></div>
<div>on refreshing the page the globalized text will now be changed:</div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/5_result.png"><img class="alignnone size-full wp-image-206" title="5_result" src="http://andreascode.files.wordpress.com/2011/05/5_result.png" alt="" width="751" height="305" /></a></div>
<div>What happened here was that every time EPiLang is asked to fetch a string, it registers it on the HttpContext.Current.Request.Items array, so that when the editor is rendered it can produce a list of all the relevant strings.  The mechanism used for localizing this string here (this is taken from the AlloyTech sample provided by EPiServer) is like this:</div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/6_resource.png"><img class="alignnone size-full wp-image-207" title="6_resource" src="http://andreascode.files.wordpress.com/2011/05/6_resource.png" alt="" width="843" height="165" /></a></div>
<div>EPiServer has defined its own resourcefactory which enables this syntax, however EPiLang substitutes this factory with  its own during installation and so is able to override which string is actually displayed.</div>
<div>There is a way to enable administrators to just click on the text inline instead of finding it in the list on the lower right hand side, we can exchange the code above with a strongly typed editable string:</div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/7_editable_code.png"><img class="alignnone size-full wp-image-208" title="7_editable_code" src="http://andreascode.files.wordpress.com/2011/05/7_editable_code.png" alt="" width="758" height="118" /></a></div>
<div>which in turn light up the string when an admin enables editing of globalized strings through the context menu</div>
<div><a href="http://andreascode.files.wordpress.com/2011/05/8_editable.png"><img class="alignnone size-full wp-image-209" title="8_editable" src="http://andreascode.files.wordpress.com/2011/05/8_editable.png" alt="" width="859" height="369" /></a></div>
<div>The editable text is in fact a &lt;span&gt; tag with some attributes set which enables the editing</div>
<div>Overridden strings are not saved back to the xml file, as the next deploy would probably undo what the admin just did. Instead they are saved into EPiServers Dynamic Data store, along with the original string. That way if the string in the xml file changes for any reason then that value is used (until it is overridden at a later stage). Using this setup ensures that the latest write wins.</div>
<div>If you want to play around with EPiLang you are more than welcome to do so. It is CMS6 only and you will find it on <a href="http://nuget.org">nuget</a> under the name <strong>Forse.EPiLang</strong></div>
<div>When you install it it modifies your web.config slightly, it:</div>
<div>
<ul>
<li>Adds Forse.EPiLang to pages/namespaces</li>
<li>Adds Forse.EPiLang.Controls to pages/controls</li>
<li>Adds a httphandler to handle the overriding commands (from the lightbox)</li>
<li>Exchanges the resourceProviderFactoryType with a new one.</li>
</ul>
<div>on uninstall all these changes are reverted.</div>
</div>
<div>You will also get a readme file under the App_Readme folder. It contains the instructions on what to do to get up and running.</div>
<div>If this is useful for anyone I&#8217;ll put it up on EPiCode. Any feedback is much appreciated</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/198/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=198&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2011/05/22/introducing-epilang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/1_context1.png" medium="image">
			<media:title type="html">1_context</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/2_list1.png" medium="image">
			<media:title type="html">2_list</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/3_editor1.png" medium="image">
			<media:title type="html">3_editor</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/4_save_ok.png" medium="image">
			<media:title type="html">4_save_ok</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/5_result.png" medium="image">
			<media:title type="html">5_result</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/6_resource.png" medium="image">
			<media:title type="html">6_resource</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/7_editable_code.png" medium="image">
			<media:title type="html">7_editable_code</media:title>
		</media:content>

		<media:content url="http://andreascode.files.wordpress.com/2011/05/8_editable.png" medium="image">
			<media:title type="html">8_editable</media:title>
		</media:content>
	</item>
		<item>
		<title>EPiServer CMS 5 / PageTypeBuilder 1.1 / UnmappablePropertyTypeException</title>
		<link>http://ilearnable.net/2011/05/02/episerver-cms-5-pagetypebuilder-1-1-unmappablepropertytypeexception/</link>
		<comments>http://ilearnable.net/2011/05/02/episerver-cms-5-pagetypebuilder-1-1-unmappablepropertytypeexception/#comments</comments>
		<pubDate>Mon, 02 May 2011 08:18:13 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=189</guid>
		<description><![CDATA[I never work on EPiServer projects without PageTypeBuilder anymore, it&#8217;s such a great tool, however version 1.1 (the one to use for EPiServer CMS 5) has a really annoying &#8220;bug/feature&#8221; in it: If you add a new custom property type and make use of it all in one go then PTB will *sometimes* throw an [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=189&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I never work on EPiServer projects without PageTypeBuilder anymore, it&#8217;s such a great tool, however version 1.1 (the one to use for EPiServer CMS 5) has a really annoying &#8220;bug/feature&#8221; in it:</p>
<p>If you add a new custom property type and make use of it all in one go then PTB will *sometimes* throw an UnmappablePropertyTypeException. The reason is that EPiServer does not yet know of a given property, (the reflection magic which makes EPi startup times such a nightmare has not yet been executed on the assembly containing the prop and thus registered the prop to the EPi DB)</p>
<p>(this is not a problem on later PTB versions, but they don&#8217;t support EPiServer CMS 5)</p>
<p>the reason this only crops up *sometimes* is that the order in which EPi CMS 5 does its thing is important. If it finds the DLL with the prop first then you are ok, if it finds the PTB page type definitions first then you get the exception. This wouldn&#8217;t be such a huge problem if EPi continued wth dll registration after PTB throws up, so that the property in question would get into the DB and thus be ready for the next time PTB starts up, but then I wouldn&#8217;t be writing this blogpost if it did.</p>
<p>Even if you are really careful with always adding the custom property first, starting the site, adding the use of the property to a PTB page type, starting the site again, you are vulnerable when deploying to a new system (test / stage / prod) or when rolling back to a previous version of the EPiServer DB.</p>
<p>PageTypeBuilder comes with a funnily named config setting you can enable: &#8220;disablePageTypeUpdation&#8221;, but setting this to true does not stop the exception from cropping up, as the thing you are disabling is the &#8220;updation&#8221; of already known page types, it still goes through and adds new pagetypes, and more importantly: it validates the entire PTB setup, which fails as there is an unknown property type.</p>
<p>So I made my own version of PTB 1.1 which actually lets you disable it completely so that it doesn&#8217;t throw a spanner in the works when registering new custom properties, the new property is called disablePageTypeBuilder, and its implementation is thusly:</p>
<p>\Configuration\PageTypeBuilderConfiguration.cs</p>
<p><pre class="brush: csharp;">
...
        [ConfigurationProperty(&quot;disablePageTypeBuilder&quot;, IsRequired = false)]
        public virtual bool DisablePageTypeBuilder
        {
            get
            {
                return (bool)this[&quot;disablePageTypeBuilder&quot;];
            }
        }
...
</pre></p>
<p>\Initializer.cs :</p>
<p><pre class="brush: csharp;">
...
  public static void Start()
        {
            lock (_lockObject)
            {
                if (_started)
                    return;

                PageTypeBuilderConfiguration configuration = PageTypeBuilderConfiguration.GetConfiguration();
                if (!configuration.DisablePageTypeBuilder)
                {
                    PageTypeSynchronizer synchronizer = new PageTypeSynchronizer(new PageTypeDefinitionLocator(),
                                                                                 configuration);

                    synchronizer.SynchronizePageTypes();

                    DataFactory.Instance.LoadedPage += DataFactory_LoadedPage;
                    DataFactory.Instance.LoadedChildren += DataFactory_LoadedChildren;
                    DataFactory.Instance.LoadedDefaultPageData += DataFactory_LoadedPage;
                }

                _started = true;
            }
        }
...
</pre></p>
<p>\Synchronization\Validation\UnmappablePropertyTypeException.cs</p>
<p><pre class="brush: csharp;">
    public class UnmappablePropertyTypeException : PageTypeBuilderException
    {
        private const string NewMappingsHint =
            @&quot;
You may try to disable PageTypeBuilder using the pagetypebuilder config section
( &lt;section name=&quot;&quot;pageTypeBuilder&quot;&quot; type=&quot;&quot;PageTypeBuilder.Configuration.PageTypeBuilderConfiguration, PageTypeBuilder&quot;&quot;/&gt; )
with attribute &lt;pageTypeBuilder disablePageTypeBuilder=&quot;&quot;True&quot;&quot; /&gt;
and run the site once without PTB to register any new custom properties first,
then reactivate PTB to make use of new properties&quot;;

        public UnmappablePropertyTypeException()
        {
        }

        public UnmappablePropertyTypeException(string message) : base(message + NewMappingsHint)
        {

        }

        public UnmappablePropertyTypeException(string message, Exception innerException)
            : base(message + NewMappingsHint, innerException)
        {
        }
    }
</pre></p>
<p>This means that when you get the exception you can just turn off PTB, restart, then turn on PTB and restart and you&#8217;re set</p>
<p>You disable PageTypeBuilder like this in web.config:</p>
<pre>...
    &lt;section name="pageTypeBuilder" type="PageTypeBuilder.Configuration.PageTypeBuilderConfiguration, PageTypeBuilder"/&gt;
...
    &lt;pageTypeBuilder disablePageTypeBuilder="true" /&gt;
...</pre>
<p>If you&#8217;re too lazy to compile it yourself you can download this file: <a href="http://andreascode.files.wordpress.com/2011/05/ptb_with_shutoff_switch-zip.doc">PTB_With_Shutoff_switch.zip</a>, and change from .doc to .zip, (thanks a lot wordpress&#8230;.) unzip it and use it instead of the regular PTB1.1</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/189/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=189&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2011/05/02/episerver-cms-5-pagetypebuilder-1-1-unmappablepropertytypeexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting EPiServer CMS6 to run under Asp.Net 4.0</title>
		<link>http://ilearnable.net/2010/12/02/getting-episerver-cms6-to-run-under-asp-net-4-0/</link>
		<comments>http://ilearnable.net/2010/12/02/getting-episerver-cms6-to-run-under-asp-net-4-0/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 12:33:47 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=186</guid>
		<description><![CDATA[There&#8217;s a couple of gotchas for getting EPiServer to run under .Net 4.0 New default ClientID generation scheme in .net 4 disrupts EPiServer&#8217;s javascripts If you find youself getting the following javascript exception when creating pages or expanding nodes in the edit tree in episerver: error: the target Fullregion$explorertreeview$treeview for the callback could not be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=186&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a couple of gotchas for getting EPiServer to run under .Net 4.0</p>
<p><strong>New default ClientID generation scheme in .net 4 disrupts EPiServer&#8217;s javascripts </strong></p>
<p>If you find youself getting the following javascript exception when creating pages or expanding nodes in the edit tree in episerver:</p>
<blockquote><p>error: the target Fullregion$explorertreeview$treeview for the callback could not be found or dit not implement icallbackeventhandler</p></blockquote>
<p>The solution is to add the following attribute to web.config: under configuration &gt; system.web &gt; pages :  clientIDMode=&#8221;AutoID&#8221;</p>
<p>You can scope this to only be applied on the util and UI locations if you don&#8217;t want the old school ID generation scheme applied globally</p>
<p>&nbsp;</p>
<p><strong>Validation is more strict in .net 4.0</strong></p>
<p>When editing pages and submitting rich text content containing tags you might get Asp.net complaining to you that you need to turn off eventvalidation, but in addition you also need to instruct asp.net 4.0 to use &lt;httpRuntime requestValidationMode=&#8221;2.0&#8243; /&gt; under configuration &gt; system.web</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/186/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=186&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2010/12/02/getting-episerver-cms6-to-run-under-asp-net-4-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>Get C# 3.5 to work in a T4 template on VS2008</title>
		<link>http://ilearnable.net/2010/11/29/get-c-3-5-to-work-in-a-t4-template-on-vs2008/</link>
		<comments>http://ilearnable.net/2010/11/29/get-c-3-5-to-work-in-a-t4-template-on-vs2008/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 07:15:59 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=183</guid>
		<description><![CDATA[In order to be able to use C# 3.5 in a .tt file on VS2008 you need to hack the devenv.exe.config file located at C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE, adding the following to the /configuration/runtime/assemblyBinding node You also need to explicitly declare that you want to use C# 3.5 in the top of the .tt [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=183&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In order to be able to use C# 3.5 in a .tt file on VS2008 you need to hack the devenv.exe.config file located at C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE, adding the following to the /configuration/runtime/assemblyBinding node</p>
<p><pre class="brush: xml;">
&lt;!-- START T4 Hack --&gt;
&lt;dependentAssembly&gt; 
  &lt;assemblyIdentity name=&quot;Microsoft.VisualStudio.TextTemplating&quot; publicKeyToken=&quot;b03f5f7f11d50a3a&quot; culture=&quot;neutral&quot; /&gt; 
  &lt;bindingRedirect oldVersion=&quot;0.0.0.0-9.0.0.0&quot; newVersion=&quot;9.0.0.0&quot; /&gt; 
&lt;/dependentAssembly&gt; 
&lt;dependentAssembly&gt; 
  &lt;assemblyIdentity name=&quot;Microsoft.VisualStudio.TextTemplating.VSHost&quot; publicKeyToken=&quot;b03f5f7f11d50a3a&quot; culture=&quot;neutral&quot; /&gt; 
  &lt;bindingRedirect oldVersion=&quot;0.0.0.0-9.0.0.0&quot; newVersion=&quot;9.0.0.0&quot; /&gt; 
&lt;/dependentAssembly&gt;
&lt;!-- END T4 Hack --&gt;

</pre></p>
<p>You also need to explicitly declare that you want to use C# 3.5 in the top of the .tt file like this:<br />
<pre class="brush: xml;">
&lt;#@ template debug=&quot;true&quot; language=&quot;C#v3.5&quot; #&gt;
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=183&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2010/11/29/get-c-3-5-to-work-in-a-t4-template-on-vs2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>WebActivator / PreApplicationStartMethod</title>
		<link>http://ilearnable.net/2010/11/22/webactivator-preapplicationstartmethod/</link>
		<comments>http://ilearnable.net/2010/11/22/webactivator-preapplicationstartmethod/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 06:51:23 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=172</guid>
		<description><![CDATA[Yesterday I was totally taken aback by the tiny but excellent webactivator project. I totally had a near-magic experience, that&#8217;s when I&#8217;m almost starting to suspect something works because of tiny magic elves within the .Net runtime &#8220;just know what to do&#8221; and even though the code doesn&#8217;t seem like it&#8217;s doing the right things [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=172&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I was totally taken aback by the tiny but excellent <a href="http://bitbucket.org/davidebbo/webactivator/overview">webactivator </a> project. I totally had a near-magic experience, that&#8217;s when I&#8217;m almost starting to suspect something works because of tiny magic elves within the .Net runtime &#8220;just know what to do&#8221; and even though the code doesn&#8217;t seem like it&#8217;s doing the right things it&#8217;s still working.</p>
<p>Let me explain: WebActivator is something you will probably see more and more of the more you start to use modules from <a href="http://nuget.codeplex.com/">NuGet</a>. It is a neat little dll which allows you to specify anywhere in your code that a certain method is to be called on application startup. See this example from <a href="http://ninject.org/">Ninject</a>, this class gets added to your solution when installing the ninject package with nuget:</p>
<p><pre class="brush: csharp;">

[assembly: WebActivator.PreApplicationStartMethod(typeof(SinsenWeb.Web.AppStart_NinjectMVC3), &quot;Start&quot;)]
namespace YourNameSpace {
    public static class AppStart_NinjectMVC3 {
        public static void RegisterServices(IKernel kernel) {
            //kernel.Bind&lt;IThingRepository&gt;().To&lt;SqlThingRepository&gt;();
        }

        public static void Start() {
            // Create Ninject DI Kernel
            IKernel kernel = new StandardKernel();

            // Register services with our Ninject DI Container
            RegisterServices(kernel);

            // Tell ASP.NET MVC 3 to use our Ninject DI Container
            DependencyResolver.SetResolver(new NinjectServiceLocator(kernel));
        }
    }

</pre></p>
<p>Ignore the ninject specific stuff. The goodness that webactivator brings to the table is the first line where a usage of the webactivator attribute will result in a certain method will be called on startup.</p>
<p>Interested in knowing just *how* WebActivator manages to do this I looked up the sourcecode. Latest version of  which is available <a href="http://bitbucket.org/davidebbo/webactivator/src/fa1c23862446/WebActivator/">here </a></p>
<p>as it only consists of two classes, the attribute which you can include (like ninject did) and the implementation of the logic I thought it would be easy to get a handle on this.</p>
<p>I&#8217;ll include the two sources here so you can see if you&#8217;re smarter than me in figuring out how this works.<br />
Attribute:</p>
<p><pre class="brush: csharp;">
using System;
using System.Reflection;

namespace WebActivator {
    // This attribute is similar to its System.Web namesake, except that
    // it can be used multiple times on an assembly.
    [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
    public sealed class PreApplicationStartMethodAttribute : Attribute {
        private Type _type;
        private string _methodName;

        public PreApplicationStartMethodAttribute(Type type, string methodName) {
            _type = type;
            _methodName = methodName;
        }

        public Type Type {
            get {
                return _type;
            }
        }

        public string MethodName {
            get {
                return _methodName;
            }
        }

        public void InvokeMethod() {
            // Get the method
            MethodInfo method = Type.GetMethod(
                MethodName,
                BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);

            if (method == null) {
                throw new ArgumentException(
                    String.Format(&quot;The type {0} doesn't have a static method named {1}&quot;,
                        Type, MethodName));
            }

            // Invoke it
            method.Invoke(null, null);
        }
    }
}

</pre></p>
<p>Implementation:</p>
<p><pre class="brush: csharp;">

using System;
using System.IO;
using System.Reflection;
using System.Web;

namespace WebActivator {
    public class PreApplicationStartCode {
        public static void Start() {
            // Go through all the bin assemblies
            foreach (var assemblyFile in Directory.GetFiles(HttpRuntime.BinDirectory, &quot;*.dll&quot;)) {
                var assembly = Assembly.LoadFrom(assemblyFile);

                // Go through all the PreApplicationStartMethodAttribute attributes
                // Note that this is *our* attribute, not the System.Web namesake
                foreach (PreApplicationStartMethodAttribute preStartAttrib in assembly.GetCustomAttributes(
                    typeof(PreApplicationStartMethodAttribute),
                    inherit: false)) {

                    // Invoke the method that the attribute points to
                    preStartAttrib.InvokeMethod();
                }
            }
        }
    }
}

</pre></p>
<p>Hmm, so basically, we declare an attribute and we have a static method which when run will track down all instances of this attribute in all dlls in the bin folder and fire the method as specified in each of those instances.</p>
<p>But *who* calls the static method?</p>
<p>I had a look in the Properties\AssemblyInfo.cs file which looks like this:</p>
<p><pre class="brush: csharp;">
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Web;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle(&quot;WebActivator&quot;)]
[assembly: AssemblyDescription(&quot;&quot;)]
[assembly: AssemblyConfiguration(&quot;&quot;)]
[assembly: AssemblyCompany(&quot;Microsoft&quot;)]
[assembly: AssemblyProduct(&quot;WebActivator&quot;)]
[assembly: AssemblyCopyright(&quot;Copyright © Microsoft 2010&quot;)]
[assembly: AssemblyTrademark(&quot;&quot;)]
[assembly: AssemblyCulture(&quot;&quot;)]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid(&quot;3bc078bd-ade4-4271-964f-1d041508c419&quot;)]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion(&quot;1.0.*&quot;)]
[assembly: AssemblyVersion(&quot;1.0.0.0&quot;)]
[assembly: AssemblyFileVersion(&quot;1.0.0.0&quot;)]

[assembly: PreApplicationStartMethod(typeof(WebActivator.PreApplicationStartCode), &quot;Start&quot;)]

</pre></p>
<p>and in the bottom of that file I finally started to believe that magic little elves live within the jit-compiler and make everything fine and dandy even though it seems like the feature is using itself to start itself.</p>
<p>Maybe there really *are* turtles all the way down?</p>
<p>Have you spotted how it works yet?</p>
<p>I&#8217;ll give you some whitespace to think of the solution before I blurt it out and ruin your fun</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><br />
WebActivator.PreApplicationStartMethod != System.Web.PreApplicationStartMethod<br />
</strong></p>
<p>WebActivator doesn&#8217;t use itself but rather a feature of the Asp.Net 4.0 runtime to start itself off. The whole motivation for WebActivator is that the feature built into Asp.Net 4.0 has a design flaw in that it only allows a single instance of the attribute within each dll, making it hard to use for NuGet scenarios where you would want to use multiple different packages each with their own startup logic independent of eachother, you would have to manually merge the logic into one place if you wanted to use the Asp.Net 4.0 implementation.</p>
<p>However, since WebActivator.dll is a tiny separate dll it can make use of the asp.net feature to kickstart the other dlls.</p>
<p>I think that I would prefer if the AssemblyInfo.cs file was a little more specific in its usage of the asp.net feature, seeing that it&#8217;s basically reimplementing it itself. Instead of relying on a using statement for System.Web, I would prefer if the attribute was declared as</p>
<p><pre class="brush: csharp;">
[assembly: System.Web.PreApplicationStartMethod(typeof(WebActivator.PreApplicationStartCode), &quot;Start&quot;)]

</pre></p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/172/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=172&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2010/11/22/webactivator-preapplicationstartmethod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>How to make your world better one browser extension at a time</title>
		<link>http://ilearnable.net/2010/10/12/how-to-make-your-world-better-one-browser-extension-at-a-time/</link>
		<comments>http://ilearnable.net/2010/10/12/how-to-make-your-world-better-one-browser-extension-at-a-time/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 20:22:50 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=167</guid>
		<description><![CDATA[As a consultant I have been exposed to a lot of different timesheet applications. Everything from a simple excel sheet to fairly advanced web sites into which you enter the amount of time spent on various (hopefully) project-related activities. The fidelity with which the hours are to be registered also varies wildly. Generally being a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=167&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As a consultant I have been exposed to a lot of different timesheet applications. Everything from a simple excel sheet to fairly advanced web sites into which you enter the amount of time spent on various (hopefully) project-related activities. The fidelity with which the hours are to be registered also varies wildly. Generally being a bit of a slob I prefer when the input process is simple and the fidelity is almost nonexisten. This frees me up to deliver quality work instead of painstakingly documenting *what* work I did *when* and for *how long*. </p>
<p>In my simplistic world-view the hourly report forms you have to fill out are a necessary evil, but they&#8217;re still evil <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So, when I got subcontracted through a firm with this input process: (snip: <a href="http://screencast.com/t/mZ51HlB8B">http://screencast.com/t/mZ51HlB8B</a> )<br />
First I threw a fit and then I started to think: &#8220;is there any way for me to automate this&#8221;. </p>
<p>as it turns out, yes there is. I won&#8217;t bore you with all the juicy details on how to create a chrome plugin that modifies a webpage on your behalf,<br />
but in essence all you do is to have a manifest file declare on which urls this plugin should kick in, and what javascript files it should inject at the end of the loading process for that page.</p>
<p>For me in this case the file (which must be called manifest.json by the way) looks like this:<br />
<pre class="brush: jscript;">
{
  &quot;name&quot; : &quot;ElanIt Timereg decrapifier&quot;,
  &quot;version&quot; : &quot;0.1&quot;,
  &quot;description&quot; : &quot;Makes timereg useable&quot;,

  &quot;content_scripts&quot;: [
    {
      &quot;matches&quot;: [&quot;https://timereg.elanit.no/Default.aspx*&quot;],
      &quot;js&quot;: [&quot;jquery.js&quot;, &quot;timeregmod.js&quot;]
    }
  ]
}
</pre></p>
<p>which as you can see loads a bundled version of a minified jquery 1.4.2 and also a custom js file which contains the logic I needed to inject onto the page.<br />
here is the timeregmod.js file:</p>
<p><pre class="brush: jscript;">


$.fn.getNonColSpanIndex = function () {
    if (!$(this).is('td') &amp;&amp; !$(this).is('th'))
        return -1;

    var allCells = this.parent('tr').children();
    var normalIndex = allCells.index(this);
    var nonColSpanIndex = 0;

    allCells.each(
        function (i, item) {
            if (i == normalIndex)
                return false;

            var colspan = $(this).attr('colspan');
            colspan = colspan ? parseInt(colspan) : 1;
            nonColSpanIndex += colspan;
        }
    );

    return nonColSpanIndex;
};

$(document).ready(function () {
    findAllWorkDays($('.ITMTimesheetDetail')).not(':last').each(function () {
        var tr = $(this);
        tr.append($('&lt;td&gt;&lt;/td&gt;').append($('&lt;input type=&quot;button&quot;&gt;&lt;/input&gt;)').val('&gt;&gt;').css('font-size','9px').click(function () {
            var input = $(this);
            var thisRow = input.parents('tr').first();

            var nextRow = findNextWorkDay(thisRow);

            $('input[type=text]', thisRow).each(function () {
                var textbox = $(this);
                var index = textbox.parent().getNonColSpanIndex();

                $('td:eq(' + index + ') input', nextRow).val(textbox.val());
            });
        })));
    });
    $('.ITMTimesheetDetail tr:eq(2)').each(function () {
        var tr = $(this);
        tr.append($('&lt;td&gt;&lt;/td&gt;').append($('&lt;input type=&quot;button&quot;&gt;&lt;/input&gt;)').val('Kopier til alle').css('font-size', '9px').click(function () {
            $('input[type=text]', tr).each(function () {
                var textbox = $(this);
                var value = textbox.val();
                var index = textbox.parent().getNonColSpanIndex();
                var workdays = findAllWorkDays('.ITMTimesheetDetail');
                $('td:eq(' + index + ') input', workdays).val(value);
            });
        })));
    });
});

function findAllWorkDays(table) {
    return $('tr:gt(1)', table).filter(function (index) {
        var tr = $(this);
        return isWorkDayRow(tr);
    });
}

function isWorkDayRow(tr){
    if(tr.children().first().hasClass('ITMTimesheetDetailDayOfMonthHoliday') || tr.children().first().hasClass('ITMTimesheetDetailDayOfMonthSaturday')){
        return false;
    }
    return true;
}

function findNextWorkDay(currentRow) {
   var nextRow = currentRow.next();

   while (!isWorkDayRow(nextRow)) {
       nextRow = nextRow.next();
   }
   return nextRow;
}



</pre></p>
<p>I won&#8217;t pretend that I&#8217;m overly happy with the javascript, it should be shorter and better, but it gets the job done, so I&#8217;m stopping working on it.</p>
<p>The timesheet application (which is called Manpower Timereg apparently) now looks like this for me (when browsing using google chrome with the plugin loaded):<br />
<a href="http://screencast.com/t/cpBtfwBe7t7">http://screencast.com/t/cpBtfwBe7t7</a></p>
<p>(yes, the buttons on the right hand side was added by this plugin).</p>
<p>SO: if you have to deal with this (dare I say somewhat challenging) system and would like to improve your own experience, feel free to take the sourcecode in this blogpost and create your own chrome plugin. You probably want to change the url in manifest.json (unless you happen to be subcontracting for ElanIt in norway)</p>
<p>creating a chrome plugin based on this is as simple as:<br />
- create a new folder and call it MySpecialPlugin or something like that<br />
- download the latest version of jquery into that folder and rename the file to jquery.js<br />
- put the two files as described in this blogpost into the folder.<br />
- in chrome: navigate to the url chrome://extensions and click the &#8220;load unpacked extension&#8221;<br />
- select the folder you created a few bullets ago</p>
<p>and voila: Bob&#8217;s your uncle</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=167&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2010/10/12/how-to-make-your-world-better-one-browser-extension-at-a-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows authentication nightmare gone bad&#8230;.  with a vengeance&#8230;</title>
		<link>http://ilearnable.net/2010/09/20/windows-authentication-nightmare-gone-bad-with-a-vengeance/</link>
		<comments>http://ilearnable.net/2010/09/20/windows-authentication-nightmare-gone-bad-with-a-vengeance/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 20:11:24 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[episerver]]></category>
		<category><![CDATA[iis7]]></category>
		<category><![CDATA[irony]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=159</guid>
		<description><![CDATA[Today I spent a large portion of my day chasing around bugs related to windows authentication and episerver. My basic premise was this: - End users will connect to the site I&#8217;m making use IE7 under &#8220;local intranet&#8221; thereby magically getting access without logging in. (WindowsRoleProvider) - developers / support personnel / admins will use [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=159&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today I spent a large portion of my day chasing around bugs related to windows authentication and episerver.</p>
<p>My basic premise was this:<br />
- End users will connect to the site I&#8217;m making use IE7 under &#8220;local intranet&#8221; thereby magically getting access without logging in. (WindowsRoleProvider)<br />
- developers / support personnel / admins will use EPiServer logins (SqlRoleProvider)<br />
- in order to get this to work I need to use the MultiplexingRoleProvider.</p>
<p>There are numerous writeups on how to use the multiplexingroleprovider, but none actually say out loud<strong> *you cannot use MultiplexingRoleProvider and ALSO get automatic NTLM windows authentication*</strong><strong> So now I&#8217;ve said it.</p>
<p>The first hint I got was this image from IIS when I tried to set it up: http://screencast.com/t/NjJiNzE0MDE where IIS7 complained that you cannot have your cake and eat it too (you can&#8217;t use both challenge-based (NTLM) and redirect-based (Forms) auth in the same app.</p>
<p>I talked to a few guys I trust and they convinced me that &#8220;it should be possible, I think I have done it at some point but I can&#8217;t remember how&#8221;. Time would convince me otherwise, though.</p>
<p>Setting up Multiplexer is easy, just look here: http://sdk.episerver.com/library/CMS5/Developers%20Guide/Membership%20and%20Role%20Providers.htm?id=24871<br />
I always wondered what the &#8220;BUILTIN\&#8221; signifies in WindowsMembershipProvider, for the record it is there to nullify the prefix of the local groups on the machine (Administrators and Everyone) which are actually called BUILTIN\Administratos and BUILTIN\Everyone when under UAC</p>
<p>I was able to set up the MPRP easily enough, but the IE auto-login didn&#8217;t work. </p>
<p>I was able to get IE auto-login to work, but only using windows authentication only.<br />
Also I wasn&#8217;t able to log in to localhost for some reason. but when I accessed the server from a different machine I could authenticate.</p>
<p>So then I got carried away on a wild goose chase (maybe?) with there might be problems using windows auth on localhost: http://support.microsoft.com/kb/896861/en-us So I regedited the server a few times and reset it a few times, cursed the sky a few times, fetal-cried a few brave tears, then I pulled myself together and went for one final google-push.</p>
<p>And lo and behold: http://www.andornot.com/blog/post/How-to-solve-4012-errors-related-to-Windows-Authentication-and-the-BUILTIN5cAdministrators-role-in-IIS-7.aspx</p>
<p>Turns out that when UAC is turned on on a Windows Server 2008, the BUILTIN\Administrators group is banned from authenticating, but only when the request is made from the local machine. (how weird is that? probably some security scenario I&#8217;m too tired to consider) So the final solution was to greate a new local group and assign appropriate God-like priviliges to that group, (I considered calling it Developersdevelopersdevelopers) and put all the devs into that group and configure the site to accept users belonging to devdevdev. So that we can deploy the site (admins only.. UAC is your friend here to help you) and also test that the deploy went well, all on the same machine.</p>
<p>PROGRESS!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/159/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=159&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2010/09/20/windows-authentication-nightmare-gone-bad-with-a-vengeance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
		<item>
		<title>Upgrading EPiServer to CMS6</title>
		<link>http://ilearnable.net/2010/08/31/upgrading-episerver-to-cms6/</link>
		<comments>http://ilearnable.net/2010/08/31/upgrading-episerver-to-cms6/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 05:52:15 +0000</pubDate>
		<dc:creator>andreakn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cms6]]></category>
		<category><![CDATA[episerver]]></category>

		<guid isPermaLink="false">http://ilearnable.net/?p=156</guid>
		<description><![CDATA[Had this problem: Cannot resolve dependencies for the following module(s) EPiServer.Cms.Shell.UI.InitializableModule EPiServer.Cms.Shell.UI.InitializableModule EPiServer.Web.InitializationModule EPiServer.Web.InitializationModule Turns out the C:\Program Files\EPiServer\CMS\6.0.530.0\bin doesn&#8217;t contain all the necessary dlls. instead you can either do a clean install and steal the dlls from that site&#8217;s /bin or you can fetch them from C:\Program Files\EPiServer\CMS\6.0.530.0\VSTemplates\EPiServerProject.zip (thanks Jamie Dixon: http://www.jamie-dixon.co.uk/episerver/upgrading-episerver-to-version-6/ )<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=156&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Had this problem: </p>
<p><em>Cannot resolve dependencies for the following module(s)<br />
EPiServer.Cms.Shell.UI.InitializableModule<br />
EPiServer.Cms.Shell.UI.InitializableModule<br />
EPiServer.Web.InitializationModule<br />
EPiServer.Web.InitializationModule</em></p>
<p>Turns out the C:\Program Files\EPiServer\CMS\6.0.530.0\bin doesn&#8217;t contain all the necessary dlls.</p>
<p>instead you can either do a clean install and steal the dlls from that site&#8217;s /bin or you can fetch them from C:\Program Files\EPiServer\CMS\6.0.530.0\VSTemplates\EPiServerProject.zip </p>
<p>(thanks Jamie Dixon: http://www.jamie-dixon.co.uk/episerver/upgrading-episerver-to-version-6/ )</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreascode.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreascode.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andreascode.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andreascode.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/andreascode.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/andreascode.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/andreascode.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/andreascode.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andreascode.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andreascode.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andreascode.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andreascode.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andreascode.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andreascode.wordpress.com/156/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ilearnable.net&amp;blog=7611693&amp;post=156&amp;subd=andreascode&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ilearnable.net/2010/08/31/upgrading-episerver-to-cms6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1530af30854d46bee65929b28dbfd53?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">andreakn</media:title>
		</media:content>
	</item>
	</channel>
</rss>
