<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>Robert Pickering's Strange Blog</title>
        <link>http://strangelights.com/blog/Default.aspx</link>
        <description>The "informaticien anglais": A blog about an English programmer living and working in Paris</description>
        <language>en-GB</language>
        <copyright>Robert Pickering</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <image>
            <title>Robert Pickering's Strange Blog</title>
            <url>http://strangelights.com/blog/images/RSS2Image.gif</url>
            <link>http://strangelights.com/blog/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>OpenWrap – A Package Management System for .NET</title>
            <category>.NET general</category>
            <link>http://strangelights.com/blog/archive/2010/05/16/1661.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;At Progressive.NET one of the sessions I attended was &lt;a href="http://serialseb.blogspot.com/"&gt;Sebastien Lambla’s&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt; talk on &lt;a href="http://github.com/openrasta/openwrap"&gt;OpenWrap&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt;. OpenWrap is a package management system for .NET projects. I’m excited about this project for a very simple reason: it’s something the .NET Open Source community desperately needs. &lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;font size="3"&gt;What is package management?&lt;o:p /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;Package manager is basically a piece of software that allows you to install the software or components you need on to your system. In one sense in the windows world this is handled by MSI, but that’s only half the picture of a package management system; ideally a package management system would provide a centralised server that handlers allowing to query what the latest version of a package is and download that or any other version of a package. Since in general software is build using other packages then it would be nice if it would automatically handle downloading the complete depancie graph.&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;font size="3"&gt;Why does .NET open source world need one?&lt;o:p /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;Well, leaving aside the fact that every other open source development community has one, it is need because handling dependencies between packages manually is time consuming and painful. Last year I was involved in setting up a small new web project. Naturally, I was keen to try out ASP.NET MVC, and as I had more or less a free hand, I also wanted to use Castle Windsor, Fluent NHibernate, Linq2NHibernate and some of ASP.NET MVC contrib which would allow me to easily integrate my controllers into Windsor. Now, although once I had everything going these technologies certainly made life easier. However, getting them in place was not so simple, firstly, and it’s quite a minor point, there’s no centralised localation where all these items can be downloaded so you have hunt around various project hosting sites, such as sourceforge, codeplex, google code, and github to find all the relevant binaries. Once found, it’s then that all the real fun and games start. As each of these projects depend on the other projects you need to ensure that you have the correct version of each project and if you download the latest version of each project, it’s odds on that you will not. To add to the fun and games the projects with incompatible versions will fail in different ways depending on if they are signed or not. An unsigned assembly will always be loaded, as the .NET loader simply ignores the version, number if it’s not signed. This will cause a MissingMethodException if there is an incompatibility in the interface. If an assembly is signed then an incompatible version will simply refuse to load, yes you can mess around with loading policy in the app.config to force the .NET loader to load a different version, but this isn’t a fun or good solution to the problem. So in general you have to decide which projects are important that you have the right version, then find versions of the other projects that are compatible with them.&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;font size="3"&gt;Is hornget a package management system?&lt;o:p /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;No. While like &lt;a href="http://github.com/dagda1/horn_src"&gt;hornget&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt; and it does solve a similar problem, it does it in a slightly different way. The hornget tool allows you to download the source of a particular project, along with its dependencies, to your local computer and build it from scratch. While this will solve many of your version compatibility problems there’s a couple of problems with this approach:&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;- Building can fail and is a time consuming process&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;- Control over the version your building is somewhat limited, though this may improve overtime&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;font size="3"&gt;How does open wrap work?&lt;o:p /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;Packages are stored as zips on a central server. OpenWrap provides a DSL that will allow you to specific which packages you want to use and which version of that package you would like (the syntax here is quite flexible allowing you to provide a minimum and maximum version). OpenWrap provides a set of msbuild targets that allow you to hook this DSL based description into your build process and, of course, visual studio. These msbuild targets will then take care of downloading the projects you require and there dependencies to a centralised cache on your local machine. This centralised cache will then be used to provide the references required to build you’re project.&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;font size="3"&gt;How can I get involved?&lt;o:p /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;Simple. Download the source. Try it out. Talk to Seb to contribute feedback, packages and patches to improve and grow the functionality. There is much work still to be done.&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;So I hope that this article has convinced you a package manager is need for .NET. Is Seb the man to pull it off with his OpenWrap system? I certainly hope so, definitely a project to keep a close watch on.&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;(Other info about the stuff at Progressive.NET to follow shortly)&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1661.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/05/16/1661.aspx</guid>
            <pubDate>Sun, 16 May 2010 14:41:05 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1661.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/05/16/1661.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1661.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1661.aspx</trackback:ping>
        </item>
        <item>
            <title>My Talks in London: The F# User Group &amp; At Progressive.NET</title>
            <category>F# updates</category>
            <category>.NET general</category>
            <category>Functional Programming</category>
            <link>http://strangelights.com/blog/archive/2010/05/14/1660.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;I’ve been in London for the past few days. I arrived Tuesday afternoon and gave at talk at &lt;a href="http://www.meetup.com/FSharpLondon/"&gt;“The F#unctional Londoners Meetup Group”&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt; on the Tuesday evening. The talk was entitled “Using Language Oriented Programming to Execute Computations on the GPU” and thanks to the efficiency of the good folks at Skills Matter the talk is &lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/using-language-oriented-programming-to-execute-computations-on-the-gpu"&gt;already available on line&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt;. The event was very well attended, with around 50 people turning up. The talk covers more the Language Oriented Programming aspects than the knitty gritty details for detailing with the GPU and the audience seemed to enjoy it. It was a fun evening and good to meet Carolyn Miller, who started the group, as well fellow F# Guru’s &lt;a href="http://www.ffconsultancy.com/"&gt;Jon Harrop&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt; and &lt;a href="http://www.trelford.com/blog/"&gt;Phil Trelford&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt;.&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;I’ve also gave a talk at the Progressive.NET event organised by Skills Matter. This was a four hour tutorial, than covered the basics of the syntax, and how to use all the features. It then moved on to cover more advanced topics like language oriented programming, parallel programming and collective intelligence. The &lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/beginning-f"&gt;video is already online&lt;/a&gt;&lt;/font&gt;&lt;font size="3"&gt; and there are a few pictures of me presenting on flickr:&lt;o:p /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;o:p&gt;&lt;img alt="Robert Pickering Presenting Giving and F# Talk" src="http://farm4.static.flickr.com/3315/4604195000_17cd40ddc2_b.jpg" /&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1660.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/05/14/1660.aspx</guid>
            <pubDate>Fri, 14 May 2010 16:29:44 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1660.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/05/14/1660.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1660.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1660.aspx</trackback:ping>
        </item>
        <item>
            <title>Strings and F# Immutable Lists</title>
            <category>F# updates</category>
            <category>Functional Programming</category>
            <link>http://strangelights.com/blog/archive/2010/04/18/1659.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;In .NET strings are immutable. I think most .NET programmers agree that this is a good thing, as it generally makes code that works with strings safer and more predictable. However, operations that involve large amounts of string manipulation perform poorly because each time a string concatenation occurs then both strings must be copied. His often leads people to believe that all immutable objects will perform poorly. The aim of the article is to show that this is not the case, or at least it’s not as black and white as you may think. Specifically we’re going to compare how.NET strings differ considerable in performance characteristics to F#’s immutable lists. &lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;Before we dive into immutable lists, let’s take a look at some code that demonstrates some poorly performing string concatenation and then take a look at how we can fix this.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;class&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt; &lt;span style="COLOR: #2b91af"&gt;Program&lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Main(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] args)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; strings = &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;string&lt;/span&gt;&amp;gt; { &lt;span style="COLOR: #a31515"&gt;"Toto"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Titi"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Tata"&lt;/span&gt; };&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; res = &lt;span style="COLOR: #a31515"&gt;""&lt;/span&gt;;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; s &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; strings)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;       &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;res += s;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;       &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(res);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;As the length of the list “strings” grows, we will start to see the performance of this code degrade. The performance of this code for a list of 3 items, will be perfectly acceptable, but we’ll start to serious perf problems as we approach 100s or 1000s of items (also depending on the length of the strings in the list). This is because both “res” and “s” must be copied to perform the concatenation. So as “res” grows with each iteration of the loop so does the time to perform the copy.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;The way to fix this is fairly obvious, we use a string builder:&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;class&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt; &lt;span style="COLOR: #2b91af"&gt;Program2&lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Main(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] args)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; strings = &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;string&lt;/span&gt;&amp;gt; { &lt;span style="COLOR: #a31515"&gt;"Toto"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Titi"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Tata"&lt;/span&gt; };&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; res = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; s &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; strings)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;res.Append(s);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;      &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(res.ToString());&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;What’s more interesting is to look at why this fixes the problem. It would be fairly easy to say a string builder is mutable therefore faster, but this isn’t quite the answer we’re looking for. The reason using a string builder is faster, in this case, is because &lt;em style="mso-bidi-font-style: normal"&gt;we avoid the cost of copying “res” each iteration&lt;/em&gt;, only the newly input “s” needs to be copied into the string builder. While a string builder is capable of performing inserts/removes in this case we get good performance because &lt;em style="mso-bidi-font-style: normal"&gt;we limit ourselves to append to the end of collection of characters&lt;/em&gt; (string builder could be thought of as just a special type of collections of characters). &lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;F#’s lists are immutable linked list. This means each items in the list is either empty, which always represents the end of a list, or the item stored in the list along with a reference to the remaining list. This means a graphical representation of an F# list would look something like this:&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;img alt="F# linked list" src="http://dl.dropbox.com/u/4679672/LinkList.png" /&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;We build up F# lists by appending new items to the head of the list. Here in C# is how we would build up an F# list from the frameworks generic List&amp;lt;&amp;gt; class. &lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;class&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt; &lt;span style="COLOR: #2b91af"&gt;Program3&lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Main(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] args)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; strings = &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;string&lt;/span&gt;&amp;gt; { &lt;span style="COLOR: #a31515"&gt;"Toto"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Titi"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"Tata"&lt;/span&gt; };&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; res = &lt;span style="COLOR: #2b91af"&gt;ListModule&lt;/span&gt;.Empty&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt;();&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;var&lt;/span&gt; s &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; strings)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;{&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;            &lt;/span&gt;res = &lt;span style="COLOR: #2b91af"&gt;FSharpList&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt;.Cons(s, res);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(res.ToString());&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;}&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;While the syntax for working with F# lists from C# is rather ugly, I think this example makes it clear how F# list work. Each item is the collection “strings” is taken in turn and append to the head of the F# list using its “Cons” operator. In many ways this is similar to how the string builder behaves, we have no need to make a copy of “res”, we simple append each new “s” to the end of it. For those of you curious to see what this would look like in F# here’s the equivalent in F#, although it is really idiomatic F# since it uses a mutable identifier:&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;let&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt; main() =&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;let&lt;/span&gt; strings = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; ResizeArray&amp;lt;string&amp;gt;([&lt;span style="COLOR: maroon"&gt;"Tata"&lt;/span&gt;; &lt;span style="COLOR: maroon"&gt;"Toto"&lt;/span&gt;; &lt;span style="COLOR: maroon"&gt;"Titi"&lt;/span&gt;])&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;let&lt;/span&gt; &lt;span style="COLOR: blue"&gt;mutable&lt;/span&gt; res = List.empty&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;for&lt;/span&gt; s &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; strings &lt;span style="COLOR: blue"&gt;do&lt;/span&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;        &lt;/span&gt;res&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&amp;lt;- s :: res&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;    &lt;/span&gt;printfn &lt;span style="COLOR: maroon"&gt;"%A"&lt;/span&gt; res&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="FONT-FAMILY: Consolas; FONT-SIZE: 9.5pt; mso-ansi-language: EN-US" lang="EN-US"&gt;main()&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;In conclusion, you need to look beyond whether a data structure is mutable or immutable to see whether it will perform well. In some circumstances F#’s immutable list can perform very well, i.e. when you only need the ability to append to the end of the collection and enumerate the collection. In other circumstance they may perform poorly, i.e. when you need random access to items within the lists. These performance tradeoffs also need to be balanced with the fact the F# list can also safely be shared between threads or tasks, we can be very convenient in many concurrency scenarios.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1659.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/04/18/1659.aspx</guid>
            <pubDate>Sun, 18 Apr 2010 08:10:01 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1659.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/04/18/1659.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1659.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1659.aspx</trackback:ping>
        </item>
        <item>
            <title>#Develop, F# and Google Summer of Code</title>
            <category>F# updates</category>
            <link>http://strangelights.com/blog/archive/2010/03/24/1658.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;A few days ago Chris Wille, the man behind &lt;a href="http://www.icsharpcode.net/OpenSource/SD/"&gt;#Develop&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt; contacted me to say that #Develop had been accepted on the &lt;a href="http://code.google.com/soc/"&gt;Google summer of code&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt; scheme. Essentially Google summer of code means that Google will pay CS students to spend their summer writing code for open source projects. Chris told me one area they are interested in extending is the F# integration into #Develop; particularly they’d like to get the auto-completion working. So if you’re a CS student on the lookout for a summer job, you could end up being paid by Google to work on F#! &lt;a href="mailto:robert@strangelights.com"&gt;Contact me &lt;/a&gt;if you are interested.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1658.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/03/24/1658.aspx</guid>
            <pubDate>Wed, 24 Mar 2010 19:43:09 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1658.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/03/24/1658.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1658.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1658.aspx</trackback:ping>
        </item>
        <item>
            <title>Beginning F# Workshop and Progressive.Net</title>
            <category>F# updates</category>
            <category>.NET general</category>
            <category>Functional Programming</category>
            <link>http://strangelights.com/blog/archive/2010/03/20/1657.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;I’ll in London on the 10th/11th May giving a two day course entitle &lt;a href="http://skillsmatter.com/course/open-source-dot-net/robert-pickerings-beginning-f-workshop/ps-771"&gt;“Beginning F# Workshop”&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt; in conjunction with the lovely folks at &lt;a href="http://skillsmatter.com"&gt;Skills Matter&lt;/a&gt;. I think I give a fairly good description of the course on the workshop webpage, so I wanted to use this blog post to talk about why you would want to attend. I believe, as I stated in my book, that functional programming will be the next big wave in programming, and that F# will be one of the languages at the forefront of this functional programming renaissance. I don’t believe this will be sole driven by the move from one core processors to many core processors and the move towards parallel programming that this will create, though this will undoubtedly help. I believe functional programming is will be the next big wave in programming as functional languages provide better ways of raising the level of abstraction than procedural and object oriented programming languages do. Sadek Drobi has a nice talk on &lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/computation-abstraction"&gt;computation abstraction&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt; in he explains some of these new types of abstraction that functional programming languages offer. With the kind of systems we are building today, we are now ready to start working at these new levels of abstraction.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;While I don’t believe functional programming to be any harder than object oriented programming or procedural programming, I do believe it takes a bit of a mind shift to get to know the functional programming style. This course will offer a nice gentle introduction to how to use functional programming techniques in F# and how to mix these with the object oriented and imperative styles were necessary. So whether or not you’re planning to use F# or not (although of course, I think you should be), I think this course will give you a new and interesting perspective on programming. &lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&lt;a href="https://skillsmatter.com/register-online/course/1719"&gt;Book before 26th March and save over £300&lt;/a&gt;.&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;I’m also very happy to announce that I’ll be running a workshop on F# at &lt;a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dotnet-tutorials-2010"&gt;progressive.net&lt;/a&gt;, its taking place in London on 12th -14th May. It’s a real pleasure to be able to be involved with an event that has speaks like David Laribee, Oren Eini (a.k.a. Ayende Rahien), Hamilton Verissimo de Oliveira, Sebastien Lambla, and Mike Hadlow. For those of you who made it last year, (or &lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/f-tutorial"&gt;have seen the podcast&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;) the workshop will be along similar lines except I’ll be trying to make it much more interactive. Instead of just following along, as I present the concepts I’ll be adding a series of hands on labs to help get participants solving problems in F# for themselves. In many respects the tutorial I’m giving will be a cut down version of the tutorial I’m giving beforehand (but if you planning to attend both you can always go and see Seb’s session on RESTful architectures). If you’re in any doubt whether you should attend &lt;a href="http://dylanbeattie.blogspot.com/2010/03/managers-perspective-why-attend.html"&gt;you should probably read this blog post&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt; by Dylan Beattie. &lt;a href="https://skillsmatter.com/register-online/conf/612"&gt;Book before tomorrow (March 21st) and you'll save nearly 50%&lt;/a&gt;!&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1657.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/03/20/1657.aspx</guid>
            <pubDate>Sat, 20 Mar 2010 14:04:04 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1657.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/03/20/1657.aspx#feedback</comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1657.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1657.aspx</trackback:ping>
        </item>
        <item>
            <title>My Talk with Don and Adam at TechDays 2010</title>
            <category>F# updates</category>
            <category>France</category>
            <link>http://strangelights.com/blog/archive/2010/02/13/1654.aspx</link>
            <description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;font size="3"&gt;It was TechDays this week and I was lucky enough to be invited to speak with &lt;a href="http://blogs.msdn.com/dsyme/"&gt;Don Syme&lt;/a&gt; and &lt;a href="http://www.linkedin.com/in/granicz"&gt;Adam Granicz&lt;/a&gt;. Don gave a short introduction to mailboxes/agent programming in F# and Adam gave an introduction to &lt;a href="http://www.intellifactory.com/products/wsp/Home.aspx"&gt;IntelliFactory’s WebSharper project&lt;/a&gt;.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;font size="3"&gt;My section of the talk was on using F# with &lt;a href="http://research.microsoft.com/en-us/projects/Accelerator/"&gt;Microsoft Accelerator&lt;/a&gt;. Accelerator is an interesting product, it allows you to take advance of the GPU of your PC. Even the most basic PCs have a specialized graphics chip and for most of the tasks you perform on your PC it just sits there doing nothing. GPU are very good at performing floating point operations on matrices, they’re specialized hardware that allow you to perform matrix operations in a highly parallel way. The DirectX runtime takes advantage of this to perform the operations need to for 3D shading. However, there are other algorithms that could benefit from being run on the GPU and Accelerator opens up the GPU for just about any algorithm that you can imagine.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;font size="3"&gt;The usage I demonstrated was the game of life running either on the CPU or with the calculations performed on the GPU. On my current machine this yields a 10 fold increase in execution time. It takes advantage of F# quotations system (similar to C#’s expression trees), these are used to allow you to compile an algorithm in F# to operations that the Accelerator runtime understands. This is how we can easily show an algorithm running on the CPU and then switch it to the GPU. The slides can be found here and code examples here. The example comes from &lt;a href="http://tomasp.net"&gt;Tomáš Petříček’s&lt;/a&gt; web site and more details &lt;a href="http://tomasp.net/blog/accelerator-life-game.aspx"&gt;can be found about in this series of articles&lt;/a&gt;.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;font size="3"&gt;I had several people come and access me for more information about Accelerator at the end of the talk. &lt;a href="https://connect.microsoft.com/acceleratorv2"&gt;Accelerator v2 is available from Microsoft connected, here&lt;/a&gt;. It’s currently licensed under a restrictive MSR license that stipulates non-commercial use only. However, in stating the objectives of their project, they say “Accelerator v2 is an MSR incubation project whose goal is to validate the architecture and API approach with high quality engineering sufficient to gather real-world usage data.” It would seem to me that in order to achieve this objective they would need to have some commercial users, so maybe if you contact the team directly they would be able to get you a less restrictive license. I certainly have a project in mind for accelerator, though at this point it would be non-commercial. If you’re interested check out activity on my github account, you can probably guess what my idea is.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Calibri&amp;quot;, &amp;quot;sans-serif&amp;quot;; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;font face="Arial" size="3"&gt;The &lt;/font&gt;&lt;a href="http://strangelights.com/blog/downloads/TechDays2010_Robert.pptx"&gt;&lt;font face="Arial" size="3"&gt;slides can be found here&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial" size="3"&gt; and the &lt;/font&gt;&lt;a href="http://strangelights.com/blog/downloads/accelerator-quotations.zip"&gt;&lt;font face="Arial" size="3"&gt;code can be found here&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial" size="3"&gt;. The session was videoed, I’ll let you know as soon as it’s on line.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: &amp;quot;Calibri&amp;quot;, &amp;quot;sans-serif&amp;quot;; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;font face="Arial"&gt;&lt;font size="3"&gt;&lt;strong&gt;Update:&lt;/strong&gt; The video can &lt;/font&gt;&lt;/font&gt;&lt;a href="http://www.microsoft.com/france/vision/mstechdays10/Webcast.aspx?EID=eefa8b68-f335-4370-99a6-c01c5efc6e70"&gt;&lt;font face="Arial" size="3"&gt;now be seen here.&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1654.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/02/13/1654.aspx</guid>
            <pubDate>Sat, 13 Feb 2010 16:13:21 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1654.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/02/13/1654.aspx#feedback</comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1654.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1654.aspx</trackback:ping>
        </item>
        <item>
            <title>FunctionalNHibernate: RCed and now with added build server</title>
            <category>F# updates</category>
            <link>http://strangelights.com/blog/archive/2010/02/13/1653.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;I’m very happy to announce that &lt;a href="http://bitbucket.org/robertpi/functionalnhibernate/"&gt;FunctionalNHibernate &lt;/a&gt;has now been updated to work with the recently released Visual Studio 2010 release candidate. Also, it has now been setup to run on the &lt;a href="http://teamcity.codebetter.com/"&gt;codebetter build server&lt;/a&gt;. You can create a log on and download the latest binaries from here (you need an account but it’s very simple to create one).&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;A huge thanks to &lt;a href="http://www.navision-blog.de"&gt;Steffen Forkmann&lt;/a&gt;, who did the work to get this set up.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1653.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/02/13/1653.aspx</guid>
            <pubDate>Sat, 13 Feb 2010 14:48:16 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1653.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/02/13/1653.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1653.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1653.aspx</trackback:ping>
        </item>
        <item>
            <title>Functional Programming eXchange: The Videos</title>
            <category>F# updates</category>
            <category>Functional Programming</category>
            <link>http://strangelights.com/blog/archive/2010/02/13/1652.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;I’ve recently noticed that talks from Functional Programming eXchange, that I organized and spoke at, are now online. This is a great resource for people looking for some more advanced material on Functional Programming. So here are the videos:&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;SADEK DROBI: Computation Abstraction&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;&lt;a href="http://skillsmatter.com/podcast/cloud-grid/computation-abstraction"&gt;http://skillsmatter.com/podcast/cloud-grid/computation-abstraction&lt;o:p /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;MATTHEW SACKMAN: Supercharged Rabbit: Resource Management at High Speed in Erlang&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;a href="http://skillsmatter.com/podcast/cloud-grid/supercharged-rabbit-resource-management-at-high-speed-in-erlang"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;http://skillsmatter.com/podcast/cloud-grid/supercharged-rabbit-resource-management-at-high-speed-in-erlang&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;ANTON SCHWAIGHOFER: F# and Units-of-measure for Technical Computing&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;a href="http://skillsmatter.com/podcast/cloud-grid/f-and-units-of-measure-for-technical-computing"&gt;&lt;font size="3"&gt;http://skillsmatter.com/podcast/cloud-grid/f-and-units-of-measure-for-technical-computing&lt;/font&gt;&lt;/a&gt;&lt;o:p /&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;GANESH SITTAMPALAM: Functional Programming for Quantitative Modeling at Credit Suisse&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;a href="http://skillsmatter.com/podcast/cloud-grid/functional-programming-for-quantitative-modelling-at-credit-suisse"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;http://skillsmatter.com/podcast/cloud-grid/functional-programming-for-quantitative-modelling-at-credit-suisse&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;DUNCAN COUTTS: Strong Types and Pure Functions&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;a href="http://skillsmatter.com/podcast/cloud-grid/strong-types-and-pure-functions"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;http://skillsmatter.com/podcast/cloud-grid/strong-types-and-pure-functions&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;ROBERT PICKERING: Combinators, DSLs, HTML and F#&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;&lt;a href="http://skillsmatter.com/podcast/design-architecture/using-combinators-to-tackle-the-html-rendering-problem"&gt;http://skillsmatter.com/podcast/design-architecture/using-combinators-to-tackle-the-html-rendering-problem&lt;o:p /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1652.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2010/02/13/1652.aspx</guid>
            <pubDate>Sat, 13 Feb 2010 14:30:23 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1652.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2010/02/13/1652.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1652.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1652.aspx</trackback:ping>
        </item>
        <item>
            <title>Update about FunctionalNHibernate</title>
            <category>F# updates</category>
            <category>FunctionalNHibernate</category>
            <link>http://strangelights.com/blog/archive/2009/12/26/1651.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;I’ve been working quite a lot on the FunctionalNHibernate project recently. I’ve implemented the following features:&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;- Save records with native F# lists.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;- Create one-to-many and many-to-many relations&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;- Generate identities automatically&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;We can now do just about everything you the &lt;a href="http://github.com/jagregory/fluent-nhibernate/tree/master/src/Examples.FirstProject"&gt;FluentNHibernate first example&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt; project does, although admittedly this is just a very small subset of what one can do with FluentNHibernate&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;and NHibernate itself. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;In the future I’ll be looking at how to broadening what you can do with FunctionalNHibernate ClassMap descriptions and improve data access by integrating Linq like features.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;In terms of usability, it’s still early days but I think it’s probably usable for a project with simple data access needs. Obviously you need to ready to put up with some teething problems and there will definitely be some breaking changes as the project evolves.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;The project uses Mercurial for source control and is hosted at bitbucket.org, but don’t need to install Mercurial to use it, you can download the zipped source here: &lt;/font&gt;&lt;/span&gt;&lt;a href="http://bitbucket.org/robertpi/functionalnhibernate/downloads/"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;http://bitbucket.org/robertpi/functionalnhibernate/downloads/&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;I’ve licensed it under a simple BSD like license: &lt;/font&gt;&lt;/span&gt;&lt;a href="http://bitbucket.org/robertpi/functionalnhibernate/src/tip/LICENSE.txt"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;http://bitbucket.org/robertpi/functionalnhibernate/src/tip/LICENSE.txt&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language: EN-US"&gt;&lt;font size="3"&gt; &lt;span lang="EN-US"&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;I’ve also created a google group for announcements, discussions and questions about the project:&lt;br /&gt;
&lt;a href="http://groups.google.com/group/functionalnhibernate"&gt;http://groups.google.com/group/functionalnhibernate&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1651.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2009/12/26/1651.aspx</guid>
            <pubDate>Sat, 26 Dec 2009 13:21:16 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1651.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2009/12/26/1651.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1651.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1651.aspx</trackback:ping>
        </item>
        <item>
            <title>Introducing FunctionalNHibernate</title>
            <category>F# updates</category>
            <link>http://strangelights.com/blog/archive/2009/12/20/1650.aspx</link>
            <description>&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;It’s already fairly well documented that &lt;a href="http://www.atrevido.net/blog/2009/04/01/Using+Fluent+NHibernate+With+F.aspx"&gt;F# doesn’t play too well with NHibernate and Fluent NHibernate&lt;/a&gt;, although you can &lt;a href="http://www.atrevido.net/blog/2009/04/23/Update+On+F+With+Fluent+NHibernate.aspx"&gt;make it play a littler nice with a bit of effort&lt;/a&gt;. However there are a few fundamental problems with this approach. The first is F# class’ are not really designed to be data containers because that’s what its record type is for. The second is that F# class’ do not put too much emphasis on virtual methods as in functional programming we tend to using pass functions as values as a way to achieve polymorphism rather than virtual methods. Third and finally FluentNHibernate works with C#’s expression trees, it would be nice use F#’s quotation system instead. &lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;Record types are a fixed collection of names and fields a lot like the row in a database. Below shows a record type we’d like to be able to store in a database table. Here we show an invoice record type that we’d like to serialize in the database.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&lt;img alt="Record type" src="/blog/Photos/FunNH_record.png" /&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;What we’d like to be able to write is a mapping class that describes how it should be serialized, like you can do in FluentNHibernate:&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&lt;img alt="functional nhibernate mapping" src="/blog/photos/FunNH_mapping.png" /&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;The idea of FunctionalNHibernate is to provide a layer to do just this. As you see we provide a neat way to describe the mappings. We achieve the record serialization by providing a custom tupilizer for F# record types. There’s also the start of a wrapper for the SessionFactory that will hopefully allow you to store and retrieve data in way more natural for F#. &lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;The idea of this project is not to detract from FluentNHibernate, it’s a great project and works really nicely from C#. I want to provide something that will work equally well from F#. We’re a long way behind them and to be honest the project isn’t really usable yet. I have project in mind that I want to use it on, so hopefully I’ll be able to improve it as I go along.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;The result is you can now write the following program to store, update and retrieve our invoice record type:&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;o:p&gt;&lt;font size="3"&gt;&lt;img alt="fun nhibernate program" src="/blog/photos/FunNH_prog.png" /&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 10pt" class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN-US" lang="EN-US"&gt;&lt;font size="3"&gt;The project is hosted on &lt;a href="http://bitbucket.org/robertpi/functionalnhibernate/"&gt;bitbucket.org&lt;/a&gt;, where you can explore or download the code. Feel free to drop me a line if you want to help out.&lt;o:p /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1650.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Pickering</dc:creator>
            <guid>http://strangelights.com/blog/archive/2009/12/20/1650.aspx</guid>
            <pubDate>Sun, 20 Dec 2009 11:26:44 GMT</pubDate>
            <wfw:comment>http://strangelights.com/blog/comments/1650.aspx</wfw:comment>
            <comments>http://strangelights.com/blog/archive/2009/12/20/1650.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://strangelights.com/blog/comments/commentRss/1650.aspx</wfw:commentRss>
            <trackback:ping>http://strangelights.com/blog/services/trackbacks/1650.aspx</trackback:ping>
        </item>
    </channel>
</rss>