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

<channel>
	<title>The Dumping Ground</title>
	<atom:link href="http://colinnewell.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://colinnewell.wordpress.com</link>
	<description>Nothing's too trivial</description>
	<lastBuildDate>Tue, 11 Aug 2009 17:39:00 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='colinnewell.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/49f1cedc33c0733191f258795da4984b?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>The Dumping Ground</title>
		<link>http://colinnewell.wordpress.com</link>
	</image>
			<item>
		<title>Stripping lines from a file, a quick perl one liner</title>
		<link>http://colinnewell.wordpress.com/2009/08/11/stripping-lines-from-a-file-a-quick-perl-one-liner/</link>
		<comments>http://colinnewell.wordpress.com/2009/08/11/stripping-lines-from-a-file-a-quick-perl-one-liner/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 17:39:00 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[perl5]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/2009/08/11/stripping-lines-from-a-file-a-quick-perl-one-liner/</guid>
		<description><![CDATA[I’m getting bored of figuring this one out from first principles.
 perl –n –e &#34;if(!/^(SOMESTART&#124;SOMEOTHERSTART)/) { print; }&#34; filename.csv &#62; smaller.csv
This is using the loop –n does, similar to the trick I’ve used with –p, it’s just that the –n doesn’t print automatically.&#160; Instead I call print manually if a pattern is matched, or in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=171&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I’m getting bored of figuring this one out from first principles.</p>
<p> <code>perl –n –e &quot;if(!/^(SOMESTART|SOMEOTHERSTART)/) { print; }&quot; filename.csv &gt; smaller.csv</code>
<p>This is using the loop –n does, similar to the <a href="http://colinnewell.wordpress.com/2007/04/20/converting-files-from-dos-format-to-unix/">trick</a> I’ve used with –p, it’s just that the –n doesn’t print automatically.&#160; Instead I call print manually if a pattern is matched, or in this case, doesn’t match.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=171&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/08/11/stripping-lines-from-a-file-a-quick-perl-one-liner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>Stack overflow rocks</title>
		<link>http://colinnewell.wordpress.com/2009/06/16/stack-overflow-rocks/</link>
		<comments>http://colinnewell.wordpress.com/2009/06/16/stack-overflow-rocks/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 18:11:00 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[visual foxpro]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/2009/06/16/stack-overflow-rocks/</guid>
		<description><![CDATA[I’ve still yet to gain any reputation on Stack overflow but it’s already proving to be useful.&#160; It’s already answered some of my questions on MVC development and now it’s just saved me some pain and frustration while wondering why my code to use a FoxPro database isn’t working on my laptop.
As a side note [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=170&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I’ve still yet to gain any reputation on <a href="http://stackoverflow.com">Stack overflow</a> but it’s already proving to be useful.&#160; It’s already answered some of my questions on MVC development and now it’s just saved me some pain and frustration while wondering why my code to use a FoxPro database isn’t working on my laptop.</p>
<p>As a side note on someone’s question <a href="http://stackoverflow.com/users/30552/brian-behm">Brian Behm</a> has made a note that you need to be in 32 bit mode to use the Fox Pro Ole DB driver.&#160; That explains why I was getting the ‘<code>The 'vfpoledb' provider is not registered on the local machine.</code>’ exception despite having installed the driver.&#160; All I need to do is add an x86 platform to my project and when I build with msbuild specify the platform using <code>/p:Platform=x86</code>.&#160; I go through this pain so the users don’t have to!</p>
<p>The only down side is that it’s not exactly searchable.&#160; The only reason I found it was because I’d reached desperation search mode.&#160; I guess I should just ask the question properly on Stack overflow and then he can answer it again there and we’ll both gain some reputation points and it will be searchable for others.</p>
<p>I suppose it would be neat if you could break existing threads up on Stack overflow so that you can mark a comment as being the answer to a different question.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=170&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/06/16/stack-overflow-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>VO &#8211;&gt; Vulcan regex</title>
		<link>http://colinnewell.wordpress.com/2009/05/27/vo-vulcan-regex/</link>
		<comments>http://colinnewell.wordpress.com/2009/05/27/vo-vulcan-regex/#comments</comments>
		<pubDate>Wed, 27 May 2009 23:07:56 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[vo]]></category>
		<category><![CDATA[vulcan]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/2009/05/27/vo-vulcan-regex/</guid>
		<description><![CDATA[We’re about to do a bunch of ‘Transporting’ from VO to Vulcan in the next few days so I’m probably going to figure out a bunch of useful tricks for helping to automate the process.
So far things are looking good, our unit tests our now transporting cleanly and there’s no incompatibilities exposed by them.
One thing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=169&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>We’re about to do a bunch of ‘Transporting’ from VO to Vulcan in the next few days so I’m probably going to figure out a bunch of useful tricks for helping to automate the process.</p>
<p>So far things are looking good, our unit tests our now transporting cleanly and there’s no incompatibilities exposed by them.</p>
<p>One thing I did need to do was remove all the PSZ &lt;-&gt; STRING conversions.&#160; The easiest way to do that was to use Visual Studio’s ‘Replace in files’ option and some regex’s.</p>
<pre class="code">String2Psz({.<span style="color:blue;">*</span>})
AsPsz({.<span style="color:blue;">*</span>})
<span style="color:blue;">Psz</span>({.<span style="color:blue;">*</span>})
AsString({.<span style="color:blue;">*</span>}) </pre>
<p>They are the things you want to find, replace them with \1</p>
<p>Note that Visual Studio doesn’t appear to support .*? so those matches may be too eager.&#160; In my case I just ended up with extra brackets left around my variables.&#160; Syntactically okay but ugly looking.</p>
<p>Thinking about it, I have the feeling last time I gave up on Visual Studio and just used perl the last time I needed to do this.&#160; I guess if I have any more complex things to do I will.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/169/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=169&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/05/27/vo-vulcan-regex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>More Logging</title>
		<link>http://colinnewell.wordpress.com/2009/05/04/more-logging/</link>
		<comments>http://colinnewell.wordpress.com/2009/05/04/more-logging/#comments</comments>
		<pubDate>Mon, 04 May 2009 21:38:18 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/2009/05/04/more-logging/</guid>
		<description><![CDATA[Now that I’ve figured out what I want a logging framework to do I’ve taken a look at some interesting existing frameworks.&#160; log4net is a .net logging framework based on a java framework – log4j.&#160; It’s hosted on the apache website which gives it extra credibility in my view.&#160; Looking at the feature set it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=168&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Now that I’ve figured out <a href="http://colinnewell.wordpress.com/2009/05/04/what-i-want-from-a-logging-framework/">what</a> I want a logging framework to do I’ve taken a look at some interesting existing frameworks.&#160; <a href="http://logging.apache.org/log4net/">log4net</a> is a .net logging framework based on a java framework – log4j.&#160; It’s hosted on the apache website which gives it extra credibility in my view.&#160; Looking at the feature set it looks like it covers pretty much what I need.&#160; </p>
<p>As far as sending emails go there’s a convenient way to get emails out when there’s a problem with a sample config in the <a href="http://logging.apache.org/log4net/release/config-examples.html">examples</a>.</p>
<p> <code>
<pre>&lt;appender name=&quot;SmtpAppender&quot; type=&quot;log4net.Appender.SmtpAppender&quot;&gt;
    &lt;to value=&quot;to@domain.com&quot; /&gt;
    &lt;from value=&quot;from@domain.com&quot; /&gt;

    &lt;subject value=&quot;test logging message&quot; /&gt;
    &lt;smtpHost value=&quot;SMTPServer.domain.com&quot; /&gt;
    &lt;bufferSize value=&quot;512&quot; /&gt;

    &lt;lossy value=&quot;true&quot; /&gt;
    &lt;evaluator type=&quot;log4net.Core.LevelEvaluator&quot;&gt;
        &lt;threshold value=&quot;WARN&quot;/&gt;
    &lt;/evaluator&gt;

    &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
        &lt;conversionPattern value=&quot;%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline&quot; /&gt;
    &lt;/layout&gt;
&lt;/appender&gt;
                </pre>
<p></code></p>
<p>What that does is send an email when a warning comes along and also sends upto the previous 512 messages (of any kind) as context. That wasn&#8217;t exactly what I was thinking of but it&#8217;s certainly good enough for the emails.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=168&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/05/04/more-logging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>What I want from a logging framework</title>
		<link>http://colinnewell.wordpress.com/2009/05/04/what-i-want-from-a-logging-framework/</link>
		<comments>http://colinnewell.wordpress.com/2009/05/04/what-i-want-from-a-logging-framework/#comments</comments>
		<pubDate>Mon, 04 May 2009 00:43:29 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[logging]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/2009/05/04/what-i-want-from-a-logging-framework/</guid>
		<description><![CDATA[I keep being unsatisfied with our applications logging and I’ve decided to take a look at what I really want.
Obviously we want different levels of severity,

Exception 
Error 
Warning 
Note 
Debug 

Those severities imply that we can filter by them and that we can possibly do different things based on encountering them. We also need to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=167&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I keep being unsatisfied with our applications logging and I’ve decided to take a look at what I really want.</p>
<p>Obviously we want different levels of severity,</p>
<ul>
<li>Exception </li>
<li>Error </li>
<li>Warning </li>
<li>Note </li>
<li>Debug </li>
</ul>
<p>Those severities imply that we can filter by them and that we can possibly do different things based on encountering them. We also need to be able to specify different targets – file, debug view, event log and email.</p>
<p>There’s also another aspect that we don’t often think about but which I think is quite important, tying together the log messages into some sort of unit. This might be something like the import of an order on a system or perhaps a web page request.</p>
<p>There’s another thing related to that, timing. Not everything wants to be logged immediately. When we log straight to a file or a debug log we normally just keep writing the stream as we encounter it. If we want to log to an email we might want to batch together some of those message though. That also ties in quite neatly with the idea of units of work.</p>
<p>This would mean that if I have an error occur within a task I could see all the messages within that task, not just the errors. This would be an ‘intelligent’ mode of operation, rather than just one tied to a severity level.</p>
<p>This gives us a set of features something like this,</p>
<ol>
<li>Severity filtering </li>
<li>Tying messages together into a unit of work or task </li>
<li>Delayed sending </li>
<li>Possibly optional logging based on severity, i.e. only display the notes if an error occurs. </li>
</ol>
<p>Honestly we probably also want to have several separate configurations in action at once too so there’s the another feature to consider,</p>
<ol start="5">
<li>A flexible configuration mechanism – this should be able to deal with multiple setups running at the same time </li>
</ol>
<p>This makes me think a simple interface like this would be best,</p>
<p> <code>
<pre>public interface Logger
{
	void StartLevel(string name);
	void EndLevel(string name);
	void Error(string message);
	void Note(string message);
	void Warning(string message);
	void Debug(string message);
	void Exception(string message);
}</pre>
<p></code></p>
<p>All that we would do is to create new classes that implement that to do the functionality we want. We presumably want them to be able to be composed of different ones and have different configurations but essentially when we log we log through an interface like that and it gets sent to a bunch of objects exposing that API.</p>
<p>In practice we would probably use it something like this,</p>
<p><code></p>
<pre>Log.StartLevel(&quot;Interface run&quot;);
Log.Note(&quot;Interface running&quot;);
Log.StartLevel(&quot;Order Import&quot;);
Log.Note(&quot;Importing orders...&quot;);
Log.Note(&quot;Importing order XXXXX1&quot;);
Log.Note(&quot; for destination WHS1&quot;);
Log.Error(&quot;Product D898223 does not exist, order XXXXX1 not imported&quot;);
Log.Note(&quot;Importing order XXXXX2&quot;);
Log.Note(&quot;Importing order XXXXX3&quot;);
Log.Note(&quot;Importing order XXXXX4&quot;);
Log.EndLevel(&quot;Order Import&quot;);
Log.EndLevel(&quot;Interface run&quot;); // an email gets sent if an error occurred
</code></pre>
<p>One thing that irks is that if we have several paths storing the messages for some condition to become true, like sending an email when the interface has run or logging if an error occurs. We could even be storing all the debug messages when we are highly unlikely to send them. In practice though I think it’s worth keeping it simple, if there are really enough messages building up between flushes I suspect that we must have the applications architecture wrong. If not it can always be optimized then.</p>
<p>The configuration is the tricky bit.</p>
<p>  <code></p>
<pre>&lt;file-log&gt;
&lt;log-to-file&gt;c:\logs\error_log.txt&lt;/log-to-file&gt;
&lt;severity-filter&gt;Warning&lt;/severity-filter&gt;
&lt;/file-log&gt;
&lt;!-- uncomment this to push debug output so that you can monitor it via DbgView
&lt;debug-log&gt;
&lt;debug-output /&gt;
&lt;/debug-log&gt;
--&gt;
&lt;email&gt;
&lt;email-log&gt;
&lt;to&gt;colin+newell@rugby-software.co.uk&lt;/to&gt;
&lt;smtp&gt;smtp.someserver.com&lt;/smtp&gt;
&lt;from&gt;interface@rugby-software.co.uk&lt;/from&gt;
&lt;subject&gt;Interface problems&lt;/subject&gt;
&lt;/email-log&gt;
&lt;trigger&gt;Error&lt;/trigger&gt;
&lt;trigger-level&gt;Interface run&lt;/trigger-level&gt;
&lt;severity-filter&gt;Note&lt;/severity-filter&gt;
&lt;/email&gt;
</code></pre>
<p>I think that makes sense as a basic API and configuration mechanism. I think in practice it will need tidying and some more complexity adding but that should be the basics. All that I now need to do is the magic in between to make it work.</p>
<p>There’s also the problem of what to do in the case of exceptions to resolve. Ideally in those cases you would shortcut the trigger levels; especially since if we’ve just caught an exception it’s probably just busted through all those carefully constructed levels. Alternatively perhaps you simply add an alternative configuration block for them. Then it’s explicit and there’s no hard wired behaviour or complex contortions to try to express something complex in xml. Perhaps we’d just add a ‘flush log’ to implicitly dump all the previous log messages stored along with the actual exception report.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=167&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/05/04/what-i-want-from-a-logging-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>.Net deployment</title>
		<link>http://colinnewell.wordpress.com/2009/04/24/net-deployment/</link>
		<comments>http://colinnewell.wordpress.com/2009/04/24/net-deployment/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 07:46:41 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.net deployment installers virtualization uac 64bit]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/2009/04/24/net-deployment/</guid>
		<description><![CDATA[Now that I’ve given the talk on .Net Deployment I figured it would be worth putting together some links for people wanting to find out more about what I said.
As a refresher here are the titles of my slides,

Introduction 
.Net avoids DLL hell 
Get the right DLL&#8217;s 
Strong Names 
32 Bit &#38; 64 Bit 
Vista [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=166&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Now that I’ve given the talk on .Net Deployment I figured it would be worth putting together some links for people wanting to find out more about what I said.</p>
<p>As a refresher here are the titles of my slides,</p>
<ol>
<li>Introduction </li>
<li>.Net avoids DLL hell </li>
<li>Get the right DLL&#8217;s </li>
<li>Strong Names </li>
<li>32 Bit &amp; 64 Bit </li>
<li>Vista </li>
<li>Virtualization </li>
<li>Manifests </li>
<li>Code access privileges </li>
<li>Settings </li>
<li>Vulcan </li>
<li>Installer technology </li>
<li>UAC </li>
<li>Installers and x64 </li>
<li>Automating things </li>
<li>Debug information </li>
<li>Other dependencies </li>
<li>Testing the installer </li>
</ol>
<p>Here are some links to some of the things I talked about,</p>
<h3>Figuring out dependencies</h3>
<ul>
<li><a href="http://www.dependencywalker.com/">http://www.dependencywalker.com/</a> </li>
<li><a href="http://www.red-gate.com/products/reflector/">http://www.red-gate.com/products/reflector/</a> </li>
</ul>
<h3>Strong names</h3>
<ul>
<li><a href="http://www.codeguru.com/columns/experts/article.php/c4643">http://www.codeguru.com/columns/experts/article.php/c4643</a> </li>
<li><a href="http://colinnewell.wordpress.com/2007/11/26/finding-out-the-public-key-of-a-net-assembly/">http://colinnewell.wordpress.com/2007/11/26/finding-out-the-public-key-of-a-net-assembly/</a> </li>
</ul>
<h3>Code Access Security</h3>
<ul>
<li><a href="http://blogs.pointbridge.com/Blogs/floraday_burt/Pages/Post.aspx?_ID=2">http://blogs.pointbridge.com/Blogs/floraday_burt/Pages/Post.aspx?_ID=2</a> </li>
<li><a href="http://blogs.pointbridge.com/Blogs/floraday_burt/Pages/Post.aspx?_ID=3">http://blogs.pointbridge.com/Blogs/floraday_burt/Pages/Post.aspx?_ID=3</a> </li>
<li><a href="http://blogs.pointbridge.com/Blogs/floraday_burt/Pages/Post.aspx?_ID=4">http://blogs.pointbridge.com/Blogs/floraday_burt/Pages/Post.aspx?_ID=4</a> </li>
<li><a href="http://weblogs.asp.net/hernandl/archive/2005/11/21/permcalcftissues.aspx">http://weblogs.asp.net/hernandl/archive/2005/11/21/permcalcftissues.aspx</a> </li>
<li><a href="http://blogs.conchango.com/kenibarwick/archive/2005/09/20/2185.aspx">http://blogs.conchango.com/kenibarwick/archive/2005/09/20/2185.aspx</a> </li>
<li><a href="http://colinnewell.wordpress.com/2008/04/25/securityexception-caspol-and-net-programs/">http://colinnewell.wordpress.com/2008/04/25/securityexception-caspol-and-net-programs/</a> </li>
</ul>
<h3>Virtualization/UAC</h3>
<ul>
<li><a href="http://crispybit.spaces.live.com/blog/cns!1B71C2122AD43308!134.entry">http://crispybit.spaces.live.com/blog/cns!1B71C2122AD43308!134.entry</a> </li>
<li><a href="http://colinnewell.wordpress.com/2008/06/08/nsis-installers-and-windows-vista/">http://colinnewell.wordpress.com/2008/06/08/nsis-installers-and-windows-vista/</a> </li>
<li><a href="http://community.bartdesmet.net/blogs/bart/archive/2006/10/28/Windows-Vista-_2D00_-Demand-UAC-elevation-for-an-application-by-adding-a-manifest-using-mt.exe.aspx">http://community.bartdesmet.net/blogs/bart/archive/2006/10/28/Windows-Vista-_2D00_-Demand-UAC-elevation-for-an-application-by-adding-a-manifest-using-mt.exe.aspx</a> </li>
</ul>
<h3>64 bit</h3>
<ul>
<li><a href="http://www.brianpeek.com/blog/archive/2007/11/13/x64-development-with-net.aspx">http://www.brianpeek.com/blog/archive/2007/11/13/x64-development-with-net.aspx</a> </li>
<li><a href="http://www.hanselman.com/blog/32bitnessAnd64bitnessAndMigratingDasBlogOnIIS7AndASPNETUnderVista64.aspx">http://www.hanselman.com/blog/32bitnessAnd64bitnessAndMigratingDasBlogOnIIS7AndASPNETUnderVista64.aspx</a> </li>
<li><a href="http://www.hanselman.com/blog/BackToBasics32bitAnd64bitConfusionAroundX86AndX64AndTheNETFrameworkAndCLR.aspx">http://www.hanselman.com/blog/BackToBasics32bitAnd64bitConfusionAroundX86AndX64AndTheNETFrameworkAndCLR.aspx</a> </li>
</ul>
<h3>Installer technology</h3>
<ul>
<li><a href="http://nsis.sourceforge.net/Main_Page">http://nsis.sourceforge.net/Main_Page</a> </li>
<li><a href="http://wix.sourceforge.net/">http://wix.sourceforge.net/</a> </li>
</ul>
<h3>Settings</h3>
<ul>
<li><a href="http://bytes.com/groups/net-c/522191-how-maintain-user-config-settings-when-upgrading">http://bytes.com/groups/net-c/522191-how-maintain-user-config-settings-when-upgrading</a> </li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/166/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=166&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/04/24/net-deployment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>VO 2.7 Build system</title>
		<link>http://colinnewell.wordpress.com/2009/04/19/vo-27-build-system/</link>
		<comments>http://colinnewell.wordpress.com/2009/04/19/vo-27-build-system/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 19:58:08 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/2009/04/19/vo-27-build-system/</guid>
		<description><![CDATA[After far too long without a proper way to build our applications from the command line in VO 2.7 we’ve finally created a program to do that.
There was one hitch we had when building our program; getting the Assembler to compile the modules that needed compiling. We use the VO27NASM.DLL plug in which is essentially [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=165&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>After far too long without a proper way to build our applications from the command line in VO 2.7 we’ve finally created a program to do that.</p>
<p>There was one hitch we had when building our program; getting the Assembler to compile the modules that needed compiling. We use the <code>VO27NASM.DLL</code> plug in which is essentially just NASM embedded into a dll to compile some assembler code.</p>
<p>There were 2 problems with the assembler code. The first was that after importing the AEF the assembly code wouldn’t compile, even from within VO itself. This turns out to be because they weren’t imported as source code entities. We fixed that by replacing those entities with an identical entity that we created as a source entity. Once we’d done that the application could be built from within the IDE.</p>
<p>The second problem was that compiling from Adam within our app didn’t work. To fix that we just needed to call SubSysInit in the CAVOSSYS . This loads in the plug-ins like the assembler.</p>
<p>This is the import you need for the SubSysInit function. You can call it with all 0’s.</p>
<p><code>_DLL FUNC SubSysInit (hMenu AS PTR, uiFirstMenuID AS DWORD, wMenuCount AS DWORD) AS LOGIC STRICT:CAVOSSYS._SubSysInit@12</code></p>
<p>We haven’t tried VO 2.5, 2.6 or2.8 yet but I’m guessing that it should all be essentially the same.</p>
<p>Note: VO refers to CA Visual Objects &#8211; <a href="http://www.cavo.com/">http://www.cavo.com/</a>. If you don’t know it don’t worry about it!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/165/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=165&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/04/19/vo-27-build-system/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>Birmingham Perl QA Hackathon</title>
		<link>http://colinnewell.wordpress.com/2009/03/31/birmingham-perl-qa-hackathon/</link>
		<comments>http://colinnewell.wordpress.com/2009/03/31/birmingham-perl-qa-hackathon/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 20:34:11 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/?p=162</guid>
		<description><![CDATA[I&#8217;m back from the 2009 Perl QA Hackathon (http://qa-hackathon.org/) where I acted as a spare programmer.
Barbie and JJ and the Birmingham Perl Mongers (http://birmingham.pm.org/) organized an excellent event.  I’m really going to  have to do some exercise after eating so well too.
For my own reference if no-one else’s, here are some of the places I’ve just [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=162&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;m back from the 2009 Perl QA Hackathon (<a href="http://qa-hackathon.org/">http://qa-hackathon.org/)</a> where I acted as a spare programmer.</p>
<p>Barbie and JJ and the Birmingham Perl Mongers (<a href="http://birmingham.pm.org/">http://birmingham.pm.org/)</a> organized an excellent event.  I’m really going to  have to do some exercise after eating so well too.</p>
<p>For my own reference if no-one else’s, here are some of the places I’ve just eaten in Birmingham so that I can remember them.</p>
<ul>
<li>Shimla Pinks – An upmarket Indian restaurant</li>
<li>The Handmade burger company – decent burgers</li>
<li>The Thai Orchid on Bennetts Hill &#8211; Excellent food and service.</li>
<li>Bar Room Bar at the Mail box – excellent pizzas</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/162/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=162&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/03/31/birmingham-perl-qa-hackathon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>Perl QA Hackathon &#8211; Test::Builder2</title>
		<link>http://colinnewell.wordpress.com/2009/03/31/perl-qa-hackathon-testbuilder2/</link>
		<comments>http://colinnewell.wordpress.com/2009/03/31/perl-qa-hackathon-testbuilder2/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 20:20:58 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[perl5]]></category>
		<category><![CDATA[qa hackathon]]></category>
		<category><![CDATA[test::builder]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/?p=151</guid>
		<description><![CDATA[At the QA Hackathon (http://qa-hackathon.org/) I helped Michael G Schwern (http://use.perl.org/~schwern/journal/) get over his metaphorical hump with the design of the new Test::Builder2.  I was one of the programmers without an agenda at the hackathon there just to try things.  A disinterested+ party, I pitched in (at least a bit) when a bit [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=151&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>At the QA Hackathon (<a href="http://qa-hackathon.org/">http://qa-hackathon.org/</a>) I helped Michael G Schwern (<a href="http://use.perl.org/~schwern/journal/">http://use.perl.org/~schwern/journal/</a>) get over his metaphorical hump with the design of the new Test::Builder2.  I was one of the programmers without an agenda at the hackathon there just to try things.  A disinterested+ party, I pitched in (at least a bit) when a bit of feedback and programming was called for.</p>
<p>To explain what we tried to do and why we were doing it I’ll explain what the Test::Builder is first.  The Test::Builder is the library used under the hood by various testing libraries including Test::Simple and Test::More to produce the TAP output and manage the test numbers so that they don’t end up out of line.  It also does a few other convenient things but those were the core bits we were focusing on.  To do that it’s a singleton and has a bunch of helper methods for those libraries that use it.  While this Builder library may change, the existing test libraries aren’t likely to change, except perhaps to add new facilities.</p>
<p>Schwern had some goals with the new version,</p>
<ul>
<li>Make the output configurable and replaceable (then you wouldn’t be tied to TAP)</li>
<li>To make it so that you can tell whether you are currently passing the tests (so that you can tag on extra debug output at the end if you’re not)</li>
<li>To allow extra information like diagnostics to be tied to tests more easily</li>
</ul>
<p>The second item, the telling whether you were currently passing your tests was something he’d already done with a history object.</p>
<p>The configurable output was a relatively simple thing to do.  For now we’ve created a class that implements a few basic output messages for start, end and test result and set the test builder to be created with a default implementation that outputs TAP.  Schwern is now looking at other testing frameworks to see if other messages are likely to be needed.  His look at the POSIX testing framework for example suggested there may need to be some additional start/end messages at different levels.  </p>
<p>Allowing extra information to be associated with the tests is a little trickier.  Schwern had already figured out that the <a href="http://groups.google.com/group/test-more-users/browse_thread/thread/316f43b6b668393d?pli=1">way to do it</a> was to use a result object so that you had something to tack the extra information to.  This way rather than simply returning a pass or fail the test methods will return a ‘Result’ object.  You can then tack on extra diagnostics or mark the fact that it’s a todo.</p>
<p>In the simplest case to mark an object with some diagnostics,</p>
<p><code>ok($func('a'), 'some test')-&gt;diag('some cheap diagnostics');</code></p>
<p>Or if the diagnostics are expensive to run and you only want to run them when the test fails,<br />
<code></p>
<pre>
{
	my $result = ok $func('a'), 'A test';
	if(!$result) {
		$result-&gt;diag("expensive diagnostics we'd rather not run");
	}
}
</pre>
<p></code></p>
<p>There are a couple of things to note in this instance.  The first is that you can do a true/false comparison on the object to see if it’s passed or failed.  One delegate described this as the ‘truthiness’ of the object.  This way we can check easily whether it’s a pass or fail without checking the ‘<code>is_fail</code>’ property (as it was named at the time I was writing this).  </p>
<p>The other thing to note are the scope blocks.  They are probably good practice around tests in general but in this case they are essential.  The way that the builder knows when to display the output is by only doing so when you are finished with the object, i.e. by waiting for the object to be destroyed.  Without those scope blocks the destructor wouldn’t be called in the appropriate place.  This design decision seems like the best way to give you a simple interface while allowing you to deal with the more complex scenario’s without too much difficulty.  You can of course make a mess of it, but that’s programming for you.  </p>
<p>Another bit of ugliness is that the result isn’t actually the real result but a wrapper that implements the destructor functionality and pretends to be the result.  That’s because the result is a pure data object and because it’s also stored in the history and so wouldn’t naturally be destructed at the correct point just because your code doesn’t reference it at the test any more.  The wrapper just acts as a facade on the result and is given the output object by the builder so that it can output the test result when the wrapper is destroyed.</p>
<p>The syntax also allows you to set a single test as a TODO very easily.</p>
<p><code>ok($func('a'), 'some test')-&gt;todo('still need to implement this');<br />
</code><br />
You can chain multiple pieces of data together and each setter returns the result back so that you can keep doing it.  It’s also possible to set a todo without a message.  The net effect of that is that it’s not possible to use the todo call to tell whether or not the result is a todo or what the reason is.  Sounds obvious when I say it like that but it was something we had to think about!  Instead there is a ‘<code>is_todo</code>’ property and a ‘<code>reason</code>’ property for those pieces of information.</p>
<p>Note that setting the information like that doesn’t mean that you cannot use the existing libraries features like <code>Test::More</code>’s <code>TODO</code> blocks.  They can still be used for multiple tests where they are appropriate; it’s just that now you can also do quick todo’s with minimal fuss too.</p>
<p>The weekend was spent figuring out how to meet these goals with an implementation that was reasonably clean.  Schwern had already figured out the basic mechanics of it, we just thrashed out what worked practically and what didn’t.  After a few rewrites of parts of the structure it’s starting to look like something useful.  What I’ve mentioned above was roughly where we were by the end of the weekend.  Whether it still looks like that now is another matter.   Of course how much you’ll actually see of these changes I don’t know, this library is used within most of the other test libraries so most changes will be invisible to the users.</p>
<p>+ disinterested in the sense that I’ve not got a vested interest in the development of the QA or testing code.  As far as I’m concerned it already works great and I’m really grateful for it.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/151/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=151&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/03/31/perl-qa-hackathon-testbuilder2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
		<item>
		<title>Tweaking the AntiForgeryToken on ASP.Net MVC RC2</title>
		<link>http://colinnewell.wordpress.com/2009/03/05/tweaking-the-antiforgerytoken-on-aspnet-mvc-rc2/</link>
		<comments>http://colinnewell.wordpress.com/2009/03/05/tweaking-the-antiforgerytoken-on-aspnet-mvc-rc2/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 09:34:42 +0000</pubDate>
		<dc:creator>colinnewell</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://colinnewell.wordpress.com/?p=141</guid>
		<description><![CDATA[After a bit of thought I realised that my old helper extension method to set the path of the anti-forgery cookie was broken by RC2.  Steve Sanderson did point out that they now allow you to specify the path up front when you create the token though so it actually makes my helper even [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=141&subd=colinnewell&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>After a bit of thought I realised that my old helper extension method to set the path of the anti-forgery cookie was broken by RC2.  Steve Sanderson did point out that they now allow you to specify the path up front when you create the token though so it actually makes my helper even simpler.</p>
<p><code>
<pre>
public static string MyAntiForgeryToken(this HtmlHelper helper, string salt)
{
    string fragment = helper.AntiForgeryToken(salt, null, helper.ViewContext.HttpContext.Request.ApplicationPath);
    return fragment;
}</pre>
<p></code></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/colinnewell.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/colinnewell.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/colinnewell.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/colinnewell.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/colinnewell.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/colinnewell.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/colinnewell.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/colinnewell.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/colinnewell.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/colinnewell.wordpress.com/141/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=colinnewell.wordpress.com&blog=1215813&post=141&subd=colinnewell&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://colinnewell.wordpress.com/2009/03/05/tweaking-the-antiforgerytoken-on-aspnet-mvc-rc2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bae18aebc08108ae3c9b58f45407e0d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">colinnewell</media:title>
		</media:content>
	</item>
	</channel>
</rss>