<?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"
	>

<channel>
	<title>Unintelligible</title>
	<atom:link href="http://www.unintelligible.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://unintelligible.org/blog</link>
	<description></description>
	<pubDate>Mon, 04 Apr 2011 18:57:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>Rename all Unique Constraints in a SQL Server database</title>
		<link>http://unintelligible.org/blog/2011/04/04/rename-all-unique-constraints-in-a-database/</link>
		<comments>http://unintelligible.org/blog/2011/04/04/rename-all-unique-constraints-in-a-database/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 18:47:18 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=210</guid>
		<description><![CDATA[Quick and dirty script:

DECLARE @old sysname, @current sysname, @TABLE sysname, @COLUMN sysname,
    @this_old sysname
DECLARE uq_cursor CURSOR FOR 
    SELECT AllUQs.name AS old_name, object_name&#40;AllUQs.parent_obj&#41; AS table_name,
            col.name AS column_name
        FROM dbo.sysobjects AS [...]]]></description>
			<content:encoded><![CDATA[<p>Quick and dirty script:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="color: #dcdccc; background-color: #3f3f3f; padding: 5px;">DECLARE @old sysname<span style="color: #66cc66;">,</span> @current sysname<span style="color: #66cc66;">,</span> @<span style="color: #993333; font-weight: bold;">TABLE</span> sysname<span style="color: #66cc66;">,</span> @<span style="color: #993333; font-weight: bold;">COLUMN</span> sysname<span style="color: #66cc66;">,</span>
    @this_old sysname
DECLARE uq_cursor CURSOR <span style="color: #993333; font-weight: bold;">FOR</span> 
    <span style="color: #993333; font-weight: bold;">SELECT</span> AllUQs<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">AS</span> old_name<span style="color: #66cc66;">,</span> object_name<span style="color: #66cc66;">&#40;</span>AllUQs<span style="color: #66cc66;">.</span>parent_obj<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> table_name<span style="color: #66cc66;">,</span>
            col<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">AS</span> column_name
        <span style="color: #993333; font-weight: bold;">FROM</span> dbo<span style="color: #66cc66;">.</span>sysobjects <span style="color: #993333; font-weight: bold;">AS</span> AllUQs
        <span style="color: #993333; font-weight: bold;">JOIN</span> dbo<span style="color: #66cc66;">.</span>sysindexes <span style="color: #993333; font-weight: bold;">AS</span> ix <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span>ix<span style="color: #66cc66;">.</span>id <span style="color: #66cc66;">=</span> AllUQs<span style="color: #66cc66;">.</span>parent_obj<span style="color: #66cc66;">&#41;</span>
                               <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span>ix<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> AllUQs<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">&#41;</span>
        <span style="color: #993333; font-weight: bold;">JOIN</span> dbo<span style="color: #66cc66;">.</span>sysindexkeys <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #66cc66;">&#91;</span><span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">&#93;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span>id <span style="color: #66cc66;">=</span> ix<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span>indid <span style="color: #66cc66;">=</span> ix<span style="color: #66cc66;">.</span>indid<span style="color: #66cc66;">&#41;</span>
        <span style="color: #993333; font-weight: bold;">JOIN</span> dbo<span style="color: #66cc66;">.</span>syscolumns <span style="color: #993333; font-weight: bold;">AS</span> col <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">&#40;</span>col<span style="color: #66cc66;">.</span>id <span style="color: #66cc66;">=</span> ix<span style="color: #66cc66;">.</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span>col<span style="color: #66cc66;">.</span>colid <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span><span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span>colid<span style="color: #66cc66;">&#41;</span>
        <span style="color: #993333; font-weight: bold;">WHERE</span> AllUQs<span style="color: #66cc66;">.</span>xtype <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'UQ'</span>
        <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> old_name
OPEN uq_cursor
    FETCH NEXT <span style="color: #993333; font-weight: bold;">FROM</span> uq_cursor <span style="color: #993333; font-weight: bold;">INTO</span> @old<span style="color: #66cc66;">,</span> @<span style="color: #993333; font-weight: bold;">TABLE</span><span style="color: #66cc66;">,</span> @<span style="color: #993333; font-weight: bold;">COLUMN</span>
    <span style="color: #993333; font-weight: bold;">SET</span> @current <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'UQ_'</span> <span style="color: #66cc66;">+</span> @<span style="color: #993333; font-weight: bold;">TABLE</span>
    <span style="color: #993333; font-weight: bold;">SET</span> @this_old <span style="color: #66cc66;">=</span> @old
    WHILE @@FETCH_STATUS <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>
    BEGIN
        <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span>@this_old !<span style="color: #66cc66;">=</span> @old<span style="color: #66cc66;">&#41;</span>
        BEGIN
            print @this_old <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">' - '</span> <span style="color: #66cc66;">+</span> @current
            <span style="color: #808080; font-style: italic;">-- EXEC sp_rename @this_old, @current, 'OBJECT'</span>
            <span style="color: #993333; font-weight: bold;">SET</span> @current <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'UQ_'</span> <span style="color: #66cc66;">+</span> @<span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'_'</span> <span style="color: #66cc66;">+</span> @<span style="color: #993333; font-weight: bold;">COLUMN</span>
            <span style="color: #993333; font-weight: bold;">SET</span> @this_old <span style="color: #66cc66;">=</span> @old
        END
        ELSE
        BEGIN
            <span style="color: #993333; font-weight: bold;">SET</span> @current <span style="color: #66cc66;">=</span> @current <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'__'</span> <span style="color: #66cc66;">+</span> @<span style="color: #993333; font-weight: bold;">COLUMN</span>
        END
        FETCH NEXT <span style="color: #993333; font-weight: bold;">FROM</span> uq_cursor <span style="color: #993333; font-weight: bold;">INTO</span> @old<span style="color: #66cc66;">,</span> @<span style="color: #993333; font-weight: bold;">TABLE</span><span style="color: #66cc66;">,</span> @<span style="color: #993333; font-weight: bold;">COLUMN</span>
    END
    print @this_old <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">' - '</span> <span style="color: #66cc66;">+</span> @current
    <span style="color: #808080; font-style: italic;">-- EXEC sp_rename @this_old, @current, 'OBJECT'</span>
CLOSE uq_cursor
DEALLOCATE uq_cursor</pre></div></div>

<p>
This will rename all unique constraints to <code>UQ_TableName_Column1Name_Column2Name</code> (for a unique constraint on two columns.)
</p>
<p>
Hope this helps someone save themselves 15mins of SQL&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2011/04/04/rename-all-unique-constraints-in-a-database/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gendarme MSBuild task</title>
		<link>http://unintelligible.org/blog/2010/10/02/gendarme-msbuild-task/</link>
		<comments>http://unintelligible.org/blog/2010/10/02/gendarme-msbuild-task/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 00:14:53 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[.net]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=203</guid>
		<description><![CDATA[I just wrote a quick MSBuild wrapper around the great Gendarme tool. It allows running Gendarme as part of an MSBuild task/project, and supports all the options that the command-line runner supports.
It also integrates with Visual Studio:

The binary can be downloaded here: http://github.com/unintelligible/GendarmeMsBuild/downloads
The source code is available here: http://github.com/unintelligible/GendarmeMsBuild
]]></description>
			<content:encoded><![CDATA[<p>I just wrote a quick MSBuild wrapper around the great Gendarme tool. It allows running Gendarme as part of an MSBuild task/project, and supports <a title="Gendarme MSBuild task documentation" href="http://github.com/unintelligible/GendarmeMsBuild/blob/master//README.markdown" target="_blank">all the options</a> that the command-line runner supports.</p>
<p>It also <a title="Gendarme MsBuild documentation" href="http://github.com/unintelligible/GendarmeMsBuild/blob/master//README.markdown" target="_blank">integrates with Visual Studio</a>:</p>
<p><a href="http://unintelligible.org/blog/wp-content/uploads/2010/10/gendarmemsbuild-visualstudio.png"><img class="size-medium wp-image-204" title="Visual Studio screenshot" src="http://unintelligible.org/blog/wp-content/uploads/2010/10/gendarmemsbuild-visualstudio.png" width="600" alt="Visual Studio screenshot" /></a></p>
<p>The binary can be downloaded here: <a href="http://github.com/unintelligible/GendarmeMsBuild/downloads">http://github.com/unintelligible/GendarmeMsBuild/downloads</a></p>
<p>The source code is available here: <a href="http://github.com/unintelligible/GendarmeMsBuild">http://github.com/unintelligible/GendarmeMsBuild</a></p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2010/10/02/gendarme-msbuild-task/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Resharper 4.5 inspection severity list</title>
		<link>http://unintelligible.org/blog/2010/05/24/resharper-45-inspection-severity-list/</link>
		<comments>http://unintelligible.org/blog/2010/05/24/resharper-45-inspection-severity-list/#comments</comments>
		<pubDate>Mon, 24 May 2010 17:54:25 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[.net]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=197</guid>
		<description><![CDATA[For some reason, I couldn&#8217;t find a list of the different Resharper code inspections and their severity anywhere on the web (not even in Jetbrains&#8217; site); this is useful to go through the available inspections with team members to decide which we should enable across our team.


So, for convenience, I&#8217;m posting one here; this is [...]]]></description>
			<content:encoded><![CDATA[<p>For some reason, I couldn&#8217;t find a list of the different Resharper code inspections and their severity anywhere on the web (not even in <a href="http://www.jetbrains.com/resharper/webhelp45/" target="_blank">Jetbrains&#8217; site</a>); this is useful to go through the available inspections with team members to decide which we should enable across our team.
</p>
<p>
So, for convenience, I&#8217;m posting one here; this is for Resharper 4.5. <a href="#" id="expand">Click to expand the table</a>.
</p>
<p><script type="text/javascript">
$('#expand').toggle(function(){$('#rs45-settings').show()}, function(){$('#rs45-settings').hide()})
</script></p>
<table id="rs45-settings">
<tr>
<th>Settings entry name</th>
<th>Section</th>
<th>Definition</th>
<th>Default severity</th>
</tr>
<tr>
<td>ClassCanBeSealed.Global</td>
<td>Code Redundancies</td>
<td>Class can be made sealed - Non-private accessibility</td>
<td> <span style="color: #ccc">DO_NOT_SHOW</span></td>
</tr>
<tr>
<td>ClassCanBeSealed.Local</td>
<td>Code Redundancies</td>
<td>Class can be made sealed - Private accessibility</td>
<td> <span style="color: #ccc">DO_NOT_SHOW</span></td>
</tr>
<tr>
<td>MemberCanBeInternal</td>
<td>Code Redundancies</td>
<td>Member or type can be made internal</td>
<td> <span style="color: #ccc">DO_NOT_SHOW</span></td>
</tr>
<tr>
<td>ConvertIfStatementToReturnStatement</td>
<td>Code Redundancies</td>
<td>&#8216;if-return&#8217; statement can be re-written as &#8216;return&#8217; statement</td>
<td> <span style="background-color: #cff">HINT</span></td>
</tr>
<tr>
<td>ConvertIfStatementToSwitchStatement</td>
<td>Code Redundancies</td>
<td>Convert &#8216;if&#8217; statement to &#8217;switch&#8217; statement</td>
<td> <span style="background-color: #cff">HINT</span></td>
</tr>
<tr>
<td>ConvertToAutoPropertyWithPrivateSetter</td>
<td>Code Redundancies</td>
<td>Convert property to auto-property with private setter</td>
<td> <span style="background-color: #cff">HINT</span></td>
</tr>
<tr>
<td>InvertIf</td>
<td>Code Redundancies</td>
<td>Invert &#8216;if&#8217; statement to reduce nesting</td>
<td> <span style="background-color: #cff">HINT</span></td>
</tr>
<tr>
<td>SimilarAnonymousTypeNearby</td>
<td>Code Redundancies</td>
<td>Similar anonymous type detected nearby</td>
<td> <span style="background-color: #cff">HINT</span></td>
</tr>
<tr>
<td>SuggestUseVarKeywordEverywhere</td>
<td>Code Redundancies</td>
<td>Use &#8216;var&#8217; keyword when possible</td>
<td> <span style="background-color: #cff">HINT</span></td>
</tr>
<tr>
<td>ClassNeverInstantiated.Global</td>
<td>Code Redundancies</td>
<td>Class is never instantiated - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ClassNeverInstantiated.Local</td>
<td>Code Redundancies</td>
<td>Class is never instantiated - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ClassWithVirtualMembersNeverInherited.Global</td>
<td>Code Redundancies</td>
<td>Class with virtual members never inherited - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ClassWithVirtualMembersNeverInherited.Local</td>
<td>Code Redundancies</td>
<td>Class with virtual members never inherited - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConverClosureToMethodGroup</td>
<td>Code Redundancies</td>
<td>Convert anonymous method to method group</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertConditionalTernaryToNullCoalescing</td>
<td>Code Redundancies</td>
<td>&#8216;?:&#8217; expression can be re-written as &#8216;??&#8217; expression</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertIfStatementToConditionalTernaryExpression</td>
<td>Code Redundancies</td>
<td>&#8216;if&#8217; statement can be re-written as &#8216;?:&#8217; expression</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertIfStatementToNullCoalescingExpression</td>
<td>Code Redundancies</td>
<td>&#8216;if&#8217; statement can be re-written as &#8216;??&#8217; expression</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertNullableToShortForm</td>
<td>Code Redundancies</td>
<td>Convert &#8216;Nullable<t>&#8216; to &#8216;T?&#8217;</t></td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertToAutoProperty</td>
<td>Code Redundancies</td>
<td>Convert property to auto-property</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertToConstant.Global</td>
<td>Code Redundancies</td>
<td>Convert local variable or field to constant - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertToConstant.Local</td>
<td>Code Redundancies</td>
<td>Convert local variable or field to constant - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertToLambdaExpression</td>
<td>Code Redundancies</td>
<td>Convert to lambda expression</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ConvertToStaticClass</td>
<td>Code Redundancies</td>
<td>Convert to static class</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>EventNeverInvoked.Global</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Abstract or virtual event is never invoked</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>EventNeverSubscribedTo.Global</td>
<td>Code Redundancies</td>
<td>Event is never subscribed to - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>EventNeverSubscribedTo.Local</td>
<td>Code Redundancies</td>
<td>Event is never subscribed to - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>FieldCanBeMadeReadOnly.Global</td>
<td>Code Redundancies</td>
<td>Field can be made readonly - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>FieldCanBeMadeReadOnly.Local</td>
<td>Code Redundancies</td>
<td>Field can be made readonly - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>InvokeAsExtensionMethod</td>
<td>Code Redundancies</td>
<td>Convert static method invocation to extension method call</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>JoinDeclarationAndInitializer</td>
<td>Code Redundancies</td>
<td>Join local variable declaration and assignment</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>MemberCanBeMadeStatic.Global</td>
<td>Code Redundancies</td>
<td>Member can be made static - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>MemberCanBeMadeStatic.Local</td>
<td>Code Redundancies</td>
<td>Member can be made static - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>MemberCanBePrivate.Global</td>
<td>Code Redundancies</td>
<td>Member can be made private - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>MemberCanBePrivate.Local</td>
<td>Code Redundancies</td>
<td>Member can be made private - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>MemberCanBeProtected.Global</td>
<td>Code Redundancies</td>
<td>Member can be made protected  - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>MemberCanBeProtected.Local</td>
<td>Code Redundancies</td>
<td>Member can be made protected - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>MoreSpecificForeachVariableTypeAvailable</td>
<td>Code Redundancies</td>
<td>Iteration variable can be declared with a more specific type</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>PublicConstructorInAbstractClass</td>
<td>Code Redundancies</td>
<td>Make constructor in abstract class protected</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>ReplaceWithStringIsNullOrEmpty</td>
<td>Code Redundancies</td>
<td>Use &#8216;String.IsNullOrEmpty&#8217;</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>SuggestBaseTypeForParameter</td>
<td>Code Redundancies</td>
<td>Parameter can be declared with base type</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>SuggestUseVarKeywordEvident</td>
<td>Code Redundancies</td>
<td>Use &#8216;var&#8217; keyword when initializer explicitly declares type</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>SuspiciousTypeConversion.Global</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Suspicious type conversion or check</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>TooWideLocalVariableScope</td>
<td>Code Redundancies</td>
<td>Local variable has too wide declaration scope</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>UnaccessedField.Global</td>
<td>Code Redundancies</td>
<td>Unaccessed field - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>UnassignedField.Global</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Unassigned field</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>UnusedMember.Global</td>
<td>Code Redundancies</td>
<td>Unused declaration - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>UnusedMethodReturnValue.Global</td>
<td>Code Redundancies</td>
<td>Method return value is never used - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>UnusedParameter.Global</td>
<td>Code Redundancies</td>
<td>Unused parameter - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>UseObjectOrCollectionInitializer</td>
<td>Code Redundancies</td>
<td>Use object or collection initializer when possible</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>VirtualMemberNeverOverriden.Global</td>
<td>Code Redundancies</td>
<td>Virtual member is never overriden - Non-private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>VirtualMemberNeverOverriden.Local</td>
<td>Code Redundancies</td>
<td>Virtual member is never overriden - Private accessibility</td>
<td> <span style="background-color: #9f9">SUGGESTION</span></td>
</tr>
<tr>
<td>AccessToModifiedClosure</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Access to modified closure</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>AccessToStaticMemberViaDerivedType</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Access to a static member of a type via a derived type</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>AssignNullToNotNullAttribute</td>
<td>Value Analysis</td>
<td>Possible &#8216;null&#8217; assignment to entity marked with &#8216;Value cannot be null&#8217; attribute</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>BaseMemberHasParams</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Base member has &#8216;params&#8217; parameter,  but overrider hasn&#8217;t</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>BitwiseOperatorOnEnumWihtoutFlags</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Bitwise operation on enum which is not marked by [Flags] attribute</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>CannotApplyEqualityOperatorToType</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Compare with &#8216;==&#8217; types marked by &#8216;CannotApplyEqualityOperatorAttribute&#8217;</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>CharImplicitlyConvertedToNumeric</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Char is implicitly converted to integral numeric type</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>CompareNonConstrainedGenericWithNull</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Possible compare of value type with &#8216;null&#8217;</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>ConditionIsAlwaysTrueOrFalse</td>
<td>Value Analysis</td>
<td>Expression is always &#8216;true&#8217; or always &#8216;false&#8217;</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>ConstantNullColescingCondition</td>
<td>Value Analysis</td>
<td>&#8216;??&#8217; condition is known to be null or not null</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>ConstructorInitializerLoop</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Possible cyclic constructor call</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>DoNotCallOverridableMethodsInConstructor</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Virtual member call in constructor</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>DoubleNegationOperator</td>
<td>Code Redundancies</td>
<td>Double negation operator</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>EmptyConstructor</td>
<td>Code Redundancies</td>
<td>Empty constructor</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>EmptyDestructor</td>
<td>Code Redundancies</td>
<td>Empty destructor</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>EmptyGeneralCatchClause</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Empty general catch clause</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>EmptyNamespace</td>
<td>Code Redundancies</td>
<td>Empty namespace declaration</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>EnumUnderlyingTypeIsInt</td>
<td>Code Redundancies</td>
<td>Underlying type of enum is &#8216;int&#8217;</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>FormatStringProblem</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Problems in format string</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>ForStatementConditionIsTrue</td>
<td>Code Redundancies</td>
<td>&#8216;true&#8217; is redundant as &#8216;for&#8217;-statement condition</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>FunctionNeverReturns</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Function never returns</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>InconsistentNaming</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Inconsistent Naming</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>LocalVariableHidesMember</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Local variable hides member</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>ParameterHidesMember</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Parameter hides member</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>PartialMethodWithSinglePart</td>
<td>Code Redundancies</td>
<td>Redundant &#8216;partial&#8217; modifier on method declaration</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>PartialTypeWithSinglePart</td>
<td>Code Redundancies</td>
<td>Redundant &#8216;partial&#8217; modifier on type declaration</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>PossibleIntendedRethrow</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Exception rethrow possibly intended</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>PossibleInterfaceMemberAmbiguity</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Possible ambiguity while accessing member by interface</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>PossibleLossOfFraction</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Possible loss of fraction</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>PossibleNullReferenceException</td>
<td>Value Analysis</td>
<td>Possible &#8216;System.NullReferenceException&#8217;</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantAnonymousTypePropertyName</td>
<td>Code Redundancies</td>
<td>Redundant anonymous type property explicit name</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantAssignment</td>
<td>Code Redundancies</td>
<td>Assignment is not used</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantAttributeParentheses</td>
<td>Code Redundancies</td>
<td>Parentheses are redundant if attribute has no arguments</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantBaseConstructorCall</td>
<td>Code Redundancies</td>
<td>Redundant base constructor call</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantBaseQualifier</td>
<td>Code Redundancies</td>
<td>Redundant &#8216;base.&#8217; qualifier</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantBoolCompare</td>
<td>Code Redundancies</td>
<td>Redundant boolean comparison</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantCaseLabel</td>
<td>Code Redundancies</td>
<td>Redundant &#8216;case&#8217; label</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantCast</td>
<td>Code Redundancies</td>
<td>Redundant cast</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantCatchClause</td>
<td>Code Redundancies</td>
<td>Redundant catch clause</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantCollectionInitializerElementBraces</td>
<td>Code Redundancies</td>
<td>Redundant braces in collection initializer</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantDefaultFieldInitializer</td>
<td>Code Redundancies</td>
<td>Redundant field initializer</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantDelegateCreation</td>
<td>Code Redundancies</td>
<td>Explicit delegate creation expression is redundant</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantEmptyFinallyBlock</td>
<td>Code Redundancies</td>
<td>Redundant empty finally block</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantEmptyObjectCreationArgumentList</td>
<td>Code Redundancies</td>
<td>Redundant empty argument list on object creation expression</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantEmptyObjectOrCollectionInitializer</td>
<td>Code Redundancies</td>
<td>Redundant empty object or collection initializer</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantExplicitArrayCreation</td>
<td>Code Redundancies</td>
<td>Redundant explicit type in array creation</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantExplicitArraySize</td>
<td>Code Redundancies</td>
<td>Redundant explicit size specification in array creation</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantExplicitNullableCreation</td>
<td>Code Redundancies</td>
<td>Redundant explicit nullable type creation</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantExtendsListEntry</td>
<td>Code Redundancies</td>
<td>Redundant class or interface specification in base types list</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantIfElseBlock</td>
<td>Code Redundancies</td>
<td>Redundant &#8216;else&#8217; keyword</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantLambdaParameterType</td>
<td>Code Redundancies</td>
<td>Redundant lambda parameter explicit type specification</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantLambdaSignatureParentheses</td>
<td>Code Redundancies</td>
<td>Redundant lambda signature parentheses</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantNameQualifier</td>
<td>Code Redundancies</td>
<td>Redundant name qualifier</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantOverridenMember</td>
<td>Code Redundancies</td>
<td>Redundant member override</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantParams</td>
<td>Code Redundancies</td>
<td>&#8216;params&#8217; modifier is always ignored on overrides</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantStringToCharArrayCall</td>
<td>Code Redundancies</td>
<td>Redundant &#8217;string.ToCharArray()&#8217; call</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantThisQualifier</td>
<td>Code Redundancies</td>
<td>Redundant &#8216;this.&#8217; qualifier</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantToStringCall</td>
<td>Code Redundancies</td>
<td>Redundant &#8216;object.ToString()&#8217; call</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantTypeArgumentsOfMethod</td>
<td>Code Redundancies</td>
<td>Redundant type arguments of method</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantUnsafeContext</td>
<td>Code Redundancies</td>
<td>Unsafe context declaration is redundant</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RedundantUsingDirective</td>
<td>Code Redundancies</td>
<td>Redundant using directive</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>ReferenceEqualsWithValueType</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>&#8216;Object.ReferenceEquals&#8217; is always false because it is called with value type</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RequiredBaseTypesConflict</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Required base type conflicting another type</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RequiredBaseTypesDirectConflict</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Type specified in BaseTypeRequired attribute conflicts another type</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>RequiredBaseTypesIsNotInherited</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Base type is required</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>SealedMemberInSealedClass</td>
<td>Code Redundancies</td>
<td>Sealed member in sealed class</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnaccessedField.Local</td>
<td>Code Redundancies</td>
<td>Unaccessed field - Private accessibility</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnsupportedRequiredBaseType</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>BaseTypeRequired attribute supports only classes and interfaces</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnusedAnonymousMethodSignature</td>
<td>Code Redundancies</td>
<td>Anonymous method signature is not necessary</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnusedAutoPropertyAccessor.Global</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Auto-implemented property accessor is never used - Non-private accessibility</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnusedAutoPropertyAccessor.Local</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>Auto-implemented property accessor is never used - Private accessibility</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnusedMember.Local</td>
<td>Code Redundancies</td>
<td>  &#8220;&#8221;Unused declaration - Private accessibility</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnusedMethodReturnValue.Local</td>
<td>Code Redundancies</td>
<td>Method return value is never used - Private accessibility</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnusedParameter.Local</td>
<td>Code Redundancies</td>
<td>Unused parameter - Private accessibility</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>UnusedTypeParameter</td>
<td>Code Redundancies</td>
<td>Unused type parameter</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
<tr>
<td>ValueParameterNotUsed</td>
<td>Potential Errors &#038; Bad Practices</td>
<td>&#8216;value&#8217; parameter is not used</td>
<td> <span style="background-color: #f90">WARNING</span></td>
</tr>
</table>
<p><script type="text/javascript">
$('#rs45-settings').hide();
</script></p>
<p>Apologies for the formatting; you can also <a href="/blog_content/uploads/2010/05/resharper45-inspections-settings.csv">download the CSV</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2010/05/24/resharper-45-inspection-severity-list/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Named Reader Writer Lock in C#</title>
		<link>http://unintelligible.org/blog/2009/10/20/named-reader-writer-lock-in-c/</link>
		<comments>http://unintelligible.org/blog/2009/10/20/named-reader-writer-lock-in-c/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 21:17:37 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[.net]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=180</guid>
		<description><![CDATA[A while ago, I found an article about implementing a named lock class in C#, allowing for the following code:

private static NamedLock&#60;string&#62; namedLock = new NamedLock&#60;/string&#62;&#60;string&#62;&#40;&#41;;
public void DoSomethingConcurrent&#40;string lockName&#41;
&#123;
    using &#40;namedLock.Lock&#40;lockName&#41;&#41;
    &#123;
       //Do something concurrent
    &#125;
&#125;
&#60;/string&#62;

This is useful because it [...]]]></description>
			<content:encoded><![CDATA[<p>A while ago, I found an article about implementing a <a href="http://tryingthisagain.com/2008/01/30/a-basic-namedlock-class/" target="_blank">named lock class in C#</a>, allowing for the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="color: #dcdccc; background-color: #3f3f3f; padding: 5px;"><span style="color: #F0DFAF;font-weight:bold;">private</span> <span style="color: #F0DFAF;font-weight:bold;">static</span> NamedLock<span style="color: #F0EFD0;">&lt;</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;</span> namedLock <span style="color: #F0EFD0;">=</span> <span style="color: #F0DFAF; font-weight:bold;">new</span> NamedLock<span style="color: #F0EFD0;">&lt;/</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;&lt;</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;</span><span style="color: #DCDCCC;">&#40;</span><span style="color: #DCDCCC;">&#41;</span><span style="color: #F0EFD0;">;</span>
<span style="color: #F0DFAF;font-weight:bold;">public</span> <span style="color: #F0DFAF;font-weight:bold;">void</span> DoSomethingConcurrent<span style="color: #DCDCCC;">&#40;</span><span style="color: #F0DFAF;font-weight:bold;">string</span> lockName<span style="color: #DCDCCC;">&#41;</span>
<span style="color: #DCDCCC;">&#123;</span>
    <span style="color: #F0DFAF;font-weight:bold;">using</span> <span style="color: #DCDCCC;">&#40;</span>namedLock.<span style="color: #F0DFAF;font-weight:bold;">Lock</span><span style="color: #DCDCCC;">&#40;</span>lockName<span style="color: #DCDCCC;">&#41;</span><span style="color: #DCDCCC;">&#41;</span>
    <span style="color: #DCDCCC;">&#123;</span>
       <span style="color: #7F9F7F; font-style: italic;">//Do something concurrent</span>
    <span style="color: #DCDCCC;">&#125;</span>
<span style="color: #DCDCCC;">&#125;</span>
<span style="color: #F0EFD0;">&lt;/</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;</span></pre></div></div>

<p>This is useful because it allows the same code block to be run concurrently, with locking occurring depending on the arguments being passed in. The author thought it might be useful to have some reader-writer type functionality added in too though; since I had a similar requirement, I wrote a named reader-writer lock, based partly on the NamedLock posted above but using a ReaderWriterLockSlim as the underlying lock rather than a simple Monitor.</p>
<p>I&#8217;ve posted <a href="http://github.com/unintelligible/NamedReaderWriterLockSlim">the code to Github</a>, including a unit test suite. The most interesting file is <a href="http://github.com/unintelligible/NamedReaderWriterLockSlim/blob/master/NamedReaderWriterLock/NamedReaderWriterLockSlim.cs">the class itself</a>. Usage is almost identical to the <a href="http://github.com/unintelligible/NamedReaderWriterLockSlim/blob/master/NamedReaderWriterLock/NamedLock.cs">NamedLock</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="color: #dcdccc; background-color: #3f3f3f; padding: 5px;"><span style="color: #F0DFAF;font-weight:bold;">private</span> <span style="color: #F0DFAF;font-weight:bold;">static</span> NamedReaderWriterLock<span style="color: #F0EFD0;">&lt;</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;</span> namedRWLock <span style="color: #F0EFD0;">=</span> <span style="color: #F0DFAF; font-weight:bold;">new</span> NamedReaderWriterLock<span style="color: #F0EFD0;">&lt;/</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;&lt;</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;</span><span style="color: #DCDCCC;">&#40;</span><span style="color: #DCDCCC;">&#41;</span><span style="color: #F0EFD0;">;</span>
<span style="color: #F0DFAF;font-weight:bold;">public</span> <span style="color: #F0DFAF;font-weight:bold;">void</span> DoSomethingConcurrent<span style="color: #DCDCCC;">&#40;</span><span style="color: #F0DFAF;font-weight:bold;">string</span> lockName<span style="color: #DCDCCC;">&#41;</span>
<span style="color: #DCDCCC;">&#123;</span>
    <span style="color: #F0DFAF;font-weight:bold;">using</span> <span style="color: #DCDCCC;">&#40;</span>namedRWLock.<span style="color: #EFEF8F;">LockRead</span><span style="color: #DCDCCC;">&#40;</span>lockName<span style="color: #DCDCCC;">&#41;</span><span style="color: #DCDCCC;">&#41;</span>
    <span style="color: #DCDCCC;">&#123;</span>
       <span style="color: #7F9F7F; font-style: italic;">//Do something concurrent that only requires </span>
       <span style="color: #7F9F7F; font-style: italic;">//read access to the resource</span>
    <span style="color: #DCDCCC;">&#125;</span>
    <span style="color: #F0DFAF;font-weight:bold;">using</span> <span style="color: #DCDCCC;">&#40;</span>namedRWLock.<span style="color: #EFEF8F;">LockUpgradeableRead</span><span style="color: #DCDCCC;">&#40;</span>lockName<span style="color: #DCDCCC;">&#41;</span><span style="color: #DCDCCC;">&#41;</span>
    <span style="color: #DCDCCC;">&#123;</span>
       <span style="color: #7F9F7F; font-style: italic;">//Do something concurrent that only requires </span>
       <span style="color: #7F9F7F; font-style: italic;">//read access to the resource, but that may require</span>
       <span style="color: #7F9F7F; font-style: italic;">//upgrading to a Write lock later in the code</span>
    <span style="color: #DCDCCC;">&#125;</span>
    <span style="color: #F0DFAF;font-weight:bold;">using</span> <span style="color: #DCDCCC;">&#40;</span>namedRWLock.<span style="color: #EFEF8F;">LockWrite</span><span style="color: #DCDCCC;">&#40;</span>lockName<span style="color: #DCDCCC;">&#41;</span><span style="color: #DCDCCC;">&#41;</span>
    <span style="color: #DCDCCC;">&#123;</span>
       <span style="color: #7F9F7F; font-style: italic;">//Do something concurrent that requires </span>
       <span style="color: #7F9F7F; font-style: italic;">//write access to the resource</span>
    <span style="color: #DCDCCC;">&#125;</span>
<span style="color: #DCDCCC;">&#125;</span>
<span style="color: #F0EFD0;">&lt;/</span><span style="color: #F0DFAF;font-weight:bold;">string</span><span style="color: #F0EFD0;">&gt;</span></pre></div></div>

<p>Performance-wise, the reader-writer functionality does seem to improve concurrent access over the named lock; here&#8217;s the output of the <a href="http://github.com/unintelligible/NamedReaderWriterLockSlim/blob/master/NamedReaderWriterLock/PerformanceTests.cs">performance tests</a> running on my machine:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="color: #dcdccc; background-color: #3f3f3f; padding: 5px;">NameLock_vs_NamedReaderWriterLockSlim_PerformanceTest_Balanced
&nbsp;
Run <span style="color: #cc66cc;">1</span> - finished NamedRWLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">3734</span>.2794ms
Run <span style="color: #cc66cc;">1</span> - finished NamedLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">5499</span>.8592ms
Run <span style="color: #cc66cc;">1</span> - finished Monitor run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">5468</span>.61ms
Run <span style="color: #cc66cc;">2</span> - finished NamedRWLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">3609</span>.2826ms
Run <span style="color: #cc66cc;">2</span> - finished NamedLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">5468</span>.61ms
Run <span style="color: #cc66cc;">2</span> - finished Monitor run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">5468</span>.61ms
Run <span style="color: #cc66cc;">3</span> - finished NamedRWLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">3609</span>.2826ms
Run <span style="color: #cc66cc;">3</span> - finished NamedLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">5468</span>.61ms
Run <span style="color: #cc66cc;">3</span> - finished Monitor run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">5515</span>.4838ms
&nbsp;
<span style="color: #cc66cc;">3</span> passed, <span style="color: #cc66cc;">0</span> failed, <span style="color: #cc66cc;">0</span> skipped, took <span style="color: #cc66cc;">47.92</span> seconds.
&nbsp;
NameLock_vs_NamedReaderWriterLockSlim_PerformanceTest_SkewedRead
&nbsp;
Run <span style="color: #cc66cc;">1</span> - finished NamedRWLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">6656</span>.0796ms
Run <span style="color: #cc66cc;">1</span> - finished NamedLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">8843</span>.5236ms
Run <span style="color: #cc66cc;">1</span> - finished Monitor run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">8812</span>.2744ms
Run <span style="color: #cc66cc;">2</span> - finished NamedRWLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">6562</span>.332ms
Run <span style="color: #cc66cc;">2</span> - finished NamedLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">8812</span>.2744ms
Run <span style="color: #cc66cc;">2</span> - finished Monitor run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">8812</span>.2744ms
Run <span style="color: #cc66cc;">3</span> - finished NamedRWLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">6562</span>.332ms
Run <span style="color: #cc66cc;">3</span> - finished NamedLock run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">8812</span>.2744ms
Run <span style="color: #cc66cc;">3</span> - finished Monitor run <span style="color: #00b100; font-weight: bold;">in</span> <span style="color: #cc66cc;">8812</span>.2744ms
&nbsp;
<span style="color: #cc66cc;">3</span> passed, <span style="color: #cc66cc;">0</span> failed, <span style="color: #cc66cc;">0</span> skipped, took <span style="color: #cc66cc;">76.59</span> seconds.</pre></div></div>

<p>These tests compare the performance of the NamedReaderWriterLock with the NamedLock, using a standard Monitor as a control value. The first set of tests balances reads and writes, whereas the second performs four times more reads than writes (and likely reflects real-life scenarios more closely.)</p>
<p>The NamedReaderWriterLock provided around 35% improvement over the NamedLock in the test where as many writes as reads are performed, and a 25% improvement in the test skewed towards reads. This is a reasonably figure, although in the greater scheme of things it&#8217;s likely to be a only a minor improvement compared to the cost of, say, making a DB call; still, it&#8217;s worth having.</p>
<p>The code is available under the BSD license.</p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2009/10/20/named-reader-writer-lock-in-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installing Selenium-RC as a Windows service</title>
		<link>http://unintelligible.org/blog/2009/07/28/installing-selenium-rc-as-a-windows-service/</link>
		<comments>http://unintelligible.org/blog/2009/07/28/installing-selenium-rc-as-a-windows-service/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 21:08:46 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[testing]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=171</guid>
		<description><![CDATA[Installing Selenium as a Windows service is reasonably straightforward - based on the instructions for Fitnesse, which unfortunately seem to have been deleted from the Fitnesse wiki, but which have been reproduced here.
There are two parts to doing this - the first, registering the service using srvany.exe (which wraps any executable as a service), and [...]]]></description>
			<content:encoded><![CDATA[<p>Installing Selenium as a Windows service is reasonably straightforward - based on the <a title="Installing Fitnesse as a service" href="http://fitnesse.org/InstallingFitNesseAsaService" target="_blank">instructions for Fitnesse</a>, which unfortunately seem to have been deleted from the Fitnesse wiki, but which have <a title="Installing Fitnesse as a service" href="http://blog.novigo.pl/?p=3D188" target="_blank">been reproduced here</a>.</p>
<p>There are two parts to doing this - the first, registering the service using <code>srvany.exe</code> (which wraps any executable as a service), and the second, adding the keys to the registry to tell srvany.exe how to launch Selenium-RC. <code>srvany.exe</code> is a part of the Windows Resource Kit, if you don&#8217;t have it already you will need to <a title="Windows Resource Kit from Microsoft.com" href="http://search.microsoft.com/results.aspx?qsc0=0&amp;q=windows+resource+kit&amp;x=0&amp;y=0&amp;mkt=en-US&amp;FORM=QBME1&amp;l=1" target="_blank">download it from Microsoft</a>.</p>
<p>The following will register the Selenium service - on the command line (all in one line):</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="color: #dcdccc; background-color: #3f3f3f; padding: 5px;">&quot;C:\Program Files\Windows Resource Kits\Tools\instsrv.exe&quot; SeleniumRC
&quot;C:\Program Files\Windows Resource Kits\Tools\srvany.exe&quot; -a <span style="color: #66cc66;">&#91;</span>myuser<span style="color: #66cc66;">&#93;</span> -p <span style="color: #66cc66;">&#91;</span>mypass<span style="color: #66cc66;">&#93;</span></pre></div></div>

<p>This is assuming the Windows Resource Kit has been installed to its default location, &#8220;C:\Program Files\Windows Resource Kits&#8221;. Also, note that the user supplied needs to have the Log On As Service permissions assigned.</p>
<p>Now, add the following keys to the registry - this text can simply be copied-and-pasted to a .reg file, then double-clicked to add the entries to the registry:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="color: #dcdccc; background-color: #3f3f3f; padding: 5px;">Windows Registry Editor Version <span style="color: #cc66cc;">5.00</span>
<span style="color: #66cc66;">&#91;</span>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SeleniumRC\Parameters<span style="color: #66cc66;">&#93;</span>
&quot;Application&quot;=&quot;java.exe&quot;
&quot;AppDirectory&quot;=&quot;C:\\Program Files\\selenium-server<span style="color: #cc66cc;">-1.0</span><span style="color: #cc66cc;">.1</span>&quot;
&quot;AppParameters&quot;=&quot;-Xrs -jar selenium-server.jar&quot;</pre></div></div>

<p>You should now be able to start the service - if you get an error about the service failing to start due to a logon issue, make sure that the user you are using to run the service has been granted Log On As A Service permission (editing the service logon credentials in the Services MMC snap-in and saving the changes will cause this to happen automatically.)</p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2009/07/28/installing-selenium-rc-as-a-windows-service/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rubyists and Photographers, slight return</title>
		<link>http://unintelligible.org/blog/2009/03/08/rubyists-and-photographers-slight-return/</link>
		<comments>http://unintelligible.org/blog/2009/03/08/rubyists-and-photographers-slight-return/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 12:15:33 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/2009/03/08/rubyists-and-photographers-slight-return/</guid>
		<description><![CDATA[A few months ago, I posted an entry on how Rubyists sometimes get distracted by the power of the language, preferring lengthy debates on programming aesthetics to actually writing (efficient) code. I compared this to photography, in which aspiring photographers sometimes get lost in technical discussions rather than focussing on the work they produce. Then [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago, I posted an entry on how <a href="http://unintelligible.org/blog/2007/07/13/rubyists-and-photographers/" target="_blank">Rubyists sometimes get distracted by the power of the language</a>, preferring lengthy debates on programming aesthetics to actually writing (efficient) code. I compared this to photography, in which aspiring photographers sometimes get lost in technical discussions rather than focussing on the work they produce. Then I came across this quote, which concisely expresses in 3 sentences what I hadn&#8217;t managed in an entire post:</p>
<blockquote><p>Every medium suffers from its own particular handicap. Photography&#8217;s greatest handicap is the ease with which the medium as such can be learned. As a result, too many budding neophytes learn to speak the language too long before they have anything to say.</p></blockquote>
<p>(Will Connell, 1949, via <a href="http://pdml.net/pipermail/pdml_pdml.net/2009-March/162728.html" target="_blank">Brendan MacRae</a>, via <a href="http://www.tbray.org/ongoing/When/200x/2009/03/04/Too-Easy" target="_blank">Tim Bray</a>)</p>
<p>The point of my original post was that the same may apply to Ruby; the language&#8217;s power and accessibility makes everything seem so easy, that it becomes tempting to engage in discussions about the finer points of programming aesthetics rather than focussing what one has to say (i.e. the problems one chooses to solve.)</p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2009/03/08/rubyists-and-photographers-slight-return/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Adding a Windows service using sc</title>
		<link>http://unintelligible.org/blog/2009/03/08/adding-a-windows-service-using-sc/</link>
		<comments>http://unintelligible.org/blog/2009/03/08/adding-a-windows-service-using-sc/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 11:53:03 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/2009/03/08/adding-a-windows-service-using-sc/</guid>
		<description><![CDATA[The &#8216;sc&#8216; utility can be used to create, delete or edit a Windows service. It can be used for any executables (as opposed to installutil, which can only be used for .Net services). Its help is available using sc /help (and is also available on MSDN); however, I found the output slightly confusing, so for [...]]]></description>
			<content:encoded><![CDATA[<p>The &#8216;<code>sc</code>&#8216; utility can be used to create, delete or edit a Windows service. It can be used for any executables (as opposed to <code>installutil</code>, which can only be used for .Net services). Its help is available using <code>sc /help</code> (and is also <a href="http://support.microsoft.com/kb/251192" target="_blank">available on MSDN</a>); however, I found the output slightly confusing, so for my own reference here&#8217;s an example for creating a service for the Subversion server:</p>

<div class="wp_syntax"><div class="code"><pre class="dos" style="color: #dcdccc; background-color: #3f3f3f; padding: 5px;">sc create svnserve binPath= &quot;\&quot;C:\Program Files\CollabNet Subversion Server\svnserve.exe\&quot; 
  --service -r \&quot;c:\svn_repository\&quot; --listen-port \&quot;<span style="color: #cc66cc;">3690</span>\&quot;&quot; DisplayName= &quot;Subversion Server&quot;</pre></div></div>

<p>This passes two parameters, the binPath and the DisplayName (the rest are the directives Subversion expects when running as a service). The trick here is the space between the &#8216;=&#8217; sign after the parameter name and the parameter value; the service won&#8217;t be installed otherwise.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=3b349ab3-2a88-4a7e-8eae-0c11c8d78100" /></div>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2009/03/08/adding-a-windows-service-using-sc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mona Lisa image evolution in Ruby (JRuby)</title>
		<link>http://unintelligible.org/blog/2009/02/02/mona-lisa-image-evolution-in-ruby-jruby/</link>
		<comments>http://unintelligible.org/blog/2009/02/02/mona-lisa-image-evolution-in-ruby-jruby/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 19:50:48 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=148</guid>
		<description><![CDATA[Like several other people, I was fascinated by Roger Alsing&#8217;s post shortly before Christmas describing his program to evolve an image look like Leonardo&#8217;s Mona Lisa, using only semi-transparent polygons. This uses genetic programming (or perhaps more accurately, simulated annealing, a Monte Carlo method) to evolve an image, comparing each evolved image to its parent [...]]]></description>
			<content:encoded><![CDATA[<p>Like several other people, I was fascinated by <a href="http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/" target="_blank">Roger Alsing&#8217;s post</a> shortly before Christmas describing his program to evolve an image look like Leonardo&#8217;s Mona Lisa, using only semi-transparent polygons. This uses genetic programming (or perhaps more accurately, <a href="http://en.wikipedia.org/wiki/Simulated_Annealing" target="_blank">simulated annealing</a>, a <a href="http://en.wikipedia.org/wiki/Monte_Carlo_method" target="_blank">Monte Carlo method</a>) to evolve an image, comparing each evolved image to its parent and deciding whether it is closer to the target image; if it is closer to the target, the image is retained and then evolved further.</p>
<p>Since Roger <a href="http://code.google.com/p/alsing/downloads/list" target="_blank">released his source code</a>, there have been several other implementations in different languages, such as <a href="http://alteredqualia.com/visualization/evolve/" target="_blank">Javascript</a> and <a href="http://npcontemplation.blogspot.com/2009/01/clojure-genetic-mona-lisa-problem-in.html" target="_blank">Clojure</a>. I thought that converting the program to another language would be an excellent way to understand how it  works; so, I converted it to Ruby (actually JRuby, as Swing is used for drawing the images and the user interface).</p>
<p><a href="http://unintelligible.org/blog/wp-content/uploads/2009/02/monalisa-screenshot.png"><img src="http://unintelligible.org/blog/wp-content/uploads/2009/02/monalisa-screenshot-300x206.png" alt="" title="Mona Lisa screenshot" width="300" height="206" class="alignnone size-medium wp-image-153" /></a></p>
<p>I&#8217;ve <a href="http://github.com/unintelligible/montecarlomonalisa" target="_blank">uploaded the code to GitHub</a>; my implementation is pretty much a straight port of Roger Alsing&#8217;s original code though, and generally speaking it&#8217;s a little quick and dirty; I may eventually spend a little time tidying and/or optimising it, but as of yet it isn&#8217;t either elegant or fast. </p>
<p>This short clip shows the evolution of the selected candidates over 75000 generations (around four hours on my machine).</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/hJiJPSkND_M&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/hJiJPSkND_M&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2009/02/02/mona-lisa-image-evolution-in-ruby-jruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Touch typing update - one year after</title>
		<link>http://unintelligible.org/blog/2009/01/10/touch-typing-update-one-year-after/</link>
		<comments>http://unintelligible.org/blog/2009/01/10/touch-typing-update-one-year-after/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 14:20:44 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[dvorak]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=119</guid>
		<description><![CDATA[It&#8217;s been a year now since I switched to the Dvorak keyboard layout and learned to touch-type, so it seemed like a good time to assess progress so far.
I now consistently type between 60 and 70 WPM, depending on the day and the text I need to type. I&#8217;m reasonably happy with this, but when [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a year now since I switched to the Dvorak keyboard layout and learned to touch-type, so it seemed like a good time to assess progress so far.</p>
<p>I now consistently type between 60 and 70 WPM, depending on the day and the text I need to type. I&#8217;m reasonably happy with this, but when I originally switched, I was hoping that I would get up to 80-90WPM within a year. Also, I can&#8217;t really touch-type numbers, and I usually need to look at the keyboard to type some of the non alpha-numerical numbers that get used often when developing (e.g. &#8216;[', ']&#8216;, &#8216;$&#8217;, &#8216;^&#8217; etc.). Finally, typing still hasn&#8217;t really become as automatic as I&#8217;d hoped it would; to achieve high speeds, I still need to concentrate on typing, whereas I was hoping that I would have interned the typing to an extent that I didn&#8217;t really need to think about it anymore.</p>
<p>So, I think I&#8217;m going to start practicing again (in fact, I already started a little over Xmas). I&#8217;m kind of hoping to have resolved all of the above by June this year, so that I can finally stop thinking about typing <img src='http://unintelligible.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2009/01/10/touch-typing-update-one-year-after/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Event Log access permissions for ASP.NET application pools</title>
		<link>http://unintelligible.org/blog/2008/12/01/event-log-access-permissions-for-aspnet-application-pools/</link>
		<comments>http://unintelligible.org/blog/2008/12/01/event-log-access-permissions-for-aspnet-application-pools/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 18:43:25 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
		
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://unintelligible.org/blog/?p=114</guid>
		<description><![CDATA[When running an application pool in IIS under a different user than the default, for an application that requires write access to the Event Log (for example, when trying to create a new event source in your application), it is necessary to grant that user sufficient access to the event log in the registry. Otherwise, [...]]]></description>
			<content:encoded><![CDATA[<p>When running an application pool in IIS under a different user than the default, for an application that requires write access to the Event Log (for example, when trying to create a new event source in your application), it is necessary to grant that user sufficient access to the event log in the registry. Otherwise, you would receive the following error:</p>
<pre>System.Security.SecurityException: Requested registry access is not allowed.</pre>
<p>However, using Windows 2003 Server, I found that granting &#8216;read&#8217; access to the event log wasn&#8217;t enough; the full set of permissions I ended up need to grant to the app pool user on the <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog</code> key in the registry is as follows:</p>
<div class="mceTemp">
<dl id="attachment_115" class="wp-caption alignnone" style="width: 376px;">
<dt class="wp-caption-dt"><a href="http://unintelligible.org/blog/wp-content/uploads/2008/12/permissions-for-event-log-access-in-iis.png"><img class="size-full wp-image-115" title="Permissions for event log access in IIS" src="http://unintelligible.org/blog/wp-content/uploads/2008/12/permissions-for-event-log-access-in-iis.png" alt="Permissions for event log access in IIS" width="366" height="467" /></a></dt>
</dl>
</div>
<p>I hope that this helps someone.</p>
]]></content:encoded>
			<wfw:commentRss>http://unintelligible.org/blog/2008/12/01/event-log-access-permissions-for-aspnet-application-pools/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

