<?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>One Man's Trash ...</title>
	<atom:link href="http://softwareflotsam.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://softwareflotsam.wordpress.com</link>
	<description>is another man's treasure</description>
	<lastBuildDate>Sun, 31 Jan 2010 21:33:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='softwareflotsam.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>One Man's Trash ...</title>
		<link>http://softwareflotsam.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://softwareflotsam.wordpress.com/osd.xml" title="One Man&#039;s Trash ..." />
	<atom:link rel='hub' href='http://softwareflotsam.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Continuous Integration</title>
		<link>http://softwareflotsam.wordpress.com/2010/01/31/continuous-integration-2/</link>
		<comments>http://softwareflotsam.wordpress.com/2010/01/31/continuous-integration-2/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 21:33:04 +0000</pubDate>
		<dc:creator>ericgunn</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[CCNet]]></category>
		<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://softwareflotsam.wordpress.com/2010/01/31/continuous-integration-2/</guid>
		<description><![CDATA[I&#8217;m diving into CI and am setting up a CI system for the first time at home. I&#8217;m going to document the setup as I go, mostly for myself, but maybe it will help someone else that wants to set up a CI system for the first time. Assuming this all works: CI Server CCNet [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=softwareflotsam.wordpress.com&amp;blog=6308510&amp;post=91&amp;subd=softwareflotsam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m diving into CI and am setting up a CI system for the first time at home. I&#8217;m going to document the setup as I go, mostly for myself, but maybe it will help someone else that wants to set up a CI system for the first time. Assuming this all works:</p>
<table cellspacing="0" cellpadding="2" width="400" border="0">
<tbody>
<tr>
<td valign="top" width="200">CI Server</td>
<td valign="top" width="200"><a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET">CCNet</a> v1.4.4.83</td>
</tr>
<tr>
<td valign="top" width="200">Source Control </td>
<td valign="top" width="200">VisualSVN (subversion)          </td>
</tr>
<tr>
<td valign="top" width="200">Build Script</td>
<td valign="top" width="200">NAnt</td>
</tr>
<tr>
<td valign="top" width="200">Tests</td>
<td valign="top" width="200">Tests </td>
</tr>
<tr>
<td valign="top" width="200">Other</td>
<td valign="top" width="200">CI Factory v1.0.1.5</td>
</tr>
<tr>
<td valign="top" width="200">&#160;</td>
<td valign="top" width="200"><a href="http://www.codeplex.com/CCNetBuildStation">CCNet Build Station</a> v1.0</td>
</tr>
</tbody>
</table>
<p>My goal is to get a minimal CI system up and running.&#160; The system should get changes from source control when changes are committed, build the project, execute any tests and report the results.&#160; This installation will be configured for a single project.&#160; I’ll look to get more sophisticated as necessary once the basics are up and running.&#160; The most likely next step will be configuring for multiple projects.</p>
<p>I have a very basic setup at home.&#160; A desktop with Windows XP that is running VisualSVN and a laptop, also Windows XP that I do my work on and that will run the CI system.&#160; </p>
<p>So let’s get started.</p>
<h3>Install VisualSVN </h3>
<p>I have had VisualSVN running for some time now.&#160; As I recall the installation is well documented and very easy so I’m not going to go through the steps here.&#160; </p>
<h3>Install&#160; CCNet&#160; </h3>
<h4>I used the zip file installation.&#160; Create a folder for the CC.Net files and copy the contents of the CruiseControl zip file.&#160; I’ll refer to that folder as CC_Home.</h4>
<p>After the Cruise Control files are copied to CC_Home you’ll need to configure the server (see <a href="http://confluence.public.thoughtworks.org/display/CCNET/CruiseControl.NET+Server">CCNet Quick Start</a>).&#160; Find the file CC_Home\server\ccnet.config and open with your favorite XML editor.&#160; </p>
<ul>
<li>Configure the project element with the details of the project you’re configuring. </li>
</ul>
<ol>
<li>Set project name:&#160;&#160;
<pre>&lt;project name=&quot;TwentySevenQ&quot;&gt; ... &lt;/project&gt;</pre>
<p>.&#160; The following elements are children of &lt;project&gt; </li>
<li>Set the project working directory.&#160; This is where the checked out versions of the project files.&#160;
<pre>&lt;workingDirectory&gt;{your projects root}\TwentySevenQ&lt;/workingDirectory&gt;</pre>
</li>
<li>Set the artifact directory.&#160; This is where artifacts of the build process will be created.&#160; Things like assemblies, build logs, etc.&#160; It’s like the folder you’d specify if you published your project from Visual Studio.&#160;
<pre>&lt;artifactDirectory&gt;{your projects root}\TwentySevenQ\publish&lt;/artifactDirectory&gt;</pre>
</li>
</ol>
<p>Create a Windows service to automatically start the CI server.&#160; As an alternative you can create a short cut to only start the server when you’re working and need it.</p>
<h3>Install CCNet Build Station</h3>
<p>I don’t have a running version of IIS at home so can not run the CC.Net Web Dashboard.&#160; For that reason I use CCNet Build Station found on Codeplex.&#160; From the project description:</p>
<blockquote>
<p>The CCNet Build Station is a Windows Forms application that runs the CruiseControl.NET Continuous Integration Build Server without installation and without depending on IIS by using a provided version of the Cassini web server. Ideal for providing a local build server</p>
</blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwareflotsam.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwareflotsam.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwareflotsam.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwareflotsam.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwareflotsam.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwareflotsam.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwareflotsam.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwareflotsam.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwareflotsam.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwareflotsam.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwareflotsam.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwareflotsam.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwareflotsam.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwareflotsam.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=softwareflotsam.wordpress.com&amp;blog=6308510&amp;post=91&amp;subd=softwareflotsam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://softwareflotsam.wordpress.com/2010/01/31/continuous-integration-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Eric Gunn</media:title>
		</media:content>
	</item>
		<item>
		<title>The pleasure of simple things</title>
		<link>http://softwareflotsam.wordpress.com/2009/03/03/the-pleasure-of-simple-things/</link>
		<comments>http://softwareflotsam.wordpress.com/2009/03/03/the-pleasure-of-simple-things/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 04:02:04 +0000</pubDate>
		<dc:creator>ericgunn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Extension methods]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Reflection]]></category>

		<guid isPermaLink="false">http://softwareflotsam.wordpress.com/?p=40</guid>
		<description><![CDATA[Ever want to use Reflection but turned back after taking a look at the API.  With a little work, very little, using Reflection can be as easy as using plain old properties.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=softwareflotsam.wordpress.com&amp;blog=6308510&amp;post=40&amp;subd=softwareflotsam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Reflection is one of the features of .Net that when used with care can provide great power and flexibility. Its use is often discouraged as being &#8220;slow&#8221;, though it&#8217;s used to enable many features of .Net that are core to .Net&#8217;s power. It&#8217;s as though Reflection is &#8220;good&#8221; when the framework uses it without the need to get our hands dirty, but &#8220;bad&#8221; if we actually dare use it directly. Sure, it&#8217;s slower then using typed references. But what is too &#8220;slow&#8221;? Does a solution using Reflection make it impossible to meet your performance requirements? Do you have a formal performance requirement? </p>
<p>There are some solutions that can be implemented quite easily with Reflection that would be painful to do without. One thing about Reflection that often got in my way is its complexity. Like many powerful features there&#8217;s a lot of options to consider when Reflecting. Or is there? While there are all kinds of things you CAN do, there&#8217;s probably a very small subset that you&#8217;ll actually need 90% of the time.
</p>
<p>So how to make life easier? Certainly a nice Facade to simplify the API, but I never really had one I liked/was comfortable enough with to use Reflection regularly.
</p>
<p>Enter extension methods. Using some simple extension methods I now have a Reflection Facade that is natural and trivial to use. One day I was doing some Javascript work and really enjoying the simplicity of statements like</p>
<pre>
<div class="code">
for (prop in myObj) {
  fn( myObj[prop] );
}
</div>
</pre>
<p>to operate on all the properties of an object. I wanted to be able to do something similar in .Net. The first order of business was to easily get all properties of an object</p>
<pre>
<div class="code">
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Linq; 

namespace Extensions.Reflection {
  public static class ObjectExtension {
    public static IEnumerable Properties(this object obj) {
      BindingFlags flags = BindingFlags.Instance | BindingFlags.Public |
                                 BindingFlags.GetProperty;
      var propInfos = obj.GetType().GetProperties(flags);
      return (from property in propInfos select property.Name);
    }
  }
}</div>
</pre>
<p>That will allow the following on any object </p>
<pre>
<div class="code">
using Extensions.Reflection;
...
for (var prop in myObj.Properties()) {
   ...
}
</div>
</pre>
<p>Next let&#8217;s get a property&#8217;s value :</p>
<pre>
<div class="code">
public static object Properties(this object obj, string property) {
  BindingFlags flags = BindingFlags.Instance | BindingFlags.Public |
                             BindingFlags.GetProperty;
  var propInfo = obj.GetType().GetProperty(property, flags);
  return propInfo.GetValue(obj, flags &amp; BindingFlags.GetProperty,
                                    null, null, null); }
</div>
</pre>
<p>to get us to </p>
<div class="code">
<pre>
for (var prop in myObj.Properties()) {
  fn( myObj.Properties(prop) );
}
</pre>
</div>
<p>Because PropInfo.GetValue returns an object it may be necessary to cast the return value in the caller. So let&#8217;s add one more method that can be used if the return type is known.</p>
<pre>
<div class="code">
public static T Properties&lt;T&gt;(this object obj, string property) {
  BindingFlags flags = BindingFlags.Instance | BindingFlags.Public |
                             BindingFlags.GetProperty;
  var propInfo = GetPropertyInfo(obj, property, flags);
  return (T) propInfo.GetValue(obj, flags &amp; BindingFlags.GetProperty, null, null, null);
}
 </div>
</pre>
<p>Now, you&#8217;ll probably only use Properties&lt;T&gt; in specialized cases. If you&#8217;re going to call it with a known return type at design time you probably also know the property name and should call the property directly. But suppose you have a special generic method that you know will be calling a String property, but you won&#8217;t know which object or property until run-time. Properties&lt;String&gt; could be used to Reflectively get the property value without having to cast in the calling code.
</p>
<p>Finally, let&#8217;s set the property&#8217;s value</p>
<pre>
<div class="code">
public static object Properties(this object obj, string property, object value) {
  BindingFlags flags = BindingFlags.Instance | BindingFlags.Public |
                             BindingFlags.GetProperty;
  var propInfo = obj.GetType().GetProperty(property, flags);
  object result;
  if (propInfo.CanWrite) {
    propInfo.SetValue(obj, value, null);
    result = value;
  } else {
    result = propInfo.GetValue(obj, flags &amp; BindingFlags.GetProperty,
                                    null, null, null);
  }
return result;
} </div>
</pre>
<p>This extension method takes the property name and a value to set the property to. This implementation returns the value just set. Now, the property may be read only, in which case the method returns the current value of the property instead of the new value. You may want different behavior, but it works for me. There&#8217;s no error and I can compare the new and returned values to see if they&#8217;re different and decide what to do next. </p>
<p>Now, setting a value isn&#8217;t quite as nice as the associated Javascript, but it&#8217;s quite servicable. </p>
<p>Javascript:
<pre>
<div class="code">
for (prop in myObj) {
  myObj[prop] = aValue;
}
</div>
</pre>
<p>.Net :
<pre>
<div class="code">
for (var prop in myObj.Properties()) {
  myObj.Properties(prop, aValue);
}
</div>
</pre>
<p>Now this code ignored any Reflection exceptions for the sake of brevity. You may want to handle situations where the property doesn&#8217;t exist on the object. But it doesn&#8217;t complicate it much to add such code. </p>
<p>Reflection can do much more if you need it. You can access protected and private methods if you want, but do you need to (should you) most of the time?  No. In keeping with C# conventions the property names are case sensitive, but you could use the BindingFlags.IgnoreCase flag to be more VB like. </p>
<p>What ever your need, these simple methods make Reflection much easier to use. If you don&#8217;t need reflection, no problem. But when it would make life easier, just add <code>using Extensions.Reflection;</code> and you have full intellisense at your finger tips, property reflection on every object and a simple API.</p>
<p>I like to use Reflection where it makes the job easier, code simpler and let&#8217;s me get things done quickly.  Where it proves to be responsible for a performance issue I will re-work just that part to not use Reflection.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwareflotsam.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwareflotsam.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwareflotsam.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwareflotsam.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwareflotsam.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwareflotsam.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwareflotsam.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwareflotsam.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwareflotsam.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwareflotsam.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwareflotsam.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwareflotsam.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwareflotsam.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwareflotsam.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=softwareflotsam.wordpress.com&amp;blog=6308510&amp;post=40&amp;subd=softwareflotsam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://softwareflotsam.wordpress.com/2009/03/03/the-pleasure-of-simple-things/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Eric Gunn</media:title>
		</media:content>
	</item>
		<item>
		<title>Fun with FIPS</title>
		<link>http://softwareflotsam.wordpress.com/2009/01/25/fun-with-fips/</link>
		<comments>http://softwareflotsam.wordpress.com/2009/01/25/fun-with-fips/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 06:22:36 +0000</pubDate>
		<dc:creator>ericgunn</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[FIPS]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://softwareflotsam.wordpress.com/?p=3</guid>
		<description><![CDATA[As security becomes more and more of a concern it&#8217;s likely more companies will start enforcing the FIPS policy.  What&#8217;s FIPS you ask, Federal Information Processing Standard.  This happened recently at work and was a whole lot of fun.  FIPS specifies what cryptography providers are acceptable for use, and when the FIPS policy is enforced by [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=softwareflotsam.wordpress.com&amp;blog=6308510&amp;post=3&amp;subd=softwareflotsam&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As security becomes more and more of a concern it&#8217;s likely more companies will start enforcing the FIPS policy.  What&#8217;s FIPS you ask, <a href="http://en.wikipedia.org/wiki/FIPS_140">Federal Information Processing Standard</a>.  This happened recently at work and was a whole lot of fun.  FIPS specifies what cryptography providers are acceptable for use, and when the FIPS policy is enforced by Windows any attempt to instantiate a non-compliant .Net provider results in an exception.  Don&#8217;t think you use cryptography?  If you create Asp.Net apps then think again.  MachineKey in the *.config file specifies the cryptography algorithm used to hash/encrypt view state.  Don&#8217;t use viewstate, do you debug your web apps?  Cryptography!  So after the policy went into effect we couldn&#8217;t run web apps, or debug them, or compile them.  Good times.  A morning of Googling got things working again.  So in one convenient location here&#8217;s what worked for me.  (These changes are intended for your development workstation.  Some changes may also be needed for test and production servers.)</p>
<p>1. The default cryptography algorithm, AES, is not compliant, SHA1, DES and 3DES are:</p>
<p><span style="font-size:small;color:#0000ff;font-family:Courier New;"><span style="font-size:small;color:#0000ff;font-family:Courier New;">&lt;<span style="color:#800000;">machineKey </span><span style="color:#ff0000;">decryption</span>=<span style="color:#000000;">&#8220;</span>3DES<span style="color:#000000;">&#8220;</span> /&gt; &lt;!&#8211; or DES &#8211;&gt;</span></span></p>
<p>2.  Edit <span style="color:#1f497d;font-family:Calibri;">devenv.exe.config</span><span style="color:#000000;font-family:Verdana;">, assuming a default install it&#8217;s in <span style="color:#1f497d;font-family:Calibri;">Program Files\Microsoft Visual Studio 9.0\Common7\IDE\</span>, and add</span></p>
<pre><span style="color:#1f497d;font-family:Calibri;"><span style="color:#000000;">
<span lang="en-us"><strong><span style="color:#1f497d;font-family:Calibri;">&lt;configuration&gt;</span></strong></span>
<span lang="en-us"><strong><span style="color:#1f497d;font-family:Calibri;">    &lt;runtime&gt;</span></strong></span>
<span lang="en-us"><span style="color:#1f497d;font-family:Calibri;">        &lt;enforceFIPSPolicy enabled="0" /&gt;</span></span>
<span style="font-family:Verdana;font-size:small;">This allows VS to compile the application.</span></span></span></pre>
<p>3. Open, or create, file <span style="color:#1f497d;font-family:Calibri;">Program Files\Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.EXE.config</span> and add</p>
<pre><span lang="en-us"><strong><span style="color:#1f497d;font-family:Calibri;">&lt;?xml version ="1.0"?&gt;</span></strong></span>
<span lang="en-us"><strong><span style="color:#1f497d;font-family:Calibri;">&lt;configuration&gt;</span></strong></span>
<span lang="en-us"><strong><span style="color:#1f497d;font-family:Calibri;">    &lt;runtime&gt;</span></strong></span>
<span lang="en-us"><span style="color:#1f497d;font-family:Calibri;">        &lt;enforceFIPSPolicy enabled="0" /&gt;</span></span>
<span lang="en-us"><strong><span style="color:#1f497d;font-family:Calibri;">    &lt;/runtime&gt;</span></strong></span>
<span lang="en-us"><strong><span style="color:#1f497d;font-family:Calibri;">&lt;/configuration&gt;</span></strong></span></pre>
<p>This allow the web server to compile and run apps with   <span style="font-size:small;color:#0000ff;font-family:Courier New;">&lt;</span><span style="font-size:small;color:#a31515;font-family:Courier New;">compilation</span> <span style="font-size:small;color:#ff0000;font-family:Courier New;">debug</span><span style="font-size:small;color:#0000ff;font-family:Courier New;">=</span><span style="font-size:small;font-family:Courier New;">&#8220;</span><strong></strong><strong></strong><strong></strong><strong><span style="font-size:small;color:#0000ff;font-family:Courier New;">true</span></strong><span style="font-size:small;font-family:Courier New;">&#8220;</span><span style="font-size:small;color:#0000ff;font-family:Courier New;">&gt;</span>.</p>
<p>Another curious thing happened once the FIPS policy was enforced, the DocProject add-in wouldn&#8217;t load when I started VS.  Once enforceFIPSPolicy was disabled in devenv.exe.config it started working again.  It must load a crypto provider, but how and why it uses cypto I don&#8217;t care.  I just want it to work.</p>
<p>That got me thinking.  How do we protect our own applications from changes like this?  Knowing what I know now from this little escaped, if you use cryptography in any way then the user should be able to easily configure the provider to use.  And when the code fails because a provider isn&#8217;t acceptable to some policy the error message should be very clear why and what to do about it.</p>
<p>Every time VS failed to compile a class the Error window brought me to an import of either Microsoft.VisualBasic or System.Xml.Serialization.  Leading me to believe there was a problem with &#8230;. Microsoft.VisualBasic or System.Xml.Serialization.  A wild goose chase that was.</p>
<p>Even if you&#8217;re encrypting or hashing things for purely internal reasons, never to see the light of day, once the FIPS switch is flipped the whole thing will blow up the first time you create that provider.  It doesn&#8217;t matter if you&#8217;re encrypting bank records to ship around the world or just want some funny strings, it won&#8217;t work anymore.  Your customers won&#8217;t be very happy when that day comes.  And if you sell or provide services to the Government you can expect to encounter this.</p>
<p>Beyond cryptography, anything that deals with security or sensitive information could be a candidate for replacement, authentication and authorization methods, ACL policy, password policy, etc.  Sometimes a customer may not like a lack of flexiblity but will accept it, but sometimes it&#8217;s mandated from a higher authority and there&#8217;s little choice.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/softwareflotsam.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/softwareflotsam.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/softwareflotsam.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/softwareflotsam.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/softwareflotsam.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/softwareflotsam.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/softwareflotsam.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/softwareflotsam.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/softwareflotsam.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/softwareflotsam.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/softwareflotsam.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/softwareflotsam.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/softwareflotsam.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/softwareflotsam.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=softwareflotsam.wordpress.com&amp;blog=6308510&amp;post=3&amp;subd=softwareflotsam&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://softwareflotsam.wordpress.com/2009/01/25/fun-with-fips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Eric Gunn</media:title>
		</media:content>
	</item>
	</channel>
</rss>
