<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Development</title>
        <link>http://www.darkside.co.za/category/2.aspx</link>
        <description>Mostly R&amp;D stuff</description>
        <language>en-ZA</language>
        <copyright>Ryan Schreiber</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <item>
            <title>Initialising Castle ActiveRecord in a WAS-hosted WCF service</title>
            <link>http://www.darkside.co.za/archive/2010/07/16/initialise-castle-activerecord-was-wcf.aspx</link>
            <description>&lt;p&gt;I stumbled upon an interesting problem this morning where Castle ActiveRecord was being initialised correctly in the development environment, but as soon as everything was rolled out to the lab environment, the application would throw errors about AR not being initialised. The error message was along the lines of:&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;An ActiveRecord class (Darkside.Domain.Person) was used but the framework seems not properly initialized. Did you forget about ActiveRecordStarter.Initialize() ?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;A bit of background info: As is custom in our web projects, we use an HttpModule to do the AR initialisation. In this case, the web project is actually a WAS host for our WCF services. After doing a bit of research, I found out that HttpModules are not executed when running WCF services. The reason we had the illusion it was working in dev is because of a default page that was started when the project was run. This caused the HttpModule to run, which in turn initialised AR for that session.&lt;/p&gt;  &lt;p&gt;Our solution to this problem was to make use of a custom service host factory. I’ve touched on the custom service host factory subject &lt;a href="http://www.darkside.co.za/archive/2008/02/21/custom-servicehostfactory-for-wcf-and-iis.aspx" target="_blank"&gt;here&lt;/a&gt; before, and this solution is just another use of it.&lt;/p&gt;  &lt;div class="Code"&gt;   &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CustomServiceHostFactory&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ServiceHostFactory&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;readonly&lt;/span&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt; m_InitActiveRecordLock = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; System.ServiceModel.&lt;span style="color: #2b91af"&gt;ServiceHostBase&lt;/span&gt; CreateServiceHost(&lt;span style="color: blue"&gt;string&lt;/span&gt; constructorString, &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;[] baseAddresses)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: green"&gt;//Initialise ActiveRecord...&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;if&lt;/span&gt; (!&lt;span style="color: #2b91af"&gt;ActiveRecordStarter&lt;/span&gt;.IsInitialized)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;lock&lt;/span&gt; (m_InitActiveRecordLock)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                &lt;span style="color: blue"&gt;if&lt;/span&gt; (!&lt;span style="color: #2b91af"&gt;ActiveRecordStarter&lt;/span&gt;.IsInitialized)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                    &lt;span style="color: #2b91af"&gt;ActiveRecordStarter&lt;/span&gt;.Initialize(&lt;span style="color: #2b91af"&gt;Assembly&lt;/span&gt;.Load(&lt;span style="color: #a31515"&gt;"Darkside.Domain"&lt;/span&gt;), &lt;span style="color: #2b91af"&gt;ActiveRecordSectionHandler&lt;/span&gt;.Instance);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: green"&gt;//Hand off the real host creation to the base class..&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;return&lt;/span&gt; (&lt;span style="color: blue"&gt;base&lt;/span&gt;.CreateServiceHost(constructorString, baseAddresses));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You then need to add the Factory attribute into your .SVC file&lt;/p&gt;

&lt;div class="Code"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt; &lt;span style="color: maroon"&gt;ServiceHost&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;="C#"&lt;/span&gt; &lt;span style="color: red"&gt;Debug&lt;/span&gt;&lt;span style="color: blue"&gt;="false"&lt;/span&gt; &lt;span style="color: red"&gt;Service&lt;/span&gt;&lt;span style="color: blue"&gt;="Darkside.Services.CRUDService, Darkside.Services"&lt;/span&gt; &lt;span style="color: red"&gt;Factory&lt;/span&gt;&lt;span style="color: blue"&gt;="Darkside.WAS.CustomServiceHostFactory"&lt;/span&gt; &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now, if a new service host is created in your app, AR will be initialised first, if needed.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/115.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2010/07/16/initialise-castle-activerecord-was-wcf.aspx</guid>
            <pubDate>Fri, 16 Jul 2010 09:25:53 GMT</pubDate>
            <wfw:comment>http://www.darkside.co.za/comments/115.aspx</wfw:comment>
            <comments>http://www.darkside.co.za/archive/2010/07/16/initialise-castle-activerecord-was-wcf.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/115.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Configuring and using the SQLite database in Castle ActiveRecord</title>
            <link>http://www.darkside.co.za/archive/2010/07/07/configuring-using-sqlite-castle-activerecord.aspx</link>
            <description>&lt;p&gt;There are a few solutions out on the web for this – here’s my implementation for you to use (and for me to safe-keep). I use this primarily for testing my ActiveRecord objects, as I haven’t really found any use for this mechanism in any production environment&lt;/p&gt;  &lt;p&gt;Firstly, the configuration. Notice that I specify my own connection provider (make sure you correctly swap out the relevant portions with your own namespaces). Also, there’s a slight twist in the connection string that you may want to take note of. The rest is straight forward.&lt;/p&gt;  &lt;div class="Code"&gt;   &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;isDebug&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;isWeb&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;false&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;config&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;connection.provider&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Darkside.ARLibrary.SqLiteConnectionProvider, Darkside.ARLibrary&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;dialect&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NHibernate.Dialect.SQLiteDialect&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;connection.driver_class&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NHibernate.Driver.SQLite20Driver&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;connection.connection_string&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Data Source=:memory:;Version=3;New=True;&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;proxyfactory.factory_class&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;           &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;show_sql&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;true&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;config&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;activerecord&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next, you’ll need to implement your own connection provider. The reason this needs to be done is because when you close a connection on a SQLite database which you’ve configured to be in-memory, the entire contents (tables and data) is lost.&lt;/p&gt;

&lt;p&gt;You simply inherit from NHibernate.Connection.DriverConnectionProvider and override the GetConnection() and CloseConnection() methods. In your implementation of GetConnection(), you cache an instance of the connection and always return the same one. In CloseConnection(), you do nothing – you don’t need or want to close the connection.&lt;/p&gt;

&lt;div class="Code"&gt;
  &lt;pre style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SqLiteConnectionProvider&lt;/span&gt; : NHibernate.Connection.&lt;span style="color: #2b91af"&gt;DriverConnectionProvider&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; System.Data.&lt;span style="color: #2b91af"&gt;IDbConnection&lt;/span&gt; m_Connection;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; System.Data.&lt;span style="color: #2b91af"&gt;IDbConnection&lt;/span&gt; GetConnection()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (m_Connection == &lt;span style="color: blue"&gt;null&lt;/span&gt;) &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                m_Connection = &lt;span style="color: blue"&gt;base&lt;/span&gt;.GetConnection();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; m_Connection;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; CloseConnection(System.Data.&lt;span style="color: #2b91af"&gt;IDbConnection&lt;/span&gt; conn)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: green"&gt;//Do nothing&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    }&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://www.darkside.co.za/aggbug/113.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2010/07/07/configuring-using-sqlite-castle-activerecord.aspx</guid>
            <pubDate>Wed, 07 Jul 2010 17:36:16 GMT</pubDate>
            <wfw:comment>http://www.darkside.co.za/comments/113.aspx</wfw:comment>
            <comments>http://www.darkside.co.za/archive/2010/07/07/configuring-using-sqlite-castle-activerecord.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/113.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Compress and decompress a byte array</title>
            <link>http://www.darkside.co.za/archive/2010/05/11/compress-decompress-byte-array.aspx</link>
            <description>&lt;p&gt;A colleague asked me this morning if I already had a code snippet that compressed and decompressed byte arrays that he could make use of. He needed it to compress a variable before passing it as an argument to a WCF call, and decompress in the service itself. I’ve never made use of the System.IO.Compression namespace (I’d always used SharpZipLib), so I thought this would be a quick and useful experiment.&lt;/p&gt;  &lt;p&gt;After referencing the local MSDN and then the customary 30 second google, I decided I’d make my own, better, wheel :) I’m still convinced it’s less verbose than the first ten results I looked at, by the way. &lt;/p&gt;  &lt;p&gt;The compress part was easy enough (and follows the same logic as just about every example I found). What I couldn’t understand was why everyone implemented long-winded decompress routines. The answer to that question (found in MSDN) is that the Length property of the DeflateStream is not implemented and always throws an exception, meaning that you can’t determine the length of the byte array you’ll need.&lt;/p&gt;  &lt;p&gt;Here’s my quick-and-easy solution to the problem:  &lt;/p&gt;  &lt;div class="CodeCollapse"&gt;   &lt;pre style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CompressionUtils&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;const&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; BUFFERSIZE = 1024;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;byte&lt;/span&gt;[] Compress(&lt;span style="color: blue"&gt;byte&lt;/span&gt;[] data)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;var&lt;/span&gt; memoryStream = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MemoryStream&lt;/span&gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;var&lt;/span&gt; deflateStream = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DeflateStream&lt;/span&gt;(memoryStream, &lt;span style="color: #2b91af"&gt;CompressionMode&lt;/span&gt;.Compress);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            deflateStream.Write(data, 0, data.Length);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            deflateStream.Flush();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            deflateStream.Close();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; memoryStream.ToArray();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;byte&lt;/span&gt;[] Decompress(&lt;span style="color: blue"&gt;byte&lt;/span&gt;[] data)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;var&lt;/span&gt; buffer = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;byte&lt;/span&gt;[BUFFERSIZE];&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;var&lt;/span&gt; returnVal = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;byte&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;var&lt;/span&gt; deflateStream = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DeflateStream&lt;/span&gt;(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MemoryStream&lt;/span&gt;(data), &lt;span style="color: #2b91af"&gt;CompressionMode&lt;/span&gt;.Decompress);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;int&lt;/span&gt; count;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;while&lt;/span&gt; ((count = deflateStream.Read(buffer, 0, BUFFERSIZE)) &amp;gt; 0)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                &lt;span style="color: blue"&gt;if&lt;/span&gt; (count != BUFFERSIZE)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                    &lt;span style="color: blue"&gt;var&lt;/span&gt; tmpBuffer = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;byte&lt;/span&gt;[count];&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                    &lt;span style="color: #2b91af"&gt;Array&lt;/span&gt;.Copy(buffer, tmpBuffer, count);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                    returnVal.AddRange(tmpBuffer);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                    returnVal.AddRange(buffer);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; returnVal.ToArray();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    }&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://www.darkside.co.za/aggbug/112.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2010/05/11/compress-decompress-byte-array.aspx</guid>
            <pubDate>Tue, 11 May 2010 18:23:43 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2010/05/11/compress-decompress-byte-array.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/112.aspx</wfw:commentRss>
        </item>
        <item>
            <title>An example of speculative execution</title>
            <link>http://www.darkside.co.za/archive/2009/11/19/example-speculative-execution.aspx</link>
            <description>&lt;p&gt;Speculative execution is a term applied to the execution of code that you may not need the results of. With the abundance of spare processing power on servers these days (and workstations for that matter), you can easily make an application be far more responsive to the user or make processing tasks on a server application quicker.&lt;/p&gt;
&lt;p&gt;A contrived example that I've come up: Consider a process that runs periodically on a server that:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Finds a list of all your customers from the SQL Server-based accounting system that have purchased an item from your online store in the past 24 hours (quick DB call) (1 sec in total) &lt;/li&gt;
    &lt;li&gt;For each customer, sum up the values of all their transactions for the past 6 months - it's a longer process because you have to fetch the data from data warehouse tables on a different SQL Server (2 sec per call) &lt;/li&gt;
    &lt;li&gt;For customers who have purchased more than ZAR100*, check if they have received a cheesy gift from the online loyalty app that you outsource to. (2 sec per call). &lt;/li&gt;
    &lt;li&gt;If they haven't received the gift yet, make another call to the online loyalty app to request that a gift be delivered (2 sec) &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Most likely you have these running sequentially; looking at the tasks that need to be performed, they all seem to be dependant on the previous step. A quick tally based on a made of set of results returned in each step:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;5 customers are returned. Total running time elapsed: &lt;em&gt;1 sec&lt;/em&gt; &lt;/li&gt;
    &lt;li&gt;Sum up the values of each customer @ 2 seconds/call. Total running time elapsed: &lt;em&gt;11 sec&lt;/em&gt; &lt;/li&gt;
    &lt;li&gt;Let's say only 2 make it to this step that need to be checked. Total running time elapsed: &lt;em&gt;15 sec&lt;/em&gt; &lt;/li&gt;
    &lt;li&gt;One has already received a gift, so it's only 1 call left. Total running time elapsed: &lt;em&gt;16 sec&lt;/em&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here's an example of what the code may look like: &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt;&amp;gt; customers = GetListOfCustomers();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; customer &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; customers)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (GetPurchaseTotalForSixMonths(customer) &amp;gt; 100)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (!HasCustomerReceivedGift(customer))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            RequestGiftForCustomer(customer);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; Considering that in every step from the process your server application is waiting for a response from another server, it's most likely idling away. So let's run some of the tasks in parallel. We can run each call made in (2) at the same time as the call that may or may not have been made initially in (3). We can make the call to the online loyalty app, and if the result from the call in two requires the data from the call in (3), you use it. If not, too bad - you just discard the results. Your code may look something like this: &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Speculative()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Customer&lt;/span&gt;&amp;gt; customers = GetListOfCustomers();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; customer &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; customers)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; c = customer;   &lt;span style="COLOR: green"&gt;//**              &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; meetsPurchaseLimit=&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; hasReceivedGift=&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;Fork&lt;/span&gt;.Begin()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    .Call(() =&amp;gt; meetsPurchaseLimit = (GetPurchaseTotalForSixMonths(c) &amp;gt; 100))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    .Call(() =&amp;gt; hasReceivedGift = HasCustomerReceivedGift(c))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    .End();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (meetsPurchaseLimit &amp;amp;&amp;amp; !hasReceivedGift)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    RequestGiftForCustomer(customer); &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            } &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; The Fork code that you see here is the same as what I've described in the article "&lt;a title="Asynchronous fork article" target="_blank" href="http://www.darkside.co.za/archive/2009/04/24/easy-to-use-asynchronous-fork.aspx"&gt;An easy to use asynchronous fork&lt;/a&gt;". &lt;/p&gt;
&lt;p&gt;Re-doing the calculation on the elapsed time, but now using speculative execution on the call made in (3), we get: &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;5 customers are returned. Total running time elapsed: &lt;em&gt;1 sec&lt;/em&gt; &lt;/li&gt;
    &lt;li&gt;Sum up the values of each customer @ 2 seconds/call, but at the same time check if the customer received a gift. Total running time elapsed: &lt;em&gt;11 sec&lt;/em&gt; &lt;/li&gt;
    &lt;li&gt;Marrying up the results from the parallel calls, make the single call for the gift. Total running time elapsed: &lt;em&gt;12 sec&lt;/em&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Back to the example: As you can see, you have a 25% saving in time. Yes, this is a contrived example with naive timing, but the general idea is what matters most. Don't feel bad about using your CPU's idle time to get work done, even if you're going to throw it away later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*&lt;/strong&gt; ZAR100 is equivalent to about USD500 or GBP300. Ok, it isn't so. Check &lt;a title="South African Forex" target="_blank" href="http://www.southafrica.co.za/forex/"&gt;here&lt;/a&gt; if you really want to. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;**&lt;/strong&gt; You may or may not be wondering why I have the line:  &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; c = customer;  &lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; It's to remove the warning I get from &lt;a title="Jetbrains ReSharper" target="_blank" href="http://www.jetbrains.com/resharper/index.html"&gt;ReSharper&lt;/a&gt; - it complains about a possible "access to a modified closure". Have a look at &lt;a title="Closing over the loop variable considered harmful" target="_blank" href="http://blogs.msdn.com/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx"&gt;this article&lt;/a&gt; from &lt;a title="Eric Lippert's blog" target="_blank" href="http://blogs.msdn.com/ericlippert/about.aspx"&gt;Eric Lippert&lt;/a&gt; explaining it. &lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/110.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/11/19/example-speculative-execution.aspx</guid>
            <pubDate>Thu, 19 Nov 2009 17:53:39 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/11/19/example-speculative-execution.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/110.aspx</wfw:commentRss>
        </item>
        <item>
            <title>C++ Compile Error - C2664</title>
            <link>http://www.darkside.co.za/archive/2009/11/16/compile-error-c2664.aspx</link>
            <description>&lt;p&gt;If you find you’re getting compile errors something along the lines of&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;error C2664: 'CreateFileW' : cannot convert parameter 1 from 'char [261]' to 'LPCWSTR'&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;or&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000" face="Courier New"&gt;error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'char *' to 'LPWSTR'&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I got plenty of these when compiling code which I C&amp;amp;P’d, which was working perfectly in one project, to a new project I had just created; All the errors were related to converting char/char arrays to LPWSTR. There are plenty of programmatic ways of converting this data, and keep in mind you may still want to check these out, rather than my “simple” fix, which is change the “Character Set” property in the project configuration settings to “Multi-Byte”&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="/files/images/CCompileErrorC2664.gif" width="587" height="395" /&gt;&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/109.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/11/16/compile-error-c2664.aspx</guid>
            <pubDate>Mon, 16 Nov 2009 12:19:13 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/11/16/compile-error-c2664.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/109.aspx</wfw:commentRss>
        </item>
        <item>
            <title>A look at two card shuffling techniques</title>
            <link>http://www.darkside.co.za/archive/2009/11/12/two-card-shuffling-technique.aspx</link>
            <description>&lt;p&gt;I was asked by a colleague about how I might go about shuffling a deck of cards in C#. I found a few takes on this general problem on Google, and make no mistake: this has been covered by numerous persons over the last 80 years according to some of the research I found. So, yes, this is mostly likely a &lt;a href="http://en.wikipedia.org/wiki/Reinventing_the_wheel" target="_blank"&gt;Wheel Version 2.0&lt;/a&gt; piece of code, but here it is and hopefully it’ll be useful to someone.&lt;/p&gt;  &lt;p&gt;Firstly, you need to decide on a Random Number Generator. If you’re just interested in solving this card-shuffling problem as part of a hobby-type application, using the System.Random class provided, or in my case the System.Security.Cryptography.RandomNumberGenerator, will suffice. To make this really strong, you may want to look at a pseudo-random algorithm along the lines of the &lt;a href="en.wikipedia.org/wiki/Mersenne_twister" target="_blank"&gt;Mersenne twister&lt;/a&gt; or one of it’s improved variants, or the simpler to implement &lt;a href="http://en.wikipedia.org/wiki/Multiply-with-carry" target="_blank"&gt;Multiply-with-carry&lt;/a&gt;. Random number generators are really a topic all on their own and way out of the scope of this post.&lt;/p&gt;  &lt;p&gt;Now, onto the relatively simple part: Shuffling a 52 card deck. I’ve designed a simple Deck class to make it easier for displaying results, but the algorithms can easily be transferred to whatever structure you’re using to store your cards/deck. I’ve also added my RNG as a static local variable to the class to increase its effectiveness. (Also, part of the RNG-related topic)&lt;/p&gt;  &lt;div class="CodeCollapse"&gt;   &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Deck&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Deck&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt;&amp;gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;{&lt;/p&gt;    &lt;p style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Suit&lt;/span&gt; { Spade, Diamond, Club, Heart }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Card&lt;/span&gt; { A, N2, N3, N4, N5, N6, N7, N8, N9, N10, J, Q, K }&lt;/p&gt;    &lt;p style="margin: 0px"&gt; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;    {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;long&lt;/span&gt; Index { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Card&lt;/span&gt; Card { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Suit&lt;/span&gt; Suit { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; ToString()&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; Card.ToString().Replace(&lt;span style="color: #a31515"&gt;"N"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;""&lt;/span&gt;) + &lt;span style="color: #a31515"&gt;" "&lt;/span&gt; + Suit;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;    }&lt;/p&gt;    &lt;p style="margin: 0px"&gt; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt;&amp;gt; m_List = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt;&amp;gt;();&lt;/p&gt;    &lt;p style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RandomNumberGenerator&lt;/span&gt; m_Random = &lt;span style="color: #2b91af"&gt;RandomNumberGenerator&lt;/span&gt;.Create(); &lt;/p&gt;    &lt;p style="margin: 0px"&gt; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; Deck () &lt;/p&gt;    &lt;p style="margin: 0px"&gt;    {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;int&lt;/span&gt; i = 0;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;Suit&lt;/span&gt; suit &lt;span style="color: blue"&gt;in&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Enum&lt;/span&gt;.GetValues(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Suit&lt;/span&gt;)))&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;Card&lt;/span&gt; card &lt;span style="color: blue"&gt;in&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Enum&lt;/span&gt;.GetValues(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Card&lt;/span&gt;)))&lt;/p&gt;    &lt;p style="margin: 0px"&gt;            {&lt;/p&gt;    &lt;p style="margin: 0px"&gt; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;                m_List.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt;() { Card = card, Suit = suit, Index=i++ });&lt;/p&gt;    &lt;p style="margin: 0px"&gt;            }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;        }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;    }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;The first shuffle I’ve implemented is based on the &lt;a href="http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle" target="_blank"&gt;Knuth-Fisher-Yates&lt;/a&gt; shuffle and as you can see by the code, is amazingly simple to implement. &lt;/p&gt;  &lt;div class="CodeCollapse"&gt;   &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    1&lt;/span&gt; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Shuffle()&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    2&lt;/span&gt; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    3&lt;/span&gt;     &lt;span style="color: green"&gt;//Knuth-Fisher-Yates shuffle algorithm&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    4&lt;/span&gt;     &lt;span style="color: blue"&gt;for&lt;/span&gt; (&lt;span style="color: blue"&gt;int&lt;/span&gt; i = m_List.Count - 1; i &amp;gt; 0; i--)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    5&lt;/span&gt;     {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    6&lt;/span&gt;         &lt;span style="color: blue"&gt;var&lt;/span&gt; data = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;byte&lt;/span&gt;[1];&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    7&lt;/span&gt;         m_Random.GetBytes(data);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    8&lt;/span&gt;         Swap(i, data[0] % (i + 1));&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    9&lt;/span&gt;     }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   10&lt;/span&gt; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   11&lt;/span&gt; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   12&lt;/span&gt; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Swap(&lt;span style="color: blue"&gt;int&lt;/span&gt; x, &lt;span style="color: blue"&gt;int&lt;/span&gt; y)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   13&lt;/span&gt; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   14&lt;/span&gt;     &lt;span style="color: #2b91af"&gt;Debug&lt;/span&gt;.Assert(x &amp;gt;= y); &lt;span style="color: green"&gt;//Just to make sure...&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   15&lt;/span&gt;     &lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt; tmp = m_List[x];&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   16&lt;/span&gt;     m_List[x] = m_List[y];&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   17&lt;/span&gt;     m_List[y] = tmp;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   18&lt;/span&gt; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Quoted from Wikipedia: The basic process of Fisher–Yates shuffling is similar to randomly picking numbered tickets out of a hat, or cards from a deck, one after another until there are no more left. What the specific algorithm provides is a way of doing this numerically in an efficient and rigorous manner that, properly done, guarantees an unbiased result. &lt;/p&gt;  &lt;p&gt;That being said, this computation as I’ve implemented in the source code is is prone to an effect known as &lt;a href="http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias" target="_blank"&gt;modulo bias&lt;/a&gt; – you can seen the mod that is done on line 8.&lt;/p&gt;  &lt;p&gt;Another amazingly clever, yet simple, method of shuffling the cards is randomising a number, assigning it to the first card in the deck, and repeating the process for each card. Once you’ve completed, you order the cards by the random number, and your deck is shuffled.&lt;/p&gt;  &lt;div class="CodeCollapse"&gt;   &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   61&lt;/span&gt; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Shuffle()&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   62&lt;/span&gt; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   63&lt;/span&gt;     &lt;span style="color: blue"&gt;for&lt;/span&gt; (&lt;span style="color: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; m_List.Count; i++)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   64&lt;/span&gt;     {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   65&lt;/span&gt;         &lt;span style="color: blue"&gt;var&lt;/span&gt; data = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;byte&lt;/span&gt;[4];&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   66&lt;/span&gt;         m_Random.GetBytes(data);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   67&lt;/span&gt;         m_List[i].Index = data[0] + (data[1] * 256) + (data[2] * 65536) + (data[3] * 16777216);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   68&lt;/span&gt; &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   69&lt;/span&gt;     }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   70&lt;/span&gt;     m_List.Sort(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Comparison&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt;&amp;gt;(&lt;span style="color: blue"&gt;delegate&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt; x, &lt;span style="color: #2b91af"&gt;SuitCard&lt;/span&gt; y)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   71&lt;/span&gt;     {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   72&lt;/span&gt;         &lt;span style="color: blue"&gt;if&lt;/span&gt; (x.Index &amp;lt; y.Index) &lt;span style="color: blue"&gt;return&lt;/span&gt; (-1);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   73&lt;/span&gt;         &lt;span style="color: blue"&gt;if&lt;/span&gt; (x.Index &amp;gt; y.Index) &lt;span style="color: blue"&gt;return&lt;/span&gt; (1);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   74&lt;/span&gt;         &lt;span style="color: blue"&gt;return&lt;/span&gt; 0;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   75&lt;/span&gt;     }));&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   76&lt;/span&gt; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;I use the same RNG, and then convert the four bytes to a long (line 67) – this is the field that I “sort” the deck by, to give you a shuffled deck.&lt;/p&gt;  &lt;p&gt;And that’s my two ways of shuffling a deck of cards in C#.&lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/108.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/11/12/two-card-shuffling-technique.aspx</guid>
            <pubDate>Thu, 12 Nov 2009 08:37:45 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/11/12/two-card-shuffling-technique.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/108.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Overloading the implicit operator for casting</title>
            <link>http://www.darkside.co.za/archive/2009/08/14/overloading-implicit-operator-casting.aspx</link>
            <description>&lt;p&gt;Seeing as I have to search for this code snippet on most occasions that I use it, I’ve decided to put it here as a post. I often find that I have to repeat the same code over and over when converting between two similar types (e.g. Person domain object and PersonDto object). If you see something like this crop up too often:&lt;/p&gt;  &lt;div class="Code"&gt;   &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; personDto =  &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PersonDto&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    Id = person.Id,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    FirstName = person.FirstName,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    LastName = person.LastName,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    Age = person.Age&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;};&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;You have two options: 1) Refactor your code into an extension method so you have something like this:&lt;/p&gt;

&lt;div class="Code"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; personDto = person.ConvertToPersonDto();&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;or, refactor you code into an implicit operator overload, so that your code looks like this:&lt;/p&gt;

&lt;div class="Code"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; personDto = (&lt;span style="color: #2b91af"&gt;PersonDto&lt;/span&gt;) person;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;I prefer the latter, primarily because my refactored code can be part of the same class, and not have to be placed in separate static classes, as with all extension methods. The overloading of the operator looks like this:&lt;/p&gt;

&lt;div class="Code"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;implicit&lt;/span&gt; &lt;span style="color: blue"&gt;operator&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PersonDto&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; person)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PersonDto&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;               {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                   Id = person.Id,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                   FirstName = person.FirstName,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                   LastName = person.LastName,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                   Age = person.Age&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;               };&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://www.darkside.co.za/aggbug/106.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/08/14/overloading-implicit-operator-casting.aspx</guid>
            <pubDate>Fri, 14 Aug 2009 08:08:01 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/08/14/overloading-implicit-operator-casting.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/106.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Creating your own dynamic proxy</title>
            <link>http://www.darkside.co.za/archive/2009/08/13/create-dynamic-proxy.aspx</link>
            <description>&lt;p&gt;This is (another) look at implementing a dynamic proxy using Reflection Emit.  Why would you need a dynamic proxy? Well, there are times when functionality needs to be injected into existing code that can not be modified. My dynamic proxy generator allow you to supply two &lt;strong&gt;Action&lt;/strong&gt; parameters the will be executed as pre- and post-call methods. The tests that I have provided with my sample application show an example of injecting timing code into existing methods. It could also be used to insert logging and tracing information into code.&lt;/p&gt;
&lt;p&gt;The route that I have followed to create my dynamic proxy has its limitations, as have many other such as the &lt;a title="Castle Dynamic Proxy" target="_blank" href="http://www.castleproject.org/dynamicproxy/index.html"&gt;Castle Dynamic Proxy&lt;/a&gt; and &lt;a title="Linfu Dynamic Proxy" target="_blank" href="http://code.google.com/p/linfu/"&gt;LinFu&lt;/a&gt; – only virtual methods can successfully be “proxied”. For my needs, the dynamic proxy type had to adhere to the &lt;a title="Liskov Substitution Principle on Wikipedia" target="_blank" href="http://en.wikipedia.org/wiki/Liskov_substitution_principle"&gt;Liskov Substitution Principle&lt;/a&gt;.  Also, and very importantly, my sample is merely an exercise in academics – I’ve been fiddling with emitting code for the last week, so this post evolved from that. If you need a fully fledged dynamic proxy, try out one of links above. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download: &lt;/strong&gt;&lt;a title="Darkside Dynamic Proxy Sample Code" target="_blank" href="http://www.darkside.co.za/files/Darkside.DynamicProxy.zip"&gt;Darkside.DynamicProxy.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ve implemented a static method in a generic class to allow for strongly typed implementation. &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; T CreateDynamicProxy&amp;lt;T&amp;gt;(&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt; preCall, &lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt; postCall) &lt;span style="COLOR: blue"&gt;where&lt;/span&gt; T:&lt;span style="COLOR: blue"&gt;class&lt;/span&gt; , &lt;span style="COLOR: blue"&gt;new&lt;/span&gt;()&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;First on the list of tasks is to create a dynamic assembly, module and type.&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   15&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Do some setup work on the name of the assembly and type&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   16&lt;/span&gt; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; typeName = &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt; (T).FullName;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   17&lt;/span&gt; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; dynamicTypeName = typeName + &lt;span style="COLOR: #a31515"&gt;"DynamicProxyType"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   18&lt;/span&gt; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; name = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AssemblyName&lt;/span&gt; { Name = dynamicTypeName };&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   19&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   20&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Define a new dynamic assembly&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   21&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AssemblyBuilder&lt;/span&gt; assembly = &lt;span style="COLOR: #2b91af"&gt;AppDomain&lt;/span&gt;.CurrentDomain.DefineDynamicAssembly(name, &lt;span style="COLOR: #2b91af"&gt;AssemblyBuilderAccess&lt;/span&gt;.Run);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   22&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Now define a new module&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   23&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ModuleBuilder&lt;/span&gt; module = assembly.DefineDynamicModule(dynamicTypeName + &lt;span style="COLOR: #a31515"&gt;".dll"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   24&lt;/span&gt; &lt;span style="COLOR: green"&gt;//And create a new type which inherits the base type you've passed in&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   25&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;TypeBuilder&lt;/span&gt; type = module.DefineType(dynamicTypeName, &lt;span style="COLOR: #2b91af"&gt;TypeAttributes&lt;/span&gt;.Public, &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(T));&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I do some setup work creating a new assembly name, as well as a new name for my dynamic type which I use throughout the method. A point of interest is on line 21, the last parameter of the &lt;strong&gt;DefineDynamicAssembly&lt;/strong&gt; method; The &lt;strong&gt;AssemblyBuilderAccess.Run&lt;/strong&gt; can be changed to &lt;strong&gt;AssemblyBuilderAccess.RunAndSave&lt;/strong&gt; which is useful if you decide to save the new assembly to disk, meaning that in future you wouldn’t have to regenerate the dynamic type, you could simply load it from the assembly.&lt;/p&gt;
&lt;p&gt;Next on the list is the constructor – I add a new constructor to the type that takes two parameters; thesewill be the two parameters of type &lt;strong&gt;Action&lt;/strong&gt; that are the actual pre- and post-call methods passed to the method. Before I actually emit the code to assign these parameters to internal fields, I emit code to call the default constructor in the base class.&lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   33&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Define a new constructor for the dynamic type, which takes two arguments of type Action&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   34&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ConstructorBuilder&lt;/span&gt; newConstructorBuilder = type.DefineConstructor(&lt;span style="COLOR: #2b91af"&gt;MethodAttributes&lt;/span&gt;.Public, &lt;span style="COLOR: #2b91af"&gt;CallingConventions&lt;/span&gt;.Standard, &lt;span style="COLOR: blue"&gt;new&lt;/span&gt;[]{&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;), &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;)});&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   35&lt;/span&gt; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; newConstructorGenerator = newConstructorBuilder.GetILGenerator();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   36&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Emit code to call the base default constructor&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   37&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   38&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Call, &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(T).GetConstructors()[0]);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   39&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   40&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Emit code to save the first parameter passed to the constructor&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   41&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   42&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_1);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   43&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Stfld, preCallFieldBuilder);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   44&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   45&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Emit code to save the second parameter passed to the constructor&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   46&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   47&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_2);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   48&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Stfld, postCallFieldBuilder);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   49&lt;/span&gt; newConstructorGenerator.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ret);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I then emit two private methods that actually make the calls. The methods are what are added to the overriden methods which I emit later on.&lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   51&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Build a method for the pre call &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   52&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Define a new private method. Once again, the name is just an attempt at being unique in the code&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   53&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MethodBuilder&lt;/span&gt; preCallMethodBuilder = type.DefineMethod(&lt;span style="COLOR: #a31515"&gt;"__dyn_PreCall"&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;MethodAttributes&lt;/span&gt;.Private);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   54&lt;/span&gt; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; genPreCall = preCallMethodBuilder.GetILGenerator();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   55&lt;/span&gt; genPreCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   56&lt;/span&gt; genPreCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldfld, preCallFieldBuilder);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   57&lt;/span&gt; genPreCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Callvirt, &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;).GetMethod(&lt;span style="COLOR: #a31515"&gt;"Invoke"&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   58&lt;/span&gt; genPreCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ret);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   59&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   60&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Build a method for the post call &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   61&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MethodBuilder&lt;/span&gt; postCallMethodBuilder = type.DefineMethod(&lt;span style="COLOR: #a31515"&gt;"__dyn_PostCall"&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;MethodAttributes&lt;/span&gt;.Private);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   62&lt;/span&gt; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; genPostCall = postCallMethodBuilder.GetILGenerator();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   63&lt;/span&gt; genPostCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   64&lt;/span&gt; genPostCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldfld, postCallFieldBuilder);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   65&lt;/span&gt; genPostCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Callvirt, &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;).GetMethod(&lt;span style="COLOR: #a31515"&gt;"Invoke"&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   66&lt;/span&gt; genPostCall.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ret);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I could have called the fields directly, but added the methods in so that I could modify to do other things. Just in case :) After that, all that’s left to do in constructing the dynamic is to loop through the methods from the original/base type, and emit new method calls for them. &lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   68&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Loop through all the methods that are public, virtual and instance methods&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   69&lt;/span&gt; &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; methodInfo &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(T).GetMethods(&lt;span style="COLOR: #2b91af"&gt;BindingFlags&lt;/span&gt;.Public | &lt;span style="COLOR: #2b91af"&gt;BindingFlags&lt;/span&gt;.Instance).Where(mi =&amp;gt; mi.IsVirtual))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   70&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   71&lt;/span&gt;     &lt;span style="COLOR: green"&gt;//Define a new method&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   72&lt;/span&gt;     &lt;span style="COLOR: #2b91af"&gt;MethodBuilder&lt;/span&gt; mb = type.DefineMethod(methodInfo.Name,&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   73&lt;/span&gt;                                          &lt;span style="COLOR: #2b91af"&gt;MethodAttributes&lt;/span&gt;.Public | &lt;span style="COLOR: #2b91af"&gt;MethodAttributes&lt;/span&gt;.HideBySig | &lt;span style="COLOR: #2b91af"&gt;MethodAttributes&lt;/span&gt;.Virtual,&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   74&lt;/span&gt;                                          methodInfo.ReturnType,&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   75&lt;/span&gt;                                          methodInfo.GetParameters().Select(pi =&amp;gt; pi.ParameterType).ToArray());&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   76&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   77&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; mbGen = mb.GetILGenerator();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   78&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   79&lt;/span&gt;     &lt;span style="COLOR: green"&gt;//Only emit the code that makes a call to the PreCall if it is defined&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   80&lt;/span&gt;     mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   81&lt;/span&gt;     mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Call, preCallMethodBuilder);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   82&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   83&lt;/span&gt;     &lt;span style="COLOR: green"&gt;//Setup up the parameters that were passed into this call for the base class call&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   84&lt;/span&gt;     mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   85&lt;/span&gt;     &lt;span style="COLOR: green"&gt;//Loop through all the parameters and emit statements&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   86&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 1; i &amp;lt;= methodInfo.GetParameters().Count(); i++)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   87&lt;/span&gt;         mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_S, i);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   88&lt;/span&gt;     &lt;span style="COLOR: green"&gt;//Emit the code that makes the base call&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   89&lt;/span&gt;     mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Call, methodInfo);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   90&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   91&lt;/span&gt;     &lt;span style="COLOR: green"&gt;//Only emit the code that makes a call to the PostCall method if it is defined&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   92&lt;/span&gt;     mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   93&lt;/span&gt;     mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Call, postCallMethodBuilder);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   94&lt;/span&gt;     mbGen.Emit(&lt;span style="COLOR: #2b91af"&gt;OpCodes&lt;/span&gt;.Ret);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   95&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   96&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Create the type&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   97&lt;/span&gt; type.CreateType();&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The final act of the factory method is to instantiate a new instance of the dynamic type, passing to it the two action parameters from the method call. I do a null check on the parameters and substitute it with a dummy call if it is.&lt;/p&gt;
&lt;div class="CodeCollapse"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  103&lt;/span&gt; &lt;span style="COLOR: green"&gt;//Return an instance of the type&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  104&lt;/span&gt; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; assembly.CreateInstance(dynamicTypeName, &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  105&lt;/span&gt;                                &lt;span style="COLOR: #2b91af"&gt;BindingFlags&lt;/span&gt;.CreateInstance,&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  106&lt;/span&gt;                                &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  107&lt;/span&gt;                                &lt;span style="COLOR: blue"&gt;new&lt;/span&gt;[]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  108&lt;/span&gt;                                    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  109&lt;/span&gt;                                        preCall ??&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  110&lt;/span&gt;                                        &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  111&lt;/span&gt;                                                                &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  112&lt;/span&gt;                                        }),&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  113&lt;/span&gt;                                        postCall ??&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  114&lt;/span&gt;                                        &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  115&lt;/span&gt;                                                                &lt;span style="COLOR: blue"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  116&lt;/span&gt;                                        })&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  117&lt;/span&gt;                                    },&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;  118&lt;/span&gt;                                &lt;span style="COLOR: #2b91af"&gt;CultureInfo&lt;/span&gt;.CurrentCulture, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; T;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In the first test method, my code looks as follows:&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; fb = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FooBar&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;fb.Foo();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;fb.Foo(42);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; x = fb.Bar();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(42,x);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and when using the dynamic proxy creation method, my code changes to this:&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; fb = &lt;span style="COLOR: #2b91af"&gt;DynamicProxyFactory&lt;/span&gt;.CreateDynamicProxy&amp;lt;&lt;span style="COLOR: #2b91af"&gt;FooBar&lt;/span&gt;&amp;gt;(&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;fb.Foo();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;fb.Foo(42);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; x = fb.Bar();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(42, x);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You’ll notice that, barring the instantiation of the class, the rest of the code stays the same. The next example shows much the same, except demonstrates how to add timing to the methods passed as parameters:&lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; sw = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Stopwatch&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt; preCall = sw.Start;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt; postCall = sw.Stop;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; fb = &lt;span style="COLOR: #2b91af"&gt;DynamicProxyFactory&lt;/span&gt;.CreateDynamicProxy&amp;lt;&lt;span style="COLOR: #2b91af"&gt;FooBar&lt;/span&gt;&amp;gt;(preCall, postCall);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;fb.Foo();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;fb.Foo(42);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; x = fb.Bar();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(42, x);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Time taken: "&lt;/span&gt; + sw.ElapsedMilliseconds); &lt;span style="COLOR: green"&gt;//Should be 100ms or more :)&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://www.darkside.co.za/aggbug/105.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/08/13/create-dynamic-proxy.aspx</guid>
            <pubDate>Wed, 12 Aug 2009 22:00:00 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/08/13/create-dynamic-proxy.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/105.aspx</wfw:commentRss>
        </item>
        <item>
            <title>One-line integer swap in C#</title>
            <link>http://www.darkside.co.za/archive/2009/08/06/one-line-integer-swap-in-c-sharp.aspx</link>
            <description>&lt;p&gt;After doing some random surfing this morning (I think I started off with binging “operator precedence C#”, I landed on &lt;a title="One-line variables swap in PHP, Ruby, Perl, Python and C" target="_blank" href="http://nexus.zteo.com/2009/04/24/one-line-variables-swap-in-php-ruby-perl-python-and-c/"&gt;this page&lt;/a&gt; about one line variable swaps, which then got me thinking about how to do this in C#. My only solution I could come up with was using arithmetic to solve the problem:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; x = 11;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; y = 42;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;y = (y + x) - (x = (y + x) - x);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Debug&lt;/span&gt;.Assert(x == 42);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Debug&lt;/span&gt;.Assert(y == 11);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Please don't use this code, unless you're on some type of job security mission :) &lt;/p&gt;
&lt;p&gt; &lt;strong&gt;UPDATE: 12 Aug 2009&lt;/strong&gt; – Ok, so I wasted more time on it. Savage also &lt;a href="http://darkside.co.za/archive/2009/08/06/one-line-integer-swap-in-c-sharp.aspx#57"&gt;submitted&lt;/a&gt; a refactored version of my previous try &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="Code"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; x = 11;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; y = 42;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;x = y ^ x ^ (y = x);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Debug&lt;/span&gt;.Assert(x == 42);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;Debug&lt;/span&gt;.Assert(y == 11);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.darkside.co.za/aggbug/104.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/08/06/one-line-integer-swap-in-c-sharp.aspx</guid>
            <pubDate>Thu, 06 Aug 2009 04:55:00 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/08/06/one-line-integer-swap-in-c-sharp.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/104.aspx</wfw:commentRss>
        </item>
        <item>
            <title>An easy to use asynchronous fork</title>
            <link>http://www.darkside.co.za/archive/2009/04/24/easy-to-use-asynchronous-fork.aspx</link>
            <description>&lt;p&gt;I’ve been making use of &lt;a href="http://rogeralsing.com/2008/05/09/async-calls-fork/" target="_blank" rel="nofollow"&gt;Roger Alsing’s Async Fork&lt;/a&gt; for a few months as an alternative to the “for testing purposes only” &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&amp;amp;displaylang=en" target="_blank" rel="nofollow"&gt;Microsoft Parallel Extensions&lt;/a&gt;. With the release of C# 4.0 on the horizon, I decided to modify the internal workings of the Fork class to make use of the parallel extensions, which would result in very few modifications to my existing code. My reason for the modifications are to take advantage of the inner working of parallels extensions. &lt;/p&gt;  &lt;p&gt;Here is the modified version of the &lt;strong&gt;Fork&lt;/strong&gt; class:&lt;/p&gt;  &lt;div class="CodeCollapse"&gt;   &lt;pre style="margin: 0px"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Fork&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;gt; _Actions ;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; Fork()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            _Actions = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Starts an async fork&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Returns a new fork instance&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Fork&lt;/span&gt; Begin()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Fork&lt;/span&gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;param name="action"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Delegate that should be executed async&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;Returns self&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Fork&lt;/span&gt; Call(&lt;span style="color: #2b91af"&gt;Action&lt;/span&gt; action)&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            _Actions.Add(action);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;this&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; Executes all the calls async and waits untill all of them are finished&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: gray"&gt;///&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; End()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;var&lt;/span&gt; taskManager = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TaskManager&lt;/span&gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: #2b91af"&gt;Parallel&lt;/span&gt;.Invoke(_Actions.ToArray(), taskManager, &lt;span style="color: #2b91af"&gt;TaskCreationOptions&lt;/span&gt;.Detached);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;    }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And making use of the exact same example in the original article, you can use it like this:&lt;/p&gt;

&lt;div class="CodeCollapse"&gt;
  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: green"&gt;//declare the variables we want to assign&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;string&lt;/span&gt; str = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;int&lt;/span&gt; val = 0;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: green"&gt;//start a new async fork&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: green"&gt;//assign the variables inside the fork &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: #2b91af"&gt;Fork&lt;/span&gt;.Begin()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                .Call(() =&amp;gt; str = CallSomeWebService(123, &lt;span style="color: #a31515"&gt;"abc"&lt;/span&gt;))&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                .Call(() =&amp;gt; val = ExecSomeStoredProc(&lt;span style="color: #a31515"&gt;"hello"&lt;/span&gt;))&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;                .End();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: green"&gt;//the fork has finished &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: green"&gt;//we can use the variables now&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"{0} {1}"&lt;/span&gt;, str, val);&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://www.darkside.co.za/aggbug/100.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ryan Schreiber</dc:creator>
            <guid>http://www.darkside.co.za/archive/2009/04/24/easy-to-use-asynchronous-fork.aspx</guid>
            <pubDate>Fri, 24 Apr 2009 07:15:00 GMT</pubDate>
            <comments>http://www.darkside.co.za/archive/2009/04/24/easy-to-use-asynchronous-fork.aspx#feedback</comments>
            <wfw:commentRss>http://www.darkside.co.za/comments/commentRss/100.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>