<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://ljusberg.se/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ljusberg.se</title><link>http://ljusberg.se/blogs/</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Jaques missar poängen igen</title><link>http://ljusberg.se/blogs/pop/archive/2008/11/18/jaques-missar-po-228-ngen-igen.aspx</link><pubDate>Tue, 18 Nov 2008 20:01:56 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:6086</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;För några år sedan skrev DN Motors Jaques Wallner en krönika där han ondgjorde sig över att trängselskatten skulle drabba de ekonomiskt svaga. De skulle helt enkelt inte ha råd att köra bil i Stockholm längre. Jag skrev redan då ett svar där jag försökte förklara för honom att det är helt galet att blanda ihop fördelningspolitik med miljöpolitik, men efter &lt;a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=1298&amp;amp;a=853127"&gt;dagens krönika om ett möjligt dubbdäcksförbud&lt;/a&gt; är det tydligt att jag måste försöka förklara igen.&lt;/p&gt;  &lt;p&gt;I bland annat miljöpolitik används avgifter, punktskatter, bidrag, förbud och andra styrmedel för att påverka oss att göra bättre miljö-, hälso- eller säkerhetsmässiga val. Man tar dock sällan, som Jaques Wallner mycket riktigt påpekar, någon fördelningspolitisk hänsyn. Exempelvis kan man sänka skatten på biodrivmedel för att stimulera användandet av detta – men man sänker den inte mer för de med inkomster under 25000 kr/månad. På samma sätt verkar det inte vara någon som vill ta bort tobaksskatten för att den slår hårdare mot låginkomsttagare än för den stora massan i medelklassen. Jag har heller inte hört någon säga att de svaga i samhället ska få köra mot enkelriktat på Östermalm för att slippa ta onödiga (och dyra) omvägar.&lt;/p&gt;  &lt;p&gt;Fördelningspolitik är det instrument man använder för att utjämna skillnader mellan olika samhällsgrupper. Traditionellt görs detta inte genom att hindra annan lagstiftning, utan genom att modifiera inkomstskatt, olika former av bidrag m.m. Om man exempelvis värnar mycket om de “ekonomiskt svagaste bilägarna” som Jaques Wallner talar om så ger man dem lämpligtvis en skattelättnad (eller motsvarande höjt bidrag) istället. På så vis kan de själva bestämma huruvida de vill lägga de nya pengarna på en uppsättning dubbfria vinterdäck eller istället parkera bilen på en infartsparkering och därmed göra både miljön och sin egen ekonomi en rejäl tjänst.&lt;/p&gt;  &lt;p&gt;Slutligen frågar jag mig också om vinterdäckstvånget i sig ska få vara kvar? Även det måste ju slå extra hårt mot de bilister som har lägst inkomst. Samhället har i den frågan bestämt att det är viktigare att rädda liv, men Jaques Wallner kanske även här är av en annan åsikt?&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=6086" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/pop/archive/tags/Politik/default.aspx">Politik</category><category domain="http://ljusberg.se/blogs/pop/archive/tags/Trafik/default.aspx">Trafik</category><category domain="http://ljusberg.se/blogs/pop/archive/tags/Milj_26002300_246_3B00_/default.aspx">Milj&amp;#246;</category></item><item><title>Windows Server 2008 as development platform</title><link>http://ljusberg.se/blogs/smorakning/archive/2008/06/23/windows-server-2008-as-development-platform.aspx</link><pubDate>Mon, 23 Jun 2008 15:40:30 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:6080</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p style="margin-left:19pt;"&gt;Well, this is going to be interesting. I&amp;#39;ve spent the day installing Windows Server 2008 on my brand new laptop at work. I was inspired by &lt;a href="http://blog.deurell.net/2008/04/min-nya-utvecklarplattform-eller-att.html"&gt;&lt;span style="color:blue;text-decoration:underline;"&gt;Mikael Deurell&amp;#39;s post about using Hyper-V&lt;/span&gt;&lt;/a&gt; etc. 
&lt;/p&gt;&lt;p style="margin-left:19pt;"&gt;So far it&amp;#39;s been much easier than I expected. Pretty much all device drivers for my Compaq 8510w installed without any problems even though I&amp;#39;m using a 64-bit system.
&lt;/p&gt;&lt;p style="margin-left:19pt;"&gt; 
 &lt;/p&gt;&lt;p style="margin-left:19pt;"&gt;I also found two great blog posts that describe how to make the Windows Server 2008 experience a little more &amp;quot;Desktoppy&amp;quot;. Check out:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/vijaysk/archive/2008/02/11/using-windows-server-2008-as-a-super-desktop-os.aspx"&gt;&lt;span style="color:blue;text-decoration:underline;"&gt;Using Windows Server 2008 as a super desktop OS&lt;/span&gt;&lt;/a&gt;
		&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/vijaysk/archive/2008/02/20/using-windows-server-2008-as-a-super-workstation-os-cont-d.aspx"&gt;&lt;span style="color:blue;text-decoration:underline;"&gt;Using Windows Server 2008 as a super desktop OS Continued&lt;/span&gt;&lt;/a&gt;
		&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Also, this is an attempt at posting using Word 2007.. Let&amp;#39;s see how that works out..!&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=6080" width="1" height="1"&gt;</description></item><item><title>Scrum Dashboard</title><link>http://ljusberg.se/blogs/smorakning/archive/2008/02/28/scrum-dashboard.aspx</link><pubDate>Thu, 28 Feb 2008 22:16:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:6074</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;If you&amp;#39;re a fan of Scrum and Team Foundation Server you&amp;#39;ll probably want to have a look at the &lt;a class="" href="http://www.codeplex.com/scrumdashboard"&gt;Scrum Dashboard&lt;/a&gt; recently published on CodePlex by &lt;a class="" href="http://www.episerver.com/"&gt;EPiServer&lt;/a&gt;. It looks very cool but unfortunately for us it uses the &lt;a class="" href="http://www.scrumforteamsystem.com/en/default.aspx"&gt;Scrum for Team System&lt;/a&gt; templates by Conchango instead of the &amp;quot;vanilla&amp;quot; MSF Agile templates that we&amp;#39;re using. Too bad for us, but I applaud EPiServer for making this thing available to the community. Thank&amp;#39;s guys!&lt;/p&gt;
&lt;p&gt;BTW, I actually met the guy listed as Coordinator&amp;nbsp;of the project (&lt;a class="" href="http://labs.episerver.com/en/Blogs/Per/Archive/2008/2/Scrum-Dashboard/"&gt;Per Bjurström&lt;/a&gt;) on my &lt;a class="" href="http://ljusberg.se/blogs/smorakning/archive/2007/10/17/going-to-redmond.aspx"&gt;trip to Redmond&lt;/a&gt; last October - that has to be a good sign, right?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=6074" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/TFS/default.aspx">TFS</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Scrum/default.aspx">Scrum</category></item><item><title>What's up?</title><link>http://ljusberg.se/blogs/smorakning/archive/2008/02/27/what-s-up.aspx</link><pubDate>Wed, 27 Feb 2008 16:20:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:6071</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I know, I know.. I&amp;#39;ve been extremely lazy lately, at least when it comes to sharing knowledge with you guys. I guess the main reason for that is that I&amp;#39;m currently on parental leave which means that my days are not really spent researching, architecting and developing as much as they are spent entertaining &lt;a href="http://ljusberg.se/photos/miranda"&gt;Miranda&lt;/a&gt;...&lt;/p&gt;
&lt;p&gt;Anyway, as you may have realized by my &lt;a title="Caching Dynamic Controls" href="http://ljusberg.se/blogs/smorakning/archive/2007/09/10/caching-dynamic-controls-in-asp-net.aspx"&gt;previous&lt;/a&gt; &lt;a title="Caching Dynamic Controls - Solution" href="http://ljusberg.se/blogs/smorakning/archive/2007/10/17/caching-dynamic-controls-in-asp-net-solution.aspx"&gt;posts&lt;/a&gt; on the subject, I&amp;#39;ve been diving into the big swamp of ASP.NET once again. Somtime mid-last year I was tasked with creating a new plattform for the web sites at Thomas Cook Northern Europe (like &lt;a href="http://ving.se/"&gt;ving.se&lt;/a&gt;, &lt;a href="http://spies.dk/"&gt;spies.dk&lt;/a&gt;, &lt;a href="http://tjaereborg.dk/"&gt;tjaereborg.dk&lt;/a&gt; and &lt;a href="http://ving.no/"&gt;ving.no&lt;/a&gt;). The platform that is currently running all our sites is quite powerful but was designed with .NET Framework 1.1 in mind which makes it a bit clumsier than it has to be. &lt;/p&gt;
&lt;p&gt;At the time, the only web site framework on offer from Microsoft was the &lt;a href="http://msdn.microsoft.com/webclientfactory"&gt;Web Client Software Factory&lt;/a&gt;. I really liked the ideas and patterns that drive the architecture of the WCSF (in pattern-talk I guess you would describe it as Model-View-Presenter combined with Application Controllers). However, it simply wasn&amp;#39;t enough for our needs. The major problem was that the Views/Presenters are to coarse. They are designed with entire pages in mind instead of being designed for User Controls (which is what we need). I also didn&amp;#39;t like the fact that the flow engine they used couldn&amp;#39;t handle multiple flows and states per session/user. A quite common scenario for us is that a user opens up several browser windows to compare different alternative trips - something that often leads to corrupt state.&lt;/p&gt;
&lt;p&gt;In the end I decided to create a framework from scratch with much of the ideas from the WCSF intact, but extended to fit our needs. Some notable features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Based on the Model-View-Presenter and Application Controller patterns.&lt;/li&gt;
&lt;li&gt;Independent modules for each area of the web site which makes it possible to develop and deploy parts of the web site without affecting the other parts.&lt;/li&gt;
&lt;li&gt;No .aspx files - pages are built up dynamically.&lt;/li&gt;
&lt;li&gt;Multiple flows per user&lt;/li&gt;
&lt;li&gt;Fully integrated URL Rewriting&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Well, if you&amp;#39;re interested I&amp;#39;ll blog some more about this. But at least now I&amp;#39;ve given you an update on what I&amp;#39;m doing..&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update (2008-02-28)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Funny, the day after I wrote this entry, Microsoft Sweden published a &amp;quot;&lt;a class="" title="Thomas Cook" href="http://buzzfrog.blogs.com/zabrak/2008/02/thomas-cook---i.html"&gt;success story&lt;/a&gt;&amp;quot; about the project (although the story focuses more on the way we are using TFS and VS 2008 rather than the framework itself). I had no idea this article was being written, but I guess that&amp;#39;s what happens when you&amp;#39;re on parental leave.. :-)&lt;/p&gt;
&lt;p&gt;Also, you might be asking yourself &amp;quot;How on earth do you make sure that things are going in the right direction if your not in the office?&amp;quot;. Well, luckily I&amp;#39;ve been able to hand over the framework in the very good hands of my colleague Håkan (who&amp;nbsp;also gave me a lot of great advice during the first stages of the project). If you&amp;#39;ve read this far, you&amp;#39;ll certainly find his blog even more interesting, and as a bonus it&amp;#39;s available in &lt;a class="" title="Hocke" href="http://hocke.blogspot.com/"&gt;English&lt;/a&gt;&amp;nbsp;and &lt;a class="" title="Hocke" href="http://hockeswe.blogspot.com/"&gt;Swedish&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=6071" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/.NET/default.aspx">.NET</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>How cool is this?</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/10/27/how-cool-is-this.aspx</link><pubDate>Fri, 26 Oct 2007 23:44:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5906</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>I&amp;#39;m currently writing this post on the express bus to Redmond using my iPod touch and the free WiFi provided on the bus. In my book it doesn&amp;#39;t get much cooler than that!&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5906" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Fun/default.aspx">Fun</category></item><item><title>T4 editor available</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/10/26/t4-editor-available.aspx</link><pubDate>Fri, 26 Oct 2007 18:05:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5905</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;It seems &lt;a class="" title="Clarius Consulting" href="http://www.clariusconsulting.net/"&gt;Clarius Consulting&lt;/a&gt; have released a beta version of a pretty nice addition to Visual Studio, at least if you&amp;#39;re working with the Guidance Automation Toolkit. The &lt;a class="" title="T4 Editor" href="http://www.t4editor.net/"&gt;T4 Editor&lt;/a&gt; will give you IntelliSense, nice&amp;nbsp;colorization etc when working with your T4 templates.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m now just waiting for them to release a version of the &lt;a class="" title="Software Factories Toolkit" href="http://www.softwarefactoriestoolkit.net/"&gt;Software Factories Toolkit&lt;/a&gt; that works with VS2008 Beta 2..!&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5905" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/GAT/default.aspx">GAT</category></item><item><title>VS2008 RTM any day now?</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/10/23/vs2008-rtm-any-day-now.aspx</link><pubDate>Tue, 23 Oct 2007 04:13:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5903</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;According to the Microsoft guys in building 20, the RTM of Visual Studio 2008 and .NET Framework 3.5 is coming &amp;quot;very, Very, VERY soon&amp;quot; - whatever that means... &lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5903" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/.NET/default.aspx">.NET</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Going to Redmond!</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/10/17/going-to-redmond.aspx</link><pubDate>Wed, 17 Oct 2007 14:16:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5899</guid><dc:creator>anders</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Well, in a couple of days I&amp;#39;m off to the Microsoft Campus in Redmond! I&amp;#39;m attending an Orcas Adoption Workshop next week which will take me through all the new stuff in Visual Studio 2008 and .NET Framework 3.5. So far, I haven&amp;#39;t got the agenda so I have more or less no idea who
I&amp;#39;ll meet and what kind of workshops to expect but I&amp;#39;m sure it&amp;#39;ll be
great.&lt;/p&gt;&lt;p&gt;I&amp;#39;m really, really looking forward to it. Actually visiting the Campus is something I&amp;#39;ve been dreaming about for quite some time (yes, I know.. maybe I should try to reprioritize my dreams... but still!)&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, is anyone else going to be in the Redmond area next week? &lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5899" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Personal/default.aspx">Personal</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/.NET/default.aspx">.NET</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Caching dynamic controls in ASP.NET - solution</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/10/17/caching-dynamic-controls-in-asp-net-solution.aspx</link><pubDate>Wed, 17 Oct 2007 07:39:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5896</guid><dc:creator>anders</dc:creator><slash:comments>6</slash:comments><description>&lt;p&gt;In my &lt;a href="http://ljusberg.se/blogs/smorakning/archive/2007/09/10/caching-dynamic-controls-in-asp-net.aspx"&gt;last post&lt;/a&gt;, I asked for help with a problem we&amp;#39;ve been having with caching of dynamic controls - and I got some from &lt;a title="Infinites Loop" href="http://weblogs.asp.net/infinitiesloop/default.aspx" target="_blank"&gt;Dave Reed&lt;/a&gt;. Dave works for the ASP.NET team and if his blog isn&amp;#39;t on your roll yet, add it ASAP - it&amp;#39;s simply brilliant. &lt;/p&gt;  &lt;p&gt;Dave explained the problem:&lt;/p&gt;  &lt;hr /&gt;  &lt;div&gt;Apparently, the stack trace involved with loading the control is taken into account when deciding how to cache the controls output. So for example, if you load the control twice like so: &lt;/div&gt;  &lt;pre&gt;LoadControl(&amp;quot;&lt;span style="color:#8b0000;"&gt;foo.ascx&lt;/span&gt;&amp;quot;); &lt;span style="color:#008000;"&gt;// once &lt;/span&gt;
LoadControl(&amp;quot;&lt;span style="color:#8b0000;"&gt;foo.ascx&lt;/span&gt;&amp;quot;); &lt;span style="color:#008000;"&gt;// twice&lt;/span&gt;&lt;/pre&gt;

&lt;div&gt;Then they will be cached separately. But if you load them like this:&lt;/div&gt;

&lt;pre&gt;MethodThatLoadsFoo(); &lt;span style="color:#008000;"&gt;// once &lt;/span&gt;
MethodThatLoadsFoo(); &lt;span style="color:#008000;"&gt;// twice&lt;/span&gt;&lt;/pre&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;Where MethodThatLoadsFoo contains:&lt;/div&gt;

&lt;pre&gt;LoadControl(&amp;quot;&lt;span style="color:#8b0000;"&gt;foo.ascx&lt;/span&gt;&amp;quot;); &lt;/pre&gt;

&lt;div&gt;They are cached together because it will appear that they were loaded via the same code line.&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;Since you are loading them dynamically based on data you probably have a single method that loads whatever control it is to be. But depending on the details of your implementation perhaps you can find a way to have a different LoadControl reference load each one? 
  &lt;br /&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;Ok.. So where does that leave us? Remember, the implementation that calls LoadControl in my last example looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ControlInfo controlInfo &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; controlList)
{
   &lt;span style="color:#008000;"&gt;// Load the control and add it to the page&lt;/span&gt;
   HttpContext.Current.Items[&amp;quot;&lt;span style="color:#8b0000;"&gt;uniqueId&lt;/span&gt;&amp;quot;] = controlInfo.UniqueControlId;
   Control ctrl = LoadControl(controlInfo.ControlUrl);
   PlaceHolder1.Controls.Add(ctrl);
}&lt;/pre&gt;

&lt;p&gt;It is the same physical line of code that loads all controls, which makes the caching mechanism believe that it is the very same control that is being loaded. In order for it to cache multiple versions, I&amp;#39;d need to add a new LoadControl line for each control. So I guess I could &amp;quot;unwrap&amp;quot; the foreach-loop and do something like:&lt;/p&gt;

&lt;pre&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (controlList.Count &amp;gt; 0)
{
   HttpContext.Current.Items[&amp;quot;&lt;span style="color:#8b0000;"&gt;uniqueId&lt;/span&gt;&amp;quot;] = controlList[0].UniqueControlId;
   PlaceHolder1.Controls.Add(LoadControl(controlList[0].ControlUrl));
}
&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (controlList.Count &amp;gt; 1)
{
   HttpContext.Current.Items[&amp;quot;&lt;span style="color:#8b0000;"&gt;uniqueId&lt;/span&gt;&amp;quot;] = controlList[1].UniqueControlId;
   PlaceHolder1.Controls.Add(LoadControl(controlList[1].ControlUrl));
}
&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (controlList.Count &amp;gt; 2)
{
   HttpContext.Current.Items[&amp;quot;&lt;span style="color:#8b0000;"&gt;uniqueId&lt;/span&gt;&amp;quot;] = controlList[2].UniqueControlId;
   PlaceHolder1.Controls.Add(LoadControl(controlList[2].ControlUrl));
}&lt;/pre&gt;

&lt;p&gt;Ehh.. Nope.. Not gonna happen...&lt;/p&gt;

&lt;p&gt;The only other alternative I could think of was to dynamically generate and compile the code that is used to render a page. This is (a crude version of) what I came up with:&lt;/p&gt;

&lt;pre&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CompileAndInitializePage(Page page, List controlList)
{
  Assembly compiledAssembly;

  &lt;span style="color:#008000;"&gt;// Has this page been built before? If so, there should already be an existing assembly&lt;/span&gt;
  &lt;span style="color:#008000;"&gt;// compiled for it.&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (compiledAssemblies.ContainsKey(page.AppRelativeVirtualPath))
  {
    compiledAssembly = compiledAssemblies[page.AppRelativeVirtualPath];
  }
  &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;
  {
    &lt;span style="color:#008000;"&gt;// If not, compile a new one.&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; mainHeader =
      &amp;quot;&lt;span style="color:#8b0000;"&gt;using System.Web;\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt;using System.Web.UI;\n&lt;/span&gt;&amp;quot; +

      &amp;quot;&lt;span style="color:#8b0000;"&gt;namespace DynamicCacheTest\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt;{\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt; public class TempPageBuilder\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt; {\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt; public void BuildPage(Page page)\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt; {\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt; Control holder;\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt; holder = page.FindControl(\&amp;quot;PlaceHolder1\&amp;quot;);\n&lt;/span&gt;&amp;quot;;

    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; mainFooter =
      &amp;quot;&lt;span style="color:#8b0000;"&gt; }\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt; }\n&lt;/span&gt;&amp;quot; +
      &amp;quot;&lt;span style="color:#8b0000;"&gt;}\n&lt;/span&gt;&amp;quot;;
    StringBuilder sb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringBuilder(mainHeader);
    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ControlInfo ctrl &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; controlList)
    {
      sb.AppendFormat(&amp;quot;&lt;span style="color:#8b0000;"&gt;HttpContext.Current.Items[\&amp;quot;uniqueId\&amp;quot;] = {0};\n&lt;/span&gt;&amp;quot;, ctrl.UniqueControlId);
      sb.AppendFormat(&amp;quot;&lt;span style="color:#8b0000;"&gt;holder.Controls.Add(page.LoadControl(\&amp;quot;{0}\&amp;quot;));\n&lt;/span&gt;&amp;quot;, ctrl.ControlUrl);
    }
    sb.Append(mainFooter);

    ICodeCompiler compiler = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CSharpCodeProvider().CreateCompiler();

    CompilerParameters parameters = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CompilerParameters(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] { &amp;quot;&lt;span style="color:#8b0000;"&gt;System.dll&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;System.Web.dll&lt;/span&gt;&amp;quot; });
    CompilerResults res = compiler.CompileAssemblyFromSource(parameters, sb.ToString());
    compiledAssembly = res.CompiledAssembly;
    compiledAssemblies[page.AppRelativeVirtualPath] = compiledAssembly;
  }

  &lt;span style="color:#008000;"&gt;// Build the page builder object&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; builder = Activator.CreateInstance(compiledAssembly.GetType(&amp;quot;&lt;span style="color:#8b0000;"&gt;DynamicCacheTest.TempPageBuilder&lt;/span&gt;&amp;quot;));

  &lt;span style="color:#008000;"&gt;// Invoke the BuildPage method&lt;/span&gt;
  builder.GetType().InvokeMember(&amp;quot;&lt;span style="color:#8b0000;"&gt;BuildPage&lt;/span&gt;&amp;quot;, BindingFlags.InvokeMethod, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, builder, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] { &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; });
}&lt;/pre&gt;

&lt;p&gt;And it works beautifully! I&amp;#39;m not too worried about performance since I&amp;#39;m only compiling the page once, and running the compiled code shouldn&amp;#39;t be slower than the foreach-loop is today. The only thing I&amp;#39;m thinking is that with many pages on a site I&amp;#39;d have a lot of very small assemblies loaded. Probably it would be a better idea to precompile all pages on startup and put them in a single assembly.&lt;/p&gt;

&lt;p&gt;Anyway, in the end we&amp;#39;ve decided that we won&amp;#39;t actually put this in production since the problem probably is better worked around by educating our webmasters, but it was nice to finally find a solution.&lt;/p&gt;

&lt;p&gt;Update: I&amp;#39;ve attached the updated source code to this post. &lt;/p&gt;

&lt;p&gt;Update 2: And now I&amp;#39;m trying out a Live Writer Plugin to format the source code&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5896" width="1" height="1"&gt;</description><enclosure url="http://ljusberg.se/blogs/smorakning/attachment/5896.ashx" length="9377" type="application/zip" /><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/.NET/default.aspx">.NET</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Caching dynamic controls in ASP.NET</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/09/10/caching-dynamic-controls-in-asp-net.aspx</link><pubDate>Mon, 10 Sep 2007 14:05:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5891</guid><dc:creator>anders</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Since the invention of partial caching in ASP.NET, we have been trying our best to implement it on our web pages. But without much luck. This post is a request, or I guess you could call it a &amp;quot;cry&amp;quot;, for help!&lt;/p&gt;&lt;p&gt;The problem is that we create all our controls dynamically, and each page can contain more than one instance of the same control (.ascx) but with different content.&lt;/p&gt;&lt;p&gt;Simply put, a page load is currently done like this:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Retrieve a list of which controls to put on the page and the unique id of the content each control should display.&lt;/li&gt;&lt;li&gt;For each control that should be created, call LoadControl and let the control know its unique id.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Each control retrieves its data by using the unique id&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now, when trying to add partial caching to this control, the problem is that the controls are cached according to which page they&amp;#39;re on (or the query string used to get the page) and I just cannot figure out a way of caching two different instances of the same control. I mean, at the time of creation (LoadControl) I know which one I want, so it really should be theoretically possible, but I simply cannot find support for it in the API. &lt;/p&gt;&lt;p&gt;I&amp;#39;ve attached a simple test project that illustrates the problem. If you can find a nice solution, please, PLEASE let me know. I&amp;#39;d be in your debt!&lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5891" width="1" height="1"&gt;</description><enclosure url="http://ljusberg.se/blogs/smorakning/attachment/5891.ashx" length="7977" type="application/x-zip-compressed" /><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Help+needed/default.aspx">Help needed</category></item><item><title>Carlgren tar små små steg...</title><link>http://ljusberg.se/blogs/pop/archive/2007/07/09/carlgren-tar-sm-229-sm-229-steg.aspx</link><pubDate>Mon, 09 Jul 2007 10:15:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5890</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;... i &lt;a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=1042&amp;amp;a=669131" title="Nya trafikskatter" target="_blank"&gt;rätt riktning&lt;/a&gt;. Men är han beredd att göra &lt;a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=147&amp;amp;a=669027" title="Dubbla bensinpriset" target="_blank"&gt;det som verkligen krävs&lt;/a&gt;? Svaret blev att det &amp;quot;&lt;span class="text"&gt;ligger inte i min föreställningsvärld&lt;/span&gt;&amp;quot;.&amp;nbsp; Så förvånande då... &lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5890" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/pop/archive/tags/Politik/default.aspx">Politik</category><category domain="http://ljusberg.se/blogs/pop/archive/tags/Trafik/default.aspx">Trafik</category><category domain="http://ljusberg.se/blogs/pop/archive/tags/Milj_26002300_246_3B00_/default.aspx">Milj&amp;#246;</category></item><item><title>Grym lunch!</title><link>http://ljusberg.se/blogs/pop/archive/2007/07/02/grym-lunch.aspx</link><pubDate>Mon, 02 Jul 2007 11:41:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5889</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Här kommer ett tips till er som jobbar i närheten av Fridhemsplan/Marieberg. Se till att ta en lunchtur till nyöppnade &lt;a href="http://www.boulebar.se/" title="Boulebar" target="_blank"&gt;Boulebar&lt;/a&gt; i Rålis! Utmärkt goda luncher för överkomliga 75kr. Lyckas ni som vi bli ansedda som stammisar så är de dessutom inte omöjliga på att pruta ner priset på kaffe efter maten..&amp;nbsp;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5889" width="1" height="1"&gt;</description></item><item><title>Dags att skaffa en "riktig" frisör... </title><link>http://ljusberg.se/blogs/pop/archive/2007/06/13/dags-att-skaffa-en-quot-riktig-quot-fris-246-r.aspx</link><pubDate>Wed, 13 Jun 2007 12:51:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5886</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Jag har för vana att alltid gå till frisören minst en eller två
månader senare än vad jag borde. Jag har de senaste åren dessutom mer
eller mindre tagit första bästa person med sax och låtit dem klippa
mig. Hittils har det lett till en punkterad örsnibb och en och annan
inte helt lyckad frisyr. Men det största problemet är att jag aldrig
lyckas förmedla ordentligt hur mycket hår jag vill ha kvar på huvudet
efter klippningen. Det slår aldrig fel. Vanligast är att han/hon knappt
vågar göra mer än att klippa topparna lite. Det leder till att jag
egentligen borde klippa mig igen en månad senare, men det gör jag ju
naturligtvis inte vilket leder till en period när jag bara får längre
och längre och stökigare och stökigare hår. Sen ibland så händer det
som hände idag:&lt;/p&gt;&lt;p&gt;- &amp;quot;Sommarklippning? You got it!&amp;quot; &lt;/p&gt;&lt;p&gt;&lt;img src="http://ljusberg.se/images/no_hair.jpg" title="Vart tog mitt hår vägen?" alt="Vart tog mitt hår vägen?" /&gt;&lt;/p&gt;&lt;p&gt;Inte för att jag egentligen är missnöjd med min nya frisyr.. Men det var kanske inte exakt vad jag hade planerat.. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5886" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/pop/archive/tags/Privat/default.aspx">Privat</category></item><item><title>Fattar inget</title><link>http://ljusberg.se/blogs/pop/archive/2007/06/12/fattar-inget.aspx</link><pubDate>Tue, 12 Jun 2007 11:48:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5884</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Sitter just nu i telefonmöte med två danskar och tre norrmän. Någon som vill gissa hur mycket jag lyckas hänga med i diskussionerna..?&amp;nbsp;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5884" width="1" height="1"&gt;</description></item><item><title>Miljöhyckleriministrar</title><link>http://ljusberg.se/blogs/pop/archive/2007/06/12/milj-246-hyckleriministrar.aspx</link><pubDate>Tue, 12 Jun 2007 07:02:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5883</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;För några veckor sedan tog vi ju oss upp till &lt;a href="http://www.riksgransen.nu/" title="Riksgränsen" target="_blank"&gt;Riksgränsen&lt;/a&gt; för farsans 60-årsdag. Självklart tog vi &lt;a href="http://www.veolia.se/SimplePortalPage____14611.aspx" title="Norrlandståget" target="_blank"&gt;Norrlandståget&lt;/a&gt; - dels försöker vi ju alltid välja det mest miljövänliga alternativet, men dessutom är det ju en trevlig tågresa där man kan sova gott i sköna kupéer (med egen dush, toalett och shyssta Dux-sängar). Allt för samma pris som en flygbiljett.&lt;/p&gt;&lt;p&gt;När nu Europas miljöministrar tog samma resa för att diskutera klimatproblemet.. Ja &lt;a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=147&amp;amp;a=660197" title="Miljöministrar tog flyg till klimatmöte" target="_blank"&gt;då var det flyg som gäller&lt;/a&gt;. Suck.&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5883" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/pop/archive/tags/Politik/default.aspx">Politik</category><category domain="http://ljusberg.se/blogs/pop/archive/tags/Milj_26002300_246_3B00_/default.aspx">Milj&amp;#246;</category></item><item><title>Höga krav</title><link>http://ljusberg.se/blogs/pop/archive/2007/05/30/h-246-ga-krav.aspx</link><pubDate>Wed, 30 May 2007 08:21:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5877</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Nu börjar det faktiskt bli dags. Vi måste nog fundera på att flytta. Jag vet, vi hade tänkt stanna kvar ett par år till, men argumenten för att dra sig ifrån innerstan och vår lägenhet blir större och större.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Häromdagen tog jag en promenad med Miranda runt om i kvarteret och det enda jag tänkte på var &amp;quot;fan det här kan inte vara nyttigt för henne (eller mig)&amp;quot;. Rapport efter rapport visar ju att Fleminggatan och Sankt Eriksgatan överstiger alla gränsvärden för partiklar och kväveoxider gång på gång. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Vi har helt enkelt för många grannar. Jag kan väl förstå att en fest ibland blir lite för högljudd, eller att man vill renovera kök/badrum. Men när man har 40 hushåll i samma hus som alla vill ha en fest ibland och alla vill renovera lägenheten så blir det jäkligt jobbigt.&lt;/li&gt;&lt;li&gt;Grilla!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Nåja. Vi har ju tyvärr ett gäng krav som inte är helt lätta att uppfylla. Här kommer en liten lista på en del av de krav och önskemål vi har när vi nu börjar leta. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Krav&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Max 7 minuter till spårbunden kollektivtrafik&lt;/li&gt;&lt;li&gt;Max 7 minuter till någon form av centrum med vettiga affärer&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Max 30 minuter på cykel för att ta sig innanför tullarna&lt;/li&gt;&lt;li&gt;Minst 100 meter till närmaste vältrafikerade väg&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Blandat område (inte gated community, inte ghetto)&lt;/li&gt;&lt;li&gt;Kedjehus/Radhus/Villa eller kanske en &amp;quot;lägenhet med radhuskänsla&amp;quot; el.dyl.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Stort plus&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fjärrvärme &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Litet plus&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Bergvärme &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Gavelradhus/Kedjehus&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Litet minus&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Oljeeldat &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Den spårbundna kollektivtrafiken är pendeltåg, Nockebybanan eller Tvärbanan&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Stort minus&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Träfasad eller annat med stort behov av underhåll&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Direktverkande el&lt;/li&gt;&lt;li&gt;Den spårbundna kollektivtrafiken är Saltsjöbanan eller Roslagsbanan&lt;br /&gt;
  &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Så.. Då är det dags att spruta ur sig förslag på områden! Själva har vi knappt hittat något som ens uppfyller alla krav. Att dessutom hitta något som ligger inom budget... Nej, det här kommer bli svårt...&lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5877" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/pop/archive/tags/Privat/default.aspx">Privat</category><category domain="http://ljusberg.se/blogs/pop/archive/tags/Bostad/default.aspx">Bostad</category></item><item><title>The new SOA</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/05/30/the-new-soa.aspx</link><pubDate>Wed, 30 May 2007 08:15:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5876</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This is going to be confusing for me.. There&amp;#39;s a new SOA in town: &lt;a href="http://www.lotro.com/" title="LOTRO SoA" target="_blank"&gt;Lord of the Rings Online: Shadows of Angmar&lt;/a&gt; (or SoA). Let&amp;#39;s just hope they&amp;#39;ll continue to use the abbreviation &lt;a href="http://www.lotro.com/" title="Lord of the Rings Online" target="_blank"&gt;LOTRO&lt;/a&gt; instead..&lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5876" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Fun/default.aspx">Fun</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Gaming/default.aspx">Gaming</category></item><item><title>Online course from 2xSundblad</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/05/30/online-course-from-2xsundblad.aspx</link><pubDate>Wed, 30 May 2007 07:58:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5875</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I&amp;#39;ve just looked through a part of the preview of the coming online course from &lt;a href="http://www.2xsundblad.com/" title="2xSundblad" target="_blank"&gt;2xSundblad&lt;/a&gt; called Architecting Service Oriented Systems – Overview. It&amp;#39;s Flash-based with a mix of video, audio and slides. Looks very promising and it will be available for a very reasonable $399 (if you register your interest early you&amp;#39;ll even get a 25% discount). &lt;/p&gt;&lt;p&gt;I guess you&amp;#39;ll have to get used to the Swedish accent of Sten and Per, but knowing them I can promise you it&amp;#39;ll be worth it!&lt;/p&gt;&lt;p&gt;Three other courses will be available within the next year or so:&lt;/p&gt;&lt;ul&gt;&lt;font&gt;&lt;li&gt;The Infrastructure of Shareable Information Pattern – Planning, 
Architecting, Designing, and Implementing. 
&lt;/li&gt;&lt;li&gt;The Entity Services and User Application Pattern – Planning, Architecting, 
Designing, and Implementing. 
&lt;/li&gt;&lt;li&gt;The Business Process and Use Case Services Pattern – Planning, Architecting, 
Designing, and Implementing.&lt;/li&gt;&lt;/font&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;I&amp;#39;ll post a link to the free preview once I get an OK from Sten or Per to do so!&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Update&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Here&amp;#39;s the link to the &lt;a href="http://www.2xsundblad.com/archtraining/archsosystems" title="2xSundblad"&gt;preview of 2xSundblad&amp;#39;s new online course&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5875" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/SOA/default.aspx">SOA</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>The Agile pyramid</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/05/25/the-agile-pyramid.aspx</link><pubDate>Fri, 25 May 2007 07:25:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5874</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;One of my favorite developer sites, &lt;a href="http://worsethanfailure.com" target="_blank"&gt;Worse Than Failure&lt;/a&gt; (used to be called The Daily WTF), just published an article about &lt;a href="http://worsethanfailure.com/Articles/The-Great-Pyramid-of-Agile.aspx" target="_blank"&gt;Agile methodologies&lt;/a&gt; and why they suck. While I don&amp;#39;t agree with Alex it&amp;#39;s always fun when an analogy is turned upside down... The problem here is that the Pyramid analogy is flawed in the first place since an extremely important part of agile methodologies, Refactoring, is missing. Instead, building a pyramid using agile methodologies would rather be done this way:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Get some initial input from the Pharaoh. It will be something like &amp;quot;I&amp;#39;d like it to look like all the other pyramids, only bigger and better&amp;quot;.&lt;/li&gt;&lt;li&gt;Start building something that may or may not look much like a pyramid.&lt;/li&gt;&lt;li&gt;Find some flaws in your design. Show the Pharaoh and ask him what he thinks of it so far.&lt;/li&gt;&lt;li&gt;Tear down everything you or the Pharaoh don&amp;#39;t like.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add some more components to the pyramid.&lt;/li&gt;&lt;li&gt;Realize that the foundation of the pyramid isn&amp;#39;t solid enough.&lt;/li&gt;&lt;li&gt;Rebuild the foundation&lt;/li&gt;&lt;li&gt;Repeat steps 3, 4 and maybe 5 and 6 until you and the Pharaoh are happy with the result.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;And this is why agile methodologies are better suited for software development than for construction work...&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5874" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Code beauty</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/05/16/code-beauty.aspx</link><pubDate>Wed, 16 May 2007 14:03:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5868</guid><dc:creator>anders</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;It&amp;#39;s pretty clear that there are two basic kinds of developers; those that write code only to get the job done, and those that write code which in addition to getting the job done also looks good. I&amp;#39;m definitely part of the latter group and I have to say that sometimes I get frustrated when working with developers of the former conviction.&lt;/p&gt;&lt;p&gt;I was just reviewing some code written in a project I haven&amp;#39;t been involved in much, and found a set of very commonly used classes that lie in a namespace that is misspelled. I realize this doesn&amp;#39;t matter. I mean, the code does exactly what it&amp;#39;s supposed to do and the misspelling is so simple that everyone understands what it was meant to be called. But c&amp;#39;mon! Correcting the mistake would take about 2 minutes thanks to the refactoring functionality in Visual Studio.&lt;/p&gt;&lt;p&gt;Now to the difficult question... Should I mention it in my review?&lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5868" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Kan inte låta bli</title><link>http://ljusberg.se/blogs/pop/archive/2007/05/08/kan-inte-l-229-ta-bli.aspx</link><pubDate>Tue, 08 May 2007 08:29:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5866</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Många av er har väl redan sett bilden Elisabeth tog av Miranda för några veckor sedan, men det känns som att den är väl värd en plats på förstasidan ändå.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://grus.ljusberg.se/gallery" title="Miranda"&gt;&lt;img src="http://ljusberg.se/images/Miranda-46_medium.jpg" title="Miranda" alt="Miranda" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5866" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/pop/archive/tags/Miranda/default.aspx">Miranda</category></item><item><title>Enterprise Library 3.0 available</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/05/08/enterprise-library-3-0-available.aspx</link><pubDate>Tue, 08 May 2007 08:20:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5865</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Can&amp;#39;t believe I almost missed this completely! Turns out the P&amp;amp;P team released &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480453.aspx" title="Enterprise Library" target="_blank"&gt;Enterprise Library 3.0&lt;/a&gt; the other day. For me, the two most interesting new features have to be Environmental overrides and the new Validation Application Block. I&amp;#39;m also very happy to see a rolling trace file listener included in the Logging Application Block - I checked our production servers the other day, and some of the logfiles where a couple of gigabytes each.. not good.. not good at all..&lt;br /&gt;&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5865" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/.NET/default.aspx">.NET</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Enterprise+Library/default.aspx">Enterprise Library</category></item><item><title>Community Server 2007</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/04/22/community-server-2007.aspx</link><pubDate>Sun, 22 Apr 2007 08:01:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:5516</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The guys over at &lt;a class="" title="Telligent" href="http://telligent.com/" target="_blank"&gt;Telligent&lt;/a&gt; released the much longed for new version of &lt;a class="" title="Community Server 2007" href="http://communityserver.org/blogs/announcements/archive/2007/04/16/community-server-2007-released.aspx" target="_blank"&gt;Community Server&lt;/a&gt;. And they did it right on schedule! Very impressive!&lt;/p&gt;
&lt;p&gt;I spent a couple of hours yesterday upgrading my 2.1 installation and it all went pretty smoothly. Haven&amp;#39;t checked out the new theme engine yet, but maybe I&amp;#39;ll get around to that.&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=5516" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Blogging/default.aspx">Blogging</category></item><item><title>Stoppa Vitabergsgruvan!</title><link>http://ljusberg.se/blogs/pop/archive/2007/04/01/stoppa-vitabergsgruvan.aspx</link><pubDate>Sat, 31 Mar 2007 22:01:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:3977</guid><dc:creator>anders</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;ISP:n &lt;a class="" href="http://www.bahnhof.se/index.php" target="_blank"&gt;Bahnhof&lt;/a&gt; började ju för några månader sedan bygga en ny &lt;a class="" href="http://www.bahnhof.se/pionen/" target="_blank"&gt;serverhall med rymdbastema&lt;/a&gt;&amp;nbsp;i en gammal bunker under Vitabergsparken. Nu har &lt;a class="" href="http://wpy.observer.se/wpyfs/00/00/00/00/00/09/8F/89/wkr0001.pdf" target="_blank"&gt;projektet nödstoppats&lt;/a&gt; eftersom man hittat uranfyndigheter i berget. Bahnhof, som naturligtvis ser en möjlighet att tjäna grova pengar som Sveriges första uranbrytare, har nu ansökt om prospekteringstillstånd och byter namn till Bahnhof Server &amp;amp; Gruv AB.&lt;/p&gt;
&lt;p&gt;Det finns så många fel med det här så det är inte sant! Enligt Jon Karlung, VD på Bahnhof, så kommer man flytta kulturbyggnaderna ovanpå gruvan till Skansen. Att de boende runt omkring kommer störas av damm från sprängningarna avfärdas med &amp;quot;Vi kommer att dela ut ansiktsmasker och blyförkläden till de kringboende till en mycket rimlig kostnad&amp;quot;. &lt;/p&gt;
&lt;p&gt;Proteststormen har bara börjat! Skriv på protestlistan för att &lt;a class="" title="Stoppa Vitabergsgruvan Nu" href="http://ljusberg.se/blogs/pop/pages/Protestlista-Stoppa-Vitabergsgruvan-Nu.aspx"&gt;Stoppa Vitabergsgruvan&lt;/a&gt; du också!&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=3977" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/pop/archive/tags/Humor/default.aspx">Humor</category></item><item><title>Web Services Software Factory, the solution to all our problems?</title><link>http://ljusberg.se/blogs/smorakning/archive/2007/03/07/web-services-software-factory-the-solution-to-all-our-problems.aspx</link><pubDate>Wed, 07 Mar 2007 16:11:00 GMT</pubDate><guid isPermaLink="false">d8c7d797-13b4-459d-b3ca-3ae05fd06865:2941</guid><dc:creator>anders</dc:creator><slash:comments>2</slash:comments><description>
&lt;p&gt;I just came back from a seminar on &lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Flibrary%2Faa480534.aspx&amp;amp;ei=UuPvRb71Oor80gSLzanxCA&amp;amp;usg=__K46pUzKa2AWwPTYZGp5v3QIdTh4=&amp;amp;sig2=-QQHSlWWhvaVhv6X8TjHmg" title="Web Service Software Factory" target="_blank"&gt;Web Service Software Factory&lt;/a&gt; (hereby referenced as WSSF), and I just cannot resit the urge to share my feelings on the subject.&lt;/p&gt;

&lt;p&gt;The presenter introduced WSSF as the solution to a lot of problems; Straggly Code Base since each dev/architect has his/her own way of building a service, Varying Quality Levels depending on who did what and Bad Productivity caused by lack of re-use of both code and knowledge. Let's see (from my point of view) what the current version of WSSF offers when it comes to reducing these problems. Now, this is going to look very critical and you might even think that I don't appreciate the efforts of the PAG team. I assure you that I do. I'm just saying that the Service Factory as it is today doesn't live up to the promises this particular presenter made.&lt;/p&gt;
&lt;h3&gt;Straggly Code Base*&lt;/h3&gt;
&lt;p&gt;I think this is a serious problem with very few (if any) good solutions, and the WSSF in its current state certainly isn't one of them. The underlying problem is, of course, that our development platforms constantly evolve (to the better). This means that every time we start building a new service there will be some new feature, technology, utility class library or toolkit that we really should take advantage of in order to build a better service quicker. The WSSF is simply one of these. Since its built by the PAG-team, it isn't even supported and will most likely be evolved without much compatibility. The recent release of the WCF version made this clearer than ever. I sort of expected the ASMX-&amp;gt;WCF migration to be easily integrated, but no such luck. The WCF Service Factory is clearly separated from the ASMX Service Factory. You decide which one to use and then you're stuck with it (unless you go through the gruelling 8 step process involving a lot of copy-paste and manual modifications).&lt;/p&gt;

&lt;p&gt;Getting to the point I wanted to make. WSSF might make it easier to build the service you're building today, but I doubt you will use it five years from now. In fact, I'd bet that five years from now someone will look at your service and say "Wow, the data access component in this thing is really difficult to follow. Was there some kind of tool used to generate it?"&lt;/p&gt;
&lt;h3&gt;Varying Quality Levels&lt;/h3&gt;
&lt;p&gt;Let's not kid ourselves here. A bad developer will always create bad code, no matter what tool he/she uses. In fact, if you don't understand why services built using WSSF are layered like they are or why it is good practice to do Contract First development, then you are bound to make mistakes. So what you'll end up with is a service that &lt;i&gt;looks like&lt;/i&gt; it follows good design practices, but in fact is just as messy as anything else.&lt;/p&gt;
&lt;h3&gt;Bad Productivity&lt;/h3&gt;
&lt;p&gt;The biggest problem with the current WSSF offering (in my opinion) is that all recipes are one-time wizards without knowledge of the current code. Whenever you want to make a change to the generated code, you'll either have to do it manually or you'll have to run the recipe from scratch again. This may be fine when dealing with the simpler tasks such as adding a new property to a data type. But when you're dealing with the Data Access classes it quickly gets complicated. I really really hope that the PAG team are working on more &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa718368.aspx" title="DSL Tools" target="_blank"&gt;Domain Specific Language&lt;/a&gt;-like plugins instead. In fact, I think that a good DSL that could help us with mapping data types from the Business Entities to the Service Contract would increase productivity much more than the entire WSSF.&lt;/p&gt;
&lt;h3&gt;Conclusion.. or something like that..&lt;/h3&gt;
&lt;p&gt;I strongly believe that in an enterprise that wishes to keep its IT systems reasonably current and its IT department happy, you'll have to deal with the fact that your code base won't be a haven of conformity. If you have some junior developers you don't just hand them a guidance package and say "Follow this and everything will be fine", you make sure to review their code and you make sure they have a good mentor. If you suffer from bad productivity there are probably many, many things you can do to optimize the way you work (and yes, a tool or two can help - at least to a point). An example of a real productivity booster is another (much more mature) offering from the PAG-team, the &lt;a href="http://www.codeplex.com/entlib" title="Enterprise Library" target="_blank"&gt;Enterprise Library&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;When it comes to WSSF I think the PAG team have made a very good effort but I'm sure that they too realize that this technology (Software Factories) is still at a very early stage. It is absolutely a step in the right direction and I'm really looking forward to getting my hands on the next release and the ones after that. Adding some visual DSL tools and getting rid of many of the wizards would make the WSSF extremely interesting.&lt;/p&gt;&lt;p&gt;Please let me know what &lt;i&gt;You&lt;/i&gt; think! Have you successfully used the current WSSF and built a better service faster because of it (and will you use it the same way next time)? I'd love to be wrong on this one!&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;* Straggly Code Base&lt;/i&gt;&lt;br&gt;
Is there a better word than Straggly (it's a direct translation of the Swedish word "Spretig")? What I mean is when each service is built differently from the last one; maybe it's layered differently, maybe the naming convention changes or maybe a new Visual Studio extension is used to generate the contract.&lt;/p&gt;&lt;img src="http://ljusberg.se/aggbug.aspx?PostID=2941" width="1" height="1"&gt;</description><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/.NET/default.aspx">.NET</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/SOA/default.aspx">SOA</category><category domain="http://ljusberg.se/blogs/smorakning/archive/tags/Web+Service+Software+Factory/default.aspx">Web Service Software Factory</category></item></channel></rss>