<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnet.org.za/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Hendrik Swanepoel</title><subtitle type="html" /><id>http://dotnet.org.za/hendrik/atom.aspx</id><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dotnet.org.za/hendrik/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20611.960">Community Server</generator><updated>2004-08-05T16:56:00Z</updated><entry><title>Asp.Net MVC logging filter</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx" /><id>http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx</id><published>2008-06-11T12:08:00Z</published><updated>2008-06-11T12:08:00Z</updated><content type="html">  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;On my current project we are making extensive use of ASP.Net MVC and LINQ, which is a nice change since I&amp;#39;ve been working on mainly WCF and WF based projects for the last few years.&lt;/span&gt;&lt;span class="lnum"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lnum"&gt;We immediately identified that it would be worthwhile to &lt;/span&gt;&lt;span class="lnum"&gt;create a filter which does logging for us, and this is what I came up with.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Mvc;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Axis.CRD.Logic;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; log4net;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Hendrik&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LoggingFilter : ActionFilterAttribute&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnActionExecuted(FilterExecutedContext filterContext)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (filterContext.Exception != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            var logMessage = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            logMessage.AppendFormat(&lt;span class="str"&gt;&amp;quot;Finished call to method {0} on controller {1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                                    filterContext.ActionMethod.Name, filterContext.Controller);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            var parameters = filterContext.ActionMethod.GetParameters();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            Append(logMessage, filterContext, parameters);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            logger.Debug(logMessage);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnActionExecuting(FilterExecutingContext filterContext)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            var logMessage = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            logMessage.AppendFormat(&lt;span class="str"&gt;&amp;quot;Starting call to method {0} on controller {1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                                    filterContext.ActionMethod.Name, filterContext.Controller);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            var parameters = filterContext.ActionMethod.GetParameters();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            Append(logMessage, filterContext, parameters);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            logger.Debug(logMessage);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Append(StringBuilder logMessage, FilterContext filterContext, ParameterInfo[] parameters)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (parameters.Length &amp;gt; 0)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                logMessage.AppendLine().Append(&lt;span class="str"&gt;&amp;quot;Parameters:&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var parameter &lt;span class="kwrd"&gt;in&lt;/span&gt; filterContext.ActionMethod.GetParameters())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                var passedValue = (filterContext.RouteData.Values.ContainsKey(parameter.Name)) ?&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                    filterContext.RouteData.Values[parameter.Name] : filterContext.HttpContext.Request[parameter.Name];&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                passedValue = passedValue ?? filterContext.HttpContext.Request[parameter.Name];&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                logMessage.AppendLine().AppendFormat(&lt;span class="str"&gt;&amp;quot;*{0} : {1}&amp;quot;&lt;/span&gt;, parameter.Name, passedValue);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx&amp;amp;;subject=Asp.Net+MVC+logging+filter" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx&amp;amp;;title=Asp.Net+MVC+logging+filter" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx&amp;amp;title=Asp.Net+MVC+logging+filter" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx&amp;amp;;title=Asp.Net+MVC+logging+filter" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx&amp;amp;;title=Asp.Net+MVC+logging+filter&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2008/06/11/asp-net-mvc-logging-filter.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=451045" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author></entry><entry><title>Barcelona Summary</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx" /><id>http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx</id><published>2007-11-12T12:42:00Z</published><updated>2007-11-12T12:42:00Z</updated><content type="html">&lt;p&gt;I wanted to blog a bit more, but I got too wrapped up in playing with technology while at the event (I also enjoyed the beer and food a bit too much in the evenings). I was really interested in the JSON message format, and I played around with getting an AJAX based tic-tac-toe implementation working with a WCF service using the new webHttpBinding. (&lt;a href="http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx"&gt;http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I had some real nice sessions, some of them actually relevant to the stuff that I&amp;#39;m busy with now! Here&amp;#39;s a list of the sessions that I found really interesting:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pat Helland - The Irresistible Forces Meet the Moveable Objects&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://blogs.msdn.com/pathelland/"&gt;&lt;strong&gt;http://blogs.msdn.com/pathelland/&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This session provided insight on the way we need to change the way we develop systems, due to the way CPUs are changing (more CPUs on the same board, instead of faster CPUs - due to heat), the cost associated with huge datacenters and their respective backup locations. My take away from this session is that it&amp;#39;s sometime all right for a system in a distributed architecture to make a mistake (like saying a book is available when it isn&amp;#39;t) and correcting it when it finds out, instead of trying to &amp;quot;code in the now&amp;quot; - which implicitly means distributed transactions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Udi Dahan- Designing High Performance, Persistent Domain Models&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;a href="http://udidahan.weblogs.us/"&gt;&lt;strong&gt;http://udidahan.weblogs.us/&lt;/strong&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;I enjoyed Udi&amp;#39;s session, because he approaches complex problems by doing simple OO magic. It was nice seeing some real code, using dependency injection, etc, instead of code with the sole purpose of demonstrating new tech.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stefan Schackow - Building Highly Scalable ASP.NET Web Sites by Exploiting Asynchronous Programming Models&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;This was real relevant to what we are busy with at the moment. I&amp;#39;ve read about the async=true directive before, but this was a real practical and thorough presentation on using asynchronous patterns in asp.net. Stefan took care to point out some pitfalls and weirdness to expect when implementing async pages. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Justin Smith - Windows Communication Foundation Performance (interactive session)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This was the most relevant session that I attended. Justin went through all the areas that impacts performance in WCF. For each area, he showed us some findings from performance testing that they performed. He spoke about the effect of bindings, message format and serializers on performance. &lt;/p&gt;
&lt;p&gt;He also highlighted the fact that ChannelFactory proxies have less overhead than generated proxies. He wrapped up with some common pitfalls to watch out for, in particular not closing your channels on the client as well as regeneration of the proxy for each call with the channelfactory, instead of reusing it. Unfortunately we are in a situation where we inject custom headers into our messages using behaviors, so it overcomplicates reusing the same proxy for different requests. &lt;/p&gt;
&lt;p&gt;Because it was an interactive session, I also got to ask him some questions regarding using the async pattern on the client when using ChannelFactory. It turns out all you have to do is to have the correct methods on your contract, you don&amp;#39;t need to implement them on your service, but it will allow you to use the proxy asynchronously. &lt;/p&gt;
&lt;p&gt;Another question I had was whether it&amp;#39;s actually useful to implement the async pattern on a service which needs to make a call to another service. Meaning, if you have service A, which calls service B, is it still useful to make an async call from service A to service B. The answer is that it&amp;#39;s only useful if service A does not return a value. If it returns a value, there are no gains in making the call asynchronous, because the service needs to return a value in any case, so there is no gain in freeing the thread (except if you have to do multiple operations in parallel).&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;I asked him&amp;nbsp;about the performance win that you can gain from using the JSON message format between services, which is substantial. Although, I&amp;#39;m sure a lot of ws-* fanatics will not be too happy with that solution.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I hope I&amp;#39;m in a position to attend teched again next year, because I feel that I left the conference as a better developer.&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx&amp;amp;;subject=Barcelona+Summary" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx&amp;amp;;title=Barcelona+Summary" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx&amp;amp;title=Barcelona+Summary" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx&amp;amp;;title=Barcelona+Summary" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx&amp;amp;;title=Barcelona+Summary&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/12/barcelona-summary.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=242615" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author></entry><entry><title>Teched Barcelona</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx" /><id>http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx</id><published>2007-11-06T13:49:00Z</published><updated>2007-11-06T13:49:00Z</updated><content type="html">&lt;p&gt;Teched BarcelonaI arrived in Barcelona on Sunday for Teched Europe. This is the first time that I&amp;#39;ve set foot on mainland Europe! &lt;br /&gt;The city is quite nice, and the weather is much better than dreary London. &lt;/p&gt;
&lt;p&gt;It&amp;#39;s my first time attending teched and I must say that I&amp;#39;m really impressed. &lt;br /&gt;The technical content is engaging, the infrastructure is seamless and there&amp;#39;s always food! &lt;/p&gt;
&lt;p&gt;I&amp;#39;m trying to mix and match the sessions that I attend so that I can get a good variation of new tech, &lt;br /&gt;architectural sessions and more practial knowledge that I can use right away.&lt;/p&gt;
&lt;p&gt;So far the sessions I enjoyed the most were Pat Helland&amp;#39;s talk on transactions and Luca Bolognese&amp;#39;s talk on LINQ to SQL. &lt;/p&gt;
&lt;p&gt;Pat was the guy behind MSDTC and now proclaims himself an Apostate of the technology. In fact, in the session he proclaimed that: &amp;quot;Distributed transactions suck&amp;quot;. &lt;br /&gt;He took us through managing of transactions in a distributed computing environment using asynchronous messaging patterns, for example idempotence. &lt;br /&gt;It reminded me a lot of the concepts in the book called Software fortresses by Roger Sessions.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Luca is a real funny guy, but what impressed me the most about his talk was the simplicity of the demo. I&amp;#39;ve done some work with the framework before,&lt;br /&gt;but he got my colleagues real fired up about it, as I&amp;#39;m sure he did with a lot of people. &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s hope the rest of the week is as informative it&amp;#39;s been thus far...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx&amp;amp;;subject=Teched+Barcelona" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx&amp;amp;;title=Teched+Barcelona" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx&amp;amp;title=Teched+Barcelona" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx&amp;amp;;title=Teched+Barcelona" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx&amp;amp;;title=Teched+Barcelona&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/11/06/teched-barcelona.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=242470" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author></entry><entry><title>an Anonymous delegate based nmock action</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx" /><id>http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx</id><published>2007-09-27T15:28:00Z</published><updated>2007-09-27T15:28:00Z</updated><content type="html">&lt;p&gt;I always find it tiring writing IAction implementations for nmock2 tests, so I wrote the following thingy, which basically allows you to specify anonymous delegates for an action. &lt;/p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;delegate&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;ActionPerformer&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Invocation&lt;/font&gt;&lt;font size="2"&gt; invocation);&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DelegateAction&lt;/font&gt;&lt;font size="2"&gt; : &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;IAction&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp; private&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;readonly&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;ActionPerformer&lt;/font&gt;&lt;font size="2"&gt; _actionPerformer;&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp; private&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;readonly&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; _actionDescription;&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp; public&lt;/font&gt;&lt;font size="2"&gt; DelegateAction(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;ActionPerformer&lt;/font&gt;&lt;font size="2"&gt; actionPerformer, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; actionDescription)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _actionPerformer = actionPerformer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _actionDescription = actionDescription;&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp; public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; Invoke(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Invocation&lt;/font&gt;&lt;font size="2"&gt; invocation)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _actionPerformer(invocation);&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&amp;nbsp; public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;void&lt;/font&gt;&lt;font size="2"&gt; DescribeTo(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;TextWriter&lt;/font&gt;&lt;font size="2"&gt; writer)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.Write(_actionDescription);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;You use it as such:&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Expect&lt;/font&gt;&lt;font size="2"&gt;.Once.On(_scheduler).Method(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;GetNext&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;).WithNoArguments().Will(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DelegateAction&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;delegate&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Invocation&lt;/font&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp; invocation)&lt;br /&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;//whatever you want to do - even asserts&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;invocation.Result = whateveryou want to return, even variables before this statement;&lt;br /&gt;}, &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Whatvever you are performing with the action&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;));&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx&amp;amp;;subject=an+Anonymous+delegate+based+nmock+action" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx&amp;amp;;title=an+Anonymous+delegate+based+nmock+action" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx&amp;amp;title=an+Anonymous+delegate+based+nmock+action" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx&amp;amp;;title=an+Anonymous+delegate+based+nmock+action" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx&amp;amp;;title=an+Anonymous+delegate+based+nmock+action&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/27/an-anonymous-delegate-based-nmock-action.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=209367" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author></entry><entry><title>Blogging again</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx" /><id>http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx</id><published>2007-09-07T11:32:00Z</published><updated>2007-09-07T11:32:00Z</updated><content type="html">&lt;p&gt;Wow, I&amp;#39;m amazed that my blog hasn&amp;#39;t been removed from the site. &lt;/p&gt;
&lt;p&gt;I&amp;#39;d like to get started again, because it seems that I might be going to some interesting conferences in the near future, including tech-ed&amp;nbsp;europe 2007&amp;nbsp;in Barcelona. &lt;/p&gt;
&lt;p&gt;At the moment I&amp;#39;m working for a software consultancy&amp;nbsp;company in London using netfx3 technologies like WCF and WF using agile methodologies. The project is due for a next phase and I&amp;#39;d like to introduce a federated security implementation as well as rethinking the stuff we exposed as services. &lt;/p&gt;
&lt;p&gt;I&amp;#39;ll try and post some WCF related stuff as I stumble across it. &lt;/p&gt;
&lt;p&gt;&amp;lt;shamelessRecruiting&amp;gt;The company I&amp;#39;m working for is always looking for talented .Net devs, and they are willing to sponsor ZA candidates for a work permit as well as assist with relocation. So if you are interested in coming to the U.K, send your CV to &lt;a href="mailto:hendrik@novarank.com"&gt;hendrik@novarank.com&lt;/a&gt;&amp;nbsp;&amp;lt;/shamelessRecruiting&amp;gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx&amp;amp;;subject=Blogging+again" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx&amp;amp;;title=Blogging+again" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx&amp;amp;title=Blogging+again" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx&amp;amp;;title=Blogging+again" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx&amp;amp;;title=Blogging+again&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2007/09/07/blogging-again.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=205642" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author></entry><entry><title>Execute a child activity and wait for the results</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx" /><id>http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx</id><published>2006-07-04T18:28:06Z</published><updated>2006-07-04T18:28:06Z</updated><content type="html">&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;I came into a situation where I had to selectively 
execute a child activity. I wanted the activity to execute it's first child, 
wait for the results and then based on those results execute the next child.&lt;/P&gt;
&lt;P&gt;The reason for this was that I wanted to write an Ifelse activity which takes 
activities as conditions (Instead of making my business user write code for code 
conditions) and based on the conditions results execute the rest of the branch. 
&lt;/P&gt;
&lt;P&gt;I'll upload the complete IfElseActivity ASAP. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 1:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In order to execute a child activity, the parent activity has to implement 
the &lt;FONT size=2&gt;IActivityEventListener&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT size=2&gt;ActivityExecutionStatusChangedEventArgs&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt; 
&lt;/FONT&gt;&lt;FONT size=2&gt;interface. This enables it to subscribe to execution events 
executed in contexts spawned by the parent. This post gives some insight on 
contexts: &lt;A href="http://blogs.msdn.com/advancedworkflow/archive/2006/03/21/557121.aspx"&gt;http://blogs.msdn.com/advancedworkflow/archive/2006/03/21/557121.aspx&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Step 2:&lt;/STRONG&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;protected&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;override&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;ActivityExecutionStatus&lt;/FONT&gt;&lt;FONT size=2&gt; Execute(&lt;/FONT&gt;&lt;FONT size=2&gt;ActivityExecutionContext&lt;/FONT&gt;&lt;FONT size=2&gt; 
executionContext)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;//Spawn 
the context (Execution sphere for your child activity)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;ActivityExecutionContext&lt;/FONT&gt;&lt;FONT size=2&gt; context = 
executionContext.ExecutionContextManager.CreateExecutionContext(EnabledActivities[theChildIndex]);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;//Register to get an event on this activity if the child 
activity's status is set to closed&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;context.Activity.RegisterForStatusChange(ClosedEvent, &lt;/FONT&gt;&lt;FONT size=2&gt;this&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;//Execute the root activity of the context&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;context.ExecuteActivity(context.Activity);&lt;BR&gt;&lt;FONT size=2&gt;return&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;ActivityExecutionStatus&lt;/FONT&gt;&lt;FONT size=2&gt;.Executing; &lt;FONT&gt;//Important to return Executing because the child will only 
execute after this method has finished&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=2&gt;You can only spawn an ActivityExecutionContext for direct 
children on the container activity. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;Step 3:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;In the OnEvent method which was implemented from the 
IActivityEventListener interface, we do the following:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;void&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;IActivityEventListener&amp;lt;ActivityExecutionStatusChangedEventArgs&amp;gt;.OnEvent(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;object&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;sender,&amp;nbsp;ActivityExecutionStatusChangedEventArgs&amp;nbsp;e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;null&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;==&amp;nbsp;sender)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;throw&amp;nbsp;new&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;ArgumentNullException("sender");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;null&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;==&amp;nbsp;e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;throw&amp;nbsp;new&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;ArgumentException("e");&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;//This&amp;nbsp;cis&amp;nbsp;the&amp;nbsp;spawned&amp;nbsp;context&amp;nbsp;with&amp;nbsp;the&amp;nbsp;child&amp;nbsp;activity&amp;nbsp;as&amp;nbsp;the&amp;nbsp;root&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;ActivityExecutionContext&amp;nbsp;context&amp;nbsp;=&amp;nbsp;sender&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;as&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;ActivityExecutionContext;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;null&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;==&amp;nbsp;context)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;throw&amp;nbsp;new&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;ArgumentException("The&amp;nbsp;sender&amp;nbsp;must&amp;nbsp;be&amp;nbsp;an&amp;nbsp;ActivityExecutionContext",&amp;nbsp;"sender");&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;//This&amp;nbsp;event&amp;nbsp;handler&amp;nbsp;will&amp;nbsp;be&amp;nbsp;triggered&amp;nbsp;for&amp;nbsp;every&amp;nbsp;subscribed&amp;nbsp;status&amp;nbsp;change&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(e.ExecutionStatus&amp;nbsp;==&amp;nbsp;ActivityExecutionStatus.Closed)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;//get&amp;nbsp;a&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;the&amp;nbsp;root&amp;nbsp;activity&amp;nbsp;of&amp;nbsp;the&amp;nbsp;context&amp;nbsp;(Your&amp;nbsp;child&amp;nbsp;activity)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;MyActivity&amp;nbsp;myActivity&amp;nbsp;=&amp;nbsp;e.Activity&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;as&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;myActivity;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;//Do&amp;nbsp;whatever&amp;nbsp;you&amp;nbsp;want&amp;nbsp;to&amp;nbsp;do&amp;nbsp;with&amp;nbsp;the&amp;nbsp;activity&amp;nbsp;-&amp;nbsp;something&amp;nbsp;more&amp;nbsp;meaningful&amp;nbsp;as&amp;nbsp;this&amp;nbsp;:)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(myActivity.Bla&amp;nbsp;==&amp;nbsp;"Blie")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Bla&amp;nbsp;was&amp;nbsp;Blie");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;//Ensure&amp;nbsp;that&amp;nbsp;this&amp;nbsp;activity&amp;nbsp;finishes&amp;nbsp;executing&amp;nbsp;and&amp;nbsp;that&amp;nbsp;the&amp;nbsp;child&amp;nbsp;activity&amp;nbsp;is&amp;nbsp;closed&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;e.Activity.UnregisterForStatusChange(ClosedEvent,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ActivityExecutionContextManager&amp;nbsp;manager&amp;nbsp;=&amp;nbsp;context.ExecutionContextManager;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;manager.CompleteExecutionContext(manager.GetExecutionContext(e.Activity));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.CloseActivity();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Reasons to do this would be to execute a child activity more 
than once, or as in my scenarrio to provide an ifelse branch with activities as 
the condition. &lt;/P&gt;

&lt;/FONT&gt;&lt;/FONT&gt;
&lt;FONT face=Verdana size=2&gt;&lt;P&gt;&lt;A href="http://imhoproject.org/"&gt;&lt;FONT face=Verdana size=1&gt;powered by IMHO 1.3&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx&amp;amp;;subject=Execute+a+child+activity+and+wait+for+the+results" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx&amp;amp;;title=Execute+a+child+activity+and+wait+for+the+results" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx&amp;amp;title=Execute+a+child+activity+and+wait+for+the+results" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx&amp;amp;;title=Execute+a+child+activity+and+wait+for+the+results" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx&amp;amp;;title=Execute+a+child+activity+and+wait+for+the+results&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53951.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=53951" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="Workflow Foundation" scheme="http://dotnet.org.za/hendrik/archive/tags/Workflow+Foundation/default.aspx" /></entry><entry><title>Custom Windows Workflow Foundation IfElseActivity</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx" /><id>http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx</id><published>2006-07-04T16:52:00Z</published><updated>2006-07-04T16:52:00Z</updated><content type="html">&lt;p&gt;&lt;font face=Arial size=2&gt;My requirement for an IfElseActivity was for non coders to use it. Normally an IfElse activity will work based on a Code condition which is specified with code on the workflow. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;We allow for business users to manage subsets of systems using an embedded workflow editor we provide for their use. Obviously we can't tell our business user to "just learn some simple csharp".. I wanted to have an IfElseActivity where you can use activities with "return values" as checks on the IfElse branch, meaning the user will drag on an IfElse activity and on the one branch drag on other special&amp;nbsp;activities which will determine whether the branch should be executed. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;I ended up writing an IfElseActivity that looks like this:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;&lt;img src="http://novarank.com/customifelse.jpg" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;Each branch contains two activities, a condition preview&amp;nbsp;activity and an execution block activity. To implement a new check, implement from the IConditionActivity in the project which exposes an Evaluation property and a Negated property. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;The IfElseActivity will execute your check and then decide whether it will continue to the next check based on the Evaluation property you implemented. All the checks associated with the branch's condition preview needs to pass before the branch will execute. You can also negate the check, meaning the&amp;nbsp;check needs to&amp;nbsp;return false in order for it to pass. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;You can then proceed in dragging the activities you want to execute in the branch onto the Execution activity. I did this for branch 1 with a code activity. If the first branch does not pass, it will proceed to the next branch. You can also have more than two branches. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;Download the solution and have a look: &lt;/font&gt;&lt;a href="http://novarank.com/customifelse.zip"&gt;&lt;font face=Arial size=2&gt;http://novarank.com/customifelse.zip&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=Arial size=2&gt;[Update:] You need to install netfx3 and the latest version of vs.net extensions for windows workflow.&lt;/font&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx&amp;amp;;subject=Custom+Windows+Workflow+Foundation+IfElseActivity" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx&amp;amp;;title=Custom+Windows+Workflow+Foundation+IfElseActivity" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx&amp;amp;title=Custom+Windows+Workflow+Foundation+IfElseActivity" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx&amp;amp;;title=Custom+Windows+Workflow+Foundation+IfElseActivity" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx&amp;amp;;title=Custom+Windows+Workflow+Foundation+IfElseActivity&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2006/07/04/53953.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=53953" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author></entry><entry><title>Exposing JARpackaged classes to jsp files in Oracle 10g</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx</id><published>2004-11-01T09:03:00Z</published><updated>2004-11-01T09:03:00Z</updated><content type="html">&lt;P&gt;In my previous post I conveyed how to enable a folder in your Oracle application server to serve JSP's. In this post, I assume that you've already enabled your directory and have tested a jsp file successfully.&lt;/P&gt;
&lt;P&gt;Normally you'd want to reference external functionality in your JSP files, like external classes packaged in JAR files.&lt;/P&gt;
&lt;P&gt;Luckily, this is very easy. In your Jserv conf&amp;nbsp;directory (Jserv is to allow apache to load Java files like jsp and java servlets), which will normally be in the &lt;STRONG&gt;&lt;EM&gt;&amp;lt;Oracle_Home&amp;gt;\Apache\Jserv\conf,&lt;/EM&gt;&lt;/STRONG&gt; you'll find a &lt;STRONG&gt;&lt;EM&gt;jserv.properties&lt;/EM&gt;&lt;/STRONG&gt; file. &lt;/P&gt;
&lt;P&gt;Open this properties file and include a wrapper.classpath statement in order to allow the apache service to find and load the .jar file and it's contained classes:&lt;BR&gt;&lt;STRONG&gt;&lt;EM&gt;wrapper.classpath=&amp;lt;ThePathToYourJARFile&amp;gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You can then use the packaged classes in your JSP pages/Java servlets after you've referenced the correct packages.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx&amp;amp;;subject=Exposing+JARpackaged+classes+to+jsp+files+in+Oracle+10g" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx&amp;amp;;title=Exposing+JARpackaged+classes+to+jsp+files+in+Oracle+10g" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx&amp;amp;title=Exposing+JARpackaged+classes+to+jsp+files+in+Oracle+10g" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx&amp;amp;;title=Exposing+JARpackaged+classes+to+jsp+files+in+Oracle+10g" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx&amp;amp;;title=Exposing+JARpackaged+classes+to+jsp+files+in+Oracle+10g&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/11/01/5617.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=5617" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author></entry><entry><title>web development puzzles</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx</id><published>2004-09-29T13:17:00Z</published><updated>2004-09-29T13:17:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;I stumbled onto 2 weird web development thingy majigs today. Nothing awe inspiring, but here goes....&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Arial size=2&gt;first:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;When populating options into a dropdown on the client-side dynamically, I got an invalid argument error. I couldn't figure it out. I have done this before and I double checked the code&amp;nbsp;in MSDN. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;It turns out that I got the sequence wrong. You shouldn't create the option, set it's properties and then add it to the dropdown. You should create the option, add it to the dropdown's options collection, then set the properties of the option (value and innerText). weird....&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Arial size=2&gt;secondly:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;When setting the .Text property of an asp.net&amp;nbsp;password textbox (a textbox with it's TextMode property set to Password) on the server side, on the client-side&amp;nbsp;it remains empty. I've seen several weird forms in the past when it comes to password editing in your profile, so I decided to do a quick spike test. It turns out that this is by design (which makes sense), because it wouldn't be secure to send the value back to the browser, even if it's hashed, seeing that any person can then view the source of the page.. So you have to design the form around this fact.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx&amp;amp;;subject=web+development+puzzles" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx&amp;amp;;title=web+development+puzzles" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx&amp;amp;title=web+development+puzzles" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx&amp;amp;;title=web+development+puzzles" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx&amp;amp;;title=web+development+puzzles&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/29/4320.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=4320" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="General" scheme="http://dotnet.org.za/hendrik/archive/tags/General/default.aspx" /></entry><entry><title>templated custom controls in asp.net</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx</id><published>2004-09-27T05:54:00Z</published><updated>2004-09-27T05:54:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;Recently, I had to write a templated databound custom control in asp.net. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The reason for this is that we wanted a control which we could reuse throughout the site, and it had toe be very flexible. It needed to have paging capabilities (with completely customized look + feel), searching, sorting and alphabetical filtering. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;All of these should also be able to be hidden, based on attributes on the control. Since non of the built-in controls provide this functionality, we had to go the custom control route.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;I found a lot of helpful links on the web, but non of them exactly what I wanted. I decided to write a wrapper object to a repeater.&amp;nbsp;To solve the problem in regards of retaining the template functionality of the repeater, I decided to use &amp;#8220;proxy properties&amp;#8221; on my custom class, effectively passing my custom class' template to my contained repeater.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;My custom class had a private variable of type ITemplate and a corresponding property:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Arial size=2&gt;private ITemplate itemTemplate = null;&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The property has an attribute associated which specifies that the property is a TemplateContainer property of type RepeaterItem. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Arial size=2&gt;[&lt;BR&gt;PersistenceMode(PersistenceMode.InnerProperty),&lt;BR&gt;TemplateContainer(typeof(RepeaterItem))&lt;BR&gt;]&lt;BR&gt;public ITemplate ItemTemplate &lt;BR&gt;{&lt;BR&gt;&amp;nbsp;get &lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;return itemTemplate;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;set &lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;itemTemplate = value;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Then, when the repeater is initialized, we set the corresponding template property to our properties value:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;EM&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(ItemTemplate != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;innerRepeater.ItemTemplate = ItemTemplate;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Here's some links on authoring custom templated data bound controls:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcustomizingcontrolswithtemplates.asp"&gt;&lt;FONT face=Arial size=2&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcustomizingcontrolswithtemplates.asp&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://samples.gotdotnet.com/quickstart/aspplus/doc/webdatalist.aspx"&gt;&lt;FONT face=Arial size=2&gt;http://samples.gotdotnet.com/quickstart/aspplus/doc/webdatalist.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/asp.net/using/building/webcontrols/default.aspx?pull=/library/en-us/dnaspp/html/databoundtemplatedcontrols.asp"&gt;&lt;FONT face=Arial size=2&gt;http://msdn.microsoft.com/asp.net/using/building/webcontrols/default.aspx?pull=/library/en-us/dnaspp/html/databoundtemplatedcontrols.asp&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx&amp;amp;;subject=templated+custom+controls+in+asp.net" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx&amp;amp;;title=templated+custom+controls+in+asp.net" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx&amp;amp;title=templated+custom+controls+in+asp.net" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx&amp;amp;;title=templated+custom+controls+in+asp.net" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx&amp;amp;;title=templated+custom+controls+in+asp.net&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/27/4263.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=4263" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="General" scheme="http://dotnet.org.za/hendrik/archive/tags/General/default.aspx" /></entry><entry><title>Another access denied error</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx</id><published>2004-09-15T09:00:00Z</published><updated>2004-09-15T09:00:00Z</updated><content type="html">&lt;P&gt;&lt;FONT size=2&gt;I received an interesting error when trying to debug a web project of mine. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;The error read:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Configuration error - access to myassembly.dll denied.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;The error then shows you a line in your web.config file.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;I started getting this problem on a regular basis. Even ending the asp.net worker process and restarting vs.net didn't resolve it. I had to restart my PC every time.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;After some intense searching on the web (believe it or not, access denied is quite a common problem), I stumbled onto this link:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;329065"&gt;&lt;FONT size=2&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;329065&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Basically what happens is that the indexing server puts your dll file into it's cache, which puts a lock on your file. You have to stop your indexing service to stop it from happening. If it happens to be a production server, you'll have to exclude the temporary asp.net files directory from your index.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;interesting...&lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx&amp;amp;;subject=Another+access+denied+error" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx&amp;amp;;title=Another+access+denied+error" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx&amp;amp;title=Another+access+denied+error" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx&amp;amp;;title=Another+access+denied+error" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx&amp;amp;;title=Another+access+denied+error&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/09/15/4017.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=4017" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="General" scheme="http://dotnet.org.za/hendrik/archive/tags/General/default.aspx" /></entry><entry><title>over specifying functionality</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx</id><published>2004-08-25T07:25:00Z</published><updated>2004-08-25T07:25:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;Something I've seen many a times when developing or managing a project is that a big danger is over specifying functionality.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Developing a spec is something that takes a lot of time, and it removes a lot of the flexibility&amp;nbsp; needed for delivering a successful project. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Don't get me wrong, a spec is definitely needed, but it must be flexible. It's almost impossible to cater for everything in a spec, so if you rely only on the spec, problems will occur, and your whole project plan will be no good. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;You need a spec for communication with the client, but I've never seen a project where a spec was fully sufficient in alleviating scope creep. So instead of trying to prevent any scope creep from occurring and alienating your client, you should try to use alternative methods to accommodate the scope creep.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;A nice way of saving time on mammoth specifications which is open for interpretation problems, you should spend some of the time to set up a list of testing procedures which will prove that the functionality is hitting the target. And you need to be flexible in this. It's necessary to provide an over all specification and testing procedures before hand. It's also very important to have a solid design and architecture plan. But you need to be flexible and cater for some extra time during the project for specifications that needs to be done just before developing an item. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;You always know about more factors just before developing a piece of functionality than at the conceptualization phase, so the chance is that the specification that you provide for the functionality will be more spot on. You will also then be able to provide a better test-plan for that piece of code.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;There are a lot of ways for developing and managing&amp;nbsp;project. So I'm not saying that this post applies to everyone.&amp;nbsp;I feel you shouldn't try to stick to one methodology, but try and take some from the several methodologies and use what works best for you and the project you're dealing with. &lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx&amp;amp;;subject=over+specifying+functionality" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx&amp;amp;;title=over+specifying+functionality" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx&amp;amp;title=over+specifying+functionality" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx&amp;amp;;title=over+specifying+functionality" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx&amp;amp;;title=over+specifying+functionality&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3585.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=3585" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="Development methodologies" scheme="http://dotnet.org.za/hendrik/archive/tags/Development+methodologies/default.aspx" /></entry><entry><title>enabling asp pages in windows 2003 </title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx</id><published>2004-08-25T05:33:00Z</published><updated>2004-08-25T05:33:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;We have a legacy asp application we use to track our bugs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;When I tried to install it on our Windows 2003 server, I couldn't get the asp pages to run. I knew this was due to the fact that MS disables almost everything by default on Windows 2003. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;To enable it you have to open IIS and click on Web service extensions. Here you can right-click on Active Server Pages and click on allow. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx&amp;amp;;subject=enabling+asp+pages+in+windows+2003+" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx&amp;amp;;title=enabling+asp+pages+in+windows+2003+" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx&amp;amp;title=enabling+asp+pages+in+windows+2003+" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx&amp;amp;;title=enabling+asp+pages+in+windows+2003+" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx&amp;amp;;title=enabling+asp+pages+in+windows+2003+&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/25/3579.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=3579" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="General" scheme="http://dotnet.org.za/hendrik/archive/tags/General/default.aspx" /></entry><entry><title>New project</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx</id><published>2004-08-18T13:21:00Z</published><updated>2004-08-18T13:21:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;I haven't posted anything in a while, the reason for this is due to the fact that I'm busy with a new project.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Our team has set up in new offices and everyone is up and running. Last week was still a bit chaotic, since I had to develop a POC for an oracle app server integration, while still giving guidance to the team members.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;We're only starting to be productive now, and I'm really starting to enjoy the project. &lt;BR&gt;We've done some fun stuff, including providers for our db layer and some really interesting OOP designs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;I'll post some info regarding the more technical aspects of the project as I get some time.&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx&amp;amp;;subject=New+project" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx&amp;amp;;title=New+project" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx&amp;amp;title=New+project" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx&amp;amp;;title=New+project" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx&amp;amp;;title=New+project&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/18/3433.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=3433" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="General" scheme="http://dotnet.org.za/hendrik/archive/tags/General/default.aspx" /></entry><entry><title>New offices</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx" /><id>http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx</id><published>2004-08-05T15:56:00Z</published><updated>2004-08-05T15:56:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;Moving into new offices are never easy, but I must admit that I was totally unprepared for this experience.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;We ordered 3 new pc's, one of them our development server. We specified that we wanted Seagate hard drives and not Maxtor hard drives, but apparently hardware people always knows what's best. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;So after setting up our pc's, we found out that the wrong hard drives were installed. After this, we had to call up the hardware guys and let them install Seagate hard drives (we did this to keep our network admin sane - he hates Maxtor), this meant we had to install everything from scratch, never fun.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;We decided to make our new network totally wireless - who needs the hassle of wires? It's now almost 8 hours later, and I still haven't managed to get a pc onto the wireless network. All the clients can&amp;nbsp;detect my wireless network, but as soon as I try to join them&amp;nbsp; to the network, Windows XP and Windows Server 2003 freeze. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;So now I'm busy with a hopeless search for better drivers.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;On top of all that my laptop is acting up and blue-screening me all the time and my Oracle AS installation that took me a while to figure out isn't working anymore.&amp;nbsp;It decided that the password that I wrote down and used several times isn't valid anymore.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Now that I've got that out of my system, I'm going back&amp;nbsp;in again.... &lt;/FONT&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx&amp;amp;;subject=New+offices" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx&amp;amp;;title=New+offices" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx&amp;amp;title=New+offices" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx&amp;amp;;title=New+offices" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx&amp;amp;;title=New+offices&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/hendrik/archive/2004/08/05/3185.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=3185" width="1" height="1"&gt;</content><author><name>hendrik</name><uri>http://dotnet.org.za/members/hendrik.aspx</uri></author><category term="General" scheme="http://dotnet.org.za/hendrik/archive/tags/General/default.aspx" /></entry></feed>